switch-chain
Switch blockchain networks in MetaMask by specifying chain ID or adding new chains with required parameters for Ethereum wallet operations.
Instructions
Switch the target chain.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | Yes | ID of chain to switch to. | |
| addEthereumChainParameter | No | Add not configured chains to Ethereum wallets. |
Implementation Reference
- src/tools/switch-chain.ts:25-44 (handler)The execute handler that switches to the specified chainId using wagmi's switchChain function. Optionally adds chain configuration if provided. Updates the internal chains state and returns the result as a JSON string.execute: async (args) => { const chainId = args.chainId as typeof wagmiConfig["chains"][number]["id"]; const addEthereumChainParameter = args.addEthereumChainParameter; const result = await switchChain(wagmiConfig, { chainId, addEthereumChainParameter, }); wagmiConfig._internal.chains.setState(x => [...x, result]); return { content: [ { type: "text", text: JSONStringify(result), }, ], }; },
- src/tools/switch-chain.ts:11-24 (schema)Zod input schema defining required chainId and optional addEthereumChainParameter for configuring new chains.parameters: z.object({ chainId: z.coerce.number().describe("ID of chain to switch to."), addEthereumChainParameter: z.object({ chainName: z.string(), nativeCurrency: z.object({ name: z.string(), symbol: z.string(), decimals: z.coerce.number(), }), rpcUrls: z.string().array().min(1), blockExplorerUrls: z.string().array().optional(), iconUrls: z.string().array().optional(), }).optional().describe("Add not configured chains to Ethereum wallets."), }),
- src/tools/switch-chain.ts:7-46 (registration)The registration function that adds the "switch-chain" tool to the FastMCP server, including schema and handler.export function registerSwitchChainTools(server: FastMCP, wagmiConfig: Config): void { server.addTool({ name: "switch-chain", description: "Switch the target chain.", parameters: z.object({ chainId: z.coerce.number().describe("ID of chain to switch to."), addEthereumChainParameter: z.object({ chainName: z.string(), nativeCurrency: z.object({ name: z.string(), symbol: z.string(), decimals: z.coerce.number(), }), rpcUrls: z.string().array().min(1), blockExplorerUrls: z.string().array().optional(), iconUrls: z.string().array().optional(), }).optional().describe("Add not configured chains to Ethereum wallets."), }), execute: async (args) => { const chainId = args.chainId as typeof wagmiConfig["chains"][number]["id"]; const addEthereumChainParameter = args.addEthereumChainParameter; const result = await switchChain(wagmiConfig, { chainId, addEthereumChainParameter, }); wagmiConfig._internal.chains.setState(x => [...x, result]); return { content: [ { type: "text", text: JSONStringify(result), }, ], }; }, }); };
- src/tools/register-tools.ts:54-54 (registration)Invocation of the switch-chain registration as part of the overall tools registration.registerSwitchChainTools(server, wagmiConfig);
- src/index.ts:15-15 (registration)Top-level call to register all MCP tools, which includes switch-chain.registerTools(server, wagmiConfig);