Skip to main content
Glama

TokenLab MCP Server

CI npm npm downloads

OpenAPI-generated Model Context Protocol server for TokenLab public model discovery, pricing, native LLM endpoints, typed decisions, multimodal generation, async tasks, files, embeddings, rerank, translation, resources, prompts, and the broader developer API.

It exposes public catalog tools for agents that need to choose models, inspect supported request formats, or compare pricing before calling TokenLab APIs. Credentialed tools cover text inference, image generation and editing, video, music, 3D, async task polling, embeddings, rerank, typed decisions, and text translation.

Generated Tool Profiles

The checked-in generated/tools.json manifest is generated from TokenLab's public OpenAPI document plus the small MCP-only overlay in contract/mcp-overlay.json. Version 0.6.30 generates 87 endpoint tools; with the two MCP-only composite discovery tools, the full profile returns 89 tools from tools/list.

Profile

Endpoint tools

Total registered tools

Model-facing schema

Coverage

catalog

4

6

Exact

Public model discovery and pricing only; no API key required

core (default)

30

32

Portable

Catalog and pricing; Chat Completions, Responses, Anthropic Messages, Gemini generateContent; System One typed decisions; images, video, music, 3D, speech and transcription; async tasks; files; embeddings, rerank, and translation

full

87

89

Portable

Every allowlisted developer API operation in the checked-in OpenAPI snapshot, including core plus response lifecycle, batches, worlds, and native model discovery

The total registered count is the number returned by tools/list. All profiles include compare_models and get_api_overview, producing totals of 6, 32, and 89 tools. Realtime and streaming-only operations are excluded because stdio MCP tool calls return one final result. API operations that accept stream fix it internally to false without exposing a boolean const to provider adapters, and the Gemini query-string API key is intentionally hidden from tool arguments. create_gemini_content exposes the camelCase Gemini fields (systemInstruction, generationConfig, safetySettings, toolConfig, cachedContent) and hides their snake_case proto spellings, which the API accepts as aliases.

The portable projection keeps every top-level argument but bounds deeply nested model-facing shapes. The server still validates calls against the complete generated OpenAPI schema before issuing an API request. Compatibility budgets keep core at no more than 60 KB and depth 8, and full at no more than 115 KB and depth 8 for the complete tools/list response. Tests also run the full profile through the Google AI SDK version used by the observed OpenCode/Gemini failure and keep its function declarations within 90 KB.

Set TOKENLAB_MCP_TOOL_PROFILE=catalog for the smallest public-only tool list or TOKENLAB_MCP_TOOL_PROFILE=full for the broad developer API. Set TOKENLAB_MCP_SCHEMA_MODE=exact only when a client needs the complete nested JSON Schema and can accept its larger/deeper tool payload. Use strict for providers that require every property to be listed in required and every object to set additionalProperties: false; complex top-level arguments are represented as JSON-encoded strings and decoded before canonical validation. Canonical tool names, descriptions, input JSON Schemas, HTTP bindings, content types, auth requirements, and task behavior can be inspected in generated/tools.json.

The smaller generated/public-contract.json is the machine-readable projection used by TokenLab's website and other public consumers. It contains package identity, profile counts, core tool layers, resources, prompts, and source hashes without copying all endpoint schemas.

Related MCP server: gliana-mcp-remote

Native MCP Features

  • JSON tool responses include structuredContent while retaining serialized text for older clients.

  • HTTP errors retain the original response text (up to 4,000 characters), including public correction hints, alongside structured status, request ID and retry timing. Only the request ID and retry headers are exposed; failed generation requests are never submitted again automatically.

  • Generated tools expose human-readable titles, standard read-only/destructive/idempotent/open-world annotations, and response request IDs when available.

  • Tool schemas are published and validated directly as JSON Schema. The runtime does not round-trip generated tool schemas through Zod; exact mode is byte-shape equivalent to the generated canonical schema.

  • Three resources expose the live API overview, the package's OpenAPI snapshot, and the compact MCP public contract.

  • choose_tokenlab_model and build_tokenlab_request prompts guide agents to use live model truth and preserve native endpoint shapes.

  • Server instructions tell clients to confirm billable or destructive operations and treat external model/API output as untrusted content.

Run

npm install
npm start

Install from npm:

npx -y @tokenlabai/mcp-server

Agent-assisted installers can follow llms-install.md for a credential-safe setup and verification flow.

Run in Docker:

docker build -t tokenlab-mcp-server .
docker run --rm -i tokenlab-mcp-server

Add -e TOKENLAB_API_KEY when using credentialed API tools. Public catalog tools do not require a key.

Claude Desktop style config:

{
  "mcpServers": {
    "tokenlab-model-catalog": {
      "command": "npx",
      "args": ["-y", "@tokenlabai/mcp-server"],
      "env": {
        "TOKENLAB_API_BASE": "https://api.tokenlab.sh"
      }
    }
  }
}

No TokenLab API key is required for public catalog and pricing operations. Set TOKENLAB_API_KEY when credentialed tools should call TokenLab APIs. Generated tools preserve the OpenAPI request shape for OpenAI-compatible and native endpoints instead of flattening them into a shared prompt format.

Multipart operations accept local file paths. Small image and audio responses are returned as native MCP content; larger or other binary responses are written to TOKENLAB_ARTIFACT_DIR and returned as a path with MIME type and byte count.

Sync and Async Media Results

Video, music, and 3D creation tools always return an async task. Image generation and editing may return a completed result or an async task depending on the selected model and request.

Media tools preserve the complete TokenLab API response under response and add a normalized delivery summary:

{
  "delivery": {
    "mode": "async",
    "task_id": "ldtask_...",
    "status": "pending",
    "poll_url": "/v1/tasks/ldtask_...",
    "terminal": false,
    "next_tool": "get_task_status"
  },
  "response": {}
}

Use delivery.mode instead of assuming all image requests are synchronous. For async tasks, call get_task_status with { "id": delivery.task_id } until delivery.terminal is true. Completion is determined from status, not from an optional progress field.

Environment

  • TOKENLAB_API_BASE: optional, defaults to https://api.tokenlab.sh

  • TOKENLAB_API_KEY: optional; required for text inference, multimodal generation, async task, embedding, rerank, decision, and translation tools

  • TOKENLAB_MCP_TOOL_PROFILE: optional, catalog, core (default), or full

  • TOKENLAB_MCP_SCHEMA_MODE: optional, portable, exact, or strict; defaults to the selected profile's tested mode

  • TOKENLAB_REQUEST_TIMEOUT_MS: optional request timeout in milliseconds, defaults to 120000

  • TOKENLAB_MCP_MAX_FILE_BYTES: optional maximum local upload size per file, defaults to 104857600 (100 MiB)

  • TOKENLAB_MCP_INLINE_BYTES: optional maximum binary/JSON response size returned inline, defaults to 2097152 (2 MiB)

  • TOKENLAB_ARTIFACT_DIR: optional output directory for non-inline response artifacts, defaults to the OS temp directory under tokenlab-mcp

For Chat Completions image inputs, prefer byte-accurate data URLs such as data:image/png;base64,.... If an MCP caller labels a recognized PNG, JPEG, WebP, or GIF payload as application/octet-stream, the server corrects that generic MIME before forwarding. An unrecognized generic binary payload is rejected locally with a precise input error.

Contract Sync

The public OpenAPI document is the API contract source. The overlay contains only MCP-specific choices: profile exposure, stable tool aliases, secret omission, non-streaming constraints, content-type variants, async task semantics, and the compact public projection consumed by the website and docs gates.

npm run contract:source-check # compare the snapshot with the live canonical OpenAPI (read-only)
npm run contract:check        # check generated output against the checked-in snapshot (offline)
npm run contract:sync         # fetch OpenAPI and regenerate; refuses dirty outputs or a stale branch
npm test                      # compile profiles and test exact/portable/strict schemas, provider conversion, routing, tasks, files, and binary output

Always run git pull --ff-only before a manual contract sync. contract:check proves internal consistency only; contract:source-check proves freshness against the canonical source. The scheduled Sync TokenLab OpenAPI contract workflow runs the full write sequence and commits only the verified OpenAPI snapshot and generated manifest to main. A failed fetch, stale local branch, dirty generated output, generation error, schema compilation error, or test leaves the tracked contract unchanged.

MCP Registry Metadata

This repository includes server.json for the official MCP Registry.

Release metadata:

  • npm package: @tokenlabai/mcp-server@0.6.30

  • MCP registry name: io.github.hedging8563/tokenlab

  • package.json.mcpName: io.github.hedging8563/tokenlab

For a new release:

  1. Bump the matching versions in package.json, package-lock.json, and server.json.

  2. Push a matching tag such as v0.6.0.

  3. The publish workflow tests and publishes npm through trusted publishing, then publishes the MCP Registry entry through GitHub Actions OIDC.

The same workflow can be run manually from main to republish only the current MCP Registry metadata. No npm or MCP Registry token is stored in GitHub.

Security

Use the catalog profile when no credentialed tools are needed. Keep TOKENLAB_API_KEY in the local MCP client's secret environment, enable human confirmation for billable and destructive calls, and review tool annotations before granting persistent approval. Do not send a TokenLab API key to an untrusted hosted MCP server.

Webhook management

Use the full profile to configure workspace webhooks with list_webhooks, create_webhook, get_webhook, update_webhook, delete_webhook, rotate_webhook_secret, test_webhook and list_webhook_deliveries.

Set TOKENLAB_MANAGEMENT_TOKEN=mt-... separately from TOKENLAB_API_KEY=sk-.... Create the management token at Dashboard → API → Management Tokens. It authorizes management operations only within its workspace and is not limited to webhooks. The inference key cannot substitute for it; the whsec_... returned by creation/rotation is for receiver signature verification only. Keep all credentials out of tool arguments and prompts.

Webhook notifications avoid continuous task polling. On a polling fallback, stop on terminal status, 401/403/404 or retryable: false; back off on transient failures. See the complete webhook guide for payloads, signing, deduplication and delivery history.

Available Tools

32 tools
cancel_taskCancel async taskA
DestructiveIdempotent

Cancels a queued asynchronous task when cancellation is supported for the selected task. Cancellation currently supports queued Seedance video tasks (seedance-1.5-pro, seedance-2.0, and seedance-2.0-fast) while they are still waiting to run. Tasks that are already processing, completed, failed, expired, or unsupported are not cancelled.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe async task ID returned by `id` / `task_id`, or embedded in `poll_url`

TDQS

A4.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, so the safety profile is covered structurally. The description adds real value beyond that by spelling out the exact task states in which the operation is a no-op rather than a cancellation. It stops short of saying what the caller receives or whether a failed cancel raises an error, which keeps it at 4.

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, zero filler, and the supported scope is front-loaded before the negative cases. Every clause (supported models, waiting-to-run condition, non-cancellable states) 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 one-parameter mutation with no output schema, the description covers the essential decision inputs: which tasks are eligible and which are not. It is slightly incomplete on the outcome of a rejected cancellation (error vs. silent no-op), but annotations already flag the destructive/idempotent nature.

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 a single parameter with 100% schema description coverage, so the schema already explains that `id` comes from `id`/`task_id` or a `poll_url`. The description adds no syntax, format, or value constraints for `id` 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.

Purpose5/5

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

The description opens with a precise verb+resource ("Cancels a queued asynchronous task") and immediately bounds the scope to queued Seedance video tasks, distinguishing it from status/inspection siblings like get_task_status. An agent can tell exactly what this tool does and on what population 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 Guidelines5/5

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

It gives an explicit precondition ("when cancellation is supported for the selected task") plus a positive list of supported models and an explicit negative list of states that cannot be cancelled (processing, completed, failed, expired, unsupported). This is when/when-not guidance with nothing left to inference.

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

compare_modelsCompare TokenLab ModelsA
Read-onlyIdempotent

Compare public TokenLab model details and pricing for several model IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelsYes
include_rawNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate the tool is read-only, idempotent, and non-destructive. The description adds no further behavioral context (e.g., output format, rate limits, or open-world implications). With high annotation coverage, the description's lack of extra detail is acceptable, earning a baseline 3.

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?

The description is a single, efficient sentence with no wasted words. It directly conveys the tool's purpose without extraneous 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?

Given the tool's simplicity, two parameters, and comprehensive annotations, the description covers the essential functionality of comparing model details and pricing. It does not describe the return structure, but the absence of an output schema makes this less critical. Slightly incomplete due to the missing parameter explanation, but overall adequate.

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 compensate. It clarifies that 'models' is a list of model IDs and that the tool compares details and pricing. However, it fails to explain 'include_raw', leaving one of two parameters undocumented. This partial coverage justifies a score of 2.

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 'Compare' and identifies the resource 'public TokenLab model details and pricing' for 'several model IDs'. This clearly distinguishes the tool from siblings such as 'get_model' (single) and 'list_models' (all).

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 for comparing multiple models but does not explicitly state when to use it versus alternatives or provide when-not-to-use guidance. A minimal viable score is appropriate as the context is implied but not articulated.

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

create_3d_modelCreate 3D model generation taskB

Creates a 3D model generation task using Tripo3D. Returns a task ID for polling.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoSeed for repeatable generation where supported by the model.
userNoEnd-user identifier.
imageNoBase64 image for image-to-3D
modelNotripo-h3.1
styleNoStyle hint for compatible 3D model families.
formatNo
promptYes3D model description
qualityNo
image_urlNo
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare the non-read-only, non-idempotent, open-world, non-destructive profile, so the safety picture is covered. The description adds genuinely useful context that it is an asynchronous task returning a pollable task ID, but says nothing about cost, quota, or how the per-request Delivery policy affects execution.

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 core action front-loaded and no filler. Nothing wasteful, though the brevity leaves room for the omitted usage and parameter context, so it is efficient rather than exemplary.

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 10-parameter, 60%-coverage, no-output-schema tool, the description is too thin: it omits how to choose between the prompt, image, and image_url input modes, what the returned task ID is used for beyond 'polling', and any input validation constraints. The async hint is the only operational detail provided.

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?

Ten parameters with only 60% schema description coverage (format, quality, image_url, model default, and delivery policy are undocumented), and the description adds no parameter meaning at all. It neither explains the prompt-vs-image generation paths nor the enum trade-offs, leaving a real coverage gap uncompensated.

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 ('Creates a 3D model generation task') and names the provider Tripo3D, which clearly separates it from image/video/audio siblings. It stops short of explicitly distinguishing it from the other create_* generation tools, but the resource 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?

The async framing ('Returns a task ID for polling') implies an indirect workflow, but the tool never names the follow-up tool (get_task_status) or when to prefer prompt-based vs image-based generation. Usage is only inferable, not stated.

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

create_anthropic_messageCreate message (Anthropic-compatible)A

Creates a model response using Anthropic's native request format. Supports Claude models with vision and streaming. Authentication: Use x-api-key header or Authorization: Bearer header.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel to use (e.g., claude-sonnet-4-6)
toolsNoTool definitions available to the model.
top_kNo
top_pNo
systemNoSystem prompt
messagesYesMessages in the conversation
metadataNoRequest metadata echoed into downstream logs or traces when supported.
thinkingNoThinking configuration for compatible Anthropic-style models.
max_tokensYesMaximum number of tokens to generate
temperatureNo
tool_choiceNoTool choice policy or explicit tool selection.
service_tierNoService tier hint where supported by the model.
stop_sequencesNo
stream_optionsNoStreaming options such as usage chunk inclusion.
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description earns credit by adding auth requirements ('x-api-key' or 'Authorization: Bearer') and capability notes (vision, streaming) that the annotations do not 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?

Three tight sentences with the purpose front-loaded, then capabilities, then auth. No filler, no repetition of the name.

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, yet the description says nothing about return shape, streaming response behavior, or the non-standard X-TokenLab-Delivery-Policy parameter. For a 15-parameter generation tool this leaves real gaps an agent would want covered.

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?

With 15 parameters at 73% schema description coverage, the schema does most of the documentation work. The description adds nothing parameter-specific beyond noting model/vision support, 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?

States a specific verb and resource ('Creates a model response using Anthropic's native request format'), which implicitly separates it from format-specific siblings like create_gemini_content or create_chat_completion. However, it never names an alternative, so the agent must infer the routing rather than read it.

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 Claude model support with vision and streaming, and specifies the auth headers to use, which implies the usage context. But it gives no explicit when-to-use/when-not guidance or comparison to the other create_* completion siblings, 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.

create_chat_completionCreate chat completionA

Create an OpenAI-compatible chat completion. For inline image_url data URLs, declare the byte-accurate image MIME type. The MCP boundary corrects recognized PNG, JPEG, WebP, and GIF payloads declared as application/octet-stream and rejects unrecognized generic binary image payloads before sending a billable request.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of completions to generate
seedNoSeed for deterministic generation
stopNoStop sequences
userNoEnd-user identifier for abuse detection
audioNoAudio output configuration when requesting audio modality.
modelYesID of the model to use (e.g., gpt-5.4, claude-sonnet-4-6)
toolsNoList of tools the model may call
top_pNoNucleus sampling probability
logprobsNoWhether to return log probabilities for output tokens.
messagesYesA list of messages comprising the conversation
functionsNoDeprecated function definitions retained by the official Chat Completions contract.
logit_biasNoPer-token logit bias map.
max_tokensNoMaximum number of tokens to generate
modalitiesNoRequested output modalities such as text or audio.
predictionNoPrediction hints for models that support draft or speculative decoding.
temperatureNoSampling temperature (0-2)
tool_choiceNoControls which function is called
service_tierNoService tier hint where supported by the model.
top_logprobsNoNumber of most likely tokens to return at each position when logprobs is enabled.
function_callNoDeprecated function-call selection retained by the official Chat Completions contract.
stream_optionsNoStreaming options such as usage chunk inclusion.
response_formatNoResponse format specification
presence_penaltyNoPresence penalty (-2 to 2)
reasoning_effortNoReasoning effort hint for compatible model families.
frequency_penaltyNoFrequency penalty (-2 to 2)
parallel_tool_callsNoWhether the model may issue parallel tool calls.
translation_optionsNoLanguage settings for models that translate audio or video through Chat Completions.
max_completion_tokensNoMaximum completion tokens for newer reasoning-enabled model families
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

A3.5/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=false, openWorldHint=true), the description discloses genuine operational behavior: the MCP boundary auto-corrects recognized PNG/JPEG/WebP/GIF payloads mislabeled as application/octet-stream, rejects unrecognized generic binary images, and flags that this happens before a billable request is sent. The billing implication is valuable context the 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 core purpose in the first sentence, then adds the image-payload constraint with no filler. It is appropriately short, though it devotes two of three sentences to a single niche case rather than broader behavior.

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 29-parameter tool with nested objects and no output schema, the description covers only the inline-image validation edge case and omits behavioral context around streaming, tool calling, reasoning effort, and translation options. The 100% schema coverage carries the parameter burden, but the description is thin 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.

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 the 29 parameters and the baseline would be 3. The description adds real semantic value on the messages.content field by requiring an accurate image MIME type for inline image_url data URLs, which the schema does not spell out. It only addresses one corner of a very large parameter surface, so it is not a 5.

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 ("Create an OpenAI-compatible chat completion"), and the word "OpenAI-compatible" implicitly distinguishes it from siblings like create_anthropic_message and create_gemini_content. It stops short of explicitly naming alternatives to route between, so it is clear but not fully sibling-differentiating.

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 gives no guidance on when to choose this tool over create_anthropic_message, create_gemini_content, or create_response, nor any prerequisites or exclusions. The only usage-adjacent content is a validation constraint on image payloads, which does not tell an agent when to pick this call.

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

