/mcp alias. Adding this server grants no trading authority.
Connect
Use the instruction for your client.Claude Code
Claude Desktop
Customize → Connectors → + → Add custom connector → paste https://mcp.ottoai.services.Cursor
Codex CLI
ChatGPT
Custom MCP connectors require a ChatGPT plan that supports them and may be gated by your workspace admin. In ChatGPT’s connector settings, add a custom connector and paste https://mcp.ottoai.services. ChatGPT’s exact menu path changes over time — follow its current connector/developer settings. The client handles MCP initialization and the HTTP session. Runtools/list for the current tool descriptions and full input schemas, then call the free otto_catalog tool.
A first intelligence request can be:
isError and the parsed body before treating it as data.
Run your first request from a terminal
The client below uses only public packages and Otto’s public MCP. It discovers tools, reads data and preserves the response. It does not load a wallet key, create permission or sign a transaction. Use Bash and Node 22+:Copy the client into mcp-call.mjs
Copy the client into mcp-call.mjs
tools-1/tools.json contains the discovered schemas; morePages tells you whether the server returned another page. Every tool call saves:
request.json: the exact tool, original arguments, timestamp and request fingerprint.response.mcp.json: the complete MCP result, including payment metadata.response.json: its parsed JSON body, ready for your agent to use.summary.json: whether a result or tool refusal was received.
error.json, when it could be written, records whether a call was attempted. None of these outcomes alone proves transaction settlement.
Keep the folders private: they contain your inputs and purchased data. The Unix permissions above do not configure Windows access controls; use a private workspace there. Never put keys or Otto service credentials in arguments files. Discovering a protected delegation tool does not grant access to it.
Complete a paid read
Ifread-1/response.json contains error: "payment_required", validate it with the installed public client:
base-season example to 0.002 USDC on Base. An unexpected challenge is refused; do not change the verifier to make it pass. Its fixed price table covers four no-argument intelligence routes, not Otto’s entire catalog. Other routes use the SDK integration below.
To purchase the read, load your payment wallet key through your local secret manager or this hidden prompt. The wallet needs Base USDC; it does not need Base ETH for this payment.
payment.json contains x_payment. That file is a spend authorization: keep it private and never paste it into an agent conversation. The noclobber setting refuses to overwrite an existing authorization; preserve it for recovery instead of signing again. Send it with the original saved request:
paid-1/response.json and paid-1/response.mcp.json. The latter preserves _meta["com.ottoai/payment-response"] as the original { header, value } when supplied. A receipt is separate from whether the expected data arrived; settlementMetadataPresent does not validate that receipt.
If delivery is interrupted, make one explicit retry from the paid attempt, using the same payment file and a new output folder:
Continue from data to a verified plan
Continue with the complete Base swap walkthrough. It uses a separateotto-swap folder and saves your own account, exact input and independently chosen minimum output before requesting an unsigned plan. Follow that walkthrough from setup onward: its envelope.json, intent.json and prepare.json stay together through verification and any later signing.
Preparation and verification move no funds. The walkthrough’s separate signing and submission step uses your own EOA, with its own USDC and ETH gas. This public client does not connect an external agent to the app’s delegated Coinbase account. Permission management, supported execution and moving funds out retain the account-specific boundaries.
Intelligence tools
Use
ticker for SEC issuer reads, manager for institutional holdings, optional thesis for tokenized equities, and a network-qualified stock for pool discovery. Exact accepted inputs come from tools/list.
Read the result’s freshness and coverage fields. SEC filing methodology explains amendments, missing data and what filing figures mean.
Pay for an intelligence call
On the hosted server, the first successful eligible intelligence call from your network address is free. A shared network may already have used it. Later calls returnisError: true and a JSON body with error: "payment_required".
- Inspect
payment_required.accepts: the network, asset, recipient, amount and authorization lifetime.payment.requirementis the same requirement in a flatter form;payment_required_headeris the base64 header form. - Sign the selected requirement locally with a wallet holding USDC on Base.
- Retry the same tool arguments with the encoded authorization in
x_payment.
result. Install @x402/core, @x402/evm and viem; load the wallet key through your local secret configuration, never through an agent conversation.
Save receipts and retry safely
Keep the complete MCP response, original arguments and signed payment payload. Paid results carry settlement metadata under_meta["com.ottoai/payment-response"] when available. Check that the expected result arrived as well as the receipt.
If delivery drops, promptly retry the exact same tool input with that same signed payload. Signing again creates another possible payment. The paid rail can replay a stored response without a second settlement while its delivery window permits; an authorization cannot be reused for a different input. For settlement_unconfirmed, follow the response’s retry instruction. For delivery_replay_expired or an unresolved paid delivery, retain transaction evidence and contact support. Replay is not unlimited and a refund is not automatic.
Run the intelligence server locally
The published package is otto-intel-mcp@0.1.3. It needs Node 22+ and a Base-USDC wallet key inX402_PRIVATE_KEY. Inject that variable using your MCP client’s local secret configuration, then configure this stdio command:
X402_PRIVATE_KEY in its environment. It automatically pays every intelligence call from that wallet; it has no hosted free-call allowance. Optional settings are X402_RPC_URL and X402_TIMEOUT_MS (default 30000). The published package’s default is intelligence tools; use the hosted server for the constructors described below.
Free transaction tools and menus
otto_prepare_* tools build unsigned action plans. Prepare and sign transactions covers their schemas, checks and the supported Base EOA execution client.
These menus also remain free:
Public MCP access does not unlock protected delegated submission or private permission-management tools. Those are authenticated server-to-server operations used by Otto’s app. The public permission CLI manages permission; it is not a general delegated execution client.
Crypto news and recaps
The source candidate addsotto_crypto_news (GET /crypto-news, 0.003 USDC). Check the deployed tools/list for availability. Both accept {}; hosted paid retries add x_payment.
Crypto news is paid-only and leaves the free allowance unspent. News recaps can use the allowance when a cached result is available; a cold or unavailable read returns a payment challenge without generating content for free. Stale-but-servable cached recaps can use the allowance and retain their upstream degraded and freshness indicators; the backend refuses results beyond its three-hour hard age ceiling. Responses preserve upstream source links, missing-link indicators, analysis windows and freshness metadata.