In about ten minutes your agent will have a tool nobody wrote by hand. Graft’s model writes it against a service’s API, tests it against the real service without changing anything, and adds it to your agent’s list. This guide uses httpbin, a public API that needs no account, and then GitHub.

The fastest path

getgraft.ai has this prompt with the connection steps for your agent already filled in: pick Claude, ChatGPT, Claude Code, Codex, Hermes or OpenClaw there and copy it. The version below is the general one. Paste it into your agent; it has the agent give you the one step you do by hand, connecting Graft, and then drive the rest through Graft’s tools: connecting a service and approving the build arrive as cards in the chat or as pages Graft sends you to, and the tool is built and run for you.
Or follow the steps yourself.

What you need

  • A Graft account. Graft Cloud’s console is at https://app.getgraft.ai, and Graft Cloud is free for a limited time during the alpha. Self-hosted Graft answers at http://localhost:3000 once Docker Compose has brought it up. The steps are the same either way; only the URL changes.
  • An agent that speaks MCP. Only the first step differs between agents.
1

Connect your agent

Add Graft as a custom connector with one URL: https://app.getgraft.ai/mcp, or your deployment’s public origin plus /mcp. In Claude, Settings → Connectors → Add custom connector; in ChatGPT, Settings → Connectors → Create, with Developer mode turned on under Advanced settings. Leave any OAuth client id and secret fields empty: Graft registers the product itself.Choose Connect. The product opens Graft’s consent page; sign in or create an account. Keep A new agent, name it for the product, and choose Connect. That consent creates the agent the connection will be. Back in the product, turn the Graft connector on in the tools menu of a conversation.The full steps, with what each screen shows, are on Claude and ChatGPT.
For self-hosted Graft the URL is your deployment’s origin plus /mcp; the agent’s page in the console shows the right block for your deployment.
2

Ask for something no tool covers

The agent calls find_tool first. Nothing matches, and httpbin is not connected, so it calls request_connection with what it read in httpbin’s documentation. In Claude and ChatGPT the ask is a card in the chat; elsewhere the agent hands you a link into the console.
3

Connect the service

The card names the vendor and the hosts and has one button. The link opens the same ask in the console, where the form arrives pre-filled with the agent’s proposal: the vendor slug httpbin, the primary host https://httpbin.org, the auth scheme and its parameters, and the documentation page the agent read. It names every host the credential will be sent to, and nothing else. Edit anything that is wrong.httpbin has no accounts, so it connects with no key at all. Choose Connect, on the card or on the form. The connection lands in this agent’s scope, and the agent’s waiting call answers connected.
A secret is typed on Graft’s own form, never in the chat. If an agent ever asks you for a key in chat, do not give it one; it is told to hand you a link instead.
4

Approve the build

The agent now calls acquire. Before Graft’s model runs anything against the connection, you are asked once for this agent and this connection. Claude and ChatGPT draw the ask as a card in the chat with Allow and Decline; Hermes shows it as its own approval card, and any of its allow buttons is a yes; OpenClaw shows no card, so the agent relays a link and you answer under Pending actions.
5

Watch the tool land

acquire waits for the job and answers when it is done or when the wait runs out. Unfinished, the agent polls acquire_status, which waits for the next line, and relays each new progress line: reading the documentation, drafting the module, checking it, proving it with reads, publishing and dry-running it. When the dry run passes the tool is promoted and Graft tells the agent its list has changed.The new tool is httpbin__<name>, first-class, with its own schema. It is read-only, so calling it asks nothing. Ask the agent for another UUID.
Claude and ChatGPT read Graft’s tool list when a conversation starts, so a tool built during a chat is offered first-class from the next conversation. In the current one the agent runs it through run_tool, and acquire_status tells it so. Hermes and OpenClaw re-read the list on their own.
6

Do it again with a real service

The same shape: request_connection proposes github at https://api.github.com with a bearer token, you paste a personal access token on the form, you approve the build once for this agent and this connection, and a read tool lands. Ask for something that writes, a comment on an issue say, and the tool’s first call asks you once; the answer holds for this agent from then on.

What you have now

One agent, two connections, and two or three tools in your toolbox. Open the agent’s page in the console: Working set lists what is promoted, Approvals what you have answered, and History every promotion and demotion with its cause. A tool unused for 21 days leaves the working set on its own and stays in the toolbox, one request from coming back. A few more to try:

Where next

Claude and ChatGPT

Every screen of the connector flow, and how tools and approvals reach a chat.

Hermes

The full configuration, tool naming, and what Hermes does with approvals.

OpenClaw

The mcp.servers block in OpenClaw’s own schema and how approvals reach you without buttons.

Connecting a vendor

The connection form, field by field, and the host rule it enforces.