create_embeddingCreate embeddingsC

Creates an embedding vector representing the input text.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoEnd-user identifier
inputYesInput text(s) or token array(s) to embed.
modelYesID of the model to use
dimensionsNoOutput vector dimensions
encoding_formatNoOutput formatfloat
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the mutation profile is covered structurally. The description adds nothing beyond that: no rate-limit notes, model applicability, batch behavior, or cost/latency context, despite the tool being an externally-hitting (openWorld) generation call.

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?

A single front-loaded sentence with zero redundancy or filler. It is efficient, though arguably under-specified for a 6-parameter tool.

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?

There is no output schema, so the description is the only place to explain the return value — yet it says nothing about the shape of the returned vectors, the effect of dimensions or encoding_format on output, or batching of array inputs. For a generation tool with six parameters and no output schema, this leaves meaningful gaps.

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 every parameter (input, model, dimensions, encoding_format, user, delivery policy) is already documented in the schema. The description adds no syntax, format, or batching detail beyond it, 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?

States a specific verb and resource ("Creates an embedding vector") with the input scope ("representing the input text"), so the core action is unambiguous. It does not, however, distinguish itself from the sibling create_multimodal_embedding, leaving the agent to 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?

No when-to-use guidance, no exclusions, and no mention of the obvious alternative create_multimodal_embedding. The agent gets no criteria for selecting this tool over its sibling.

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

create_gemini_contentGenerate content (Gemini-compatible)A

Generates content using the Gemini GenerateContent request shape. The model details must advertise Gemini requests and the model must be available. ProtoJSON lowerCamelCase and original proto snake_case field names are preserved. Unknown fields are accepted on a best-effort basis; model-specific support is not guaranteed. Authentication: Use ?key= query parameter, x-goog-api-key header, or Authorization: Bearer header.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name (e.g., gemini-2.5-pro)
toolsNoGemini tools. Tool types and combinations are interpreted by the selected service.
contentsYesConversation contents
toolConfigNoGemini tool configuration such as functionCallingConfig.
tool_configNoOriginal proto field-name spelling of toolConfig.
cachedContentNoGemini cached content resource name for compatible models.
cached_contentNoOriginal proto field-name spelling of cachedContent.
safetySettingsNo
safety_settingsNoOriginal proto field-name spelling of safetySettings.
generationConfigNo
generation_configNoOriginal proto field-name spelling of generationConfig.
systemInstructionNo
system_instructionNoOriginal proto field-name spelling of systemInstruction.
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare non-readonly, open-world, non-idempotent behavior, and the description adds real value beyond that: the dual naming convention, best-effort handling of unknown fields, and three concrete authentication mechanisms. It does not mention rate limits, quotas, or error behavior, so it falls short of a 5.

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 front-loaded sentences, each carrying distinct information (contract, availability precondition, naming/unknown-field behavior, auth). The bolded Authentication block is well-placed; no filler, though the proto-naming sentence could be tightened.

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 14-parameter, deeply nested tool with no output schema, the description covers the contract, prerequisites, naming duality, and auth. It omits what the response looks like and any token/candidate limits, but given the annotations and rich schema this is close to complete.

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 ~79% schema coverage the schema carries most of the load, but the description explains the otherwise-puzzling duplication of parameters by stating that both lowerCamelCase and proto snake_case field names are preserved, which directly disambiguates the paired fields. That is meaningful semantics 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 ('Generates content') and pins the exact request contract ('Gemini GenerateContent request shape'), which cleanly separates it from the many sibling generators (create_anthropic_message, create_chat_completion, create_response). An agent can route to it 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?

It gives a prerequisite ('the model details must advertise Gemini requests and the model must be available') but never states when to pick this over create_chat_completion or create_anthropic_message. Usage is implied by the Gemini-specific framing rather than spelled out.

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

create_imageCreate imageC

Creates an image given a prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of images to generate
seedNoSeed for deterministic-compatible image models.
sizeNoImage size. Defaults are model-specific. For gpt-image-2, omit this field or use auto for automatic…
userNoEnd-user identifier
asyncNoReturn a task before the final image is ready when the selected model supports public async executi…
modelYesModel to use. Send this explicitly; query GET /v1/models?recommended_for=image for current recommen…
styleNoOptional model-specific style selector. Only send when the selected model documents support for thi…
promptYesImage description
qualityNoImage quality. Defaults and accepted values are model-specific. For gpt-image-2, omit this field or…
mask_urlNoOptional mask URL for compatible image operations.
image_urlNoSingle reference image URL for compatible image-to-image models.
operationNoPublic image operation family. Reference-image models use image-to-image with image_url, image_urls…
backgroundNoBackground handling for compatible image flows. For gpt-image-2 generation and edits, accepted valu…
image_urlsNoReference image URLs for compatible image-to-image models.
moderationNoModeration strictness for compatible image models such as gpt-image-2
resolutionNoResolution selector for compatible image model families.
compressionNoAlias for output_compression when supported by the selected model
aspect_ratioNoAspect-ratio selector for compatible image model families.
expand_promptNoAsk compatible models to expand or enhance the prompt.
output_formatNoOutput image format for compatible image models such as gpt-image-2
prompt_extendNoFor z-image-turbo, enable prompt expansion. Defaults to false. Enabling it uses the model's prompt-…
negative_promptNoContent to avoid for compatible image models.
response_formatNoResponse formaturl
output_compressionNoOutput compression level from 0 to 100 for compressed formats
reference_image_urlsNoAlias used by compatible reference-image model families.
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true), so the description's only job is added context, and it adds none. It omits model-dependent behavior, that output is non-deterministic per call, and that the 26 parameters are largely model-specific and may be ignored or rejected depending on the selected model.

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?

It is a single front-loaded sentence with zero filler, which is efficient. It is arguably under-sized for a 26-parameter tool, but that gap is captured under contextual completeness rather than waste.

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 tool with 26 parameters, three operation families (text-to-image, image-to-image, image-edit), seven enums, and model-specific options, one sentence is far from sufficient. It omits required-vs-optional expectations beyond model/prompt, the need to consult the recommended-models endpoint, and how this differs from sibling generation/editing tools; with no output schema the description should also hint at the url/b64_json response shape.

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 every parameter including model, prompt, operation, and the model-specific fields is already documented in the schema; the baseline of 3 applies. The description adds no additional meaning about how model selection gates the other 24 parameters.

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 ('Creates an image') plus the required input ('given a prompt'), which is clear enough to know the general operation. However, it provides no differentiation from close siblings such as edit_image, edit_image_file, and create_image_file, leaving the agent to infer routing.

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 exclusions, and no mention of alternatives. Given the crowded sibling set (edit_image, create_image_file, edit_image_file), the agent gets no help deciding between generation and editing or between this and file-based variants.

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

create_image_fileCreate imageD

Creates an image given a prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
seedNo
sizeNo
userNo
asyncNo
imageNoLocal reference image upload for compatible image-to-image models. Pass local file path.
modelYesModel to use. Send this explicitly.
styleNo
promptYesImage description
qualityNo
mask_urlNo
operationNo
backgroundNo
image_urlsNoComma-separated reference image URLs.
moderationNo
resolutionNo
compressionNo
aspect_ratioNo
expand_promptNo
output_formatNo
prompt_extendNoFor z-image-turbo, enable prompt expansion. Defaults to false. Enabling it uses the model's prompt-…
negative_promptNo
response_formatNo
output_compressionNo
reference_image_urlsNoComma-separated reference image URLs for compatible model families.
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

D1.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: no mention of cost/billing for generations, latency, async behavior (the 'async' param hints at long-running jobs), rate limits, or moderation rejection handling. With annotations present the bar is lower, but zero added context merits a 2.

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 single sentence is front-loaded and free of padding, which is structurally clean. However, the brevity here reflects under-specification rather than disciplined conciseness, so it earns only a middling score.

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

Completeness1/5

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

For a 26-parameter generative tool spanning three distinct operations, with no output schema and no annotation detail about returns, one sentence is wholly inadequate. Nothing tells the agent how the returned image is delivered (url vs b64_json), how async jobs are polled via get_task_status, or how reference images are supplied.

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?

26 parameters with only 27% schema description coverage, and the description explains none of them. Critical unlabeled parameters include operation (text-to-image / image-to-image / image-edit), n, seed, size, aspect_ratio, resolution, quality, style, mask_url, background, response_format, and async. An agent cannot infer correct usage from a single sentence when three-quarters of the parameters carry no documentation anywhere.

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

Purpose2/5

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

The description 'Creates an image given a prompt' is essentially the title restated (title: 'Create image') with the trivial addition of the prompt input. It never explains what the '_file' variant is or how it differs from the sibling tools create_image, edit_image, or edit_image_file, which is the one thing an agent most needs. A near-tautology of the name.

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 mention of prerequisites, and no routing to alternatives. With siblings named create_image and edit_image_file present, an agent has no basis from the description for choosing this tool. Nothing is misleading, but nothing is offered either.

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

create_multimodal_embeddingCreate multimodal embeddingsB

Creates embeddings for multimodal input items. Text input is generally available; image input may require feature enablement.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes
modelYesModel to use for multimodal embeddings
dimensionsNoOptional embedding dimensionality when supported by the selected model
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds genuinely useful context beyond them: text input is generally available while image input may require feature enablement, a real prerequisite. It says nothing about cost, rate limits, or return format, so with annotations covering safety a 3 fits.

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 sentences, zero filler, with the core action stated first and the availability caveat second. Nothing redundant, though it is very terse given the tool's complexity.

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?

There is no output schema, so the description should ideally describe what is returned (embedding vectors and their shape), which it does not. The feature-enablement note is a helpful prerequisite, but the agent still lacks return-value context for an embedding tool.

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 75% across 4 parameters, and the description adds no syntax or format detail beyond what the schema documents. Its only parameter-adjacent contribution is the feature-enablement caveat for image inputs, which the schema does not convey. Baseline 3 is appropriate given the schema does most of the 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 names a specific verb (creates), resource (embeddings), and scope (multimodal input items), which distinguishes it from the sibling create_embedding by implying combined text/image input. It stops short of explicitly naming that sibling, so the differentiation is implied rather than stated.

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 only implied: the multimodal framing suggests using this when image input is involved, and it notes image input may require feature enablement. There is no explicit when-to-use versus create_embedding or rerank_documents, and no stated alternative selection rule.

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

create_musicCreate music generation taskC

Creates a music generation task using Suno. Returns a task ID for polling.

ParametersJSON Schema
NameRequiredDescriptionDefault
mvNoOfficial Suno model version. Required when creating music (action omitted or MUSIC); omit for lyric…
tagsNo
modelNosuno_music
titleNo
actionNo
promptNoMusic description. Required for music, lyrics, upload-cover, and upload-extend requests; omit for a…
audio_urlNoPublicly reachable reference or uploaded audio URL. Defaults to upload-cover when audio_operation i…
continue_atNoTimestamp in seconds for continuation flows. Required when audio_operation is upload-extend.
negative_tagsNoStyles to avoid. Required when audio_operation is add-instrumental.
audio_operationNoUploaded-audio mode. upload-extend requires continue_at; add-instrumental requires audio_url, title…
continue_clip_idNoClip ID to continue when extending an existing generation.
make_instrumentalNoGenerate instrumental output without vocals.
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.9/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 mutation profile is covered. The description adds genuinely useful async context ('Returns a task ID for polling'), but says nothing about cost/credit consumption, latency, or what happens with the delivery-policy header — modest added value over 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?

Two tight sentences with the core purpose and the async return front-loaded; nothing is padded or repetitive. It is arguably under-sized for a 13-parameter multi-mode tool, but there is no wasted language.

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?

With no output schema and 13 parameters supporting at least four distinct flows (music, lyrics, cover/extend, instrumental), the description leaves the agent without the mode selection logic, the conditional requirements, or the polling follow-up step. For this complexity level it is materially incomplete.

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 a middling 69% across 13 parameters, and the description contributes zero parameter meaning — no explanation of mv, tags, prompt, title, or the conditional requirements among action/audio_operation/continue_at. With conditional-required params present and coverage below 80%, the description should be compensating 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?

States a specific verb and resource ('Creates a music generation task using Suno') and names the async return ('task ID for polling'), which cleanly separates it from create_speech, create_video and create_image. However, the tool actually spans lyric generation and three uploaded-audio operations per the schema, and the description's narrower 'music generation' framing understates that scope.

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, no mention of the MUSIC vs LYRICS action switch, no explanation of when the audio_operation modes (upload-cover/extend/add-instrumental) apply, and no pointer to the sibling poll tool (get_task_status) despite promising a task ID. The agent gets no routing help at all.

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

create_responseCreate response (OpenAI Responses API)A

Creates a response using the OpenAI Responses API request shape. The model details must advertise the Responses request format and the model must be available. Unknown fields are accepted on a best-effort basis; model-specific support is not guaranteed.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoText formatting options.
inputNoInput content as a string or structured item array.
modelYesModel to use
storeNoWhether the response is stored for later retrieval.
toolsNoTools available to the model. Tool types and combinations are validated by the selected service.
top_pNoNucleus sampling probability.
promptNoReference to a reusable prompt template and variables.
includeNoAdditional response sections to include when supported.
metadataNoRequest metadata.
reasoningNoReasoning configuration.
backgroundNoWhether to run the response asynchronously.
truncationNoTruncation strategy for long conversations.
temperatureNo
tool_choiceNoTool choice policy or explicit tool selection.
instructionsNoSystem instructions
service_tierNoService tier hint where supported by the model.
stream_optionsNoResponses streaming options.
max_output_tokensNoMaximum output tokens
parallel_tool_callsNoWhether the model may issue parallel tool calls.
previous_response_idNoID of a previous response to continue.
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare non-readonly, open-world, non-idempotent, non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context the annotations lack: model availability requirements, best-effort handling of unknown fields, and that model-specific support is not guaranteed. It omits return-shape/async behavior, but the additions are substantive.

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 action, then preconditions, then caveats. No filler, though the final two sentences could be tightened into one without losing meaning.

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 21-parameter tool with deep nested objects (text, prompt, tools, reasoning) and no output schema, the description covers preconditions and unknown-field handling but says nothing about the returned response object or how previous_response_id/background/streaming interact. Adequate but with clear gaps 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 coverage is 95% across 21 parameters, so the schema does the heavy lifting and a 3 baseline is appropriate. The description adds only the generic 'unknown fields accepted on a best-effort basis' note, which arguably conflicts with the schema's additionalProperties:false rather than clarifying any specific parameter.

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 (Creates) and resource (a response) and disambiguates from siblings like create_chat_completion and create_anthropic_message by naming the 'OpenAI Responses API request shape' it accepts. The only residual ambiguity is that 'response' alone is vague without the API qualifier.

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?

Gives a real precondition — the model must advertise the Responses request format and be available — which is actionable selection guidance. However, it never says when to prefer this over the sibling create_chat_completion / create_anthropic_message / create_gemini_content tools, leaving the choice to inference.

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

create_speechCreate speechC

Generates audio from the input text (Text-to-Speech).

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesText to synthesize.
modelNoTTS model. Query GET /v1/models?recommended_for=tts for the current shortlist.tts-1
speedNoSpeech speed for model families that support it.
voiceNoVoice selector for OpenAI-compatible, Gemini, xAI, and MiniMax-compatible speech models. Some MiniM…
promptNoOptional speaking style prompt for Gemini TTS models.
voice_idNoVoice selector for MiniMax-compatible speech models.
temperatureNoSampling temperature for Gemini-compatible TTS models.
instructionsNoOptional style or delivery instructions for OpenAI-compatible TTS models that support them.
language_codeNoOptional language code for Gemini, xAI, and compatible TTS models.
stream_formatNoTokenLab delivery format. stream_format=sse is not supported for tts-1 or tts-1-hd.audio
response_formatNoAudio format. Common values include mp3, opus, aac, flac, wav, and pcm. Supported values vary by mo…
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true), so the safety bar is low. But the description adds nothing behavioral: it does not mention that output is non-deterministic across calls, that it consumes paid TTS quota, or how streaming/large inputs behave — notable gaps for a generation tool whose annotations flag openWorld and non-idempotency.

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?

One short, front-loaded sentence with zero filler — the purpose is stated immediately. It is arguably under-specified rather than padded, so it scores well on conciseness but is not an exemplar of a complete-yet-tight definition.

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-parameter tool spanning multiple TTS model families with mutually exclusive voice/voice_id/prompt/instructions fields and no output schema, a single generic sentence is far too thin. It gives the agent no help choosing a model family or reconciling the overlapping voice-selection parameters.

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 the schema already documents all 12 parameters (voice, model, speed, stream_format, response_format, etc.). The description adds no syntax, defaults, or format guidance beyond the schema, which is the expected baseline 3 when structured fields carry the load.

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 ('Generates audio from the input text') and even parenthesizes the canonical operation name (Text-to-Speech), so an agent knows exactly what this produces. It does not, however, distinguish itself from audio-producing siblings like create_music, translate_audio, or transcribe_audio, so the differentiation is left to the reader.

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 guidance on when to use this versus alternatives (create_music for music, translate_audio for speech translation), no prerequisites, and no mention of model/voice selection workflow despite model being a core choice. The agent must infer all of this from the name alone.

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

create_videoCreate video generation taskA

Creates an asynchronous video generation task. The response returns a canonical task ID and usually a preferred poll_url; clients should poll poll_url first, or use /v1/tasks/{id} as the fixed status endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
bgmNoOptional audio control. Accepted only when declared by the selected model and operation; availabili…
fpsNoFrames per second
seedNoSeed for reproducibility on compatible models. Compatible Seedance models use -1 for a random seed …
sizeNoModel-specific size tier for compatible video models.
userNoEnd-user identifier
audioNoAudio-output selector for operations that declare it. Omission follows the model default; `false` r…
draftNoSeedance 1.5 Pro draft workflow flag. Only supported by Seedance models supporting drafts; draft=tr…
imageNoInline image as a data URL (for example, data:image/png;base64,...). Prefer image_url for broader p…
modelNoModel to use (e.g., veo3.1, kling-v1)
ratioNoCompatibility alias for aspect_ratio. If both ratio and aspect_ratio are provided, they must match.
framesNoOptional frame count for compatible video models. Seedance 1.5 Pro, Seedance 2.0, and Seedance 2.5 …
promptNoVideo description
secondsNoAlias of duration used by compatible request shapes. Seedance models also accept -1 to let the mode…
task_idNoTask identifier used by some continuation, extension, or derivative flows.
durationNoVideo duration in seconds. Seedance models also accept -1 to let the model choose within its suppor…
priorityNoOptional task priority for compatible video models. Do not combine priority with service_tier=flex.
voice_idNoOptional audio control. Accepted only when declared by the selected model and operation; availabili…
audio_urlNoPublic audio URL for an audio-driven or reference-audio operation supported by the selected model.
cfg_scaleNoPrompt adherence strength (0-20) for models that expose CFG-style control.
end_imageNoLast frame image input for start-end-to-video flows. Seedance accepts a public image reference or a…
extend_atNoModel-specific extension start offset used by some video-extension flows.
image_urlNoPublicly reachable image URL for image-to-video generation, or asset://asset-YYYYMMDDHHMMSS-xxxxx f…
operationNoRequested video operation. If omitted, TokenLab infers the operation from the provided inputs. Expl…
video_urlNoPublicly reachable video URL for video-to-video style flows and motion-control models.
watermarkNoOptional watermark toggle for models that expose it. Seedance defaults to false when omitted.
audio_typeNoOptional audio control. Accepted only when declared by the selected model and operation; availabili…
audio_urlsNoCompatibility array for audio-conditioned flows when multiple audio references are supported by the…
image_urlsNoImage URL array for compatible image-conditioned video flows. Seedance 2.5 accepts up to 30 aggrega…
resolutionNoVideo resolution. Seedance defaults to 720p when omitted; available values are model-dependent.
video_urlsNoCompatibility array for video-conditioned flows when multiple input videos are supported by the sel…
effect_typeNoModel-specific effect selector for specialized editing flows.
outputAudioNoCompatibility alias for output_audio. If both are provided, they must match.
start_imageNoFirst frame image input for start-end-to-video flows. Seedance accepts a public image reference or …
aspect_ratioNoCanonical video aspect ratio. Seedance defaults to adaptive when omitted. The ratio alias is accept…
camera_fixedNoOptional fixed-camera selector for compatible video models. Seedance 2.0 and Seedance 2.5 do not su…
extend_timesNoModel-specific extension multiplier or repeat count used by some video-extension flows.
output_audioNoAudio-output selector for operations that declare it. Omission follows the model default; `false` r…
service_tierNoOptional service tier for compatible video models. service_tier=default is accepted as a compatibil…
draft_task_idNoSeedance 1.5 Pro draft promotion task ID. Provide this instead of draft=true to create the final vi…
output_formatNoVideo container format for compatible models. Seedance 2.5 supports mp4 and mov; omit this field fo…
generate_audioNoCompatibility alias for output_audio. If more than one audio toggle is provided, all values must ma…
kling_elementsNoKling 3.0 element references for kling-3.0-video image-conditioned requests. Define 1-3 elements an…
motion_strengthNoMotion intensity (0-1) for models that expose it.
negative_promptNoWhat to avoid in the video
reference_imagesNoCanonical public reference-image field for reference-to-video conditioning. Seedance 2.5 accepts up…
material_asset_idNoTokenLab Seedance material asset ID returned by /v1/videos/assets, by automatic image preparation, …
return_last_frameNoReturn the last generated frame when the selected model supports it. Seedance defaults to false whe…
safety_identifierNoOptional safety/user trace identifier for compatible video models. If omitted for Seedance, TokenLa…
material_asset_idsNoTokenLab Seedance material asset IDs returned by /v1/videos/assets or by automatic image preparatio…
reference_image_typeNoOptional reference image role for models that distinguish between asset and style references. The c…
execution_expires_afterNoOptional execution expiry window in seconds for compatible video models. Seedance defaults to 17280…
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare write/non-idempotent/open-world behavior. The description adds meaningful context beyond them: the task is asynchronous, returns a canonical task ID, usually returns a poll_url, and offers /v1/tasks/{id} as a fallback status endpoint. It does not cover failure, timeout, or cancellation behavior, but it adds useful lifecycle detail.

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, front-loaded with the core purpose, followed by the response/polling behavior. No redundant or filler content.

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, the description usefully explains the return contract: task ID and usually poll_url. With 100% schema coverage, missing parameter explanations are not a gap. It could mention that inputs are highly model-dependent, but the schema carries that burden.

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 all 52 parameters are documented in the schema itself. The description adds no parameter-level meaning or syntax beyond what the schema provides, making the baseline 3 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 and resource: 'Creates an asynchronous video generation task.' The video-generation resource distinguishes it from siblings like create_image, create_music, and create_3d_model. An agent can identify the tool's purpose 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 Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as create_image or edit_image. The only conditional guidance concerns post-creation polling, which is about handling the returned task rather than tool selection or prerequisites.

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

delete_fileDelete fileB
DestructiveIdempotent

Deletes a batch file or a bound image/reference file. When the request includes anthropic-beta: files-api-2025-04-14, the route uses Anthropic Files API mode for the bound workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesFile ID returned by the Files API.
anthropic-betaNoInclude files-api-2025-04-14 to use Anthropic Files API mode.

TDQS

B3.2/5.0
Behavior3/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 safety profile is covered. The description adds useful context about which file classes can be deleted and the Anthropic Files API routing, but says nothing about permanence, error conditions, or side effects beyond what annotations imply.

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 sentences with the action front-loaded and no filler. The routing caveat is compact and earns its place, though the second sentence could be slightly tighter.

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 destructive tool whose annotations already carry the safety profile and with no output schema expected, the description adequately covers the deletion targets and the mode-dependent behavior. Nothing critical to correct invocation 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%, so both parameters (file_id and anthropic-beta) are already documented in the schema. The description explains the behavioral effect of anthropic-beta, which adds marginal value, but the baseline 3 applies when the schema does the heavy lifting.

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 (Deletes) and resource (batch file or bound image/reference file), clearly distinguishing the target from adjacent siblings like retrieve_file or upload_file. It is clear what the tool does, though it doesn't explicitly contrast itself with the other file-lifecycle tools.

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 guidance on when to choose this tool over siblings such as retrieve_file or edit_image_file, nor any stated prerequisites or exclusions. The only conditional detail is the anthropic-beta routing behavior, which is a mode switch rather than usage guidance.

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

edit_imageEdit imageB

Edits an image using multipart image uploads, JSON image URLs, or the official JSON images array for supported GPT Image models.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
maskNoOptional JSON mask reference for image edits. Provide exactly one of image_url or file_id. Multipar…
sizeNo
userNo
asyncNoReturn a task before the edited image is ready for models that support public async execution.
modelYesModel to use for image edits. Send this explicitly.
imagesNoOfficial JSON image references for image edits. Provide exactly one of image_url or file_id for eac…
promptYes
qualityNo
image_urlNoSingle source image URL. Kept for TokenLab compatibility; use images for the official JSON shape.
backgroundNo
image_urlsNoMultiple source image URLs. GPT Image edits accept up to 16 source images; xAI Grok Imagine edit mo…
moderationNo
resolutionNo
compressionNo
aspect_ratioNo
output_formatNo
response_formatNo
output_compressionNo
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the mutation and external-call profile is covered structurally. The description adds the supported input modes (multipart upload, JSON URLs, images array) and a model restriction, but says nothing about async behavior, delivery policy, or what the edit returns.

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?

A single front-loaded sentence with no filler, and the input-mode enumeration is useful. It is efficient, though for a 20-parameter tool it is arguably thin rather than bloated.

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 complex 20-parameter, nested-schema, no-output-schema mutation tool, one sentence is not enough. The description does not cover the image input precedence (images vs image_urls vs image_url), the mask parameter, or the async/model-specific constraints.

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 35% across 20 parameters, so the schema does not carry the load. The description partially compensates by naming the three image-input shapes, which maps to image_url, image_urls, images and mask, but leaves the other parameters (size, quality, response_format, delivery policy, etc.) unexplained.

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 ('Edits an image') and names the three supported input modes, which is more than a tautology. However, it never distinguishes this tool from close siblings like edit_image_file or create_image, leaving the agent to guess which entry point applies.

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 alternative tool is named. The only implied constraint is 'for supported GPT Image models,' which narrows the model set but does not tell the agent when to pick this over edit_image_file or create_image.

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

edit_image_fileEdit imageC

Edits an image using multipart image uploads, JSON image URLs, or the official JSON images array for supported GPT Image models.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
maskNoPass local file path.
sizeNo
userNo
asyncNo
imageNoSource image file(s). Repeat image for multiple source images. GPT Image edits accept up to 16 imag…
modelYesModel to use for image edits. Send this explicitly, for example gpt-image-2.
promptYes
image[]NoAlternative repeated multipart field name for multiple source images. The same model-specific limit…
qualityNo
backgroundNo
moderationNo
resolutionNo
compressionNo
aspect_ratioNo
output_formatNo
response_formatNo
output_compressionNo
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), lowering the bar. The description adds one genuine behavioral fact — that edits are only supported for certain GPT Image models — but says nothing about the async flag, cost implications, rate limits, or what happens to the source file, leaving significant behavior unexplained.

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?

A single front-loaded sentence with no filler; the input-mode clause is the most useful information and leads. It is arguably too terse for a 19-parameter tool, but nothing is wasted.

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 19-parameter, open-world mutation tool with no output schema and only 26% schema coverage, the description is far too thin. An agent cannot determine what most parameters do, how async mode behaves, or what the delivery-policy header affects without opening the schema.

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 26% across 19 parameters, so the description is expected to compensate. It clarifies the three source-image input forms (multipart 'image', repeated 'image[]', JSON array), which is useful, but the other ~15 parameters (size, quality, background, moderation, output_format, async, delivery policy) get no explanation in either place.

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 ('Edits an image') and adds the distinguishing detail that it accepts multipart uploads versus JSON image URLs, which hints at how it differs from the plain edit_image sibling. It stops short of naming the sibling or stating the selection rule explicitly.

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 mention of input transport modes implies a file-upload context, but there is no explicit when-to-use guidance, no statement of when to prefer edit_image or create_image_file instead, and no prerequisites or exclusions. The agent must infer routing from the tool name alone.

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

evaluate_decisionsEvaluate decision questionsA

Evaluate typed Noul probability, Choice, and Score questions against shared state using the native System One endpoint. Discover a decision model with list_models/get_model first. Returns synchronous structured decisions, not chat text. A decision does not authorize an external action.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
stateYes
questionsYes
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

A3.6/5.0
Behavior3/5

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

Adds genuine context beyond annotations: it states the response is synchronous structured decisions and that a decision does not authorize an external action. However it leaves the non-obvious readOnlyHint=false and idempotentHint=false flags unexplained (side effects, state mutation), so the behavioral profile is only partially clarified.

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, front-loaded sentences that each carry a distinct point (purpose, prerequisite, return shape, safety note). Efficient with no obvious 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?

Covers the return shape well in absence of an output schema and states the discovery prerequisite, but for a 4-parameter nested-object tool with 25% schema coverage it leaves the input formats under-specified.

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 25% and the schema has nested objects, so the description must compensate. It gives semantic grounding ('questions' are typed probability/Choice/Score, 'state' is shared, 'model' comes from discovery), but does not explain formats for model or state, leaving gaps.

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 ('Evaluate') and resource ('typed Noul probability, Choice, and Score questions against shared state'), which is enough to distinguish it from the surrounding model/pricing/chat siblings. The jargon ('Noul', 'System One endpoint') blurs it slightly but the core purpose is clear.

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 prescribes a prerequisite flow: 'Discover a decision model with list_models/get_model first', naming the alternative tools. It also contrasts with chat tools ('not chat text'), though it never states when-not to use it.

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

get_api_overviewGet TokenLab API OverviewA
Read-onlyIdempotent

Fetch TokenLab's agent-readable API overview.

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 declare readOnlyHint, openWorldHint, idempotentHint true, and destructiveHint false, covering safety and idempotency. The description adds 'agent-readable API overview' but does not elaborate on behavior beyond that. It does not contradict 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?

The description is a single sentence with no extraneous words. It is front-loaded and efficient.

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 has no parameters and annotations cover safety, the description is minimal. However, it does not describe the return value or what the 'API overview' contains. For an agent, this may be insufficient for understanding the output.

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?

There are zero parameters, and schema description coverage is 100% by default. The description does not add parameter details, but it is not needed. Baseline 4 for no parameters.

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 'Fetch TokenLab's agent-readable API overview' clearly uses a specific verb ('Fetch') and resource ('TokenLab API overview'). The title reinforces this. No sibling tool has a similar name or purpose, so it is well-distinguished.

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 guidance is provided on when to use this tool versus alternatives or any prerequisites. While the tool is simple, there is no context about its typical usage (e.g., before making other API calls).

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

get_modelGet modelA
Read-onlyIdempotent

Retrieves current model details, including supported operations, request parameters, request endpoints, selector limits, and pricing when available. Non-chat integrations should read these current model-specific request details before creating a request.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe model ID

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, openWorld), so the description's extra burden is low. It contributes by disclosing what the response contains and the caveat that pricing is returned 'when available', which is genuinely useful given there is no output 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?

Two tight sentences: the first front-loads what is returned, the second gives the usage context. No filler, no redundancy with 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 the necessary work of enumerating the return fields, and annotations cover safety. It only lacks guidance on error cases (e.g., unknown model ID) or how it relates to the pricing/model-listing siblings.

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 parameter ('model': 'The model ID') is already documented in the schema. The description adds no format, lookup, or ID-syntax detail beyond that, 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 names a specific verb and resource ('Retrieves current model details') and enumerates the payload contents (supported operations, request parameters, endpoints, selector limits, pricing). It doesn't explicitly distinguish itself from near-siblings like list_models or get_model_pricing, but the detail level is well above tautology.

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?

It gives clear contextual guidance: 'Non-chat integrations should read these current model-specific request details before creating a request,' establishing the precondition for calling it. It stops short of naming alternatives or exclusions (e.g., when to prefer get_model_pricing or list_models), so it's a 4, not a 5.

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

get_model_pricingGet model pricingA
Read-onlyIdempotent

Retrieves pricing-only detail for one model. Use this endpoint for price explanation, not for non-chat request construction.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesThe model ID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only the 'pricing-only' scope restriction, with no detail on return shape or pricing units/tiers.

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, purpose first, then usage constraint. No wasted words, though the second sentence's phrasing is vague rather than crisp.

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?

A simple single-parameter read tool with rich annotations and no output schema. The description covers purpose and scope adequately; only pricing-specific return expectations are left implicit.

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?

Only one parameter, and the schema already documents it at 100% coverage ('The model ID'). The description adds nothing about model ID format or lookup behavior, 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?

States a specific verb (retrieves) and resource (model pricing detail) with scope qualifier 'pricing-only'. It separates itself from sibling get_pricing partially, though the distinction between the two pricing tools is not fully drawn.

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?

Gives one positive condition (price explanation) and one exclusion (not for non-chat request construction), but the exclusion is phrased in cryptic jargon and no explicit alternative sibling is named. Usage is implied rather than routed.

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

get_pricingList model pricingB
Read-onlyIdempotent

Returns the public pricing surface for active models, with optional provider and tag filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter by model tag.
providerNoFilter by provider ID.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds one useful behavioral fact beyond that: only 'active' models are included, which tells the agent the result set is scoped. It still says nothing about pagination, result size, or 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?

A single front-loaded sentence with no filler. The core behavior (returns pricing for active models) leads, and the filtering caveat follows immediately.

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?

There is no output schema, so the description should carry more of the return-value burden; 'public pricing surface' is evocative but vague about what fields come back or how many records. Combined with the missing differentiation from get_model_pricing, the definition is adequate but leaves real gaps for a read-only listing tool.

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 optional parameters (tag, provider) are fully documented in the schema. The description merely restates them as 'optional provider and tag filters' without adding format, matching rules, or combinability semantics. Baseline 3 applies when the schema does the heavy lifting.

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 clear verb and resource: it returns the public pricing surface for active models. However, it does nothing to differentiate itself from the sibling tool get_model_pricing (nor from list_models/get_model), leaving the agent to guess which pricing tool to call.

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 is given. There is no mention of when this should be preferred over the near-identical sibling get_model_pricing, no prerequisites, and no exclusions. The agent must infer usage 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.

get_task_statusGet async task statusA
Read-onlyIdempotent

Retrieves the status and result of an asynchronous generation task. Prefer the poll_url returned by the create response; /v1/tasks/{id} is the canonical fixed status endpoint for video, music, and 3D jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe async task ID returned by `id` / `task_id`, or embedded in `poll_url`

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, destructiveHint=false, and openWorldHint, so the safety profile is covered structurally. The description usefully adds that the poll_url is preferred and which job types the fixed endpoint covers, but says nothing about what a returned status/result contains or how polling should be paced.

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, no filler, with the core purpose front-loaded before the endpoint guidance. Every clause carries information the agent can act on.

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 async status-polling tool with no output schema, the description should say something about the shape of the returned status/result (e.g., pending/succeeded/failed and where the result lives). That gap is partially offset by the endpoint routing detail and the annotation coverage.

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 parameter's provenance (id/task_id or embedded in poll_url) is already documented in the schema description. The tool description adds no syntax, format, or validation detail beyond that, 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?

States a specific verb and resource ('Retrieves the status and result of an asynchronous generation task'), so the agent knows exactly what it returns. It also clarifies the scope (video, music, 3D jobs) and the canonical endpoint, though it never contrasts itself with the adjacent sibling cancel_task.

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 concrete routing guidance: prefer the poll_url from the create response, with /v1/tasks/{id} as the canonical fixed endpoint. That is a real when-to-use-which instruction, but it stops short of naming alternatives (e.g., cancel_task) or stating when not to poll.

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

list_filesList filesD
Read-onlyIdempotent

List files

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
purposeNoOptional file purpose filter. batch and batch_output cover Batch API files; user_data and vision co…
after_idNoAnthropic Files cursor. Return files after this public file id. Requires the Anthropic Files beta h…
scope_idNoReserved Anthropic Files scope cursor. TokenLab currently returns an explicit unsupported error rat…
before_idNoAnthropic Files cursor. Return files before this public file id. Requires the Anthropic Files beta …
anthropic-betaNoInclude files-api-2025-04-14 to use Anthropic Files API mode.

TDQS

