Use this guide when you want end users to talk to their Abstraxn agent from ChatGPT, Claude, or your own product — not only from Cursor.
Three paths: (1) OAuth MCP for ChatGPT / Claude Web, (2) API key MCP for Claude Code / Cursor, (3) Backend bridge (@abstraxn/mcp-client) for any LLM API (OpenAI, Anthropic, Gemini).
Choose your integration
| Client | Auth | Setup |
|---|
| Cursor | Application or per-agent API key | MCP in Cursor |
| Claude Code | Per-agent API key + --header | Below |
| Claude Web / Desktop | OAuth 2.1 | Below |
| ChatGPT (Developer Mode) | OAuth 2.1 | Below |
| Your app (any LLM) | API key on your server | App integration + SDK |
Signing (transfer, x402 paymentPayload) still requires your backend with the agent accessKey — see Credentials.
Prerequisites
- Dashboard setup — create an agent and copy credentials.
- MCP URL from Agentic Stack → Overview (e.g.
https://agent-kit.abstraxn.com/mcp).
- For OAuth connectors:
MCP_OAUTH_ENABLED=true on the deployment. Kong on /mcp must use a pre-function plugin to strip Bearer before key-auth (see MCP integration).
Path 1 — Claude Code (API key)
Use the per-agent API key from createAgent (not the application key):
claude mcp add -s user web3-agent-kit https://agent-kit.abstraxn.com/mcp \
--header "Authorization: YOUR_PER_AGENT_API_KEY"
Verify:
Example prompt: “Check my Agent Kit wallet balance on Base.”
Path 2 — ChatGPT & Claude Web (OAuth)
ChatGPT and Claude Web expect a remote MCP server with OAuth 2.1 (no static API key in the connector UI).
After consent, the OAuth access_token is the same per-agent API key you pasted on the consent form. ChatGPT sends it as Authorization: Bearer <key> so Kong key-auth (with a Bearer strip pre-function) can validate /mcp without opening the route.
What Abstraxn exposes
| Endpoint | Purpose |
|---|
GET /.well-known/oauth-protected-resource | MCP resource metadata (RFC 9728) |
GET /.well-known/oauth-authorization-server | OAuth server metadata (RFC 8414) |
GET /oauth/authorize | Consent screen |
POST /oauth/token | Token exchange (PKCE) |
POST /oauth/register | Dynamic client registration |
POST /mcp | MCP JSON-RPC (Authorization: Bearer <per-agent-api-key> after OAuth) |
ChatGPT
- Settings → Apps → Advanced Settings → enable Developer Mode.
- Create app → name it Abstraxn Agent Kit.
- MCP server URL:
https://agent-kit.abstraxn.com/mcp
- Authentication: OAuth (ChatGPT discovers metadata automatically).
- On first tool use, complete the Authorize redirect.
- On the consent page, paste your per-agent API key from the dashboard.
- Use the app in chat (e.g.
/abstraxn if configured as slash command).
Claude Web & Desktop
- Settings → Connectors → Add custom connector.
- Name: Abstraxn Agent Kit
- URL:
https://agent-kit.abstraxn.com/mcp
- Click Connect → complete OAuth consent (per-agent API key on consent form).
Dev environment:
https://dev-agent-kit.abstraxn.com/mcp
OAuth scopes
Scopes gate categories of tools, not a fixed name list. New tools are added to Agent Kit over time; clients should call tools/list after connect to see every name available for the granted scopes.
| Scope | Category |
|---|
mcp:tools:read | Wallet/chain reads and x402 catalog discovery |
mcp:tools:transfer | Unsigned transfer intents (signing on your backend) |
mcp:tools:paid | Fixed-price and external x402 calls |
Call tools/list after connect for the live tool names and schemas. See MCP tools reference.
Connector icon (Claude / ChatGPT)
Claude and ChatGPT pick the connector icon from your MCP host — not from the name you type in the UI.
| Source | Where it is exposed |
|---|
OAuth logo_uri | GET /.well-known/oauth-authorization-server |
| Public favicon | GET /favicon.png and GET /favicon.ico on the same host as /mcp |
MCP serverInfo.icons | Returned in the initialize JSON-RPC response |
Canonical Abstraxn brand assets (used in OAuth logo_uri, MCP serverInfo.icons, and consent UI):
| Asset | URL |
|---|
| Favicon / connector icon | https://abstraxn.com/icon.png |
| Light logo (wordmark) | https://abstraxn.com/_next/static/media/logo.6a015f32.svg |
| Dark logo (wordmark) | https://abstraxn.com/_next/static/media/dark-mode.d252c03d.svg |
OAuth metadata and MCP initialize point at https://abstraxn.com/icon.png by default. The agent-kit host also redirects /favicon.png → that URL (useful when clients fetch favicon from the MCP domain).
Why you might still see an old or generic icon
- Kong blocked
/favicon.png — if the favicon URL returns 401 Key, Claude falls back to a generic MCP placeholder (colorful triangle / globe). Whitelist GET /favicon.ico and GET /favicon.png from Kong key-auth (same as OAuth discovery paths).
- Connector cached the first icon — Claude caches connector metadata. After deploying a new favicon, disconnect and re-add the connector (or toggle off → on in the Connectors menu).
- Client rollout — some Claude builds read
logo_uri from OAuth metadata; others use /favicon.png or MCP icons[]. Abstraxn exposes all three so icons update as clients adopt each mechanism.
Verify branding endpoints
# Canonical favicon (200 image/png)
curl -sS -D - -o /dev/null "https://abstraxn.com/icon.png"
# OAuth metadata must include logo_uri → abstraxn.com/icon.png
curl -sS "https://agent-kit.abstraxn.com/.well-known/oauth-authorization-server" | jq '.logo_uri'
# Optional: MCP host redirect (302 → abstraxn.com/icon.png; Kong must allow GET without key-auth)
curl -sS -D - -o /dev/null "https://agent-kit.abstraxn.com/favicon.png"
Optional env overrides when self-hosting:
| Variable | Default |
|---|
MCP_BRAND_FAVICON_URL | https://abstraxn.com/icon.png |
MCP_BRAND_LOGO_LIGHT_URL | https://abstraxn.com/_next/static/media/logo.6a015f32.svg |
MCP_BRAND_LOGO_DARK_URL | https://abstraxn.com/_next/static/media/dark-mode.d252c03d.svg |
MCP_BRAND_DOCUMENTATION_URL | https://docs.abstraxn.com/guides/ai/external-agents |
After fixing Kong + redeploying, reconnect the connector in Claude (Settings → Connectors → Abstraxn → disconnect → Add connector).
Path 3 — Any LLM via @abstraxn/mcp-client
Install the SDK in your backend (never in the browser):
npm install @abstraxn/mcp-client
import { AgentKitMcpClient, mcpToolsToOpenAi } from '@abstraxn/mcp-client';
const mcp = new AgentKitMcpClient({
serverUrl: process.env.MCP_SERVER_URL!,
authToken: process.env.MCP_SERVER_AUTH_TOKEN!,
defaultAgentId: session.agentKitId, // when using application API key
});
const tools = await mcp.discoverTools(); // live names from tools/list
const openAiTools = mcpToolsToOpenAi(tools);
// LLM returns tool_call → forward to MCP (use names from discoverTools only)
const toolName = tools[0].name;
const outcome = await mcp.callTool(toolName, { agent_id: session.agentKitId });
Works with OpenAI, Anthropic (tools API or OpenAI-compatible proxy), Gemini, OpenRouter, etc.
Full chat loop with signing: Full-stack app integration.
Streamable HTTP (2025-06-18)
Agent Kit supports Streamable HTTP for modern MCP clients:
POST /mcp — JSON-RPC; returns Mcp-Session-Id on initialize
GET /mcp — SSE heartbeat stream (optional)
DELETE /mcp — close session
The @abstraxn/mcp-client package handles session headers automatically.
ERC-8004 discovery
Registered agents publish MCP + OAuth metadata in the public registration file:
{
"services": [
{
"name": "MCP",
"endpoint": "https://agent-kit.abstraxn.com/mcp",
"version": "2025-06-18",
"security": {
"oauth2": {
"protectedResourceMetadata": "https://agent-kit.abstraxn.com/.well-known/oauth-protected-resource",
"scopes": ["mcp:tools:read", "mcp:tools:transfer", "mcp:tools:paid"]
},
"apiKey": { "header": "Authorization" }
}
}
]
}