MCP
The console is a Model Context Protocol server. Any MCP client, Claude Code included, can call it to turn a sentence into a validated business process inside your tenant, and to ask everything the console's own assistant knows.
Connecting
| Endpoint | POST https://console.dev.ductileai.com/mcp |
|---|---|
| Transport | Streamable HTTP: one JSON-RPC 2.0 request per POST, one JSON answer. No session handshake is required; initialize is answered for clients that send it. |
| Protocol version | 2026-07-28 |
| Authentication | Authorization: Bearer dpt_…, a personal access token from Settings › Tokens. A console session cookie works too, for the browser. |
| Methods | initialize, ping, tools/list, tools/call, resources/list, resources/read |
Claude Code
claude mcp add ductile --transport http https://console.dev.ductileai.com/mcp \
--header "Authorization: Bearer dpt_…"
Then ask it, in words: "Using ductile, draft a process that reads new Shopify orders every hour and posts a summary to Slack." It calls resolve_blueprint, then compile_blueprint and validate_process, and hands you a definition you can open in the console.
Any client, by hand
curl -s https://console.dev.ductileai.com/mcp \
-H "Authorization: Bearer dpt_…" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -s https://console.dev.ductileai.com/mcp \
-H "Authorization: Bearer dpt_…" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"resolve_blueprint",
"arguments":{"text":"read a CSV from Box, uppercase every field, write it to the object store and email it as an attachment"}}}'
The tools
Fifteen tools, tenant-scoped: an agent id that comes back exists, is entitled to your plan, and the connections named are yours. The usual order is resolve, adjust, compile, validate.
| Tool | What it answers |
|---|---|
resolve_blueprint | Call this first. Give the request in the person's words (or a plan already understood) and get the blueprint: the exact source agents with their vendor endpoints, credential classes and samples; the shaping steps with their formulas; the target agents; the platform half; credits per run; and the unknowns with the assumptions taken. |
compile_blueprint | Turn a blueprint into the business process definition JSON, deterministically: head nodes with credential placeholders, the shaping subprocess, the gate where applied, the tail nodes, every wire, the embedded reject process. |
validate_process | Check a definition against the agent specs and the charter: unknown agents, missing required properties, wire counts and payload types, the reject route, plus the advice a complete process would still take. |
search_agents | Find agents for a step in the vendor's nouns ("list overdue invoices", "post a Slack message"): ids, verb and object, class (source, target, step), readiness (ready, usable, preview). |
get_agent | One agent in full: charter, wires, required properties, credential class, readiness signals, vendor endpoints, the sample records' columns. |
get_endpoint | The endpoint(s) an agent reaches, of any kind: http, jdbc, jms/amqp/kafka/mqtt, filesystem, object store, sftp. |
get_dapp | A vendor group's story: the vendor and its API, the API currency, constraints and traps, what is verified against the vendor and what is assumed, credential classes, docs. |
find_examples | Worked examples: a request in a person's words and the process it became, searched by words or by shape ("src:shopify -> filter>map -> tgt:slack"). |
get_samples | The sample records an agent ships, to build and test on before anything real is connected. |
get_vocabulary | The process vocabulary the validator and the pods speak, one section by id or all of them. |
search_functions | The formula language: the functions a transformation, enrichment or filter formula may use, searched by name or by intent. |
explain_failure | A step failed or a draft will not validate: what fixed the same failure on this agent before (a shape, never a value), then the general reading. |
get_currency | How current the knowledge about an agent or a vendor is, and where to fetch the latest: API version targeted, when it was grounded, announced sunsets, docs and changelog URLs. |
fetch_docs | Fetch a vendor documentation page live, by URL, and answer its text. Only hosts the knowledge base names as a vendor's docs are allowed. |
list_my_connections | The connections (credentials) this tenant already has, by name and vendor, never a secret, so "my Salesforce" binds to the account that exists. |
Resources
resources/list names the process vocabulary and the formula language as readable resources; resources/read returns one by URI. They are the same documents the validator and the pods speak, so a client can ground itself before drafting.
Limits and behaviour
- Calls are rate-limited per tenant and per person; a
429carriesretry-after. - A blueprint that names an agent your plan does not include is not returned; the tool says so and offers the nearest entitled alternative.
- Nothing a tool answers is a secret: connections come back by name and vendor only.
- Drafting through MCP is recorded like drafting in the console: the transcript is kept for your tenant's own review, and lessons learned from repairs feed the next draft.