Skip to main content

MCP Chain Selection

Protocol MCP tools accept optional chainId on each call — the same idea as REST ?chainId=, but as a tool argument instead of a query parameter. Omitted chainId uses Base (8453). That default does not follow DEFAULT_REST_CHAIN_ID.

Only Base is MCP-enabled today. Additional chains can be turned on with mcpEnabled without changing the tool shape.

See also REST chain selection.

Tool argument​

Pass chainId on protocol reads, prepares, history, discovery, approved tokens, and get_transaction_status.

FormatExample
JSON number"chainId": 8453
Decimal string"chainId": "8453"
CAIP-2"chainId": "eip155:8453"

Unknown, malformed, or MCP-disabled values return a tool error with code: "INVALID_INPUT" (not an HTTP 400).

{ "chainId": 8453 }
{ "id": "0x...", "chainId": "eip155:8453" }

list_chains has no chainId argument — it lists the registry.

Discover live chains​

Call list_chains. Top-level chainId is the MCP default (always Base). Each chains[] row includes mcp (selectable from MCP tools) and rest (selectable from REST ?chainId=). default is the MCP default (Base), not the REST default.

REST GET /catalog → chains[].mcp is the same hosted flag.

{
"chainId": 8453,
"chains": [
{
"chainId": 8453,
"caip2": "eip155:8453",
"name": "base",
"rest": true,
"mcp": true,
"default": true
}
]
}

Writes​

Prepare responses include chainId on the payload, unsignedTransactions, gasEstimates, and gasSummary. Connect the wallet to that chain before signing, then broadcast there. Pass the same chainId on get_transaction_status.

See Write workflow and Tools reference.