TokenLab MCP Server
The TokenLab MCP Server provides an MCP interface for discovering, comparing, and interacting with TokenLab's model catalog, plus optional AI inference via TokenLab APIs.
Public Catalog Tools (no API key required)
List models: Browse available models, optionally filtered by task type (image, video, music, 3D, TTS, STT, embedding, rerank, translation), up to 100 results.
Get model details: Fetch detailed information for a specific model by ID.
Get model pricing: Look up pricing for a specific model.
Compare models: Side-by-side comparison of details and pricing for 2–8 models, with compact or raw output options.
Get API overview: Fetch an agent-readable overview of the TokenLab API (
llms.txt).
Inference Tools (requires TOKENLAB_API_KEY)
Create response: Call the TokenLab Responses API with a text input, optional instructions, and output token cap.
Create Anthropic message: Call the Anthropic-compatible Messages API with a user prompt, optional system prompt, and token limit.
Create Gemini content: Call the Gemini-compatible
generateContentAPI with a user prompt and optional temperature setting.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TokenLab MCP Servershow me the latest pricing for models suitable for text generation"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TokenLab MCP Server
OpenAPI-generated Model Context Protocol server for TokenLab public model discovery, pricing, native LLM endpoints, 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, 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.17 generates 78 endpoint tools; with the two MCP-only composite discovery tools, the full profile returns 80 tools from tools/list.
Profile | Endpoint tools | Total registered tools | Model-facing schema | Coverage |
| 4 | 6 | Exact | Public model discovery and pricing only; no API key required |
| 29 | 31 | Portable | Catalog and pricing; Chat Completions, Responses, Anthropic Messages, Gemini generateContent; images, video, music, 3D, speech and transcription; async tasks; files; embeddings, rerank, and translation |
| 78 | 80 | 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, 31, and 80 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.
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 100 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.
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
structuredContentwhile retaining serialized text for older clients.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;
exactmode 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_modelandbuild_tokenlab_requestprompts 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 startInstall from npm:
npx -y @tokenlabai/mcp-serverAgent-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-serverAdd -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 tohttps://api.tokenlab.shTOKENLAB_API_KEY: optional; required for text inference, multimodal generation, async task, embedding, rerank, and translation toolsTOKENLAB_MCP_TOOL_PROFILE: optional,catalog,core(default), orfullTOKENLAB_MCP_SCHEMA_MODE: optional,portable,exact, orstrict; defaults to the selected profile's tested modeTOKENLAB_REQUEST_TIMEOUT_MS: optional request timeout in milliseconds, defaults to120000TOKENLAB_MCP_MAX_FILE_BYTES: optional maximum local upload size per file, defaults to104857600(100 MiB)TOKENLAB_MCP_INLINE_BYTES: optional maximum binary/JSON response size returned inline, defaults to2097152(2 MiB)TOKENLAB_ARTIFACT_DIR: optional output directory for non-inline response artifacts, defaults to the OS temp directory undertokenlab-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 outputAlways 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.17MCP registry name:
io.github.hedging8563/tokenlabpackage.json.mcpName:io.github.hedging8563/tokenlab
For a new release:
Bump the matching versions in
package.json,package-lock.json, andserver.json.Push a matching tag such as
v0.6.0.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.
Links
Website: https://tokenlab.sh/mcp
Docs: https://docs.tokenlab.sh
Model catalog: https://api.tokenlab.sh/v1/models
Available Tools
31 toolscancel_taskCancel async taskADestructiveIdempotent
Cancel async task 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The async task ID returned by `id` / `task_id`, or embedded in `poll_url` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive mutation (readOnlyHint=false, destructiveHint=true). Description adds specific context on cancellation conditions and supported tasks. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. First sentence states primary action, second provides necessary constraints. Front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple cancel operation with one parameter and no output schema, the description covers all necessary behavioral details, including restrictions and supported task types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema describes the single parameter 'id' with full coverage. Description adds no extra parameter details beyond what schema provides. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool cancels a queued async task, specifies supported task types (Seedance video tasks) and states. Distinguishes from siblings as no other cancel tool exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use (queued tasks with cancellation support) and when not (already processing, completed, failed, expired, unsupported). Provides concrete examples of supported task IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_modelsCompare TokenLab ModelsARead-onlyIdempotent
Compare public TokenLab model details and pricing for several model IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| models | Yes | ||
| include_raw | No |
TDQS
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.
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.
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.
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.
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.
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 taskC
Create 3D model generation task Creates a 3D model generation task using Tripo3D. Returns a task ID for polling.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Seed for deterministic-compatible providers. | |
| user | No | End-user identifier. | |
| image | No | Base64 image for image-to-3D | |
| model | No | tripo-h3.1 | |
| style | No | Style hint for compatible 3D model families. | |
| format | No | ||
| prompt | Yes | 3D model description | |
| quality | No | ||
| image_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (non-readOnly, non-idempotent) are consistent with the description stating a creation action. The description adds that it uses Tripo3D and returns a task ID, but does not disclose side effects, authorization needs, or polling behavior details. With annotations present, the bar is lower, but the description adds minimal context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but contains a redundant phrase ('Create 3D model generation task' repeated). It is not optimally structured and could be more concise without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters (1 required) and no output schema, the description only mentions returning a task ID. It does not explain how to poll for results, the role of optional parameters, or how they affect the output. This is insufficient for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56% (5 of 9 params have descriptions). The description does not document any parameters or add meaning beyond what the schema already provides. It fails to compensate for undocumented parameters like model, format, quality, and image_url.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool creates a 3D model generation task using Tripo3D and returns a task ID for polling. This distinguishes it from siblings like create_image or create_video. However, the first sentence is slightly redundant, repeating 'Create 3D model generation task' twice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 compared to siblings (e.g., create_image, create_video). There is no mention of prerequisites, when not to use it, or alternatives.
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
Create message (Anthropic-compatible) 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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model to use (e.g., claude-sonnet-4-6) | |
| tools | No | Tool definitions available to the model. | |
| top_k | No | ||
| top_p | No | ||
| system | No | System prompt | |
| messages | Yes | Messages in the conversation | |
| metadata | No | Request metadata echoed into downstream logs or traces when supported. | |
| thinking | No | Thinking configuration for compatible Anthropic-style models. | |
| max_tokens | Yes | Maximum number of tokens to generate | |
| temperature | No | ||
| tool_choice | No | Tool choice policy or explicit tool selection. | |
| service_tier | No | Service tier hint for compatible providers. | |
| stop_sequences | No | ||
| stream_options | No | Streaming options such as usage chunk inclusion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses authentication method and support for vision/streaming beyond annotations. However, does not describe response format, side effects of repeated calls, or rate limits, which would add further value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences covering purpose, capabilities, and authentication with no redundancy. Every sentence adds value, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a complex tool with 14 parameters and no output schema, but missing details on response format, error handling, and how to construct nested inputs like messages and tools. More context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 71% schema coverage, descriptions cover most parameters. The description adds context about vision and streaming, hinting at relevant parameters, but does not explain all complex nested object structures in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates an Anthropic-compatible message using native format. Differentiates from siblings like create_chat_completion (OpenAI) and create_gemini_content by specifying Anthropic's format and Claude models.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for Anthropic models with vision and streaming, but does not explicitly state when to use this tool over alternatives or provide exclusions. Lacks explicit 'when-not-to-use' guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of completions to generate | |
| seed | No | Seed for deterministic generation | |
| stop | No | Stop sequences | |
| user | No | End-user identifier for abuse detection | |
| audio | No | Audio output configuration when requesting audio modality. | |
| model | Yes | ID of the model to use (e.g., gpt-5.4, claude-sonnet-4-6) | |
| tools | No | List of tools the model may call | |
| top_p | No | Nucleus sampling probability | |
| logprobs | No | Whether to return log probabilities for output tokens. | |
| messages | Yes | A list of messages comprising the conversation | |
| functions | No | Deprecated function definitions retained by the official Chat Completions contract. | |
| logit_bias | No | Per-token logit bias map. | |
| max_tokens | No | Maximum number of tokens to generate | |
| modalities | No | Requested output modalities such as text or audio. | |
| prediction | No | Prediction hints for providers that support draft or speculative decoding. | |
| temperature | No | Sampling temperature (0-2) | |
| tool_choice | No | Controls which function is called | |
| service_tier | No | Service tier hint for compatible providers. | |
| top_logprobs | No | Number of most likely tokens to return at each position when logprobs is enabled. | |
| function_call | No | Deprecated function-call selection retained by the official Chat Completions contract. | |
| stream_options | No | Streaming options such as usage chunk inclusion. | |
| response_format | No | Response format specification | |
| presence_penalty | No | Presence penalty (-2 to 2) | |
| reasoning_effort | No | Reasoning effort hint for compatible model families. | |
| frequency_penalty | No | Frequency penalty (-2 to 2) | |
| parallel_tool_calls | No | Whether the model may issue parallel tool calls. | |
| translation_options | No | Language settings for models that translate audio or video through Chat Completions. | |
| max_completion_tokens | No | Maximum completion tokens for newer reasoning-enabled model families |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description reveals that the MCP boundary corrects recognized image payloads and rejects unrecognized generic binary before billing, adding valuable behavioral insight not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with front-loaded purpose and no redundant information. Every sentence contributes essential guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is complex (28 parameters, nested objects, no output schema), the description focuses narrowly on image handling. It lacks guidance on streaming, error handling, or expected return values, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds value by specifying inline image handling for the messages parameter, a critical detail beyond the schema's generic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create an OpenAI-compatible chat completion' with a specific verb and resource. It also provides precise handling instructions for image data URLs, distinguishing it from sibling tools like 'create_anthropic_message' or 'create_gemini_content'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool (chat completions with OpenAI-compatible models) and specific guidance on image MIME types. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_embeddingCreate embeddingsB
Create embeddings Creates an embedding vector representing the input text.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | End-user identifier | |
| input | Yes | Input text(s) or token array(s) to embed. | |
| model | Yes | ID of the model to use | |
| dimensions | No | Output vector dimensions | |
| encoding_format | No | Output format | float |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-destructive, non-idempotent operation. Description confirms it creates an embedding but adds no additional behavioral context like cost, storage, or side effects. Adequate but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is one sentence but begins with a redundant repetition of the title ('Create embeddings Creates...'). This wastes words without adding value. More concise phrasing would improve.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, and the description does not explain what is returned (e.g., vector, dimensions). Given the tool has 5 parameters and no return value documentation, the description is incomplete for an agent to fully understand behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Tool description adds no extra meaning beyond what's in the schema (e.g., just mentions 'input text'). Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Creates an embedding vector representing the input text,' clearly identifying the verb (creates) and resource (embedding vector). It distinguishes from sibling tools like create_multimodal_embedding by specifying 'text' input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for text embedding but provides no explicit guidance on when to use this tool versus alternatives such as create_multimodal_embedding or rerank_documents. No 'when to use' or 'when not to use' notes.
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
Generate content (Gemini-compatible) Generates content using the native Gemini GenerateContent shape. This route is exposed only when the model details advertise Gemini requests and a same-protocol route is currently available. ProtoJSON lowerCamelCase and original proto snake_case field names are preserved. Unknown fields are forwarded best-effort and support is determined by the selected provider. Authentication: Use ?key= query parameter, x-goog-api-key header, or Authorization: Bearer header.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model name (e.g., gemini-2.5-pro) | |
| tools | No | Gemini tools. Tool types and combinations are interpreted by the selected service. | |
| contents | Yes | Conversation contents | |
| toolConfig | No | Gemini tool configuration such as functionCallingConfig. | |
| tool_config | No | Original proto field-name spelling of toolConfig. | |
| cachedContent | No | Gemini cached content resource name for compatible models. | |
| cached_content | No | Original proto field-name spelling of cachedContent. | |
| safetySettings | No | ||
| safety_settings | No | Original proto field-name spelling of safetySettings. | |
| generationConfig | No | ||
| generation_config | No | Original proto field-name spelling of generationConfig. | |
| systemInstruction | No | ||
| system_instruction | No | Original proto field-name spelling of systemInstruction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) with no destructiveness. The description adds authentication requirements, preservation of field naming styles (lowerCamelCase and snake_case), and best-effort forwarding of unknown fields. It does not detail rate limits or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient, front-loading purpose and conditions, but could be more structured with bullet points for readability. No superfluous sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (13 parameters, nested objects) and absence of output schema, the description covers key contextual details: route availability, naming conventions, authentication, and forwarding behavior. It lacks provider-specific error handling or rate limit information, but remains fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 77% (high), so the description does not need to redocument parameters. It adds value by explaining authentication parameters (key, headers), naming convention duality, and provider-specific support for unknown fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly state this tool generates content using the Gemini GenerateContent shape, distinguishing it from siblings like create_chat_completion and create_anthropic_message which serve different model families.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies the route is exposed only when model details advertise Gemini requests and a same-protocol route is available, setting a clear precondition. It also explains naming conventions and authentication methods, though it lacks explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_imageCreate imageC
Create image Creates an image given a prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of images to generate | |
| seed | No | Seed for deterministic-compatible image models. | |
| size | No | 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. | |
| user | No | End-user identifier | |
| async | No | Return a task before the final image is ready when the selected model supports public async execution. | |
| model | Yes | Model to use. Send this explicitly; query GET /v1/models?recommended_for=image for current recommendations. | |
| style | No | Optional model-specific style selector. Only send when the selected model documents support for this parameter. | |
| prompt | Yes | Image description | |
| quality | No | 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. | |
| mask_url | No | Optional mask URL for compatible image operations. | |
| image_url | No | Single reference image URL for compatible image-to-image models. | |
| operation | No | Public image operation family. Reference-image models use image-to-image with image_url, image_urls, or reference_image_urls. | |
| background | No | 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. | |
| image_urls | No | Reference image URLs for compatible image-to-image models. | |
| moderation | No | Moderation strictness for compatible image models such as gpt-image-2 | |
| resolution | No | Resolution selector for compatible image model families. | |
| compression | No | Alias for output_compression when supported by the selected model | |
| aspect_ratio | No | Aspect-ratio selector for compatible image model families. | |
| expand_prompt | No | Ask compatible models to expand or enhance the prompt. | |
| output_format | No | Output image format for compatible image models such as gpt-image-2 | |
| negative_prompt | No | Content to avoid for compatible image models. | |
| response_format | No | Response format | url |
| output_compression | No | Output compression level from 0 to 100 for compressed formats | |
| reference_image_urls | No | Alias used by compatible reference-image model families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are limited (readOnlyHint=false, no destructive hint). Description adds minimal behavioral info: only that it creates an image from a prompt. Does not disclose async capability, model-specific behaviors, or that it can return multiple images. For a mutation tool, more transparency expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but wastes words repeating the name. Could be more structured to front-load key info like 'Generates images from prompts with model-specific options.'
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Very incomplete for a 24-parameter tool. No mention of return format, async option, model recommendations, or that many parameters are model-specific. Only covers the bare minimum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds no additional meaning beyond 'given a prompt'. Baseline 3 is appropriate as schema already documents parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States verb 'create' and resource 'image' clearly. However, it doesn't distinguish from sibling 'create_image_file' which likely creates a file object rather than returning image data. The description is adequate but not specific about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like edit_image or create_image_file. No context about required model selection or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_image_fileCreate imageC
Create image Creates an image given a prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| seed | No | ||
| size | No | ||
| user | No | ||
| async | No | ||
| image | No | Local reference image upload for compatible image-to-image models. Pass local file path. | |
| model | Yes | Model to use. Send this explicitly. | |
| style | No | ||
| prompt | Yes | Image description | |
| quality | No | ||
| mask_url | No | ||
| operation | No | ||
| background | No | ||
| image_urls | No | Comma-separated reference image URLs. | |
| moderation | No | ||
| resolution | No | ||
| compression | No | ||
| aspect_ratio | No | ||
| expand_prompt | No | ||
| output_format | No | ||
| negative_prompt | No | ||
| response_format | No | ||
| output_compression | No | ||
| reference_image_urls | No | Comma-separated reference image URLs for compatible model families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-readonly, non-idempotent, non-destructive, open-world. The description adds no new behavioral context beyond 'creates an image', which is consistent but redundant. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, but it wastes words by repeating the title. While short, it could be more informative without increasing length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (24 parameters, no output schema, minimal annotations), the one-sentence description is grossly inadequate. It fails to address usage context, return values, or operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 24 parameters and only 21% schema description coverage, the description provides no parameter details. It does not explain any parameter's purpose, thus failing to compensate for the schema's low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description merely restates the tool's name ('Create image Creates an image') without specifying what distinguishes it from sibling tools like 'create_image' or 'edit_image'. It lacks a clear verb-resource pair that differentiates its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., create_image, edit_image), nor any conditions for appropriate use. The agent receives no contextual decision support.
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 embeddingsA
Create multimodal embeddings Creates embeddings for multimodal input items. Text input is generally available; image input may require feature enablement.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | ||
| model | Yes | Model to use for multimodal embeddings | |
| dimensions | No | Optional embedding dimensionality when supported by the selected model |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation that is not read-only, not idempotent, and not destructive. The description adds the availability nuance for images, but does not disclose other behaviors such as rate limits, storage of embeddings, or return format. Given annotations, the description provides marginal additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no redundant or filler content. The first sentence states the purpose, the second adds a critical availability detail. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks essential context: there is no mention of return values (e.g., embedding vectors or IDs), error handling, or usage limitations. Since there is no output schema, the description should explain what the tool returns. The tool is moderately complex with 3 parameters, and the description fails to cover these aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, which is below the 80% threshold, so the description should compensate. The description adds the availability nuance for text vs image input, but does not elaborate on other parameter constraints or formats. The schema already describes most parameter details, so the description provides minimal added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates embeddings for multimodal input items, which distinguishes it from the sibling tool create_embedding (presumably text-only). The verb 'create' and resource 'multimodal embeddings' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use text vs image input, noting potential feature enablement requirements for images. However, it lacks explicit comparisons to sibling tools like create_embedding or guidance on when not to use this tool.
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
Create music generation task Creates a music generation task using Suno. Returns a task ID for polling.
| Name | Required | Description | Default |
|---|---|---|---|
| mv | No | Official Suno model version. Required when creating music (action omitted or MUSIC); omit for lyrics-only requests. | |
| tags | No | ||
| model | No | suno_music | |
| title | No | ||
| action | No | ||
| prompt | No | Music description. Required for music, lyrics, upload-cover, and upload-extend requests; omit for add-instrumental. | |
| audio_url | No | Publicly reachable reference or uploaded audio URL. Defaults to upload-cover when audio_operation is omitted. | |
| continue_at | No | Timestamp in seconds for continuation flows. Required when audio_operation is upload-extend. | |
| negative_tags | No | Styles to avoid. Required when audio_operation is add-instrumental. | |
| audio_operation | No | Uploaded-audio mode. upload-extend requires continue_at; add-instrumental requires audio_url, title, tags, and negative_tags. | |
| continue_clip_id | No | Clip ID to continue when extending an existing generation. | |
| make_instrumental | No | Generate instrumental output without vocals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (write), destructiveHint=false, and openWorldHint=true. The description adds that it returns a task ID for polling, implying asynchronous behavior. No contradiction with annotations found, but it does not disclose potential side effects, rate limits, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two sentences but is redundant: the first sentence repeats the title. It could be streamlined to one sentence without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (12 parameters, no output schema), the description is too sparse. It only mentions returning a task ID but does not explain how to use it, error handling, or success criteria. Essential context is missing for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage (8 of 12 parameters described), the description itself adds no parameter information. It does not explain any parameter meanings beyond what the schema already provides, failing to compensate for the missing documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool creates a music generation task using Suno and returns a task ID for polling. It clearly identifies the verb and resource, and the context of 'music' distinguishes it from other creation tools like create_image or create_video. However, it could be more specific about the nature of the task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like create_audio or other creation tools. There is no mention of prerequisites, ideal use cases, or situations where it should not be used.
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
Create response (OpenAI Responses API) Creates a response using the native OpenAI Responses API shape. The model details must advertise the Responses request format and a same-protocol route must be currently available; model names and providers do not imply availability. Unknown request fields are forwarded on a best-effort basis and remain subject to the selected provider's support.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Text formatting options. | |
| input | No | Input content as a string or structured item array. | |
| model | Yes | Model to use | |
| store | No | Whether the response is stored for later retrieval. | |
| tools | No | Tools available to the model. Tool types and combinations are validated by the selected service. | |
| top_p | No | Nucleus sampling probability. | |
| prompt | No | Reference to a reusable prompt template and variables. | |
| include | No | Additional response sections to include when supported. | |
| metadata | No | Request metadata. | |
| reasoning | No | Reasoning configuration. | |
| background | No | Whether to run the response asynchronously. | |
| truncation | No | Truncation strategy for long conversations. | |
| temperature | No | ||
| tool_choice | No | Tool choice policy or explicit tool selection. | |
| instructions | No | System instructions | |
| service_tier | No | Service tier hint for compatible providers. | |
| stream_options | No | Responses streaming options. | |
| max_output_tokens | No | Maximum output tokens | |
| parallel_tool_calls | No | Whether the model may issue parallel tool calls. | |
| previous_response_id | No | ID of a previous response to continue. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, open-world, non-idempotent, non-destructive. Description adds context about unknown field forwarding and model availability, but no additional behavioral traits like cost or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with redundant title repetition. Information is valuable but could be more structured and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given high schema coverage and annotations, description covers key behavioral aspects. Lacks overview of typical use cases vs. siblings, but sufficient for tool understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 95%, so baseline 3 applies. Description does not add parameter-level information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a response using the OpenAI Responses API, distinguishing it from siblings like create_chat_completion by specifying the required model advertisement and route availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear conditions for use (model must advertise Responses format, same-protocol route available) and describes best-effort forwarding of unknown fields, but does not explicitly state when not to use or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_speechCreate speechB
Create speech Generates audio from the input text (Text-to-Speech).
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Text to synthesize. | |
| model | No | TTS model. Query GET /v1/models?recommended_for=tts for the current shortlist. | tts-1 |
| speed | No | Speech speed for model families that support it. | |
| voice | No | Voice selector for OpenAI-compatible, Gemini, xAI, and MiniMax-compatible routes. Some MiniMax routes also accept voice_id. | |
| prompt | No | Optional speaking style prompt for Gemini TTS models. | |
| voice_id | No | Provider-native voice selector for MiniMax-compatible speech models. | |
| temperature | No | Sampling temperature for Gemini-compatible TTS routes. | |
| instructions | No | Optional style or delivery instructions for OpenAI-compatible TTS models that support them. | |
| language_code | No | Optional language code for Gemini, xAI, and compatible TTS routes. | |
| stream_format | No | TokenLab delivery format. stream_format=sse is not supported for tts-1 or tts-1-hd. | audio |
| response_format | No | Audio format. Common values include mp3, opus, aac, flac, wav, and pcm. Supported values vary by model family. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a non-read-only, non-destructive operation. The description accurately describes generation, but does not add behavioral context beyond the annotations, such as cost, latency, or side effects like file creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately conveys the tool's primary function. While very brief, it is appropriately front-loaded and contains no superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters and no output schema, the description lacks crucial context such as return type (e.g., audio file), format details, or expected behavior for different model families. More detail is needed for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 11 parameters. The tool description adds no additional meaning to parameters, maintaining the baseline score for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Create speech' and description 'Generates audio from the input text (Text-to-Speech)' clearly state the verb-resource relationship and the tool's specific function, distinguishing it from sibling tools like transcribe_audio or create_music.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not explain when to use this tool vs. alternatives (e.g., transcribe_audio) or mention any prerequisites, such as required voice model availability.
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 taskB
Create video generation task 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.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frames per second | |
| seed | No | Seed for reproducibility. Seedance uses -1 for random seed when omitted. | |
| size | No | Model-specific size tier for compatible video models. | |
| user | No | End-user identifier | |
| draft | No | Seedance 1.5 Pro draft workflow flag. Only supported by draft-capable Seedance routes; draft=true creates a low-cost draft task. | |
| image | No | 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… | |
| model | No | Model to use (e.g., veo3.1, kling-v1) | |
| ratio | No | Compatibility alias for aspect_ratio. If both ratio and aspect_ratio are provided, they must match. | |
| frames | No | Optional frame count for compatible video models. Seedance 2.0 models and Seedance 1.5 Pro do not support this field. | |
| prompt | No | Video description | |
| seconds | No | 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. | |
| task_id | No | Task identifier used by some continuation, extension, or derivative flows. | |
| duration | No | 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. | |
| priority | No | Optional task priority for compatible video models. Do not combine priority with service_tier=flex. | |
| audio_url | No | Publicly reachable audio URL for model-specific audio-conditioned video flows. | |
| cfg_scale | No | Prompt adherence strength (0-20) for models that expose CFG-style control. | |
| end_image | No | 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… | |
| extend_at | No | Model-specific extension start offset used by some video-extension flows. | |
| image_url | No | 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… | |
| operation | No | Requested video operation. If omitted, TokenLab infers the operation from the provided inputs. Explicit operation is recommended for production reliability. | |
| video_url | No | Publicly reachable video URL for video-to-video style flows and motion-control models. | |
| watermark | No | Optional watermark toggle for models that expose it. Seedance defaults to false when omitted. | |
| audio_urls | No | 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. | |
| image_urls | No | 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. | |
| resolution | No | Video resolution. Seedance defaults to 720p when omitted; available values are model-dependent. | |
| video_urls | No | 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. | |
| effect_type | No | Model-specific effect selector for specialized editing flows. | |
| outputAudio | No | Compatibility alias for output_audio. If both are provided, they must match. | |
| start_image | No | 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… | |
| aspect_ratio | No | Canonical video aspect ratio. Seedance defaults to adaptive when omitted. The ratio alias is accepted for compatibility. | |
| camera_fixed | No | Optional fixed-camera selector for compatible video models. Seedance 2.0 models do not support this field. | |
| extend_times | No | Model-specific extension multiplier or repeat count used by some video-extension flows. | |
| output_audio | No | 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. | |
| service_tier | No | 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. | |
| draft_task_id | No | Seedance 1.5 Pro draft promotion task ID. Provide this instead of draft=true to create the final video from a previous draft task. | |
| generate_audio | No | Compatibility alias for output_audio. If more than one audio toggle is provided, all values must match. | |
| kling_elements | No | 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. | |
| motion_strength | No | Motion intensity (0-1) for models that expose it. | |
| negative_prompt | No | What to avoid in the video | |
| reference_images | No | 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… | |
| material_asset_id | No | 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… | |
| return_last_frame | No | Return the last generated frame when the selected model supports it. Seedance defaults to false when omitted. | |
| safety_identifier | No | Optional safety/user trace identifier for compatible video models. If omitted for Seedance, TokenLab uses user when provided. | |
| material_asset_ids | No | 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. | |
| reference_image_type | No | Optional reference image role for models that distinguish between asset and style references. The camelCase alias referenceImageType is accepted for compatibility. | |
| execution_expires_after | No | Optional execution expiry window in seconds for compatible video models. Seedance defaults to 172800 seconds when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that the task is asynchronous and instructs clients to poll the poll_url first or use the fixed status endpoint. This adds behavioral context beyond the annotations (which only indicate readOnlyHint=false and not destructive). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) but contains a redundant phrase at the beginning ('Create video generation task Creates'). It is not perfectly concise and could be streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 46 parameters, 0 required, and no output schema, the description is too minimal. It does not explain the complex parameter interactions, operation types, or provide high-level context for how to construct a valid request. The parameter descriptions in the schema are detailed, but the tool description itself lacks completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters thoroughly. The tool description adds no additional parameter-level details beyond what is in the schema, earning the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates an asynchronous video generation task, uses the verb 'create', and specifies the resource (video generation task). However, it starts with a redundant phrase 'Create video generation task' that restates the title, and does not distinguish from sibling creation tools like create_image or create_3d_model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention when not to use it or what context is appropriate for video generation versus other creation tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileDelete fileBDestructiveIdempotent
Delete file 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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | File ID returned by the Files API. | |
| anthropic-beta | No | Include files-api-2025-04-14 to use Anthropic Files API mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false. The description adds context about the types of files it can delete (batch, bound image/reference) and the optional beta mode, but does not elaborate on irreversible nature or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences; the first is redundant ('Delete file' repeats the title). Could be tighter, but overall brief and front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool, the description covers the action and the special beta mode. However, it omits return value expected (no output schema), error behavior, and whether deletion is asynchronous. Adequate but with noticeable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The main description adds no additional semantics beyond the schema; it mentions the beta header in passing but does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it deletes files, specifying types (batch file or bound image/reference file). It distinguishes from siblings like retrieve_file or list_files by its destructive action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like retrieve_file or edit_image. The only usage hint is about the anthropic-beta header for a specific API mode, but no context on when deletion is appropriate or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_imageEdit imageC
Edit image Edits an image using multipart image uploads, JSON image URLs, or the official JSON images array for supported GPT Image models.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| mask | No | 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. | |
| size | No | ||
| user | No | ||
| async | No | Return a task before the edited image is ready for models that support public async execution. | |
| model | Yes | Model to use for image edits. Send this explicitly. | |
| images | No | 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. | |
| prompt | Yes | ||
| quality | No | ||
| image_url | No | Single source image URL. Kept for TokenLab compatibility; use images for the official JSON shape. | |
| background | No | ||
| image_urls | No | Multiple source image URLs. GPT Image edits accept up to 16 source images; xAI Grok Imagine edit models accept at most 3 source images. | |
| moderation | No | ||
| resolution | No | ||
| compression | No | ||
| aspect_ratio | No | ||
| output_format | No | ||
| response_format | No | ||
| output_compression | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (mutation) and openWorldHint=true (accepts extra parameters), but the description adds little beyond mentioning input methods. It does not disclose behavior like error handling, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but contains redundancy (repeating 'Edit image' in the first sentence). It could be more concise but is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 19 parameters, nested objects, no output schema, and low schema coverage, the description is woefully incomplete. It does not explain return values, required parameter combinations, or constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 32%, and the description fails to explain the many undocumented parameters. It only mentions the three input methods, leaving agents unclear on how to use size, quality, background, etc.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool edits images and mentions three input methods (multipart, JSON URLs, images array) for supported GPT Image models. However, it does not explicitly distinguish this tool from sibling tools like create_image or edit_image_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs other image-related tools. The description does not specify prerequisites, recommended scenarios, or when to choose alternative tools.
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
Edit image Edits an image using multipart image uploads, JSON image URLs, or the official JSON images array for supported GPT Image models.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| mask | No | Pass local file path. | |
| size | No | ||
| user | No | ||
| async | No | ||
| image | No | 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. | |
| model | Yes | Model to use for image edits. Send this explicitly, for example gpt-image-2. | |
| prompt | Yes | ||
| image[] | No | 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. | |
| quality | No | ||
| background | No | ||
| moderation | No | ||
| resolution | No | ||
| compression | No | ||
| aspect_ratio | No | ||
| output_format | No | ||
| response_format | No | ||
| output_compression | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only behavior. The description adds context about input methods (multipart, JSON URLs, etc.) but does not disclose side effects, permissions, or what happens to the original image.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single run-on sentence with redundancy ('Edit image Edits an image'). It could be more concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 18 parameters and no output schema, the description is too brief. It omits return values, step-by-step usage, and model-specific behaviors for non-GPT models.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 22% schema description coverage, the description does not add meaning to individual parameters beyond the schema's few descriptions. It mentions input methods but does not help understand the many undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool edits an image, but it is redundant ('Edit image Edits an image') and does not differentiate from the sibling 'edit_image' tool, causing confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like 'edit_image' or 'create_image_file'. The description lacks any context about when to prefer this tool.
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 OverviewARead-onlyIdempotent
Fetch TokenLab's agent-readable API overview.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 modelARead-onlyIdempotent
Get model 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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | The model ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint false. Description adds context on what data is returned but does not disclose additional behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core purpose. Efficient but could be slightly more concise by removing redundancy (e.g., 'Get model' in title already says purpose).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, description covers expected return content (operations, params, endpoints, limits, pricing) and includes a usage directive. Completely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: single parameter 'model' described as 'The model ID'. Description does not add extra meaning or constraints beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly specifies the action ('get') and resource ('model details'), and lists specific content (operations, params, endpoints, limits, pricing). Distinguishes from sibling tools like get_model_pricing and list_models.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit direction: 'Non-chat integrations should read these... before creating a request.' Implies use-case but doesn't explicitly exclude alternatives like get_model_pricing for pricing-only queries.
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 pricingARead-onlyIdempotent
Get model pricing Retrieves pricing-only detail for one model. Use this endpoint for price explanation, not for non-chat request construction.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | The model ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as readOnly, openWorld, idempotent, and not destructive. The description adds minimal context ('pricing-only detail' and usage hint). It does not contradict annotations, but the annotations carry the main behavioral burden. The description adds some value but not much beyond what's already structured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no fluff. The first sentence clearly states the action, and the second adds usage guidance. Every sentence is meaningful and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, no output schema), the description provides adequate context. It explains the purpose and usage boundaries. Annotations cover behavioral traits. A minor gap is that it doesn't describe the return format or example output, but that may be inferred from 'pricing-only detail'. Overall, it is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'model' with a brief description 'The model ID'. Schema description coverage is 100%. The tool description does not add any additional semantics or formatting details for the parameter, so it neither harms nor improves beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves pricing-only detail for one model. It specifies 'pricing-only detail' and distinguishes its use for price explanation, not for non-chat request construction. However, it does not explicitly differentiate from the sibling tool 'get_pricing', which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: 'Use this endpoint for price explanation, not for non-chat request construction.' It tells when to use (price explanation) and when not to (non-chat request construction), but it does not mention alternatives or compare to other pricing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingList model pricingBRead-onlyIdempotent
List model pricing Returns the public pricing surface for active models, with optional provider and tag filters.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by model tag. | |
| provider | No | Filter by provider ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds that it returns the 'public pricing surface' and mentions optional filters, which is useful but does not disclose response format, pagination, or rate limits. Adds moderate value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is very short, but the phrasing 'List model pricing Returns...' appears to be two fragments without punctuation, slightly reducing clarity. However, it is still mostly concise and front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description could mention the response format or return type. It is adequate but not thorough; the annotations cover safety aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters having clear descriptions ('Filter by model tag.' and 'Filter by provider ID.'). The description merely repeats 'optional provider and tag filters' without adding new meaning, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists model pricing for active models with optional filters. The verb 'List' and resource 'model pricing' are specific. Distinguishes from sibling 'get_model_pricing' by implying a comprehensive listing vs. potentially a single model, but not explicitly stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not mention when not to use or provide context about prerequisites or exclusions.
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 statusARead-onlyIdempotent
Get async task status 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The async task ID returned by `id` / `task_id`, or embedded in `poll_url` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive nature. Description adds context about two access methods (poll_url vs canonical), which is behavioral information beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines purpose, second provides usage guidance. No wasted words, information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and rich annotations, the description sufficiently covers purpose and ID sources. However, it omits any mention of the return format, which could be helpful since no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds meaning by explaining the parameter can come from `id`, `task_id`, or be embedded in `poll_url`. This aids the agent in correctly obtaining the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves status and result of an async generation task. It specifies the verb 'get', the resource 'async task status', and distinguishes from other purposes by mentioning polling vs canonical endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance to prefer the `poll_url` returned by the create response, and contrasts with the canonical `/v1/tasks/{id}` endpoint. This helps the agent choose between alternatives, though it doesn't explicitly mention when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesList filesDRead-onlyIdempotent
List files
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No | ||
| purpose | No | 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. | |
| after_id | No | Anthropic Files cursor. Return files after this public file id. Requires the Anthropic Files beta header and cannot be combined with before_id. | |
| scope_id | No | Reserved Anthropic Files scope cursor. TokenLab currently returns an explicit unsupported error rather than silently ignoring this value. | |
| before_id | No | Anthropic Files cursor. Return files before this public file id. Requires the Anthropic Files beta header and cannot be combined with after_id. | |
| anthropic-beta | No | Include files-api-2025-04-14 to use Anthropic Files API mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint). Annotations already indicate safety, but the description fails to mention pagination, cursor usage, or beta header requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short but not informative. It is under-specified, wasting the opportunity to provide essential context in a concise manner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and complex features (pagination cursors, purpose enum, beta header), the description is completely inadequate. An agent cannot determine behavior like filtering, pagination limits, or mode switching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71% (below 80%), so the description should compensate but does not. It adds no meaning beyond what the schema already provides for parameters like 'purpose', 'after', 'before_id', etc.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., retrieve_file for a single file). No context on prerequisites or typical usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsList modelsARead-onlyIdempotent
List models 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.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by a public capability tag. | |
| view | No | Compact model-selection output is the MCP default. Set view to full only when the complete OpenAI-compatible list shape is required. | compact |
| category | No | Filter by model category. | |
| provider | No | Filter by public model provider, for example openai, anthropic, google, or minimax. | |
| recommended_for | No | Sort supported non-chat models for a task category and include recommendation evidence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, clearly indicating a safe read operation. The description adds behavioral context about view defaults and recommended_for usage, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively short and front-loaded with the core purpose. It could be slightly more structured, but it contains no filler and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description gives a high-level idea of the output (list, OpenAI-compatible shape) but does not detail the structure or fields returned. For a list tool, this is acceptable but leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 5 parameters are well-described in the schema (100% coverage). The description adds extra meaning for view (explains defaults and use cases) and recommended_for (non-chat recommendations), providing value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists available models, and distinguishes between views for model selection vs. full OpenAI-compatible shape. It differentiates from siblings like get_model and create tools by focusing on listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use view=compact vs view=full, and mentions non-chat recommendations via recommended_for. However, it does not explicitly contrast with other list-like tools (e.g., list_files) or specify when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rerank_documentsRerank documentsC
Rerank documents Reranks documents by relevance to a query using semantic similarity.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Reranker model to use | |
| query | Yes | Query to rank against | |
| top_n | No | Number of results to return | |
| documents | Yes | Documents to rerank | |
| return_documents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds no behavioral details beyond the basic function. No mention of side effects, required permissions, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short but contains repetition ('Rerank documents Reranks documents'), which reduces clarity. It could be condensed into one sentence without loss of meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, and the description does not explain what the tool returns or how to interpret the reranked documents. Given the complexity of reranking, more context (e.g., ordering, scoring) would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so baseline is 3. The description does not add any parameter-level details beyond the schema. It only restates the tool's purpose, not parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'rerank' and the resource 'documents', and explains it uses semantic similarity for relevance ranking. It distinguishes from sibling tools which are mostly for generation, embedding, or file operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention when not to use it. It simply states what it does without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_fileRetrieve fileDRead-onlyIdempotent
Retrieve file
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | ||
| anthropic-beta | No | Include files-api-2025-04-14 to use Anthropic Files API mode. |
TDQS
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.
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.
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.
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.
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.
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 contentDRead-onlyIdempotent
Retrieve file content
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
Create transcription Transcribes audio into text (Speech-to-Text).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Audio file to transcribe Pass local file path. | |
| model | Yes | Model to use (whisper-1) | |
| prompt | No | Optional prompt text | |
| language | No | ISO-639-1 language code | |
| temperature | No | Sampling temperature | |
| response_format | No | Response format | json |
| timestamp_granularities | No | Timestamp granularity selection. Requires verbose_json output when requesting word-level timestamps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds no behavioral context beyond these annotations, such as side effects or resource creation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but awkwardly constructed with 'Create transcription Transcribes...' It could be a single clear sentence. Information density is low, but no filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, 2 required, and no output schema, the description provides minimal context. It does not explain return values, file handling, or limitations. The annotations are sparse, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters have descriptions. The tool description does not add additional meaning beyond the schema, but it does not detract. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool transcribes audio to text using 'Speech-to-Text'. It identifies the verb and resource, differentiating from sibling 'translate_audio'. However, the phrase 'Create transcription' is slightly redundant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'translate_audio' or 'create_chat_completion'. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_audioTranslate audioB
Translate audio Transcribes audio and translates the result to English.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Pass local file path. | |
| model | No | whisper-1 | |
| prompt | No | ||
| temperature | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (mutation), destructiveHint=false, openWorldHint=true. The description only says 'transcribes and translates to English', adding no behavioral context beyond annotations (e.g., file constraints, language support, result handling).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (one fragment). While front-loaded and concise, it lacks structure and omits important details. Not overly verbose but under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no output schema, and low schema coverage, the description does not explain key aspects like model options, prompt usage, or output format. Significant gaps for a complex translation task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 20% (only file has a description). The description does not clarify parameters like model, prompt, temperature, or response_format, leaving 4 parameters undocumented. Description fails to compensate for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool transcribes audio and translates to English, distinguishing it from siblings like transcribe_audio (transcription only) and translate_text (text input).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for audio-to-English translation tasks but does not explicitly state when to use it versus alternatives like transcribe_audio or translate_text, nor does it provide prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_textTranslate textC
Translate text Translates text into a target language using the current translation request format.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| user | No | ||
| model | Yes | ||
| mime_type | No | ||
| source_language | No | ||
| target_language | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present (readOnlyHint=false, openWorldHint=true), but the description adds no additional behavioral context beyond 'translates text'. It does not disclose synchronous/asynchronous behavior, auth needs, rate limits, or any side effects hinted by openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, but the first sentence 'Translate text' is redundant with the title. Could be merged into one concise sentence. Overall efficient but not optimally structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters and no output schema, the description is insufficient. It does not explain return format, error handling, or any additional context like nesting or enum details (only mime_type has enum).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mentions 'text' and 'target_language' implicitly, but does not explain 'model', 'user', 'mime_type', or 'source_language'. Only a fraction of the parameters are addressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it translates text into a target language, which is a specific verb+resource. However, it does not differentiate from sibling tools like translate_audio beyond the resource type (text vs audio), and the phrase 'using the current translation request format' is vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like translate_audio or other translation tools. No when-not-to-use or prerequisite information provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileUpload fileB
Upload file 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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Pass local file path. | |
| model | No | Optional TokenLab extension for image file uploads. Defaults to gpt-image-2 and binds the returned file_id to the selected image-edit configuration. | |
| purpose | No | 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. | |
| anthropic-beta | No | Include files-api-2025-04-14 to use Anthropic Files API mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and openWorldHint=true, and the description confirms a write operation. It mentions returning metadata for Anthropic mode but does not elaborate on persistence or other side effects. It adds some context but falls short of full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences but starts with a redundant 'Upload file' that repeats the title. The second sentence is dense but informative. Could be trimmed for conciseness without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, but the description only mentions the return value for Anthropic Files mode. For the primary TokenLab/OpenAI mode, it does not specify the return format (e.g., a file object with id). This is a significant gap in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds meaningful context: explaining the purpose parameter's three values, the model parameter's default and binding behavior, and the anthropic-beta header's effect. This adds value beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool uploads TokenLab/OpenAI-compatible batch or image files, and optionally Anthropic Files resource via a header. It distinguishes between two modes, but the initial repetition of 'Upload file' and mixing of modes could be clearer. No explicit sibling differentiation, but the purpose is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use each mode (TokenLab/OpenAI vs Anthropic Files) based on the anthropic-beta header. However, it does not guide the agent away from alternatives like create_image_file or edit_image_file, nor does it specify prerequisites or limitations.
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. Dates show when Glama detected each change.
31 tool updates
v0.6.4- Changed
cancel_task1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
compare_models2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_3d_model3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / seed / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / seed / minimumRemoved value: --9007199254740991
- Changed
create_anthropic_message15 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / max_tokens / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / messages / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / messages / items / properties / content / oneOfRemoved 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" - } -] - changed
Input schema / properties / metadata / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / metadata / propertiesRemoved value: -{} - removed
Input schema / properties / streamRemoved value: -{ - "const": false, - "default": false, - "description": "MCP tool calls return one final result; omit stream or set it to false.", - "type": "boolean" -} - changed
Input schema / properties / stream_options / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / stream_options / propertiesRemoved value: -{} - changed
Input schema / properties / thinking / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / thinking / propertiesRemoved value: -{} - changed
Input schema / properties / tool_choice / oneOfPrevious value: -[ - { - "type": "string" - }, - { - "additionalProperties": {}, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } +] - changed
Input schema / properties / tools / items / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / tools / items / propertiesRemoved value: -{} - removed
Input schema / properties / top_k / maximumRemoved value: -9007199254740991
- Changed
create_chat_completion35 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Input schema / properties / audio / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / audio / propertiesRemoved value: -{} - added
Input schema / properties / function_callAdded value: +{ + "description": "Deprecated function-call selection retained by the official Chat Completions contract.", + "oneOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } + ] +} - added
Input schema / properties / functionsAdded value: +{ + "description": "Deprecated function definitions retained by the official Chat Completions contract.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - removed
Input schema / properties / logit_bias / propertiesRemoved value: -{} - removed
Input schema / properties / max_completion_tokens / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / max_tokens / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / messages / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / messages / items / properties / content / oneOfRemoved 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" - } -] - removed
Input schema / properties / messages / items / properties / tool_calls / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / messages / items / properties / tool_calls / items / propertiesRemoved 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" - } -} - removed
Input schema / properties / messages / items / properties / tool_calls / items / requiredRemoved value: -[ - "id", - "type", - "function" -] - removed
Input schema / properties / messages / items / properties / tool_calls / items / typeRemoved value: -"object" - changed
Input schema / properties / prediction / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / prediction / propertiesRemoved value: -{} - removed
Input schema / properties / repetition_penaltyRemoved value: -{ - "description": "Repetition penalty for compatible models.", - "exclusiveMinimum": 0, - "type": "number" -} - removed
Input schema / properties / response_format / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / seed / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / seed / minimumRemoved value: --9007199254740991 - removed
Input schema / properties / service_tier / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / service_tier / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / speech_rateRemoved value: -{ - "description": "Speech rate for compatible translated audio output.", - "maximum": 2, - "minimum": 0.5, - "type": "number" -} - removed
Input schema / properties / streamRemoved value: -{ - "const": false, - "default": false, - "description": "MCP tool calls return one final result; omit stream or set it to false.", - "type": "boolean" -} - changed
Input schema / properties / stream_options / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / stream_options / propertiesRemoved value: -{} - changed
Input schema / properties / tool_choice / oneOfPrevious 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" + } +] - removed
Input schema / properties / tools / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / function / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / function / propertiesRemoved 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" - } -} - removed
Input schema / properties / tools / items / properties / function / requiredRemoved value: -[ - "name" -] - removed
Input schema / properties / tools / items / properties / type / constRemoved value: -"function" - added
Input schema / properties / tools / items / properties / type / enumAdded value: +[ + "function" +] - removed
Input schema / properties / top_kRemoved value: -{ - "description": "Top-k sampling cutoff for compatible providers.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" -} - removed
Input schema / properties / translation_options / additionalPropertiesRemoved value: -{}
- Changed
create_embedding3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dimensions / maximumRemoved value: -9007199254740991 - changed
Input schema / properties / input / oneOfPrevious 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" + } +]
- Changed
create_gemini_content58 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / cached_contentAdded value: +{ + "description": "Original proto field-name spelling of cachedContent.", + "type": "string" +} - removed
Input schema / properties / contents / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / contents / items / properties / parts / items / anyOfRemoved 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" - } -] - removed
Input schema / properties / generationConfig / additionalPropertiesRemoved value: -{} - changed
Input schema / properties / generationConfig / properties / candidateCount / descriptionPrevious 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." - removed
Input schema / properties / generationConfig / properties / candidateCount / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / generationConfig / properties / maxOutputTokens / maximumRemoved value: -9007199254740991 - changed
Input schema / properties / generationConfig / properties / responseSchema / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / generationConfig / properties / responseSchema / propertiesRemoved value: -{} - changed
Input schema / properties / generationConfig / properties / thinkingConfig / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / generationConfig / properties / thinkingConfig / properties / thinkingBudget / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / generationConfig / properties / thinkingConfig / properties / thinkingBudget / minimumRemoved value: --9007199254740991 - changed
Input schema / properties / generationConfig / properties / thinking_config / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / generationConfig / properties / thinking_config / properties / thinking_budget / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / generationConfig / properties / thinking_config / properties / thinking_budget / minimumRemoved value: --9007199254740991 - removed
Input schema / properties / generationConfig / properties / topK / maximumRemoved value: -9007199254740991 - added
Input schema / properties / generation_configAdded value: +{ + "additionalProperties": true, + "description": "Original proto field-name spelling of generationConfig.", + "type": "object" +} - removed
Input schema / properties / safetySettings / items / additionalPropertiesRemoved value: -{} - added
Input schema / properties / safety_settingsAdded value: +{ + "description": "Original proto field-name spelling of safetySettings.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - removed
Input schema / properties / systemInstruction / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / systemInstruction / properties / parts / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / systemInstruction / properties / parts / items / propertiesRemoved value: -{ - "text": { - "type": "string" - } -} - added
Input schema / properties / system_instructionAdded value: +{ + "additionalProperties": true, + "description": "Original proto field-name spelling of systemInstruction.", + "type": "object" +} - changed
Input schema / properties / toolConfig / additionalPropertiesPrevious value: -{}New value: +true - changed
Input schema / properties / toolConfig / properties / functionCallingConfig / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / toolConfig / properties / functionCallingConfig / properties / allowedFunctionNames / items / typeRemoved value: -"string" - changed
Input schema / properties / toolConfig / properties / function_calling_config / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / toolConfig / properties / function_calling_config / properties / allowed_function_names / items / typeRemoved value: -"string" - added
Input schema / properties / tool_configAdded value: +{ + "additionalProperties": true, + "description": "Original proto field-name spelling of toolConfig.", + "type": "object" +} - changed
Input schema / properties / tools / descriptionPrevious 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." - changed
Input schema / properties / tools / items / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / tools / items / properties / codeExecution / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / codeExecution / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / code_execution / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / code_execution / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / computerUse / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / computerUse / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / computer_use / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / computer_use / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / functionDeclarations / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / functionDeclarations / items / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / functionDeclarations / items / typeRemoved value: -"object" - removed
Input schema / properties / tools / items / properties / function_declarations / items / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / function_declarations / items / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / function_declarations / items / typeRemoved value: -"object" - removed
Input schema / properties / tools / items / properties / googleSearch / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / googleSearch / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / googleSearchRetrieval / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / googleSearchRetrieval / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / google_search / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / google_search / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / google_search_retrieval / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / google_search_retrieval / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / urlContext / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / urlContext / propertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / url_context / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / tools / items / properties / url_context / propertiesRemoved value: -{}
- Changed
create_image6 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Input schema / properties / background / descriptionPrevious 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." - removed
Input schema / properties / seed / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / seed / minimumRemoved value: --9007199254740991 - removed
Input schema / properties / streamRemoved value: -{ - "const": false, - "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.", - "type": "boolean" -} - changed
Input schema / requiredPrevious value: -[ - "prompt", - "model" -]New value: +[ + "model", + "prompt" +]
- Changed
create_image_file4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / seed / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / seed / minimumRemoved value: --9007199254740991 - removed
Input schema / properties / streamRemoved value: -{ - "const": false, - "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.", - "type": "boolean" -}
- Changed
create_multimodal_embedding3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dimensions / maximumRemoved value: -9007199254740991 - changed
Input schema / properties / input / oneOfPrevious 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" + } +]
- Changed
create_music1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
create_response28 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / backgroundAdded value: +{ + "description": "Whether to run the response asynchronously.", + "type": "boolean" +} - changed
Input schema / properties / input / oneOfPrevious 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" + } +] - removed
Input schema / properties / max_output_tokens / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / max_output_tokens / minimumRemoved value: --9007199254740991 - changed
Input schema / properties / metadata / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / metadata / propertiesRemoved value: -{} - added
Input schema / properties / previous_response_idAdded value: +{ + "description": "ID of a previous response to continue.", + "type": "string" +} - added
Input schema / properties / promptAdded value: +{ + "additionalProperties": true, + "description": "Reference to a reusable prompt template and variables.", + "type": "object" +} - added
Input schema / properties / reasoningAdded value: +{ + "additionalProperties": true, + "description": "Reasoning configuration.", + "type": "object" +} - removed
Input schema / properties / reasoning_effortRemoved value: -{ - "description": "Reasoning effort hint for compatible models.", - "type": "string" -} - removed
Input schema / properties / seedRemoved value: -{ - "description": "Seed for deterministic-compatible providers.", - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" -} - removed
Input schema / properties / service_tier / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / service_tier / typeAdded value: +[ + "string", + "null" +] - added
Input schema / properties / storeAdded value: +{ + "description": "Whether the response is stored for later retrieval.", + "type": "boolean" +} - removed
Input schema / properties / streamRemoved value: -{ - "const": false, - "description": "MCP tool calls return one final result; omit stream or set it to false.", - "type": "boolean" -} - changed
Input schema / properties / stream_options / additionalPropertiesPrevious value: -falseNew value: +true - changed
Input schema / properties / text / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / text / propertiesRemoved value: -{} - changed
Input schema / properties / tool_choice / oneOfPrevious value: -[ - { - "type": "string" - }, - { - "additionalProperties": {}, - "properties": {}, - "type": "object" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } +] - changed
Input schema / properties / tools / descriptionPrevious 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." - changed
Input schema / properties / tools / items / additionalPropertiesPrevious value: -{}New value: +true - removed
Input schema / properties / tools / items / propertiesRemoved value: -{} - added
Input schema / properties / top_pAdded value: +{ + "description": "Nucleus sampling probability.", + "type": "number" +} - added
Input schema / properties / truncationAdded value: +{ + "description": "Truncation strategy for long conversations.", + "type": "string" +} - removed
Input schema / properties / truncation_strategyRemoved value: -{ - "description": "Truncation strategy for long conversations when supported.", - "type": "string" -} - removed
Input schema / properties / userRemoved value: -{ - "description": "End-user identifier.", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "model", - "input" -]New value: +[ + "model" +]
- Changed
create_speech1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
create_video13 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Input schema / properties / end_image / descriptionPrevious 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…" - removed
Input schema / properties / extend_at / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / frames / maximumRemoved value: -9007199254740991 - changed
Input schema / properties / image / descriptionPrevious 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…" - changed
Input schema / properties / image_url / descriptionPrevious 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…" - removed
Input schema / properties / kling_elements / items / properties / element_input_urls / items / formatRemoved value: -"uri" - removed
Input schema / properties / kling_elements / items / properties / element_input_urls / items / typeRemoved value: -"string" - removed
Input schema / properties / kling_elements / items / properties / element_input_urls / maxItemsRemoved value: -4 - removed
Input schema / properties / kling_elements / items / properties / element_input_urls / minItemsRemoved value: -2 - changed
Input schema / properties / material_asset_id / descriptionPrevious 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…" - changed
Input schema / properties / reference_images / descriptionPrevious 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…" - changed
Input schema / properties / start_image / descriptionPrevious 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…"
- Changed
delete_file2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / anthropic-betaAdded value: +{ + "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.", + "type": "string" +}
- Changed
edit_image13 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / images / items / additionalPropertiesAdded value: +false - removed
Input schema / properties / images / items / allOfRemoved 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": [ - {}, - {} - ] - } -] - added
Input schema / properties / images / items / oneOfAdded value: +[ + {}, + {} +] - added
Input schema / properties / images / items / propertiesAdded 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" + } +} - added
Input schema / properties / images / items / typeAdded value: +"object" - added
Input schema / properties / mask / additionalPropertiesAdded value: +false - removed
Input schema / properties / mask / allOfRemoved 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": [ - {}, - {} - ] - } -] - added
Input schema / properties / mask / oneOfAdded value: +[ + { + "required": [ + "image_url" + ] + }, + { + "required": [ + "file_id" + ] + } +] - added
Input schema / properties / mask / propertiesAdded 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" + } +} - added
Input schema / properties / mask / typeAdded value: +"object" - removed
Input schema / properties / n / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / streamRemoved value: -{ - "const": false, - "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.", - "type": "boolean" -}
- Changed
edit_image_file3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / n / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / streamRemoved value: -{ - "const": false, - "description": "Image streaming is not exposed through MCP tool calls; omit stream or set it to false.", - "type": "boolean" -}
- Changed
get_api_overview2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_model1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_model_pricing1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_pricing1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_task_status1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
list_files7 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / after_idAdded 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" +} - added
Input schema / properties / anthropic-betaAdded value: +{ + "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.", + "type": "string" +} - added
Input schema / properties / before_idAdded 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" +} - added
Input schema / properties / limit / defaultAdded value: +20 - changed
Input schema / properties / limit / maximumPrevious value: -100New value: +1000 - added
Input schema / properties / scope_idAdded value: +{ + "description": "Reserved Anthropic Files scope cursor. TokenLab currently returns an explicit unsupported error rather than silently ignoring this value.", + "type": "string" +}
- Changed
list_models1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
rerank_documents3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / top_n / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / top_n / minimumRemoved value: --9007199254740991
- Changed
retrieve_file2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / anthropic-betaAdded value: +{ + "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.", + "type": "string" +}
- Changed
retrieve_file_content1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
transcribe_audio1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
translate_audio1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
translate_text1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
upload_file4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / anthropic-betaAdded value: +{ + "description": "Include files-api-2025-04-14 to use Anthropic Files API mode.", + "type": "string" +} - changed
Input schema / properties / purpose / descriptionPrevious 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." - changed
Input schema / requiredPrevious value: -[ - "file", - "purpose" -]New value: +[ + "file" +]
2 tool updates
v0.6.3- Changed
create_image5 fields changed- removed
Input schema / properties / quality / defaultRemoved value: -"standard" - changed
Input schema / properties / quality / descriptionPrevious 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." - removed
Input schema / properties / quality / enumRemoved value: -[ - "standard", - "hd", - "auto", - "low", - "medium", - "high" -] - removed
Input schema / properties / size / defaultRemoved value: -"1024x1024" - changed
Input schema / properties / size / descriptionPrevious 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."
- Changed
list_models5 fields changed- added
Input schema / properties / categoryAdded value: +{ + "description": "Filter by model category.", + "enum": [ + "chat", + "embedding", + "translation", + "image", + "video", + "audio", + "tts", + "stt", + "rerank", + "3d", + "music" + ], + "type": "string" +} - added
Input schema / properties / providerAdded value: +{ + "description": "Filter by public model provider, for example openai, anthropic, google, or minimax.", + "type": "string" +} - added
Input schema / properties / recommended_forAdded 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" +} - added
Input schema / properties / tagAdded value: +{ + "description": "Filter by a public capability tag.", + "type": "string" +} - added
Input schema / properties / viewAdded 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" +}
1 tool update
v0.4.2- Changed
create_chat_completion5 fields changed- changed
Input schema / properties / messages / items / properties / content / oneOfPrevious 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" + } +] - added
Input schema / properties / repetition_penaltyAdded value: +{ + "description": "Repetition penalty for compatible models.", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / properties / speech_rateAdded value: +{ + "description": "Speech rate for compatible translated audio output.", + "maximum": 2, + "minimum": 0.5, + "type": "number" +} - changed
Input schema / properties / top_k / minimumPrevious value: -1New value: +0 - added
Input schema / properties / translation_optionsAdded 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" +}
30 tool updates
v0.3.1- Added
cancel_task - Changed
compare_models2 fields changed- removed
Input schema / properties / include_raw / descriptionRemoved value: -"Return raw details and pricing payloads instead of compact summaries." - removed
Input schema / properties / models / descriptionRemoved value: -"Public TokenLab model IDs to compare."
- Added
create_3d_model - Changed
create_anthropic_message25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / max_tokens / defaultRemoved value: -512 - changed
Input schema / properties / max_tokens / descriptionPrevious value: -"Maximum output tokens."New value: +"Maximum number of tokens to generate" - changed
Input schema / properties / messages / descriptionPrevious value: -"Native Anthropic conversation messages."New value: +"Messages in the conversation" - added
Input schema / properties / messages / items / additionalPropertiesAdded value: +{} - removed
Input schema / properties / messages / items / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "minItems": 1, - "type": "array" - } -] - added
Input schema / properties / messages / items / properties / content / oneOfAdded 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" + } +] - removed
Input schema / properties / messages / minItemsRemoved value: -1 - changed
Input schema / properties / metadata / descriptionPrevious value: -"Optional request metadata."New value: +"Request metadata echoed into downstream logs or traces when supported." - changed
Input schema / properties / model / descriptionPrevious value: -"Public TokenLab Claude-compatible model ID."New value: +"Model to use (e.g., claude-sonnet-4-6)" - removed
Input schema / properties / model / minLengthRemoved value: -1 - removed
Input schema / properties / promptRemoved value: -{ - "description": "Convenience shortcut for one user text message; do not combine with messages.", - "minLength": 1, - "type": "string" -} - changed
Input schema / properties / service_tier / descriptionPrevious value: -"Optional service-tier hint."New value: +"Service tier hint for compatible providers." - removed
Input schema / properties / stop_sequences / descriptionRemoved value: -"Optional stop sequences." - added
Input schema / properties / streamAdded value: +{ + "const": false, + "default": false, + "description": "MCP tool calls return one final result; omit stream or set it to false.", + "type": "boolean" +} - added
Input schema / properties / stream_optionsAdded value: +{ + "additionalProperties": {}, + "description": "Streaming options such as usage chunk inclusion.", + "properties": {}, + "type": "object" +} - changed
Input schema / properties / system / descriptionPrevious value: -"Optional system prompt."New value: +"System prompt" - removed
Input schema / properties / temperature / descriptionRemoved value: -"Optional sampling temperature." - changed
Input schema / properties / thinking / descriptionPrevious value: -"Thinking configuration for compatible models."New value: +"Thinking configuration for compatible Anthropic-style models." - removed
Input schema / properties / tool_choice / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "additionalProperties": {}, - "properties": {}, - "type": "object" - } -] - added
Input schema / properties / tool_choice / oneOfAdded value: +[ + { + "type": "string" + }, + { + "additionalProperties": {}, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / tools / descriptionPrevious value: -"Native Anthropic tool definitions."New value: +"Tool definitions available to the model." - removed
Input schema / properties / top_k / descriptionRemoved value: -"Optional top-k sampling cutoff." - removed
Input schema / properties / top_p / descriptionRemoved value: -"Optional nucleus sampling probability." - changed
Input schema / requiredPrevious value: -[ - "model" -]New value: +[ + "model", + "max_tokens", + "messages" +]
- Changed
create_chat_completion60 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / audio / descriptionPrevious value: -"Optional audio output configuration."New value: +"Audio output configuration when requesting audio modality." - added
Input schema / properties / frequency_penalty / defaultAdded value: +0 - changed
Input schema / properties / frequency_penalty / descriptionPrevious value: -"Optional frequency penalty."New value: +"Frequency penalty (-2 to 2)" - changed
Input schema / properties / logit_bias / descriptionPrevious value: -"Optional per-token logit-bias map."New value: +"Per-token logit bias map." - added
Input schema / properties / logit_bias / propertiesAdded value: +{} - removed
Input schema / properties / logit_bias / propertyNamesRemoved value: -{ - "type": "string" -} - changed
Input schema / properties / logprobs / descriptionPrevious value: -"Whether to return output-token log probabilities."New value: +"Whether to return log probabilities for output tokens." - changed
Input schema / properties / max_completion_tokens / descriptionPrevious value: -"Optional completion-token cap for compatible reasoning models."New value: +"Maximum completion tokens for newer reasoning-enabled model families" - changed
Input schema / properties / max_tokens / descriptionPrevious value: -"Optional maximum generated tokens."New value: +"Maximum number of tokens to generate" - changed
Input schema / properties / messages / descriptionPrevious value: -"OpenAI-compatible conversation messages, including text, image, tool, and function messages."New value: +"A list of messages comprising the conversation" - removed
Input schema / properties / messages / items / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - changed
Input schema / properties / messages / items / properties / content / descriptionPrevious value: -"Text, OpenAI-compatible multimodal content parts, or null for tool/function messages."New value: +"Message content (text or multimodal)" - added
Input schema / properties / messages / items / properties / content / oneOfAdded 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" + } +] - changed
Input schema / properties / messages / items / properties / name / descriptionPrevious value: -"Optional name for a function or tool message."New value: +"Name of the function/tool (for function/tool messages)" - changed
Input schema / properties / messages / items / properties / role / descriptionPrevious value: -"OpenAI Chat Completions message role."New value: +"The role of the message author" - changed
Input schema / properties / messages / items / properties / tool_call_id / descriptionPrevious value: -"Tool call ID answered by a tool message."New value: +"ID of the tool call being responded to" - changed
Input schema / properties / messages / items / properties / tool_calls / descriptionPrevious value: -"Tool calls made by an assistant message."New value: +"Tool calls made by the assistant" - added
Input schema / properties / messages / items / properties / tool_calls / items / properties / functionAdded value: +{ + "additionalProperties": {}, + "properties": { + "arguments": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "arguments" + ], + "type": "object" +} - added
Input schema / properties / messages / items / properties / tool_calls / items / properties / idAdded value: +{ + "description": "Tool call ID", + "type": "string" +} - added
Input schema / properties / messages / items / properties / tool_calls / items / properties / typeAdded value: +{ + "const": "function", + "type": "string" +} - added
Input schema / properties / messages / items / properties / tool_calls / items / requiredAdded value: +[ + "id", + "type", + "function" +] - changed
Input schema / properties / modalities / descriptionPrevious value: -"Optional requested output modalities, such as text or audio."New value: +"Requested output modalities such as text or audio." - removed
Input schema / properties / modalities / minItemsRemoved value: -1 - changed
Input schema / properties / model / descriptionPrevious value: -"Public TokenLab model ID."New value: +"ID of the model to use (e.g., gpt-5.4, claude-sonnet-4-6)" - removed
Input schema / properties / model / minLengthRemoved value: -1 - added
Input schema / properties / n / defaultAdded value: +1 - changed
Input schema / properties / n / descriptionPrevious value: -"Optional number of non-streaming completions."New value: +"Number of completions to generate" - changed
Input schema / properties / parallel_tool_calls / descriptionPrevious value: -"Whether compatible models may make parallel tool calls."New value: +"Whether the model may issue parallel tool calls." - changed
Input schema / properties / prediction / descriptionPrevious value: -"Optional prediction hint for compatible models."New value: +"Prediction hints for providers that support draft or speculative decoding." - added
Input schema / properties / presence_penalty / defaultAdded value: +0 - changed
Input schema / properties / presence_penalty / descriptionPrevious value: -"Optional presence penalty."New value: +"Presence penalty (-2 to 2)" - changed
Input schema / properties / reasoning_effort / descriptionPrevious value: -"Optional reasoning-effort hint for compatible models."New value: +"Reasoning effort hint for compatible model families." - added
Input schema / properties / response_format / additionalPropertiesAdded value: +{} - changed
Input schema / properties / response_format / descriptionPrevious value: -"Optional response format."New value: +"Response format specification" - removed
Input schema / properties / response_format / requiredRemoved value: -[ - "type" -] - changed
Input schema / properties / seed / descriptionPrevious value: -"Optional deterministic seed for compatible models."New value: +"Seed for deterministic generation" - changed
Input schema / properties / service_tier / descriptionPrevious value: -"Optional service-tier hint for compatible models."New value: +"Service tier hint for compatible providers." - removed
Input schema / properties / stop / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "maxItems": 4, - "minItems": 1, - "type": "array" - } -] - changed
Input schema / properties / stop / descriptionPrevious value: -"Optional stop sequence or up to four stop sequences."New value: +"Stop sequences" - added
Input schema / properties / stop / oneOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "maxItems": 4, + "type": "array" + } +] - added
Input schema / properties / streamAdded value: +{ + "const": false, + "default": false, + "description": "MCP tool calls return one final result; omit stream or set it to false.", + "type": "boolean" +} - added
Input schema / properties / stream_optionsAdded value: +{ + "additionalProperties": {}, + "description": "Streaming options such as usage chunk inclusion.", + "properties": {}, + "type": "object" +} - added
Input schema / properties / temperature / defaultAdded value: +1 - changed
Input schema / properties / temperature / descriptionPrevious value: -"Optional sampling temperature."New value: +"Sampling temperature (0-2)" - removed
Input schema / properties / tool_choice / anyOfRemoved 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" - } -] - changed
Input schema / properties / tool_choice / descriptionPrevious value: -"Optional OpenAI tool-choice setting."New value: +"Controls which function is called" - added
Input schema / properties / tool_choice / oneOfAdded 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" + } +] - changed
Input schema / properties / tools / descriptionPrevious value: -"Optional OpenAI function tools available to the model."New value: +"List of tools the model may call" - added
Input schema / properties / tools / items / properties / function / properties / description / descriptionAdded value: +"Function description" - added
Input schema / properties / tools / items / properties / function / properties / name / descriptionAdded value: +"Function name" - added
Input schema / properties / tools / items / properties / function / properties / name / maxLengthAdded value: +64 - removed
Input schema / properties / tools / items / properties / function / properties / name / minLengthRemoved value: -1 - added
Input schema / properties / tools / items / properties / function / properties / parameters / descriptionAdded value: +"JSON Schema for function parameters" - added
Input schema / properties / tools / items / properties / type / descriptionAdded value: +"Tool type (currently only 'function')" - changed
Input schema / properties / top_k / descriptionPrevious value: -"Optional top-k sampling cutoff for compatible models."New value: +"Top-k sampling cutoff for compatible providers." - changed
Input schema / properties / top_logprobs / descriptionPrevious 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." - added
Input schema / properties / top_p / defaultAdded value: +1 - changed
Input schema / properties / top_p / descriptionPrevious value: -"Optional nucleus sampling probability."New value: +"Nucleus sampling probability" - changed
Input schema / properties / user / descriptionPrevious value: -"Optional end-user identifier."New value: +"End-user identifier for abuse detection"
- Added
create_embedding - Changed
create_gemini_content48 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / cachedContent / descriptionPrevious value: -"Optional cached content resource name."New value: +"Gemini cached content resource name for compatible models." - changed
Input schema / properties / contents / descriptionPrevious value: -"Native Gemini conversation contents."New value: +"Conversation contents" - removed
Input schema / properties / contents / items / properties / parts / items / additionalPropertiesRemoved value: -{} - added
Input schema / properties / contents / items / properties / parts / items / anyOfAdded 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" + } +] - removed
Input schema / properties / contents / items / properties / parts / items / propertiesRemoved value: -{} - removed
Input schema / properties / contents / items / properties / parts / items / typeRemoved value: -"object" - removed
Input schema / properties / contents / items / properties / parts / minItemsRemoved value: -1 - removed
Input schema / properties / contents / items / requiredRemoved value: -[ - "parts" -] - removed
Input schema / properties / contents / minItemsRemoved value: -1 - removed
Input schema / properties / generationConfig / descriptionRemoved value: -"Native Gemini generation configuration." - added
Input schema / properties / generationConfig / properties / candidateCountAdded 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" +} - added
Input schema / properties / generationConfig / properties / maxOutputTokensAdded value: +{ + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / generationConfig / properties / responseMimeTypeAdded value: +{ + "description": "Requested output MIME type, such as text/plain or application/json.", + "type": "string" +} - added
Input schema / properties / generationConfig / properties / responseModalitiesAdded value: +{ + "description": "Requested output modalities for compatible native Gemini routes.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / generationConfig / properties / responseSchemaAdded value: +{ + "additionalProperties": {}, + "description": "JSON schema for structured output when responseMimeType requests JSON.", + "properties": {}, + "type": "object" +} - added
Input schema / properties / generationConfig / properties / stopSequencesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / generationConfig / properties / temperatureAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / generationConfig / properties / thinkingConfigAdded value: +{ + "additionalProperties": {}, + "description": "Thinking budget options for compatible Gemini models.", + "properties": { + "thinkingBudget": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "type": "object" +} - added
Input schema / properties / generationConfig / properties / thinking_configAdded value: +{ + "additionalProperties": {}, + "description": "Snake-case thinking budget options for compatible Gemini models.", + "properties": { + "thinking_budget": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "type": "object" +} - added
Input schema / properties / generationConfig / properties / topKAdded value: +{ + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / generationConfig / properties / topPAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / model / descriptionPrevious value: -"Public TokenLab Gemini-compatible model ID."New value: +"Model name (e.g., gemini-2.5-pro)" - removed
Input schema / properties / model / minLengthRemoved value: -1 - removed
Input schema / properties / promptRemoved value: -{ - "description": "Convenience shortcut for one user text part; do not combine with contents.", - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / safetySettings / descriptionRemoved value: -"Native Gemini safety settings." - added
Input schema / properties / safetySettings / items / properties / categoryAdded value: +{ + "type": "string" +} - added
Input schema / properties / safetySettings / items / properties / thresholdAdded value: +{ + "type": "string" +} - removed
Input schema / properties / systemInstruction / descriptionRemoved value: -"Native Gemini system instruction." - added
Input schema / properties / systemInstruction / properties / partsAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": { + "text": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +} - removed
Input schema / properties / temperatureRemoved value: -{ - "description": "Convenience temperature setting; do not combine with generationConfig.temperature.", - "minimum": 0, - "type": "number" -} - changed
Input schema / properties / toolConfig / descriptionPrevious value: -"Native Gemini tool configuration."New value: +"Gemini tool configuration such as functionCallingConfig." - added
Input schema / properties / toolConfig / properties / functionCallingConfigAdded value: +{ + "additionalProperties": {}, + "properties": { + "allowedFunctionNames": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / toolConfig / properties / function_calling_configAdded value: +{ + "additionalProperties": {}, + "properties": { + "allowed_function_names": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mode": { + "type": "string" + } + }, + "type": "object" +} - changed
Input schema / properties / tools / descriptionPrevious 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." - added
Input schema / properties / tools / items / properties / codeExecutionAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / code_executionAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / computerUseAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / computer_useAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / functionDeclarationsAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / tools / items / properties / function_declarationsAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / tools / items / properties / googleSearchAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / googleSearchRetrievalAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / google_searchAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / google_search_retrievalAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / urlContextAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - added
Input schema / properties / tools / items / properties / url_contextAdded value: +{ + "additionalProperties": {}, + "properties": {}, + "type": "object" +} - changed
Input schema / requiredPrevious value: -[ - "model" -]New value: +[ + "model", + "contents" +]
- Added
create_image - Added
create_image_file - Added
create_multimodal_embedding - Added
create_music - Changed
create_response23 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / include / descriptionPrevious value: -"Additional response sections to include."New value: +"Additional response sections to include when supported." - removed
Input schema / properties / input / anyOfRemoved value: -[ - { - "minLength": 1, - "type": "string" - }, - { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "minItems": 1, - "type": "array" - } -] - changed
Input schema / properties / input / descriptionPrevious value: -"Responses API input as text or native structured input items."New value: +"Input content as a string or structured item array." - added
Input schema / properties / input / oneOfAdded value: +[ + { + "description": "Single string input.", + "type": "string" + }, + { + "description": "Structured input items for the conversation.", + "items": {}, + "type": "array" + } +] - changed
Input schema / properties / instructions / descriptionPrevious value: -"Optional system/developer instructions."New value: +"System instructions" - changed
Input schema / properties / max_output_tokens / descriptionPrevious value: -"Optional output token cap."New value: +"Maximum output tokens" - changed
Input schema / properties / max_output_tokens / minimumPrevious value: -1New value: +-9007199254740991 - changed
Input schema / properties / metadata / descriptionPrevious value: -"Optional request metadata."New value: +"Request metadata." - changed
Input schema / properties / model / descriptionPrevious value: -"Public TokenLab model ID."New value: +"Model to use" - removed
Input schema / properties / model / minLengthRemoved value: -1 - changed
Input schema / properties / reasoning_effort / descriptionPrevious value: -"Reasoning-effort hint for compatible models."New value: +"Reasoning effort hint for compatible models." - changed
Input schema / properties / seed / descriptionPrevious value: -"Optional deterministic seed."New value: +"Seed for deterministic-compatible providers." - changed
Input schema / properties / service_tier / descriptionPrevious value: -"Optional service-tier hint."New value: +"Service tier hint for compatible providers." - added
Input schema / properties / streamAdded value: +{ + "const": false, + "description": "MCP tool calls return one final result; omit stream or set it to false.", + "type": "boolean" +} - added
Input schema / properties / stream_optionsAdded 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" +} - removed
Input schema / properties / temperature / descriptionRemoved value: -"Optional sampling temperature." - changed
Input schema / properties / text / descriptionPrevious value: -"Optional native text formatting configuration."New value: +"Text formatting options." - removed
Input schema / properties / tool_choice / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "additionalProperties": {}, - "properties": {}, - "type": "object" - } -] - added
Input schema / properties / tool_choice / oneOfAdded value: +[ + { + "type": "string" + }, + { + "additionalProperties": {}, + "properties": {}, + "type": "object" + } +] - changed
Input schema / properties / tools / descriptionPrevious 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." - changed
Input schema / properties / truncation_strategy / descriptionPrevious value: -"Optional truncation strategy."New value: +"Truncation strategy for long conversations when supported." - changed
Input schema / properties / user / descriptionPrevious value: -"Optional end-user identifier."New value: +"End-user identifier."
- Added
create_speech - Added
create_video - Added
delete_file - Added
edit_image - Added
edit_image_file - Changed
get_model3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / model / descriptionPrevious value: -"Public TokenLab model ID, for example gpt-5.5 or gemini-3.5-flash."New value: +"The model ID" - removed
Input schema / properties / model / minLengthRemoved value: -1
- Changed
get_model_pricing3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / model / descriptionPrevious value: -"Public TokenLab model ID."New value: +"The model ID" - removed
Input schema / properties / model / minLengthRemoved value: -1
- Added
get_pricing - Added
get_task_status - Added
list_files - Changed
list_models3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limitRemoved value: -{ - "default": 25, - "description": "Maximum number of models to return.", - "maximum": 100, - "minimum": 1, - "type": "integer" -} - removed
Input schema / properties / recommended_forRemoved value: -{ - "description": "Optional task filter such as image, video, embedding, or rerank.", - "enum": [ - "image", - "video", - "music", - "3d", - "tts", - "stt", - "embedding", - "rerank", - "translation" - ], - "type": "string" -}
- Added
rerank_documents - Added
retrieve_file - Added
retrieve_file_content - Added
transcribe_audio - Added
translate_audio - Added
translate_text - Added
upload_file
4 tool updates
v0.3.0- Changed
create_anthropic_message13 fields changed- changed
Input schema / properties / max_tokens / maximumPrevious value: -8192New value: +9007199254740991 - added
Input schema / properties / messagesAdded 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" +} - added
Input schema / properties / metadataAdded value: +{ + "additionalProperties": {}, + "description": "Optional request metadata.", + "properties": {}, + "type": "object" +} - changed
Input schema / properties / prompt / descriptionPrevious value: -"User prompt text."New value: +"Convenience shortcut for one user text message; do not combine with messages." - added
Input schema / properties / service_tierAdded value: +{ + "description": "Optional service-tier hint.", + "type": "string" +} - added
Input schema / properties / stop_sequencesAdded value: +{ + "description": "Optional stop sequences.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / temperatureAdded value: +{ + "description": "Optional sampling temperature.", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / thinkingAdded value: +{ + "additionalProperties": {}, + "description": "Thinking configuration for compatible models.", + "properties": {}, + "type": "object" +} - added
Input schema / properties / tool_choiceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": {}, + "properties": {}, + "type": "object" + } + ], + "description": "Tool choice policy or explicit tool selection." +} - added
Input schema / properties / toolsAdded value: +{ + "description": "Native Anthropic tool definitions.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / top_kAdded value: +{ + "description": "Optional top-k sampling cutoff.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / top_pAdded value: +{ + "description": "Optional nucleus sampling probability.", + "maximum": 1, + "minimum": 0, + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "model", - "prompt" -]New value: +[ + "model" +]
- Added
create_chat_completion - Changed
create_gemini_content11 fields changed- added
Input schema / properties / cachedContentAdded value: +{ + "description": "Optional cached content resource name.", + "type": "string" +} - added
Input schema / properties / contentsAdded 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" +} - added
Input schema / properties / generationConfigAdded value: +{ + "additionalProperties": {}, + "description": "Native Gemini generation configuration.", + "properties": {}, + "type": "object" +} - changed
Input schema / properties / prompt / descriptionPrevious value: -"User prompt text."New value: +"Convenience shortcut for one user text part; do not combine with contents." - added
Input schema / properties / safetySettingsAdded value: +{ + "description": "Native Gemini safety settings.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / systemInstructionAdded value: +{ + "additionalProperties": {}, + "description": "Native Gemini system instruction.", + "properties": {}, + "type": "object" +} - changed
Input schema / properties / temperature / descriptionPrevious value: -"Optional Gemini generation temperature."New value: +"Convenience temperature setting; do not combine with generationConfig.temperature." - removed
Input schema / properties / temperature / maximumRemoved value: -2 - added
Input schema / properties / toolConfigAdded value: +{ + "additionalProperties": {}, + "description": "Native Gemini tool configuration.", + "properties": {}, + "type": "object" +} - added
Input schema / properties / toolsAdded value: +{ + "description": "Native Gemini tools.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "model", - "prompt" -]New value: +[ + "model" +]
- Changed
create_response17 fields changed- added
Input schema / properties / includeAdded value: +{ + "description": "Additional response sections to include.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / input / anyOfAdded value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / input / descriptionPrevious value: -"Responses API input text."New value: +"Responses API input as text or native structured input items." - removed
Input schema / properties / input / minLengthRemoved value: -1 - removed
Input schema / properties / input / typeRemoved value: -"string" - changed
Input schema / properties / max_output_tokens / maximumPrevious value: -8192New value: +9007199254740991 - added
Input schema / properties / metadataAdded value: +{ + "additionalProperties": {}, + "description": "Optional request metadata.", + "properties": {}, + "type": "object" +} - added
Input schema / properties / parallel_tool_callsAdded value: +{ + "description": "Whether the model may issue parallel tool calls.", + "type": "boolean" +} - added
Input schema / properties / reasoning_effortAdded value: +{ + "description": "Reasoning-effort hint for compatible models.", + "type": "string" +} - added
Input schema / properties / seedAdded value: +{ + "description": "Optional deterministic seed.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Input schema / properties / service_tierAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional service-tier hint." +} - added
Input schema / properties / temperatureAdded value: +{ + "description": "Optional sampling temperature.", + "type": "number" +} - added
Input schema / properties / textAdded value: +{ + "additionalProperties": {}, + "description": "Optional native text formatting configuration.", + "properties": {}, + "type": "object" +} - added
Input schema / properties / tool_choiceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": {}, + "properties": {}, + "type": "object" + } + ], + "description": "Tool choice policy or explicit tool selection." +} - added
Input schema / properties / toolsAdded value: +{ + "description": "Native Responses API tool definitions.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / truncation_strategyAdded value: +{ + "description": "Optional truncation strategy.", + "type": "string" +} - added
Input schema / properties / userAdded value: +{ + "description": "Optional end-user identifier.", + "type": "string" +}
8 tool updates
v0.2.0- First observed
compare_models - First observed
create_anthropic_message - First observed
create_gemini_content - First observed
create_response - First observed
get_api_overview - First observed
get_model - First observed
get_model_pricing - First observed
list_models
TDQS
Significant overlap exists: two tools for creating images (create_image, create_image_file) and two for editing images (edit_image, edit_image_file), plus multiple chat completion tools (create_chat_completion, create_anthropic_message, create_gemini_content, create_response) that serve similar purposes but differ in API shape. Agents may struggle to choose the correct tool without reading detailed descriptions.
All tools use snake_case with a verb_noun pattern (e.g., create_video, list_models). The naming is mostly consistent, but minor issues arise with duplicate verbs like 'create' for similar tasks (create_image vs create_image_file) and mixed verb tenses (get vs retrieve). Overall, the pattern is predictable.
With 31 tools, the count is somewhat high for the server's scope (a unified AI API gateway). While many operations are covered, there is redundancy (e.g., four completion tools, two image creation tools) that could be consolidated. A more streamlined set of 20-25 tools would be more appropriate.
The tool set covers a broad range of AI operations: text completion, image generation/editing, audio, video, 3D models, embeddings, file management, and model info. Minor gaps exist (e.g., no tool to list async tasks, no update for files), but overall, the surface is comprehensive for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Public, read-only MCP server for FarmNeural company facts, packages, and capabilities.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Public read-only discovery of agent, model, training, task, and verification opportunities.
Related MCP Servers
- AlicenseAqualityBmaintenanceRead-only MCP server for the RareCloud API, enabling AI agents to list servers, browse the catalog, check billing, and plan deployments.10016MIT

gliana-mcp-remoteofficial
AlicenseNot gradedqualityBmaintenanceHosted MCP server for browsing the GlianaAI model catalog with zero setup, providing model listings, pricing, and schema information via Streamable HTTP.MIT- AlicenseNot gradedqualityAmaintenancePublic read-only MCP server for turva.dev's agent-readiness audit, enabling AI agents to query service catalog, security evidence, and engagement principles via structured JSON.1MIT
- AlicenseAqualityCmaintenanceA read-only MCP server that exposes Tiramisu AI's product information, pricing, and official links to MCP-compatible AI clients.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hedging8563/tokenlab-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server