Obscurify AI
OfficialRoutes prompts to Meta's Llama models through Obscurify.ai — e.g. meta-llama/llama-3.3-70b-instruct, which is also part of the default second_opinion panel for comparing answers across models.
Routes prompts to OpenAI's GPT models through Obscurify.ai — call ask, chat or second_opinion with a model such as openai/gpt-5.5 and get the reply plus model, token usage and cost.
Obscurify.ai MCP server
Give your AI agent private access to 200+ other models. This Model Context Protocol server lets Claude Desktop, Claude Code, Cursor, VS Code, Codex, opencode and any other MCP client ask Claude, GPT, Gemini, Llama, DeepSeek, Qwen and more through Obscurify.ai.
Obscurify.ai is a privacy-focused, OpenAI-compatible AI platform. Text requests only use zero-data-retention routes, prompts and responses aren't stored on its servers, and accounts are a random 16-digit account number with no email, phone or password.
Tools
Tool | What it does |
| One prompt to any model, with an optional system prompt, |
| Multi-turn: pass the whole |
| The same prompt to 2-5 models in parallel, every answer side by side. Good for checking a claim, reviewing code or a plan, or breaking a tie. |
| Model IDs with context window, price per million input/output tokens, tool support and the plan each needs. Filter by name, plan, price or tool support. Works without a key. |
| Text-to-image with Stable Diffusion models (SDXL, SD 1.5, LCM). Returns the image. |
| Balance, plan, usage this billing period, and whether the account can use frontier and uncensored models. |
Defaults are cheap and fast: ask and chat use deepseek/deepseek-v4-flash, and second_opinion asks deepseek/deepseek-v4-flash, meta-llama/llama-3.3-70b-instruct and qwen/qwen3.8-27b. Pass model / models to use anything else, e.g. anthropic/claude-sonnet-5.5 or openai/gpt-5.5.
Related MCP server: Gemini CLI MCP Server
Get an API key
Create an account at obscurify.ai. You get a random account number: no email, no password.
Add a balance (card, Monero, Bitcoin or Lightning). The API works on every plan with a positive balance. Frontier models need the Casual plan or higher, and uncensored models need Pro (pricing).
On obscurify.ai/account, click Show API Key and copy the
sk-obs1_...key.
Calls cost money from your balance at each model's listed price (model cards). Every reply shows what it cost.
Setup
The server runs with npx -y @obscurify/mcp (Node.js 20 or newer) and reads the key from OBSCURIFY_API_KEY.
Claude Code
claude mcp add obscurify -e OBSCURIFY_API_KEY=sk-obs1_... -- npx -y @obscurify/mcpAdd -s user to make it available in every project.
Claude Desktop
Settings → Developer → Edit Config, then add to claude_desktop_config.json:
{
"mcpServers": {
"obscurify": {
"command": "npx",
"args": ["-y", "@obscurify/mcp"],
"env": { "OBSCURIFY_API_KEY": "sk-obs1_..." }
}
}
}Restart Claude Desktop.
Cursor
Add the same mcpServers block to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"obscurify": {
"command": "npx",
"args": ["-y", "@obscurify/mcp"],
"env": { "OBSCURIFY_API_KEY": "sk-obs1_..." }
}
}
}VS Code (GitHub Copilot agent mode)
Create .vscode/mcp.json. VS Code asks for the key once and stores it securely:
{
"inputs": [
{ "type": "promptString", "id": "obscurify-key", "description": "Obscurify.ai API key", "password": true }
],
"servers": {
"obscurify": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@obscurify/mcp"],
"env": { "OBSCURIFY_API_KEY": "${input:obscurify-key}" }
}
}
}Codex CLI
codex mcp add obscurify --env OBSCURIFY_API_KEY=sk-obs1_... -- npx -y @obscurify/mcpor in ~/.codex/config.toml:
[mcp_servers.obscurify]
command = "npx"
args = ["-y", "@obscurify/mcp"]
env = { OBSCURIFY_API_KEY = "sk-obs1_..." }
# Optional: don't ask before each paid call (ask, chat, second_opinion, generate_image)
default_tools_approval_mode = "approve"The tools that spend from your balance are marked as not read-only, so Codex asks before running them unless you set default_tools_approval_mode.
opencode
opencode mcp add obscurify --env OBSCURIFY_API_KEY=sk-obs1_... -- npx -y @obscurify/mcpThat writes this to opencode.json (add --global for your global config):
{
"mcp": {
"servers": {
"obscurify": {
"type": "local",
"command": ["npx", "-y", "@obscurify/mcp"],
"environment": { "OBSCURIFY_API_KEY": "sk-obs1_..." }
}
}
}
}Windsurf, Cline, Zed and other clients
Use the command npx -y @obscurify/mcp with the environment variable OBSCURIFY_API_KEY in the client's MCP settings.
Docker
docker build -t obscurify-mcp https://github.com/Obscurify-ai/obscurify-mcp.git
docker run -i --rm -e OBSCURIFY_API_KEY=sk-obs1_... obscurify-mcpStreamable HTTP
For clients that connect over HTTP, run the server yourself:
OBSCURIFY_API_KEY=sk-obs1_... npx -y @obscurify/mcp --http --port 3000
# MCP endpoint: http://127.0.0.1:3000/mcp health: /healthIt binds to 127.0.0.1 unless you pass --host. Each request may carry its own key as Authorization: Bearer sk-obs1_..., which takes precedence over OBSCURIFY_API_KEY, so one server can serve several accounts. The HTTP mode is stateless.
Configuration
Variable | Default | |
| (none) | Your |
|
| Model for |
|
| Comma-separated models for |
|
| API base URL. |
|
| Per-request timeout. |
Example prompts
"Ask Gemini and GPT what they think of this migration plan, then summarise where they disagree." (
second_opinion)"Find the cheapest model with tool calling and a 1M context." (
list_models)"Have Llama 3.3 70B rewrite this paragraph for a general audience." (
ask)"How much have I spent on Obscurify this month?" (
balance)
Privacy
The server is a thin client: it sends your prompts to https://obscurify.ai with your key and nothing else. No telemetry, no logging to disk, no file access. What Obscurify.ai keeps is described in its privacy policy: prompts and responses are not stored, and identities are scrambled before requests reach model providers. Providers still see the prompt text, so don't send secrets you wouldn't send to the model itself.
Tested
On 2026-10-28 with a Pay As You Go key, every tool was called from MCP Inspector 2.12 (CLI), Claude Code 2.1, Codex CLI 0.165 (both from the local build and from npx -y @obscurify/mcp), and the SDK client in scripts/e2e.mjs over stdio and Streamable HTTP. opencode 2.1 connects and lists the tools.
Development
npm install
npm run build
OBSCURIFY_API_KEY=sk-obs1_... node scripts/e2e.mjs stdio --image # live end-to-end test, costs well under a cent
OBSCURIFY_API_KEY=sk-obs1_... node scripts/e2e.mjs http
npx @modelcontextprotocol/inspector node dist/index.jsReleases: bump the version in package.json and server.json, then push a vX.Y.Z tag. The workflow publishes to npm with provenance and to the MCP Registry.
Links
Website: obscurify.ai
API docs: obscurify.ai/api-docs
Contact: contact@obscurify.ai
License
MIT
Available Tools
6 toolsaskAsk a modelA
Send one prompt to any Obscurify.ai model and get its reply. Useful for delegating a subtask to a cheaper or specialised model, getting an outside view, or using a model you don't otherwise have. Prompts go through zero-data-retention routes and are not stored by Obscurify.ai. Default model: deepseek/deepseek-v4-flash (fast and cheap). Use list_models to find other model IDs. For follow-ups that need earlier turns use chat; to compare several models use second_opinion.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID such as "anthropic/claude-sonnet-5.5" or "openai/gpt-5.5". Default: deepseek/deepseek-v4-flash. | |
| prompt | Yes | The full prompt. The model sees nothing else, so include any context it needs. | |
| system | No | Optional system prompt. | |
| max_tokens | No | Cap on the reply length in tokens (default 4096). Reasoning models spend some of these thinking. | |
| temperature | No | Sampling temperature, 0-2. Omit for the model's default. | |
| show_reasoning | No | Include the model's reasoning text, when it returns one (default false). | |
| reasoning_effort | No | How hard a reasoning model should think. Ignored by models without reasoning. Omit for the model's default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds genuinely non-obvious context beyond the annotations: zero-data-retention routing and that Obscurify.ai does not store prompts, plus the default model and its cost/speed tradeoff. Annotations already declare openWorldHint=true and destructiveHint=false, and the description is consistent with both. It stops short of covering latency, per-call billing, or what the reply payload looks like.
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?
Four sentences, front-loaded with the action and then the routing guidance; nothing is buried. Slight redundancy in restating the default model that the schema already carries, which keeps it from being maximally tight.
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?
Covers what an agent needs to call this correctly: single-turn scope, privacy posture, default model, and where to go for alternatives. With no output schema, the omission of return-shape detail (token usage, finish reason) is a minor gap rather than a blocker.
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 all seven parameters are already documented with defaults, ranges and enum values; the description's default-model note duplicates the schema's own 'model' field text. It adds only the cross-reference to list_models for discovering valid model IDs, so baseline 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?
States a specific verb and resource ('send one prompt to any Obscurify.ai model and get its reply') and immediately fixes the scope as single-shot, which is what separates it from the sibling chat tool. The one-line rationale about why you'd delegate to another model adds intent, not just mechanics.
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?
Names the alternatives and the conditions that select them: follow-ups needing earlier turns go to chat, comparisons go to second_opinion, model discovery goes to list_models. Both exclusions and the pointer for valid model IDs are explicit, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
balanceAccount balance and planARead-only
Show the Obscurify.ai account's balance (USD), plan, included credit used this billing period, token usage, and whether it can use frontier and uncensored models. Use it before a large batch of calls, or when a call fails with a balance (402) or plan (403) error.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds useful context about what status information is exposed and why an agent would check it, though it does not mention caching or freshness of the balance data.
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 compact sentences: the first defines what is returned, the second gives usage triggers. No filler, and the most important information comes first.
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 no output schema, the description must explain return values, and it enumerates the key fields well. It could go slightly further on response shape or error behavior, but it is sufficient for an agent to call this zero-parameter tool 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 tool takes zero parameters, so the baseline is 4. There is no parameter syntax to explain, and the description correctly does not invent any.
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 a specific verb and resource: shows the account's balance, plan, credit usage, token usage, and model access. It is clearly distinguishable from generation-focused siblings like ask, chat, and generate_image.
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 says to use it before large batches and when a call fails with 402 (balance) or 403 (plan) errors. This gives concrete trigger conditions that an agent can act on without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatMulti-turn chatA
Continue a multi-turn conversation with an Obscurify.ai model. Pass the whole history in messages (the server keeps no state) and get the next assistant reply. For a single question, ask is simpler. Default model: deepseek/deepseek-v4-flash.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID. Default: deepseek/deepseek-v4-flash. | |
| messages | Yes | Conversation so far, oldest first. The last message is usually from the user. | |
| max_tokens | No | Cap on the reply length in tokens (default 4096). Reasoning models spend some of these thinking. | |
| temperature | No | Sampling temperature, 0-2. Omit for the model's default. | |
| show_reasoning | No | Include the model's reasoning text, when it returns one (default false). | |
| reasoning_effort | No | How hard a reasoning model should think. Ignored by models without reasoning. Omit for the model's default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation set (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) already tells the agent this is a non-destructive but stateful open-world call. The description earns credit beyond that by disclosing the critical operational fact that the server keeps no state, so the entire history must be resent each turn. It does not mention cost, rate limits, or truncation behavior for long histories.
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 short sentences, each doing distinct work: what it does, the statefulness contract, and the routing alternative. The default model is front-loaded at the end where a caller will look for it, and there is no filler.
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 six parameters, full schema coverage, and annotations, the description covers the essentials: statelessness, the history contract, and the sibling comparison. The lighter note is return shape — there is no output schema, so a brief mention of what the reply contains (assistant text plus optional reasoning text) would close the remaining gap.
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 every parameter is already documented in the schema, including the default model, token cap, and reasoning-effort enum. The description reinforces that `messages` carries the whole history (explaining why via statelessness) and repeats the default model, but adds little beyond the schema text. 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?
States a specific verb and resource (continue a multi-turn conversation with an Obscurify.ai model), specifies exactly what the caller must supply (the whole history in `messages`), and names the sibling it is not (`ask`). An agent can distinguish it from `ask` and `second_opinion` without opening either schema.
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 routes single-question use to the sibling `ask`, which is the key decision point for this tool family. It does not address the other siblings (`second_opinion`, `generate_image`, `list_models`) or state any when-not-to-use condition beyond that one comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageGenerate an imageA
Generate an image from a text prompt with Obscurify.ai's Stable Diffusion image models (SDXL, SD 1.5 and LCM checkpoints). Returns the image. Costs a fraction of a cent per image from the account balance. Pass list: true to see the available image models and prices instead.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | List image models and prices instead of generating. | |
| seed | No | Seed for reproducible results. | |
| model | No | Image model ID (default "realvis-xl-v4", photorealistic). Others include "juggernaut-xl-v10" and "animagine-xl-v-3-1" (anime). Use list: true for all. | |
| width | No | Width in pixels (default: the model's). | |
| height | No | Height in pixels (default: the model's). | |
| prompt | No | What to draw. Required unless list is true. | |
| negative_prompt | No | Things to keep out of the image. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare that this is a non-readonly, non-destructive, open-world, non-idempotent operation, so the safety profile is covered. The description adds useful operational context: it returns the image and incurs a small cost from the account balance, which is exactly the kind of behavioral detail annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose, followed by return/cost behavior and the alternative listing mode. Every sentence earns its place with no repetition or filler.
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 seven parameters, full schema coverage, and no output schema, the description supplies the important missing pieces: what is returned and that generation costs money. It could specify the image return format or link cost more explicitly, but overall an agent has enough to invoke it 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?
Schema description coverage is 100%, so every parameter is already well documented in the input schema. The description mentions prompt, `list: true`, and model families, but adds little parameter-level meaning beyond what the schema provides. 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 states a specific verb and resource: generate an image from a text prompt using named Stable Diffusion models. It also distinguishes the tool's listing mode and names the underlying provider, so an agent can immediately understand that this is image generation rather than chat or balance lookup.
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?
It clearly explains when to use the tool for generation and when to pass `list: true` to inspect available image models and prices instead. It does not explicitly discuss when to prefer a sibling tool such as `list_models`, but the image-generation context is clear enough that this is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsList modelsARead-only
List Obscurify.ai chat models with their IDs, context window, price per million input/output tokens (USD), tool-calling support and the plan they need (any = every account with a balance; casual = Casual or Pro; pro = Pro only). Filter by name, plan, price or tool support. Use it to find a model ID for ask, chat or second_opinion, or the cheapest model with what you need. Doesn't need an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | Only models usable on this plan: any (Pay As You Go and up), casual, or pro (everything). | |
| sort | No | Sort order (default id). price = cheapest output first. | |
| limit | No | Max rows (default 60). | |
| search | No | Case-insensitive text to match in the model ID or name, e.g. "claude", "deepseek", "coder". | |
| tools_only | No | Only models that support tool/function calling. | |
| max_output_price | No | Only models whose output price is at most this many USD per million tokens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuinely useful context beyond that: the returned field set and the meaning of each plan tier (any/casual/pro). It does not cover pagination or defaults for limit/sort, which are left to the schema.
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 tight sentences: what it returns, how to filter, and why to call it. No filler, and the field list is front-loaded before the filtering 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?
No output schema exists, yet the description enumerates the return fields, so an agent knows what comes back. Minor gap: it doesn't state default limit or that results are paginated/truncated, which matters for a 6-param listing 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 coverage is 100%, so the baseline is 3, but the description adds real meaning by expanding the plan enum into concrete user tiers ('any = every account with a balance; casual = Casual or Pro; pro = Pro only'), disambiguating the one parameter most likely to be misunderstood.
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?
Specific verb 'List' plus resource 'Obscurify.ai chat models', with the returned fields enumerated (IDs, context window, pricing, tool support, plan). It clearly distinguishes itself from ask/chat/second_opinion by framing itself as the model-discovery step for those tools.
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 states when to use it: 'Use it to find a model ID for ask, chat or second_opinion, or the cheapest model with what you need.' It also gives the filter-to-goal mapping ('Filter by name, plan, price or tool support') and notes no API key is required, removing a likely blocker.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
second_opinionSecond opinion from several modelsA
Send the same prompt to 2-5 different models at once and return every answer side by side, so you can compare them, check a claim, review code or a plan, or break a tie. Default models: deepseek/deepseek-v4-flash, meta-llama/llama-3.3-70b-instruct, qwen/qwen3.8-27b.
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Model IDs to ask (2-5). Pick different families for independent views. | |
| prompt | Yes | The full prompt, with all the context the models need. | |
| system | No | Optional system prompt for every model. | |
| max_tokens | No | Cap on the reply length in tokens (default 4096). Reasoning models spend some of these thinking. | |
| reasoning_effort | No | How hard a reasoning model should think. Ignored by models without reasoning. Omit for the model's default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (non-destructive, non-idempotent, open-world). The description adds useful behavior: the fan-out to 2-5 models and the default model set. It omits cost/latency implications of N parallel calls and what happens when one model errors or is unavailable, which matters for a non-idempotent multi-call tool.
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 the mechanism and the return shape, followed by the defaults. Every clause carries information; nothing is padding.
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 exists, and the description compensates by describing the side-by-side return. With all five parameters documented and defaults stated, the only real gap is partial-failure behavior and cost/latency expectations when querying up to five 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?
Schema coverage is 100%, so the baseline is 3; the description earns above that by naming the three default model IDs and the 2-5 range, which the schema does not supply. It adds no extra guidance on system/max_tokens/reasoning_effort beyond what the schema already documents.
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 a specific action (send the same prompt to 2-5 models at once) and a specific return shape (every answer side by side). The multi-model fan-out is inherently what separates it from the single-conversation siblings ask/chat, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases: compare answers, check a claim, review code or a plan, break a tie. That's clear positive guidance, but it never says when not to use it or names a sibling alternative (e.g. ask/chat for a single-model exchange).
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.
6 tool updates
v0.1.0- First observed
ask - First observed
balance - First observed
chat - First observed
generate_image - First observed
list_models - First observed
second_opinion
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: single prompt (ask), multi-turn chat, multi-model comparison (second_opinion), account balance, model discovery, and image generation. The ask/chat and ask/second_opinion boundaries are explicitly clarified in the descriptions, so an agent can select correctly.
All names use snake_case, but the convention is mixed: list_models and generate_image are verb_noun, ask and chat are simple verbs, while balance and second_opinion are noun phrases. The names are still readable, but there is no predictable single pattern.
Six tools are well-scoped for an AI model gateway: text completion, multi-turn chat, comparison, model listing, balance check, and image generation. Each tool earns its place without obvious redundancy or missing operational categories at this size.
The surface covers the core lifecycle for an AI proxy: discover models, check balance, send single or multi-turn prompts, compare models, and generate images. Minor gaps exist, such as richer model details or additional modalities, but core workflows are not blocked.
Maintenance
Related MCP Connectors
Chat, image, video, and audio models from many vendors behind one remote MCP server and one key.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Connect MCP clients to 2,000+ AI models without managing provider API keys.
Generate images, video, audio and short films with 140+ AI models from any MCP client.
Related MCP Servers
- AlicenseCqualityCmaintenanceSend requests to OpenAI, MistralAI, Anthropic, xAI, or Google AI using MCP protocol via tool or predefined prompts. Vendor API key required140MIT
- FlicenseNot gradedqualityDmaintenanceBridges Google's Gemini CLI with MCP-compatible clients and integrates OpenRouter API for access to 400+ AI models. Provides 33 specialized tools enabling multi-AI workflows, collaborations, and debates between Claude, Gemini, and other LLMs.142-
- AlicenseNot gradedqualityBmaintenanceAccess 400+ generative AI models directly from your AI assistant — generate images (FLUX, Midjourney, GPT-4o), create videos (Veo3, Kling), make music (Suno), and enhance photos, all via a single MCP server.12MIT
- AlicenseAqualityDmaintenanceHosted multi-model AI media + chat MCP server. Generates images, video, audio, face-swaps and talking-avatars, and chats across 300+ models (Claude, GPT, Gemini, DeepSeek…) - all from one balance and one API key.16MIT