D1.5/5.0
Behavior1/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds zero behavioral context — no mention of pagination/cursor semantics, the beta header requirement, or the fact that scope_id currently returns an unsupported error. It contributes nothing beyond 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.

Conciseness2/5

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

Two words is not conciseness but under-specification; there is no front-loaded information because there is no information beyond the title restated.

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

Completeness1/5

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

For a tool with 7 parameters, cursor-based pagination, a beta-mode header, and a deliberately unsupported scoped cursor, the description is completely inadequate. An agent cannot call this correctly from the description alone.

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 71%, so several parameters (after, limit) are undocumented even in the schema, and the description supplies no parameter meaning at all. It does not compensate for the coverage gap on a 7-parameter tool.

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

Purpose2/5

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

Tautological: description restates name/title.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus the many file-related siblings, no mention of the Anthropic Files beta mode requirement, and no exclusions or prerequisites stated anywhere.

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

list_modelsList modelsA
Read-onlyIdempotent

Lists the currently available models. Use view=compact for model selection and view=full for the existing OpenAI-compatible discovery shape. Native API calls default to full; integrations may choose compact as their default. Non-chat recommendations are available through recommended_for.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter by a public capability tag.
viewNoCompact model-selection output is the MCP default. Set view to full only when the complete OpenAI-c…compact
categoryNoFilter by model category.
providerNoFilter by public model provider, for example openai, anthropic, google, or minimax.
recommended_forNoSort supported non-chat models for a task category and include recommendation evidence.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds default-behavior context (native API calls default to full, integrations may default to compact) that isn't in the annotations, but says nothing about result volume, pagination, or how the two view shapes differ structurally.

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 compact sentences, with the core purpose front-loaded and the parameter guidance following. No filler, though the default-behavior sentence is slightly tangential to the primary listing action.

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 5-parameter list tool with no output schema, the description covers view and recommended_for but is silent on the tag, category, and provider filters and on what the returned list contains. The schema carries those filters, so an agent can still call it, but the description is not fully self-sufficient.

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 goes further by explaining the intent behind view=compact (model selection) versus view=full (OpenAI-compatible discovery shape) and by surfacing recommended_for for non-chat recommendations. It adds real semantic value on top of the schema, though it says nothing about tag/category/provider filtering.

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 opens with a specific verb+resource ("Lists the currently available models"), which is unambiguous. It does not, however, differentiate itself from sibling tools like get_model, compare_models, or get_model_pricing, so an agent must infer the boundary from names alone.

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 useful conditional guidance for one parameter ("Use view=compact for model selection and view=full for the OpenAI-compatible discovery shape"), which implies when each mode applies. But it never states when to choose this tool over get_model or compare_models, so overall routing guidance is only partial.

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

rerank_documentsRerank documentsC

Reranks documents by relevance to a query using semantic similarity.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesReranker model to use
queryYesQuery to rank against
top_nNoNumber of results to return
documentsYesDocuments to rerank
return_documentsNo
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false and idempotentHint=false but give no real safety detail, so the description carries most of the burden. It adds only 'semantic similarity' as mechanism and says nothing about ordering guarantees, what the response contains, or why a purely computational rerank is flagged non-read-only.

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?

A single efficient sentence with the core action front-loaded and no filler. It is well-sized, though it omits anything beyond the bare action.

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?

With 6 parameters, no output schema, and no return-value documentation, the description is too thin. An agent cannot tell what the reranked output looks like (ranked list, scores, whether documents are echoed) or how top_n/return_documents interact.

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 83%, so the schema already documents model, query, top_n, and documents. The description adds no per-parameter detail (e.g. default top_n behavior, what return_documents does) beyond what the schema provides, 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?

States a specific verb ('reranks'), resource ('documents'), and the mechanism ('by relevance to a query using semantic similarity'). However, it makes no attempt to distinguish itself from adjacent siblings like create_embedding, 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 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 prerequisites, and no named alternative. It never tells the agent when reranking is preferable to embedding or plain retrieval, nor when not to use it.

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

retrieve_fileRetrieve fileD
Read-onlyIdempotent

Retrieve file

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
anthropic-betaNoInclude files-api-2025-04-14 to use Anthropic Files API mode.

TDQS

D1.5/5.0
Behavior2/5

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

Annotations already indicate read-only, idempotent, and open-world hints. The description adds no further behavioral context such as authentication needs, return format, or what 'retrieve' entails.

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

Conciseness2/5

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

Overly brief to the point of being uninformative. It is not concise in a helpful way—it fails to convey any useful information beyond the tool name.

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

Completeness1/5

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

Without an output schema, the description should explain what is returned. It does not. With two parameters and no behavioral details, the description is grossly incomplete for an AI agent to understand its usage.

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 coverage is only 50% (file_id lacks a description). The tool description does not clarify the meaning of file_id or the purpose of the 'anthropic-beta' parameter beyond what the schema already provides.

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

Purpose1/5

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

Tautological: description restates name/title.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives. For example, it does not clarify how it differs from 'retrieve_file_content' or 'list_files'.

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

retrieve_file_contentRetrieve file contentD
Read-onlyIdempotent

Retrieve file content

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes

TDQS

D1/5.0
Behavior1/5

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

The description adds no behavioral details beyond what annotations already indicate; no mention of file size limits, content type, or other operational traits.

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

Conciseness1/5

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

Extreme under-specification; three words do not constitute a useful description.

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

Completeness1/5

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

Given no output schema and no parameter details, the description is completely inadequate for an agent to correctly invoke the tool.

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?

With 0% schema description coverage, the description fails to explain the required 'file_id' parameter, its format, or how to obtain it.

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

Purpose1/5

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

Tautological: description restates name/title.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives; there is no mention of context, prerequisites, or exclusions.

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

transcribe_audioCreate transcriptionC

Transcribes audio into text (Speech-to-Text).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesAudio file to transcribe Pass local file path.
modelYesModel to use (whisper-1)
promptNoOptional prompt text
languageNoISO-639-1 language code
temperatureNoSampling temperature
response_formatNoResponse formatjson
timestamp_granularitiesNoTimestamp granularity selection. Requires verbose_json output when requesting word-level timestamps.
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, covering the safety profile. The description adds nothing beyond that – no mention of cost, file size limits, latency, or that the call is non-idempotent and may re-bill on retry – so it earns little credit beyond the structured hints.

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?

A single short sentence with the purpose front-loaded and zero filler. It is not padded, though it is arguably terse to the point of under-specification rather than optimally structured.

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 tool with eight parameters, two enums, a hidden Delivery-Policy header, and no output schema, one sentence is insufficient. It never explains the required file/model pairing, the response_format implications, or the timestamp_granularities/verbose_json coupling, leaving the agent to reconstruct these from schema text alone.

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 all eight parameters including the enums and the verbose_json dependency for timestamp_granularities are documented in the schema itself. The description adds no parameter-level meaning, 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?

States a specific verb and resource ('Transcribes audio into text') with the domain clarified as Speech-to-Text, so the core action is unambiguous. However, it offers no differentiation from the sibling translate_audio tool, which a naive agent could easily confuse with transcription.

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 when-to-use guidance, no prerequisites (e.g., that the audio must first be uploaded or a local path supplied), and never mentions the alternative translate_audio tool. The agent must infer everything about selection from the tool name alone.

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

translate_audioTranslate audioC

Transcribes audio and translates the result to English.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPass local file path.
modelNowhisper-1
promptNo
temperatureNo
response_formatNo
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already cover the safety profile (destructiveHint=false, idempotentHint=false, openWorldHint=true), lowering the bar, but the description adds only that output is English. It says nothing about supported source languages, return format, rate limits, or how the delivery-policy header affects 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?

A single front-loaded sentence with no filler or redundancy. It is appropriately sized for the thought it contains, though the brevity is partly under-specification rather than precision.

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 six-parameter tool with no output schema, the description omits essential context: what the translation returns, what response_format values do, how prompt/temperature influence results, and which source languages are supported. It is far too thin for the tool's actual complexity.

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 coverage is only 33%; model, prompt, temperature, and response_format have no schema descriptions, and the description supplies none either. The one documented parameter (file) and the enum'd delivery policy carry all the meaning, so the description fails to compensate for the coverage 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?

The description states a specific compound action on a specific resource: transcription of audio plus translation of the result to English. This distinguishes it functionally from siblings like transcribe_audio and translate_text, but it never names those siblings to make the routing explicit.

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 or when-not-to-use guidance. With siblings transcribe_audio and translate_text present, the agent is left to infer that this tool is the combined one-step path rather than using the two siblings in sequence.

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

translate_textTranslate textC

Translates text into a target language using the current translation request format.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
userNo
modelYes
mime_typeNo
source_languageNo
target_languageYes
X-TokenLab-Delivery-PolicyNoPer-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…

TDQS

C2.4/5.0
Behavior2/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. The description adds nothing beyond that – no auth requirements, rate limits, or behavior of the source/target language handling – and the 'current translation request format' phrase is opaque rather than informative.

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?

It is a single front-loaded sentence, which is good, but roughly half of it ('using the current translation request format') is meaningless filler that does not earn its place.

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 7-parameter tool with 14% schema coverage and no output schema, the description is far too thin. It omits parameter guidance, the relationship to translate_audio, and any behavioral detail an agent would need to invoke it correctly.

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 14% (one of seven parameters documented), so the description must compensate and does not. It says nothing about model, text, source_language, target_language, mime_type, or user, leaving most parameters undocumented in both schema and prose.

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 ('Translates') and resource ('text') with the target language as output, so the core action is unambiguous. However, it never distinguishes itself from the sibling translate_audio, and the trailing clause 'using the current translation request format' is vague filler that adds no clarity.

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, no prerequisites, and no mention of alternatives such as translate_audio or the relevant siblings. The agent is left to infer the context entirely.

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

upload_fileUpload fileA

