TezosX MCP
Provides Tezos wallet management and blockchain interaction tools for AI agents, including support for the x402 payment protocol. It enables tasks like sending XTZ, checking balances, and managing automated payments for services like NFT minting.
README
TezosX MCP
A Model Context Protocol server for Tezos with x402 payment support.
Warning: This MCP is in alpha. Most things should work, but please be prepared for troubleshooting. Please report any problems on our issues page.
As always, verify the output of your LLM before approving any transactions. Set reasonable limits. Trust but verify.
Quick Deploy
<details>
<summary>Railway deployment steps</summary>
- Deploy the template (set
TEZOS_NETWORKtoshadownetbefore clicking deploy if desired) - Click the deployed item and go to "Settings"
- Scroll down to "Public Networking"
- Your domain will be something like
tezosx-mcp-production-a12b.up.railway.app - Navigate to your domain to open the frontend config, and set up your spending key and contract address
- Back on Railway, navigate to the "Variables" tab and set
SPENDING_PRIVATE_KEYandSPENDING_CONTRACTto the values you received - Optional: Enable the 'serverless' setting to reduce resource usage
- Restart the deployment
- Set up your AI Platform to use
[your domain]/mcpas the URL
</details>
<details>
<summary>Render deployment steps</summary>
- Click the button above to deploy the template
- Once deployed, under "Sync" click "View details"
- Click the hyperlink to "tezosx-mcp"
- Navigate to your onrender.com custom URL and set up your spending key and contract address
- Back on Render, navigate to the "Environment" tab and set
SPENDING_PRIVATE_KEYandSPENDING_CONTRACTenvironment variables - Click "Manual deploy" at the top right and select "Restart service"
- Set up your AI Platform to use
[your domain]/mcpas the URL
Note: Render spins down free plan services during inactivity. The next request can take up to a minute while the instance spins back up. Upgrade to a paid plan to avoid this.
</details>
Components
| Component | Description | Deployment |
|---|---|---|
| MCP Server | Tezos wallet tools for AI agents | Claude Desktop / Railway / Render |
| Facilitator | Verifies & settles x402 payments | Cloudflare Worker |
| Mint Worker | Mints NFT receipts via x402 | Cloudflare Worker |
| NFT Contract | FA2 contract for collector cards | Tezos blockchain |
MCP Server
Installation
npm install @ecadlabs/tezosx-mcp
Or run directly:
npx @ecadlabs/tezosx-mcp
Claude Desktop Configuration
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"tezos": {
"command": "npx",
"args": ["-y", "@ecadlabs/tezosx-mcp"],
"env": {
"TEZOS_NETWORK": "mainnet"
}
}
}
}
Or run from source:
- Clone the TezosX-mcp repository
- In the
/TezosX-mcp/mcpfolder runnpm i && npm run build
{
"mcpServers": {
"tezosx": {
"command": "node",
"args": ["/path/to/TezosX-mcp/mcp/dist/index.js"],
"env": {
"TEZOS_NETWORK": "mainnet",
"SPENDING_CONTRACT": "KT1...",
"SPENDING_PRIVATE_KEY": "edsk..."
}
}
}
}
Environment Variables
| Variable | Required | Description |
|---|---|---|
SPENDING_PRIVATE_KEY |
Yes | Private key for the spending account (edsk/spsk/p2sk format) |
SPENDING_CONTRACT |
Yes | Address of the spending-limited wallet contract (KT1...) |
TEZOS_NETWORK |
No | mainnet (default) or shadownet |
MCP_TRANSPORT |
No | stdio (default) or http |
WEB_PORT |
No | Frontend port (default: 13205) |
Available Tools
| Tool | Description |
|---|---|
get_balance |
Get the balance of the spending wallet |
get_addresses |
Get addresses associated with the spending contract |
get_limits |
Get current spending limits and allowances |
get_operation_history |
Get recent operations from the wallet |
get_dashboard |
Open the web dashboard for wallet management |
send_xtz |
Send XTZ from the spending wallet |
reveal_account |
Reveal an unrevealed account on-chain |
create_x402_payment |
Create an x402 payment header |
fetch_with_x402 |
Fetch a URL with x402 payment |
parse_x402_requirements |
Parse x402 payment requirements from a response |
Web Dashboard
The MCP server includes a web dashboard for managing the spending wallet. It starts automatically on http://localhost:13205 (or your configured WEB_PORT).
Facilitator (Cloudflare Worker)
A Cloudflare Worker that verifies and settles x402 payments using the exact-tezos scheme.
Deploy
cd facilitator
npm install
npm run deploy
Configuration
Set TEZOS_RPC_URL in wrangler.jsonc:
{
"vars": {
"TEZOS_RPC_URL": "https://shadownet.tezos.ecadinfra.com"
}
}
API
| Endpoint | Description |
|---|---|
GET /health |
Returns service status and connected block |
POST /verify |
Validates a payment payload. Returns { valid: true } or { valid: false, reason: "..." } |
POST /settle |
Injects a verified payment to the network. Returns { success: true, operationHash: "..." } |
Notes:
- In-memory double-spend protection resets on deployment
- Only supports
exact-tezosscheme withXTZ - Operations must be verified before settlement
NFT Contract
Deploy the FA2 contract and authorize a minter:
cd mint
npm install
npm run deploy -- --minter tz1...
Mint Worker (Cloudflare Worker)
A Cloudflare Worker that mints Tezos NFTs when users pay via the x402 protocol. Returns 402 Payment Required until a valid payment is received, then mints an NFT receipt to the payer.
Features
- x402 payment protocol integration
- FA2-compliant NFT minting via Taquito
- Dynamic SVG receipt generation
- IPFS metadata storage via Pinata
Prerequisites
- LIGO compiler - For compiling the NFT contract
- Cloudflare account - For deploying the worker
- Pinata account - For IPFS uploads (pinata.cloud)
- Tezos wallet - Funded account for minting operations
Deploy
cd mint/worker
npm install
npm run deploy
Secrets
wrangler secret put TEZOS_RPC_URL # e.g., https://shadownet.tezos.ecadinfra.com
wrangler secret put MINTER_PRIVATE_KEY # edsk...
wrangler secret put NFT_CONTRACT # KT1...
wrangler secret put PAYMENT_RECIPIENT # tz1...
wrangler secret put PINATA_JWT # eyJ...
Configuration
Edit wrangler.jsonc:
{
"vars": {
"NETWORK": "shadownet",
"PAYMENT_AMOUNT": "100000" // 0.1 XTZ in mutez
},
"services": [
{ "binding": "FACILITATOR", "service": "tezos-x402-facilitator" }
]
}
The mint worker uses a service binding to call the facilitator directly (no public URL needed).
API
GET /mint or POST /mint - Mint an NFT after x402 payment
Query Parameters:
recipient(optional) - Address to receive the NFT (defaults to payer)
Without payment (returns 402):
{
"x402Version": 1,
"paymentRequirements": [{
"scheme": "exact-tezos",
"network": "shadownet",
"asset": "XTZ",
"amount": "100000",
"recipient": "tz1..."
}]
}
With valid payment (returns 200):
{
"success": true,
"nft": {
"tokenId": 42,
"contract": "KT1...",
"recipient": "tz1...",
"metadataUri": "ipfs://Qm...",
"opHash": "oo..."
}
}
GET / or GET /health - Health check
Error Codes
| Code | Description |
|---|---|
NO_PAYMENT |
No X-PAYMENT header provided |
INVALID_PAYMENT |
Payment verification failed |
WRONG_NETWORK |
Payment network doesn't match |
IPFS_UPLOAD_FAILED |
Failed to upload metadata to Pinata |
MINT_FAILED |
NFT contract call failed |
SETTLE_FAILED |
Payment settlement failed |
Architecture
┌──────────────────┐
│ Client/Agent │
└────────┬─────────┘
│ 1. GET /mint
▼
┌──────────────────┐
│ Mint Worker │
└────────┬─────────┘
│ 2. Return 402 with payment requirements
▼
┌──────────────────┐
│ Client/Agent │
└────────┬─────────┘
│ 3. Sign payment, retry with X-PAYMENT header
▼
┌──────────────────┐ ┌──────────────────┐
│ Mint Worker │────▶│ Facilitator │
└────────┬─────────┘ │ (verify) │
│ └──────────────────┘
│ 4. Verified
┌────┴────┐
▼ ▼
┌────────┐ ┌────────┐
│ Pinata │ │ Tezos │
│ (IPFS) │ │ (mint) │
└────────┘ └────────┘
│
│ 5. Return NFT details
▼
┌──────────────────┐ ┌──────────────────┐
│ Client/Agent │ │ Facilitator │
└──────────────────┘ │ (settle) │
└──────────────────┘
License
Apache-2.0
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.