infini mcp server
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
Quick Start
1. Install Dependencies
uv sync
2. Configure Environment Variables
Copy the environment template:
cp .env.example .env
Edit 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 production
3. Run the Server
uv run server.py
Connect 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.py
To 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.py - Set 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
- Faucet: https://nileex.io/join/getJoinPage
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 idempotency - Rate 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