Skip to main content
Glama
veniceai

Venice MCP Server

Official
by veniceai

@veniceai/mcp-server

Model Context Protocol server for the Venice API - uncensored, private AI for any MCP host (Claude Desktop, Cursor, ChatGPT, LM Studio, Continue, LibreChat, Open WebUI, AnythingLLM, Jan, Le Chat).

npm License: MIT

Plug Venice's chat, image, video, audio, music, and character models into any agent in 30 seconds, including billing and API-key operations. 45 tools across all modalities, one config block.

Quick start

1. Get a key from venice.ai

See the API key guide for step-by-step instructions.

2. Add this to your MCP host config

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows), Cursor (~/.cursor/mcp.json), LM Studio, etc:

{
  "mcpServers": {
    "venice": {
      "command": "npx",
      "args": ["-y", "@veniceai/mcp-server@0.3.0"],
      "env": { "VENICE_API_KEY": "<your-venice-api-key>" }
    }
  }
}

3. Restart your MCP host

That's it. Type a prompt — your agent now has chat, image, video, music, TTS, ASR, and 39 more Venice tools.

Related MCP server: Medhā MCP

What you get

45 tools spanning every Venice modality plus billing and API-key operations, 3 resources (venice://models, venice://styles, venice://voices) and 3 prompt templates (uncensored research, NSFW creative writing, image style explorer). The voices resource is built live from each TTS model's catalog metadata.

Every tool declares explicit readOnlyHint, destructiveHint, idempotentHint and openWorldHint annotations, so hosts can run lookups without prompting and ask before anything destructive, like media cleanup or a crypto relay.

💬 Chat & embeddings

Tool

Description

venice_chat

Chat completions with documented text/image/audio/video/file blocks, structured response formats, function tools, prompt caching, and reasoning controls. Calls are plaintext and non-streaming.

venice_responses

Alpha, stateless Responses API for text models. Supports text/image input and reasoning controls. E2EE-capable models are not supported, and this tool does not expose unreliable tool fields.

venice_embeddings

Compute embeddings for text input (OpenAI-compatible).

venice_chat_with_character

Chat with a Venice character by slug.

🎨 Image

Tool

Description

venice_image_generate

Generate an image. Supports model-specific width/height or free-string aspect_ratio/resolution, quality tiers, prompt enhancement, style references, web search, variants, and output format.

venice_image_edit

Edit an image with a prompt. Supports free-string sizing, output format, and prompt enhancement; returns a base64 image.

venice_image_multi_edit

Edit multiple images together with a single prompt (multi-image composition / outpainting), including free-string sizing, quality, output format, and prompt enhancement.

venice_image_upscale

Upscale an image (2–4× scale, with a creativity control). Returns base64 PNG.

venice_image_remove_bg

Remove image background; returns a transparent PNG.

venice_image_styles

List image style presets available for venice_image_generate.

🎬 Video

Tool

Description

venice_video_generate

Queue a video generation. Supports Sora 2, Veo 3.1, Kling, Wan, LTX 2, Seedance (incl. r2v video-to-video), Runway Gen-4, and others. Accepts image, video, audio, reference inputs, and the Seedance consent attestation flow where applicable.

venice_video_status

Check status of a queued video job. Returns JSON progress while PROCESSING, then either an embedded MP4 or a download_url resource link. Pass the queue-time download_url for VPS / Grok Imagine Private models.

venice_video_complete

Mark a completed video as downloaded. Reports server-side deletion only when Venice confirms success.

venice_video_quote

Get a price quote for a video generation BEFORE queuing.

🔊 Audio (TTS / ASR)

Tool

Description

venice_tts

Convert text to speech. Supports cloned voices, temperature, and Venice's streaming flag; MCP returns the completed audio as one buffered result.

venice_asr

Transcribe audio from a URL as JSON or text, with optional word and character timestamps.

venice_voice_clone

Discover live model-scoped voice metadata, or clone a voice from a sample audio URL for tts-chatterbox-hd (default) or tts-minimax-speech-02-hd. Cloned voices are returned as a vv_<id> handle to pass as the venice_tts voice.

venice_audio_quote

Get a price quote for music generation BEFORE queuing.

🎵 Music

Tool

Description

venice_music_generate

Queue music generation. Uses the live QueueAudioRequest fields: force_instrumental, lyrics_prompt, lyrics_optimizer, loop, voice, language_code, speed, and model-specific duration_seconds. Deprecated instrumental / lyrics are still accepted as aliases.

venice_music_status

Check status of a queued music job. Returns JSON progress while PROCESSING, then either embedded audio or a download_url resource link.

venice_music_complete

Mark a completed music job as downloaded and delete server-side media.

🌐 Web augment

Tool

Description

venice_web_search

Search with Brave (default, Zero Data Retention) or Google (proxied/anonymized by Venice). Returns the parsed { query, results } as structured content.

venice_web_scrape

Scrape one URL into markdown text.

venice_text_parser

Extract text from a document URL (PDF, DOCX, EPUB, PPTX, XLSX, …).

📚 Catalog

Tool

Description

venice_list_models

Page through the live model catalog, every type by default, with server-side filtering for asr, decision, embedding, image, music, text, tts, upscale, inpaint, video, all, code, or any newer catalog type. Returns compact summaries (50 per page by default, up to 200) with total, next_offset, and every matching model id; set verbose for full model objects.

venice_model_details

Get one exact model's full catalog row, including model_spec constraints, capabilities, and pricing.

venice_model_traits

Get the live trait-name to model-id mapping for a model type.

venice_model_compatibility_mapping

Get compatible model-name to Venice model-id mappings.

venice_list_characters

List public Venice characters with search, tag/category/model, content, capability, sort, and pagination filters. API key only.

venice_get_character

Get a public character by slug. API key only.

venice_character_reviews

List paginated public reviews for a character. API key only.

🔐 TEE attestation

Tool

Description

venice_tee_attestation

Fetch Intel TDX attestation evidence, optional NVIDIA evidence, and the model signing key using a caller-generated 32-byte nonce.

venice_tee_signature

Fetch the enclave response-signature payload for a chat completion request ID.

Both routes are currently live without authentication. They only apply to text models advertising supportsTeeAttestation. These tools expose evidence; they do not verify it, and this server does not encrypt chat. venice_chat rejects enable_e2ee.

Media API behavior

  • Image aspect_ratio and resolution values remain free strings because supported values vary by model. Venice validates them. When enhance_prompt is applied, image generate/edit/multi-edit results include the URL-decoded enhanced_prompt returned in x-venice-enhanced-prompt. Image responses are capped at VENICE_MAX_IMAGE_RESPONSE_BYTES (default 32 MiB). Unlike an oversized video, an oversized image result cannot be retried for free, so request fewer variants, a lower resolution, or jpeg/webp output for large batches.

  • Current public Seedance models may reject media containing detectable persons outright. Defensive support remains for compatible or legacy needs_consent responses: the tool returns Venice's policy text, affected media roles, and next step. The three consents.seedance flags are legal attestations and must only be set to true after the user explicitly confirms all three statements. Consent is never a content-policy bypass.

  • Completed videos may arrive as video/mp4 or as JSON with a download_url. Binary completions are returned as an embedded MCP resource (blob, mimeType: "video/mp4", synthetic venice://video/... URI), streamed into a bounded buffer that defaults to 25 MiB (VENICE_MAX_VIDEO_RESPONSE_BYTES). Oversized binary results remain queued and can be retried with the same queue ID after changing the limit. JSON completions return the download_url as an MCP resource link instead of fetching that URL. Because that link stops working once the stored media is removed, delete_media_on_completion is not applied to download_url results: download the file first, then call venice_video_complete (and optionally send an HTTP DELETE to the link to revoke it). For VPS / Grok Imagine Private models, download_url is returned only on queue; pass that URL into venice_video_status so a COMPLETED retrieve without an inline URL still yields a resource link.

  • Music retrieval returns JSON status and timing while processing, then an audio/* body when complete (including MP3, WAV, FLAC, and M4A). Completed tracks are returned as embedded MCP blob resources with a synthetic venice://music/... URI and buffered up to 32 MiB by default (VENICE_MAX_AUDIO_RESPONSE_BYTES). That configurable limit applies only to binary media; successful status JSON uses a separate fixed 1 MiB safety limit. Oversized, empty, or non-audio responses are not deleted, so the same queue ID remains available for cleanup or a retry with a higher limit. JSON completions with a download_url return it as an MCP resource link; as with video, delete_media_on_completion is not applied to them: download the file first, then call venice_music_complete.

⛓️ Crypto

Tool

Description

venice_crypto_networks

List the live network slugs supported by the crypto RPC proxy. No authentication required.

venice_crypto_rpc

Proxy one JSON-RPC request or a batch of up to 100 requests. Returns compact JSON (max 64 KiB) plus Venice's credit, cost, and idempotent-replay headers. Transaction broadcasts must be sent as single requests with idempotency_key.

💰 Billing (ADMIN API key only)

Tool

Description

venice_billing_balance

Get current USD, DIEM, and bundled-credit availability.

venice_billing_usage_analytics

Get beta aggregate usage by date, model, and API key using a lookback or custom date range.

venice_billing_usage_history

Walk detailed usage with cursor pagination, first-page filters, and JSON or CSV output.

Usage-history first pages default to 10 rows. JSON and CSV pages are returned whole, never truncated. A page exceeding 64 KiB returns an error without partial rows or a continuation cursor; restart with the original filters and a smaller page_size (minimum 10), or a narrower timestamp range. Retrying the same cursor cannot reduce the page size encoded in it.

Usage-history continuation calls must send cursor without the original filters. CSV pages return a csv:-prefixed nextCursor so a cursor-only follow-up stays on text/csv. The deprecated /billing/usage route is not wrapped. Billing tools require an ADMIN VENICE_API_KEY and fail locally instead of falling back to SIWX. Inference keys cannot call these endpoints.

🔑 API keys

Tool

Description

venice_list_api_keys

List active key metadata without full key secrets. ADMIN API key only.

venice_get_api_key

Get one key's metadata, usage, balances, and rate limits. ADMIN API key only.

venice_api_key_rate_limits

Get current balances, access status, tier, and model limits. API key only.

venice_api_key_rate_limit_logs

Get the last 50 exceeded rate-limit events. ADMIN API key only; experimental upstream.

List, get, and rate-limit logs require an ADMIN VENICE_API_KEY. venice_api_key_rate_limits accepts an INFERENCE or ADMIN key. These tools never forward SIGN-IN-WITH-X. Web3 challenge and mint are not registered here.

💳 x402 wallet helpers

Optional — only needed if you authenticate with a wallet via x402 instead of an API key. See x402 — pay with a wallet.

Tool

Description

venice_x402_balance

Check the prepaid x402 credit balance for a wallet address.

venice_x402_top_up_info

Fetch the top-up payment requirements: the accepted Base and Solana USDC options, each with network, asset, receiver wallet, and minimum amount. Takes no arguments.

venice_x402_transactions

List recent x402 top-up + debit transactions for a wallet.

Configuration

Env var

Default

Notes

VENICE_API_KEY

(none)

Your Venice API key. The simplest setup.

VENICE_DEFAULT_CHAT_MODEL

deepseek-v4-flash-0731

VENICE_DEFAULT_IMAGE_MODEL

flux-2-pro

VENICE_DEFAULT_TTS_MODEL

tts-kokoro

VENICE_DEFAULT_ASR_MODEL

openai/whisper-large-v3

VENICE_DISABLE_NSFW

0

Set to 1 to remove NSFW capability notes from tool descriptions.

VENICE_HTTP_TIMEOUT_MS

60000

VENICE_MAX_VIDEO_RESPONSE_BYTES

26214400 (25 MiB)

Maximum completed MP4 bytes buffered and base64-embedded by venice_video_status.

VENICE_MAX_IMAGE_RESPONSE_BYTES

33554432 (32 MiB)

Maximum response bytes buffered by venice_image_generate, venice_image_edit, venice_image_multi_edit, venice_image_upscale, and venice_image_remove_bg. Larger results are discarded with an error.

VENICE_MAX_AUDIO_RESPONSE_BYTES

33554432 (32 MiB)

Maximum audio bytes buffered and base64-embedded by venice_tts and venice_music_status. An oversized TTS result is discarded with an error; an oversized music result stays queued for a retry.

VENICE_SIWX_TOKEN

(none)

x402 wallet-mode auth token — see x402 — pay with a wallet.

PORT

3333

HTTP-mode listener.

VENICE_MCP_HOST

127.0.0.1

HTTP-mode bind address. Set to 0.0.0.0 for LAN/container exposure.

VENICE_MCP_AUTH_TOKEN

(none)

Bearer token required by /mcp whenever HTTP mode binds outside loopback. Use a long random value.

VENICE_MCP_ALLOW_UNAUTHENTICATED_HTTP

0

Emergency escape hatch for unauthenticated exposed HTTP mode. Use only behind a trusted authenticated proxy.

VENICE_MCP_MAX_SESSIONS

100

Maximum active Streamable HTTP sessions.

VENICE_MCP_SESSION_TTL_MS

1800000

Idle Streamable HTTP session lifetime before cleanup.

Self-hosting (Streamable HTTP)

/mcp is a credential-backed tool execution endpoint: callers can spend the configured Venice API key or x402 balance. When HTTP mode binds outside loopback, startup fails unless VENICE_MCP_AUTH_TOKEN is set, or VENICE_MCP_ALLOW_UNAUTHENTICATED_HTTP=1 is explicitly set behind a trusted authenticated proxy.

docker run -p 3333:3333 \
  -e VENICE_API_KEY=<your-venice-api-key> \
  -e VENICE_MCP_AUTH_TOKEN=<choose-a-long-random-token> \
  ghcr.io/veniceai/venice-mcp-server:latest
# server at http://localhost:3333/mcp

Clients should send Authorization: Bearer <choose-a-long-random-token> with HTTP MCP requests. HTTP clients should create new sessions without an mcp-session-id header and then reuse the server-issued session ID; unknown or malformed caller-provided session IDs are rejected. For reproducible production installs, pin the npm package version as shown in the examples instead of using an unversioned latest install path.

Or run from source — see Development below.


x402 — pay with a wallet, no account required

Skip this section if you're using VENICE_API_KEY. Everything below is optional and only matters if you specifically want to pay with a crypto wallet instead of a Venice account.

Venice supports EVM SIWE or Solana SIWX wallet authentication backed by prepaid USDC credit on Base or Solana mainnet, in addition to the normal API key flow. This lets you use Venice with no email, phone, or KYC — your wallet is the only identity.

Two-line config

{
  "mcpServers": {
    "venice": {
      "command": "npx",
      "args": ["-y", "@veniceai/mcp-server@0.3.0"],
      "env": { "VENICE_SIWX_TOKEN": "<base64 signed SIWX payload>" }
    }
  }
}

The MCP server forwards the existing VENICE_SIWX_TOKEN env format using Venice's preferred SIGN-IN-WITH-X header.

How it works

ONE-TIME SETUP (per wallet)
  Sign an EVM SIWE or Solana SIWX message → produces a SIWX token (base64 JSON)
  Set VENICE_SIWX_TOKEN in this MCP server's env

TOP UP (when balance is low)
  POST /api/v1/x402/top-up  (no payment header)  →  402 + payment requirements
  Choose a Base or Solana USDC option and sign it in your wallet
  POST /api/v1/x402/top-up with PAYMENT-SIGNATURE: <signed>  →  Venice settles
  the payment and credits your prepaid balance

EVERY INFERENCE CALL
  MCP server sends SIGN-IN-WITH-X: <SIWX token>
  Venice → wallet → credit account → debits and runs inference

This MCP server never sees your private key. EVM/Solana SIWX signing and USDC payment signing happen in your wallet — the server forwards only the signed SIWX token. The top-up helper discovers requirements but does not accept or submit payment signatures.

The helper tools venice_x402_balance, venice_x402_top_up_info, and venice_x402_transactions make balance + top-up flow inspectable from inside the agent.

Why prepaid instead of per-call?

  • ⚡ Latency — once topped up, calls are sub-100ms (no on-chain settlement per call)

  • 🧮 Throughput — Coinbase CDP facilitator settles top-ups in batches

  • 🔒 Privacy — wallet ↔ credit account is the only identity link; no email/phone/KYC

  • 🪙 DIEM shortcut — wallets linked to a Venice user with DIEM staked consume from staking balance, no USDC needed

  • 💸 Min top-up $5 (anti-dust). Minimum balance to inference is $0.10.

Per-call HTTP 402 — not supported

Venice rejects payment headers on inference routes. The preferred PAYMENT-SIGNATURE header is only used when submitting a signed payment to /api/v1/x402/top-up; this MCP server does not submit payments. After an external top-up, Venice debits the wallet's off-chain credit account on inference.

Auth-mode coverage notes

Some Venice endpoints don't accept both auth modes:

Tool

API key

x402

Notes

venice_list_characters

✓

✗

Character discovery endpoint is API-key only

venice_get_character

✓

✗

Character discovery endpoint is API-key only

venice_character_reviews

✓

✗

Character discovery endpoint is API-key only

venice_x402_balance

✗

✓

Wallet-bound by design

venice_x402_transactions

✗

✓

Wallet-bound by design

venice_x402_top_up_info

✓

✓

Auth-free; same 402 response in both modes

Hybrid

Set both VENICE_API_KEY AND VENICE_SIWX_TOKEN — API key wins. SIWX is only used when the key is absent.


Architecture

┌──────────────────────┐        stdio  OR        ┌────────────────────────┐
│  MCP host            │      Streamable HTTP    │  @veniceai/mcp-server  │
│  (Claude / Cursor /  ├────────────────────────▶│  - 45 tools            │
│   ChatGPT / etc.)    │                         │  - 3 resources         │
└──────────────────────┘                         │  - 3 prompts           │
                                                 │  - header forwarder    │
                                                 └────────────┬───────────┘
                                                              │ HTTPS
                                                              │   Authorization: Bearer ***
                                                              │   OR
                                                              │   SIGN-IN-WITH-X: <SIWX>
                                                              ▼
                                                 ┌────────────────────────┐
                                                 │  Venice API            │
                                                 │  api.venice.ai         │
                                                 └────────────────────────┘

Tool reference (endpoints + auth modes)

Inference (API key OR x402 wallet)

Tool

Endpoint

venice_chat

POST /v1/chat/completions

venice_responses

POST /v1/responses

venice_embeddings

POST /v1/embeddings

venice_image_generate

POST /v1/image/generate

venice_image_edit

POST /v1/image/edit

venice_image_multi_edit

POST /v1/image/multi-edit

venice_image_upscale

POST /v1/image/upscale

venice_image_remove_bg

POST /v1/image/background-remove

venice_video_generate

POST /v1/video/queue

venice_video_status

POST /v1/video/retrieve

venice_video_complete

POST /v1/video/complete

venice_tts

POST /v1/audio/speech

venice_asr

POST /v1/audio/transcriptions

venice_voice_clone (create)

POST /v1/audio/voices

venice_music_generate

POST /v1/audio/queue

venice_music_status

POST /v1/audio/retrieve

venice_music_complete

POST /v1/audio/complete

venice_web_search

POST /v1/augment/search

venice_web_scrape

POST /v1/augment/scrape

venice_text_parser

POST /v1/augment/text-parser

venice_crypto_rpc

POST /v1/crypto/rpc/:network

Catalog & quotes (auth-free)

Tool

Endpoint

venice_list_models

GET /v1/models?type=… (type=all when omitted)

venice_model_details

GET /v1/models?type=:type (exact ID match in the filtered catalog)

venice_model_traits

GET /v1/models/traits

venice_model_compatibility_mapping

GET /v1/models/compatibility_mapping

venice_voice_clone (list) / venice://voices

GET /v1/models?type=tts

venice_image_styles

GET /v1/image/styles

venice_audio_quote

POST /v1/audio/quote

venice_video_quote

POST /v1/video/quote

venice_crypto_networks

GET /v1/crypto/rpc/networks

venice_tee_attestation

GET /v1/tee/attestation?model=:model&nonce=:64_hex_chars

venice_tee_signature

GET /v1/tee/signature?model=:model&request_id=:completion_id

Characters (API key only)

Tool

Endpoint

venice_list_characters

GET /v1/characters

venice_get_character

GET /v1/characters/:slug

venice_character_reviews

GET /v1/characters/:slug/reviews

venice_chat_with_character

POST /v1/chat/completions (with character_slug)

Billing and API-key reads (ADMIN API key only, except rate-limit tools)

Tool

Endpoint

venice_billing_balance

GET /v1/billing/balance

venice_billing_usage_analytics

GET /v1/billing/usage-analytics

venice_billing_usage_history

GET /v1/billing/usage-history

venice_list_api_keys

GET /v1/api_keys

venice_get_api_key

GET /v1/api_keys/:id

venice_api_key_rate_limits

GET /v1/api_keys/rate_limits (INFERENCE or ADMIN)

venice_api_key_rate_limit_logs

GET /v1/api_keys/rate_limits/log (ADMIN)

x402 wallet helpers (SIWX reads + auth-free discovery)

Tool

Endpoint

venice_x402_balance

GET /v1/x402/balance/:wallet

venice_x402_top_up_info

POST /v1/x402/top-up (no payment)

venice_x402_transactions

GET /v1/x402/transactions/:wallet

Development

npm install
npm run build             # generate dist/ locally
npm test                  # build, then run the full test suite
npm run test:unit         # unit tests only
npm run test:integration  # build, then spawn dist/cli.js + a mock Venice over real stdio JSON-RPC
npm start                 # stdio mode
npm run start:http        # http mode on :3333

dist/ is generated by npm run build and is intentionally ignored by git rather than committed. Published npm packages still include dist/; the prepublishOnly script rebuilds it before publication.

Test layout

test/
├── config.test.ts             # env parsing, defaults, header precedence
├── format.test.ts             # 402 formatter cases
├── venice-client.test.ts      # HTTP client + real mock Venice
├── tools.test.ts              # tool registry (45 tools) + endpoint/method/body mappings
├── integration.test.ts        # end-to-end JSON-RPC over stdio against a mock Venice
└── helpers/
    ├── stub-client.ts         # in-process VeniceClient stub
    └── mock-venice-server.ts  # real http.Server fake of Venice for integration tests

The integration suite spawns the compiled CLI and speaks JSON-RPC on its stdin/stdout, exercising initialize → tools/list → tools/call → resources/list → resources/read against a real HTTP mock Venice in three auth scenarios (API key only, SIWX only, no auth).

End-to-end with live Venice + Base EVM harness

test/e2e/ currently exercises the EVM rail against the real Venice API and real Base mainnet—not a mock. Venice and the MCP x402 helpers support both Base and Solana, but this harness generates a throwaway EVM wallet and signs SIWE + EIP-3009 payloads with viem. The wallet is persisted at .e2e-wallet.json (chmod 600, gitignored—never commit).

Phase

npm script

Cost

What it tests

create

test:e2e:create

free

Generate / reload wallet, print address + balance

empty

test:e2e:empty

free

SIWX → MCP venice_chat → expect 402 with helpful diagnostics

topup

test:e2e:topup

$5 USDC + gas

Sign EIP-3009 → POST /api/v1/x402/top-up → settle on-chain via CDP facilitator

funded

test:e2e:funded

~$0.001 / call

SIWX → MCP venice_chat → real LLM completion charged to prepaid balance

balance

test:e2e:balance

free

Read on-chain USDC + Venice prepaid via venice_x402_balance tool

safe

test:e2e:safe

free

create + empty + balance (no money spent)

# Comprehensive — all 45 tools × both auth modes, side-by-side report (mint is always skipped)
env VENICE_API_KEY=<your-venice-api-key> npm run test:e2e:all-tools

FAQ

Do I have to deal with crypto? No. The simple path is VENICE_API_KEY + a normal Venice account. x402 is an option for users who want a wallet-only flow.

Where does the wallet's private key live? Not in this server. You sign the EVM SIWE or Solana SIWX message and any USDC top-up payment in your own wallet. The server only sees signed payloads and never accepts a private key.

Minimum top-up? $5 USD (anti-dust). Minimum balance to call inference is $0.10. Default suggested top-up is $10.

Privacy guarantees? No email, phone, or KYC is required on the SIWX path. venice_tee_attestation and venice_tee_signature return hardware evidence for the caller to verify. This server does not encrypt chat.

DIEM staking? If your wallet is linked to a Venice user with DIEM staked, calls consume from the staking balance instead of USDC credits — no top-up needed.

Getting 402 errors even though I have an API key? The most common cause is that VENICE_API_KEY isn't being forwarded to the MCP server process. Most MCP hosts (Claude Desktop, Cursor, Codex, etc.) only pass environment variables that are explicitly listed in the "env" block of your MCP config — system-level env vars are not automatically inherited. Make sure your config looks like this:

{
  "mcpServers": {
    "venice": {
      "command": "npx",
      "args": ["-y", "@veniceai/mcp-server@0.3.0"],
      "env": { "VENICE_API_KEY": "<your-venice-api-key>" }
    }
  }
}

If the key is missing or blank, the server falls back to x402 mode and returns a 402 payment challenge.


Disclaimer

Community-maintained. Provided as-is, with no warranty or SLA from Venice AI. Use at your own risk.

License

MIT

Available Tools

45 tools
venice_api_key_rate_limit_logsVenice API Key Rate Limit LogsA
Read-onlyIdempotent

Get the last 50 exceeded rate-limit events for the account. This read-only endpoint is experimental. ADMIN API key required — inference keys cannot call this endpoint. This endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, but the description adds material context they do not carry: experimental status, the ADMIN-key-only auth constraint, exclusion of inference keys, and the refusal of x402 wallet auth. It also bounds the result to the last 50 events, which is behaviorally important.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what it returns, then the caveats. Nothing is redundant and no sentence could be dropped without losing an auth or scope constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read endpoint with no output schema, the description covers the essentials: what is returned, how many records, and every auth prerequisite. An agent has everything needed to decide whether it can call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; baseline is 4. The description's fixed 'last 50' scope correctly signals that no filtering or paging arguments exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: 'Get the last 50 exceeded rate-limit events for the account.' This is distinguishable from the sibling venice_api_key_rate_limits, which concerns current limits rather than a historical log of exceeded events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context — experimental endpoint, ADMIN API key required, inference keys cannot call it, and no x402 wallet auth — which tells the agent whether it is even eligible to call it. It does not, however, explicitly name an alternative tool or a when-not-to-use condition relative to the rate-limits sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_api_key_rate_limitsVenice API Key Rate LimitsA
Read-onlyIdempotent

Get the current key's balances, access status, tier, expiration, and model-specific rate limits. API key required — this endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered by structured data. The description adds a genuinely useful behavioral constraint — that x402 wallet auth is rejected and an API key is mandatory — but says nothing about rate-limit semantics, caching, or response freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler, front-loading the returned data before the auth constraint. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the burden of describing the return payload, and it does so by listing the five fields returned. The auth requirement is also covered. It stops short of routing the agent away from the similar key/billing siblings, which is the only meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline is 4. The schema is trivially empty and adds no competing information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and enumerates the exact resources returned: balances, access status, tier, expiration, and model-specific rate limits. It is distinguishable from most siblings, though it never explicitly contrasts itself with the closely named venice_get_api_key, venice_api_key_rate_limit_logs, or venice_billing_balance, which also touch key/billing data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one actionable precondition ('API key required — this endpoint does not accept x402 wallet auth'), which tells the agent when this call will succeed. However, it names no alternative tool and gives no condition for choosing this over venice_get_api_key or venice_api_key_rate_limit_logs, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_asrVenice ASR (Speech-to-Text)A

Transcribe audio. Fetches the URL server-side and forwards as multipart/form-data file upload. Upstream transcription JSON larger than 1 MiB is rejected so word/character timestamps cannot exhaust memory. Timestamp arrays and transcripts longer than 8000 characters are paged in the MCP result: such a transcription returns result_handle alongside the first page, and every later page must be requested with that handle so the clip is transcribed — and charged — exactly once. Handles are held in memory, per MCP session, for 10 minutes and only the 16 most recent survive, after which paging fails and a fresh transcription is needed. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNo
languageNo
audio_urlNoAudio to transcribe. Required unless result_handle is supplied.
timestampsNoInclude word and character timestamps in JSON responses. Defaults to false.
text_offsetNoStart character of the transcript page (8000 characters each). Defaults to 0. Use result_handle with next_text_offset to read past the first page.
result_handleNoHandle returned by an earlier paged transcription. Pages that retained result without submitting another transcription, so audio_url is ignored when this is set. Expires after 10 minutes or once 16 newer results are retained; an expired handle is an error rather than a silent re-transcription.
response_formatNo
timestamp_limitNoMax entries returned per timestamp array. Defaults to 200. Follow next_timestamp_offset; it is null on the last page.
timestamp_offsetNoStart index into each timestamp array (word/segment/char). Defaults to 0. Use result_handle to move past the first page.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the 1 MiB upstream JSON cap, the exactly-once transcription/charging guarantee, per-MCP-session in-memory handles, the 10-minute TTL, the 16-result LRU eviction, that an expired handle errors rather than silently re-transcribing, and that both x402 wallet auth and API keys are accepted. This also explains why the annotations mark it non-read-only and non-idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then ordered by importance (input handling, size limit, paging, handle lifetime, auth). The paging and handle-lifetime sentences are long and could be split, but for a tool with genuinely intricate stateful behavior almost every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining the paged result shape (result_handle plus next_timestamp_offset/next_text_offset on later pages). Model, language, and response_format semantics are left undocumented, which is the main remaining gap for a 9-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage and 9 parameters, the description reinforces the relationship between audio_url, result_handle, text_offset/timestamp_offset and the paging fields, and adds the 8000-character page size that the schema only alludes to. model, language, and response_format receive no explanation in either place, so it is good but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb+resource ("Transcribe audio") and immediately scopes the input mechanism (server-side URL fetch forwarded as multipart/form-data). No sibling tool performs ASR – venice_tts, venice_voice_clone and venice_audio_quote are clearly distinct – so the purpose is unambiguous without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage conditions for the two invocation modes (audio_url for a fresh transcription, result_handle for subsequent pages) and states what happens when a handle is no longer valid. It does not name or exclude alternative tools, but no sibling overlaps this capability, so the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_audio_quoteVenice Music Cost QuoteA
Read-onlyIdempotent

Get a price quote for a music generation BEFORE queuing. Useful for budgeting. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesMusic model id, e.g. "elevenlabs-music".
character_countNoRequired for character-based pricing models.
duration_secondsNoOptional duration in seconds as a positive integer or numeric string. Model-specific.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered structurally. The description adds a genuinely useful behavioral fact not in the annotations — "No authentication required" — plus the pre-queue timing guarantee, though it says nothing about rate limits or quote validity windows.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and scope; each sentence contributes (purpose, use case, auth precondition) with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-param read-only quote tool with full schema coverage and annotations, this is nearly sufficient. The one minor gap is that no output schema exists and the description never indicates what the quote actually returns (e.g., cost amount, currency), leaving the agent to discover the response shape empirically.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so model, character_count, and duration_seconds are all documented in the schema with their constraints. The description adds no parameter guidance beyond noting nothing about model-specific price dimensions, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get a price quote), resource (music generation), and timing constraint (BEFORE queuing), which cleanly distinguishes it from the sibling venice_music_generate. An agent can tell immediately this is a pre-flight costing call, not a generation call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"BEFORE queuing" and "Useful for budgeting" give clear context for when to reach for this tool rather than the generator. No explicit when-not conditions or named alternatives (e.g., venice_video_quote for video), so it stops short of the top tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_billing_balanceVenice Billing BalanceA
Read-onlyIdempotent

Get current USD, DIEM, and bundled-credit availability for the authenticated Venice account. ADMIN API key required — inference keys cannot call this endpoint. This endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive semantics, so the description earns credit for adding auth-specific behavior: admin-key requirement and rejection of inference keys and x402 wallet auth. It omits return shape and any rate-limit or caching behavior, but adds real context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, purpose front-loaded, followed by the auth constraints that matter most. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does carry the return-value burden and names the three credit dimensions returned. Auth and scope are fully covered; a minor gap is that it doesn't explain units, currency conversion, or whether bundled credits refresh.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus resource ('billing balance') and the exact quantities returned (USD, DIEM, bundled-credit availability) scoped to the authenticated account. This distinguishes it cleanly from venice_x402_balance and venice_billing_usage_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the prerequisite (ADMIN API key) and two explicit exclusions (inference keys cannot call it; x402 wallet auth is not accepted), which effectively routes callers toward venice_x402_balance. No alternative tool is named directly, so it stops short of a full when/when-not/alternatives triad.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_billing_usage_analyticsVenice Billing Usage AnalyticsA
Read-onlyIdempotent

Get beta aggregated usage by date, model, and API key. Data is cached for 10 minutes. Choose either lookback or a complete start/end date range. ADMIN API key required — inference keys cannot call this endpoint. This endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoCustom range end in YYYY-MM-DD format. Requires start_date.
lookbackNoRelative lookback from 1d through 90d. Cannot be combined with start_date/end_date.
start_dateNoInclusive custom range start in YYYY-MM-DD format. Requires end_date.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as a safe, idempotent read, but the description adds genuinely new operational facts: a 10-minute cache window, an ADMIN-key requirement that inference keys cannot satisfy, and the exclusion of x402 wallet auth. Those are real behavioral traits an agent cannot derive from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information (purpose, caching, parameter rule, auth), with the core purpose front-loaded. Slightly bloated by the closing 'does not accept x402 wallet auth' clause, but nothing is wasted or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a fair job sketching the response shape ('aggregated usage by date, model, and API key') and covers caching and auth constraints. It stops short of describing metrics returned (tokens, cost) or any pagination, which keeps it from being fully self-sufficient for an analytics endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the mutual exclusivity of lookback vs. start_date/end_date and the YYYY-MM-DD format are already documented in the schema. The description only restates the either/or rule, adding no format, default, or boundary detail beyond it. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a specific verb (get) and resource (aggregated usage) and scopes it to date/model/API key dimensions, so the agent knows exactly what comes back. However, it never differentiates from the closely named sibling venice_billing_usage_history, leaving the agent to guess which billing usage tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear selection rule for parameters ('Choose either lookback or a complete start/end date range') and states the access condition (ADMIN key). But it offers no guidance on when to prefer this tool over venice_billing_usage_history or venice_billing_balance, which is the main routing decision an agent faces here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_billing_usage_historyVenice Billing Usage HistoryA
Read-onlyIdempotent

Walk detailed billing usage in ascending timestamp order using cursor pagination. Supports complete JSON or upstream CSV pages, defaulting to 10 rows. Pages exceeding 64 KiB fail without returning partial rows or a next cursor. On continuation, send cursor without the original filters; CSV nextCursor values already encode format=csv so a cursor-only follow-up stays on text/csv. This uses /billing/usage-history, never deprecated /billing/usage. ADMIN API key required — inference keys cannot call this endpoint. This endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoOpaque nextCursor from the previous page. CSV pages return a csv: prefix so continuation stays on text/csv. Cannot be combined with filters or page_size.
formatNoDefaults to json. Optional on continuation; CSV nextCursor values already stay on CSV.
currencyNo
page_sizeNoFirst-page row count. Defaults to 10. Complete pages larger than 64 KiB are rejected; use smaller pages or narrower timestamp filters.
end_timestampNoExclusive first-page upper bound, ISO 8601 UTC with Z suffix.
start_timestampNoInclusive first-page lower bound, ISO 8601 UTC with Z suffix.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which only cover read-only/idempotent safety) by disclosing the 64 KiB page-failure mode with no partial rows or next cursor, the cursor-format coupling, ascending ordering, and the ADMIN-key vs inference-key and x402 auth restrictions. These are exactly the behavioral traits an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and pagination model, then layered constraints, with no filler sentences. It is dense and mostly non-redundant, though a couple of points (default 10 rows, cursor/format coupling) restate what the schema already says.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated billing tool with no output schema, it covers pagination mechanics, failure behavior, auth requirements, and continuation semantics thoroughly. An agent has everything needed to call it correctly across first-page and continuation scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 83%, so the schema carries most parameter meaning. The description still adds value by explaining that cursor continuation drops filters and that CSV cursors persist format=csv, which clarifies how cursor interacts with the other parameters beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (walk) and resource (billing usage) plus ordering (ascending timestamp) and mechanism (cursor pagination), which is precise enough to act on. It does not, however, explicitly distinguish itself from the sibling venice_billing_usage_analytics, so the differentiation is implied rather than named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong operational guidance: cursor continuation must omit original filters, CSV cursors encode format=csv, and the endpoint is explicitly not the deprecated /billing/usage. It also states the ADMIN key requirement and that x402 wallet auth is unsupported, which routes the caller correctly, though it never names the analytics sibling as the alternative for aggregated data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_character_reviewsVenice Character ReviewsA
Read-onlyIdempotent

List paginated public reviews for a Venice character. API key required — this endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
slugYesPublic character slug, e.g. "alan-watts".
pageSizeNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly/idempotent/non-destructive/closed-world), so the bar is lower, and the description earns credit by adding real auth context: 'API key required — this endpoint does not accept x402 wallet auth,' which meaningfully distinguishes it from the venice_x402_* siblings. It also signals pagination behavior, though it doesn't describe return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with zero filler, and the core purpose is front-loaded ahead of the auth caveat. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries some burden it doesn't fully meet: return format of the reviews and the semantics of page/pageSize are left unexplained. It is adequate for identifying and selecting the tool, given annotations cover safety, but not complete for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% — only 'slug' is documented, while 'page' and 'pageSize' carry no descriptions at all. The description merely says 'paginated' without explaining page numbering, page size limits, or defaults, so it does not compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource pair ('List paginated public reviews for a Venice character'), which is unambiguous and distinct from the character-reading siblings like venice_get_character. It stops short of naming a related tool to contrast against, but the resource itself is specific enough to disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (fetch reviews for a given character) and notes the auth prerequisite, but never states when to prefer this over alternatives such as venice_get_character for character metadata, nor any exclusions. Usage is inferable rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_chatVenice Chat (LLM)B

Run an OpenAI-compatible chat completion via Venice's text-model catalog. Calls are non-streaming plaintext. enable_e2ee is rejected: this server does not encrypt chat. Uncensored: NSFW prompts allowed where the model permits. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
stopNo
modelNoModel id. Defaults to deepseek-v4-flash-0731.
toolsNo
top_pNo
messagesYesChat messages. Multimodal image, audio, video, and file blocks belong in user messages.
reasoningNo
verbosityNoHow much text the model returns.
max_tokensNo
timeout_msNoUpstream timeout for this call, covering the full response body. Long generations may need more than the VENICE_HTTP_TIMEOUT_MS default.
temperatureNo
tool_choiceNo
response_formatNo
prompt_cache_keyNo
reasoning_effortNoTakes precedence over reasoning.effort.
venice_parametersNoVenice-only options: web search, citations, system prompt control, reasoning control, and characters.
parallel_tool_callsNo
max_completion_tokensNoMaximum visible plus reasoning tokens. Preferred over deprecated max_tokens.
prompt_cache_retentionNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations: it discloses that calls are non-streaming plaintext, that enable_e2ee is rejected (a critical constraint for an agent that might try to use it), and that the server does not encrypt chat. It also mentions x402 wallet auth as an option. This is useful, non-obvious information. The annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false) are somewhat contradictory with the open-world nature of an LLM that can be prompted to do anything, but the description doesn't address that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and each sentence adds a distinct piece of information (operation, streaming behavior, encryption rejection, censorship policy, auth methods). It could be slightly more structured, but it effectively avoids waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (18 parameters, nested objects, no output schema) and the rich sibling set, the description is minimally adequate but leaves significant gaps. It doesn't explain how to select a model, how to handle multimodal inputs, how tool calling works, or what the response format looks like. The absence of an output schema places a higher burden on the description, which is not fully met.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 39%, which is moderately low. The description adds meaning for one parameter (enable_e2ee) by stating it is rejected, but otherwise provides no parameter-level guidance. With 18 parameters and many undocumented in the schema (e.g., temperature, top_p, stop, tools have no descriptions), the description fails to compensate for the coverage gap. Baseline for low coverage is 3 only if the description partially compensates; here it does so minimally.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the core action: 'Run an OpenAI-compatible chat completion via Venice's text-model catalog.' This is a specific verb+resource. However, it doesn't explicitly distinguish itself from the closest sibling, venice_responses, which is likely another chat/completion endpoint. The agent must infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit when-to-use guidance. It doesn't clarify when to choose venice_chat over venice_responses, venice_chat_with_character, or venice_web_search. The mention of uncensored NSFW prompts is a capability, not a usage condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_chat_with_characterVenice Character ChatB

Chat with a Venice character by slug. Note: the character lookup itself is API-key-only, but the chat completion supports x402 — so x402 users may need to fetch character info via API key first. Uncensored: NSFW prompts allowed where the model permits.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNo
messagesYes
max_tokensNo
temperatureNo
character_slugYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give the generic safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the description carries the burden for auth behavior and content policy. It does this well, disclosing the x402-vs-API-key split for character lookup and the uncensored/NSFW-permitting nature of the endpoint. It stops short of describing streaming, billing implications, or return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, followed by the auth caveat and content-policy note. Three compact sentences with no filler, though the em-dash aside is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should say more about what comes back and how messages/model are used, which it does not. It does cover the two genuinely non-obvious facts (auth path and content policy), making it adequate but with clear gaps for a 5-parameter generation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description must compensate and largely does not. It only gestures at character_slug ('by slug'); messages, model, max_tokens, and temperature get no explanation of format, defaults, or constraints beyond the raw JSON types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Chat with a Venice character by slug'), which is enough to distinguish it from the generic venice_chat sibling. It never explicitly contrasts itself with venice_chat or venice_responses, but the resource scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies one concrete usage prerequisite: character lookup is API-key-only while chat supports x402, so x402 users must fetch character info another way first. However, it never explicitly says when to prefer this over venice_chat, nor does it name venice_get_character/venice_list_characters as the lookup route, leaving the agent to infer the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_crypto_networksVenice Crypto RPC NetworksA
Read-onlyIdempotent

List the live, authoritative network slugs accepted by venice_crypto_rpc. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds 'No authentication required' and characterizes the list as 'live, authoritative,' which goes beyond the readOnly/idempotent/non-destructive annotations by signalling dynamic, current data rather than a static enum. It does not describe the return shape or count, but with no output schema and full annotation coverage the bar is lower.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and resource, then the auth constraint. No filler; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param, no-auth list tool whose safety profile is fully covered by annotations, the description is essentially complete: it conveys what is returned (network slugs) and the calling constraint (no auth). Minor room to state the return format explicitly, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to clarify beyond what the empty schema already implies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('network slugs'), plus the scoping detail that these are the slugs accepted by venice_crypto_rpc. This cleanly distinguishes it from the sibling venice_crypto_rpc, which consumes rather than produces this list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Naming venice_crypto_rpc as the consumer implicitly tells the agent this is the discovery call to make before invoking the RPC tool. There is no explicit when/when-not or rival alternative named, but the workflow relationship is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_crypto_rpcVenice Crypto RPC ProxyA
Destructive

Proxy one JSON-RPC request or a batch of up to 100 requests to a supported blockchain network. Use venice_crypto_networks for the live network list. For a simple call, pass rpc_method/rpc_params; for complete request IDs or batches, pass request. Relays (eth_sendRawTransaction, eth_sendUserOperation, Solana sendTransaction, and Starknet writes) must be sent as single requests (not batched) with idempotency_key; reuse the same key when retrying. Results are returned as compact JSON; responses larger than 64 KiB are rejected after Venice has billed them, so keep queries narrow. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesNetwork slug returned by venice_crypto_networks, e.g. "ethereum-mainnet".
requestNoA single JSON-RPC request object (ID optional) or a non-empty batch of at most 100 request objects (ID required per item).
rpc_methodNoConvenience form for a single request. Do not combine with request.
rpc_paramsNoParameters for rpc_method, by position (array) or by name (object).
idempotency_keyNoReuse the same key when retrying a request. Required for eth_sendRawTransaction, eth_sendUserOperation, Solana sendTransaction, and Starknet writes so a lost response is not broadcast again.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations (destructive/openWorld/not-idempotent) by disclosing the 64 KiB rejection threshold and that Venice bills rejected oversized responses, the two auth modes (x402 wallet, no account needed, or API key), the 100-item batch cap, and the single-request rule for transaction relays. These are exactly the failure modes an agent would otherwise hit blind.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, each carrying distinct information (routing, call forms, relay rule, size/billing limit, auth), with the core purpose front-loaded. No filler or restated schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description covers the response shape ('compact JSON') and the size ceiling, plus auth, batching, and idempotency requirements. Nothing an agent needs to invoke this proxy safely and correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter, but the description adds the relational semantics the schema can't convey: the two mutually exclusive call forms, the network slug coming from venice_crypto_networks, and the retry contract for idempotency_key. That is meaningful added meaning above the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Proxy one JSON-RPC request or a batch of up to 100 requests to a supported blockchain network') and explicitly distinguishes itself from the sibling venice_crypto_networks. An agent can immediately tell this is the execution tool versus the network-listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use venice_crypto_networks for the live network list; use rpc_method/rpc_params for a simple call versus request for custom IDs or batches; relays must be single (not batched) with an idempotency_key, reused on retry. Conditions and alternatives are stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_embeddingsVenice EmbeddingsB

Compute embeddings for text input (OpenAI-compatible). Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesText or array of texts.
modelYesEmbedding model id.
encoding_formatNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations exist (readOnlyHint=false, idempotentHint=false), so the description carries a lower burden, and it usefully adds that two auth modes are supported. However, it says nothing about batching limits, cost implications, or what the response contains, so it adds only modest context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact, front-loaded sentences with no wasted words. It is efficient, though quite terse, leaving room that could have been spent on missing semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an embeddings endpoint with no output schema, the description omits the return shape (vector vs base64) and batch behavior, and leaves encoding_format unexplained. Auth is covered, but the output-format gap keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% – input and model are documented, encoding_format is not. The description adds no meaning beyond the schema (e.g., that input accepts arrays for batch, or what encoding_format changes). This is roughly baseline-adequate without compensating for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Compute) and resource (embeddings for text input), which the agent can distinguish from chat, image, TTS, or ASR siblings. The resource name alone differentiates it; it doesn't proactively name a sibling it is not, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no conditions, and no alternatives named. The mention of x402 vs API key is about auth, not about when this tool should be selected over another.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_get_api_keyVenice Get API Key DetailsA
Read-onlyIdempotent

Get metadata, usage, balances, and rate-limit details for one API-key ID. The documented response does not reveal the full key secret. ADMIN API key required — inference keys cannot call this endpoint. This endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAPI-key ID, not the key secret.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive behavior, so the bar is lower. The description still adds valuable context beyond them: the response does not reveal the full key secret, ADMIN auth is required, and x402 auth is rejected — all non-obvious operational facts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the resource and return contents before the auth caveats. No wasted words; each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-key lookup, the description covers scope, returned data types, secret non-disclosure, and auth requirements. With annotations covering the safety profile and schema covering the parameter, this is nearly complete; only explicit alternative routing is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'id' param is fully documented as 'API-key ID, not the key secret.' The description restates this same distinction rather than adding new meaning, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (metadata, usage, balances, rate-limit details) scoped to one API-key ID. The singular 'one API-key ID' clearly distinguishes it from the sibling venice_list_api_keys, and the enumeration of returned data types makes the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context via auth constraints: ADMIN API key required, inference keys cannot call it, and x402 wallet auth is not accepted. It does not explicitly name alternatives (e.g., 'use venice_list_api_keys to enumerate all keys'), so routing is implied by the singular scope rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_get_characterVenice Get CharacterA
Read-onlyIdempotent

Get one public Venice character by slug. API key required — this endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPublic character slug, e.g. "alan-watts".

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, non-open-world). The description adds genuinely non-obvious context: API key auth is required and this endpoint rejects x402 wallet auth, a behavioral constraint not in the annotations. It omits response shape, but no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences; the core lookup is front-loaded and the auth constraint follows with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-param idempotent read with rich annotations and a fully documented schema, the auth caveat is the key missing piece and it is present. Minor gap: no return-value shape, though no output schema is defined and this is a simple getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%; the schema fully documents the slug parameter including its regex pattern and example. The description adds no syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb (Get) + resource (one public Venice character) + selector (by slug). It implies a single-item lookup versus the sibling venice_list_characters, but does not explicitly name that sibling to sharpen the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the auth precondition (API key required; x402 wallet auth not accepted), which is a useful usage constraint. However, it never says when to prefer this over venice_list_characters or venice_chat_with_character, leaving alternative selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_image_editVenice Image EditB

Edit an image with a prompt. Returns base64 PNG. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoEdit model id; defaults to firered-image-edit.
promptYes
image_urlYesURL of the image to edit (will be passed through to the edit endpoint).
safe_modeNo
resolutionNoModel-specific output resolution tier; the API validates supported values.
aspect_ratioNoOutput aspect ratio, e.g. "1:1", "16:9", "9:16", "4:5". Supported values vary by model; the API validates.
output_formatNo
enhance_promptNoRewrite the edit prompt with awareness of the input image. May add time and cost.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-idempotent, non-destructive mutation. The description adds genuinely useful context beyond that: the base64 PNG return format and the dual-auth model (no Venice account required via x402). It stops short of cost, latency, or reversibility details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each front-loaded with the most important fact (action, return value, auth). No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation with no output schema, the description usefully covers the return format and auth, but leaves a meaningful gap around the undocumented parameters and the relationship between prompt/enhance_prompt and the input image.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 63% schema coverage, several parameters (prompt, safe_mode, output_format) lack descriptions in the schema, and the tool description adds no parameter meaning at all. It doesn't clarify defaults, model-specific validation, or how the prompt interacts with the input image despite enhance_prompt hinting at that relationship.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Edit an image with a prompt") and adds the return format (base64 PNG). It does not, however, distinguish itself from close siblings like venice_image_multi_edit, venice_image_remove_bg, or venice_image_upscale, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the supported auth modes (x402 wallet vs API key) but gives no guidance on when to choose this over image_generate, image_multi_edit, or other image siblings, and no exclusions or prerequisites. Usage is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_image_generateVenice Image GenerateA

Generate an image. Supports Flux 2 Pro/Max, Lustify SDXL, Anime (WAI), Qwen Image, GPT Image, Nano Banana Pro and others. Uncensored: NSFW prompts allowed where the model permits. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNo
modelNoDefaults to flux-2-pro.
stepsNo
widthNo
formatNo
heightNo
promptYes
qualityNoModel-specific quality tier; may change pricing.
variantsNoNumber of images. Only supported with non-binary responses.
safe_modeNo
resolutionNoModel-specific resolution tier such as "1K", "2K", or "4K"; the API validates supported values.
aspect_ratioNoModel-specific aspect ratio such as "1:1" or "16:9"; the API validates supported values.
style_presetNoSee venice://styles.
enhance_promptNoRewrite the prompt before generation. Adds up to ~30 seconds and a charge when applied.
negative_promptNo
style_referencesNoModel-specific style references. Check the model maxStyleReferences capability.
enable_web_searchNoAllow supported models to use web search; additional credits may apply.
disable_prompt_optimization_thinkingNoSkip prompt-optimization thinking on supported models.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only establish the write/non-idempotent/non-destructive profile, so the description carries real additional weight: it discloses the uncensored NSFW policy and the fact that authentication can be satisfied via an x402 wallet without a Venice account. It stops short of 5 because it says nothing about cost, latency, rate limits, or what the response looks like (URL vs binary).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first two words, and the follow-on sentences each add distinct information (capabilities, content policy, auth). The model roster is long but earns its place as the only enumeration of valid model values available to the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter generation tool with no output schema and only 56% schema coverage, the description leaves meaningful gaps: the return shape is never stated (though the 'variants' schema hint about non-binary responses is uncovered), and most optional parameters receive no narrative framing. Auth and content-policy coverage are the bright spots.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 56%, and the description meaningfully compensates for the most important gap by supplying concrete model identifiers (Flux 2 Pro/Max, Lustify SDXL, Anime WAI, Qwen Image, GPT Image, Nano Banana Pro) where the schema only says 'Defaults to flux-2-pro.' The remaining parameters (quality, variants, aspect_ratio, style_references, enhance_prompt) are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Generate an image') and follows with the supported model roster, so an agent knows exactly what capability this exposes. It does not explicitly contrast itself with the closely related siblings venice_image_edit or venice_image_multi_edit, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description covers prerequisites rather than selection criteria: it names the two auth paths (x402 wallet with no Venice account, or API key) and notes NSFW is permitted where the model allows. It never says when to prefer this over venice_image_edit, venice_image_upscale, or the video/music generators, leaving the agent to infer from tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_image_multi_editVenice Image Multi-EditB

Edit multiple images together with a single prompt (multi-image composition / outpainting). Returns base64 PNG. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNo
promptYes
qualityNoModel-specific quality tier; may change pricing.
image_urlsYes
resolutionNoModel-specific output resolution tier; the API validates supported values.
aspect_ratioNoOutput aspect ratio, e.g. "1:1", "16:9", "9:16", "4:5". Supported values vary by model; the API validates.
output_formatNo
enhance_promptNoRewrite the edit prompt with awareness of the input images. May add time and cost.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description adds genuinely useful context beyond them: the return format (base64 PNG) and two auth paths (x402 wallet without a Venice account, or API key). It omits any cost/latency caveat even though quality 'may change pricing' and enhance_prompt 'may add time and cost'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences with zero filler; the core capability is front-loaded and the auth/output facts follow. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly states the return format (base64 PNG), and it covers the auth model that an agent must resolve before calling. It is close to complete, but leaves the undocumented model/resolution/output_format params and any cost implications to the schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Eight parameters with only 50% schema description coverage: model, prompt, image_urls, and output_format have no schema description, and the tool description compensates for none of them. It only echoes prompt and image_urls implicitly through 'single prompt' and 'multiple images'. Below the baseline 3 because the description adds essentially no semantic detail over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (edit multiple images) plus the use cases (multi-image composition / outpainting). It implicitly separates itself from venice_image_edit via the 'multiple images' scope, but never names the sibling explicitly, so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'multiple images together with a single prompt' framing implies when this is preferred over single-image tools, but there is no explicit guidance on when to pick this versus venice_image_edit, venice_image_generate, or venice_image_upscale. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_image_remove_bgVenice Image Background RemoveB

Remove image background; returns a transparent PNG (base64). Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
image_urlYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (destructiveHint=false, idempotentHint=false, readOnlyHint=false), so the description's job is to add context beyond that — and it does by disclosing the return format and, notably, the dual auth paths (x402 wallet with no account, or API key). Auth requirements are exactly the kind of behavioral detail annotations can't convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that front-loads the purpose, then adds return format and auth in the fewest possible words. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool, the description covers purpose, output format, and authentication, which is most of what an agent needs to call it. The only missing piece is the semantics of image_url.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions the single parameter, so the agent gets no explanation of what image_url expects (hosted URL, data URI, resolution limits) despite it being required. With coverage this low, the description should have compensated and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('Remove image background') and names the output ('transparent PNG (base64)'), which cleanly separates it from siblings like venice_image_edit or venice_image_upscale. It stops short of explicitly naming which sibling to use instead, but the function is distinctive enough to be unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use/when-not guidance and no mention of alternatives among the many image tools (generate, edit, multi_edit, upscale). The agent must infer that this is the background-removal tool purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_image_stylesVenice Image StylesA
Read-onlyIdempotent

List image style presets available for venice_image_generate. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered; the description adds a genuinely useful behavioral fact not in the annotations — that no authentication is required — which matters for an agent deciding whether it can call this cheaply up front.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the purpose front-loaded before the auth note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema listing tool the description is nearly sufficient, but with no output schema it could say what the list actually contains (style names/ids usable in venice_image_generate) to close the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('image style presets'), and ties itself to the consuming sibling venice_image_generate, so an agent can tell it apart from the other image tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The reference to venice_image_generate implies this is the discovery step before generation, which is useful context, but there is no explicit when-to-use statement, no exclusions, and no named alternative for the same information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_image_upscaleVenice Image UpscaleA

Upscale an image (2-4× scale). Endpoint requires base64 image; this tool fetches the URL and uploads it. Returns base64 PNG. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoUpscale factor, 2 to 4. Defaults to 2. Large inputs are scaled down automatically to stay under the 4096x4096 output cap.
image_urlYes
creativityNoHow much detail and texture the upscaler invents, 0 to 0.02. Defaults to 0.01. Higher stays further from the source.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds genuinely useful behavior beyond that: it normalizes the base64 requirement by fetching the URL itself, declares the base64 PNG return format, and reveals two auth paths (x402 wallet or API key). It stops short of stating failure behavior or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, then the URL-fetch mechanics, then return format and auth. Every sentence carries information; only the scale range in parentheses mildly duplicates the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly fills that gap by declaring a base64 PNG return, and it covers auth requirements. For a single-required-parameter image tool this is nearly complete; only error modes and payload-size limits are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: scale and creativity are already fully documented in the schema, while image_url carries no description there. The description adds the useful detail that the tool fetches that URL and uploads it, but no syntax, size, or format guidance for the URL itself. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (upscale an image) plus the scale range, which is enough to distinguish it from venice_image_edit and venice_image_generate. It does not, however, explicitly name or contrast itself against those siblings, leaving the agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent can infer this is for enlarging an existing image, but the description never says when to choose it over venice_image_edit, venice_image_multi_edit, or venice_image_generate, nor what preconditions apply. No exclusions or alternatives are offered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_list_api_keysVenice List API KeysA
Read-onlyIdempotent

List active API-key metadata, including only the documented last six characters—not full key secrets. ADMIN API key required — inference keys cannot call this endpoint. This endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive semantics, so the bar is lower. The description adds meaningful context beyond that: the admin-only requirement, the auth-path exclusion (x402), and the partial-data return (last six characters only). It does not cover rate limits or pagination, but the security-relevant additions are valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each front-loading a distinct fact: what is returned, who can call it, and what auth path is excluded. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing endpoint with no output schema, the description covers purpose, access control, and data-exposure scope. Return-shape details are absent, but the key operational constraints an agent needs are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so baseline is 4. The schema is empty and the description correctly notes no inputs are needed, while adding auth-context constraints that function as implicit prerequisites.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (API-key metadata) and immediately clarifies scope: only the last six characters, not full secrets. This distinguishes it from sibling venice_get_api_key and sets expectations precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the admin requirement and that inference keys cannot call the endpoint, plus that x402 wallet auth is not accepted. Clear conditions on when the tool is usable, though it does not explicitly contrast with siblings like venice_get_api_key or venice_api_key_rate_limits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_list_charactersVenice List CharactersC
Read-onlyIdempotent

List public Venice characters. API key required — this endpoint does not accept x402 wallet auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoDeprecated: use tags. A single tag, merged into tags.
tagsNo
isProNo
limitNo
offsetNo
searchNo
sortByNo
isAdultNo
modelIdNo
sortOrderNo
categoriesNo
isWebEnabledNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and non-open-world, so the safety profile is covered. The description adds the useful auth-method constraint, but says nothing about size of result sets, pagination, or filtering behavior for a 12-parameter query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and zero filler; the auth constraint follows immediately. It is efficient, though the extreme brevity also reflects the missing filter coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-filter listing tool with no output schema and near-zero schema coverage, the description is far too thin: no return shape, no pagination semantics, no filter documentation. Only the auth requirement is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 8% across 12 parameters, and the description compensates for none of them — no mention of tags, categories, sorting, pagination, or the deprecated tag field. With this much undocumented surface, the description carries no parameter meaning at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('List public Venice characters'), which clearly separates it from the singular sibling venice_get_character. It does not explicitly name sibling alternatives, so it stops just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It adds a real routing constraint — API key required, x402 wallet auth not accepted — which tells the agent how to authenticate. However, it gives no guidance on when to use this vs. venice_get_character, venice_character_reviews, or the other list endpoints, and no exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_list_modelsVenice List ModelsA
Read-onlyIdempotent

List the live model catalog, one page at a time. Omitting type lists every model type (sent upstream as type=all). Each entry is a compact summary (id, type, name, context length, enabled capabilities, traits, privacy, pricing); set verbose=true for the full upstream model objects. Returns total, next_offset, and every matching model id in ids; call again with offset=next_offset until next_offset is null. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoCatalog type: text, image, inpaint, upscale, video, music, tts, asr, embedding, decision, "code", or "all" (default). Without a type Venice returns only text models, so pass one to find video, image or audio ids.
limitNoMax models per page. Defaults to 50. A page may hold fewer when entries are large; follow next_offset.
offsetNoIndex of the first model to return. Defaults to 0.
verboseNoReturn full upstream model objects instead of compact summaries. Defaults to false.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, but the description adds valuable context beyond them: 'No authentication required', the upstream type=all behavior, the pagination contract, and the shape of returned entries. Only missing piece is any error or rate-limit behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and dense but purposeful; the pagination instruction and return-shape sentence each earn their place. Slightly heavy on semicolon-chained clauses, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return contract itself — naming total, next_offset, ids, and the compact-summary fields — and explains the pagination termination condition. An agent has everything needed to call and iterate correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real nuance: it resolves the apparent tension in the schema by explaining omission is sent upstream as type=all, and clarifies that verbose switches between compact summaries and full objects beyond the schema's terse wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the live model catalog') and clarifies the scope (one page at a time, compact summaries). An agent can distinguish it from detail-oriented siblings like venice_model_details or venice_model_traits, though the description never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: omitting type fetches all types, and gives an explicit pagination loop ('call again with offset=next_offset until next_offset is null'). It does not, however, state when to prefer this tool over sibling catalog/inspection tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_model_compatibility_mappingVenice Model Compatibility MappingA
Read-onlyIdempotent

Return the live compatible model-name to Venice model-id mapping for a model type. The API defaults to text when type is omitted. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoCatalog type: text, image, inpaint, upscale, video, music, tts, asr, embedding, decision. Defaults to text upstream.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read profile (readOnly, idempotent, non-destructive). The description adds genuinely new context: the mapping is 'live', no authentication is required, and the API defaults to text when type is omitted. These are behavioral facts not present in the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose, then the default and auth note. No filler; every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter read tool with full annotation coverage and no output schema, the definition is nearly complete. The only gap is routing guidance relative to the other model-listing tools, but nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents the 'type' parameter with its full enum-like catalog list and default. The description restates the default-to-text behavior, adding no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Return the live compatible model-name to Venice model-id mapping for a model type.' This is clearly distinct from siblings like venice_list_models or venice_model_details, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It notes the default behavior when 'type' is omitted, which implies usage context, but never says when to reach for this tool versus the model-related siblings (venice_list_models, venice_model_details, venice_model_traits). Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_model_detailsVenice Model DetailsA
Read-onlyIdempotent

Get one exact model's full catalog row, including model_spec constraints, capabilities, and pricing when available. Requires a concrete type to keep the upstream catalog response bounded. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesCatalog type the model belongs to: text, image, inpaint, upscale, video, music, tts, asr, embedding, decision.
model_idYesExact model id, e.g. from venice_list_models({ type: "video" }).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description still adds real context: it is unauthenticated and only returns pricing 'when available', which the annotations do not say.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the return payload, followed by the parameter rationale and the auth note. No filler and nothing repeated from title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the burden of describing the return payload and its conditionality ('pricing when available'), plus auth status. It stops short of noting error behavior for an unknown model_id/type pair, which is the only real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds rationale the schema lacks: the 'type' parameter is required to keep the upstream catalog response bounded. That explains motivation without merely restating the field set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get one exact model's full catalog row') and enumerates the payload contents (model_spec constraints, capabilities, pricing). It is clearly distinguishable from the sibling venice_list_models, which returns many rows rather than one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the lookup use case ('one exact model') and the schema example points back to venice_list_models({type: "video"}), but the description itself never states when to prefer this over venice_list_models or venice_model_traits. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_model_traitsVenice Model TraitsB
Read-onlyIdempotent

Return the live trait-name to model-id mapping for a model type. The API defaults to text when type is omitted. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoCatalog type: text, image, inpaint, upscale, video, music, tts, asr, embedding, decision. Defaults to text upstream.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds two useful behavioral facts beyond them: the mapping is "live" (not cached) and "No authentication required." It does not describe the response shape or size, so this is solid but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then the default, then the auth note. Every sentence carries a distinct fact and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the return value, and it does so adequately ("trait-name to model-id mapping"). But for a catalog-inspection tool with many sibling metadata tools, it lacks any routing guidance, leaving a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is fully documented in the schema, including the "Defaults to text upstream" note that the description merely restates. Baseline 3 applies since the schema does the heavy lifting and the description adds no new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Return the live trait-name to model-id mapping for a model type." An agent knows what it fetches. However, it never distinguishes itself from sibling model-metadata tools like venice_model_details, venice_list_models, or venice_model_compatibility_mapping.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no named alternatives. The only context given is an upstream default, which is a parameter behavior rather than a usage rule. An agent cannot tell from this text when to prefer it over venice_model_details or venice_model_compatibility_mapping.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_music_completeVenice Music Complete (cleanup)A
DestructiveIdempotent

Mark a completed music job as downloaded and delete server-side media. Reports removal only when Venice confirms success. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
queue_idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the bar is lower. The description still adds real value beyond them: it names what is destroyed ('server-side media'), gives a success-confirmation contract ('reports removal only when Venice confirms success'), and discloses auth modes (x402 wallet or API key).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, the destructive action and its effect front-loaded, followed by the confirmation contract and auth options. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behaviorally solid for a destructive mutation with no output schema, but with 0% schema coverage on two required params the description should have explained queue_id/model matching semantics. The tool is callable, but an agent could easily pass the wrong model and misfire a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two required parameters, so the description carries the full burden and largely fails it. It never explains what queue_id identifies or whether 'model' must match the model used at generation time, which is a real ambiguity for a destructive call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: 'Mark a completed music job as downloaded and delete server-side media.' It is unambiguously distinct from venice_music_generate, venice_music_status, and the video equivalents in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition 'a completed music job' implicitly routes the agent to check status (venice_music_status) before calling, and the name signals it is a terminal cleanup step. No explicit when-not or named alternative is given, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_music_generateVenice Music QueueA

Queue music generation. Available models: ace-step-15, elevenlabs-music, minimax-music-v2/v25/v26, stable-audio-25, mmaudio-v2-text-to-audio, elevenlabs-sound-effects-v2. Uncensored: NSFW prompts allowed where the model permits. Supports x402 wallet auth (no Venice account needed) and API key. Returns { model, queue_id }; poll with venice_music_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoCreate a seamless loop on models reporting supports_loop.
modelYesRequired. Music model id, e.g. "elevenlabs-music".
speedNoModel-specific speed multiplier. Check model min_speed/max_speed.
voiceNoModel-supported voice id/name.
lyricsNoDeprecated: use lyrics_prompt. Ignored when lyrics_prompt is set.
promptYes
instrumentalNoDeprecated: use force_instrumental. Ignored when force_instrumental is set.
language_codeNoISO 639-1 language code on supported models.
lyrics_promptNoLyrics/text for lyric-capable models. Length limits come from model metadata.
duration_secondsNoOptional duration in seconds as a positive integer or numeric string. Model-specific.
lyrics_optimizerNoAuto-generate lyrics. lyrics_prompt must be empty when enabled.
force_instrumentalNoOnly for models reporting supports_force_instrumental.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), and the description adds substantial context beyond them: dual auth paths (x402 wallet with no account, or API key), the NSFW/uncensored policy where models permit, and the exact return payload { model, queue_id }. This is rich, non-redundant behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the sentence structure is dense and information-bearing. The enumerated model list is long but functional for model selection, so it earns its space, though it slightly inflates the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by stating the return shape and the required follow-up (poll via venice_music_status), and it covers auth, model availability, and content policy. An agent has what it needs to invoke and then track the job.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 92%, so the schema already documents the 12 parameters thoroughly; the description's model list is the only meaningful cross-reference to the 'model' parameter. Baseline 3 is appropriate since the description does not add syntax or behavior detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Queue music generation') and immediately differentiates the async queue flow from siblings by instructing the agent to poll with venice_music_status. The listed models and the returned shape make the tool's identity unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The polling workflow ('poll with venice_music_status') gives clear operational context for using the result, and the auth options tell the agent how access is obtained. It does not, however, explicitly contrast this async tool against venice_music_complete (sync) for the same resource, which would be the natural when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_music_statusVenice Music Retrieve / StatusA
Idempotent

Check status of a queued music job. Returns JSON progress while PROCESSING. Completed jobs are either an embedded base64 audio MCP resource or a download_url resource link. POST endpoint with body {model, queue_id}. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
queue_idYes
delete_media_on_completionNoDelete server-side media once embedded audio has been buffered. Ignored for download_url results: download first, then call venice_music_complete.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark it non-readonly, idempotent, non-destructive, but description explicitly notes it's a POST endpoint with body and describes return format changes over job lifecycle. It adds auth options (x402 or API key) which are useful behavior context. However, it doesn't explain polling cadence, what 'PROCESSING' progress looks like, or what happens on failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then details on return types and auth in a compact three-sentence block. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and low parameter coverage, the description covers the return shapes and auth sufficiently. It leaves out polling guidance and error handling, which are minor for a status-check tool. Overall it's near-complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (33%), and description compensates by noting the POST body includes {model, queue_id}. It doesn't describe delete_media_on_completion, but the schema has a description for that parameter, and the description does not need to duplicate it. The added context of the request shape is valuable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it checks status of a queued music job, with specifics about return formats (JSON progress, base64 resource, or download_url). Distinguishes from venice_music_generate implicitly by referencing queued jobs, though it doesn't name the generate sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage: call after a music job is queued, likely following venice_music_generate. But no explicit when-to-use vs. venice_music_complete, nor when polling should stop. The mention of venice_music_complete in the delete_media parameter hints at a workflow but is not framed as guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_responsesVenice Responses APIA

Alpha, stateless OpenAI-compatible Responses API for Venice text models. Supports text/image input and reasoning controls, but this MCP tool does not advertise tool calling because the endpoint does not reliably accept those fields. E2EE-capable models are not supported. Uncensored: NSFW prompts allowed where the model permits. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesPlain text or an array of text/image message inputs.
modelNo
top_pNo
reasoningNo
temperatureNo
max_output_tokensNo
venice_parametersNoVenice-only options supported by /responses: web search, citations, scraping, system prompt control, characters.

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given annotations only cover a generic safety profile, the description carries the real burden and does so well: alpha/stateless status, deliberate omission of tool calling because the endpoint is unreliable, E2EE models unsupported, NSFW allowed where the model permits, and both x402 wallet and API-key auth paths.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with what the tool is, then limitations, then capabilities and auth. Dense but each clause carries distinct information; only the auth sentence feels slightly appended.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter nested-schema tool with no output schema, the description covers identity, limitations, input modalities, and auth adequately. It does not describe the response shape, though 'OpenAI-compatible Responses API' gives a strong prior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29%, but the description adds only broad hints (text/image input, reasoning controls) rather than explaining model selection, temperature, or the venice_parameters contents. The nested venice_parameters subfields do carry their own schema descriptions, so the heavy lifting is partly done there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb/resource framing: a stateless, OpenAI-compatible Responses API for Venice text models, supporting text/image input and reasoning controls. That distinguishes it clearly from siblings like venice_chat and venice_embeddings, though it never states the distinction explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied (stateless Responses-style generation with reasoning controls, no tool calling) but there is no explicit 'use this when / use venice_chat instead when' guidance, which matters given the large sibling set of generation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_tee_attestationVenice TEE AttestationA
Read-onlyIdempotent

Fetch hardware-attestation evidence for a TEE-capable text model. The caller must supply a fresh 32-byte nonce and independently verify the echoed nonce, Intel TDX quote, optional NVIDIA evidence, debug-mode state, and signing-key binding before trusting the key. Fetching this evidence does not itself establish E2EE. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesTEE-capable text model id; check supportsTeeAttestation in venice_list_models.
nonceYesCaller-generated 32-byte freshness challenge encoded as exactly 64 hexadecimal characters.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real context beyond them: no authentication is required, and crucially that fetching the evidence 'does not itself establish E2EE', which prevents a false sense of security. It stops short of disclosing caching/rate-limit behavior or exactly how the echoed values are structured for comparison.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, purpose front-loaded, followed by the caller obligation and the security caveat. Every clause carries operational weight and nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description enumerates what comes back (echoed nonce, Intel TDX quote, optional NVIDIA evidence, debug-mode state, signing-key binding), covering the return shape for the agent. Combined with the auth and verification notes, an agent has enough to invoke and interpret the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'model' and 'nonce' fully documented in the schema (including the 64-hex-char pattern that the description restates as '32-byte'). The description echoes the schema rather than adding syntax or format detail beyond it, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (hardware-attestation evidence for a TEE-capable text model), so an agent knows exactly what the tool returns. It does not, however, differentiate itself from the closely related sibling venice_tee_signature, which an agent would need clarified before choosing between them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the freshness requirement ('must supply a fresh 32-byte nonce') and the verification chain 'before trusting the key', which tells the agent this is a pre-trust evidence step. There is no explicit when-to-use vs. when-not, and no routing to the sibling venice_tee_signature, leaving selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_tee_signatureVenice TEE Response SignatureA
Read-onlyIdempotent

Fetch the enclave signature for a completed TEE text-model chat request. The caller must cryptographically verify it against the signing identity bound by a separately verified attestation; this tool only returns the provider payload. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesSame TEE-capable text model used for the chat completion.
request_idYesCompletion id returned by POST /v1/chat/completions.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds genuine behavioral context beyond that: the tool 'only returns the provider payload' (it does not perform verification for you) and 'No authentication required'. These are meaningful traits not present in the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action before the verification caveat and auth note. Every sentence carries distinct information, though the middle clause is dense and could be slightly clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining that it returns only the provider payload. Combined with well-documented params and the verification requirement, an agent has enough to call and interpret it; only the exact payload shape is left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters (model and request_id) are fully documented in the schema, including their provenance. The description adds no syntax or format detail beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (the enclave signature for a completed TEE text-model chat request), and ties the operation to the sibling attestation flow by noting the signature must be checked against a 'separately verified attestation'. An agent can distinguish this from venice_tee_attestation and from the chat tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly implies the context of use ('for a completed TEE text-model chat request') and states a hard prerequisite (the caller must verify against a separately verified attestation). It does not explicitly name venice_chat or the attestation tool as the required predecessors, but the workflow is inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_text_parserVenice Text Parser (PDF/DOCX/EPUB/PPTX/XLSX)A

Extract text from a document URL. Fetches the URL server-side and uploads the file as multipart/form-data. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds genuinely useful behavior beyond the annotations: the URL is fetched server-side, the file is sent as multipart/form-data, and it accepts either x402 wallet auth (no Venice account) or an API key. Those auth and transport details are exactly what an agent needs and are not in the structured fields. It does not explain the readOnlyHint=false implication (no persistent state created) or rate/size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the mechanism, then the auth options. Every sentence carries information; only the auth sentence could arguably be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers input and auth adequately but never says what comes back (plain text, markdown, per-page structure) or what happens on an unsupported/failed fetch. Those omissions are the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter at 0% schema description coverage, so the schema gives only 'string' + uri format. The description clarifies that the value is the document URL and that the server fetches it, which adds real meaning, but it does not state supported URL schemes, size limits, or whether authenticated URLs work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Extract text from a document URL'), and the title enumerates supported formats (PDF/DOCX/EPUB/PPTX/XLSX), which separates it from venice_web_scrape and the other media-generation siblings. It stops short of explicitly naming which sibling to prefer for non-document input, so it is clear but not sibling-routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource type: an agent can infer this is for document files rather than web pages or images. There is no explicit when-to-use/when-not guidance and no alternative named (e.g., venice_web_scrape for HTML pages), so the routing decision is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_ttsVenice TTS (Speech)A

Convert text to speech. Supports cloned voices + emotion tags ([whispers], [sarcastically], etc.). When streaming=true, Venice streams upstream but this MCP tool buffers and returns one complete audio result; it does not emit incremental MCP chunks. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesText to convert to speech (max 4096 chars).
modelNo
speedNo
voiceNoVoice id; see venice://voices.
streamingNoForward Venice's streaming flag. The MCP result is still buffered into one complete audio response, not delivered incrementally.
temperatureNoSampling temperature. Only supported by some TTS models; unsupported models ignore it.
response_formatNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare a generic mutation/non-idempotent profile with no side-effect detail. The description adds high-value behavioral context beyond annotations: it discloses that streaming=true does NOT emit incremental MCP chunks because the tool buffers the complete audio, and it documents dual auth paths (x402 wallet with no Venice account vs API key). These are exactly the non-obvious traits an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose and then the two highest-value caveats (streaming buffering, auth options). Dense but every sentence earns its place; no filler or tautology.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description should hint at return shape and it does implicitly ('returns one complete audio result'). Combined with the streaming caveat and auth coverage, it is nearly complete for a TTS tool. Minor gap: it never states the default response format or expected output container.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 57%, above the threshold where the schema alone is deemed sufficient, so a baseline of 3 applies. The description reinforces the streaming semantics already noted in the schema and mentions the emotion-tag input syntax, but adds no detail on model, speed, temperature, or response_format beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Convert text to speech') and immediately differentiates scope by listing distinctive capabilities (cloned voices, emotion tags). An agent can distinguish this from siblings like venice_asr (the inverse task) and venice_voice_clone without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage via capabilities (cloned voices, emotion tags, streaming) but never states when to use this tool versus alternatives such as venice_asr or venice_music_generate, nor any prerequisite conditions. Usage context is left to inference from the capabilities listed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_video_completeVenice Video Complete (cleanup)B
DestructiveIdempotent

Mark a completed video as downloaded and delete server-side media. Reports removal only when Venice confirms success. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
queue_idYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds useful context beyond them: removal is reported only when Venice confirms success, and auth can be x402 wallet (no Venice account) or API key. These are valuable behavioral/auth details not carried by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero waste; the core action is front-loaded and the confirmation/auth notes follow. Appropriately sized for the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists and the destructive nature makes behavioral detail important; the description covers auth and confirmation semantics well. However, it leaves both parameters completely unexplained and gives no return/error detail, so it is only adequate for a destructive two-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and both parameters (queue_id, model) are undocumented in the schema. The description mentions neither, so it fails to compensate for the coverage gap. An agent gets no semantic help on what queue_id or model must contain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Mark a completed video as downloaded and delete server-side media.' This clearly distinguishes the cleanup action from siblings like venice_video_status and venice_video_generate. It is clear but does not explicitly name or contrast a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'a completed video' implies the tool is used after a video finishes and has been downloaded, but there is no explicit when-to-use or when-not guidance and no named alternative such as venice_video_status for checking status first. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_video_generateVenice Video QueueA

Queue a video generation. Supports Sora 2, Veo 3.1, Kling, Wan, LTX 2, Seedance, Runway Gen-4, and others. Pick a specific id like "veo3.1-fast-text-to-video", "veo3.1-fast-image-to-video", "kling-2.6-pro-text-to-video", "wan-2.6-text-to-video", "seedance-2-0-r2v" etc. Uncensored: NSFW prompts allowed where the model permits. Supports x402 wallet auth (no Venice account needed) and API key. Returns { model, queue_id }; poll with venice_video_status. NOTE: 'duration' is a model-specific string enum like '4s' / '6s' / '8s'; inspect it with venice_model_details. Current public Seedance models may reject detectable persons outright. Consent flags are defensive compatibility support, not a policy bypass; set them only after showing a returned policy to the user and receiving explicit confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNo
audioNoEnable or disable audio generation for models that support it. Defaults to true.
modelYesRequired. Full model id, e.g. "veo3.1-fast-text-to-video".
promptYes
consentsNoDefensive compatibility support for a returned Seedance needs_consent flow. Current public models may reject detectable persons outright. All three flags must be true after explicit user confirmation and cannot bypass content policy.
durationYesDuration as model-specific string enum, e.g. "4s", "6s", "8s". See venice_model_details.
elementsNoFor Kling O3 R2V and similar: up to 4 character/object elements. Reference in prompt as @Element1, @Element2, etc.
audio_urlNoFor models that support audio input: background music. URL or data URL. Supported: WAV, MP3. Max 30s, 15MB.
image_urlNoFor image-to-video models: starting frame. URL or data URL.
video_urlNoFor video-to-video models (e.g. seedance-2-0-r2v): input video. URL or data URL. Supported: MP4, MOV, WebM.
resolutionNoOutput resolution, e.g. "720p", "1080p", "4k". Model-specific; see venice_model_details.
aspect_ratioNoOutput aspect ratio, e.g. "16:9", "9:16", "1:1", "4:5", "9:21". Model-specific; see venice_model_details.
end_image_urlNoFor models that support end frames or transitions. URL or data URL.
upscale_factorNoFor upscale models only: 1 = quality enhance, 2 = double resolution, 4 = quadruple.
negative_promptNoNegative prompt (what to avoid). Supported by Seedance and other models.
scene_image_urlsNoFor models with advanced element support: up to 4 scene reference images. Reference in prompt as @Image1, @Image2, etc.
reference_audio_urlsNoFor Seedance 2.0 R2V and similar: up to 3 reference audio clips for vocal timbre, narration, or sound effects. Per-clip 2–15s, WAV/MP3; aggregate ≤15s. Must be paired with at least one reference image or video. Each a URL or data URL.
reference_image_urlsNoFor models with reference image support: up to 9 images for character/style consistency. Each a URL or data URL.
reference_video_urlsNoFor Seedance 2.0 R2V and similar: up to 3 reference video clips to inherit subject motion, camera movement, and style. Per-clip 2–15s, MP4/MOV, ≤50MB; aggregate ≤15s. Each a URL or data URL.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the return shape { model, queue_id }, the polling workflow, that x402 wallet auth works without a Venice account, the NSFW/uncensored posture, and that Seedance may reject detectable persons outright. It also clarifies that consent flags are defensive compatibility, not a policy bypass—material behavioral context the minimal annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and model list, then layers auth, return shape, and the consent caveat. The final consent NOTE is dense but earns its place given the nested const-true schema; a small amount of model-name listing is redundant but tolerable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter, no-output-schema tool, the description supplies the missing return contract and polling flow, which the schema cannot. Combined with 89% parameter coverage, an agent has enough to call it, though cost/quote routing (venice_video_quote) and sync-vs-queue alternatives are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 89%, so the schema already documents nearly every parameter including duration enums, consents nesting, and URL fields. The description largely restates the duration-format and consent guidance found in the schema, adding little syntax or format meaning beyond it. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Queue a video generation") and immediately names the poll counterpart venice_video_status, so the agent can distinguish it from the status/complete siblings. Enumerating the supported model families and example ids makes the scope concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational routing: poll with venice_video_status and inspect model-specific duration via venice_model_details, plus explicit sequencing for consent flags. It does not say when to prefer this over venice_video_complete or other generation siblings, so it stops short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_video_quoteVenice Video Cost QuoteA
Read-onlyIdempotent

Get a price quote for a video generation BEFORE queuing. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesVideo model id, e.g. "veo3.1-fast-text-to-video".
durationYesDuration as model-specific string enum, e.g. "4s", "6s", "8s".

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds two genuinely useful facts beyond that: no authentication is required, and the call happens before queuing (so it does not consume/enqueue a job).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose and the pre-queue constraint. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only quote tool this is nearly complete. The one gap is that no output schema exists and the description does not hint at what the quote returns (e.g., credit/cost fields), which an agent may want to know before parsing the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (model, duration) are fully documented in the schema itself. The description adds no format, enum, or constraint detail beyond it, which is the correct baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get a price quote) and resource (video generation), with the temporal qualifier 'BEFORE queuing' that separates it from venice_video_generate. The sibling venice_audio_quote confirms the quote-then-generate pattern, and this tool is clearly the video variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'BEFORE queuing' tells the agent this is a pre-flight step, which implies it should be called prior to venice_video_generate. It gives clear context but never names the alternative tool explicitly or states when a quote is unnecessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_video_statusVenice Video Retrieve / StatusA
Idempotent

Check status of a queued video job. Returns JSON progress while PROCESSING. Completed jobs are either an embedded base64 video/mp4 MCP resource or a download_url resource link. For VPS / Grok Imagine Private models, retrieve returns COMPLETED JSON without a URL: this process reuses the queue-time download_url when venice_video_generate ran here, or accepts a Venice-host download_url argument. POST endpoint with body {model, queue_id}. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesSame model id used to queue.
queue_idYesReturned by venice_video_generate.
download_urlNoQueue-time download_url from venice_video_generate. Must be an https Venice host. Needed for VPS / Grok Imagine Private only when this process did not queue the job (retrieve returns COMPLETED without a URL).
delete_media_on_completionNoDelete server-side media once an embedded MP4 has been buffered. Ignored for download_url results: download first, then call venice_video_complete.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring idempotentHint=true and destructiveHint=false, the description adds real context: the POST endpoint and body shape, the different completion payload forms, VPS/Grok Imagine Private URL-reuse behavior, and that delete_media is ignored for download_url results. Auth modes (x402 wallet vs API key) are explicitly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening line is front-loaded and useful, but the VPS/Grok Imagine sentence is dense and hard to parse, and the endpoint/auth details read like implementation notes rather than agent-facing guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly takes on the burden of describing return values (in-progress JSON, embedded base64 MP4, or download_url link) and auth requirements. It covers most of what an agent needs, with minor gaps around polling cadence and the transition to venice_video_complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions already explain model, queue_id, download_url, and delete_media_on_completion in detail. The description largely restates those semantics, so the baseline of 3 applies despite the surrounding workflow context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: check status of a queued video job, with named return modes (JSON progress, base64 resource, download_url). It is clearly distinct from venice_video_generate, though it never explicitly contrasts itself with the sibling venice_video_complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the workflow (queue via venice_video_generate, then poll here; the VPS case explains when download_url matters). However, it never states when to use this versus venice_video_complete or when to stop polling, so the agent must infer the boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_voice_cloneVenice Voice Clone / ListA

Discover or clone TTS voices. Action 'list' reads live per-model voice metadata from auth-free GET /v1/models?type=tts. Action 'create' requires sample_url, then uploads the sample to POST /v1/audio/voices for the chosen cloning model. Cloned voices come back as a vv_<id> handle; pass it as venice_tts voice together with the same model. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoTTS model the cloned voice is paired with (action=create). Defaults to tts-chatterbox-hd.
actionYeslist = fetch live TTS model voice metadata; create requires sample_url
sample_urlNoRequired for action=create. Audio sample URL; tts-chatterbox-hd accepts MP3/WAV/FLAC/M4A, tts-minimax-speech-02-hd MP3/WAV only.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give generic flags (readOnly=false, destructive=false, idempotent=false). The description adds real behavioral context beyond them: the list action is auth-free, the create action hits POST /v1/audio/voices, the return is a `vv_<id>` handle, and both x402 wallet auth and API key are supported. It omits irreversibility/cost of cloning and any rate-limit detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in the first clause, then walks action-by-action, then downstream usage, then auth. Dense but every sentence is functional; a slight trim of endpoint detail would tighten it further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-action tool with no output schema, the description covers both actions, the auth model, and the create return handle. The 'list' return is only described loosely ('live per-model voice metadata'), so a consumer still guesses at the shape, but nothing needed to call it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds a non-obvious semantic constraint absent from the schema: the cloned voice must be paired with the SAME model, and it reiterates sample_url's action-scoped requirement. That pairing rule is the kind of guidance the schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Discover or clone TTS voices') and then disambiguates its two internal actions with distinct verbs ('list' reads metadata, 'create' uploads a sample). An agent can distinguish this from venice_tts or venice_list_models without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly ties each action to its precondition ('create requires sample_url') and closes the loop by telling the agent to pass the returned handle to venice_tts with the same model. It names a related sibling but stops short of stating when NOT to use this tool versus venice_list_models.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_web_scrapeVenice Web ScrapeB

Scrape one URL into markdown text. Supports x402 wallet auth (no Venice account needed) and API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
formatNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the safety profile is covered structurally. The description adds genuinely useful context the annotations do not: dual auth via x402 wallet (no Venice account required) or API key. It does not disclose failure behavior or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, and the core action is front-loaded before the auth detail. Efficient, though it could have folded in the format options at no extra length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter scrape tool with no output schema, the auth disclosure is a real plus, but the description omits the non-markdown output formats, error/rate-limit behavior, and any note on external-resource variability implied by openWorldHint=true. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It only mentions markdown output, which corresponds to one enum value, and says nothing about the html/text alternatives the format parameter offers, nor any constraints on the URL. The url parameter is self-evident but format is under-explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Scrape) and resource (one URL) plus the output form (markdown text). The word 'one' implicitly distinguishes it from the sibling venice_web_search, but the sibling is never named, so an agent gets a clear purpose without explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains authentication options but gives no when-to-use guidance or alternatives, e.g. when to scrape a single URL versus calling venice_web_search. The agent must infer the selection criteria on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_x402_balanceVenice x402 Wallet BalanceA
Read-onlyIdempotent

Check the prepaid x402 credit balance for an EVM or Solana wallet address. SIWX-ONLY: this endpoint rejects API key auth and requires SIGN-IN-WITH-X (forwarded from VENICE_SIWX_TOKEN). The wallet in the path must match the SIWX-authenticated wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
wallet_addressYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new behavioral context: API key auth is rejected and the wallet must match the SIWX-authenticated identity. It does not describe response shape or error behavior, but the auth constraint is the key disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler: purpose first, then the auth constraint and identity-match requirement front-loaded as the operative caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-param read tool with no output schema, the description covers purpose, auth mode, and identity matching. It could briefly note the returned balance unit/format, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate for the single path parameter. It specifies the accepted address families (EVM or Solana) and the identity-match constraint, adding real meaning beyond the bare pattern in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Check) and resource (prepaid x402 credit balance) scoped to EVM or Solana wallet addresses. This clearly separates it from sibling billing/x402 tools like venice_billing_balance and venice_x402_transactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly declares SIWX-ONLY usage and that API key auth is rejected, plus the constraint that the path wallet must match the SIWX-authenticated wallet. It does not name a sibling alternative for API-key callers (e.g., venice_billing_balance), so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_x402_top_up_infoVenice x402 Top-up RequirementsA
Read-onlyIdempotent

Fetch the x402 top-up payment requirements: the accepted USDC payment options (currently Base and Solana), each with network, asset, receiver wallet (payTo), minimum amount in base units, and settlement timeout. Sends an empty POST with no payment header, so nothing is charged. Signing and PAYMENT-SIGNATURE submission happen OUTSIDE this MCP server. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds several things they cannot: it is an empty POST with no payment header, nothing is charged, no authentication is required, and signing occurs outside this server. That goes well beyond the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and purpose, then the return fields, then the behavioral caveats. Every sentence carries information; only the parenthetical field list makes it slightly dense, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing the response and does so fully (accepted USDC options, Base/Solana, payTo, minimum base units, settlement timeout). An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the calibration the baseline is 4. There is nothing further for the description to disambiguate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (x402 top-up payment requirements) and enumerates the exact payload fields returned (network, asset, payTo, minimum amount, settlement timeout). The agent can distinguish it from venice_x402_balance and venice_x402_transactions without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Frames the call as the discovery step before payment and clarifies that signing/PAYMENT-SIGNATURE submission happens outside the MCP server, which tells the agent where this tool's responsibility ends. It does not explicitly name an alternative or exclusion, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

venice_x402_transactionsVenice x402 Transaction HistoryA
Read-onlyIdempotent

List recent x402 top-up + debit transactions for an EVM or Solana wallet. SIWX-ONLY: rejects API key, requires SIGN-IN-WITH-X (VENICE_SIWX_TOKEN). The wallet in the path must match the SIWX-authenticated wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
wallet_addressYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavioral context: SIWX-only authentication, API keys are rejected, and the path wallet must match the SIWX-authenticated wallet. It stops short of describing ordering, pagination, or result shape, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and immediately followed by the hard constraint. Every clause carries information; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with no output schema, the description supplies purpose, auth model, and the wallet-matching rule. Missing only secondary details like ordering, default limit behavior, and pagination, which are minor for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It partially compensates by explaining that the wallet is EVM or Solana (clarifying the address formats) and that it must match the authenticated wallet, but the limit parameter (1-100) and its effect on result size are never mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and a precisely scoped resource (recent x402 top-up + debit transactions) qualified by wallet type (EVM or Solana). This cleanly separates it from sibling x402 tools like venice_x402_balance and venice_x402_top_up_info without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource (fetch transaction history for a wallet), and the auth precondition narrows the audience, but there is no explicit 'use this instead of / in addition to' routing against venice_x402_balance or venice_billing_usage_history. Adequate but leaves the agent to infer the selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 39 tool updatesv0.3.0
    • Addedvenice_api_key_rate_limit_logs
    • Addedvenice_api_key_rate_limits
    • Changedvenice_asr8 fields changed
      • addedInput schema / properties / audio_url / description
        Added value: +"Audio to transcribe. Required unless result_handle is supplied."
      • changedInput schema / properties / response_format / enum
        Previous value: -[
        -  "json",
        -  "text",
        -  "srt",
        -  "verbose_json",
        -  "vtt"
        -]New value: +[
        +  "json",
        +  "text"
        +]
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Handle returned by an earlier paged transcription. Pages that retained result without submitting another transcription, so audio_url is ignored when this is set. Expires after 10 minutes or once 16 newer results are retained; an expired handle is an error rather than a silent re-transcription.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / text_offset
        Added value: +{
        +  "description": "Start character of the transcript page (8000 characters each). Defaults to 0. Use result_handle with next_text_offset to read past the first page.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / timestamp_limit
        Added value: +{
        +  "description": "Max entries returned per timestamp array. Defaults to 200. Follow next_timestamp_offset; it is null on the last page.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / timestamp_offset
        Added value: +{
        +  "description": "Start index into each timestamp array (word/segment/char). Defaults to 0. Use result_handle to move past the first page.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / timestamps
        Added value: +{
        +  "description": "Include word and character timestamps in JSON responses. Defaults to false.",
        +  "type": "boolean"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "audio_url"
        -]
    • Changedvenice_audio_quote5 fields changed
      • addedInput schema / properties / duration_seconds / anyOf
        Added value: +[
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "pattern": "^[1-9]\\d*$",
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / duration_seconds / description
        Added value: +"Optional duration in seconds as a positive integer or numeric string. Model-specific."
      • removedInput schema / properties / duration_seconds / maximum
        Removed value: -300
      • removedInput schema / properties / duration_seconds / minimum
        Removed value: -1
      • removedInput schema / properties / duration_seconds / type
        Removed value: -"number"
    • Addedvenice_billing_balance
    • Addedvenice_billing_usage_analytics
    • Addedvenice_billing_usage_history
    • Addedvenice_character_reviews
    • Changedvenice_chat23 fields changed
      • addedInput schema / properties / max_completion_tokens
        Added value: +{
        +  "description": "Maximum visible plus reasoning tokens. Preferred over deprecated max_tokens.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / messages / description
        Previous value: -"Chat messages, OpenAI format."New value: +"Chat messages. Multimodal image, audio, video, and file blocks belong in user messages."
      • removedInput schema / properties / messages / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / messages / items / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "content": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "cache_control": {
        +                      "additionalProperties": false,
        +                      "description": "Prompt cache control for providers that support it.",
        +                      "properties": {
        +                        "ttl": {
        +                          "description": "Optional extended cache TTL, for example \"1h\".",
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "const": "ephemeral",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "text": {
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "type": {
        +                      "const": "text",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "type",
        +                    "text"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "cache_control": {
        +                      "$ref": "#/properties/messages/items/anyOf/0/properties/content/anyOf/1/items/anyOf/0/properties/cache_control",
        +                      "description": "Prompt cache control for providers that support it."
        +                    },
        +                    "image_url": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "url": {
        +                          "description": "Public URL or base64 data URL for an image at least 64px square.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "url"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": {
        +                      "const": "image_url",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "type",
        +                    "image_url"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "cache_control": {
        +                      "$ref": "#/properties/messages/items/anyOf/0/properties/content/anyOf/1/items/anyOf/0/properties/cache_control",
        +                      "description": "Prompt cache control for providers that support it."
        +                    },
        +                    "input_audio": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "data": {
        +                          "description": "Base64-encoded audio bytes; direct audio URLs are not supported.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "format": {
        +                          "enum": [
        +                            "wav",
        +                            "mp3",
        +                            "aiff",
        +                            "aac",
        +                            "ogg",
        +                            "flac",
        +                            "m4a",
        +                            "pcm16",
        +                            "pcm24"
        +                          ],
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "data"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": {
        +                      "const": "input_audio",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "type",
        +                    "input_audio"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "cache_control": {
        +                      "$ref": "#/properties/messages/items/anyOf/0/properties/content/anyOf/1/items/anyOf/0/properties/cache_control",
        +                      "description": "Prompt cache control for providers that support it."
        +                    },
        +                    "type": {
        +                      "const": "video_url",
        +                      "type": "string"
        +                    },
        +                    "video_url": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "url": {
        +                          "description": "Public video URL, supported YouTube URL, or base64 video data URL.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "url"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  },
        +                  "required": [
        +                    "type",
        +                    "video_url"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "cache_control": {
        +                      "$ref": "#/properties/messages/items/anyOf/0/properties/content/anyOf/1/items/anyOf/0/properties/cache_control",
        +                      "description": "Prompt cache control for providers that support it."
        +                    },
        +                    "file": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "file_data": {
        +                          "description": "Public file URL or base64 data URL.",
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "filename": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "file_data"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": {
        +                      "const": "file",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "type",
        +                    "file"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "role": {
        +        "const": "user",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "role",
        +      "content"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "content": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "items": {
        +              "$ref": "#/properties/messages/items/anyOf/0/properties/content/anyOf/1/items/anyOf/0"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "reasoning_content": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "reasoning_details": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "data": {
        +              "type": "string"
        +            },
        +            "format": {
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "index": {
        +              "type": "number"
        +            },
        +            "text": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "role": {
        +        "const": "assistant",
        +        "type": "string"
        +      },
        +      "thought_signature": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "tool_calls": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "function": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "arguments": {
        +                  "type": "string"
        +                },
        +                "name": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "name",
        +                "arguments"
        +              ],
        +              "type": "object"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "thought_signature": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "function",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "function"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "role"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "content": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "role": {
        +        "const": "tool",
        +        "type": "string"
        +      },
        +      "tool_call_id": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "role",
        +      "content",
        +      "tool_call_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "content": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "items": {
        +              "$ref": "#/properties/messages/items/anyOf/0/properties/content/anyOf/1/items/anyOf/0"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "role": {
        +        "enum": [
        +          "system",
        +          "developer"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "role",
        +      "content"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / messages / items / properties
        Removed value: -{
        -  "content": {
        -    "type": "string"
        -  },
        -  "role": {
        -    "enum": [
        -      "system",
        -      "user",
        -      "assistant"
        -    ],
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / messages / items / required
        Removed value: -[
        -  "role",
        -  "content"
        -]
      • removedInput schema / properties / messages / items / type
        Removed value: -"object"
      • changedInput schema / properties / model / description
        Previous value: -"Model id. Defaults to venice-uncensored."New value: +"Model id. Defaults to deepseek-v4-flash-0731."
      • addedInput schema / properties / parallel_tool_calls
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / prompt_cache_key
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / prompt_cache_retention
        Added value: +{
        +  "enum": [
        +    "default",
        +    "extended",
        +    "24h"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / reasoning
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "effort": {
        +      "enum": [
        +        "none",
        +        "minimal",
        +        "low",
        +        "medium",
        +        "high",
        +        "xhigh",
        +        "max"
        +      ],
        +      "type": "string"
        +    },
        +    "summary": {
        +      "enum": [
        +        "auto",
        +        "concise",
        +        "detailed"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / reasoning_effort
        Added value: +{
        +  "$ref": "#/properties/reasoning/properties/effort",
        +  "description": "Takes precedence over reasoning.effort."
        +}
      • addedInput schema / properties / response_format
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json_schema": {
        +          "additionalProperties": {},
        +          "type": "object"
        +        },
        +        "type": {
        +          "const": "json_schema",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "json_schema"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "type": {
        +          "const": "json_object",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "type": {
        +          "const": "text",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ],
        +      "type": "object"
        +    }
        +  ]
        +}
      • addedInput schema / properties / stop / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 4,
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / stop / items
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / stop / maxItems
        Removed value: -8
      • removedInput schema / properties / stop / type
        Removed value: -"array"
      • addedInput schema / properties / timeout_ms
        Added value: +{
        +  "description": "Upstream timeout for this call, covering the full response body. Long generations may need more than the VENICE_HTTP_TIMEOUT_MS default.",
        +  "maximum": 600000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / tool_choice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "none",
        +        "auto",
        +        "required"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "function": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "name": {
        +              "minLength": 1,
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "type": {
        +          "const": "function",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "function"
        +      ],
        +      "type": "object"
        +    }
        +  ]
        +}
      • addedInput schema / properties / tools
        Added value: +{
        +  "items": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "function": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "type": "string"
        +              },
        +              "name": {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "parameters": {
        +                "$ref": "#/properties/response_format/anyOf/0/properties/json_schema"
        +              },
        +              "strict": {
        +                "type": "boolean"
        +              }
        +            },
        +            "required": [
        +              "name"
        +            ],
        +            "type": "object"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "const": "function",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "function"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "type": {
        +            "enum": [
        +              "web_search",
        +              "x_search"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "type"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / venice_parameters
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Venice-only options: web search, citations, system prompt control, reasoning control, and characters.",
        +  "properties": {
        +    "character_slug": {
        +      "description": "Public ID of a Venice character to answer in. Discoverable via venice_list_characters.",
        +      "type": "string"
        +    },
        +    "disable_thinking": {
        +      "description": "Turn reasoning off entirely on supported models, and strip the <think></think> blocks.",
        +      "type": "boolean"
        +    },
        +    "enable_web_citations": {
        +      "description": "Ask the model to cite web sources with ^1^ style superscripts. Only applies when web search ran.",
        +      "type": "boolean"
        +    },
        +    "enable_web_scraping": {
        +      "description": "Scrape URLs found in the latest user message and feed the contents to the model.",
        +      "type": "boolean"
        +    },
        +    "enable_web_search": {
        +      "description": "Web search. \"on\" forces it, \"auto\" leaves it to the model, \"off\" (default) disables it.",
        +      "enum": [
        +        "auto",
        +        "on",
        +        "off"
        +      ],
        +      "type": "string"
        +    },
        +    "enable_x_search": {
        +      "description": "Native xAI web + X/Twitter search, on supported models such as Grok. Runs server-side instead of Venice search.",
        +      "type": "boolean"
        +    },
        +    "include_venice_system_prompt": {
        +      "description": "Keep Venice's default system prompt alongside your own. Defaults to true; set false for full control of behaviour.",
        +      "type": "boolean"
        +    },
        +    "strip_thinking_response": {
        +      "description": "Remove <think></think> blocks from the response of a reasoning model.",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / verbosity
        Added value: +{
        +  "description": "How much text the model returns.",
        +  "enum": [
        +    "low",
        +    "medium",
        +    "high",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
    • Addedvenice_crypto_networks
    • Changedvenice_crypto_rpc11 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Reuse the same key when retrying a request. Required for eth_sendRawTransaction, eth_sendUserOperation, Solana sendTransaction, and Starknet writes so a lost response is not broadcast again.",
        +  "pattern": "^[A-Za-z0-9_-]{1,255}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / network / description
        Previous value: -"Full network id, e.g. \"base-mainnet\" (NOT just \"base\"), \"ethereum-mainnet\", \"polygon-mainnet\"."New value: +"Network slug returned by venice_crypto_networks, e.g. \"ethereum-mainnet\"."
      • removedInput schema / properties / network / minLength
        Removed value: -1
      • addedInput schema / properties / network / pattern
        Added value: +"^[a-z0-9][a-z0-9-]{0,99}$"
      • addedInput schema / properties / request
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "id": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "integer"
        +            }
        +          ],
        +          "description": "Caller-supplied request ID. Defaults to 1 for a single request."
        +        },
        +        "jsonrpc": {
        +          "const": "2.0",
        +          "description": "JSON-RPC version. Defaults to \"2.0\".",
        +          "type": "string"
        +        },
        +        "method": {
        +          "description": "JSON-RPC method name.",
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "params": {
        +          "anyOf": [
        +            {
        +              "items": {},
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": {},
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Method parameters, by position (array) or by name (object)."
        +        }
        +      },
        +      "required": [
        +        "method"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "anyOf": [
        +              {
        +                "$ref": "#/properties/request/anyOf/0/properties/id/anyOf/0"
        +              },
        +              {
        +                "$ref": "#/properties/request/anyOf/0/properties/id/anyOf/1"
        +              }
        +            ],
        +            "description": "Required request ID used to correlate this batch item with its response."
        +          },
        +          "jsonrpc": {
        +            "$ref": "#/properties/request/anyOf/0/properties/jsonrpc"
        +          },
        +          "method": {
        +            "$ref": "#/properties/request/anyOf/0/properties/method"
        +          },
        +          "params": {
        +            "$ref": "#/properties/request/anyOf/0/properties/params"
        +          }
        +        },
        +        "required": [
        +          "method",
        +          "id"
        +        ],
        +        "type": "object"
        +      },
        +      "maxItems": 100,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "A single JSON-RPC request object (ID optional) or a non-empty batch of at most 100 request objects (ID required per item)."
        +}
      • addedInput schema / properties / rpc_method / description
        Added value: +"Convenience form for a single request. Do not combine with request."
      • addedInput schema / properties / rpc_params / $ref
        Added value: +"#/properties/request/anyOf/0/properties/params"
      • addedInput schema / properties / rpc_params / description
        Added value: +"Parameters for rpc_method, by position (array) or by name (object)."
      • removedInput schema / properties / rpc_params / items
        Removed value: -{}
      • removedInput schema / properties / rpc_params / type
        Removed value: -"array"
      • changedInput schema / required
        Previous value: -[
        -  "network",
        -  "rpc_method"
        -]New value: +[
        +  "network"
        +]
    • Changedvenice_embeddings2 fields changed
      • addedInput schema / properties / model / minLength
        Added value: +1
      • changedInput schema / required
        Previous value: -[
        -  "input"
        -]New value: +[
        +  "input",
        +  "model"
        +]
    • Addedvenice_get_api_key
    • Addedvenice_get_character
    • Changedvenice_image_edit5 fields changed
      • addedInput schema / properties / aspect_ratio / description
        Added value: +"Output aspect ratio, e.g. \"1:1\", \"16:9\", \"9:16\", \"4:5\". Supported values vary by model; the API validates."
      • removedInput schema / properties / aspect_ratio / enum
        Removed value: -[
        -  "1:1",
        -  "16:9",
        -  "9:16",
        -  "4:3",
        -  "3:4",
        -  "21:9",
        -  "9:21"
        -]
      • addedInput schema / properties / enhance_prompt
        Added value: +{
        +  "description": "Rewrite the edit prompt with awareness of the input image. May add time and cost.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / output_format
        Added value: +{
        +  "enum": [
        +    "jpeg",
        +    "jpg",
        +    "png",
        +    "webp"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / resolution
        Added value: +{
        +  "description": "Model-specific output resolution tier; the API validates supported values.",
        +  "type": "string"
        +}
    • Changedvenice_image_generate9 fields changed
      • addedInput schema / properties / aspect_ratio
        Added value: +{
        +  "description": "Model-specific aspect ratio such as \"1:1\" or \"16:9\"; the API validates supported values.",
        +  "type": "string"
        +}
      • addedInput schema / properties / disable_prompt_optimization_thinking
        Added value: +{
        +  "description": "Skip prompt-optimization thinking on supported models.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / enable_web_search
        Added value: +{
        +  "description": "Allow supported models to use web search; additional credits may apply.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / enhance_prompt
        Added value: +{
        +  "description": "Rewrite the prompt before generation. Adds up to ~30 seconds and a charge when applied.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / format
        Added value: +{
        +  "enum": [
        +    "jpeg",
        +    "png",
        +    "webp"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / quality
        Added value: +{
        +  "description": "Model-specific quality tier; may change pricing.",
        +  "enum": [
        +    "low",
        +    "medium",
        +    "high"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / resolution
        Added value: +{
        +  "description": "Model-specific resolution tier such as \"1K\", \"2K\", or \"4K\"; the API validates supported values.",
        +  "type": "string"
        +}
      • addedInput schema / properties / style_references
        Added value: +{
        +  "description": "Model-specific style references. Check the model maxStyleReferences capability.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "image": {
        +        "description": "Style image URL, data URI, or raw base64 (under 8MB).",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "strength": {
        +        "maximum": 1,
        +        "minimum": 0.1,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "image"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / variants
        Added value: +{
        +  "description": "Number of images. Only supported with non-binary responses.",
        +  "maximum": 4,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedvenice_image_multi_edit6 fields changed
      • addedInput schema / properties / aspect_ratio / description
        Added value: +"Output aspect ratio, e.g. \"1:1\", \"16:9\", \"9:16\", \"4:5\". Supported values vary by model; the API validates."
      • removedInput schema / properties / aspect_ratio / enum
        Removed value: -[
        -  "1:1",
        -  "16:9",
        -  "9:16",
        -  "4:3",
        -  "3:4",
        -  "21:9",
        -  "9:21"
        -]
      • addedInput schema / properties / enhance_prompt
        Added value: +{
        +  "description": "Rewrite the edit prompt with awareness of the input images. May add time and cost.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / output_format
        Added value: +{
        +  "enum": [
        +    "jpeg",
        +    "jpg",
        +    "png",
        +    "webp"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / quality
        Added value: +{
        +  "description": "Model-specific quality tier; may change pricing.",
        +  "enum": [
        +    "low",
        +    "medium",
        +    "high"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / resolution
        Added value: +{
        +  "description": "Model-specific output resolution tier; the API validates supported values.",
        +  "type": "string"
        +}
    • Changedvenice_image_upscale5 fields changed
      • addedInput schema / properties / creativity
        Added value: +{
        +  "description": "How much detail and texture the upscaler invents, 0 to 0.02. Defaults to 0.01. Higher stays further from the source.",
        +  "maximum": 0.02,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • removedInput schema / properties / enhance
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedInput schema / properties / replication
        Removed value: -{
        -  "maximum": 1,
        -  "minimum": 0,
        -  "type": "number"
        -}
      • changedInput schema / properties / scale / description
        Previous value: -"Upscale factor 1-4. 1 = enhance only."New value: +"Upscale factor, 2 to 4. Defaults to 2. Large inputs are scaled down automatically to stay under the 4096x4096 output cap."
      • changedInput schema / properties / scale / minimum
        Previous value: -1New value: +2
    • Addedvenice_list_api_keys
    • Changedvenice_list_characters12 fields changed
      • addedInput schema / properties / categories
        Added value: +{
        +  "items": {
        +    "maxLength": 100,
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedInput schema / properties / isAdult
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / isPro
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / isWebEnabled
        Added value: +{
        +  "type": "boolean"
        +}
      • changedInput schema / properties / limit / maximum
        Previous value: -50New value: +100
      • addedInput schema / properties / modelId
        Added value: +{
        +  "items": {
        +    "maxLength": 200,
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedInput schema / properties / search / maxLength
        Added value: +200
      • addedInput schema / properties / sortBy
        Added value: +{
        +  "enum": [
        +    "featured",
        +    "highestRating",
        +    "highlyRated",
        +    "highlyRatedAndRecent",
        +    "imports",
        +    "mostRecent",
        +    "ratingCount"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / tag / description
        Added value: +"Deprecated: use tags. A single tag, merged into tags."
      • addedInput schema / properties / tag / maxLength
        Added value: +100
      • addedInput schema / properties / tags
        Added value: +{
        +  "items": {
        +    "maxLength": 100,
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
    • Changedvenice_list_models7 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Max models per page. Defaults to 50. A page may hold fewer when entries are large; follow next_offset.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Index of the first model to return. Defaults to 0.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / type / description
        Added value: +"Catalog type: text, image, inpaint, upscale, video, music, tts, asr, embedding, decision, \"code\", or \"all\" (default). Without a type Venice returns only text models, so pass one to find video, image or audio ids."
      • removedInput schema / properties / type / enum
        Removed value: -[
        -  "text",
        -  "image",
        -  "video",
        -  "audio",
        -  "music",
        -  "embedding",
        -  "all"
        -]
      • addedInput schema / properties / type / maxLength
        Added value: +64
      • addedInput schema / properties / type / pattern
        Added value: +"^[a-z][a-z0-9_-]*$"
      • addedInput schema / properties / verbose
        Added value: +{
        +  "description": "Return full upstream model objects instead of compact summaries. Defaults to false.",
        +  "type": "boolean"
        +}
    • Addedvenice_model_compatibility_mapping
    • Addedvenice_model_details
    • Addedvenice_model_traits
    • Changedvenice_music_generate15 fields changed
      • addedInput schema / properties / duration_seconds / anyOf
        Added value: +[
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "pattern": "^[1-9]\\d*$",
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / duration_seconds / description
        Added value: +"Optional duration in seconds as a positive integer or numeric string. Model-specific."
      • removedInput schema / properties / duration_seconds / maximum
        Removed value: -300
      • removedInput schema / properties / duration_seconds / minimum
        Removed value: -1
      • removedInput schema / properties / duration_seconds / type
        Removed value: -"number"
      • addedInput schema / properties / force_instrumental
        Added value: +{
        +  "description": "Only for models reporting supports_force_instrumental.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / instrumental / description
        Added value: +"Deprecated: use force_instrumental. Ignored when force_instrumental is set."
      • addedInput schema / properties / language_code
        Added value: +{
        +  "description": "ISO 639-1 language code on supported models.",
        +  "type": "string"
        +}
      • addedInput schema / properties / loop
        Added value: +{
        +  "description": "Create a seamless loop on models reporting supports_loop.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / lyrics / description
        Added value: +"Deprecated: use lyrics_prompt. Ignored when lyrics_prompt is set."
      • removedInput schema / properties / lyrics / maxLength
        Removed value: -4096
      • addedInput schema / properties / lyrics_optimizer
        Added value: +{
        +  "description": "Auto-generate lyrics. lyrics_prompt must be empty when enabled.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / lyrics_prompt
        Added value: +{
        +  "description": "Lyrics/text for lyric-capable models. Length limits come from model metadata.",
        +  "type": "string"
        +}
      • addedInput schema / properties / speed
        Added value: +{
        +  "description": "Model-specific speed multiplier. Check model min_speed/max_speed.",
        +  "maximum": 4,
        +  "minimum": 0.25,
        +  "type": "number"
        +}
      • addedInput schema / properties / voice
        Added value: +{
        +  "description": "Model-supported voice id/name.",
        +  "type": "string"
        +}
    • Changedvenice_music_status1 field changed
      • addedInput schema / properties / delete_media_on_completion / description
        Added value: +"Delete server-side media once embedded audio has been buffered. Ignored for download_url results: download first, then call venice_music_complete."
    • Changedvenice_responses5 fields changed
      • changedInput schema / properties / input / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "content": {
        -          "type": "string"
        -        },
        -        "role": {
        -          "enum": [
        -            "system",
        -            "user",
        -            "assistant"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "role",
        -        "content"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "content": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "items": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "text": {
        +                        "type": "string"
        +                      },
        +                      "type": {
        +                        "enum": [
        +                          "input_text",
        +                          "text",
        +                          "output_text"
        +                        ],
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "type",
        +                      "text"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "image_url": {
        +                        "anyOf": [
        +                          {
        +                            "minLength": 1,
        +                            "type": "string"
        +                          },
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "detail": {
        +                                "enum": [
        +                                  "auto",
        +                                  "low",
        +                                  "high"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              "url": {
        +                                "minLength": 1,
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "url"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ]
        +                      },
        +                      "type": {
        +                        "enum": [
        +                          "input_image",
        +                          "image_url"
        +                        ],
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "type",
        +                      "image_url"
        +                    ],
        +                    "type": "object"
        +                  }
        +                ]
        +              },
        +              "minItems": 1,
        +              "type": "array"
        +            }
        +          ]
        +        },
        +        "role": {
        +          "enum": [
        +            "system",
        +            "developer",
        +            "user",
        +            "assistant"
        +          ],
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "message",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "role",
        +        "content"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / input / description
        Previous value: -"Either a plain string or an array of role+content messages."New value: +"Plain text or an array of text/image message inputs."
      • addedInput schema / properties / reasoning
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "effort": {
        +      "enum": [
        +        "none",
        +        "minimal",
        +        "low",
        +        "medium",
        +        "high",
        +        "xhigh",
        +        "max"
        +      ],
        +      "type": "string"
        +    },
        +    "summary": {
        +      "enum": [
        +        "auto",
        +        "concise",
        +        "detailed"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / top_p
        Added value: +{
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / venice_parameters
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Venice-only options supported by /responses: web search, citations, scraping, system prompt control, characters.",
        +  "properties": {
        +    "character_slug": {
        +      "description": "Public ID of a Venice character to answer in. Discoverable via venice_list_characters.",
        +      "type": "string"
        +    },
        +    "enable_web_citations": {
        +      "description": "Ask the model to cite web sources with ^1^ style superscripts. Only applies when web search ran.",
        +      "type": "boolean"
        +    },
        +    "enable_web_scraping": {
        +      "description": "Scrape URLs found in the latest user message and feed the contents to the model.",
        +      "type": "boolean"
        +    },
        +    "enable_web_search": {
        +      "description": "Web search. \"on\" forces it, \"auto\" leaves it to the model, \"off\" (default) disables it.",
        +      "enum": [
        +        "auto",
        +        "on",
        +        "off"
        +      ],
        +      "type": "string"
        +    },
        +    "include_venice_system_prompt": {
        +      "description": "Keep Venice's default system prompt alongside your own. Defaults to true; set false for full control of behaviour.",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedvenice_tee_attestation
    • Addedvenice_tee_signature
    • Changedvenice_tts2 fields changed
      • addedInput schema / properties / streaming
        Added value: +{
        +  "description": "Forward Venice's streaming flag. The MCP result is still buffered into one complete audio response, not delivered incrementally.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / temperature
        Added value: +{
        +  "description": "Sampling temperature. Only supported by some TTS models; unsupported models ignore it.",
        +  "maximum": 2,
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedvenice_video_generate6 fields changed
      • addedInput schema / properties / aspect_ratio / description
        Added value: +"Output aspect ratio, e.g. \"16:9\", \"9:16\", \"1:1\", \"4:5\", \"9:21\". Model-specific; see venice_model_details."
      • removedInput schema / properties / aspect_ratio / enum
        Removed value: -[
        -  "16:9",
        -  "9:16",
        -  "1:1",
        -  "2:3",
        -  "3:2",
        -  "3:4",
        -  "4:3",
        -  "21:9"
        -]
      • addedInput schema / properties / consents
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Defensive compatibility support for a returned Seedance needs_consent flow. Current public models may reject detectable persons outright. All three flags must be true after explicit user confirmation and cannot bypass content policy.",
        +  "properties": {
        +    "seedance": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "confirmed_legal_right": {
        +          "const": true,
        +          "description": "Set true only after the user confirms legal rights/consent for every depicted person and all submitted media.",
        +          "type": "boolean"
        +        },
        +        "confirmed_screening_acknowledged": {
        +          "const": true,
        +          "description": "Set true only after the user acknowledges automated media screening.",
        +          "type": "boolean"
        +        },
        +        "confirmed_terms_and_privacy": {
        +          "const": true,
        +          "description": "Set true only after the user confirms the returned policy text and Venice terms/privacy.",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "confirmed_terms_and_privacy",
        +        "confirmed_legal_right",
        +        "confirmed_screening_acknowledged"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "seedance"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / duration / description
        Previous value: -"Duration as model-specific string enum, e.g. \"4s\", \"6s\", \"8s\". See GET /v1/models/:id/card."New value: +"Duration as model-specific string enum, e.g. \"4s\", \"6s\", \"8s\". See venice_model_details."
      • changedInput schema / properties / resolution / description
        Previous value: -"Output resolution, e.g. \"720p\", \"1080p\", \"4k\". Model-specific; see model card."New value: +"Output resolution, e.g. \"720p\", \"1080p\", \"4k\". Model-specific; see venice_model_details."
      • changedInput schema / required
        Previous value: -[
        -  "prompt",
        -  "model"
        -]New value: +[
        +  "prompt",
        +  "model",
        +  "duration"
        +]
    • Changedvenice_video_quote1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "model"
        -]New value: +[
        +  "model",
        +  "duration"
        +]
    • Changedvenice_video_status2 fields changed
      • addedInput schema / properties / delete_media_on_completion / description
        Added value: +"Delete server-side media once an embedded MP4 has been buffered. Ignored for download_url results: download first, then call venice_video_complete."
      • addedInput schema / properties / download_url
        Added value: +{
        +  "description": "Queue-time download_url from venice_video_generate. Must be an https Venice host. Needed for VPS / Grok Imagine Private only when this process did not queue the job (retrieve returns COMPLETED without a URL).",
        +  "format": "uri",
        +  "type": "string"
        +}
    • Removedvenice_video_transcriptions
    • Changedvenice_voice_clone4 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"list = show built-in voices, create = clone from sample_url"New value: +"list = fetch live TTS model voice metadata; create requires sample_url"
      • changedInput schema / properties / model / description
        Previous value: -"Voice cloning model. Required for action=create. Examples: tts-chatterbox-hd, tts-minimax-speech-02-hd."New value: +"TTS model the cloned voice is paired with (action=create). Defaults to tts-chatterbox-hd."
      • addedInput schema / properties / model / enum
        Added value: +[
        +  "tts-chatterbox-hd",
        +  "tts-minimax-speech-02-hd"
        +]
      • changedInput schema / properties / sample_url / description
        Previous value: -"Audio sample URL for action=create. WAV/MP3/M4A."New value: +"Required for action=create. Audio sample URL; tts-chatterbox-hd accepts MP3/WAV/FLAC/M4A, tts-minimax-speech-02-hd MP3/WAV only."
    • Changedvenice_web_search2 fields changed
      • changedInput schema / properties / query / maxLength
        Previous value: -500New value: +400
      • addedInput schema / properties / search_provider
        Added value: +{
        +  "description": "brave (default) uses Zero Data Retention; google is proxied/anonymized by Venice.",
        +  "enum": [
        +    "brave",
        +    "google"
        +  ],
        +  "type": "string"
        +}
    • Changedvenice_x402_balance1 field changed
      • changedInput schema / properties / wallet_address / pattern
        Previous value: -"^0x[a-fA-F0-9]{40}$"New value: +"^(0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"
    • Changedvenice_x402_top_up_info4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / amount_usd
        Removed value: -{
        -  "maximum": 1000000,
        -  "minimum": 1,
        -  "type": "number"
        -}
      • removedInput schema / properties / wallet_address
        Removed value: -{
        -  "pattern": "^0x[a-fA-F0-9]{40}$",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "wallet_address"
        -]
    • Changedvenice_x402_transactions1 field changed
      • changedInput schema / properties / wallet_address / pattern
        Previous value: -"^0x[a-fA-F0-9]{40}$"New value: +"^(0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"
  2. 31 tool updatesv0.2.0
    • First observedvenice_asr
    • First observedvenice_audio_quote
    • First observedvenice_chat
    • First observedvenice_chat_with_character
    • First observedvenice_crypto_rpc
    • First observedvenice_embeddings
    • First observedvenice_image_edit
    • First observedvenice_image_generate
    • First observedvenice_image_multi_edit
    • First observedvenice_image_remove_bg
    • First observedvenice_image_styles
    • First observedvenice_image_upscale
    • First observedvenice_list_characters
    • First observedvenice_list_models
    • First observedvenice_music_complete
    • First observedvenice_music_generate
    • First observedvenice_music_status
    • First observedvenice_responses
    • First observedvenice_text_parser
    • First observedvenice_tts
    • First observedvenice_video_complete
    • First observedvenice_video_generate
    • First observedvenice_video_quote
    • First observedvenice_video_status
    • First observedvenice_video_transcriptions
    • First observedvenice_voice_clone
    • First observedvenice_web_scrape
    • First observedvenice_web_search
    • First observedvenice_x402_balance
    • First observedvenice_x402_top_up_info
    • First observedvenice_x402_transactions

TDQS

A3.6/5.0

Scored across 45 tools

Disambiguation4/5

Most tools target clearly distinct resources and actions (image_edit vs image_multi_edit, video_status vs music_status, chat vs chat_with_character). A few boundaries are subtle: venice_model_traits vs venice_model_compatibility_mapping seem to return similar trait/name→id mappings, and venice_chat vs venice_responses (alpha) both do text completion, risking misselection.

Naming Consistency5/5

Every tool uses the venice_ prefix with snake_case, and the resource_action pattern (venice_image_generate, venice_video_status, venice_music_generate) is applied predictably across all 45 tools. Deviations like venice_chat, venice_tts, venice_embeddings are accepted module-level names rather than inconsistency.

Tool Count3/5

45 tools is heavy, though justified by a very broad API surface spanning chat, image, video, music, audio, web, models, crypto, TEE, characters, billing, and x402. Grouping is coherent but the set is near the upper bound of what an agent can select from reliably.

Completeness4/5

The surface is extensive: generate/status/complete lifecycles for video and music, full image ops, TTS/ASR/voice cloning, embeddings, model catalog, characters, billing, crypto RPC, and x402 flows. Minor gaps remain (characters are read-only, chat is explicitly non-streaming), but core workflows are covered.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Operator-tuned MCP server for Venice AI, providing 31 tools for chat, image, video, audio, and music generation with curated presets and workflow prompts.
    31
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 20 essential tools including HTTP requests, web search, file I/O, shell commands, and persistent memory for any MCP client, with zero configuration required.
    MIT