ValueRouter MCP Server
Optional integration with Alchemy's blockchain API services for improved RPC performance when connecting to supported networks.
Integrates with Circle's USDC infrastructure for cross-chain transfers, with attestation status tracking for bridge transactions.
Uses .env file configuration for secure storage of RPC URLs and API keys needed for connecting to various blockchain networks.
Enables bridging USDC tokens across Ethereum and other EVM chains, with support for checking balances, getting quotes, and simulating transactions.
Enables installation and management of the MCP server through npm package management system.
Provides tools for bridging USDC between Optimism and other supported chains, with transaction simulation and status tracking.
Supports USDC bridging to and from Polygon network, with real-time quotes, fee estimation, and transaction status tracking.
Provides USDC bridging capabilities to and from Solana, with support for native SOL and WSOL wrapping for cross-chain transactions.
Enables USDC bridging with the Sui blockchain, supporting Move-based tokens and native SUI with gas fees in MIST.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ValueRouter MCP Serverget a quote to bridge 100 USDC from Ethereum to Solana"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ValueRouter MCP Server
A Model Context Protocol (MCP) server that provides AI agents with comprehensive cross-chain USDC bridging capabilities through ValueRouter. This server enables AI agents to seamlessly bridge USDC across multiple blockchain networks including Ethereum, Solana, Sui, and Cosmos ecosystem chains.
Features
Multi-Chain Support: Bridge USDC across 15+ blockchain networks
Real-Time Quotes: Get accurate bridging quotes with fees and timing estimates
Transaction Simulation: Prepare bridge transactions without execution
Status Tracking: Monitor bridge transaction progress in real-time
Balance Queries: Check user token balances across all supported chains
Fee Estimation: Calculate bridge fees and gas costs
Related MCP server: Solana MCP Server
Supported Chains
Mainnet
Ethereum (Chain ID: 1)
Arbitrum One (Chain ID: 42161)
Optimism (Chain ID: 10)
Polygon (Chain ID: 137)
Avalanche C-Chain (Chain ID: 43114)
Base (Chain ID: 8453)
Solana (Chain ID: 'solana')
Sui (Chain ID: 'sui')
Noble (Chain ID: 'noble-1')
Osmosis (Chain ID: 'osmosis-1')
Evmos (Chain ID: 'evmos_9001-2')
Sei (Chain ID: 'pacific-1')
Coreum (Chain ID: 'coreum-mainnet-1')
dYdX (Chain ID: 'dydx-mainnet-1')
Testnet
Goerli (Chain ID: 5)
Sepolia (Chain ID: 11155111)
Solana Devnet (Chain ID: 'solana-devnet')
Sui Testnet (Chain ID: 'sui-testnet')
Noble Testnet (Chain ID: 'grand-1')
Avalanche Fuji (Chain ID: 43113)
Arbitrum Goerli (Chain ID: 421613)
Optimism Goerli (Chain ID: 420)
Polygon Mumbai (Chain ID: 80001)
Installation
npm install @valuerouter/mcp-serverUsage
Starting the Server
npx @valuerouter/mcp-serverEnvironment Variables
Create a .env file in your project root:
# RPC URLs (replace with your API keys)
ETHEREUM_RPC_URL=https://mainnet.infura.io/v3/YOUR_INFURA_KEY
ARBITRUM_RPC_URL=https://arb1.arbitrum.io/rpc
OPTIMISM_RPC_URL=https://mainnet.optimism.io
POLYGON_RPC_URL=https://polygon-rpc.com
AVALANCHE_RPC_URL=https://api.avax.network/ext/bc/C/rpc
BASE_RPC_URL=https://mainnet.base.org
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
SUI_RPC_URL=https://fullnode.mainnet.sui.io:443
# Optional: API keys for better performance
ALCHEMY_API_KEY=your_alchemy_key
INFURA_API_KEY=your_infura_key
QUICKNODE_API_KEY=your_quicknode_keyAvailable Tools
1. get_supported_chains
Get all supported chains for USDC bridging.
Parameters:
includeTestnets(boolean, optional): Include testnet chains (default: false)
Example:
{
"name": "get_supported_chains",
"arguments": {
"includeTestnets": false
}
}Response:
{
"chains": [
{
"chainId": 1,
"name": "Ethereum",
"symbol": "ETH",
"decimals": 18,
"explorerUrl": "https://etherscan.io",
"isTestnet": false,
"networkType": "mainnet",
"usdcAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}
],
"count": 14
}2. get_supported_tokens
Get supported tokens for bridging.
Parameters:
chainId(number|string, optional): Specific chain ID to get tokens forincludeTestnets(boolean, optional): Include testnet tokens (default: false)
Example:
{
"name": "get_supported_tokens",
"arguments": {
"chainId": 1,
"includeTestnets": false
}
}3. get_bridge_quote
Get a quote for bridging USDC between chains.
Parameters:
fromChainId(number|string): Source chain IDtoChainId(number|string): Destination chain IDfromToken(object): Source token detailstoToken(object): Destination token detailsamount(string): Amount to bridge in smallest unit (wei, lamports, etc.)slippageBps(number, optional): Slippage tolerance in basis points (default: 100)userAddress(string, optional): User address for better quote accuracy
Example:
{
"name": "get_bridge_quote",
"arguments": {
"fromChainId": 1,
"toChainId": 42161,
"fromToken": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"chainId": 1,
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6
},
"toToken": {
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"chainId": 42161,
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6
},
"amount": "1000000",
"slippageBps": 100
}
}Response:
{
"fromChainId": 1,
"toChainId": 42161,
"fromAmount": "1000000",
"toAmount": "999500",
"toAmountMin": "998501",
"bridgeFee": "500",
"gasFee": "10000000000000000",
"totalFee": "10000000000000500",
"estimatedTime": "480",
"priceImpact": "0.01",
"route": {
"steps": [
{
"type": "bridge",
"chainId": 1,
"fromToken": {...},
"toToken": {...},
"amount": "1000000",
"protocol": "ValueRouter"
}
]
},
"validUntil": 1703958743123
}4. execute_bridge
Execute a bridge transaction (simulation only).
Parameters:
fromChainId(number|string): Source chain IDtoChainId(number|string): Destination chain IDfromToken(object): Source token detailstoToken(object): Destination token detailsamount(string): Amount to bridgerecipientAddress(string): Recipient address on destination chainuserAddress(string): User address initiating the transactionslippageBps(number, optional): Slippage tolerance in basis pointsmemo(string, optional): Memo for Cosmos chains
Example:
{
"name": "execute_bridge",
"arguments": {
"fromChainId": 1,
"toChainId": 42161,
"fromToken": {
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"chainId": 1,
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6
},
"toToken": {
"address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"chainId": 42161,
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6
},
"amount": "1000000",
"recipientAddress": "0x742d35Cc6634C0532925a3b8D45c07F9624f8b4c",
"userAddress": "0x742d35Cc6634C0532925a3b8D45c07F9624f8b4c",
"slippageBps": 100
}
}Response:
{
"transactionHash": "simulated-1703958743123-abc123def",
"fromChainId": 1,
"toChainId": 42161,
"status": "pending",
"explorerUrl": "https://etherscan.io/tx/simulated-1703958743123-abc123def",
"estimatedCompletionTime": "600",
"trackingId": "simulated-1703958743123-abc123def",
"warning": "This is a simulation only. To execute the transaction, use the returned transaction data with your wallet.",
"simulationOnly": true
}5. get_transaction_status
Get the status of a bridge transaction.
Parameters:
transactionHash(string): Transaction hash to check status forfromChainId(number|string): Source chain IDtoChainId(number|string): Destination chain ID
Example:
{
"name": "get_transaction_status",
"arguments": {
"transactionHash": "simulated-1703958743123-abc123def",
"fromChainId": 1,
"toChainId": 42161
}
}Response:
{
"transactionHash": "simulated-1703958743123-abc123def",
"fromChainId": 1,
"toChainId": 42161,
"status": "attesting",
"steps": [
{
"name": "Simulation",
"status": "completed",
"timestamp": 1703958773123
},
{
"name": "Bridge Scanning",
"status": "completed",
"timestamp": 1703958803123
},
{
"name": "Circle Attestation",
"status": "processing",
"timestamp": 1703958863123
}
],
"fromTxHash": "simulated-1703958743123-abc123def"
}6. get_user_balance
Get user token balance on a specific chain.
Parameters:
chainId(number|string): Chain ID to check balance ontokenAddress(string): Token contract addressuserAddress(string): User address to check balance for
Example:
{
"name": "get_user_balance",
"arguments": {
"chainId": 1,
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"userAddress": "0x742d35Cc6634C0532925a3b8D45c07F9624f8b4c"
}
}Response:
{
"chainId": 1,
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"balance": "1000000000",
"decimals": 6,
"symbol": "USDC",
"formattedBalance": "1000.0"
}7. estimate_bridge_fees
Estimate fees for a bridge transaction.
Parameters:
fromChainId(number|string): Source chain IDtoChainId(number|string): Destination chain IDamount(string): Amount to bridgetokenAddress(string, optional): Token address (defaults to USDC)
Example:
{
"name": "estimate_bridge_fees",
"arguments": {
"fromChainId": 1,
"toChainId": 42161,
"amount": "1000000"
}
}Response:
{
"bridgeFee": "500",
"gasFee": "10000000000000000",
"totalFee": "10000000000000500"
}Error Handling
All tools return structured error responses when something goes wrong:
{
"error": "Unsupported chain: 999",
"code": "UNSUPPORTED_CHAIN",
"details": "Chain ID 999 is not supported by ValueRouter"
}Common error codes:
UNSUPPORTED_CHAIN: Chain is not supportedINVALID_TOKEN: Token address is invalidINSUFFICIENT_BALANCE: User has insufficient balanceQUOTE_ERROR: Failed to get quoteBRIDGE_ERROR: Failed to prepare bridge transactionSTATUS_ERROR: Failed to get transaction statusBALANCE_ERROR: Failed to get balance
Chain-Specific Notes
Ethereum & EVM Chains
Use
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeEfor native ETHGas fees are in wei (18 decimals)
Bridge fees are 0.05% (5 basis points)
Solana
Use
So11111111111111111111111111111111111111112for native SOLGas fees are in lamports (9 decimals)
Requires WSOL wrapping for bridging
Sui
Use
0x2::sui::SUIfor native SUIGas fees are in MIST (9 decimals)
Supports Move-based tokens
Cosmos Chains
Use denomination strings like
uusdc,uosmo, etc.Gas fees vary by chain
Supports IBC transfers
Integration Examples
Basic Bridge Flow
// 1. Get supported chains
const chains = await callTool('get_supported_chains', {})
// 2. Get user balance
const balance = await callTool('get_user_balance', {
chainId: 1,
tokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
userAddress: '0x742d35Cc6634C0532925a3b8D45c07F9624f8b4c'
})
// 3. Get bridge quote
const quote = await callTool('get_bridge_quote', {
fromChainId: 1,
toChainId: 42161,
fromToken: {
address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
chainId: 1,
symbol: 'USDC',
name: 'USD Coin',
decimals: 6
},
toToken: {
address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
chainId: 42161,
symbol: 'USDC',
name: 'USD Coin',
decimals: 6
},
amount: '1000000'
})
// 4. Execute bridge (simulation)
const bridge = await callTool('execute_bridge', {
fromChainId: 1,
toChainId: 42161,
fromToken: quote.fromToken,
toToken: quote.toToken,
amount: '1000000',
recipientAddress: '0x742d35Cc6634C0532925a3b8D45c07F9624f8b4c',
userAddress: '0x742d35Cc6634C0532925a3b8D45c07F9624f8b4c'
})
// 5. Track transaction status
const status = await callTool('get_transaction_status', {
transactionHash: bridge.transactionHash,
fromChainId: 1,
toChainId: 42161
})Security Considerations
Simulation Only: The
execute_bridgetool only simulates transactions and returns transaction data. It does not execute real transactions.Address Validation: All addresses are validated before processing
Amount Validation: Amounts are validated to prevent overflow errors
RPC Security: Use secure RPC endpoints and API keys
Rate Limiting: Implement rate limiting for production use
Development
Building
npm run buildTesting
npm run testLinting
npm run lintContributing
Fork the repository
Create a feature branch
Make your changes
Add tests
Submit a pull request
License
MIT License - see LICENSE file for details
Support
For support and questions:
GitHub Issues: ValueRouter MCP Server Issues
Discord: ValueRouter Community
Documentation: ValueRouter Docs
Changelog
See CHANGELOG.md for release history.
Available Tools
7 toolsestimate_bridge_feesC
Estimate fees for a bridge transaction
| Name | Required | Description | Default |
|---|---|---|---|
| fromChainId | Yes | Source chain ID | |
| toChainId | Yes | Destination chain ID | |
| amount | Yes | Amount to bridge | |
| tokenAddress | No | Token address (optional, defaults to USDC) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the tool estimates fees, without detailing whether this is a read-only operation, if it requires authentication, rate limits, error conditions, or what the output might look like. For a tool with no annotations, this is insufficient to inform safe and effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose, making it easy to parse. However, it could be slightly more informative without sacrificing brevity, such as hinting at output or context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of bridge transactions, no annotations, and no output schema, the description is incomplete. It doesn't explain what the estimation returns (e.g., fee breakdown, currency), potential side effects, or how it differs from 'get_bridge_quote'. For a tool in a set with multiple related siblings, more context is needed to ensure proper usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting all parameters (fromChainId, toChainId, amount, tokenAddress) with their types and optionality. The description adds no additional semantic context beyond what the schema provides, such as format examples or usage notes. With high schema coverage, a baseline score of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's purpose ('Estimate fees for a bridge transaction'), which is clear but vague. It specifies the action ('Estimate') and resource ('fees for a bridge transaction'), but doesn't differentiate from sibling tools like 'get_bridge_quote' or explain what 'bridge transaction' entails. This leaves ambiguity about scope and distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'execute_bridge' or 'get_bridge_quote', nor does it specify prerequisites, constraints, or typical use cases. This lack of context makes it hard for an agent to choose appropriately among related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_bridgeB
Execute a bridge transaction (simulation only - returns transaction data)
| Name | Required | Description | Default |
|---|---|---|---|
| fromChainId | Yes | Source chain ID | |
| toChainId | Yes | Destination chain ID | |
| fromToken | Yes | ||
| toToken | Yes | ||
| amount | Yes | Amount to bridge in smallest unit | |
| recipientAddress | Yes | Recipient address on destination chain | |
| userAddress | Yes | User address initiating the transaction | |
| slippageBps | No | Slippage tolerance in basis points | |
| memo | No | Memo for Cosmos chains (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it reveals this is a simulation that returns transaction data (not executing real transactions), it doesn't address important behavioral aspects: whether this requires authentication, rate limits, what specific data is returned, error conditions, or how the simulation differs from actual execution. For a complex 9-parameter tool with no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence with parenthetical clarification. Every word earns its place: 'Execute a bridge transaction' establishes the core action, while '(simulation only - returns transaction data)' provides critical behavioral context. There's zero redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex bridge transaction tool with 9 parameters (including nested objects), no annotations, and no output schema, the description is inadequate. It doesn't explain what 'transaction data' is returned, how the simulation works, error handling, or the relationship between this tool and its siblings. The agent would struggle to use this tool effectively without significant trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 78% (high), establishing a baseline of 3. The description adds no parameter-specific information beyond what's in the schema. While the schema documents parameters well, the description doesn't provide additional context about parameter relationships, validation rules, or usage patterns that would help an agent understand how to properly construct requests.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Execute a bridge transaction' with the important qualifier '(simulation only - returns transaction data)'. This distinguishes it from actual execution tools and indicates it's for testing/analysis. However, it doesn't explicitly differentiate from sibling tools like 'estimate_bridge_fees' or 'get_bridge_quote' which might also involve simulation aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through 'simulation only', suggesting this should be used for testing rather than real transactions. However, it provides no explicit guidance on when to choose this tool versus alternatives like 'estimate_bridge_fees' or 'get_bridge_quote', nor does it mention prerequisites or when-not-to-use scenarios beyond the simulation aspect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bridge_quoteC
Get a quote for bridging USDC or other tokens between chains
| Name | Required | Description | Default |
|---|---|---|---|
| fromChainId | Yes | Source chain ID | |
| toChainId | Yes | Destination chain ID | |
| fromToken | Yes | ||
| toToken | Yes | ||
| amount | Yes | Amount to bridge in smallest unit (wei, lamports, etc.) | |
| slippageBps | No | Slippage tolerance in basis points (100 = 1%) | |
| userAddress | No | User address for better quote accuracy (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it indicates this is a quote operation (implying read-only), it doesn't specify whether this requires authentication, has rate limits, returns time-sensitive data, or what format the quote will be in. The description is minimal and lacks important behavioral context for a financial tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's appropriately sized for what it does convey, though it could benefit from additional context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex financial tool with 7 parameters (including nested objects), no annotations, and no output schema, the description is insufficient. It doesn't explain what the quote includes (fees, estimated time, success probability), how long quotes remain valid, or what format the response will take. The description leaves too many questions unanswered for proper agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 71% schema description coverage, the baseline is 3. The description mentions 'bridging USDC or other tokens between chains' which provides some context for the fromToken/toToken parameters, but doesn't add meaningful semantics beyond what the schema already documents for the 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a quote') and resource ('bridging USDC or other tokens between chains'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate this quote tool from the sibling 'estimate_bridge_fees' tool, which might serve a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'estimate_bridge_fees' or 'execute_bridge'. There's no mention of prerequisites, timing considerations, or when this tool would be preferred over other bridge-related tools in the server.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supported_chainsC
Get all supported chains for USDC bridging
| Name | Required | Description | Default |
|---|---|---|---|
| includeTestnets | No | Whether to include testnet chains |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but lacks critical details: it doesn't specify if this is a read-only operation, what the output format is (e.g., list of chain names/IDs), whether it's cached or real-time, or any rate limits. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose with zero wasted words. It's appropriately sized for a simple lookup tool and earns its place by clearly stating the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 optional parameter) but lack of annotations and output schema, the description is incomplete. It doesn't explain what 'supported chains' means in practice (e.g., network names, IDs, or compatibility details) or what the return value looks like, leaving the agent uncertain about how to use the results. For a tool in a bridging context, more operational context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the single parameter 'includeTestnets'. The description adds no parameter-specific information beyond implying it's about chains. This meets the baseline of 3 where the schema does the heavy lifting, but the description doesn't enhance parameter understanding (e.g., by explaining why testnets matter for bridging).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all supported chains for USDC bridging'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'get_supported_tokens' by specifying it's about chains rather than tokens. However, it doesn't explicitly differentiate from other chain-related tools (none exist in siblings), so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing this before bridging), exclusions, or how it relates to siblings like 'estimate_bridge_fees' or 'get_bridge_quote'. This leaves the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supported_tokensB
Get supported tokens for a specific chain or all chains
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Chain ID to get tokens for (optional) | |
| includeTestnets | No | Whether to include testnet tokens |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe behavioral traits like whether it's a read-only operation, potential rate limits, authentication needs, or what the return format looks like (e.g., list of token objects with details). For a tool with no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes essential scope details. Every word earns its place, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 optional parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose but lacks details on usage context, behavioral traits, and output format. Without annotations or output schema, the description should do more to compensate, but it meets the bare minimum for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (chainId and includeTestnets) with descriptions. The description adds no additional meaning beyond what's in the schema—it doesn't explain parameter interactions, default behaviors, or examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'supported tokens', specifying scope with 'for a specific chain or all chains'. It distinguishes from siblings like get_supported_chains (which gets chains, not tokens) and get_user_balance (which gets balances, not token lists). However, it doesn't explicitly differentiate from other token-related tools since none exist in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, use cases, or exclusions. For example, it doesn't clarify if this should be used before bridging operations (like execute_bridge) or how it relates to get_bridge_quote. The lack of context makes it unclear when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_statusC
Get the status of a bridge transaction
| Name | Required | Description | Default |
|---|---|---|---|
| transactionHash | Yes | Transaction hash to check status for | |
| fromChainId | Yes | Source chain ID | |
| toChainId | Yes | Destination chain ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but provides minimal information. It doesn't indicate whether this is a read-only operation, what authentication might be required, potential rate limits, or what happens with invalid transaction hashes. The description states what the tool does but not how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core purpose without any fluff. It's appropriately sized for a simple status-checking tool and gets straight to the point. Every word earns its place in conveying the essential function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bridge transaction status tool with no annotations and no output schema, the description is insufficient. It doesn't explain what status information will be returned, potential error conditions, or how this integrates with the bridge workflow. Given the complexity of blockchain bridging and the lack of structured output documentation, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, all three parameters are already documented in the schema. The description doesn't add any additional context about parameter relationships, constraints, or usage patterns beyond what's in the schema. The baseline score of 3 reflects adequate but not enhanced parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('status of a bridge transaction'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential sibling tools like 'get_bridge_quote' or 'estimate_bridge_fees' - it's clear what it does but not how it differs from related status-checking tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_bridge_quote', 'estimate_bridge_fees', and 'execute_bridge', there's no indication whether this should be used before, after, or instead of those operations. No prerequisites or context for usage are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_balanceC
Get user token balance on a specific chain
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | Yes | Chain ID to check balance on | |
| tokenAddress | Yes | Token contract address | |
| userAddress | Yes | User address to check balance for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. While 'Get' implies a read operation, the description doesn't disclose important behavioral aspects like whether this requires authentication, rate limits, error conditions, or what format the balance returns in. For a financial tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a straightforward tool and front-loads the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a financial balance-checking tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the return value looks like (numeric balance, formatted string, etc.), error handling, or authentication requirements. The context signals indicate this is a non-trivial tool requiring more behavioral disclosure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema descriptions. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('user token balance'), and specifies the scope ('on a specific chain'). It doesn't explicitly distinguish from sibling tools, but the purpose is unambiguous for this domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_supported_tokens' and 'get_transaction_status' available, there's no indication of when this balance-checking tool is appropriate versus other read operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- First observed
estimate_bridge_fees - First observed
execute_bridge - First observed
get_bridge_quote - First observed
get_supported_chains - First observed
get_supported_tokens - First observed
get_transaction_status - First observed
get_user_balance
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose with no ambiguity: fee estimation, transaction execution, quote retrieval, chain/token support queries, status checking, and balance fetching. The descriptions clearly differentiate between informational queries (get_*) and action-oriented tools (estimate_*, execute_*), making misselection unlikely.
All tools follow a consistent verb_noun pattern with clear, descriptive names. The naming convention is uniform throughout: estimate_bridge_fees, execute_bridge, get_bridge_quote, get_supported_chains, get_supported_tokens, get_transaction_status, get_user_balance. No mixing of styles or inconsistent verb usage is present.
With 7 tools, this server is well-scoped for its bridge transaction domain. Each tool earns its place by covering distinct aspects of the bridging workflow: preparation (estimate, quote), execution (execute), information (chains, tokens, status, balance). The count is neither too thin nor bloated, fitting typical MCP server expectations.
The tool surface provides excellent coverage for core bridge transaction workflows: quote→estimate→execute→status, plus supporting queries for chains, tokens, and balances. The only minor gap is the lack of a tool for canceling or modifying transactions, but agents can work around this given the simulation-only nature of execute_bridge. Overall, it's nearly complete for the stated purpose.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
BridgeNode — x402 pay-per-request AI inference. OpenAI-compatible API + MCP, Solana USDC, gas-free.
MCP server for AI agents to discover campaigns by humans and donate USDC directly on Base.
Token swaps and honeypot/rug checks for AI agents on 8 chains, paid per-call in USDC via x402.
Related MCP Servers
- FlicenseBqualityDmaintenanceA Model Context Protocol server enabling AI assistants to create, buy, and sell tokens on the Pump.fun platform on Solana.622-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server enabling AI agents to interact with the Solana blockchain for DeFi operations like checking balances, transferring tokens, executing swaps, and fetching price data.1222MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI models to interact with the Solana blockchain, providing RPC methods, wallet management, DeFi trading capabilities, and Helius API integration for enhanced Solana development.5MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI agents to interact with 30+ Ethereum-compatible blockchain networks, providing services like token transfers, contract interactions, and ENS resolution through a unified interface.2864378MIT