Skip to main content
Glama
yanboishere

Infini Payment MCP Server

by yanboishere
README.md
# Infini Payment MCP Server

A Model Context Protocol (MCP) server built on the [Infini Payment API](https://developer.infini.money/docs/) 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

```bash
uv sync
```

### 2. Configure Environment Variables

Copy the environment template:

```bash
cp .env.example .env
```

Edit the `.env` file and fill in your Infini API credentials:

```bash
INFINI_API_KEY=your_api_key_here
INFINI_SECRET_KEY=your_secret_key_here
INFINI_ENV=sandbox  # or production
```

### 3. Run the Server

```bash
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:

```json
{
  "mcpServers": {
    "infini": {
      "command": "uv",
      "args": ["run", "server.py"],
      "cwd": "/Users/yanbo/infini-mcp"
    }
  }
}
```

To learn more, see the [Cursor documentation](https://docs.cursor.com/).

### VS Code

To add Infini MCP to VS Code, add the following to your `.vscode/mcp.json` file in your workspace:

```json
{
  "servers": {
    "infini": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "server.py"],
      "cwd": "/Users/yanbo/infini-mcp"
    }
  }
}
```

To learn more, see the [VS Code documentation](https://code.visualstudio.com/docs/).

### Claude Code

To add Infini MCP to Claude Code, run the following command:

```bash
claude mcp add --transport stdio infini uv run server.py
```

To learn more, see the [Claude Code documentation](https://claude.ai/code).

### ChatGPT

To add Infini MCP to ChatGPT, you need to configure it through the ChatGPT interface:

1. Go to Settings > Beta features > MCP Servers
2. Click "Add MCP Server"
3. Select "Local Server"
4. Enter the command: `uv run server.py`
5. 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 ID
- `amount` (str, required): Order amount
- `client_reference` (str, optional): Client reference
- `order_desc` (str, optional): Order description
- `merchant_alias` (str, optional): Custom merchant alias
- `expires_in` (int, optional): Expiration time in seconds, 0 for default
- `success_url` (str, optional): Success callback URL
- `failure_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 filter
- `page` (int, optional): Page number, default 1
- `page_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 network
- `token_type` (str, required): Token type
- `amount` (str, required): Withdrawal amount
- `wallet_address` (str, required): Destination wallet address
- `note` (str, optional): Note

### Webhook Verification

#### `verify_webhook_signature`
Verify webhook notification signature

**Parameters:**
- `body` (str, required): Webhook request body
- `signature` (str, required): Signature
- `timestamp` (str, required): Timestamp
- `webhook_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

1. **Key Security**: API keys and secrets must be securely stored, never expose to frontend
2. **Request Idempotency**: Use globally unique `request_id` to ensure idempotency
3. **Rate Limiting**: Default 600 requests per minute per API Key
4. **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](https://developer.infini.money/docs/) or contact technical support.

## LICENSE
GNU AFFERO GENERAL PUBLIC LICENSE V3.0

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues