Skip to main content
Otto Intel MCP exposes market intelligence and free tools that prepare unsigned transactions. It uses Streamable HTTP at https://mcp.ottoai.services. The same transport also accepts the conventional /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. Run tools/list for the current tool descriptions and full input schemas, then call the free otto_catalog tool. A first intelligence request can be:
This is the inner MCP request; an MCP SDK wraps it in JSON-RPC. A successful tool result contains a text part holding JSON. Inspect 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+:
Create the arguments, inspect the available schemas and make the example read:
Each output directory must be new. 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.
Exit 0 means a parseable result was saved; inspect its actual freshness, coverage and contents before using it. Exit 2 means the saved response is a tool refusal or payment challenge. Exit 1 means a local, transport or protocol failure; 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

If read-1/response.json contains error: "payment_required", validate it with the installed public client:
Check the recipient, token, network, amount and authorization window. Version 0.1.3 pins this 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.
Continue only if signing succeeded and 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:
Check both 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:
The helper checks the saved request fingerprint and, after the first paid attempt, the payment fingerprint. It restores the original arguments and makes one call; it neither signs again nor retries automatically. A same-authorization retry can still settle the original payment if it has not settled yet. It is not a free execution retry. For unresolved or expired delivery, follow the recovery guidance.

Continue from data to a verified plan

Continue with the complete Base swap walkthrough. It uses a separate otto-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 return isError: true and a JSON body with error: "payment_required".
  1. Inspect payment_required.accepts: the network, asset, recipient, amount and authorization lifetime. payment.requirement is the same requirement in a flatter form; payment_required_header is the base64 header form.
  2. Sign the selected requirement locally with a wallet holding USDC on Base.
  3. Retry the same tool arguments with the encoded authorization in x_payment.
For an existing MCP integration using the x402 SDK, this creates the payment value from the parsed challenge result. Install @x402/core, @x402/evm and viem; load the wallet key through your local secret configuration, never through an agent conversation.
The authorization expires after the window in the challenge, currently 300 seconds. An EIP-3009 USDC payment needs no Base ETH in the paying wallet. Trading from an EOA has separate gas requirements.

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 in X402_PRIVATE_KEY. Inject that variable using your MCP client’s local secret configuration, then configure this stdio command:
This process must receive 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 adds otto_crypto_news (GET /crypto-news, 0.001USDC)andottonewsrecaps(GET/newsrecaps,0.001 USDC) and `otto_news_recaps` (GET `/news-recaps`, 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.