Agent Kit exposes MCP tools over POST /mcp (JSON-RPC tools/list and tools/call). Do not rely on a fixed tool list in documentation — names and count change as Agent Kit grows.
Discover on every connect. Call tools/list (or open the dashboard Tools page) for the live catalog: each entry includes name, description, and inputSchema. Wire your LLM or backend from that response.
Authentication
POST https://agent-kit.abstraxn.com/mcp
Authorization: <application-api-key-or-agent-api-key>
Content-Type: application/json
| Key type | agent_id in arguments |
|---|
| Application API key (dashboard Overview) | Required when multiple agents exist |
Per-agent API key (createAgent → agent.apiKey) | Optional; must match that agent if provided |
OAuth and consent use scopes, not individual tool names. New tools are included when they fit the same category.
| Scope | What it covers |
|---|
mcp:tools:read | Wallet/chain reads and x402 catalog discovery |
mcp:tools:transfer | Unsigned transfer intents — your backend signs and broadcasts |
mcp:tools:paid | Fixed-price and external x402 HTTP calls |
After OAuth or API-key connect, call tools/list to see which names are available for your granted scopes.
tools/list → pick a name and read inputSchema.
tools/call with params.name and params.arguments (JSON object matching the schema).
- For application API keys, pass
agent_id in arguments when the schema requires an agent (typical for wallet actions).
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "<from-tools-list>",
"arguments": {
"agent_id": "AGENT_UUID"
}
}
}
Some tools return payment required (-32402) on the first call. That is expected:
- Parse
accepts / payment metadata from the error or tool result.
- On your backend, sign
paymentPayload with the agent accessKey.
- Retry
tools/call with paymentPayload at the top level of params (sibling to name / arguments).
Unsigned transfer intents are different: Agent Kit returns an unsigned transaction; your backend signs with accessKey and broadcasts — it does not use the x402 retry flow.
Details: x402 payments.
APP_KEY="<dashboard-api-key>"
MCP="https://agent-kit.abstraxn.com/mcp"
curl -s -X POST "$MCP" \
-H "Authorization: $APP_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq .
Use a name from result.tools[] for any tools/call example in Smoke test.
LLM integration pattern
The sample backend API (NestJS reference):
- Sets
MCP_SERVER_URL + MCP_SERVER_AUTH_TOKEN (= application API key).
- On startup (and after reconnect), runs
initialize + tools/list — map whatever the server returns.
- Maps discovered tools to OpenAI (or other LLM) function definitions.
- During chat, the LLM may call
tools/call; results are fed back into the model.
- Paid tools trigger x402 signing in
AgentSigningService.
Your frontend only talks to your JWT API — never to MCP directly.
Next steps