@three-ws/ibm-x402-mcp
v1.1.0
Published
x402 pay-per-use MCP server for IBM Granite AI — chat, code, embeddings, analysis, and time-series forecasting. Pay USDC on Solana per call. No IBM Cloud account required.
Maintainers
Readme
A Model Context Protocol server that exposes IBM Granite foundation models as pay-per-use tools via the x402 payment protocol. End users pay USDC on Solana per call — no IBM Cloud account of their own. The server operator supplies IBM credentials (
WATSONX_*) and a receiving Solana wallet (MCP_SVM_PAYMENT_ADDRESS); callers supply only USDC. One free tool (ibm_granite_getting_started) explains prices and the flow before any payment.
Built by three.ws. Community-built and not affiliated with IBM.
How it works
- An MCP client (Claude Desktop, Claude Code, Cursor, or an agent) connects to this server.
- The client calls a tool — e.g.
ibm_granite_chat. - Without an x402 payment payload, the server returns a
402 PaymentRequiredenvelope quoting the USDC price and the Solana receiving address. - The client signs a Solana USDC transfer and retries with the payment in
_meta["x402/payment"]. - The server verifies and settles the payment via the facilitator, calls IBM watsonx.ai, and returns the result with a settlement receipt in
_meta["x402/payment-response"].
x402-capable MCP clients handle this loop automatically.
Install
npm install @three-ws/ibm-x402-mcpRun it directly with npx (no install needed):
MCP_SVM_PAYMENT_ADDRESS=<your-solana-wallet> \
WATSONX_API_KEY=<ibm-api-key> \
WATSONX_PROJECT_ID=<watsonx-project-id> \
npx @three-ws/ibm-x402-mcpOr install globally for the ibm-x402-mcp binary on your PATH:
npm install -g @three-ws/ibm-x402-mcpQuick start
With Claude Code, one command (as an end user paying per call, no env vars needed):
claude mcp add ibm-granite-x402 -- npx -y @three-ws/ibm-x402-mcpServer operators add -e MCP_SVM_PAYMENT_ADDRESS=... -e WATSONX_API_KEY=... -e WATSONX_PROJECT_ID=... before the --.
Or wire the server into your MCP client config (claude_desktop_config.json, Cursor's mcp.json):
{
"mcpServers": {
"ibm-x402": {
"command": "npx",
"args": ["-y", "@three-ws/ibm-x402-mcp"],
"env": {
"MCP_SVM_PAYMENT_ADDRESS": "your-solana-wallet-address",
"WATSONX_API_KEY": "your-ibm-cloud-api-key",
"WATSONX_PROJECT_ID": "your-watsonx-project-id"
}
}
}
}Inspect the tool surface with the MCP Inspector:
npx -y @modelcontextprotocol/inspector npx @three-ws/ibm-x402-mcpTools
| Tool | What it does | Price |
| ----------------------------- | ----------------------------------------------------------------------------------- | ----------- |
| ibm_granite_getting_started | Overview, prices, and the x402 payment flow. No payment or IBM account required. | Free |
| ibm_granite_chat | Conversational AI via IBM Granite (default ibm/granite-3-8b-instruct). | $0.02 USDC |
| ibm_granite_code | Code generate, review, refactor, explain, test, document. | $0.025 USDC |
| ibm_granite_embed | Batch text embeddings for RAG, search, and clustering (1–64 texts). | $0.005 USDC |
| ibm_granite_analyze | Structured document analysis: entities, sentiment, risk flags, summary, next steps. | $0.04 USDC |
| ibm_granite_forecast | Zero-shot time-series forecasting via IBM Granite TTM (Tiny Time Mixer). | $0.05 USDC |
Every tool is a read-only model-inference call — nothing on your machine or in any account is modified — and declares MCP tool annotations (readOnlyHint, openWorldHint, idempotentHint) so clients can reason about side effects before paying.
Input parameters
ibm_granite_chat — messages (required: 1–50 { role, content } pairs), model, max_new_tokens (1–4096, default 1024), temperature (0–2, default 0.7).
ibm_granite_code — task (required: generate/review/refactor/explain/test/document), prompt (required), language, context.
ibm_granite_embed — inputs (required: 1–64 texts, ≤8000 chars each), model.
ibm_granite_analyze — document (required), analysis_type (general/contract/financial/technical/medical/sentiment, default general), language.
ibm_granite_forecast — timestamps (required: 64–1024 ISO-8601, uniform cadence, oldest first), values (required: 64–1024 numbers, same length), freq (required: pandas cadence, e.g. 1h, 1D), prediction_length (1–96), label.
Example calls
// ibm_granite_chat
{
"messages": [
{ "role": "system", "content": "You are an expert data engineer." },
{ "role": "user", "content": "Design a lakehouse schema for IoT sensor telemetry." }
],
"max_new_tokens": 1024,
"temperature": 0.7
}
// ibm_granite_code
{ "task": "review", "prompt": "def calculate_roi(revenue, cost): return revenue / cost", "language": "Python" }
// ibm_granite_embed
{ "inputs": ["enterprise data governance", "cloud-native AI pipeline", "real-time analytics"] }
// ibm_granite_analyze
{ "document": "This Software License Agreement is entered into between...", "analysis_type": "contract" }
// ibm_granite_forecast (timestamps/values must be 64–1024 points; abbreviated here)
{ "timestamps": ["2025-01-01T00:00:00Z", "...", "2025-03-05T00:00:00Z"], "values": [12500, "...", 13200], "freq": "1D", "prediction_length": 14, "label": "daily_revenue_usd" }Payment flow
This server uses the x402 protocol for micropayments:
- Client calls a tool without payment →
402 PaymentRequiredwith the USDC amount and Solana address. - Client builds and signs a Solana USDC transfer transaction.
- Client retries with the signed tx in
_meta["x402/payment"]. - Server verifies and settles via the configured facilitator (default PayAI).
- Server calls IBM watsonx.ai and returns the result with
_meta["x402/payment-response"](settlement receipt).
MCP Client (Claude Desktop / Cursor / agent)
│ tools/call (with x402 payment in _meta)
▼
ibm-x402-mcp (stdio MCP server)
│ verify + settle USDC on Solana
├──► x402 facilitator (default https://facilitator.payai.network)
│
│ inference call with IAM Bearer token
└──► IBM watsonx.ai (us-south.ml.cloud.ibm.com)
└── IBM Granite 3 8B Instruct / Embedding / TTMRequirements
- Node.js >= 20.
- A Solana wallet address to receive USDC (
MCP_SVM_PAYMENT_ADDRESS). - IBM Cloud credentials: an API key (create one) and a watsonx.ai project id (Project → Manage → General → Project ID), or a deployment space id.
Environment variables
| Variable | Required | Default |
| ------------------------- | ----------------------------------- | ----------------------------------------- |
| MCP_SVM_PAYMENT_ADDRESS | yes | — |
| WATSONX_API_KEY | yes | — |
| WATSONX_PROJECT_ID | yes (or WATSONX_SPACE_ID) | — |
| WATSONX_SPACE_ID | alternative to WATSONX_PROJECT_ID | — |
| WATSONX_URL | no | https://us-south.ml.cloud.ibm.com |
| WATSONX_MODEL_ID | no | ibm/granite-3-8b-instruct |
| WATSONX_EMBED_MODEL_ID | no | ibm/granite-embedding-278m-multilingual |
| X402_FEE_PAYER_SOLANA | no | three.ws fee payer |
| X402_FACILITATOR_URL | no | https://facilitator.payai.network |
Regional hosts: us-south, eu-de, eu-gb, jp-tok, au-syd, ca-tor — e.g. https://eu-de.ml.cloud.ibm.com.
Related
@three-ws/ibm-watsonx-mcp— the same IBM Granite tools driven by your own IBM Cloud credentials (no x402, no per-call payment).
Links
- Homepage: https://three.ws
- Changelog: https://three.ws/changelog
- Issues: https://github.com/nirholas/three.ws/issues
- License: Apache-2.0 — see LICENSE
