Infini Payment MCP Server
The Infini Payment MCP Server is a cryptocurrency payment processing server that integrates with Infini's API to handle payment orders, fund withdrawals, and webhook verification.
Order Management: Create new payment orders with customizable parameters (amount, description, expiration time, callback URLs, merchant alias, client reference); retrieve specific order information by ID; list and filter orders by currency (USDC/USDT) and status with pagination support; and reissue checkout URL tokens for existing orders.
Fund Operations: Withdraw funds to external wallets across multiple blockchain networks by specifying chain, token type, amount, and destination address; query all supported cryptocurrencies available for payment processing.
Security & Verification: Verify webhook callback signatures using HMAC-SHA256 to authenticate incoming notifications from Infini with timestamp and body validation.
Additional Features: Switch between sandbox (testing) and production environments; HMAC-SHA256 authentication compliant with Infini specifications; Tron Testnet (Nile) support for testing; rate limiting of 600 requests per minute per API key; comprehensive error handling for HTTP 400, 401, 403, 404, 409, and 500 errors; integrates with development tools (Cursor, VS Code, Claude Code, ChatGPT) via Model Context Protocol (MCP) configurations.
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., "@Infini Payment MCP Servercreate a USDC payment order for $50"
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.
Infini Payment MCP Server
A Model Context Protocol (MCP) server built on the Infini Payment API that provides cryptocurrency payment processing capabilities.
Features
✅ Complete Order Management: Create, query, list, and reissue tokens
✅ Fund Withdrawal: Multi-chain withdrawal support
✅ Currency Support: Get supported cryptocurrency list
✅ Webhook Verification: Verify callback notification signatures
✅ HMAC-SHA256 Authentication: Compliant with Infini official signature specifications
✅ Environment Switching: Support for sandbox and production environments
Related MCP server: coinvoyage-paykit
Quick Start
1. Install Dependencies
uv sync2. Configure Environment Variables
Copy the environment template:
cp .env.example .envEdit the .env file and fill in your Infini API credentials:
INFINI_API_KEY=your_api_key_here
INFINI_SECRET_KEY=your_secret_key_here
INFINI_ENV=sandbox # or production3. Run the Server
uv run server.pyConnect to Infini's MCP Server
Cursor
To add Infini MCP to Cursor, add the following to your ~/.cursor/mcp.json file:
{
"mcpServers": {
"infini": {
"command": "uv",
"args": ["run", "server.py"],
"cwd": "/Users/yanbo/infini-mcp"
}
}
}To learn more, see the Cursor documentation.
VS Code
To add Infini MCP to VS Code, add the following to your .vscode/mcp.json file in your workspace:
{
"servers": {
"infini": {
"type": "stdio",
"command": "uv",
"args": ["run", "server.py"],
"cwd": "/Users/yanbo/infini-mcp"
}
}
}To learn more, see the VS Code documentation.
Claude Code
To add Infini MCP to Claude Code, run the following command:
claude mcp add --transport stdio infini uv run server.pyTo learn more, see the Claude Code documentation.
ChatGPT
To add Infini MCP to ChatGPT, you need to configure it through the ChatGPT interface:
Go to Settings > Beta features > MCP Servers
Click "Add MCP Server"
Select "Local Server"
Enter the command:
uv run server.pySet the working directory:
/Users/yanbo/infini-mcp
Available Tools
Order Management
create_payment_order
Create a new payment order
Parameters:
request_id(str, required): Unique request IDamount(str, required): Order amountclient_reference(str, optional): Client referenceorder_desc(str, optional): Order descriptionmerchant_alias(str, optional): Custom merchant aliasexpires_in(int, optional): Expiration time in seconds, 0 for defaultsuccess_url(str, optional): Success callback URLfailure_url(str, optional): Failure callback URL
Returns: Order details including order_id and checkout_url
get_payment_order
Query order details
Parameters:
order_id(str, required): Order ID
list_payment_orders
Get order list
Parameters:
currency(str, optional): Currency filter (USDC/USDT)status(str, optional): Status filterpage(int, optional): Page number, default 1page_size(int, optional): Page size, default 10
reissue_order_token
Reissue checkout URL token
Parameters:
order_id(str, required): Order ID
Currency and Funds
get_supported_currencies
Get supported cryptocurrency list
withdraw_funds
Withdraw funds to external wallet
Parameters:
chain(str, required): Blockchain networktoken_type(str, required): Token typeamount(str, required): Withdrawal amountwallet_address(str, required): Destination wallet addressnote(str, optional): Note
Webhook Verification
verify_webhook_signature
Verify webhook notification signature
Parameters:
body(str, required): Webhook request bodysignature(str, required): Signaturetimestamp(str, required): Timestampwebhook_secret(str, optional): Webhook secret
Error Handling
The server automatically handles common HTTP errors including:
400: Request parameter errors
401: Authentication failure
403: Insufficient permissions
404: Resource not found
409: Business conflicts
500: Internal server errors
Test Environment
Test Network
Currently supports Tron Testnet (Nile) for testing:
Chain: Tron Testnet
Token: USDT (test coins)
Wallet: TronLink
Test Bank Card
Test card number: 4000000000000085 (test environment only)
Security Tips
Key Security: API keys and secrets must be securely stored, never expose to frontend
Request Idempotency: Use globally unique
request_idto ensure idempotencyRate Limiting: Default 600 requests per minute per API Key
Time Synchronization: Ensure server time accuracy (±300 seconds)
Development Notes
Signature Algorithm
This implementation strictly follows Infini official signature specifications:
Request without Body (GET):
{keyId}
{METHOD} {path}
date: {GMT_time}Request with Body (POST):
{keyId}
{METHOD} {path}
date: {GMT_time}
digest: SHA-256={body_digest_base64}Webhook Signature
Webhook uses timestamp + body for signature verification.
Support and Contact
For issues, please refer to Infini Official Documentation or contact technical support.
LICENSE
GNU AFFERO GENERAL PUBLIC LICENSE V3.0
Available Tools
7 toolscreate_payment_orderB
Create a new payment order in Infini.
Args:
request_id: Unique request ID (UUID recommended)
amount: Order amount (e.g., "100.00")
client_reference: Client reference string
order_desc: Order description
merchant_alias: Custom merchant alias
expires_in: Time to live in seconds (0 for default)
success_url: Success redirect URL
failure_url: Failure redirect URL
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| amount | Yes | ||
| client_reference | No | ||
| order_desc | No | ||
| merchant_alias | No | ||
| expires_in | No | ||
| success_url | No | ||
| failure_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 the tool creates a payment order, implying a write operation, but doesn't describe what happens upon creation (e.g., returns an order ID, triggers a payment flow), error conditions, rate limits, or authentication requirements. This leaves significant gaps for an agent to understand the tool's behavior.
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 appropriately sized and front-loaded, starting with the core purpose followed by a structured list of parameters. Each parameter explanation is brief and relevant. There's no wasted text, though the formatting as a simple list could be slightly improved for readability.
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 (8 parameters, no annotations, but with an output schema), the description is moderately complete. It covers the purpose and parameters well, but lacks behavioral details like error handling or authentication. The presence of an output schema means return values don't need explanation, but other contextual gaps remain, making it adequate but not fully comprehensive.
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 0%, so the description must compensate. It provides brief explanations for all 8 parameters (e.g., 'Unique request ID (UUID recommended)', 'Order amount (e.g., "100.00")'), adding meaningful context beyond the schema's titles. However, it doesn't cover details like format constraints (e.g., URL validation for success_url) or the implications of null defaults, keeping it from a perfect score.
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 creates a new payment order in Infini, providing a specific verb ('Create') and resource ('payment order'). It distinguishes from sibling tools like 'get_payment_order' or 'list_payment_orders' by focusing on creation rather than retrieval. However, it doesn't explicitly differentiate from other creation-like tools like 'reissue_order_token' or 'withdraw_funds' beyond the name.
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., authentication), when not to use it, or how it relates to sibling tools like 'reissue_order_token' or 'withdraw_funds'. The only implied usage is for creating payment orders, but no contextual boundaries are defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payment_orderC
Get payment order details by order ID.
Args:
order_id: The order ID to query
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. It states it's a read operation ('Get') but doesn't mention authentication requirements, rate limits, error conditions, or what happens with invalid order IDs. The description lacks critical behavioral context needed for safe and effective tool invocation.
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 appropriately concise with two sentences that directly address purpose and parameters. The 'Args:' section is structured but could be more integrated. While efficient, the second sentence could be merged with the first for better flow without losing clarity.
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 (single parameter, no nested objects) and the presence of an output schema, the description is minimally adequate. However, with no annotations and incomplete parameter documentation, it leaves gaps in understanding behavioral traits and error handling. The output schema likely covers return values, but the description doesn't reference this or provide usage context.
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 description adds minimal parameter semantics beyond what the input schema provides. It explains that 'order_id' is 'The order ID to query,' which clarifies the parameter's purpose but doesn't specify format, validation rules, or examples. With 0% schema description coverage and only one parameter, this provides basic context but doesn't fully compensate for the schema's lack of descriptions.
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 ('payment order details'), making it immediately understandable. It distinguishes from siblings like 'list_payment_orders' by specifying retrieval by order ID rather than listing multiple orders. However, it doesn't explicitly differentiate from other read operations like 'verify_webhook_signature' beyond the resource focus.
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 when to choose 'get_payment_order' over 'list_payment_orders' for retrieving order information, nor does it specify prerequisites like needing a valid order ID. Usage is implied by the parameter name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supported_currenciesB
Get list of all supported cryptocurrencies for creating orders.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. It mentions 'Get list' but doesn't disclose behavioral traits such as whether this is a read-only operation, potential rate limits, authentication needs, or what the output looks like. The description is minimal and adds little beyond the basic action.
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 no wasted words, clearly front-loading the purpose. It's appropriately sized for a simple tool with no parameters.
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 has no parameters, 100% schema coverage, and an output schema exists, the description is minimally adequate. However, as a tool with no annotations, it lacks details on behavior and context, making it incomplete for guiding an agent fully without relying on the output schema.
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 tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate, earning a baseline score of 4 for not introducing confusion or redundancy.
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 'list of all supported cryptocurrencies', specifying its purpose for 'creating orders'. However, it doesn't explicitly differentiate from sibling tools like 'create_payment_order' or 'list_payment_orders', which involve orders rather than currencies.
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 ('for creating orders'), suggesting when this tool might be needed, but doesn't provide explicit guidance on when to use it versus alternatives or any exclusions. It lacks details on prerequisites or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payment_ordersC
List payment orders with optional filters.
Args:
currency: Filter by currency (USDC/USDT)
status: Filter by order status
page: Page number (1 to n)
page_size: Page size (default 10)
| Name | Required | Description | Default |
|---|---|---|---|
| currency | No | ||
| status | No | ||
| page | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. It mentions 'optional filters' and pagination, but doesn't describe what the tool returns (though output schema exists), whether it's read-only, authentication requirements, rate limits, error conditions, or what happens when filters return no results. The description is minimal and lacks important behavioral context.
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 appropriately concise with a clear purpose statement followed by a structured parameter list. Every sentence earns its place, though the parameter explanations could be slightly more informative. The structure is front-loaded with the main purpose first.
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 4 parameters with 0% schema description coverage but an output schema exists, the description provides basic parameter semantics but lacks behavioral context. For a list/filter tool with pagination, it should ideally mention typical response structure, authentication needs, or error handling. The existence of an output schema reduces the need to describe return values, but other gaps remain.
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 description includes an 'Args' section that lists all 4 parameters with brief explanations, adding meaning beyond the input schema (which has 0% description coverage). It clarifies that currency filters to 'USDC/USDT', status filters by 'order status', and page/page_size control pagination. However, it doesn't explain valid status values or parameter constraints beyond defaults.
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: 'List payment orders with optional filters.' This specifies the verb ('list') and resource ('payment orders'), and mentions filtering capability. However, it doesn't explicitly differentiate from sibling tools like 'get_payment_order' (singular vs. plural 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 sibling tools like 'get_payment_order' for retrieving a single order or 'create_payment_order' for creating new orders. There's no context about prerequisites, typical use cases, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reissue_order_tokenC
Reissue checkout URL token for an existing order.
Args:
order_id: The order ID to reissue token for
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 the action ('Reissue') but doesn't explain what 'reissue' entails—whether it invalidates previous tokens, requires specific permissions, has rate limits, or what the new token is used for. This is a significant gap for a mutation tool with zero annotation coverage.
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 front-loaded with the core purpose in the first sentence, followed by a brief parameter explanation. It avoids unnecessary fluff, but the parameter section could be more integrated (e.g., 'Reissue checkout URL token for an existing order using its order_id'). Overall, it's efficient but not perfectly structured.
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 complexity (a mutation with one parameter) and the presence of an output schema (which handles return values), the description is minimally adequate. However, it lacks critical context like behavioral traits (e.g., token invalidation, auth needs) and usage guidelines, making it incomplete for safe and effective use by an agent.
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 schema description coverage is 0%, so the description must compensate. It adds the meaning of 'order_id' ('The order ID to reissue token for'), which clarifies the parameter's role. However, it doesn't provide format details (e.g., UUID, numeric ID) or constraints, leaving some ambiguity. With one parameter and partial semantic clarification, a baseline 3 is appropriate.
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 ('Reissue checkout URL token') and the target resource ('for an existing order'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its siblings (like create_payment_order or get_payment_order), which would require a 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., that the order must exist), when reissuing is appropriate (e.g., after token expiration), or what happens if the token is already valid. This leaves the agent with insufficient context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_webhook_signatureB
Verify webhook signature from Infini.
Args:
body: Raw webhook body string
signature: Signature from webhook header
timestamp: Timestamp from webhook header
webhook_secret: Webhook secret (uses INFINI_SECRET_KEY if not provided)
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| signature | Yes | ||
| timestamp | Yes | ||
| webhook_secret | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 describes what the tool does but lacks details on behavioral traits like error handling, performance, or side effects. For a verification tool with security implications, 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 appropriately sized and front-loaded, starting with the tool's purpose followed by a clear, bullet-like list of parameters with brief explanations. Every sentence adds value without redundancy, making it efficient and easy to parse.
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 that there is an output schema, the description doesn't need to explain return values. However, for a verification tool with no annotations and security relevance, it lacks context on error cases or operational details. The parameter explanations are helpful, but overall completeness is moderate due to missing behavioral insights.
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 description adds substantial meaning beyond the input schema, which has 0% schema description coverage. It explains each parameter's purpose and provides a default behavior for 'webhook_secret' ('uses INFINI_SECRET_KEY if not provided'), which is not evident from the schema alone. This compensates fully for the schema's lack of descriptions.
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: 'Verify webhook signature from Infini.' It specifies the verb ('verify') and resource ('webhook signature'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools, which are all payment-related, so this stands alone in 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. It lists parameters but doesn't explain the context, prerequisites, or scenarios for invocation. Without such information, users must infer usage from the tool name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withdraw_fundsB
Withdraw funds to external wallet.
Args:
chain: Blockchain network name
token_type: Token identifier
amount: Amount to withdraw
wallet_address: Destination wallet address
note: Optional note
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | ||
| token_type | Yes | ||
| amount | Yes | ||
| wallet_address | Yes | ||
| note | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. It states the action ('withdraw') which implies a financial transaction, but doesn't mention critical behavioral aspects like authentication requirements, transaction fees, confirmation times, irreversible nature of withdrawals, rate limits, or error conditions. This leaves significant gaps for a tool handling financial operations.
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 efficient with zero wasted words. The purpose is stated in one clear sentence, followed by a well-structured parameter list. Every element serves a purpose, and the information is front-loaded appropriately.
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 that this is a financial transaction tool with no annotations and 5 parameters, the description is minimally adequate. The presence of an output schema (though not shown) means the description doesn't need to explain return values. However, for a tool performing irreversible financial withdrawals, more behavioral context would be expected to reach higher completeness.
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 description explicitly lists all 5 parameters with brief explanations, adding significant value beyond the schema which has 0% description coverage. While it doesn't provide detailed format requirements or examples for parameters like 'chain' or 'token_type', it does give basic semantic meaning to each parameter that the schema lacks.
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 ('withdraw funds') and target ('to external wallet'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from potential sibling tools like 'create_payment_order' that might also involve fund transfers, so it doesn't reach the highest score.
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 'create_payment_order' or 'list_payment_orders'. There's no mention of prerequisites, constraints, or appropriate contexts for withdrawal operations versus other payment-related actions.
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
v1.0.0- First observed
create_payment_order - First observed
get_payment_order - First observed
get_supported_currencies - First observed
list_payment_orders - First observed
reissue_order_token - First observed
verify_webhook_signature - First observed
withdraw_funds
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose with no overlap: create_payment_order for creation, get_payment_order for retrieval, list_payment_orders for listing, reissue_order_token for token renewal, verify_webhook_signature for security, get_supported_currencies for currency info, and withdraw_funds for withdrawals. The descriptions reinforce these unique functions, eliminating any ambiguity.
All tool names follow a consistent verb_noun pattern using snake_case, such as create_payment_order, get_payment_order, list_payment_orders, and verify_webhook_signature. This uniformity makes the tool set predictable and easy to understand, with no deviations in naming conventions.
With 7 tools, the server is well-scoped for payment processing, covering core operations like order management, currency support, webhook verification, and fund withdrawals. Each tool serves a specific, necessary function without being excessive or insufficient for the domain.
The tool set provides strong coverage for payment order lifecycle (create, get, list, reissue) and essential utilities (currency info, webhook verification, withdrawals). A minor gap exists in lacking an update or cancel operation for orders, but agents can work around this by creating new orders or using existing tools effectively.
Maintenance
Related MCP Connectors
Pay for APIs with USDC. Read-only x402 payment discovery, verification, evidence, and status.
Accept crypto payments via the TgPay Merchant API — invoices, subscriptions, webhooks.
PayRam is a self-hosted crypto payment gateway. You deploy it on your own server — no signup, no KYC, no third-party custody. Accept USDT, USDC, Bitcoin, and ETH across Ethereum, Base, Polygon, and Tron.
Non-custodial crypto payments for AI assistants: balances, payments, and create payment links.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables blockchain payment operations across multiple networks including Base, Ethereum, BSC, Polygon, and Avalanche. Supports balance queries, token transfers, transaction tracking, wallet management, and gas fee estimation with built-in security limits.MIT
- AlicenseNot gradedqualityCmaintenanceNon-custodial multi-chain crypto payment gateway via CoinVoyage. 15 tools for creating PayOrders, managing webhooks, and cross-chain swaps. Supports BTC, SOL, ETH, Base, Arbitrum, Polygon, BSC, Sui, USDC/USDT.MIT

@chainpayto/mcp-serverofficial
AlicenseAqualityDmaintenanceEnables AI agents to directly operate ChainPay cryptocurrency payment system, including order creation, balance checks, and withdrawals.65 npmMIT
Yolfiofficial
AlicenseAqualityAmaintenanceYolfi Agent Kit for AI coding agents: receive crypto, SaaS payment, stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based access logic to applications through Yolfi1338 npm178MIT