Uploads a TokenLab/OpenAI-compatible batch or image file. With anthropic-beta: files-api-2025-04-14, uploads an Anthropic Files resource without a purpose field and returns Anthropic file metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPass local file path.
modelNoOptional TokenLab extension for image file uploads. Defaults to gpt-image-2 and binds the returned …
purposeNoRequired in TokenLab/OpenAI-compatible mode: use batch for Batch API JSONL files, or user_data/visi…
anthropic-betaNoInclude files-api-2025-04-14 to use Anthropic Files API mode.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly=false, idempotent=false, openWorld=true, destructive=false, so the safety profile is covered. The description adds real value by explaining the two-mode behavior and that Anthropic mode omits the purpose field and returns Anthropic file metadata, but it does not mention that repeat uploads are non-idempotent (duplicates) or any auth requirements.

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 dense sentences with no filler, front-loading the primary action before the mode-specific behavior. Slightly technical phrasing but 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 4-parameter upload tool with no output schema, the description covers both operating modes and notes the Anthropic return metadata. Remaining gaps (non-idempotency, error cases) are minor given the annotations and complete schema coverage.

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 the schema itself explaining file path, model default, purpose enum, and the anthropic-beta value. The description corroborates the anthropic-beta/purpose interaction but adds 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 (uploads a batch or image file) and names the two API modes it supports. It distinguishes itself from siblings like list_files/retrieve_file, though it never explicitly contrasts with create_image_file or the other create_* tools that an agent might confuse it with.

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 conditional mode description: the anthropic-beta value triggers Anthropic Files mode, and 'purpose' is described as required in TokenLab/OpenAI mode. However, there is no explicit when-to-use guidance or named alternative for choosing upload_file over create_image_file or edit_image_file, so the agent must infer.

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. 9 tool updatesv0.6.26
    • Changedcreate_3d_model1 field changed
      • changedInput schema / properties / seed / description
        Previous value: -"Seed for deterministic-compatible providers."New value: +"Seed for repeatable generation where supported by the model."
    • Changedcreate_anthropic_message1 field changed
      • changedInput schema / properties / service_tier / description
        Previous value: -"Service tier hint for compatible providers."New value: +"Service tier hint where supported by the model."
    • Changedcreate_chat_completion2 fields changed
      • changedInput schema / properties / prediction / description
        Previous value: -"Prediction hints for providers that support draft or speculative decoding."New value: +"Prediction hints for models that support draft or speculative decoding."
      • changedInput schema / properties / service_tier / description
        Previous value: -"Service tier hint for compatible providers."New value: +"Service tier hint where supported by the model."
    • Changedcreate_gemini_content1 field changed
      • changedInput schema / properties / generationConfig / properties / responseModalities / description
        Previous value: -"Requested output modalities for compatible native Gemini routes."New value: +"Requested output modalities for supported Gemini models."
    • Changedcreate_image1 field changed
      • addedInput schema / properties / prompt_extend
        Added value: +{
        +  "description": "For z-image-turbo, enable prompt expansion. Defaults to false. Enabling it uses the model's prompt-…",
        +  "type": "boolean"
        +}
    • Changedcreate_image_file1 field changed
      • addedInput schema / properties / prompt_extend
        Added value: +{
        +  "description": "For z-image-turbo, enable prompt expansion. Defaults to false. Enabling it uses the model's prompt-…",
        +  "type": "boolean"
        +}
    • Changedcreate_response2 fields changed
      • changedInput schema / properties / service_tier / description
        Previous value: -"Service tier hint for compatible providers."New value: +"Service tier hint where supported by the model."
      • changedInput schema / properties / stream_options / properties / include_obfuscation / description
        Previous value: -"When true, request obfuscated tokens in Responses stream events from compatible upstreams."New value: +"When true, request obfuscated tokens in Responses stream events where supported."
    • Changedcreate_speech4 fields changed
      • changedInput schema / properties / language_code / description
        Previous value: -"Optional language code for Gemini, xAI, and compatible TTS routes."New value: +"Optional language code for Gemini, xAI, and compatible TTS models."
      • changedInput schema / properties / temperature / description
        Previous value: -"Sampling temperature for Gemini-compatible TTS routes."New value: +"Sampling temperature for Gemini-compatible TTS models."
      • changedInput schema / properties / voice / description
        Previous value: -"Voice selector for OpenAI-compatible, Gemini, xAI, and MiniMax-compatible routes. Some MiniMax rout…"New value: +"Voice selector for OpenAI-compatible, Gemini, xAI, and MiniMax-compatible speech models. Some MiniM…"
      • changedInput schema / properties / voice_id / description
        Previous value: -"Provider-native voice selector for MiniMax-compatible speech models."New value: +"Voice selector for MiniMax-compatible speech models."
    • Changedcreate_video8 fields changed
      • addedInput schema / properties / audio
        Added value: +{
        +  "description": "Audio-output selector for operations that declare it. Omission follows the model default; `false` r…",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / audio_type
        Added value: +{
        +  "description": "Optional audio control. Accepted only when declared by the selected model and operation; availabili…",
        +  "type": "string"
        +}
      • changedInput schema / properties / audio_url / description
        Previous value: -"Publicly reachable audio URL for model-specific audio-conditioned video flows."New value: +"Public audio URL for an audio-driven or reference-audio operation supported by the selected model."
      • addedInput schema / properties / bgm
        Added value: +{
        +  "description": "Optional audio control. Accepted only when declared by the selected model and operation; availabili…",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / draft / description
        Previous value: -"Seedance 1.5 Pro draft workflow flag. Only supported by draft-capable Seedance routes; draft=true c…"New value: +"Seedance 1.5 Pro draft workflow flag. Only supported by Seedance models supporting drafts; draft=tr…"
      • changedInput schema / properties / output_audio / description
        Previous value: -"Canonical model-dependent audio output toggle. Veo 3 and Seedance requests default to true when omi…"New value: +"Audio-output selector for operations that declare it. Omission follows the model default; `false` r…"
      • changedInput schema / properties / video_urls / description
        Previous value: -"Compatibility array for video-conditioned flows when multiple input videos are supported by the rou…"New value: +"Compatibility array for video-conditioned flows when multiple input videos are supported by the sel…"
      • addedInput schema / properties / voice_id
        Added value: +{
        +  "description": "Optional audio control. Accepted only when declared by the selected model and operation; availabili…",
        +  "type": "string"
        +}
  2. 22 tool updatesv0.6.24
    • Changedcreate_3d_model1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_anthropic_message1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_chat_completion1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_embedding1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_gemini_content1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_image8 fields changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / async / description
        Previous value: -"Return a task before the final image is ready when the selected model supports public async execution."New value: +"Return a task before the final image is ready when the selected model supports public async executi…"
      • changedInput schema / properties / background / description
        Previous value: -"Background handling for compatible image flows. For gpt-image-2 generation and edits, accepted values are auto and opaque; transparent is not supported. Other models may support different values."New value: +"Background handling for compatible image flows. For gpt-image-2 generation and edits, accepted valu…"
      • changedInput schema / properties / model / description
        Previous value: -"Model to use. Send this explicitly; query GET /v1/models?recommended_for=image for current recommendations."New value: +"Model to use. Send this explicitly; query GET /v1/models?recommended_for=image for current recommen…"
      • changedInput schema / properties / operation / description
        Previous value: -"Public image operation family. Reference-image models use image-to-image with image_url, image_urls, or reference_image_urls."New value: +"Public image operation family. Reference-image models use image-to-image with image_url, image_urls…"
      • changedInput schema / properties / quality / description
        Previous value: -"Image quality. Defaults and accepted values are model-specific. For gpt-image-2, omit this field or use auto for automatic quality, or send low, medium, or high. Other image families may use provider-specific values."New value: +"Image quality. Defaults and accepted values are model-specific. For gpt-image-2, omit this field or…"
      • changedInput schema / properties / size / description
        Previous value: -"Image size. Defaults are model-specific. For gpt-image-2, omit this field or use auto for automatic sizing, or send WIDTHxHEIGHT; custom dimensions must both be multiples of 16, longest edge <= 3840px, long/short ratio <= 3:1, and total pixels between 655,360 and 8,294,400."New value: +"Image size. Defaults are model-specific. For gpt-image-2, omit this field or use auto for automatic…"
      • changedInput schema / properties / style / description
        Previous value: -"Optional model-specific style selector. Only send when the selected model documents support for this parameter."New value: +"Optional model-specific style selector. Only send when the selected model documents support for thi…"
    • Changedcreate_image_file1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_multimodal_embedding2 fields changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / input / oneOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "description": "A multimodal embedding input item. Text input is generally available; image input may require feature enablement.",
        -    "properties": {
        -      "image_base64": {
        -        "description": "Base64-encoded image content",
        -        "type": "string"
        -      },
        -      "image_mime_type": {
        -        "description": "MIME type for image_base64",
        -        "type": "string"
        -      },
        -      "image_url": {
        -        "description": "Public image URL to embed",
        -        "type": "string"
        -      },
        -      "text": {
        -        "description": "Text to embed",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "description": "A multimodal embedding input item. Text input is generally available; image input may require feature enablement.",
        -      "type": "object"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "description": "A multimodal embedding input item. Text input is generally available; image input may require featu…",
        +    "properties": {
        +      "image_base64": {
        +        "description": "Base64-encoded image content",
        +        "type": "string"
        +      },
        +      "image_mime_type": {
        +        "description": "MIME type for image_base64",
        +        "type": "string"
        +      },
        +      "image_url": {
        +        "description": "Public image URL to embed",
        +        "type": "string"
        +      },
        +      "text": {
        +        "description": "Text to embed",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "description": "A multimodal embedding input item. Text input is generally available; image input may require featu…",
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
    • Changedcreate_music5 fields changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / audio_operation / description
        Previous value: -"Uploaded-audio mode. upload-extend requires continue_at; add-instrumental requires audio_url, title, tags, and negative_tags."New value: +"Uploaded-audio mode. upload-extend requires continue_at; add-instrumental requires audio_url, title…"
      • changedInput schema / properties / audio_url / description
        Previous value: -"Publicly reachable reference or uploaded audio URL. Defaults to upload-cover when audio_operation is omitted."New value: +"Publicly reachable reference or uploaded audio URL. Defaults to upload-cover when audio_operation i…"
      • changedInput schema / properties / mv / description
        Previous value: -"Official Suno model version. Required when creating music (action omitted or MUSIC); omit for lyrics-only requests."New value: +"Official Suno model version. Required when creating music (action omitted or MUSIC); omit for lyric…"
      • changedInput schema / properties / prompt / description
        Previous value: -"Music description. Required for music, lyrics, upload-cover, and upload-extend requests; omit for add-instrumental."New value: +"Music description. Required for music, lyrics, upload-cover, and upload-extend requests; omit for a…"
    • Changedcreate_response1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedcreate_speech3 fields changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / response_format / description
        Previous value: -"Audio format. Common values include mp3, opus, aac, flac, wav, and pcm. Supported values vary by model family."New value: +"Audio format. Common values include mp3, opus, aac, flac, wav, and pcm. Supported values vary by mo…"
      • changedInput schema / properties / voice / description
        Previous value: -"Voice selector for OpenAI-compatible, Gemini, xAI, and MiniMax-compatible routes. Some MiniMax routes also accept voice_id."New value: +"Voice selector for OpenAI-compatible, Gemini, xAI, and MiniMax-compatible routes. Some MiniMax rout…"
    • Changedcreate_video33 fields changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / aspect_ratio / description
        Previous value: -"Canonical video aspect ratio. Seedance defaults to adaptive when omitted. The ratio alias is accepted for compatibility."New value: +"Canonical video aspect ratio. Seedance defaults to adaptive when omitted. The ratio alias is accept…"
      • changedInput schema / properties / audio_urls / description
        Previous value: -"Compatibility array for audio-conditioned flows when multiple audio references are supported by the routed model family. TokenLab currently accepts up to 3 reference audios."New value: +"Compatibility array for audio-conditioned flows when multiple audio references are supported by the…"
      • changedInput schema / properties / audio_urls / maxItems
        Previous value: -3New value: +10
      • changedInput schema / properties / camera_fixed / description
        Previous value: -"Optional fixed-camera selector for compatible video models. Seedance 2.0 models do not support this field."New value: +"Optional fixed-camera selector for compatible video models. Seedance 2.0 and Seedance 2.5 do not su…"
      • changedInput schema / properties / draft / description
        Previous value: -"Seedance 1.5 Pro draft workflow flag. Only supported by draft-capable Seedance routes; draft=true creates a low-cost draft task."New value: +"Seedance 1.5 Pro draft workflow flag. Only supported by draft-capable Seedance routes; draft=true c…"
      • changedInput schema / properties / draft_task_id / description
        Previous value: -"Seedance 1.5 Pro draft promotion task ID. Provide this instead of draft=true to create the final video from a previous draft task."New value: +"Seedance 1.5 Pro draft promotion task ID. Provide this instead of draft=true to create the final vi…"
      • changedInput schema / properties / duration / description
        Previous value: -"Video duration in seconds. Seedance models also accept -1 to let the model choose within its supported duration range; TokenLab estimates billing conservatively for that mode."New value: +"Video duration in seconds. Seedance models also accept -1 to let the model choose within its suppor…"
      • changedInput schema / properties / end_image / description
        Previous value: -"Last frame image input for start-end-to-video flows. Seedance accepts a public image reference or asset://asset-YYYYMMDDHHMMSS-xxxxx for an ACTIVE TokenLab material owned by the requesting organization. When the selected Seedance model can use the TokenLab material library, TokenLab prepares ordinary image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cann…"New value: +"Last frame image input for start-end-to-video flows. Seedance accepts a public image reference or a…"
      • changedInput schema / properties / execution_expires_after / description
        Previous value: -"Optional execution expiry window in seconds for compatible video models. Seedance defaults to 172800 seconds when omitted."New value: +"Optional execution expiry window in seconds for compatible video models. Seedance defaults to 17280…"
      • changedInput schema / properties / frames / description
        Previous value: -"Optional frame count for compatible video models. Seedance 2.0 models and Seedance 1.5 Pro do not support this field."New value: +"Optional frame count for compatible video models. Seedance 1.5 Pro, Seedance 2.0, and Seedance 2.5 …"
      • changedInput schema / properties / generate_audio / description
        Previous value: -"Compatibility alias for output_audio. If more than one audio toggle is provided, all values must match."New value: +"Compatibility alias for output_audio. If more than one audio toggle is provided, all values must ma…"
      • changedInput schema / properties / image / description
        Previous value: -"Inline image as a data URL (for example, data:image/png;base64,...). Prefer image_url for broader production compatibility. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image pa…"New value: +"Inline image as a data URL (for example, data:image/png;base64,...). Prefer image_url for broader p…"
      • changedInput schema / properties / image_url / description
        Previous value: -"Publicly reachable image URL for image-to-video generation, or asset://asset-YYYYMMDDHHMMSS-xxxxx for an ACTIVE TokenLab Seedance material used as the first frame. Preferred over inline base64 in production. TokenLab verifies material ownership. When the selected Seedance model can use the TokenLab material library, TokenLab prepares ordinary image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_mat…"New value: +"Publicly reachable image URL for image-to-video generation, or asset://asset-YYYYMMDDHHMMSS-xxxxx f…"
      • changedInput schema / properties / image_urls / description
        Previous value: -"Image URL array for compatible image-conditioned video flows. This endpoint currently allows up to 9 entries. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image path."New value: +"Image URL array for compatible image-conditioned video flows. Seedance 2.5 accepts up to 30 aggrega…"
      • changedInput schema / properties / image_urls / maxItems
        Previous value: -9New value: +30
      • changedInput schema / properties / kling_elements / description
        Previous value: -"Kling 3.0 element references for kling-3.0-video image-conditioned requests. Define 1-3 elements and reference them in the prompt with @name. Each element requires 2-4 image URLs in element_input_urls. Do not combine kling_elements with output_audio=true; omit output_audio or set it to false for element-reference requests."New value: +"Kling 3.0 element references for kling-3.0-video image-conditioned requests. Define 1-3 elements an…"
      • changedInput schema / properties / material_asset_id / description
        Previous value: -"TokenLab Seedance material asset ID returned by /v1/videos/assets, by automatic image preparation, or from a real-person group returned by GetVisualValidateResult. Use it after the asset is ACTIVE with Seedance models that can use the TokenLab material library. The asset must belong to the current account. This field is a generic reference input; to assign first-frame, last-frame, or reference-image semantics explicitly, put asset://<material_asset_id> in start_image, end_image, or reference_im…"New value: +"TokenLab Seedance material asset ID returned by /v1/videos/assets, by automatic image preparation, …"
      • changedInput schema / properties / material_asset_ids / description
        Previous value: -"TokenLab Seedance material asset IDs returned by /v1/videos/assets or by automatic image preparation. They share the Seedance image-reference limit; the selected model must be able to use the TokenLab material library and all assets must belong to the current account and be ACTIVE."New value: +"TokenLab Seedance material asset IDs returned by /v1/videos/assets or by automatic image preparatio…"
      • changedInput schema / properties / operation / description
        Previous value: -"Requested video operation. If omitted, TokenLab infers the operation from the provided inputs. Explicit operation is recommended for production reliability."New value: +"Requested video operation. If omitted, TokenLab infers the operation from the provided inputs. Expl…"
      • changedInput schema / properties / output_audio / description
        Previous value: -"Canonical model-dependent audio output toggle. Veo 3 and Seedance requests default to true when omitted. Kling 3.0 Video accepts this selector for non-element-reference requests and maps it to the compatible sound control; omitted Kling requests default to silent output. Do not combine output_audio=true with kling_elements. The aliases outputAudio and generate_audio are accepted for compatibility and must match when provided together."New value: +"Canonical model-dependent audio output toggle. Veo 3 and Seedance requests default to true when omi…"
      • addedInput schema / properties / output_format
        Added value: +{
        +  "description": "Video container format for compatible models. Seedance 2.5 supports mp4 and mov; omit this field fo…",
        +  "enum": [
        +    "mp4",
        +    "mov"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / reference_image_type / description
        Previous value: -"Optional reference image role for models that distinguish between asset and style references. The camelCase alias referenceImageType is accepted for compatibility."New value: +"Optional reference image role for models that distinguish between asset and style references. The c…"
      • changedInput schema / properties / reference_images / description
        Previous value: -"Canonical public reference-image field for reference-to-video conditioning. This endpoint currently allows up to 9 URLs, compatible data URLs, or for Seedance, asset://asset-YYYYMMDDHHMMSS-xxxxx URIs for ACTIVE TokenLab materials owned by the requesting organization; model-specific limits can be lower. xAI grok-imagine-video accepts up to 7 image references with duration capped at 10 seconds; grok-imagine-video-1.5 and grok-imagine-video-1.5-preview are image-to-video only and do not accept ref…"New value: +"Canonical public reference-image field for reference-to-video conditioning. Seedance 2.5 accepts up…"
      • changedInput schema / properties / reference_images / maxItems
        Previous value: -9New value: +30
      • changedInput schema / properties / return_last_frame / description
        Previous value: -"Return the last generated frame when the selected model supports it. Seedance defaults to false when omitted."New value: +"Return the last generated frame when the selected model supports it. Seedance defaults to false whe…"
      • changedInput schema / properties / safety_identifier / description
        Previous value: -"Optional safety/user trace identifier for compatible video models. If omitted for Seedance, TokenLab uses user when provided."New value: +"Optional safety/user trace identifier for compatible video models. If omitted for Seedance, TokenLa…"
      • changedInput schema / properties / seconds / description
        Previous value: -"Alias of duration used by compatible request shapes. Seedance models also accept -1 to let the model choose within its supported duration range; duration and seconds must match when both are provided."New value: +"Alias of duration used by compatible request shapes. Seedance models also accept -1 to let the mode…"
      • changedInput schema / properties / seed / description
        Previous value: -"Seed for reproducibility. Seedance uses -1 for random seed when omitted."New value: +"Seed for reproducibility on compatible models. Compatible Seedance models use -1 for a random seed …"
      • changedInput schema / properties / service_tier / description
        Previous value: -"Optional service tier for compatible video models. service_tier=default is accepted as a no-op for Seedance 2.0 models; service_tier=flex is rejected where the selected model does not support it."New value: +"Optional service tier for compatible video models. service_tier=default is accepted as a compatibil…"
      • changedInput schema / properties / start_image / description
        Previous value: -"First frame image input for start-end-to-video flows. Seedance accepts a public image reference or asset://asset-YYYYMMDDHHMMSS-xxxxx for an ACTIVE TokenLab material owned by the requesting organization. When the selected Seedance model can use the TokenLab material library, TokenLab prepares ordinary image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model can…"New value: +"First frame image input for start-end-to-video flows. Seedance accepts a public image reference or …"
      • changedInput schema / properties / video_urls / description
        Previous value: -"Compatibility array for video-conditioned flows when multiple input videos are supported by the routed model family. TokenLab currently accepts up to 3 reference videos."New value: +"Compatibility array for video-conditioned flows when multiple input videos are supported by the rou…"
      • changedInput schema / properties / video_urls / maxItems
        Previous value: -3New value: +10
    • Changededit_image5 fields changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / image_urls / description
        Previous value: -"Multiple source image URLs. GPT Image edits accept up to 16 source images; xAI Grok Imagine edit models accept at most 3 source images."New value: +"Multiple source image URLs. GPT Image edits accept up to 16 source images; xAI Grok Imagine edit mo…"
      • changedInput schema / properties / images / description
        Previous value: -"Official JSON image references for image edits. Provide exactly one of image_url or file_id for each item. GPT Image edits accept up to 16 source images; xAI Grok Imagine edit models accept at most 3 source images."New value: +"Official JSON image references for image edits. Provide exactly one of image_url or file_id for eac…"
      • changedInput schema / properties / mask / description
        Previous value: -"Optional JSON mask reference for image edits. Provide exactly one of image_url or file_id. Multipart requests can also send mask as a file part."New value: +"Optional JSON mask reference for image edits. Provide exactly one of image_url or file_id. Multipar…"
      • changedInput schema / properties / mask / properties / image_url / description
        Previous value: -"Source mask image URL. Public http/https URLs and compatible data URLs are supported by the runtime validation path."New value: +"Source mask image URL. Public http/https URLs and compatible data URLs are supported by the runtime…"
    • Changededit_image_file3 fields changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / image / description
        Previous value: -"Source image file(s). Repeat image for multiple source images. GPT Image edits accept up to 16 images; xAI Grok Imagine edit models accept at most 3 source images. Pass local file paths."New value: +"Source image file(s). Repeat image for multiple source images. GPT Image edits accept up to 16 imag…"
      • changedInput schema / properties / image[] / description
        Previous value: -"Alternative repeated multipart field name for multiple source images. The same model-specific limits apply: GPT Image up to 16, xAI Grok Imagine up to 3. Pass local file paths."New value: +"Alternative repeated multipart field name for multiple source images. The same model-specific limit…"
    • Addedevaluate_decisions
    • Changedlist_files4 fields changed
      • changedInput schema / properties / after_id / description
        Previous value: -"Anthropic Files cursor. Return files after this public file id. Requires the Anthropic Files beta header and cannot be combined with before_id."New value: +"Anthropic Files cursor. Return files after this public file id. Requires the Anthropic Files beta h…"
      • changedInput schema / properties / before_id / description
        Previous value: -"Anthropic Files cursor. Return files before this public file id. Requires the Anthropic Files beta header and cannot be combined with after_id."New value: +"Anthropic Files cursor. Return files before this public file id. Requires the Anthropic Files beta …"
      • changedInput schema / properties / purpose / description
        Previous value: -"Optional file purpose filter. batch and batch_output cover Batch API files; user_data and vision cover TokenLab image/reference file bindings. Anthropic Files API mode is selected by Anthropic headers rather than this query parameter."New value: +"Optional file purpose filter. batch and batch_output cover Batch API files; user_data and vision co…"
      • changedInput schema / properties / scope_id / description
        Previous value: -"Reserved Anthropic Files scope cursor. TokenLab currently returns an explicit unsupported error rather than silently ignoring this value."New value: +"Reserved Anthropic Files scope cursor. TokenLab currently returns an explicit unsupported error rat…"
    • Changedlist_models2 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "chat",
        -  "embedding",
        -  "translation",
        -  "image",
        -  "video",
        -  "audio",
        -  "tts",
        -  "stt",
        -  "rerank",
        -  "3d",
        -  "music"
        -]New value: +[
        +  "chat",
        +  "embedding",
        +  "translation",
        +  "image",
        +  "video",
        +  "audio",
        +  "tts",
        +  "stt",
        +  "rerank",
        +  "3d",
        +  "music",
        +  "decision"
        +]
      • changedInput schema / properties / view / description
        Previous value: -"Compact model-selection output is the MCP default. Set view to full only when the complete OpenAI-compatible list shape is required."New value: +"Compact model-selection output is the MCP default. Set view to full only when the complete OpenAI-c…"
    • Changedrerank_documents1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedtranscribe_audio1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedtranslate_audio1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedtranslate_text1 field changed
      • addedInput schema / properties / X-TokenLab-Delivery-Policy
        Added value: +{
        +  "description": "Per-request Delivery policy. Overrides the API key and Workspace defaults. Auto tries TokenLab Veri…",
        +  "enum": [
        +    "auto",
        +    "verified",
        +    "official"
        +  ],
        +  "type": "string"
        +}
    • Changedupload_file2 fields changed
      • changedInput schema / properties / model / description
        Previous value: -"Optional TokenLab extension for image file uploads. Defaults to gpt-image-2 and binds the returned file_id to the selected image-edit configuration."New value: +"Optional TokenLab extension for image file uploads. Defaults to gpt-image-2 and binds the returned …"
      • changedInput schema / properties / purpose / description
        Previous value: -"Required in TokenLab/OpenAI-compatible mode: use batch for Batch API JSONL files, or user_data/vision for image edits. Omit in Anthropic Files mode."New value: +"Required in TokenLab/OpenAI-compatible mode: use batch for Batch API JSONL files, or user_data/visi…"
  3. 31 tool updatesv0.6.4
    • Changedcancel_task1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcompare_models2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcreate_3d_model3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / seed / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / seed / minimum
        Removed value: --9007199254740991
    • Changedcreate_anthropic_message15 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / max_tokens / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / messages / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / messages / items / properties / content / oneOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {
        -        "source": {
        -          "additionalProperties": {},
        -          "properties": {
        -            "data": {
        -              "type": "string"
        -            },
        -            "media_type": {
        -              "type": "string"
        -            },
        -            "type": {
        -              "enum": [
        -                "base64",
        -                "url"
        -              ],
        -              "type": "string"
        -            },
        -            "url": {
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "text": {
        -          "type": "string"
        -        },
        -        "type": {
        -          "enum": [
        -            "text",
        -            "image"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  }
        -]
      • changedInput schema / properties / metadata / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / metadata / properties
        Removed value: -{}
      • removedInput schema / properties / stream
        Removed value: -{
        -  "const": false,
        -  "default": false,
        -  "description": "MCP tool calls return one final result; omit stream or set it to false.",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / stream_options / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / stream_options / properties
        Removed value: -{}
      • changedInput schema / properties / thinking / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / thinking / properties
        Removed value: -{}
      • changedInput schema / properties / tool_choice / oneOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / tools / items / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / tools / items / properties
        Removed value: -{}
      • removedInput schema / properties / top_k / maximum
        Removed value: -9007199254740991
    • Changedcreate_chat_completion35 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / audio / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / audio / properties
        Removed value: -{}
      • addedInput schema / properties / function_call
        Added value: +{
        +  "description": "Deprecated function-call selection retained by the official Chat Completions contract.",
        +  "oneOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    }
        +  ]
        +}
      • addedInput schema / properties / functions
        Added value: +{
        +  "description": "Deprecated function definitions retained by the official Chat Completions contract.",
        +  "items": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / logit_bias / properties
        Removed value: -{}
      • removedInput schema / properties / max_completion_tokens / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / max_tokens / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / messages / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / messages / items / properties / content / oneOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "oneOf": [
        -        {
        -          "additionalProperties": {},
        -          "properties": {
        -            "text": {
        -              "type": "string"
        -            },
        -            "type": {
        -              "const": "text",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "text"
        -          ],
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": {},
        -          "properties": {
        -            "image_url": {
        -              "additionalProperties": {},
        -              "properties": {
        -                "detail": {
        -                  "enum": [
        -                    "auto",
        -                    "low",
        -                    "high"
        -                  ],
        -                  "type": "string"
        -                },
        -                "url": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "url"
        -              ],
        -              "type": "object"
        -            },
        -            "type": {
        -              "const": "image_url",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "image_url"
        -          ],
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": {},
        -          "properties": {
        -            "type": {
        -              "const": "video_url",
        -              "type": "string"
        -            },
        -            "video_url": {
        -              "additionalProperties": {},
        -              "properties": {
        -                "url": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "url"
        -              ],
        -              "type": "object"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "video_url"
        -          ],
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": {},
        -          "properties": {
        -            "input_audio": {
        -              "additionalProperties": {},
        -              "properties": {
        -                "data": {
        -                  "description": "Public audio URL or Base64 data URL.",
        -                  "type": "string"
        -                },
        -                "format": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "data"
        -              ],
        -              "type": "object"
        -            },
        -            "type": {
        -              "const": "input_audio",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "input_audio"
        -          ],
        -          "type": "object"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / messages / items / properties / tool_calls / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / messages / items / properties / tool_calls / items / properties
        Removed value: -{
        -  "function": {
        -    "additionalProperties": {},
        -    "properties": {
        -      "arguments": {
        -        "type": "string"
        -      },
        -      "name": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "name",
        -      "arguments"
        -    ],
        -    "type": "object"
        -  },
        -  "id": {
        -    "description": "Tool call ID",
        -    "type": "string"
        -  },
        -  "type": {
        -    "const": "function",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / messages / items / properties / tool_calls / items / required
        Removed value: -[
        -  "id",
        -  "type",
        -  "function"
        -]
      • removedInput schema / properties / messages / items / properties / tool_calls / items / type
        Removed value: -"object"
      • changedInput schema / properties / prediction / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / prediction / properties
        Removed value: -{}
      • removedInput schema / properties / repetition_penalty
        Removed value: -{
        -  "description": "Repetition penalty for compatible models.",
        -  "exclusiveMinimum": 0,
        -  "type": "number"
        -}
      • removedInput schema / properties / response_format / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / seed / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / seed / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / service_tier / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / service_tier / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / speech_rate
        Removed value: -{
        -  "description": "Speech rate for compatible translated audio output.",
        -  "maximum": 2,
        -  "minimum": 0.5,
        -  "type": "number"
        -}
      • removedInput schema / properties / stream
        Removed value: -{
        -  "const": false,
        -  "default": false,
        -  "description": "MCP tool calls return one final result; omit stream or set it to false.",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / stream_options / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / stream_options / properties
        Removed value: -{}
      • changedInput schema / properties / tool_choice / oneOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "none",
        -      "auto",
        -      "required"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "function": {
        -        "additionalProperties": {},
        -        "properties": {
        -          "name": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "name"
        -        ],
        -        "type": "object"
        -      },
        -      "type": {
        -        "const": "function",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "function"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "none",
        +      "auto",
        +      "required"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "properties": {
        +      "function": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "enum": [
        +          "function"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "function"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / tools / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / function / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / function / properties
        Removed value: -{
        -  "description": {
        -    "description": "Function description",
        -    "type": "string"
        -  },
        -  "name": {
        -    "description": "Function name",
        -    "maxLength": 64,
        -    "type": "string"
        -  },
        -  "parameters": {
        -    "additionalProperties": {},
        -    "description": "JSON Schema for function parameters",
        -    "properties": {},
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / tools / items / properties / function / required
        Removed value: -[
        -  "name"
        -]
      • removedInput schema / properties / tools / items / properties / type / const
        Removed value: -"function"
      • addedInput schema / properties / tools / items / properties / type / enum
        Added value: +[
        +  "function"
        +]
      • removedInput schema / properties / top_k
        Removed value: -{
        -  "description": "Top-k sampling cutoff for compatible providers.",
        -  "maximum": 9007199254740991,
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / translation_options / additionalProperties
        Removed value: -{}
    • Changedcreate_embedding3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dimensions / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / input / oneOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "items": {
        -      "items": {
        -        "type": "number"
        -      },
        -      "type": "array"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "items": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "type": "array"
        +  }
        +]
    • Changedcreate_gemini_content58 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / cached_content
        Added value: +{
        +  "description": "Original proto field-name spelling of cachedContent.",
        +  "type": "string"
        +}
      • removedInput schema / properties / contents / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / contents / items / properties / parts / items / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "text": {
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "inlineData": {
        -        "additionalProperties": {},
        -        "properties": {
        -          "data": {
        -            "type": "string"
        -          },
        -          "mimeType": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "inline_data": {
        -        "additionalProperties": {},
        -        "properties": {
        -          "data": {
        -            "type": "string"
        -          },
        -          "mime_type": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "fileData": {
        -        "additionalProperties": {},
        -        "properties": {
        -          "fileUri": {
        -            "type": "string"
        -          },
        -          "mimeType": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "file_data": {
        -        "additionalProperties": {},
        -        "properties": {
        -          "file_uri": {
        -            "type": "string"
        -          },
        -          "mime_type": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "videoMetadata": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "video_metadata": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "thought": {
        -        "type": "boolean"
        -      },
        -      "thoughtSignature": {
        -        "type": "string"
        -      },
        -      "thought_signature": {
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "functionCall": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "functionResponse": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "executableCode": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "codeExecutionResult": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "function_call": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "function_response": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "executable_code": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {
        -      "code_execution_result": {
        -        "additionalProperties": {},
        -        "properties": {},
        -        "type": "object"
        -      }
        -    },
        -    "type": "object"
        -  }
        -]
      • removedInput schema / properties / generationConfig / additionalProperties
        Removed value: -{}
      • changedInput schema / properties / generationConfig / properties / candidateCount / description
        Previous value: -"Number of response candidates for non-streaming generation. Streaming requests must omit this field or keep it at 1."New value: +"Requested number of response candidates. Support is determined by the selected service."
      • removedInput schema / properties / generationConfig / properties / candidateCount / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / generationConfig / properties / maxOutputTokens / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / generationConfig / properties / responseSchema / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / generationConfig / properties / responseSchema / properties
        Removed value: -{}
      • changedInput schema / properties / generationConfig / properties / thinkingConfig / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / generationConfig / properties / thinkingConfig / properties / thinkingBudget / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / generationConfig / properties / thinkingConfig / properties / thinkingBudget / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / generationConfig / properties / thinking_config / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / generationConfig / properties / thinking_config / properties / thinking_budget / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / generationConfig / properties / thinking_config / properties / thinking_budget / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / generationConfig / properties / topK / maximum
        Removed value: -9007199254740991
      • addedInput schema / properties / generation_config
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Original proto field-name spelling of generationConfig.",
        +  "type": "object"
        +}
      • removedInput schema / properties / safetySettings / items / additionalProperties
        Removed value: -{}
      • addedInput schema / properties / safety_settings
        Added value: +{
        +  "description": "Original proto field-name spelling of safetySettings.",
        +  "items": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / systemInstruction / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / systemInstruction / properties / parts / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / systemInstruction / properties / parts / items / properties
        Removed value: -{
        -  "text": {
        -    "type": "string"
        -  }
        -}
      • addedInput schema / properties / system_instruction
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Original proto field-name spelling of systemInstruction.",
        +  "type": "object"
        +}
      • changedInput schema / properties / toolConfig / additionalProperties
        Previous value: -{}New value: +true
      • changedInput schema / properties / toolConfig / properties / functionCallingConfig / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / toolConfig / properties / functionCallingConfig / properties / allowedFunctionNames / items / type
        Removed value: -"string"
      • changedInput schema / properties / toolConfig / properties / function_calling_config / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / toolConfig / properties / function_calling_config / properties / allowed_function_names / items / type
        Removed value: -"string"
      • addedInput schema / properties / tool_config
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Original proto field-name spelling of toolConfig.",
        +  "type": "object"
        +}
      • changedInput schema / properties / tools / description
        Previous value: -"Gemini tools. Supported tool combinations depend on the selected model and route; unsupported native image-output tool combinations are rejected before upstream retries."New value: +"Gemini tools. Tool types and combinations are interpreted by the selected service."
      • changedInput schema / properties / tools / items / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / tools / items / properties / codeExecution / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / codeExecution / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / code_execution / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / code_execution / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / computerUse / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / computerUse / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / computer_use / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / computer_use / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / functionDeclarations / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / functionDeclarations / items / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / functionDeclarations / items / type
        Removed value: -"object"
      • removedInput schema / properties / tools / items / properties / function_declarations / items / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / function_declarations / items / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / function_declarations / items / type
        Removed value: -"object"
      • removedInput schema / properties / tools / items / properties / googleSearch / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / googleSearch / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / googleSearchRetrieval / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / googleSearchRetrieval / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / google_search / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / google_search / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / google_search_retrieval / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / google_search_retrieval / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / urlContext / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / urlContext / properties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / url_context / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / tools / items / properties / url_context / properties
        Removed value: -{}
    • Changedcreate_image6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / background / description
        Previous value: -"Background handling for compatible image generation flows such as gpt-image-2 text-to-image. Not supported for gpt-image-2 image edits."New value: +"Background handling for compatible image flows. For gpt-image-2 generation and edits, accepted values are auto and opaque; transparent is not supported. Other models may support different values."
      • removedInput schema / properties / seed / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / seed / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / stream
        Removed value: -{
        -  "const": false,
        -  "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.",
        -  "type": "boolean"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "prompt",
        -  "model"
        -]New value: +[
        +  "model",
        +  "prompt"
        +]
    • Changedcreate_image_file4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / seed / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / seed / minimum
        Removed value: --9007199254740991
      • removedInput schema / properties / stream
        Removed value: -{
        -  "const": false,
        -  "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.",
        -  "type": "boolean"
        -}
    • Changedcreate_multimodal_embedding3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dimensions / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / input / oneOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "description": "A multimodal embedding input item. Text input is generally available; image input may require feature enablement.",
        -    "properties": {
        -      "image_base64": {
        -        "description": "Base64-encoded image content",
        -        "type": "string"
        -      },
        -      "image_mime_type": {
        -        "description": "MIME type for image_base64",
        -        "type": "string"
        -      },
        -      "image_url": {
        -        "description": "Public image URL to embed",
        -        "type": "string"
        -      },
        -      "text": {
        -        "description": "Text to embed",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "description": "A multimodal embedding input item. Text input is generally available; image input may require feature enablement.",
        -      "properties": {
        -        "image_base64": {
        -          "description": "Base64-encoded image content",
        -          "type": "string"
        -        },
        -        "image_mime_type": {
        -          "description": "MIME type for image_base64",
        -          "type": "string"
        -        },
        -        "image_url": {
        -          "description": "Public image URL to embed",
        -          "type": "string"
        -        },
        -        "text": {
        -          "description": "Text to embed",
        -          "type": "string"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "description": "A multimodal embedding input item. Text input is generally available; image input may require feature enablement.",
        +    "properties": {
        +      "image_base64": {
        +        "description": "Base64-encoded image content",
        +        "type": "string"
        +      },
        +      "image_mime_type": {
        +        "description": "MIME type for image_base64",
        +        "type": "string"
        +      },
        +      "image_url": {
        +        "description": "Public image URL to embed",
        +        "type": "string"
        +      },
        +      "text": {
        +        "description": "Text to embed",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "description": "A multimodal embedding input item. Text input is generally available; image input may require feature enablement.",
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
    • Changedcreate_music1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcreate_response28 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / background
        Added value: +{
        +  "description": "Whether to run the response asynchronously.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / input / oneOf
        Previous value: -[
        -  {
        -    "description": "Single string input.",
        -    "type": "string"
        -  },
        -  {
        -    "description": "Structured input items for the conversation.",
        -    "items": {},
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "description": "Single string input.",
        +    "type": "string"
        +  },
        +  {
        +    "description": "Structured input items for the conversation.",
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / max_output_tokens / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / max_output_tokens / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / metadata / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / metadata / properties
        Removed value: -{}
      • addedInput schema / properties / previous_response_id
        Added value: +{
        +  "description": "ID of a previous response to continue.",
        +  "type": "string"
        +}
      • addedInput schema / properties / prompt
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Reference to a reusable prompt template and variables.",
        +  "type": "object"
        +}
      • addedInput schema / properties / reasoning
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Reasoning configuration.",
        +  "type": "object"
        +}
      • removedInput schema / properties / reasoning_effort
        Removed value: -{
        -  "description": "Reasoning effort hint for compatible models.",
        -  "type": "string"
        -}
      • removedInput schema / properties / seed
        Removed value: -{
        -  "description": "Seed for deterministic-compatible providers.",
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • removedInput schema / properties / service_tier / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / service_tier / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • addedInput schema / properties / store
        Added value: +{
        +  "description": "Whether the response is stored for later retrieval.",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / stream
        Removed value: -{
        -  "const": false,
        -  "description": "MCP tool calls return one final result; omit stream or set it to false.",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / stream_options / additionalProperties
        Previous value: -falseNew value: +true
      • changedInput schema / properties / text / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / text / properties
        Removed value: -{}
      • changedInput schema / properties / tool_choice / oneOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / tools / description
        Previous value: -"Tools available to the model. For hosted image_generation tools that use the default image tool model or explicitly set model: gpt-image-2, TokenLab removes unsupported input_fidelity before forwarding because GPT Image 2 already treats image inputs as high fidelity. Do not send background: transparent for that tool; TokenLab does not silently remove it because that changes output semantics."New value: +"Tools available to the model. Tool types and combinations are validated by the selected service."
      • changedInput schema / properties / tools / items / additionalProperties
        Previous value: -{}New value: +true
      • removedInput schema / properties / tools / items / properties
        Removed value: -{}
      • addedInput schema / properties / top_p
        Added value: +{
        +  "description": "Nucleus sampling probability.",
        +  "type": "number"
        +}
      • addedInput schema / properties / truncation
        Added value: +{
        +  "description": "Truncation strategy for long conversations.",
        +  "type": "string"
        +}
      • removedInput schema / properties / truncation_strategy
        Removed value: -{
        -  "description": "Truncation strategy for long conversations when supported.",
        -  "type": "string"
        -}
      • removedInput schema / properties / user
        Removed value: -{
        -  "description": "End-user identifier.",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "model",
        -  "input"
        -]New value: +[
        +  "model"
        +]
    • Changedcreate_speech1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcreate_video13 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / end_image / description
        Previous value: -"Last frame image input for start-end-to-video flows. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image path."New value: +"Last frame image input for start-end-to-video flows. Seedance accepts a public image reference or asset://asset-YYYYMMDDHHMMSS-xxxxx for an ACTIVE TokenLab material owned by the requesting organization. When the selected Seedance model can use the TokenLab material library, TokenLab prepares ordinary image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cann…"
      • removedInput schema / properties / extend_at / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / frames / maximum
        Removed value: -9007199254740991
      • changedInput schema / properties / image / description
        Previous value: -"Inline image as a data URL (for example, data:image/png;base64,...). Prefer image_url for broader production compatibility. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image path."New value: +"Inline image as a data URL (for example, data:image/png;base64,...). Prefer image_url for broader production compatibility. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image pa…"
      • changedInput schema / properties / image_url / description
        Previous value: -"Publicly reachable image URL for image-to-video generation. Preferred over inline base64 in production. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image path."New value: +"Publicly reachable image URL for image-to-video generation, or asset://asset-YYYYMMDDHHMMSS-xxxxx for an ACTIVE TokenLab Seedance material used as the first frame. Preferred over inline base64 in production. TokenLab verifies material ownership. When the selected Seedance model can use the TokenLab material library, TokenLab prepares ordinary image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_mat…"
      • removedInput schema / properties / kling_elements / items / properties / element_input_urls / items / format
        Removed value: -"uri"
      • removedInput schema / properties / kling_elements / items / properties / element_input_urls / items / type
        Removed value: -"string"
      • removedInput schema / properties / kling_elements / items / properties / element_input_urls / maxItems
        Removed value: -4
      • removedInput schema / properties / kling_elements / items / properties / element_input_urls / minItems
        Removed value: -2
      • changedInput schema / properties / material_asset_id / description
        Previous value: -"TokenLab Seedance material asset ID returned by /v1/videos/assets, by automatic image preparation, or by a real-person verification bind flow. Use it after the asset is ACTIVE with Seedance models that can use the TokenLab material library. The asset must belong to the current account."New value: +"TokenLab Seedance material asset ID returned by /v1/videos/assets, by automatic image preparation, or from a real-person group returned by GetVisualValidateResult. Use it after the asset is ACTIVE with Seedance models that can use the TokenLab material library. The asset must belong to the current account. This field is a generic reference input; to assign first-frame, last-frame, or reference-image semantics explicitly, put asset://<material_asset_id> in start_image, end_image, or reference_im…"
      • changedInput schema / properties / reference_images / description
        Previous value: -"Canonical public reference-image field for reference-to-video conditioning. This endpoint currently allows up to 9 URLs or compatible data URLs; model-specific limits can be lower. xAI grok-imagine-video accepts up to 7 image references with duration capped at 10 seconds, and grok-imagine-video-1.5-preview does not accept reference images. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image path."New value: +"Canonical public reference-image field for reference-to-video conditioning. This endpoint currently allows up to 9 URLs, compatible data URLs, or for Seedance, asset://asset-YYYYMMDDHHMMSS-xxxxx URIs for ACTIVE TokenLab materials owned by the requesting organization; model-specific limits can be lower. xAI grok-imagine-video accepts up to 7 image references with duration capped at 10 seconds; grok-imagine-video-1.5 and grok-imagine-video-1.5-preview are image-to-video only and do not accept ref…"
      • changedInput schema / properties / start_image / description
        Previous value: -"First frame image input for start-end-to-video flows. When the selected Seedance model can use the TokenLab material library, TokenLab prepares this image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model cannot use the material library, ordinary image inputs continue on the regular image path."New value: +"First frame image input for start-end-to-video flows. Seedance accepts a public image reference or asset://asset-YYYYMMDDHHMMSS-xxxxx for an ACTIVE TokenLab material owned by the requesting organization. When the selected Seedance model can use the TokenLab material library, TokenLab prepares ordinary image input as a reusable material before generation; if it is not ACTIVE within 60 seconds, the API returns 409 seedance_material_preparing with auto_material_asset_ids. If the selected model can…"
    • Changeddelete_file2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / anthropic-beta
        Added value: +{
        +  "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.",
        +  "type": "string"
        +}
    • Changededit_image13 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / images / items / additionalProperties
        Added value: +false
      • removedInput schema / properties / images / items / allOf
        Removed value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "file_id": {
        -        "description": "A file id returned by TokenLab /v1/files and bound to the same image-edit configuration.",
        -        "type": "string"
        -      },
        -      "image_url": {
        -        "format": "uri",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "oneOf": [
        -      {},
        -      {}
        -    ]
        -  }
        -]
      • addedInput schema / properties / images / items / oneOf
        Added value: +[
        +  {},
        +  {}
        +]
      • addedInput schema / properties / images / items / properties
        Added value: +{
        +  "file_id": {
        +    "description": "A file id returned by TokenLab /v1/files and bound to the same image-edit configuration.",
        +    "type": "string"
        +  },
        +  "image_url": {
        +    "format": "uri",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / images / items / type
        Added value: +"object"
      • addedInput schema / properties / mask / additionalProperties
        Added value: +false
      • removedInput schema / properties / mask / allOf
        Removed value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "file_id": {
        -        "description": "A file id returned by TokenLab /v1/files and bound to the same image-edit configuration.",
        -        "type": "string"
        -      },
        -      "image_url": {
        -        "description": "Source mask image URL. Public http/https URLs and compatible data URLs are supported by the runtime validation path.",
        -        "format": "uri",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "oneOf": [
        -      {},
        -      {}
        -    ]
        -  }
        -]
      • addedInput schema / properties / mask / oneOf
        Added value: +[
        +  {
        +    "required": [
        +      "image_url"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "file_id"
        +    ]
        +  }
        +]
      • addedInput schema / properties / mask / properties
        Added value: +{
        +  "file_id": {
        +    "description": "A file id returned by TokenLab /v1/files and bound to the same image-edit configuration.",
        +    "type": "string"
        +  },
        +  "image_url": {
        +    "description": "Source mask image URL. Public http/https URLs and compatible data URLs are supported by the runtime validation path.",
        +    "format": "uri",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / mask / type
        Added value: +"object"
      • removedInput schema / properties / n / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / stream
        Removed value: -{
        -  "const": false,
        -  "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.",
        -  "type": "boolean"
        -}
    • Changededit_image_file3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / n / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / stream
        Removed value: -{
        -  "const": false,
        -  "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.",
        -  "type": "boolean"
        -}
    • Changedget_api_overview2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_model1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_model_pricing1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_pricing1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_task_status1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedlist_files7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / after_id
        Added value: +{
        +  "description": "Anthropic Files cursor. Return files after this public file id. Requires the Anthropic Files beta header and cannot be combined with before_id.",
        +  "type": "string"
        +}
      • addedInput schema / properties / anthropic-beta
        Added value: +{
        +  "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.",
        +  "type": "string"
        +}
      • addedInput schema / properties / before_id
        Added value: +{
        +  "description": "Anthropic Files cursor. Return files before this public file id. Requires the Anthropic Files beta header and cannot be combined with after_id.",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit / default
        Added value: +20
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +1000
      • addedInput schema / properties / scope_id
        Added value: +{
        +  "description": "Reserved Anthropic Files scope cursor. TokenLab currently returns an explicit unsupported error rather than silently ignoring this value.",
        +  "type": "string"
        +}
    • Changedlist_models1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrerank_documents3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / top_n / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / top_n / minimum
        Removed value: --9007199254740991
    • Changedretrieve_file2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / anthropic-beta
        Added value: +{
        +  "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.",
        +  "type": "string"
        +}
    • Changedretrieve_file_content1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedtranscribe_audio1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedtranslate_audio1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedtranslate_text1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedupload_file4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / anthropic-beta
        Added value: +{
        +  "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.",
        +  "type": "string"
        +}
      • changedInput schema / properties / purpose / description
        Previous value: -"Use batch for Batch API JSONL files. Use user_data or vision for image files that will be referenced from image edits."New value: +"Required in TokenLab/OpenAI-compatible mode: use batch for Batch API JSONL files, or user_data/vision for image edits. Omit in Anthropic Files mode."
      • changedInput schema / required
        Previous value: -[
        -  "file",
        -  "purpose"
        -]New value: +[
        +  "file"
        +]
  4. 2 tool updatesv0.6.3
    • Changedcreate_image5 fields changed
      • removedInput schema / properties / quality / default
        Removed value: -"standard"
      • changedInput schema / properties / quality / description
        Previous value: -"Image quality. GPT Image models such as gpt-image-2 use auto/low/medium/high. Other image families may use provider-specific values."New value: +"Image quality. Defaults and accepted values are model-specific. For gpt-image-2, omit this field or use auto for automatic quality, or send low, medium, or high. Other image families may use provider-specific values."
      • removedInput schema / properties / quality / enum
        Removed value: -[
        -  "standard",
        -  "hd",
        -  "auto",
        -  "low",
        -  "medium",
        -  "high"
        -]
      • removedInput schema / properties / size / default
        Removed value: -"1024x1024"
      • changedInput schema / properties / size / description
        Previous value: -"Image size. For gpt-image-2, use auto or WIDTHxHEIGHT; custom dimensions must both be multiples of 16, longest edge <= 3840px, long/short ratio <= 3:1, and total pixels between 655,360 and 8,294,400."New value: +"Image size. Defaults are model-specific. For gpt-image-2, omit this field or use auto for automatic sizing, or send WIDTHxHEIGHT; custom dimensions must both be multiples of 16, longest edge <= 3840px, long/short ratio <= 3:1, and total pixels between 655,360 and 8,294,400."
    • Changedlist_models5 fields changed
      • addedInput schema / properties / category
        Added value: +{
        +  "description": "Filter by model category.",
        +  "enum": [
        +    "chat",
        +    "embedding",
        +    "translation",
        +    "image",
        +    "video",
        +    "audio",
        +    "tts",
        +    "stt",
        +    "rerank",
        +    "3d",
        +    "music"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / provider
        Added value: +{
        +  "description": "Filter by public model provider, for example openai, anthropic, google, or minimax.",
        +  "type": "string"
        +}
      • addedInput schema / properties / recommended_for
        Added value: +{
        +  "description": "Sort supported non-chat models for a task category and include recommendation evidence.",
        +  "enum": [
        +    "image",
        +    "video",
        +    "music",
        +    "3d",
        +    "tts",
        +    "stt",
        +    "embedding",
        +    "rerank",
        +    "translation"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / tag
        Added value: +{
        +  "description": "Filter by a public capability tag.",
        +  "type": "string"
        +}
      • addedInput schema / properties / view
        Added value: +{
        +  "default": "compact",
        +  "description": "Compact model-selection output is the MCP default. Set view to full only when the complete OpenAI-compatible list shape is required.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  5. 1 tool updatev0.4.2
    • Changedcreate_chat_completion5 fields changed
      • changedInput schema / properties / messages / items / properties / content / oneOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "oneOf": [
        -        {
        -          "additionalProperties": {},
        -          "properties": {
        -            "text": {
        -              "type": "string"
        -            },
        -            "type": {
        -              "const": "text",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "text"
        -          ],
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": {},
        -          "properties": {
        -            "image_url": {
        -              "additionalProperties": {},
        -              "properties": {
        -                "detail": {
        -                  "enum": [
        -                    "auto",
        -                    "low",
        -                    "high"
        -                  ],
        -                  "type": "string"
        -                },
        -                "url": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "url"
        -              ],
        -              "type": "object"
        -            },
        -            "type": {
        -              "const": "image_url",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "image_url"
        -          ],
        -          "type": "object"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "oneOf": [
        +        {
        +          "additionalProperties": {},
        +          "properties": {
        +            "text": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "text",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "text"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": {},
        +          "properties": {
        +            "image_url": {
        +              "additionalProperties": {},
        +              "properties": {
        +                "detail": {
        +                  "enum": [
        +                    "auto",
        +                    "low",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                },
        +                "url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "url"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "image_url",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "image_url"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": {},
        +          "properties": {
        +            "type": {
        +              "const": "video_url",
        +              "type": "string"
        +            },
        +            "video_url": {
        +              "additionalProperties": {},
        +              "properties": {
        +                "url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "url"
        +              ],
        +              "type": "object"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "video_url"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": {},
        +          "properties": {
        +            "input_audio": {
        +              "additionalProperties": {},
        +              "properties": {
        +                "data": {
        +                  "description": "Public audio URL or Base64 data URL.",
        +                  "type": "string"
        +                },
        +                "format": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "input_audio",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "input_audio"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / repetition_penalty
        Added value: +{
        +  "description": "Repetition penalty for compatible models.",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / speech_rate
        Added value: +{
        +  "description": "Speech rate for compatible translated audio output.",
        +  "maximum": 2,
        +  "minimum": 0.5,
        +  "type": "number"
        +}
      • changedInput schema / properties / top_k / minimum
        Previous value: -1New value: +0
      • addedInput schema / properties / translation_options
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Language settings for models that translate audio or video through Chat Completions.",
        +  "properties": {
        +    "source_lang": {
        +      "description": "Source language code. Omit when the model supports automatic detection.",
        +      "type": "string"
        +    },
        +    "target_lang": {
        +      "description": "Target language code.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "target_lang"
        +  ],
        +  "type": "object"
        +}
  6. 30 tool updatesv0.3.1
    • Addedcancel_task
    • Changedcompare_models2 fields changed
      • removedInput schema / properties / include_raw / description
        Removed value: -"Return raw details and pricing payloads instead of compact summaries."
      • removedInput schema / properties / models / description
        Removed value: -"Public TokenLab model IDs to compare."
    • Addedcreate_3d_model
    • Changedcreate_anthropic_message25 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / max_tokens / default
        Removed value: -512
      • changedInput schema / properties / max_tokens / description
        Previous value: -"Maximum output tokens."New value: +"Maximum number of tokens to generate"
      • changedInput schema / properties / messages / description
        Previous value: -"Native Anthropic conversation messages."New value: +"Messages in the conversation"
      • addedInput schema / properties / messages / items / additionalProperties
        Added value: +{}
      • removedInput schema / properties / messages / items / properties / content / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]
      • addedInput schema / properties / messages / items / properties / content / oneOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "source": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "data": {
        +              "type": "string"
        +            },
        +            "media_type": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "enum": [
        +                "base64",
        +                "url"
        +              ],
        +              "type": "string"
        +            },
        +            "url": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "text": {
        +          "type": "string"
        +        },
        +        "type": {
        +          "enum": [
        +            "text",
        +            "image"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / messages / minItems
        Removed value: -1
      • changedInput schema / properties / metadata / description
        Previous value: -"Optional request metadata."New value: +"Request metadata echoed into downstream logs or traces when supported."
      • changedInput schema / properties / model / description
        Previous value: -"Public TokenLab Claude-compatible model ID."New value: +"Model to use (e.g., claude-sonnet-4-6)"
      • removedInput schema / properties / model / minLength
        Removed value: -1
      • removedInput schema / properties / prompt
        Removed value: -{
        -  "description": "Convenience shortcut for one user text message; do not combine with messages.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / properties / service_tier / description
        Previous value: -"Optional service-tier hint."New value: +"Service tier hint for compatible providers."
      • removedInput schema / properties / stop_sequences / description
        Removed value: -"Optional stop sequences."
      • addedInput schema / properties / stream
        Added value: +{
        +  "const": false,
        +  "default": false,
        +  "description": "MCP tool calls return one final result; omit stream or set it to false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / stream_options
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Streaming options such as usage chunk inclusion.",
        +  "properties": {},
        +  "type": "object"
        +}
      • changedInput schema / properties / system / description
        Previous value: -"Optional system prompt."New value: +"System prompt"
      • removedInput schema / properties / temperature / description
        Removed value: -"Optional sampling temperature."
      • changedInput schema / properties / thinking / description
        Previous value: -"Thinking configuration for compatible models."New value: +"Thinking configuration for compatible Anthropic-style models."
      • removedInput schema / properties / tool_choice / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / tool_choice / oneOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / tools / description
        Previous value: -"Native Anthropic tool definitions."New value: +"Tool definitions available to the model."
      • removedInput schema / properties / top_k / description
        Removed value: -"Optional top-k sampling cutoff."
      • removedInput schema / properties / top_p / description
        Removed value: -"Optional nucleus sampling probability."
      • changedInput schema / required
        Previous value: -[
        -  "model"
        -]New value: +[
        +  "model",
        +  "max_tokens",
        +  "messages"
        +]
    • Changedcreate_chat_completion60 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / audio / description
        Previous value: -"Optional audio output configuration."New value: +"Audio output configuration when requesting audio modality."
      • addedInput schema / properties / frequency_penalty / default
        Added value: +0
      • changedInput schema / properties / frequency_penalty / description
        Previous value: -"Optional frequency penalty."New value: +"Frequency penalty (-2 to 2)"
      • changedInput schema / properties / logit_bias / description
        Previous value: -"Optional per-token logit-bias map."New value: +"Per-token logit bias map."
      • addedInput schema / properties / logit_bias / properties
        Added value: +{}
      • removedInput schema / properties / logit_bias / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • changedInput schema / properties / logprobs / description
        Previous value: -"Whether to return output-token log probabilities."New value: +"Whether to return log probabilities for output tokens."
      • changedInput schema / properties / max_completion_tokens / description
        Previous value: -"Optional completion-token cap for compatible reasoning models."New value: +"Maximum completion tokens for newer reasoning-enabled model families"
      • changedInput schema / properties / max_tokens / description
        Previous value: -"Optional maximum generated tokens."New value: +"Maximum number of tokens to generate"
      • changedInput schema / properties / messages / description
        Previous value: -"OpenAI-compatible conversation messages, including text, image, tool, and function messages."New value: +"A list of messages comprising the conversation"
      • removedInput schema / properties / messages / items / properties / content / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / messages / items / properties / content / description
        Previous value: -"Text, OpenAI-compatible multimodal content parts, or null for tool/function messages."New value: +"Message content (text or multimodal)"
      • addedInput schema / properties / messages / items / properties / content / oneOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "oneOf": [
        +        {
        +          "additionalProperties": {},
        +          "properties": {
        +            "text": {
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "text",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "text"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": {},
        +          "properties": {
        +            "image_url": {
        +              "additionalProperties": {},
        +              "properties": {
        +                "detail": {
        +                  "enum": [
        +                    "auto",
        +                    "low",
        +                    "high"
        +                  ],
        +                  "type": "string"
        +                },
        +                "url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "url"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "image_url",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "image_url"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / messages / items / properties / name / description
        Previous value: -"Optional name for a function or tool message."New value: +"Name of the function/tool (for function/tool messages)"
      • changedInput schema / properties / messages / items / properties / role / description
        Previous value: -"OpenAI Chat Completions message role."New value: +"The role of the message author"
      • changedInput schema / properties / messages / items / properties / tool_call_id / description
        Previous value: -"Tool call ID answered by a tool message."New value: +"ID of the tool call being responded to"
      • changedInput schema / properties / messages / items / properties / tool_calls / description
        Previous value: -"Tool calls made by an assistant message."New value: +"Tool calls made by the assistant"
      • addedInput schema / properties / messages / items / properties / tool_calls / items / properties / function
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {
        +    "arguments": {
        +      "type": "string"
        +    },
        +    "name": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "name",
        +    "arguments"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / messages / items / properties / tool_calls / items / properties / id
        Added value: +{
        +  "description": "Tool call ID",
        +  "type": "string"
        +}
      • addedInput schema / properties / messages / items / properties / tool_calls / items / properties / type
        Added value: +{
        +  "const": "function",
        +  "type": "string"
        +}
      • addedInput schema / properties / messages / items / properties / tool_calls / items / required
        Added value: +[
        +  "id",
        +  "type",
        +  "function"
        +]
      • changedInput schema / properties / modalities / description
        Previous value: -"Optional requested output modalities, such as text or audio."New value: +"Requested output modalities such as text or audio."
      • removedInput schema / properties / modalities / minItems
        Removed value: -1
      • changedInput schema / properties / model / description
        Previous value: -"Public TokenLab model ID."New value: +"ID of the model to use (e.g., gpt-5.4, claude-sonnet-4-6)"
      • removedInput schema / properties / model / minLength
        Removed value: -1
      • addedInput schema / properties / n / default
        Added value: +1
      • changedInput schema / properties / n / description
        Previous value: -"Optional number of non-streaming completions."New value: +"Number of completions to generate"
      • changedInput schema / properties / parallel_tool_calls / description
        Previous value: -"Whether compatible models may make parallel tool calls."New value: +"Whether the model may issue parallel tool calls."
      • changedInput schema / properties / prediction / description
        Previous value: -"Optional prediction hint for compatible models."New value: +"Prediction hints for providers that support draft or speculative decoding."
      • addedInput schema / properties / presence_penalty / default
        Added value: +0
      • changedInput schema / properties / presence_penalty / description
        Previous value: -"Optional presence penalty."New value: +"Presence penalty (-2 to 2)"
      • changedInput schema / properties / reasoning_effort / description
        Previous value: -"Optional reasoning-effort hint for compatible models."New value: +"Reasoning effort hint for compatible model families."
      • addedInput schema / properties / response_format / additionalProperties
        Added value: +{}
      • changedInput schema / properties / response_format / description
        Previous value: -"Optional response format."New value: +"Response format specification"
      • removedInput schema / properties / response_format / required
        Removed value: -[
        -  "type"
        -]
      • changedInput schema / properties / seed / description
        Previous value: -"Optional deterministic seed for compatible models."New value: +"Seed for deterministic generation"
      • changedInput schema / properties / service_tier / description
        Previous value: -"Optional service-tier hint for compatible models."New value: +"Service tier hint for compatible providers."
      • removedInput schema / properties / stop / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "maxItems": 4,
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]
      • changedInput schema / properties / stop / description
        Previous value: -"Optional stop sequence or up to four stop sequences."New value: +"Stop sequences"
      • addedInput schema / properties / stop / oneOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 4,
        +    "type": "array"
        +  }
        +]
      • addedInput schema / properties / stream
        Added value: +{
        +  "const": false,
        +  "default": false,
        +  "description": "MCP tool calls return one final result; omit stream or set it to false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / stream_options
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Streaming options such as usage chunk inclusion.",
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / temperature / default
        Added value: +1
      • changedInput schema / properties / temperature / description
        Previous value: -"Optional sampling temperature."New value: +"Sampling temperature (0-2)"
      • removedInput schema / properties / tool_choice / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "none",
        -      "auto",
        -      "required"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "properties": {
        -      "function": {
        -        "properties": {
        -          "name": {
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "name"
        -        ],
        -        "type": "object"
        -      },
        -      "type": {
        -        "const": "function",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "function"
        -    ],
        -    "type": "object"
        -  }
        -]
      • changedInput schema / properties / tool_choice / description
        Previous value: -"Optional OpenAI tool-choice setting."New value: +"Controls which function is called"
      • addedInput schema / properties / tool_choice / oneOf
        Added value: +[
        +  {
        +    "enum": [
        +      "none",
        +      "auto",
        +      "required"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "function": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "name": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "name"
        +        ],
        +        "type": "object"
        +      },
        +      "type": {
        +        "const": "function",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "function"
        +    ],
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / tools / description
        Previous value: -"Optional OpenAI function tools available to the model."New value: +"List of tools the model may call"
      • addedInput schema / properties / tools / items / properties / function / properties / description / description
        Added value: +"Function description"
      • addedInput schema / properties / tools / items / properties / function / properties / name / description
        Added value: +"Function name"
      • addedInput schema / properties / tools / items / properties / function / properties / name / maxLength
        Added value: +64
      • removedInput schema / properties / tools / items / properties / function / properties / name / minLength
        Removed value: -1
      • addedInput schema / properties / tools / items / properties / function / properties / parameters / description
        Added value: +"JSON Schema for function parameters"
      • addedInput schema / properties / tools / items / properties / type / description
        Added value: +"Tool type (currently only 'function')"
      • changedInput schema / properties / top_k / description
        Previous value: -"Optional top-k sampling cutoff for compatible models."New value: +"Top-k sampling cutoff for compatible providers."
      • changedInput schema / properties / top_logprobs / description
        Previous value: -"Optional number of likely tokens to include with log probabilities."New value: +"Number of most likely tokens to return at each position when logprobs is enabled."
      • addedInput schema / properties / top_p / default
        Added value: +1
      • changedInput schema / properties / top_p / description
        Previous value: -"Optional nucleus sampling probability."New value: +"Nucleus sampling probability"
      • changedInput schema / properties / user / description
        Previous value: -"Optional end-user identifier."New value: +"End-user identifier for abuse detection"
    • Addedcreate_embedding
    • Changedcreate_gemini_content48 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / cachedContent / description
        Previous value: -"Optional cached content resource name."New value: +"Gemini cached content resource name for compatible models."
      • changedInput schema / properties / contents / description
        Previous value: -"Native Gemini conversation contents."New value: +"Conversation contents"
      • removedInput schema / properties / contents / items / properties / parts / items / additionalProperties
        Removed value: -{}
      • addedInput schema / properties / contents / items / properties / parts / items / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "text": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "inlineData": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "data": {
        +            "type": "string"
        +          },
        +          "mimeType": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "inline_data": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "data": {
        +            "type": "string"
        +          },
        +          "mime_type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "fileData": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "fileUri": {
        +            "type": "string"
        +          },
        +          "mimeType": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "file_data": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "file_uri": {
        +            "type": "string"
        +          },
        +          "mime_type": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "videoMetadata": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "video_metadata": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "thought": {
        +        "type": "boolean"
        +      },
        +      "thoughtSignature": {
        +        "type": "string"
        +      },
        +      "thought_signature": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "functionCall": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "functionResponse": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "executableCode": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "codeExecutionResult": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "function_call": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "function_response": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "executable_code": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "code_execution_result": {
        +        "additionalProperties": {},
        +        "properties": {},
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / contents / items / properties / parts / items / properties
        Removed value: -{}
      • removedInput schema / properties / contents / items / properties / parts / items / type
        Removed value: -"object"
      • removedInput schema / properties / contents / items / properties / parts / minItems
        Removed value: -1
      • removedInput schema / properties / contents / items / required
        Removed value: -[
        -  "parts"
        -]
      • removedInput schema / properties / contents / minItems
        Removed value: -1
      • removedInput schema / properties / generationConfig / description
        Removed value: -"Native Gemini generation configuration."
      • addedInput schema / properties / generationConfig / properties / candidateCount
        Added value: +{
        +  "description": "Number of response candidates for non-streaming generation. Streaming requests must omit this field or keep it at 1.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / generationConfig / properties / maxOutputTokens
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / generationConfig / properties / responseMimeType
        Added value: +{
        +  "description": "Requested output MIME type, such as text/plain or application/json.",
        +  "type": "string"
        +}
      • addedInput schema / properties / generationConfig / properties / responseModalities
        Added value: +{
        +  "description": "Requested output modalities for compatible native Gemini routes.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / generationConfig / properties / responseSchema
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "JSON schema for structured output when responseMimeType requests JSON.",
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / generationConfig / properties / stopSequences
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / generationConfig / properties / temperature
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / generationConfig / properties / thinkingConfig
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Thinking budget options for compatible Gemini models.",
        +  "properties": {
        +    "thinkingBudget": {
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / generationConfig / properties / thinking_config
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Snake-case thinking budget options for compatible Gemini models.",
        +  "properties": {
        +    "thinking_budget": {
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / generationConfig / properties / topK
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / generationConfig / properties / topP
        Added value: +{
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / model / description
        Previous value: -"Public TokenLab Gemini-compatible model ID."New value: +"Model name (e.g., gemini-2.5-pro)"
      • removedInput schema / properties / model / minLength
        Removed value: -1
      • removedInput schema / properties / prompt
        Removed value: -{
        -  "description": "Convenience shortcut for one user text part; do not combine with contents.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / safetySettings / description
        Removed value: -"Native Gemini safety settings."
      • addedInput schema / properties / safetySettings / items / properties / category
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / safetySettings / items / properties / threshold
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / systemInstruction / description
        Removed value: -"Native Gemini system instruction."
      • addedInput schema / properties / systemInstruction / properties / parts
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "text": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / temperature
        Removed value: -{
        -  "description": "Convenience temperature setting; do not combine with generationConfig.temperature.",
        -  "minimum": 0,
        -  "type": "number"
        -}
      • changedInput schema / properties / toolConfig / description
        Previous value: -"Native Gemini tool configuration."New value: +"Gemini tool configuration such as functionCallingConfig."
      • addedInput schema / properties / toolConfig / properties / functionCallingConfig
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {
        +    "allowedFunctionNames": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "mode": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / toolConfig / properties / function_calling_config
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {
        +    "allowed_function_names": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "mode": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / tools / description
        Previous value: -"Native Gemini tools."New value: +"Gemini tools. Supported tool combinations depend on the selected model and route; unsupported native image-output tool combinations are rejected before upstream retries."
      • addedInput schema / properties / tools / items / properties / codeExecution
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / code_execution
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / computerUse
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / computer_use
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / functionDeclarations
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / tools / items / properties / function_declarations
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / tools / items / properties / googleSearch
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / googleSearchRetrieval
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / google_search
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / google_search_retrieval
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / urlContext
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools / items / properties / url_context
        Added value: +{
        +  "additionalProperties": {},
        +  "properties": {},
        +  "type": "object"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model"
        -]New value: +[
        +  "model",
        +  "contents"
        +]
    • Addedcreate_image
    • Addedcreate_image_file
    • Addedcreate_multimodal_embedding
    • Addedcreate_music
    • Changedcreate_response23 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / include / description
        Previous value: -"Additional response sections to include."New value: +"Additional response sections to include when supported."
      • removedInput schema / properties / input / anyOf
        Removed value: -[
        -  {
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": {},
        -      "properties": {},
        -      "type": "object"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]
      • changedInput schema / properties / input / description
        Previous value: -"Responses API input as text or native structured input items."New value: +"Input content as a string or structured item array."
      • addedInput schema / properties / input / oneOf
        Added value: +[
        +  {
        +    "description": "Single string input.",
        +    "type": "string"
        +  },
        +  {
        +    "description": "Structured input items for the conversation.",
        +    "items": {},
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / instructions / description
        Previous value: -"Optional system/developer instructions."New value: +"System instructions"
      • changedInput schema / properties / max_output_tokens / description
        Previous value: -"Optional output token cap."New value: +"Maximum output tokens"
      • changedInput schema / properties / max_output_tokens / minimum
        Previous value: -1New value: +-9007199254740991
      • changedInput schema / properties / metadata / description
        Previous value: -"Optional request metadata."New value: +"Request metadata."
      • changedInput schema / properties / model / description
        Previous value: -"Public TokenLab model ID."New value: +"Model to use"
      • removedInput schema / properties / model / minLength
        Removed value: -1
      • changedInput schema / properties / reasoning_effort / description
        Previous value: -"Reasoning-effort hint for compatible models."New value: +"Reasoning effort hint for compatible models."
      • changedInput schema / properties / seed / description
        Previous value: -"Optional deterministic seed."New value: +"Seed for deterministic-compatible providers."
      • changedInput schema / properties / service_tier / description
        Previous value: -"Optional service-tier hint."New value: +"Service tier hint for compatible providers."
      • addedInput schema / properties / stream
        Added value: +{
        +  "const": false,
        +  "description": "MCP tool calls return one final result; omit stream or set it to false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / stream_options
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Responses streaming options.",
        +  "properties": {
        +    "include_obfuscation": {
        +      "description": "When true, request obfuscated tokens in Responses stream events from compatible upstreams.",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
      • removedInput schema / properties / temperature / description
        Removed value: -"Optional sampling temperature."
      • changedInput schema / properties / text / description
        Previous value: -"Optional native text formatting configuration."New value: +"Text formatting options."
      • removedInput schema / properties / tool_choice / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": {},
        -    "properties": {},
        -    "type": "object"
        -  }
        -]
      • addedInput schema / properties / tool_choice / oneOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / tools / description
        Previous value: -"Native Responses API tool definitions."New value: +"Tools available to the model. For hosted image_generation tools that use the default image tool model or explicitly set model: gpt-image-2, TokenLab removes unsupported input_fidelity before forwarding because GPT Image 2 already treats image inputs as high fidelity. Do not send background: transparent for that tool; TokenLab does not silently remove it because that changes output semantics."
      • changedInput schema / properties / truncation_strategy / description
        Previous value: -"Optional truncation strategy."New value: +"Truncation strategy for long conversations when supported."
      • changedInput schema / properties / user / description
        Previous value: -"Optional end-user identifier."New value: +"End-user identifier."
    • Addedcreate_speech
    • Addedcreate_video
    • Addeddelete_file
    • Addededit_image
    • Addededit_image_file
    • Changedget_model3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / model / description
        Previous value: -"Public TokenLab model ID, for example gpt-5.5 or gemini-3.5-flash."New value: +"The model ID"
      • removedInput schema / properties / model / minLength
        Removed value: -1
    • Changedget_model_pricing3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / model / description
        Previous value: -"Public TokenLab model ID."New value: +"The model ID"
      • removedInput schema / properties / model / minLength
        Removed value: -1
    • Addedget_pricing
    • Addedget_task_status
    • Addedlist_files
    • Changedlist_models3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit
        Removed value: -{
        -  "default": 25,
        -  "description": "Maximum number of models to return.",
        -  "maximum": 100,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / recommended_for
        Removed value: -{
        -  "description": "Optional task filter such as image, video, embedding, or rerank.",
        -  "enum": [
        -    "image",
        -    "video",
        -    "music",
        -    "3d",
        -    "tts",
        -    "stt",
        -    "embedding",
        -    "rerank",
        -    "translation"
        -  ],
        -  "type": "string"
        -}
    • Addedrerank_documents
    • Addedretrieve_file
    • Addedretrieve_file_content
    • Addedtranscribe_audio
    • Addedtranslate_audio
    • Addedtranslate_text
    • Addedupload_file
  7. 4 tool updatesv0.3.0
    • Changedcreate_anthropic_message13 fields changed
      • changedInput schema / properties / max_tokens / maximum
        Previous value: -8192New value: +9007199254740991
      • addedInput schema / properties / messages
        Added value: +{
        +  "description": "Native Anthropic conversation messages.",
        +  "items": {
        +    "properties": {
        +      "content": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "items": {
        +              "additionalProperties": {},
        +              "properties": {},
        +              "type": "object"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        ]
        +      },
        +      "role": {
        +        "enum": [
        +          "user",
        +          "assistant"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "role",
        +      "content"
        +    ],
        +    "type": "object"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / metadata
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Optional request metadata.",
        +  "properties": {},
        +  "type": "object"
        +}
      • changedInput schema / properties / prompt / description
        Previous value: -"User prompt text."New value: +"Convenience shortcut for one user text message; do not combine with messages."
      • addedInput schema / properties / service_tier
        Added value: +{
        +  "description": "Optional service-tier hint.",
        +  "type": "string"
        +}
      • addedInput schema / properties / stop_sequences
        Added value: +{
        +  "description": "Optional stop sequences.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / temperature
        Added value: +{
        +  "description": "Optional sampling temperature.",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / thinking
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Thinking configuration for compatible models.",
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tool_choice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    }
        +  ],
        +  "description": "Tool choice policy or explicit tool selection."
        +}
      • addedInput schema / properties / tools
        Added value: +{
        +  "description": "Native Anthropic tool definitions.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / top_k
        Added value: +{
        +  "description": "Optional top-k sampling cutoff.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / top_p
        Added value: +{
        +  "description": "Optional nucleus sampling probability.",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model",
        -  "prompt"
        -]New value: +[
        +  "model"
        +]
    • Addedcreate_chat_completion
    • Changedcreate_gemini_content11 fields changed
      • addedInput schema / properties / cachedContent
        Added value: +{
        +  "description": "Optional cached content resource name.",
        +  "type": "string"
        +}
      • addedInput schema / properties / contents
        Added value: +{
        +  "description": "Native Gemini conversation contents.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "parts": {
        +        "items": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "role": {
        +        "enum": [
        +          "user",
        +          "model"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "parts"
        +    ],
        +    "type": "object"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / generationConfig
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Native Gemini generation configuration.",
        +  "properties": {},
        +  "type": "object"
        +}
      • changedInput schema / properties / prompt / description
        Previous value: -"User prompt text."New value: +"Convenience shortcut for one user text part; do not combine with contents."
      • addedInput schema / properties / safetySettings
        Added value: +{
        +  "description": "Native Gemini safety settings.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / systemInstruction
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Native Gemini system instruction.",
        +  "properties": {},
        +  "type": "object"
        +}
      • changedInput schema / properties / temperature / description
        Previous value: -"Optional Gemini generation temperature."New value: +"Convenience temperature setting; do not combine with generationConfig.temperature."
      • removedInput schema / properties / temperature / maximum
        Removed value: -2
      • addedInput schema / properties / toolConfig
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Native Gemini tool configuration.",
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tools
        Added value: +{
        +  "description": "Native Gemini tools.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model",
        -  "prompt"
        -]New value: +[
        +  "model"
        +]
    • Changedcreate_response17 fields changed
      • addedInput schema / properties / include
        Added value: +{
        +  "description": "Additional response sections to include.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / input / anyOf
        Added value: +[
        +  {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / input / description
        Previous value: -"Responses API input text."New value: +"Responses API input as text or native structured input items."
      • removedInput schema / properties / input / minLength
        Removed value: -1
      • removedInput schema / properties / input / type
        Removed value: -"string"
      • changedInput schema / properties / max_output_tokens / maximum
        Previous value: -8192New value: +9007199254740991
      • addedInput schema / properties / metadata
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Optional request metadata.",
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / parallel_tool_calls
        Added value: +{
        +  "description": "Whether the model may issue parallel tool calls.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / reasoning_effort
        Added value: +{
        +  "description": "Reasoning-effort hint for compatible models.",
        +  "type": "string"
        +}
      • addedInput schema / properties / seed
        Added value: +{
        +  "description": "Optional deterministic seed.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / service_tier
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Optional service-tier hint."
        +}
      • addedInput schema / properties / temperature
        Added value: +{
        +  "description": "Optional sampling temperature.",
        +  "type": "number"
        +}
      • addedInput schema / properties / text
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Optional native text formatting configuration.",
        +  "properties": {},
        +  "type": "object"
        +}
      • addedInput schema / properties / tool_choice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    }
        +  ],
        +  "description": "Tool choice policy or explicit tool selection."
        +}
      • addedInput schema / properties / tools
        Added value: +{
        +  "description": "Native Responses API tool definitions.",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / truncation_strategy
        Added value: +{
        +  "description": "Optional truncation strategy.",
        +  "type": "string"
        +}
      • addedInput schema / properties / user
        Added value: +{
        +  "description": "Optional end-user identifier.",
        +  "type": "string"
        +}
  8. 8 tool updatesv0.2.0
    • First observedcompare_models
    • First observedcreate_anthropic_message
    • First observedcreate_gemini_content
    • First observedcreate_response
    • First observedget_api_overview
    • First observedget_model
    • First observedget_model_pricing
    • First observedlist_models

TDQS

C2.6/5.0

Scored across 32 tools

Disambiguation2/5

Several tools are near-duplicates or have overlapping purposes: create_image and create_image_file both say 'Creates an image given a prompt,' and edit_image and edit_image_file share identical descriptions. Provider-specific response tools (create_chat_completion, create_anthropic_message, create_gemini_content, create_response) and model/pricing discovery tools (get_pricing, get_model_pricing, compare_models, list_models, get_model) force agents to guess which one fits a given request.

Naming Consistency5/5

Every tool uses lowercase snake_case, and the names consistently follow a verb_noun pattern (create_, get_, list_, retrieve_, delete_, cancel_, edit_, compare_, etc.). There are no mixed conventions such as camelCase or vague standalone verbs.

Tool Count2/5

32 tools is above the typical well-scoped range and crosses the 'too many' threshold. The broad TokenLab platform explains some breadth, but redundant image/file aliases and multiple provider-specific generation tools inflate the surface beyond what an agent can easily navigate.

Completeness4/5

The surface covers a wide AI platform: chat completions, embeddings, image generation/editing, speech, transcription, translation, video, music, 3D, files, models, pricing, async task status, and decision evaluation. Minor gaps exist, notably cancel_task only supports queued Seedance video tasks and there are no update operations for file/model resources, but core workflows are broadly covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Read-only MCP server that answers questions about turva.dev from its published data. Five tools return JSON: the service catalog with prices, contact and operator details, engagement principles and dated agent-readiness and security evidence with verification links. Connect over Streamable HTTP. You need no API key. The server does not scan other websites or run audits.
    MIT