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 /catalogchains[].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.