Skip to main content
Glama
RWAValueRouter

ValueRouter MCP Server

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-server

Usage

Starting the Server

npx @valuerouter/mcp-server

Environment 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_key

Available 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 for

  • includeTestnets (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 ID

  • toChainId (number|string): Destination chain ID

  • fromToken (object): Source token details

  • toToken (object): Destination token details

  • amount (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 ID

  • toChainId (number|string): Destination chain ID

  • fromToken (object): Source token details

  • toToken (object): Destination token details

  • amount (string): Amount to bridge

  • recipientAddress (string): Recipient address on destination chain

  • userAddress (string): User address initiating the transaction

  • slippageBps (number, optional): Slippage tolerance in basis points

  • memo (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 for

  • fromChainId (number|string): Source chain ID

  • toChainId (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 on

  • tokenAddress (string): Token contract address

  • userAddress (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 ID

  • toChainId (number|string): Destination chain ID

  • amount (string): Amount to bridge

  • tokenAddress (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 supported

  • INVALID_TOKEN: Token address is invalid

  • INSUFFICIENT_BALANCE: User has insufficient balance

  • QUOTE_ERROR: Failed to get quote

  • BRIDGE_ERROR: Failed to prepare bridge transaction

  • STATUS_ERROR: Failed to get transaction status

  • BALANCE_ERROR: Failed to get balance

Chain-Specific Notes

Ethereum & EVM Chains

  • Use 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for native ETH

  • Gas fees are in wei (18 decimals)

  • Bridge fees are 0.05% (5 basis points)

Solana

  • Use So11111111111111111111111111111111111111112 for native SOL

  • Gas fees are in lamports (9 decimals)

  • Requires WSOL wrapping for bridging

Sui

  • Use 0x2::sui::SUI for native SUI

  • Gas 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_bridge tool 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 build

Testing

npm run test

Linting

npm run lint

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests

  5. Submit a pull request

License

MIT License - see LICENSE file for details

Support

For support and questions:

Changelog

See CHANGELOG.md for release history.

Available Tools

7 tools
estimate_bridge_feesC

Estimate fees for a bridge transaction

ParametersJSON Schema
NameRequiredDescriptionDefault
fromChainIdYesSource chain ID
toChainIdYesDestination chain ID
amountYesAmount to bridge
tokenAddressNoToken address (optional, defaults to USDC)

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
fromChainIdYesSource chain ID
toChainIdYesDestination chain ID
fromTokenYes
toTokenYes
amountYesAmount to bridge in smallest unit
recipientAddressYesRecipient address on destination chain
userAddressYesUser address initiating the transaction
slippageBpsNoSlippage tolerance in basis points
memoNoMemo for Cosmos chains (optional)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
fromChainIdYesSource chain ID
toChainIdYesDestination chain ID
fromTokenYes
toTokenYes
amountYesAmount to bridge in smallest unit (wei, lamports, etc.)
slippageBpsNoSlippage tolerance in basis points (100 = 1%)
userAddressNoUser address for better quote accuracy (optional)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
includeTestnetsNoWhether to include testnet chains

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
chainIdNoChain ID to get tokens for (optional)
includeTestnetsNoWhether to include testnet tokens

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
transactionHashYesTransaction hash to check status for
fromChainIdYesSource chain ID
toChainIdYesDestination chain ID

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
chainIdYesChain ID to check balance on
tokenAddressYesToken contract address
userAddressYesUser address to check balance for

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 7 tool updates
    • First observedestimate_bridge_fees
    • First observedexecute_bridge
    • First observedget_bridge_quote
    • First observedget_supported_chains
    • First observedget_supported_tokens
    • First observedget_transaction_status
    • First observedget_user_balance

TDQS

B3.4/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers