A Model Context Protocol (MCP) server for Rubic that enables AI agents to search supported chains/tokens, build swap transactions, sign and broadcast EVM transactions, track cross-chain status, and generate pre-filled swap URLs.
Add to MCP config:
{
"mcpServers": {
"rubic": {
"command": "npx",
"args": ["-y", "@cryptorubic/mcp"],
"env": {
"EVM_WALLET_PRIVATE_KEY": "YOUR_PRIVATE_KEY"
}
}
}
}EVM_WALLET_PRIVATE_KEY - EVM private key without 0x. Enables signing/broadcast tools.
For read-only mode, omit EVM_WALLET_PRIVATE_KEY.
Requires Node.js v18+.
git clone https://github.com/Cryptorubic/rubic-mcp.git
cd rubic-mcp
npm install
npm run buildPull the published image:
docker pull rubicfinance/rubic-mcp:latestOr build from source:
git clone https://github.com/Cryptorubic/rubic-mcp.git
cd rubic-mcp
docker build -t rubicfinance/rubic-mcp .In case of local Node.js installation, copy the example config:
cp .env.example .envMain settings:
EVM_WALLET_PRIVATE_KEY- EVM private key without0x. Enables signing/broadcast tools.RUBIC_API_BASE_URL- Rubic API base URL (defaulthttps://rubic-api-v2.rubic.exchange).TOKENS_API_BASE_URL- Rubic tokens API base URL (defaulthttps://api.rubic.exchange/api).MCP_TRANSPORT-stdio(default) orhttp.MCP_HOST/MCP_PORT- used in HTTP mode.API_TIMEOUT_MS/MCP_TOOL_TIMEOUT_MS- request and tool execution timeouts.
Without EVM_WALLET_PRIVATE_KEY, read-only and build tools work, but tools that sign transactions will return an error.
Quickstart section is enough for the most use cases. All of the instructions below are related to local installation options.
All examples below use stdio mode.
Replace /full/path/to with the actual path printed after npm run build.
Claude Code
# With private key
claude mcp add rubic -e EVM_WALLET_PRIVATE_KEY=YOUR_PRIVATE_KEY -- node /full/path/to/dist/index.js
# Read-only / unsigned mode
claude mcp add rubic -- node /full/path/to/dist/index.jsUsing Docker:
claude mcp add rubic -e EVM_WALLET_PRIVATE_KEY=YOUR_PRIVATE_KEY -- docker run -i --rm rubicfinance/rubic-mcp:latest node dist/index.jsVerify: claude mcp list
Claude Desktop
Add to claude_desktop_config.json:
Node.js:
{
"mcpServers": {
"rubic": {
"command": "node",
"args": ["/full/path/to/dist/index.js"],
"env": { "EVM_WALLET_PRIVATE_KEY": "YOUR_KEY" }
}
}
}Docker:
{
"mcpServers": {
"rubic": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "EVM_WALLET_PRIVATE_KEY=YOUR_KEY", "rubicfinance/rubic-mcp", "node", "dist/index.js"],
"env": {}
}
}
}Cursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"rubic": {
"command": "node",
"args": ["/full/path/to/dist/index.js"],
"env": {
"EVM_WALLET_PRIVATE_KEY": "YOUR_PRIVATE_KEY"
}
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"rubic": {
"command": "node",
"args": ["/full/path/to/dist/index.js"],
"env": { "EVM_WALLET_PRIVATE_KEY": "YOUR_KEY" }
}
}
}GitHub Copilot (VS Code)
Add to .vscode/mcp.json:
{
"mcpServers": {
"rubic": {
"type": "stdio",
"command": "node",
"args": ["/full/path/to/dist/index.js"],
"env": { "EVM_WALLET_PRIVATE_KEY": "YOUR_KEY" }
}
}
}Cline
Open Cline settings → MCP Servers → Edit MCP Settings:
{
"mcpServers": {
"rubic": {
"command": "node",
"args": ["/full/path/to/dist/index.js"],
"env": { "EVM_WALLET_PRIVATE_KEY": "YOUR_KEY" }
}
}
}Continue
Add to ~/.continue/config.json:
{
"mcpServers": [
{
"name": "rubic",
"command": "node",
"args": ["/full/path/to/dist/index.js"],
"env": { "EVM_WALLET_PRIVATE_KEY": "YOUR_KEY" }
}
]
}Zed
Add to ~/.config/zed/settings.json:
{
"context_servers": {
"rubic": {
"command": {
"path": "node",
"args": ["/full/path/to/dist/index.js"],
"env": { "EVM_WALLET_PRIVATE_KEY": "YOUR_KEY" }
}
}
}
}Use command node + args ["/full/path/to/dist/index.js"], or Docker command:
docker run -i --rm -e EVM_WALLET_PRIVATE_KEY=YOUR_PRIVATE_KEY rubicfinance/rubic-mcp:latest node dist/index.jsUse hosted read-only MCP endpoint:
https://stage-mcp-api-v2.rubic.exchange/mcp
Example generic MCP config:
{
"mcpServers": {
"rubic": {
"url": "https://stage-mcp-api-v2.rubic.exchange/mcp"
}
}
}# stdio (default)
npm start
# HTTP mode
MCP_TRANSPORT=http npm run start:http# stdio
docker run -i --rm -e EVM_WALLET_PRIVATE_KEY=YOUR_PRIVATE_KEY rubicfinance/rubic-mcp:latest node dist/index.js
# HTTP mode
docker run -d -p 3333:3333 -e MCP_TRANSPORT=http rubicfinance/rubic-mcp:latestOr with Docker Compose:
docker compose up -d --buildnpm run dev # stdio dev mode
npm run dev:http # HTTP dev mode
npm run lint
npm run typecheckRubic MCP Server is non-custodial:
- Private keys never leave your machine.
EVM_WALLET_PRIVATE_KEYis read from a local.envfile or MCP client config, used for in-process signing via viem, and never transmitted over the network. - The server constructs transaction calldata (
rubic_build_swap_tx) and returns it as a structured JSON object. Signing and broadcast are separate, opt-in steps. - Without
EVM_WALLET_PRIVATE_KEY, the server operates in read-only mode: quotes, token search, chain discovery, and swap URL generation work normally. Signing tools return a clear error. - The Rubic API (
rubic-api-v2.rubic.exchange) receives swap parameters and returns routing + calldata. It never receives your private key.
Tools are split into read-only (work without a key) and execution
(require EVM_WALLET_PRIVATE_KEY). In hosted mode, only read-only tools
are available.
| Tool | Requires EVM_WALLET_PRIVATE_KEY |
Description |
|---|---|---|
rubic_get_instructions |
- | Returns Rubic MCP usage guide and workflow tips |
rubic_get_balances |
- | Returns non-zero native and ERC-20 balances across supported EVM chains |
rubic_get_supported_chains |
- | Lists supported blockchain names |
rubic_search_tokens |
- | Searches tokens by symbol, name, or address |
rubic_quote_routes |
- | Calculates best route or all routes |
rubic_simulate_swap |
- | Simulates execution preview (route, fees summary, gas USD, risk level) without signing or broadcasting |
rubic_build_swap_tx |
- | Builds executable swap transaction payload |
rubic_sign_tx |
Yes | Signs EVM transaction payload |
rubic_broadcast_tx |
- | Broadcasts a signed raw transaction |
rubic_sign_and_broadcast_tx |
Yes | Signs and broadcasts in one call |
rubic_quote_swap_sign_and_broadcast_tx |
Yes | Full flow: quote -> build -> sign -> broadcast |
rubic_track_status |
- | Tracks cross-chain status by route id and/or tx hash |
rubic_get_swap_url |
- | Generates pre-filled Rubic app swap URL |
Rubic MCP Server does not:
- Custody or store private keys. Keys exist only in your local env / process memory.
- Support non-EVM chains for signing.
rubic_sign_txandrubic_broadcast_txwork only on EVM chains. For non-EVM chains (Solana, TRON, TON, Bitcoin), userubic_build_swap_txto get calldata and sign externally, or userubic_get_swap_urlfor browser-based execution. - Execute limit orders or DCA. Only market swaps via routing aggregation.
- Guarantee complete portfolio coverage.
rubic_get_balanceschecks tokens from bundledtokens.json. Custom/unlisted tokens may require manual contract checks. - Manage token approvals automatically. If an ERC-20 approval is needed,
rubic_build_swap_txreturnsapprovalAddress— the user must approve separately. - Guarantee price. Quotes are estimates; actual execution price may differ due to slippage, MEV, or market movement between quote and broadcast.
- Support fiat on/off-ramp. No bank, card, or payment provider integration.
All tools return a stable result envelope:
{
"ok": true,
"traceId": "uuid",
"data": {},
"error": {
"code": "RUBIC_1001",
"message": "Human-readable reason",
"statusCode": 400,
"details": {}
}
}| Code | Meaning |
|---|---|
QUOTE_ROUTES_FAILED |
Rubic API could not calculate any route for the given pair |
ROUTE_ID_NOT_FOUND |
Route id could not be extracted from quote response |
BUILD_SWAP_TX_FAILED |
Transaction construction failed for the selected route |
SIGN_TX_FAILED |
Transaction signing failed (key mismatch, invalid tx) |
BROADCAST_TX_FAILED |
Signed transaction rejected by the network |
WALLET_NOT_CONFIGURED |
Tool requires EVM_WALLET_PRIVATE_KEY but it is not set |
TOOL_TIMEOUT |
Tool execution exceeded configured timeout |
HTTP_400 |
Input validation failed |
HTTP_NETWORK |
Network request to Rubic API failed |
RUBIC_<N> |
Rubic API business error (code forwarded from API response) |
INTERNAL_ERROR |
Unexpected server error |