carpe-diem-mcp
Use Carpe Diem MCP to browse models/prices, manage account and spend, and run paid AI tasks with Carpe TEE or cheapest-market routing.
Browse live model catalogue, model details, pricing, pre-run quotes, router markets, and service status (free).
Check account balance, usage history/summary, per-key usage, routing savings, rate limits, purchases, session spend, x402 wallet status, create human top-up links, or revoke the API key.
Run text tasks: chat completions (tools, JSON schema, reasoning, Venice web search), embeddings, web search, and web scraping.
Generate, edit, compose, and upscale images; poll queued image jobs.
Convert text to speech, transcribe audio, and clone voices with consent.
Generate and download videos; generate and download music/sound.
Choose
/v1(Carpe-only TEE) or/router(best-price market) where supported, with privacy filters.Pay via API key credits or x402 USDC on Base, with per-call and session spend limits checked before paid calls.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@carpe-diem-mcp generate an image of a neon city at night and tell me the cost"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
carpe-diem-mcp
Model Context Protocol server for Carpe Diem: Venice AI models (text, image, video, speech, music, embeddings, web search), bought on the Carpe Diem marketplace — usually well below Venice list prices — with best-price routing, hard spend limits and optional x402 pay-per-call from a wallet on Base.
Works with Claude Code, Claude Desktop, Cursor, Cline, LM Studio and any MCP host. Node.js ≥ 20.
33 tools, 3 resources (
carpe://models,carpe://pricing,carpe://markets), 3 prompts.Every result reports the exact cost billed and who served it (and whether it was a TEE).
Spend guard in every mode: per-call and per-session limits checked before sending, from free quotes.
Every tool declares
readOnlyHint/destructiveHint/idempotentHint/openWorldHint.
Quick start
Create an API key on carpe-diem.xyz → API → Keys (
cdm_…) and add credits in API → Balance.Add the server to your MCP host.
Claude Code
claude mcp add carpe -e CARPE_API_KEY=cdm_your_key -- npx -y carpe-diem-mcpClaude Desktop / Cursor / others (claude_desktop_config.json, ~/.cursor/mcp.json, …)
{
"mcpServers": {
"carpe": {
"command": "npx",
"args": ["-y", "carpe-diem-mcp"],
"env": { "CARPE_API_KEY": "cdm_your_key", "CARPE_MAX_SPEND_USD": "5" }
}
}
}Codex (~/.codex/config.toml, or codex mcp add carpe --env CARPE_API_KEY=cdm_your_key -- npx -y carpe-diem-mcp)
[mcp_servers.carpe]
command = "npx"
args = ["-y", "carpe-diem-mcp"]
env_vars = ["CARPE_API_KEY"]VS Code (.vscode/mcp.json) — the key is asked once and stored securely
{
"inputs": [{ "type": "promptString", "id": "carpe-key", "description": "Carpe Diem API key", "password": true }],
"servers": {
"carpe": { "type": "stdio", "command": "npx", "args": ["-y", "carpe-diem-mcp"], "env": { "CARPE_API_KEY": "${input:carpe-key}" } }
}
}OpenCode (opencode.json)
{ "mcp": { "carpe": { "type": "local", "command": ["npx", "-y", "carpe-diem-mcp"], "environment": { "CARPE_API_KEY": "{env:CARPE_API_KEY}" } } } }Gemini CLI (~/.gemini/settings.json) — declare the key in env: Gemini CLI hides inherited variables named *KEY*.
Zed, Cline, Goose, Continue, LM Studio and others, with use cases and costs: carpe-diem.xyz/docs/integrations. ChatGPT and claude.ai on the web only accept remote MCP servers with OAuth: that is the hosted remote mode, in preview until the Carpe Diem side ships.
Restart the host and ask: "Find the cheapest model to summarise this text, then do it."
Related MCP server: a2a-x402-mcp-services
Two surfaces: /v1 and /router
Carpe Diem exposes two different APIs. They are not interchangeable, and this server never treats one as a prefix swap of the other. Tools that exist on both take a route argument:
|
| |
Served by | Carpe alone: Venice through provider keys held in Carpe's TEE | The cheapest market among Carpe, Surplus, AntSeed, OpenRouter, Chutes, Venice, Engy |
Confidentiality | Always TEE | May leave the TEE. |
Price | Carpe price (Venice list × dynamic multiplier) | Winning market's price + router fee (external routes only) |
Paths & shapes | Venice-style ( | OpenAI-style ( |
Async jobs | A finished music track can be claimed once | Settled jobs stay readable 24 h |
Which tools have both surfaces:
Capability |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
multi-edit, upscale, voice clone, web search/scrape |
| — (no market arbitrates them) |
Each result includes route: { surface, endpoint_prefix, route_used, tee, reason?, fallback?, warning? }. When the router served a request outside a TEE and you did not ask for privacy, a warning says so. Job ids are prefixed with the surface that created them (v1:…, router:…, x402:…) so status tools always poll the right one. The default surface is CARPE_DEFAULT_ROUTE (carpe).
Payment modes
Mode | Set | What happens |
API key (recommended) |
| Billed to your Carpe account (credits or prepaid rail). Account tools work. |
x402 (no account) |
| Pays per request in USDC on Base with the |
The API key wins when both are set. Without either, free tools still work (catalogue, prices, quotes, markets, status).
Use a dedicated agent wallet holding only what you are willing to spend, and give it to this server only. The cap is computed from the permits this server signed: a permit to the Carpe escrow signed elsewhere with the same wallet is detected when it raises the allowance above what this server could have left open, but one that sets it lower looks like this server's own and goes unnoticed, and the cap can then under-count what was pulled. The private key never leaves the process and is never logged.
The permit nonce and allowance are read at one pinned block; when the RPC node serving the read does not know that block yet (an RPC spread over several nodes), the read is retried once, 2 s later, and any other failure refuses to sign. When the operator's dry run of the pull fails (X402_PREFLIGHT_FAILED) because the USDC balance is too low, the server does not re-sign (a new permit would not help) and the error says to fund the wallet; any other dry-run failure drops the cached permit and fetches a fresh challenge, once.
Spend guard
Before every paid call the server estimates its cost from free endpoints (/router/quote for tokens, /pricing for media, /v1/video/quote or the unpaid x402 challenge for video) and refuses locally — nothing is sent — if it exceeds:
CARPE_MAX_PER_CALL_USD(default0.50), orwhat is left of
CARPE_MAX_SPEND_USDfor this session (default5).
A call whose cost cannot be estimated is assumed to cost the per-call limit. After each call the real cost from the operator's headers is added. carpe_session_spend shows the tally. 0 disables a limit.
Retries never risk double billing: paid calls are retried once only when the operator certainly did not run them (429 / capacity 503), or on /router where an Idempotency-Key makes a replay free. Never after a timeout or an ambiguous 5xx.
Tools
Group | Tools |
Catalogue (free) |
|
Account (free, API key) |
|
Text (paid) |
|
Image (paid) |
|
Audio |
|
Video / music |
|
Media inputs accept an https:// URL, a data: URI, or (stdio only) a local path. Media outputs are returned inline when small (images ≤ 4 MiB, audio ≤ 8 MiB) and/or written to CARPE_OUTPUT_DIR; videos and music are always written to disk (the temp dir when CARPE_OUTPUT_DIR is unset), because the operator keeps a finished video only ~10 minutes and a /v1 music track can be claimed only once.
CARPE_READ_ONLY=1 removes every tool that can spend or change anything.
Configuration
Variable | Default | |
| — |
|
| — | x402 mode (budget ≥ 0.10, required with the key) |
|
| Reads the chainId (checked before signing), the USDC permit nonce and allowance to the escrow (at one block), and the balance |
|
| Spend guard ( |
|
|
|
|
| |
| — | Where media files are written |
|
|
|
|
| |
| 32 MiB / 64 MiB | Download caps |
|
| x402 spend state |
|
|
|
|
| HTTP bind address; anything else requires |
| — | Bearer token (≥ 16 chars) required by the HTTP transport off loopback |
| — | Comma-separated browser origins allowed on the HTTP transport |
|
|
|
|
|
|
HTTP mode
CARPE_API_KEY=cdm_… npx carpe-diem-mcp --http --port 3333 # http://127.0.0.1:3333/mcpThe HTTP server spends the configured credentials on behalf of whoever reaches it, so it binds to 127.0.0.1 by default; any other CARPE_MCP_HOST requires CARPE_MCP_AUTH_TOKEN (≥ 16 chars, sent as Authorization: Bearer). Browser origins are refused unless listed in CARPE_MCP_ALLOWED_ORIGINS. Local file inputs and private-network URLs are disabled in HTTP mode.
Carpe Diem refuses requests from sanctioned regions (HTTP 451). Buying inference from the United States is allowed.
Remote mode (hosted)
Preview. This is the server side of the hosted connector for ChatGPT and claude.ai (
https://mcp.carpe-diem.xyz/mcp). It works against any OAuth issuer that behaves as described below, but the Carpe Diem side (OAuth for MCP clients oncompte.carpe-diem.xyz, and the operator accepting these tokens) is not live yet. Until it is, use the local server above.
CARPE_MCP_HOST=127.0.0.1 npx carpe-diem-mcp --remote --port 3333 # behind a TLS reverse proxy--remote (or CARPE_MCP_REMOTE=1) turns the server into an OAuth 2.1 protected resource, one process for many users:
No credential on the server. It refuses to start if
CARPE_API_KEY,CARPE_X402_PRIVATE_KEY,CARPE_X402_BUDGET_USD,CARPE_MCP_AUTH_TOKENorCARPE_OUTPUT_DIRis set. Each user signs in on the authorization server; their access token is relayed verbatim (Authorization: Bearer) to the operator on account and paid routes, and the operator resolves it to the connector's owncdm_key (usage per connector in API → Usage, revocation in API → Keys, daily cap chosen at consent). Public reads (models, prices, quotes) are sent without it: the operator does not accept connector tokens on those routes, so they all count on its anonymous rate limit for the server's IP (catalogue reads are cached for that reason; price quotes are not).Discovery.
GET /.well-known/oauth-protected-resource(also under/mcp, RFC 9728) names the issuer and the scopes. A request without a valid token gets401withWWW-Authenticate: Bearer resource_metadata="…", which starts the OAuth flow in the client.Token checks, on every request. JWT signature against the issuer's JWKS (ES256 by default, cached, refetched on an unknown
kid),iss= the issuer,audcontains this server's URL (RFC 8707; a token minted for anything else is refused), headertyp: at+jwt(RFC 9068: an id_token is refused),expenforced to the second (as the operator does),nbf/iatwith 30 s of skew, asub.Scopes.
carpe:inferencefor paid tools (and their job-status tools),carpe:account.readfor balance, usage and the top-up link. Tools a token does not cover are hidden; calling one answers403withWWW-Authenticate: Bearer error="insufficient_scope", scope="…"so the client can ask for more.Revocation. When the operator refuses a relayed token as invalid (the connector was revoked in API → Keys), the server answers that token
401 invalid_tokenitself until it expires, so the client signs in again instead of keeping a session whose every call fails.Per-user isolation. A session belongs to the
subthat opened it (another account presenting its id gets403). Each user has their own spend guard (CARPE_MAX_PER_CALL_USDper call;CARPE_MAX_SPEND_USDper UTC day, off by default because the connector's daily cap on the operator is authoritative), their own rate limit and a cap on live sessions.Rate and memory limits. Per user: a token bucket in which every message of a JSON-RPC batch counts (a batch larger than the burst is refused with
400), and at mostCARPE_MCP_MAX_INFLIGHT_PER_USERtool calls being processed at once (429+Retry-After). That cap is counted per JSON-RPC message, not per HTTP request: the messages of a batch run in parallel, so eachtools/callin it counts as one (a batch with more tool calls than the cap is refused with400), and the other requests of a body count as one more, together. A body of notifications or responses only (notifications/cancelled…) is never refused by it, so a client at the cap can still cancel; once every request of a POST is answered or cancelled, the server ends that POST's stream (the SDK never answers a cancelled request), which frees its slots. The GET event stream does not count. For everyone together: a budget of request-body bytes held in memory, counted fromContent-Lengthbefore the body is read (a body withoutContent-Lengthcounts as the 40 MB per-request maximum),503+Retry-Afterwhen it is spent, of which each user may hold at mostCARPE_MCP_BODY_BUDGET_PER_USER_MB(429beyond); a body must be fully received withinCARPE_MCP_BODY_TIMEOUT_S(408, and its bytes are freed), so a stalled upload cannot hold the budget; and a cap on live sessions (about 1 MiB of memory each). What a body costs once parsed depends on its number of JSON values, not its size (40 MB of[{},{},…]is ~14 million objects, more than the whole heap): before parsing, a linear scan counts the{,[and,outside strings, and a body with more thanCARPE_MCP_MAX_JSON_VALUESis refused with413without being parsed. A mediadata:URI is one string, so it counts for nothing; the values of an accepted body are charged to the body budget on top of its bytes (16 bytes each). A compressed body (Content-Encoding) is inflated before parsing and counts as the 40 MB maximum. The public catalogue reads (/v1/models,/router/models,/pricing,/router/markets) are cached for 60 s and shared by all sessions.Removed tools:
carpe_revoke_this_key(revoke the connector on the website),carpe_voice_clone(consent is collected on the website),carpe_x402_status(no wallet),carpe_topup_link(connector tokens cannot start a payment; top up on the website). 29 tools remain.No disk. Media inputs are
https://URLs (public hosts only, redirects included) ordata:URIs; local paths are refused. Images up to 4 MiB and audio up to 8 MiB come back inline. A larger image comes back as a link from the operator's/v1/image/share(up to 10 MiB, about 1 hour). A video or a track the operator hands over as a link (a Carpe video stays about 10 minutes) comes back as that link.Paid outputs are never thrown away. Anything else too large to return inline (speech above 8 MiB, a router video served as a file by Surplus, a track above 8 MiB, an image the share refused or above 10 MiB) is kept in memory by the server for one hour and returned as a link
CARPE_MCP_PUBLIC_URL/media/<id>with its expiry (expires_at). The link needs no sign-in: its id is 128 random bits and goes only into the result of the user who paid; it is served with its content type (image, audio or video only; anything else as anapplication/octet-streamattachment),Content-Disposition,Cache-Control: private, no-store,X-Content-Type-Options: nosniff, and404once expired.GETandHEADare served (HEAD: the same status and headers,Content-Lengthincluded, no body), nothing else (403at Nginx). A job's output is stored once per user: polling the same finished job again returns the same link and expiry, without asking the operator again. The store is bounded byCARPE_MCP_MEDIA_STORE_MB, and each user by a share of it,CARPE_MCP_MEDIA_STORE_PER_USER_MB(stored files and room held, together), so one user cannot fill it for the others. When it (or the user's share) is full:a call whose output comes back only once (speech, a synchronous image or upscale, a Carpe-served track) is refused before anything is paid or fetched (
MEDIA_STORE_FULL): room for its largest possible output (32 MiB for speech and music, 16 MiB for a synchronous image) is held while it runs;a router video (which Surplus hands over as the file itself, up to
CARPE_MAX_VIDEO_BYTES, 64 MiB) is not downloaded without room for it either: each retrieve holds that much first, and a full store answersMEDIA_STORE_FULLbefore downloading, naming the job, which stays retrievable on the operator;an output the operator serves again (queued image) is an error that names the job: the user polls it again later and gets it. A queued
/v1image is released on the operator (/complete) only after it was delivered.
Concurrent polls of the same job by the same user (a batch, several sessions) share one retrieve: one download, one reservation, one stored copy.
Logs are JSON lines on stderr with the method, tool name, status, duration, error code and an HMAC of the user's
sub: never prompts, arguments, outputs, error messages, tokens or media ids./healthanswers{"ok":true}and nothing else.
Variable | Default | |
|
| Authorization server ( |
|
| This server's resource URL: advertised in the metadata, required in the token |
| from the issuer metadata | Signing keys (RFC 8414 |
|
| Accepted JWS algorithms (asymmetric only), clock skew on |
|
| Requests per user (token bucket) |
|
| Live sessions (about 1 MiB of memory each); a user's least recently used session is closed beyond the cap |
|
| Tool calls of one user being processed at once, each |
|
| Request-body bytes held in memory, all users together ( |
|
| Each user's share of it ( |
|
| Delay to receive a whole request body ( |
|
| JSON values of one request body ( |
| random per process | Key of the hashed user id in the logs (set it to correlate across restarts) |
|
| Memory budget of the temporary media store (stored outputs plus room held for one-shot calls in flight); at least the largest single output (64) |
|
| Each user's share of the media store, room held included (the largest output, 64, plus one synchronous call); at least |
CARPE_MCP_HOST, PORT and CARPE_MCP_ALLOWED_ORIGINS apply as in HTTP mode. Run it behind a TLS reverse proxy; http URLs are accepted for the issuer and the resource only on loopback (tests).
Deployment (Docker image built from a release's commit, compose file, Nginx vhost with /media/, memory sizing, checks, monitoring, update and rollback): deploy/README.md. The release workflow writes each release's commit in its notes (Commit: <sha>), and the procedures check that the tag still names it: a consistency check between tag and notes, not an independent verification (both are editable by the same accounts; signed tags would be the next step).
Development
npm install
npm test # build + unit/integration tests against a mock operator
npm run test:contract # free checks against the live API (catalogue, quotes, x402 challenges)
npm run test:e2e # REAL calls, spends a few cents (CARPE_API_KEY in .env.local, capped at $0.90)
npx @modelcontextprotocol/inspector node dist/cli.jsNot covered yet: the Anthropic-shaped /v1/messages (use carpe_chat), JEV decisions, and key creation via wallet/email sessions (create keys on the website).
Français
Serveur MCP pour Carpe Diem. Il donne à un agent l'accès aux modèles Venice (texte, image, vidéo, voix, musique, embeddings, recherche web) via la place de marché Carpe Diem.
Deux surfaces.
route: "carpe"passe par/v1: Carpe seul, toujours dans son TEE.route: "router"passe par/router: le marché le moins cher, éventuellement hors TEE. Chaque résultat indique le marché qui a servi la requête et si c'était un TEE.Deux modes de paiement. Avec une clé API
cdm_, la dépense est facturée au compte. En x402, un permit USDC est signé pour ce qui reste du budget, allowance encore ouverte comprise : l'escrow ne peut pas prélever plus que le budget au total. Utilisez un wallet dédié à ce serveur : un permit signé ailleurs avec le même wallet peut passer inaperçu.Garde de dépense. Le coût est estimé gratuitement avant chaque appel. L'appel est refusé localement au-delà de
CARPE_MAX_PER_CALL_USDou du budget de sessionCARPE_MAX_SPEND_USD.Mode distant (aperçu).
--remotesert plusieurs utilisateurs derrière OAuth, pour ChatGPT et claude.ai. Le serveur ne détient aucune clé : il relaie le jeton de chaque utilisateur à l'operator, n'écrit rien sur disque et ne journalise ni prompts ni jetons. Il attend le côté Carpe Diem (OAuth pour les clients MCP, acceptation du jeton par l'operator).
License
MIT. Not affiliated with Venice AI.
Available Tools
33 toolscarpe_balanceAccount balanceARead-onlyIdempotent
Spendable balance of the Carpe Diem account behind CARPE_API_KEY: credits (1 credit = $0.01; escrow = purchased, pending = spent not yet settled, holds = reserved for in-flight requests, available = spendable), unsettled debt, prepaid account and the active payment rail. Free.
Inputs: no named parameters.
carpe_chatChat completionA
Run a chat completion on Carpe Diem (OpenAI-compatible; Venice models: GPT, Claude, Gemini, DeepSeek, GLM, Qwen, Llama, uncensored models…). Two surfaces: route "carpe" (/v1, Carpe's TEE, private) or route "router" (/router, cheapest market). Returns the answer plus usage, the exact cost billed and which market served it. Supports function tools, response_format (JSON schema), reasoning_effort and Venice web search. Paid — use carpe_quote first for expensive requests.
Inputs: seed, stop, extra, model, +14 more.
carpe_embeddingsEmbeddingsA
Compute embedding vectors (OpenAI-compatible) for 1–128 texts. route "carpe" (/v1) or "router" (/router, cheapest market; privacy applies). Paid per input token.
Inputs: input (required), model, route, privacy, +2 more.
carpe_image_editEdit an imageC
Transform one image from a prompt (imageEdit models such as qwen-image-2-edit, nano-banana-2-edit, gpt-image-2-edit). image: https URL, data: URI or (stdio) a local file path.
Inputs: image (required), prompt (required), mode, extra, +8 more.
carpe_image_generateGenerate an imageA
Generate image(s) from a prompt (Venice image models: Flux, GPT Image, Nano Banana, Seedream, Qwen Image, Recraft, uncensored SD…). Images are returned inline and/or saved to CARPE_OUTPUT_DIR. Fixed price per image (carpe_pricing). Slow models run as a queued job automatically.
Inputs: prompt (required), mode, seed, extra, +12 more.
carpe_image_multi_editCompose / edit several imagesB
Compose or edit from 1–3 source images and a prompt (e.g. "put the product from image 1 on the table of image 2"). Always on /v1 — no market arbitrates multi-edit. Runs as a queued job.
Inputs: images (required), prompt (required), extra, model, +6 more.
carpe_image_statusPoll a queued image jobBIdempotent
Fetch the result of a queued image job (job_id from an image tool). Polls on the surface that created the job. Free.
Inputs: job_id (required), wait_seconds.
carpe_image_upscaleUpscale an imageA
Increase image resolution 1–4× (source ≥ 256×256). Always on /v1. image: https URL, data: URI or local path (stdio).
Inputs: image (required), extra, model, scale.
carpe_key_usageUsage per API keyBRead-onlyIdempotent
Requests, tokens and cost per API key of the account over the last N days, with each key's rail and status. Free.
Inputs: days.
carpe_list_modelsList Carpe Diem modelsARead-onlyIdempotent
Page through the live Carpe Diem model catalogue (Venice models plus Carpe metadata). Filter by type (text, image, video, tts, …), capability, privacy or a search string. Use carpe_diem_type to pick the right tool: text/code → carpe_chat, embedding → carpe_embeddings, image → carpe_image_generate, imageEdit → carpe_image_edit, upscale → carpe_image_upscale, tts → carpe_tts, asr → carpe_transcribe, music → carpe_music_generate, video/imageToVideo/referenceToVideo → carpe_video_generate. route "router" reads /router/models, which adds the best-price markets able to serve each text model. Free.
Inputs: type, limit, route, offset, +4 more.
carpe_marketsBest-price router marketsARead-onlyIdempotent
Live state of the /router best-price markets: which markets are on, the external routing fee, observed latency per market, and whether external execution is open to this key. Free.
Inputs: no named parameters.
carpe_model_detailsModel detailsARead-onlyIdempotent
Everything about one model: catalogue row (capabilities, constraints such as video durations or music lengths, TTS voices), Carpe price (USD per 1M tokens, or fixed cost per image/call), Venice rate limits and live capacity. Free.
Inputs: model (required).
carpe_music_generateGenerate music / soundA
Queue music, a sound effect, or long-form speech (music-pipeline models: ElevenLabs Music, ACE-Step, Lyria, MiniMax, ElevenLabs sound effects / TTS v3-v4). Each model has its own accepted durations, lyrics and instrumental options — read them with carpe_model_details first. Returns a job_id for carpe_music_status.
Inputs: prompt (required), extra, model, route, +6 more.
carpe_music_statusPoll / download musicAIdempotent
Check a music job from carpe_music_generate; when completed, the track is saved to disk (it can be retrieved only once on /v1) and returned. Free.
Inputs: job_id (required), wait_seconds.
carpe_pricingCarpe Diem pricesBRead-onlyIdempotent
Live Carpe prices. Token models: USD per 1M input/output tokens (inputPrice/outputPrice, after the dynamic multiplier; inputBase/outputBase are Venice list prices). Media: fixed USD per image/edit/web call. Filter by model substring. Free.
Inputs: kind, sort, limit, model.
carpe_purchasesCard purchasesCRead-onlyIdempotent
Credit purchases made by card on the account. Free.
Inputs: no named parameters.
carpe_quoteQuote a chat request across marketsARead-onlyIdempotent
Price a text request BEFORE running it, on both surfaces: what /v1 (Carpe alone, in its TEE) would bill, and what /router (best price) would pick among the markets — with each market's price, availability and whether it is a TEE. Give messages (or a prompt) so the input size is estimated, or input_tokens directly. Costs nothing.
Inputs: model, prompt, privacy, messages, +2 more.
carpe_rate_limitsRate limitsARead-onlyIdempotent
The operator rate limit applied to this key right now (max per window, remaining, reset), separate read budget, and parallel lanes. Free.
Inputs: no named parameters.
carpe_revoke_this_keyRevoke this API key (kill switch)ADestructiveIdempotent
IRREVERSIBLE: permanently revokes the API key this server uses (CARPE_API_KEY). Every later call with it fails. Use only if the user explicitly asks, or if the key leaked. Requires confirm: "REVOKE".
Inputs: confirm (required).
carpe_routing_summaryRouter savings summaryBRead-onlyIdempotent
How the account's /router requests were served: wins per market and savings versus Carpe-only pricing. Free.
Inputs: days.
carpe_session_spendSpend in this sessionARead-onlyIdempotent
What this MCP server has spent since it started, per tool, against the CARPE_MAX_SPEND_USD and CARPE_MAX_PER_CALL_USD guards. Local, free.
Inputs: no named parameters.
carpe_statusCarpe Diem service statusBRead-onlyIdempotent
Operator health (database, settlement, providers) and marketplace capacity (headroom, dynamic price multiplier). Free.
Inputs: no named parameters.
carpe_topup_linkTop-up linkA
Card top-up for this account. Nothing is charged by this tool: with create: true it returns a checkout URL that a HUMAN must open to pay (valid for a limited time); otherwise it only lists the credit tiers. Never open or pay the link yourself.
Inputs: create, tier_id.
carpe_transcribeTranscribe audioB
Speech to text (Whisper-compatible). audio: https:// URL, data: URI, or local path (stdio). Formats such as mp3, wav, m4a, flac, ogg, webm.
Inputs: audio (required), model, route, prompt, +2 more.
carpe_ttsText to speechA
Turn text (≤ 4096 characters) into speech. Voices are model-specific: omit voice for the model default, or read the voices of a model with carpe_model_details. A cloned voice (vv_… from carpe_voice_clone) only works on route "carpe" with the model it was cloned for. Billed per character.
Inputs: input (required), model, route, speed, +2 more.
carpe_usage_historyUsage historyBRead-onlyIdempotent
Per-request history of the account, newest first: model, provider pseudonym, tokens, cost (USDC), market that served, routing reason, latency, savings. Free.
Inputs: days, limit, market, offset.
carpe_usage_summaryUsage summaryARead-onlyIdempotent
Account spend aggregated by model and by day over the last N days (1–90, default 7). Free.
Inputs: days.
carpe_video_generateGenerate a videoA
Queue a video (Sora, Veo, Kling, Seedance, Wan, LTX, Grok Imagine…; text-to-video, image-to-video, reference-to-video). The payload is priced first (free quote) and refused locally above CARPE_MAX_PER_CALL_USD. Returns a job_id; carpe_video_status downloads the MP4 when ready (videos take minutes). Read the model constraints (durations, aspect ratios, resolutions) with carpe_model_details.
Inputs: model (required), prompt (required), duration (required), extra, +12 more.
carpe_video_statusPoll / download a videoAIdempotent
Check a video job from carpe_video_generate; when completed, downloads the MP4 to CARPE_OUTPUT_DIR (or the temp dir) and returns its path. Polls the surface that created the job. Free.
Inputs: job_id (required), wait_seconds.
carpe_voice_cloneClone a voiceA
Upload a short reference sample (one speaker) and get a vv_… voice handle for carpe_tts (route "carpe", same model). The upload itself is free but needs a funded account. ONLY with consent: the voice must be the user's own, or its speaker must have agreed to be cloned. The handle expires (~7 days).
Inputs: sample (required), consent (required), model.
carpe_web_scrapeWeb page scrapeB
Fetch one web page as text/markdown through Carpe (Venice augment/scrape). Always on /v1. Flat fee per call.
Inputs: url (required), extra.
carpe_web_searchWeb searchB
Live web search through Carpe (Venice augment/search). Always on /v1 — no market arbitrates web search. Flat fee per call (see carpe_pricing, model augment-search).
Inputs: query (required), extra.
carpe_x402_statusx402 wallet statusARead-onlyIdempotent
x402 mode only: the agent wallet address, its USDC balance on Base, the permit budget, what was billed and what is left. Free.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 33 tools
Most tools map to a distinct action+resource: generation (image/video/music/tts/transcribe), web utilities, and account introspection are clearly separated, and carpe_image_edit vs carpe_image_multi_edit vs carpe_image_upscale is spelled out in the descriptions. The weakest zone is the free billing/observability cluster (carpe_status, carpe_balance, carpe_x402_status, carpe_session_spend, carpe_rate_limits, carpe_usage_history, carpe_usage_summary, carpe_key_usage, carpe_routing_summary, carpe_markets, carpe_pricing, carpe_quote), where an agent can easily pick the wrong one; the long descriptions mitigate but don't eliminate this.
Every tool shares the carpe_ prefix and stays snake_case and readable, which makes the set feel like one product. The only deviation is mixed conventions inside the prefix: some are verb phrases (carpe_list_models, carpe_image_generate, carpe_revoke_this_key) while others are bare nouns (carpe_chat, carpe_pricing, carpe_balance, carpe_status), so the verb_noun pattern is not fully predictable.
33 tools is above the comfortable range and a sizeable share of them are free metadata/accounting calls rather than capabilities. The domain is genuinely broad (chat, embeddings, search, scrape, image, video, music, TTS, ASR, voice cloning, billing), so the volume is partly earned, but the surface feels heavy and would benefit from consolidating the usage/status/balance family.
Coverage is strong across the whole media and text lifecycle: catalogue discovery, pricing/quoting, generation, and polling for image, video, and music jobs, plus balance, purchases, top-up, usage, and key handling. Remaining gaps are mostly lifecycle edges: no cancel/delete for queued jobs, no job listing, and for keys only revoke of the server's own key with no create/rotate.
Maintenance
Related MCP Connectors
x402 pay-per-call APIs over MCP, settled in USDC on Base for autonomous agents and developers.
Paid MCP tools behind one endpoint. Agents pay per call in USDC on Base via x402.
Pay-per-use MCP tools for AI agents. USDC on Base via x402. No API keys.
Pay-per-call APIs via x402 USDC on Base. Hosted MCP: original gateway; stdio: full catalog.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to discover, call, and pay for existing HTTP APIs over MCP with x402 paywalls, non-custodial settlement, and no code changes to the backend.322 npm68Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables agents to access production-grade paid MCP tools with real on-chain x402 v2 settlement, including EVM wallet risk scoring, payload normalization, and facilitator discovery, all discoverable via Bazaar-compatible metadata.MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to discover and invoke x402-monetized computational engines for media geometry, measurements, JSON hygiene, and ComfyUI preflight audits, with USDC settlement on Base Mainnet.-
- AlicenseNot gradedqualityBmaintenanceMarketplace of MCP servers and APIs that agents pay for per call in USDC over x402 on Base; connect anonymously, pay only when you callMIT