Automate Tabductor over MCP
Everything you can do with a workflow from code goes through one endpoint: a Model Context Protocol server at http://staging.tabductor.com/api/mcp. Any MCP client — an AI agent, an IDE, or a plain HTTP request — can create workflows from a prompt, run them, poll for the structured result, and schedule them.
Authentication
Create an API key under Settings → Developer. The key is shown once; store it as a secret. Send it on every request:
Authorization: Bearer <your key>
A key acts as your account: workflows it creates are yours, and its usage draws from your prepaid balance. Revoke a key on the same page and it stops working immediately. Requests without a valid key are rejected with 401.
Connect an MCP client
The server speaks streamable HTTP and is stateless, so no session setup is required. In Claude Code:
claude mcp add --transport http tabductor http://staging.tabductor.com/api/mcp \ --header "Authorization: Bearer $TABDUCTOR_KEY"
Clients that take a JSON configuration use the same URL and header:
{
"mcpServers": {
"tabductor": {
"type": "http",
"url": "http://staging.tabductor.com/api/mcp",
"headers": {
"Authorization": "Bearer ${TABDUCTOR_KEY}"
}
}
}
}Call it over plain HTTP
Each request is a JSON-RPC 2.0 message; responses come back as JSON. Send both content types in Accept.
curl -s http://staging.tabductor.com/api/mcp \
-H "Authorization: Bearer $TABDUCTOR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'curl -s http://staging.tabductor.com/api/mcp \
-H "Authorization: Bearer $TABDUCTOR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"workflow_publish","arguments":{"prompt":"Every morning, collect the top 10 Hacker News stories with title and URL."}}}'A tool's output is in result.structuredContent (and, as text, in result.content[0].text).
The execution flow
- Publish —
workflow_publishwith a directing prompt and, optionally, a JSON Schema for the final result. Returns theworkflowId. - Trigger —
workflow_triggerstarts the workflow. Passinputsfor$variablereferences and arequest_idyou can reuse when retrying a request whose response you didn't receive. Returns anexecutionId. - Poll —
workflow_statuswith both IDs untilfinishedis true. Back off between polls; runs take seconds to minutes. - Read the result — when
resultReadyis true,resultholds the JSON that matches your schema. Failed or cancelled executions carryerrors.
To change what a workflow does, call workflow_update with a new prompt; to run it on a timetable, workflow_schedule with a cron expression and time zone. See the tool reference for every parameter.
Usage and billing
There are no plans or seats. Work started through the API — managed browser time, proxy traffic and AI model usage — is paid as you go from your prepaid balance, at the same rates as in the app (see Pricing). When the balance runs out, new paid work is refused until you top up.