MCPGeneration for OpenRouter
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCPGeneration for OpenRouterGenerate an image of a cozy cabin in snowy woods and save it here."
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.
MCPGeneration for OpenRouter
Servidor MCP local, em TypeScript, que liga clientes como Claude Code à API multimodal do OpenRouter. Expõe ferramentas para descobrir modelos, gerar e editar imagens, criar variações, iniciar tarefas de vídeo, acompanhar o estado e guardar os ficheiros num projeto local.
O servidor usa MCP v2 e transporte stdio. Não inclui uma interface web nem executa um agente autónomo. O cliente MCP decide quando chamar as ferramentas e como integrar os recursos no código do projeto.
Funcionalidades
Catálogos atuais de modelos e capacidades publicados pelo OpenRouter.
Geração, edição e variações de imagens pelo endpoint dedicado
/images.Geração assíncrona de vídeo, animação de primeiro frame, consulta de estado e download autenticado por streaming.
Limites de custo, autorização
allow_paid, mododry_rune registo local de uso.Persistência de jobs após reinício do processo.
Gravação de imagens e vídeos dentro de raízes autorizadas, sem sobrescrever ficheiros existentes.
Respostas MCP com conteúdo legível e
structuredContent.
Related MCP server: Bina MCP Server
Ferramentas MCP
Ferramenta | Utilização |
| Pesquisa capacidades verificadas nos catálogos de imagem e vídeo. |
| Gera uma ou mais imagens e guarda os resultados. |
| Edita uma imagem local através de |
| Produz um conjunto limitado de variações com nomes numerados. |
| Inicia uma tarefa text-to-video e devolve os IDs local e remoto. |
| Envia uma imagem como primeiro frame, quando o modelo declara essa capacidade. |
| Consulta e persiste o estado de um job já submetido. |
| Descarrega uma tarefa concluída para uma raiz autorizada. |
| Calcula uma estimativa com os metadados atuais ou devolve |
| Lista metadados de recursos locais sem enviar conteúdo binário. |
Modelos iniciais
Os modelos padrão são google/gemini-3.1-flash-lite-image e heygen/heygen-video-1. O catálogo é consultado em tempo de execução; os identificadores e capacidades podem mudar. google/gemini-3.1-flash-image também está disponível para ser escolhido explicitamente quando existir no catálogo.
O servidor valida proporções, resoluções, durações, áudio, entrada de referência e quantidade de resultados contra os dados que o OpenRouter publica para cada modelo. O campo de áudio é opcional: quando omitido, não é enviado. list_models separa áudio configurável, gerido pelo fornecedor e obrigatório. Não tenta um endpoint de chat como fallback.
Requisitos
Node.js 20.19 ou superior.
npm.
Uma chave OpenRouter para consultar catálogos ou fazer pedidos à API.
Claude Code ou outro cliente MCP que suporte servidores locais
stdio.
O SDK MCP instalado é @modelcontextprotocol/server v2.3.1. A linha v2 do SDK requer Node.js 20 ou superior e usa serveStdio de @modelcontextprotocol/server/stdio.
Instalação e configuração
git clone git@github.com:yberudev/MCPGeneration-for-Openrouter.git
cd MCPGeneration-for-Openrouter
npm ci
cp .env.example .envEdite .env e configure OPENROUTER_API_KEY. O ficheiro .env está ignorado pelo Git. O servidor carrega o .env da sua própria pasta de instalação, mesmo quando Claude Code o inicia com o diretório de outro projeto como cwd. O ambiente do processo tem prioridade; uma entrada .mcp.json versionada não deve conter uma chave literal.
npm run build
npm run typecheck
npm run lint
npm testInicie o servidor localmente com npm start. Num terminal, o processo fica à espera de um cliente MCP; a saída padrão é reservada ao protocolo.
Integração com Claude Code
Claude Code define CLAUDE_PROJECT_DIR no processo do servidor MCP. Assim, o projeto ativo passa a ser a raiz autorizada sem depender de process.cwd(). Num registo global, a chave pode ficar no .env da pasta de instalação deste servidor ou no ambiente que inicia Claude Code. O carregamento do .env é ancorado à pasta de instalação, não ao projeto aberto.
Exporte a chave no terminal ou no gestor de ambiente usado para iniciar Claude Code:
export OPENROUTER_API_KEY='sk-or-…'Registe o servidor no âmbito do utilizador. Para esta cópia do workspace:
claude mcp add --scope user --transport stdio mcp-generation-openrouter -- node /home/yberudev/Documentos/MCPGeneration/dist/index.jsSe mudar a pasta do repositório, substitua esse caminho absoluto pelo caminho de
dist/index.jsna nova localização.Inicie Claude Code no projeto e confirme a ligação:
claude mcp list claude mcp get mcp-generation-openrouterDentro da sessão, use
/mcppara ver as ferramentas disponíveis. Um servidor no âmbito de projeto configurado por.mcp.jsonpode pedir aprovação na primeira utilização.
Também pode usar um ficheiro .mcp.json de projeto. O exemplo sem credenciais está em examples/.mcp.json.example. Atualize o caminho absoluto para o executável e disponibilize OPENROUTER_API_KEY no ambiente do Claude Code.
Depois de ligado, peça ao Claude Code, por exemplo: “Lista os modelos de vídeo, gera uma imagem de teste com allow_paid=true e guarda-a no meu projeto.” As chamadas pagas exigem essa autorização explícita. Para acompanhar vídeos, peça get_video_status com o ID local que generate_video devolveu e, quando o estado for completed, peça download_video.
Diretórios e persistência
Por omissão, os recursos ficam em:
<projeto>/public/assets/generated/images/
<projeto>/public/assets/generated/videos/YBERU_ASSETS_DIR altera o diretório de saída relativo ao projeto. YBERU_PROJECT_ROOT substitui a raiz detetada; YBERU_ALLOWED_ROOTS acrescenta outras raízes autorizadas, separadas pelo separador de caminhos do sistema (: no Linux/macOS). Um caminho absoluto passado a uma ferramenta só é aceite se estiver dentro de uma dessas raízes. O servidor rejeita directory traversal, symlinks de saída e colisões; nunca substitui ficheiros existentes.
O estado local fica em ~/.local/share/mcp-generation-openrouter/ por omissão. YBERU_DATA_DIR define outra pasta absoluta. O diretório guarda jobs.json, assets.json, usage.json e requests.json; as imagens não são guardadas em base64 nesses registos. requests.json contém hashes e reservas, não prompts nem conteúdo de imagem.
Custos e operações pagas
allow_paidcomeça emfalseem todas as ferramentas que geram conteúdo.Os limites padrão são
$5por operação e$20acumulados. Um valor passado emmax_cost_usdnão pode ultrapassar o limite global por operação.O servidor consulta preços do catálogo. Algumas imagens são faturadas por tokens de saída; como o número de tokens do resultado não é conhecido antes da geração, a ferramenta devolve
unknowne bloqueia a chamada por omissão.ALLOW_UNKNOWN_COST=trueé uma política explícita do operador. Permite uma única operação cuja estimativa não é verificável, mas não torna possível garantir um teto para esse pedido. Se o custo final também não vier na resposta, as próximas chamadas pagas ficam bloqueadas até reconciliação manual.Vídeos usam as
pricing_skusatuais quando existe uma tarifa compatível com a duração, resolução e referências. A estimativa não garante o custo final.dry_run=trueconsulta capacidades e custos, mas não inicia uma geração.Antes de cada POST, o servidor reserva a despesa e guarda um hash do pedido. Se o resultado de um POST ficar incerto por timeout ou falha 5xx, não repete o pedido; a reserva permanece para bloquear uma duplicação. Depois de confirmar a atividade no OpenRouter, reconcilie a entrada correspondente em
requests.json/usage.jsonantes de remover uma reserva.
Nenhuma chave ou chamada de geração paga é necessária para iniciar o processo ou descobrir ferramentas. As consultas GET públicas dos catálogos de modelos e preços não enviam a chave. Consultar estado de uma tarefa, gerar conteúdo ou descarregar vídeo requer autenticação.
Text-to-video e image-to-video
generate_video envia model, prompt e parâmetros suportados; recebe um job assíncrono e persiste o ID. get_video_status consulta o mesmo ID e não cria outro job. O download usa /videos/{id}/content, autenticação OpenRouter e streaming; não usa URLs externos de resultado como links permanentes.
animate_image envia a imagem local como frame_images[0] com frame_type: "first_frame", desde que o modelo publique essa capacidade. O pedido local usa uma data URL; alguns fornecedores exigem uma imagem HTTPS pública e podem rejeitá-la. Nessa situação, passe input_image_url HTTPS de uma imagem publicamente acessível; o MCP não descarrega esse URL e não lhe envia a chave OpenRouter. URLs com IP literal, host local, credenciais ou fragmentos são recusados. O servidor não hospeda automaticamente uma imagem local na Internet.
generate_audio distingue campo omitido, true e false: o campo omitido permanece fora do JSON enviado. HeyGen Video 1 sempre produz áudio; o catálogo publica generate_audio: false, mas esse valor não significa saída silenciosa e o endpoint rejeita generate_audio: false. O MCP recusa esse pedido localmente com VIDEO_AUDIO_REQUIRED. Modelos que anunciam controlo configurável preservam os booleans escolhidos. Para modelos sem esse controlo, o MCP não promete silêncio. O áudio gerado por HeyGen pode ser removido depois com FFmpeg (por exemplo, ffmpeg -i input.mp4 -c:v copy -an output.mp4); esse pós-processamento não faz parte da geração do MCP.
frame_images fixa uma imagem num ponto específico do vídeo; input_references dá imagens para orientar a cena sem fixar o frame. O custo usa SKUs diferentes: para HeyGen Video, a consulta real de 22-10-2026 publica, a 480p, $0.02/s em duration_seconds_480p, $0.07/s em reference_duration_seconds_480p e $0.04 por imagem em reference_input_images. Assim, cinco segundos a 480p estimam $0.10 para texto ou primeiro frame e $0.39 para uma imagem de referência. O custo real continua a ser o informado pelo OpenRouter após a geração. Este projeto gera ficheiros multimédia; não cria modelos 3D manipuláveis nem animações interativas.
Exemplos
Os prompts e os padrões para personagem, edição, animação e homepage estão em examples/README.md. Os testes não geram esses recursos.
Testes
npm test usa respostas HTTP simuladas e um cliente MCP de teste. Abrange descoberta de ferramentas, geração/edição/variações, submissão e recuperação de jobs, download interrompido, limites, persistência, deteção de formato e restrições de caminhos. Inclui um teste com dois processos concorrentes que tenta reservar o mesmo orçamento. Estes testes não usam uma API key nem consomem créditos.
npm run test:catalog consulta os catálogos e preços reais, verifica Nano Banana 2, Nano Banana 2 Lite e HeyGen Video e executa dry_run de geração, edição, vídeo e animação. O teste faz apenas GET e verifica que nenhum POST foi enviado; requer acesso à Internet, mas não uma API key nem créditos.
Existe um teste pago de uma imagem em tests/paid/. Só corre se as variáveis estiverem explicitamente configuradas, incluindo RUN_PAID_TESTS=true, OPENROUTER_API_KEY, YBERU_PROJECT_ROOT, ALLOW_UNKNOWN_COST=true e PAID_TEST_MAX_COST_USD. Não foi executado durante este desenvolvimento.
Limitações conhecidas
O custo antecipado por imagem pode ser desconhecido quando o OpenRouter publica apenas preço por token.
Alguns fornecedores de vídeo não aceitam data URLs; use um URL HTTPS público quando a API do modelo o exigir.
O acompanhamento é sob pedido, sem polling em segundo plano e sem ferramenta de cancelamento.
Só são guardados vídeos cujo tipo MIME e assinatura básica sejam MP4 ou WebM.
A disponibilidade e os parâmetros de modelos mudam;
list_modelsé a fonte atual.
Segurança
A API key só vem do ambiente; o repositório ignora
.enve o servidor limita o host aopenrouter.ai.Prompts não são comandos. O servidor não invoca shell.
Downloads usam apenas o endpoint autenticado de conteúdo do OpenRouter, recusam redirecionamentos e têm limite de tamanho/MIME/assinatura.
Os caminhos de leitura e escrita ficam dentro de raízes autorizadas. Symlinks em entradas/saídas são recusados e ficheiros existentes não são substituídos.
POSTs de geração não têm retry automático. Erros incertos deixam uma reserva persistente para impedir duplicação inadvertida.
Logs e erros não incluem cabeçalhos Authorization nem base64 de imagens; stdout permanece reservado ao MCP.
Roadmap
Presets de estilo, consistência de personagens e geração de spritesheets.
Otimização/conversão de imagens, thumbnails e pipelines imagem → vídeo.
Ferramentas de comparação entre modelos e catálogo local pesquisável.
Integração opcional com FFmpeg, motores de jogo e fornecedores adicionais.
As funcionalidades futuras não fazem parte da implementação atual.
Desenvolvimento
npm run dev
npm run build
npm run typecheck
npm run lint
npm testPara adicionar um modelo, consulte o catálogo em vez de inserir capacidades fixas. As rotas e respostas do OpenRouter estão separadas do registo das ferramentas MCP.
Licença
MIT. Consulte LICENSE.
Referências oficiais
Available Tools
10 toolsanimate_imageB
Anima uma imagem local como primeiro frame num pedido de vídeo. Só está disponível para modelos que publiquem supported_frame_images.first_frame. generate_audio omitido deixa o fornecedor decidir; HeyGen Video 1 exige áudio. O ficheiro é enviado como data URL; alguns fornecedores podem exigir URL HTTPS pública.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | ||
| prompt | Yes | ||
| dry_run | No | ||
| duration | No | ||
| filename | No | ||
| allow_paid | No | ||
| output_dir | No | ||
| resolution | No | ||
| aspect_ratio | No | ||
| max_cost_usd | No | ||
| generate_audio | No | ||
| input_image_url | No | ||
| input_image_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does substantial work: it discloses that the image is uploaded as a data URL, that some providers require a public HTTPS URL, that omitting generate_audio defers to the provider, and that HeyGen Video 1 mandates audio. It says nothing about cost-related behavior (allow_paid, max_cost_usd) or what dry_run actually returns, which for a paid generation call is a meaningful omission.
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 dense sentences, front-loaded with the core action and capability gate, then the audio and upload caveats. No filler, though the cost/permission flags are crowded out by provider-specific trivia.
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?
A 13-parameter, no-annotation, no-output-schema tool with zero schema descriptions needs far more, especially around the paid-generation controls (allow_paid, max_cost_usd) and output handling. The description covers the image-upload path and audio semantics but leaves the majority of the surface unexplained.
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% across 13 parameters, so the description must compensate and largely does not. It adds real meaning only for generate_audio and the image input (data URL vs. public URL); prompt, duration, resolution, aspect_ratio, model, output_dir, filename, dry_run, allow_paid, and max_cost_usd are all undocumented in both schema and description.
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: animating a local image as the first frame of a video request, which is distinct from a plain text-to-video generate_video or a static edit_image. It never names a sibling explicitly, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard precondition (only for models publishing supported_frame_images.first_frame) and a provider-specific caveat about audio, which constrains usage. However, it never says when to choose this over generate_video or edit_image, nor what to do when the model capability check fails, so the when/when-not guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_videoB
Descarrega por streaming um vídeo concluído pelo endpoint autenticado /videos/{id}/content. Usa gravação temporária e renomeação exclusiva; não segue URLs externos.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| job_id | Yes | ||
| filename | No | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses streaming behavior, temporary-file-plus-exclusive-rename semantics (implying non-corrupting writes), the authentication requirement of the endpoint, and that external URLs are not followed (a real SSRF-style safety disclosure). It omits permission scopes, overwrite behavior when filename already exists, and error modes, so 4 rather than 5.
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 with the core action first and behavioral constraints second; no filler, no restatement of 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?
With zero annotation coverage, 0% schema description coverage, and no output schema, the description must do more: it never explains the optional parameters and never says what is returned (a local path? bytes?). Given the structured data provides nothing, this leaves the agent unable to invoke the tool confidently beyond the required job_id.
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% across 4 parameters. The description only implicitly maps job_id to the {id} path segment; it says nothing about index (which video variant), filename (does it override naming?), or output_dir (where files land). An agent must guess at three of four 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 a specific verb (streaming download) and resource (a completed video via /videos/{id}/content), which is clearly distinct from siblings like get_video_status or generate_video. It never names a sibling to differentiate against, so it stops short of 5.
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 precondition 'vídeo concluído' (completed video) implies when the tool is applicable and usefully guards against calling it mid-render. However, it names no alternatives (e.g. why not list_assets) and gives no explicit exclusions or error guidance for incomplete jobs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_imageC
Edita uma imagem local usando input_references do endpoint /images. A origem permanece intacta e a imagem editada é guardada como novo recurso.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | ||
| model | No | ||
| prompt | Yes | ||
| dry_run | No | ||
| filename | No | ||
| allow_paid | No | ||
| output_dir | No | ||
| resolution | No | ||
| aspect_ratio | No | ||
| max_cost_usd | No | ||
| input_image_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does add real value by stating the source image stays intact and the edited result is written as a new resource, which signals non-destructive behavior. However, it is silent on cost implications despite dedicated allow_paid and max_cost_usd parameters, and says nothing about permissions, failure modes, or whether dry_run is honored.
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 short sentences with no filler, and the key constraint (source image preserved, output is a new asset) is front-loaded. The phrase 'input_references do endpoint /images' is slightly jargon-heavy but does not waste space.
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?
An 11-parameter image-editing tool with cost controls, a dry_run flag, output routing, and no annotations or output schema demands far more description than two sentences. The critical cost-safety parameters (allow_paid, max_cost_usd) and the dry_run switch are never mentioned, so an agent could invoke a paid operation unintentionally.
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% across 11 parameters, yet the description only gestures at input_image_path and leaves prompt, model, size, resolution, aspect_ratio, output_dir, filename, dry_run, allow_paid, and max_cost_usd entirely unexplained. An agent cannot tell from the description what units 'size' takes, what 'resolution' means alongside it, or what the paid-operation guardrails do.
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 names a specific verb and resource ('Edita uma imagem local'), and clarifies the mechanism ('usando input_references do endpoint /images'). It does not differentiate itself from close siblings such as generate_variations or animate_image, which also produce derived images, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this tool versus generate_image, generate_variations, or animate_image, all of which operate on images. The only implicit signal is 'imagem local', which hints the input must be an existing local file, but no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_costC
Estima o custo com metadados atuais do OpenRouter. Devolve unknown quando os catálogos não permitem um cálculo fiável; não usa uma tabela fixa.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| count | No | ||
| model | Yes | ||
| duration | No | ||
| operation | No | generate | |
| resolution | No | ||
| aspect_ratio | No | ||
| generate_audio | No | ||
| frame_image_count | No | ||
| reference_image_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that it returns 'unknown' when catalogs cannot support a reliable calculation and avoids a fixed pricing table, but it does not state whether the tool is read-only, what response shape to expect, or other operational 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?
The two sentences are front-loaded and contain no filler. It is appropriately terse, though its brevity becomes a liability for such a parameter-heavy tool.
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 tool with 10 parameters, no annotations, no output schema, and zero schema descriptions, the description is far too thin. It mentions the unknown fallback but does not explain cost units, response format, or how the parameters affect the estimate.
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 10 parameters with 0% schema description coverage, and the description does not explain any of them. Terms like 'type', 'model', 'count', 'duration', 'resolution', 'aspect_ratio', and the image/video-specific counts are left entirely undocumented.
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: 'Estima o custo' using OpenRouter metadata. The purpose is clear, but it does not distinguish itself from sibling generation tools or explicitly say it estimates image/video generation cost.
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 no explicit when-to-use guidance, exclusions, or alternatives. At best, usage is implied by the sibling tools that generate images and videos, but the description itself does not route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageB
Gera imagens pelo endpoint dedicado /images do OpenRouter, valida o modelo e guarda cada resultado dentro de uma raiz local autorizada. A geração exige allow_paid=true.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| size | No | ||
| model | No | ||
| prompt | Yes | ||
| dry_run | No | ||
| filename | No | ||
| allow_paid | No | ||
| output_dir | No | ||
| resolution | No | ||
| aspect_ratio | No | ||
| max_cost_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does disclose meaningful traits: the model gets validated, every result is written to disk inside a restricted local root, and a paid-usage flag is mandatory. It still omits cost behavior (max_cost_usd is only in the schema), overwrite semantics for filename/output_dir, and whether dry_run suppresses the paid call.
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, front-loaded with purpose before constraints. No filler, though the paid-gate sentence could be merged to tighten further.
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 an 11-parameter generative tool with no annotations and no output schema, the description covers the mutation and the paid gate but leaves output shape (URLs? file paths? metadata?), cost guardrails, and the resolution/aspect-ratio relationship unexplained. Adequate as a minimum but incomplete.
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% across 11 parameters, so the description must compensate and it only explains allow_paid. The meaning and valid values of size vs resolution vs aspect_ratio, n's cap, dry_run, filename and output_dir interactions, and the cost ceiling are all left entirely undocumented.
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 ('Gera imagens') plus the mechanism (dedicated OpenRouter /images endpoint) and a side effect (persists results under an authorized local root). It doesn't explicitly distinguish itself from sibling mutators like edit_image or generate_variations, but the purpose is 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?
It gives one real precondition ('A geração exige allow_paid=true'), which is genuinely useful routing information. However, it never says when to prefer this over edit_image, animate_image or generate_variations, nor when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_variationsC
Gera um conjunto limitado de variações de um prompt ou imagem. Usa n quando publicado pelo modelo; caso contrário envia exatamente count pedidos, após autorização explícita.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | ||
| count | No | ||
| model | No | ||
| prompt | Yes | ||
| dry_run | No | ||
| filename | No | ||
| allow_paid | No | ||
| output_dir | No | ||
| resolution | No | ||
| aspect_ratio | No | ||
| max_cost_usd | No | ||
| input_image_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It discloses that the tool uses n when the model publishes it, otherwise sends exactly count requests after explicit authorization, but it omits cost implications, output/file side effects, and permissions for a 12-parameter generation 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?
The description is two sentences with no wasted words and front-loads the core purpose. The second sentence is dense but still concise; clarity could be improved by defining 'n' in context.
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?
This is a complex tool with 12 parameters, no annotations, no output schema, and 0% schema description coverage. The description covers only the generation purpose and a narrow request-count rule, leaving most operational and parameter details missing.
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 for all 12 parameters. It only explains the count parameter and the model-specific 'n' behavior, leaving prompt, size, model, dry_run, filename, allow_paid, output_dir, resolution, aspect_ratio, max_cost_usd, and input_image_path undocumented.
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: 'Gera um conjunto limitado de variações de um prompt ou imagem.' This is clear enough to distinguish it from generating a single image, though it does not explicitly reference sibling tools like generate_image or edit_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?
There is no guidance on when to use this tool versus alternatives such as generate_image, edit_image, or animate_image. The mention of 'autorização explícita' is a behavioral constraint, not a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_videoB
Inicia text-to-video de forma assíncrona e persiste o job. generate_audio é opcional: omitido deixa o fornecedor decidir; HeyGen Video 1 exige áudio. Geração exige allow_paid=true.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | ||
| prompt | Yes | ||
| dry_run | No | ||
| duration | No | ||
| filename | No | ||
| allow_paid | No | ||
| output_dir | No | ||
| resolution | No | ||
| aspect_ratio | No | ||
| max_cost_usd | No | ||
| generate_audio | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose three meaningful traits: the operation is asynchronous, a job record is persisted, and paid generation requires allow_paid=true. It still omits cost implications (max_cost_usd exists but is unexplained), what a failed/queued job looks like, and how the job is later retrieved via get_video_status.
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 compact sentences with the core operation front-loaded and no filler. Dense, though the model-specific constraint is packed into a sentence alongside the audio semantics, slightly blurring the focus.
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 an 11-parameter, no-output-schema, no-annotation mutation tool, the description leaves most of the surface unexplained. An agent cannot infer valid values for resolution, aspect_ratio, duration, model, or the cost guard from either the schema or the description.
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% across 11 parameters, so the description must compensate and largely fails. It explains only generate_audio, allow_paid, and a model-specific constraint (HeyGen Video 1), leaving prompt, duration, resolution, aspect_ratio, max_cost_usd, dry_run, filename, and output_dir entirely undocumented.
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 ('Inicia text-to-video') plus the async persistence behavior, so the agent knows exactly what is produced. It does not distinguish itself from siblings like animate_image (which also produces video) or generate_image, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real conditional guidance: generate_audio is optional and omission delegates to the provider, and allow_paid=true is a hard prerequisite for generation. However, it never says when to choose this over animate_image or generate_variations, nor when dry_run should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_statusA
Consulta o estado de uma tarefa de vídeo existente pelo ID local ou remoto. Nunca cria uma nova geração.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden; it does disclose the important trait that this is a read-only status lookup that never creates a generation. It omits whether the call is retryable, what happens for invalid/expired job IDs, or whether the job state may be terminal.
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 short sentences, front-loaded with the action and scope, with the disambiguating constraint placed immediately after. Nothing is wasted.
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 read tool with no annotations, the description covers action, scope, and the key non-creating constraint. The main remaining gap is that with no output schema, it never indicates what 'estado' contains (status values, progress, output URL).
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?
Only one parameter and schema description coverage is 0%, so the schema alone says nothing about job_id. The description partially compensates by clarifying that the ID may be either local or remote, but it gives no format, example, or origin for those ID types.
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 ('Consulta o estado de uma tarefa de vídeo existente pelo ID') and scopes it to existing jobs. The closing clause 'Nunca cria uma nova geração' implicitly separates it from generate_video, though no sibling is named explicitly.
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 negative constraint ('Nunca cria uma nova geração') tells the agent this is not a generation call, which is useful routing. However, it never says when to call it instead of download_video or how it fits after generate_video (polling an existing job), so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assetsB
Lista metadados de imagens e vídeos gerados pelo MCP, sem devolver conteúdo binário.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | all | |
| limit | No | ||
| project_root | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden; it does disclose that no binary content is returned, which sets the response expectation. It is silent on read-only safety, default page size, ordering, and what project_root scoping means, so several behavioral traits remain undisclosed.
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?
A single efficient sentence with the resource and the non-binary constraint front-loaded and no filler. It is arguably too terse for what it omits, but there is no wasted text.
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?
Three parameters at 0% schema coverage, no annotations, and no output schema, so the description is the only channel for guidance — yet it explains neither the project_root scoping requirement nor the limit/pagination behavior, leaving the agent to guess at two of three inputs.
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% and the description adds nothing about any of the three parameters. The 'type' enum is self-explanatory, but 'limit' defaults/caps and especially 'project_root' (no enum, no description, no hint that it scopes which project's assets are listed) are left entirely unexplained in both places.
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 ('Lista') plus a precise resource ('metadados de imagens e vídeos gerados pelo MCP') and adds the key scope qualifier 'sem devolver conteúdo binário'. An agent can tell this is a metadata-listing tool rather than a generation or download tool, though no sibling is named explicitly.
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?
Usage is only implied: the phrase 'sem devolver conteúdo binário' hints that actual file retrieval belongs to a different tool (likely download_video), but that alternative is never named and no when-to-use condition is stated. Adequate for an obvious listing tool, but it leaves the agent to infer the boundary with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsB
Consulta os catálogos atuais de modelos de imagem e vídeo do OpenRouter. Expõe somente capacidades e preços publicados pelos endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | all | |
| search | No | ||
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioural disclosure. It does add a useful data-provenance caveat ('expõe somente capacidades e preços publicados pelos endpoints'), implying no local inference or estimation, but it never states the operation is read-only, that results may be cached, or what the response shape is.
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 short sentences, front-loaded with the verb and resource, with no redundant restatement of the tool name. Nothing is wasted.
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 three-parameter tool with zero schema description coverage and no annotations or output schema, the description is too thin. An agent cannot learn from it what search does, what refresh invalidates, or what the returned catalog entries contain.
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% and the description never mentions type, search, or refresh. Only an indirect hint exists ('modelos de imagem e vídeo' loosely maps to the type enum), leaving the search filter and especially the refresh/cache-reset flag completely unexplained.
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 (consulta) and a specific resource (catálogos atuais de modelos de imagem e vídeo do OpenRouter), which clearly separates it from the generation/estimation siblings. It does not explicitly name an alternative, but the read-only catalog framing is 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?
Usage is only implied: 'catálogos atuais' suggests discovery of available models, but there is no statement about when to prefer this over estimate_cost or before calling generate_image/generate_video. No exclusions or prerequisites are given.
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.
10 tool updates
v0.1.0- First observed
animate_image - First observed
download_video - First observed
edit_image - First observed
estimate_cost - First observed
generate_image - First observed
generate_variations - First observed
generate_video - First observed
get_video_status - First observed
list_assets - First observed
list_models
TDQS
Scored across 10 tools
The tools mostly target distinct resource/action pairs, and descriptions clarify boundaries such as generate_video versus animate_image and generate_image versus edit_image. Minor potential confusion remains around generate_variations, which overlaps conceptually with generate_image/edit_image, but its purpose is still distinguishable.
All tool names use consistent snake_case and follow a predictable verb_noun pattern: list_models, generate_video, get_video_status, estimate_cost, list_assets, generate_image, edit_image, generate_variations. Even animate_image fits the same convention as a specific action on a resource.
Ten tools are well-scoped for this server's media-generation purpose. Each tool covers a distinct operation across models, images, videos, assets, and cost estimation without excessive surface area.
The surface covers the main lifecycle: listing models, generating/editing images, generating variations, generating/an image-animating videos, checking status, downloading videos, listing assets, and estimating cost. Minor gaps exist around asset deletion/cleanup and job cancellation, but core workflows are well covered.
Maintenance
Related MCP Connectors
Multi-model AI image and video generator. 14 models behind one OAuth-secured MCP endpoint.
Generate images, video, audio and short films with 140+ AI models from any MCP client.
Create and manage AI image and video generations through Quriov's fixed public MCP tools.
Create images & video from any MCP agent — 17 models, spend limits, one URL.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables MCP-compatible clients to generate and upscale AI images, videos, music, and sound effects, manage generation jobs, access model catalogs, and track credits.3MIT
- AlicenseNot gradedqualityBmaintenanceEnables image and video generation and editing through MCP tools, including image editing, upscaling, background removal, video generation, image-to-video, and video extension. Video generation runs asynchronously with job status and result retrieval.MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to generate images and iteratively edit them using OpenAI's gpt-image-2 models, with session management, background job polling, and local file saving.8556 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables MCP-compatible clients to generate images and videos, synthesize speech, clone and design voices, and create related media outputs.183 npmMIT