MCP Server Access
Let your AI assistant use Bitcoin-powered AI tools
Give Your AI Superpowers
Connect Claude, Cursor, or any MCP-compatible AI to 33+ tools — images, video, music, text, speech, and more.
Not a developer? You can use all of these tools directly on the web — browse available tools and pay with any Lightning wallet, no setup needed.
Looking for the full L402 / MCP / WebLN reference? — see /docs for error codes, async jobs, dedup, auto-routing, CORS and macaroon caveats.
Which Integration Method?
Pick the one that fits how you work. All three access the same tools and pricing.
| Method | Best for |
|---|---|
| MCP (HTTP) | Claude Desktop, Cursor, Windsurf, any MCP client |
| MCP (stdio / npm) | Local agents, CI pipelines, Node.js projects |
| L402 (HTTP API) | Direct HTTP callers, autonomous agents with wallets, curl |
MCP (HTTP) is the fastest path — paste the URL, your AI discovers all tools automatically. L402 is for agents that manage their own Lightning wallet and want stateless pay-per-call with no session. Full API reference: /docs | /llms.txt (machine-readable)
Connect in 30 Seconds
Copy this into your MCP settings and you're done.
{
"mcpServers": {
"sats4ai": {
"url": "https://sats4ai.com/api/mcp"
}
}
}Also on the Official MCP Registry as com.sats4ai/bitcoin-ai-tools.
How Payments Work
Your AI handles steps 1, 3, and 4 automatically. You just pay the invoice.
Why MCP instead of raw HTTP? See the side-by-side comparison.
Create Payment
AI calls create_payment and gets a Lightning invoice
You Pay
Pay the Lightning invoice with your wallet. Agents: CLW
Verify (optional)
AI checks payment status
Get Result
AI calls the tool and returns your result
Available Services & Pricing
All prices in Satoshis. Model ID is optional — omit it to use the best default. Use list_models to discover all options.
| ID | Service | Price (Satoshis) |
|---|---|---|
| 26 | generate_text (Standard) | 1,000 characters/Sat |
| 1 | generate_text (Better) | 333 characters/Sat |
| 6 | generate_text (Best) | 100 characters/Sat |
| 2 | generate_image | 100 |
| 8 | generate_image | 150 |
| 16 | generate_image | 200 |
| 25 | generate_video | 300-550/sec |
| 24 | animate_image | 100/sec |
| 23 | generate_music | 300 |
| 3 | text_to_speech | 10-100 chars/sat |
| 10 | transcribe_audio | 10/minute |
| 5 | analyze_image | 21 |
| 17 | generate_3d_model | 350 |
| 27 | extract_document | 10/page |
| — | convert_file | 100 |
| 20 | send_sms | varies |
| — | place_call | varies |
| — | send_email | 200 |
| — | translate_text | 1 per 1,000 chars |
| — | edit_image | 200-450 |
| — | clone_voice | 7,500 |
| — | convert_html_to_pdf | 50 |
| — | merge_pdfs | 100 |
| — | extract_receipt | 50/page |
| — | remove_background | 5 |
| — | upscale_image | 5 |
| — | restore_face | 5 |
| — | detect_nsfw | 2 |
| — | detect_objects | 5 |
| — | remove_object | 15 |
| — | colorize_image | 5 |
| — | deblur_image | 20 |
| — | ai_call | ~150-250 |
| — | epub_to_audiobook | ~1 per ~33 chars |
Text and SMS use dynamic pricing. Call create_payment to get an exact quote. Free tools: list_models, get_model_pricing.
Model IDs are stable numeric database keys — they never change. The table above is for human reference. Agents should call list_models at runtime to discover current IDs and pick up new models automatically.
Media URLs returned by image, video, audio, and file conversion tools are hosted on our servers and expire after 2 hours. Download or display them promptly.
Step-by-Step: Manual Usage
If your AI client doesn't auto-handle MCP, or you want to call it directly with curl:
1Initialize Connection
curl -X POST https://sats4ai.com/api/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "my-client", "version": "1.0.0" }
}
}'2Create Payment (get Lightning invoice)
curl -X POST https://sats4ai.com/api/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "create_payment",
"arguments": {
"toolName": "generate_image"
}
}
}'Response:
{
"result": {
"content": [{
"type": "text",
"text": "{
\"paymentId\": \"abc123\",
\"lightningInvoice\": \"lnbc...<LIGHTNING_INVOICE>\",
\"amountSats\": 100
}"
}]
}
}Copy the lightningInvoice and pay it with your Lightning wallet. Save the paymentId.
3Call the Service
After payment, pass the paymentId to the tool you want to use:
curl -X POST https://sats4ai.com/api/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "generate_image",
"arguments": {
"paymentId": "abc123",
"prompt": "A futuristic Bitcoin-powered robot"
}
}
}'Copy-Paste Examples
Complete, runnable code for each integration method. Each generates an image end-to-end.
PythonOpenAI Agents SDK + MCP
Works with any agent framework that supports MCP (OpenAI Agents SDK, LangChain, etc.).
# pip install openai-agents httpx
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async def main():
# Connect to Sats4AI MCP server
async with MCPServerStreamableHttp(
name="sats4ai",
params={"url": "https://sats4ai.com/api/mcp"},
) as server:
# Create an agent with Sats4AI tools
agent = Agent(
name="assistant",
instructions="""You have access to Sats4AI tools.
To use a paid tool: call create_payment first, then tell the user
to pay the Lightning invoice, then call the tool with the paymentId.""",
mcp_servers=[server],
)
result = await Runner.run(agent, "Generate an image of a sunset over Tokyo")
print(result.final_output)
import asyncio
asyncio.run(main())TypeScriptDirect HTTP (no framework needed)
Raw JSON-RPC calls. Works from any language — Node.js, Deno, browser, or your own agent loop.
// npm install sats4ai-mcp
// Add to your MCP settings (Claude Code, Cursor, etc.):
// { "mcpServers": { "sats4ai": { "url": "https://sats4ai.com/api/mcp" } } }
// Or call directly via HTTP:
const endpoint = "https://sats4ai.com/api/mcp";
// 1. Create payment
const payRes = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0", id: 1,
method: "tools/call",
params: { name: "create_payment", arguments: { toolName: "generate_image" } }
})
});
const { result: payResult } = await payRes.json();
const { paymentId, invoice } = JSON.parse(payResult.content[0].text);
console.log("Pay this invoice:", invoice);
// 2. Wait for payment... (poll check_payment_status or use a wallet SDK)
// 3. Call the tool
const imgRes = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0", id: 2,
method: "tools/call",
params: { name: "generate_image", arguments: { paymentId, prompt: "A sunset over Tokyo" } }
})
});
const { result: imgResult } = await imgRes.json();
console.log("Image URL:", JSON.parse(imgResult.content[0].text).imageUrl);curlL402 API (stateless, no MCP)
For autonomous agents with their own Lightning wallet. No session, no MCP — just HTTP + payment proof.
# L402 (stateless, no MCP needed)
# Step 1: Get schema + 402 challenge
curl https://sats4ai.com/api/l402/image
# Step 2: Pay the Lightning invoice from the WWW-Authenticate header
# Step 3: Call with proof of payment
curl -X POST https://sats4ai.com/api/l402/image \
-H "Authorization: L402 <macaroon>:<preimage>" \
-H "Content-Type: application/json" \
-d '{"prompt": "A sunset over Tokyo"}'All Available Tools
Free Tools (no payment needed)
create_paymentGet a Lightning invoice for any service
check_payment_statusCheck if your payment was received
list_modelsList all available AI models
get_model_pricingGet pricing for a specific model
check_job_statusCheck progress of async jobs
get_job_resultGet result of completed jobs
Paid Tools (instant result)
generate_imageGenerate images from text. Grok Imagine, Seedream 4, Nano Banana 2. 100-200 sats.
edit_imageEdit images with natural language. Object add/remove, style transfer, inpainting. 200-450 sats.
generate_textFrontier LLMs: Kimi K2.5, GPT-OSS-120B, Qwen3-32B. Per-character pricing.
translate_textTranslate text across 119 languages. Qwen3-32B. 1 sat per 1000 chars.
generate_musicFull songs (up to 6 min) with natural AI vocals, BPM/key control, 14+ section tags. Music-2.6. 300 sats.
text_to_speechNatural speech. 3 tiers: OmniVoice Global (602+ langs, 100 chars/sat), Inworld Max Premium (#1 ELO, 50 chars/sat), Minimax Studio (voice cloning, 10 chars/sat). Emotion control, voice design.
analyze_imageImage analysis and visual Q&A. Qwen VL. 21 sats.
extract_documentOCR from PDFs/images to Markdown. Mistral OCR. 10 sats/page.
extract_receiptStructured JSON from receipts/invoices. 50 sats/page.
convert_fileConvert between 200+ file formats. 100 sats.
merge_pdfsMerge multiple PDFs into one. 100 sats.
convert_html_to_pdfHTML/Markdown to PDF. Great for invoices/reports. 50 sats.
send_smsReach a human via SMS worldwide. Price varies by destination.
send_emailSend email — reports, notifications, formal comms. 200 sats.
place_callDeliver spoken messages to any phone. Price varies.
remove_backgroundBackground removal. BiRefNet (SOTA). Transparent PNG. 5 sats.
upscale_image2x/4x super-resolution. Real-ESRGAN. 5 sats.
restore_faceRestore blurry/damaged faces. CodeFormer. 5 sats.
detect_nsfwClassify image safety. Falcons.ai NSFW detection — 100x cheaper than an LLM. 2 sats.
detect_objectsDetect and locate objects with bounding boxes. Grounding DINO (ECCV 2024). 5 sats.
remove_objectRemove unwanted objects by describing what to remove — no mask needed. Grounding DINO + Bria Eraser. 15 sats.
colorize_imageColorize B&W or grayscale photos. DDColor (ICCV 2023). 5 sats.
deblur_imageFix blurry or out-of-focus photos. NAFNet (ECCV 2022). 20 sats.
Paid Tools (async — requires polling)
generate_videoasyncText to video. Kling v3, standard/pro, optional audio. 300-550 sats/sec.
animate_imageasyncAnimate images into video. Grok Imagine Video. 100 sats/sec.
generate_3d_modelasyncPhoto to 3D GLB model. Seed3D. 350 sats.
clone_voiceasyncClone a voice from audio sample. Returns reusable voice_id for TTS. 7,500 sats.
transcribe_audioasyncAudio to text with timestamps. Mistral Transcription. 13 languages. 10 sats/min.
ai_callasyncAI voice agent for two-way calls — booking, IVR, negotiation. ~150-250 sats.
epub_to_audiobookasyncBook to Audiobook — EPUB, PDF, or TXT to AI-narrated M4B with chapters. Same 3 TTS tiers. Min 500 sats.
Async tools return a requestId. Use check_job_status to poll, then get_job_result to retrieve the output.
Tool Reference
Copy-paste JSON for each tool. These go inside params.arguments.
create_payment — get a Lightning invoice
For most services. modelId is optional — omit to use the best default:
{
"toolName": "generate_image" // Tool to pay for. modelId optional (defaults to best).
}With a specific model (optional):
{
"toolName": "generate_image",
"modelId": 8 // Optional: pick a specific model from list_models
}For generate_text (prompt required — price is based on character count and locked to the exact prompt):
{
"toolName": "generate_text",
"prompt": "Review this code for bugs", // Required: used to calculate and lock the price
"modelId": 6, // Optional: 1 = Standard, 6 = Best (default)
"systemPrompt": "You are a helpful assistant", // Optional
"fileContext": "function add(a, b) { ... }" // Optional: extracted file text
}For generate_video (duration/mode/audio determine price):
{
"toolName": "generate_video",
"duration": 5, // 3-15 seconds (required)
"mode": "pro", // "standard" or "pro" (default: "pro")
"generate_audio": false // Include audio track (default: false)
}
// Pricing: standard 300/400 sats/sec, pro 450/550 sats/sec (no audio/audio)
// animate_image: just provide "duration" (100 sats/sec)For send_sms (destination-aware pricing):
{
"toolName": "send_sms",
"phoneNumber": "+14155550100", // Required: used for rate lookup
"message": "Hello from Sats4AI!" // Required: validated here (max 120 chars)
}generate_image — generate images from text. Returns base64 image.
{
"paymentId": "abc123",
"prompt": "A futuristic city at sunset",
"modelId": 2, // Optional: defaults to best
"imageBase64": "..." // Optional: base64 image for img2img
}generate_text — AI chat, code review, file analysis. Returns generated text.
Supports file attachments (send extracted text as fileContext) and image analysis (send base64 as imageBase64).
{
"paymentId": "abc123",
"prompt": "Review this code for bugs",
"modelId": 6, // Optional: defaults to best
"systemPrompt": "You are a helpful assistant", // Optional
"fileContext": "function add(a, b) { ... }", // Optional: extracted file text
"fileName": "utils.js", // Optional: file name
"imageBase64": "data:image/png;base64,..." // Optional: vision-capable models only
}generate_video — text to video. Returns requestId, poll for video URL. async
{
"paymentId": "abc123",
"prompt": "A rocket launching into space",
"modelId": 25, // Optional: defaults to best
"duration": 5, // 3-15 seconds
"mode": "pro", // "standard" or "pro"
"generate_audio": false // Include audio track
}
// Pricing (per second): standard 300 (no audio) / 400 (audio), pro 450 / 550
// Must provide duration, mode, generate_audio at create_payment timeanimate_image — animate an image into video. Returns requestId. async
{
"paymentId": "abc123",
"imageBase64": "<base64 encoded image>",
"prompt": "The scene comes to life", // Optional motion guidance
"modelId": 24, // Optional: defaults to best
"duration": 5 // 3-15 seconds, 100 sats/sec
}
// Must provide duration at create_payment timegenerate_music — create full songs with AI vocals, BPM/key control. Returns audio URL.
{
"paymentId": "abc123",
"prompt": "E minor, 90 BPM, acoustic guitar ballad, male vocal",
"lyrics": "[Verse]\nYour lyrics here...\n[Chorus]\nThe hook...",
"is_instrumental": false, // true for instrumental-only
"lyrics_optimizer": false, // true to auto-generate lyrics
"sample_rate": 44100,
"bitrate": 256000,
"audio_format": "mp3"
}text_to_speech — text to speech. Returns audio URL.
{
"paymentId": "abc123",
"text": "Hello, this is a test of the speech synthesis.",
"modelId": 3, // Optional: defaults to best
"voice": "default" // Optional: voice ID
}transcribe_audio — audio to text with timestamps. Returns requestId, poll for result. async
{
"paymentId": "abc123",
"audioBase64": "<base64-encoded-audio>", // mp3, wav, flac, ogg, webm, mp4, m4a, aac, wma
"language": "en", // Optional: "detect", "en", "es", "fr", "de", "it", "pt", "nl", "ja", "ko", "zh", "ar", "hi"
"timestamps": "segment", // Optional: "none" (default), "segment", or "word"
"diarize": true // Optional: identify different speakers (default: false)
}Returns requestId. Poll with check_job_status(jobType="transcription"), then get_job_result. 10 sats/minute.
analyze_image — analyze images with AI. Returns description text.
{
"paymentId": "abc123",
"imageUrl": "https://example.com/image.jpg",
"prompt": "What objects are in this image?",
"modelId": 5 // Optional: defaults to best
}generate_3d_model — image to 3D model. Returns requestId, poll for model URL. async
{
"paymentId": "abc123",
"imageUrl": "https://example.com/object.jpg",
"modelId": 17 // Optional: defaults to best
}send_sms — reach a human via SMS worldwide. Returns delivery status.
{
"paymentId": "abc123",
"phoneNumber": "+14155550100", // Same as in create_payment
"message": "Hello from Sats4AI!" // Max 120 chars
}A 40-character disclaimer is auto-appended to every SMS.
place_call — deliver spoken messages to any phone. Returns call status.
// Option A: Text-to-Speech
{
"paymentId": "abc123",
"phoneNumber": "+14155550100",
"message": "Hello, this is your reminder for tomorrow at 3 PM."
}
// Option B: Play audio file
{
"paymentId": "abc123",
"phoneNumber": "+14155550100",
"audioUrl": "https://example.com/my-audio.mp3",
"durationMinutes": 2
}Provide message (max 500 chars) OR audioUrl + durationMinutes (1–30). Pricing scales with duration and destination. Generate audio with text_to_speech first for custom voices.
ai_call — send an AI voice agent to make a two-way phone call. Returns transcript + analysis. async
{
"paymentId": "abc123",
"phoneNumber": "+14155550100",
"task": "Call this restaurant and book a table for 2 at 7pm tonight",
"durationMinutes": 3, // Optional: 1-10 (default: 3)
"voice": "Myra", // Optional: Adrian, Myra, Paola, Chris, Marissa, Nathan, Cimo, Drew, Olivia
"language": "en-US", // Optional: en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, zh-CN, multi
"beginMessage": "Hi, I'd like..." // Optional: opening line for the agent
}Returns call_id and poll_url. Poll with check_job_status(jobType="ai-call") for transcript + analysis. ~150-250 sats for a 3-min US call.
remove_background — remove background, returns transparent PNG. 5 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-encoded-image>"
}upscale_image — upscale images 2x/4x with neural super-resolution. 5 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-encoded-image>",
"scale": 4, // Optional: 2 or 4 (default: 4)
"face_enhance": false // Optional: enhance faces during upscale
}restore_face — restore blurry or damaged faces. 5 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-encoded-image>",
"fidelity": 0.5, // Optional: 0.0 (max quality) to 1.0 (max identity), default 0.5
"background_enhance": false, // Optional: also enhance background
"face_upsample": false, // Optional: upsample restored faces
"upscale": 1 // Optional: overall upscale factor
}detect_nsfw — classify image safety (normal/suggestive/explicit). 2 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-encoded-image>"
}Returns { classification, is_nsfw }. 2 Sats.
detect_objects — detect objects by name with bounding boxes. 5 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-encoded-image>",
"query": "cat, dog, person",
"box_threshold": 0.25, // Optional: detection confidence (0-1)
"text_threshold": 0.25 // Optional: text matching confidence (0-1)
}Returns { detections: [{ label, confidence, bbox }] }. 5 Sats.
remove_object — remove objects by describing what to remove. 15 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-encoded-image>",
"query": "person"
}Describe what to remove (e.g. "person", "car", "watermark"). Returns cleaned image as base64. 15 Sats.
colorize_image — colorize B&W photos with DDColor. 5 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-grayscale-image>",
"model_size": "large" // Optional: "large" (best) or "tiny" (faster)
}Returns colorized image as base64. 5 Sats.
deblur_image — fix blurry photos with NAFNet. 20 sats.
{
"paymentId": "abc123",
"imageBase64": "<base64-blurry-image>",
"task_type": "Image Debluring" // Optional: or "Image Denoising"
}Returns restored image as base64. ~2 min processing. 20 Sats.
extract_document — extract text from PDFs and images. Returns Markdown.
{
"paymentId": "abc123",
"document": "data:application/pdf;base64,...", // PDF or image as data URI
"model": "OCR"
}Returns Markdown with tables, headers, and formatting preserved. 10 Sats/page.
convert_file — convert between 200+ file formats. Returns converted file URL.
{
"paymentId": "abc123",
"fileBase64": "...", // Base64-encoded file
"fileName": "document.docx",
"extensionFrom": "docx",
"extensionTo": "pdf"
}list_models / get_model_pricing — free lookup tools
// list_models — filter by category (optional)
{
"category": "generate_image" // matches tool names: generate_image, generate_text, generate_video, etc.
}
// get_model_pricing — look up a specific model
{
"modelId": 2
}check_job_status / get_job_result — async job helpers
// check_job_status
{
"requestId": "xyz789",
"jobType": "video" // "video", "video-image", "image-3d", "transcription", "epub-audiobook", or "ai-call"
}
// get_job_result
{
"requestId": "xyz789",
"jobType": "video" // same job types as above
}Async Operations (Video, 3D, Transcription, Audiobook, AI Call)
Video generation, image animation, 3D models, transcription, audiobook conversion, and AI calls take time. They return a requestId immediately — poll until complete:
// Step 1: Generate video (returns requestId)
const videoJob = await mcpRequest('tools/call', {
name: 'generate_video',
arguments: {
paymentId: 'abc123',
prompt: 'A rocket launching into space',
duration: 5,
mode: 'pro',
generate_audio: false
}
});
// Returns: { requestId: 'xyz789', status: 'IN_PROGRESS' }
// Step 2: Poll status until complete
let status;
do {
await sleep(5000);
status = await mcpRequest('tools/call', {
name: 'check_job_status',
arguments: { requestId: 'xyz789', jobType: 'video' }
});
} while (status.status === 'IN_PROGRESS');
// Step 3: Get the result
const result = await mcpRequest('tools/call', {
name: 'get_job_result',
arguments: { requestId: 'xyz789', jobType: 'video' }
});
// Returns: { videoUrl: 'https://...' }Error Handling
Errors come back in standard JSON-RPC format:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32603,
"message": "Payment has not been received yet"
}
}| Code | Meaning |
|---|---|
-32700 | Invalid JSON |
-32600 | Missing required fields |
-32601 | Method not found |
-32602 | Wrong parameter types |
-32603 | Internal error (service failure or unpaid invoice) |
Automatic Refunds (LNURL-withdraw)
When a paid tool fails after payment (e.g. upstream timeout, model error), the error response includes an error_code for programmatic handling and an LNURL-withdraw link so you can claim your sats back instantly:
{
"jsonrpc": "2.0",
"id": 3,
"error": {
"code": -32603,
"message": "Image generation timed out",
"data": {
"error_code": "TIMEOUT",
"refund": {
"charge_id": 12345,
"refund_amount": 200,
"lnurl_withdraw": "lnurl1dp68gurn8ghj7...",
"status": "pending"
}
}
}
}Error codes:
| error_code | Meaning | Agent action |
|---|---|---|
TIMEOUT | Upstream service timed out | Retry later or try a different model |
CONTENT_FILTERED | Safety filter triggered | Rephrase the prompt |
RATE_LIMITED | Too many requests | Wait and retry |
INVALID_INPUT | Bad or missing parameters | Fix parameters and retry |
SERVICE_ERROR | Upstream service failure | Try a different model or contact support |
Refund fields:
charge_id— the original charge ID for referencerefund_amount— amount in sats being refundedlnurl_withdraw— LNURL-withdraw link to claim the refundstatus— refund status (e.g.pending,claimed)
How to claim:
- Any Lightning wallet: paste the
lnurl_withdrawvalue into a wallet that supports LNURL-withdraw (Phoenix, Zeus, Alby, etc.) - Programmatically: decode the LNURL (bech32), call the returned URL to get the callback + k1, then hit the callback with your own Lightning invoice to receive the refund
- MCP agents with a Lightning wallet: use the
claim_lnurl_withdrawtool if your wallet MCP supports it
Rate limiting
The first 2 failures per 15-minute window are refunded in full. After that, a 2-sat routing fee is deducted from each refund to discourage abuse.
MCP Resources
MCP clients can also read these resources directly:
| URI | Description |
|---|---|
sats4ai://models | All AI models with specs and pricing |
sats4ai://pricing | Pricing for all services |
/api/models/routing | Model routing transparency — which models power each service, tiers, defaults, and resolution strategy |
OpenClaw Integration
OpenClaw agents can use Sats4AI tools directly:
Option 1: MCP Skill (Recommended)
// Add to openclaw.json
{
"mcpServers": {
"sats4ai": { "url": "https://sats4ai.com/api/mcp" }
}
}Option 2: L402 with lnget
# Agent pays automatically — no API key needed
lnget -X POST https://sats4ai.com/api/l402/generate-image \
-d '{"input":{"prompt":"A Viking visiting Constantinople"},"model":"Best"}'Service Discovery
curl https://sats4ai.com/.well-known/mcp # MCP manifest
curl https://sats4ai.com/.well-known/l402-services # L402 catalog + pricing
curl https://sats4ai.com/api/models/routing # Model routing transparency
curl "https://sats4ai.com/api/discover?q=translate" # Semantic tool search (with performance metadata)What is MCP?
MCP (Model Context Protocol) is an open standard by Anthropic that lets AI assistants connect to external tools and services. Think of it as a universal plug — any AI that supports MCP can use any MCP-compatible service.
Sats4AI's MCP server adds Bitcoin Lightning payments on top. Your AI assistant can generate images, write text, create videos, and more — paying per use with Sats instead of monthly subscriptions. No account needed, no personal data collected, no recurring charges. You only pay when you actually use a tool.
Need Help?
Found a bug or have a feature request? Open an issue on GitHub:
AI agents can also report issues programmatically via the GitHub API. See the official MCP docs for protocol details.