Quickstart: Raw JSON-RPC
Pipeworx is an HTTP MCP gateway. Any client that can POST JSON-RPC 2.0 to a URL talks to it. No SDK required.
Endpoint
https://gateway.pipeworx.io/mcp
Or scoped variants:
https://gateway.pipeworx.io/<pack>/mcp # one pack
https://gateway.pipeworx.io/mcp?task=... # task-scoped
https://gateway.pipeworx.io/mcp?vertical=... # vertical-scoped
List tools
curl -X POST https://gateway.pipeworx.io/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
| jq '.result.tools[].name'
Call a tool
curl -X POST https://gateway.pipeworx.io/mcp \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ask_pipeworx",
"arguments": { "question": "What is the US trade deficit with China?" }
}
}'
The response shape:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{ "type": "text", "text": "<JSON-stringified tool output>" }],
"_meta": {
"tier": "anonymous",
"rateLimit": { "limit": 50, "remaining": 49, "resetAt": "..." },
"cost": { "total": 1, "components": [...] },
"cache": { "hit": false, "ttl_seconds": 300, "fresh_until": "..." }
}
}
}
result.content[0].text is a JSON string — parse it.
Other MCP methods
| Method | Purpose |
|---|---|
initialize | Returns server capabilities + instructions (read these — they tell agents how to use Pipeworx best) |
tools/list | List tools (with inputSchema.examples and outputSchema) |
tools/call | Invoke a tool |
resources/templates/list | List pipeworx:// URI patterns |
resources/read | Fetch a pipeworx://... resource |
prompts/list | List server-side prompt playbooks |
prompts/get | Get a prompt with arguments substituted |
Authentication
| Tier | How |
|---|---|
| Anonymous (50/day) | No auth |
| BYO key (500/day) | X-API-Key: your-key header |
| Free account (2,000/day) | Authorization: Bearer <token> (GitHub OAuth signup at pipeworx.io) |
| Paid (unlimited) | Authorization: Bearer <token> (Stripe subscription) |
Pass tool-specific API keys
For paid data sources (FRED, ATTOM, Altos), pass keys in the call args:
{
"name": "fred_get_series",
"arguments": {
"series_id": "MORTGAGE30US",
"_apiKey": "your-fred-api-key"
}
}
The _apiKey arg is stripped from analytics — it’s not logged.
TypeScript shortcut: @pipeworx/sdk
If you’re in JS/TS, the SDK wraps all of this:
import { Pipeworx } from '@pipeworx/sdk';
const pw = new Pipeworx();
const result = await pw.call('fred_get_series', { series_id: 'MORTGAGE30US' });
npm install @pipeworx/sdk