Skip to main content
Glama

Raywake MCP

500+ AI image, video and audio models in Claude, ChatGPT, Cursor and any MCP client.

An open-source TypeScript MCP server for Raywake. Use the hosted connector at https://mcp.raywake.com/v1 with nothing to install, or run this package locally over stdio with npx (Node.js 20 or later).

Get an API key

Create a key at raywake.si/api-keys. Enable models:read, generate, jobs:read, and wallet:read for all tools. Add USD balance at raywake.si/billing when you want to generate. Browsing, quotes and job checks are free.

Replace YOUR_RAYWAKE_API_KEY in the configurations below. Keep your key private and keep configuration files containing it out of version control.

Related MCP server: media-gen-mcp

Claude Code

claude mcp add raywake -e RAYWAKE_API_KEY=YOUR_RAYWAKE_API_KEY -- npx -y @raywake/mcp

Cursor

Add to ~/.cursor/mcp.json (or your project's .cursor/mcp.json), then enable Raywake in MCP settings:

{
  "mcpServers": {
    "raywake": {
      "command": "npx",
      "args": ["-y", "@raywake/mcp"],
      "env": { "RAYWAKE_API_KEY": "YOUR_RAYWAKE_API_KEY" }
    }
  }
}

Claude Desktop

Open Settings > Developer > Edit Config and add to claude_desktop_config.json. Restart Claude Desktop after saving.

{
  "mcpServers": {
    "raywake": {
      "command": "npx",
      "args": ["-y", "@raywake/mcp"],
      "env": { "RAYWAKE_API_KEY": "YOUR_RAYWAKE_API_KEY" }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json, then refresh MCP servers:

{
  "mcpServers": {
    "raywake": {
      "command": "npx",
      "args": ["-y", "@raywake/mcp"],
      "env": { "RAYWAKE_API_KEY": "YOUR_RAYWAKE_API_KEY" }
    }
  }
}

VS Code

Add to .vscode/mcp.json. VS Code prompts for your key and stores the input securely:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "raywake-api-key",
      "description": "Raywake API key",
      "password": true
    }
  ],
  "servers": {
    "raywake": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@raywake/mcp"],
      "env": { "RAYWAKE_API_KEY": "${input:raywake-api-key}" }
    }
  }
}

These JSON examples are complete minimal configurations. Merge the raywake entry into an existing configuration to retain your other servers. On Windows, if the client cannot start npx, use "command": "cmd" and "args": ["/c", "npx", "-y", "@raywake/mcp"].

Remote (no install)

Raywake also hosts the same tools over Streamable HTTP:

https://mcp.raywake.com/v1
  • Claude.ai / Claude Desktop: Settings > Connectors > Add custom connector, paste the URL, then sign in with your Raywake account.

  • ChatGPT: Settings > Connectors > Create (developer mode), paste the URL, then sign in with your Raywake account.

  • Claude Code: claude mcp add --transport http raywake https://mcp.raywake.com/v1, then run /mcp to sign in. To use an API key instead: add --header "Authorization: Bearer YOUR_RAYWAKE_API_KEY".

OAuth connections set a per-generation spending limit at sign-in and expire after 30 days; you can disconnect them at any time in Raywake settings.

Tools

Tool

Cost

Purpose

search_models

Free

Search by query, category, modality (image, video, audio) and page (starts at 1; 20 results per page)

list_categories

Free

List available categories

get_model

Free

Read the exact input schema and indicative starting price in USD

quote

Free

Price an exact model and input; returns quote_id, price_usd, expires_at

generate

Paid

Submit the approved exact model, input, quote_id; optional idempotency_key for recovery

get_job

Free

Read job_id, outputs and status; optional wait_seconds from 0 to 45

list_jobs

Free

List account history; optional limit (1–500), offset, status

get_account

Free

Read available, reserved and debt balances in USD

get_playbook

Free

Read the short workflow and spending rules

search_models maps query to the API's search, and page to limit/offset. Because the API has no modality parameter, modality matches category/tags locally before pagination. Some models may match multiple modalities. get_model preserves the gateway's openapi schema and derives a starting price from its retail price guide when necessary. Starting prices are per the returned unit, such as image or second; they are not a quote for a complete run. An unavailable starting price is returned as null.

Example prompts

  • "Find image models for product photography and compare their starting prices in USD."

  • "Show the schema for this model, prepare my input and get a quote. Ask me before spending anything."

  • "Quote a short video using this public HTTPS image URL. Show me the price before generating."

  • "I approve this quoted price and input. Generate it, then check the existing job until it finishes."

  • "Show my recent jobs and retrieve the newest result."

  • "What is my available USD balance?"

What costs money

Only generate can spend your Raywake balance. Search, schemas, quotes, wallet reads and job polling are free. The assistant must follow:

  1. Search for a model and read its schema with get_model.

  2. Call quote with the complete input.

  3. Show you the USD price, expiry and whether it is a usage-based maximum reservation, and get your approval.

  4. Call generate with that exact model, input and quote ID.

  5. Continue with get_job; polling never starts another generation.

The quote's settles_on_usage flag indicates a maximum reservation: actual billed usage is charged and unused balance is returned. For an expired quote or changed input, obtain a new quote and approval. If balance is insufficient, top up.

Approval is a rule communicated to the assistant through descriptions and the built-in playbook; the server cannot independently verify a conversation's human approval. Your MCP client's confirmation settings should require approval for the paid generate tool. Quote ownership, expiry and exact input binding are enforced by Raywake's gateway, with additional matching checks for quotes known to this process.

Waiting and safe retries

generate waits for up to 45 seconds including submission, then returns the known job_id, latest status and its generated idempotency_key. If polling fails, it retains the job reference. Continue using get_job with wait_seconds up to 45. Terminal states are succeeded, failed, needs_review, submission_unknown, and needs_reconciliation. Review and reconciliation states require attention; do not submit a replacement run automatically.

Save the idempotency_key, including from an error result. If the submission response is lost, retry generate with the same key, model, input and quote ID. The gateway returns the existing job for an exact retry, including after quote expiry. Never use a new key to recover an uncertain submission. Within a running server, repeating the same generation request also reuses its saved key. After restarting, supply the saved key; the gateway remains the authority for recovery of quotes no longer in local memory. Keys and quote fingerprints are held only in memory. If the entire tool response and process are lost, use list_jobs to find the existing job before doing anything that may spend again.

Media inputs

There is no upload tool: media-asset upload is not available to API keys. Models that accept images, videos or audio by URL need publicly accessible HTTPS URLs in the fields specified by get_model. Host local files publicly first. Local paths, file://, private URLs and data: URLs cannot be used as uploaded media. Output links may be temporary; call get_job again to retrieve current links.

Configuration

Environment variable

Required

Default

RAYWAKE_API_KEY

Yes

None; sent as a Bearer token

RAYWAKE_API_BASE

No

https://api.raywake.com

The base override must use HTTPS, except HTTP on localhost for local mocks. It must not contain credentials, a query or a fragment. Only use an override you trust: it receives your API key. Redirects are rejected. The server reserves stdout for MCP and never logs the key or raw upstream error bodies.

Privacy

Prompts and inputs go to Raywake and the selected model provider to fulfil your request. Your MCP client also handles the conversation and tool results. Do not include secrets in model inputs. This local package does not add analytics or write prompts, keys, quotes or results to disk. Client logging and the services' retention policies apply separately.

Development

npm install
npm run build
npm test
npm run smoke

npm test builds the CLI, uses Vitest with a mocked fetch and dummy credentials, and checks real stdio tool discovery without API access. The separate npm run smoke SDK test starts its own HTTP server on 127.0.0.1 with a dummy key, launches the compiled CLI, lists all nine tools and exercises discovery, quote, generation and job retrieval. Neither command calls api.raywake.com. The HTTP smoke requires permission to bind a local port; restricted sandboxes may reject it with EPERM.

To connect an MCP client to this unpublished checkout, replace the npx configuration with "command": "node" and "args": ["/absolute/path/to/raywake-mcp/dist/index.js"]; keep the same environment configuration. For a terminal launch after building:

RAYWAKE_API_KEY=YOUR_RAYWAKE_API_KEY node dist/index.js

server.json is the metadata published to the official MCP Registry as si.raywake/mcp. Release and registry publication are separate manual steps. The npm package's mcpName matches si.raywake/mcp; version fields must stay in sync.

The small TypeScript/npm/stdio layout is inspired by Wiro-MCP (MIT). Raywake uses its own Bearer authentication, quote-before-generation workflow and gateway contract. No Wiro source code is copied.

License

MIT, copyright Raywake.

Available Tools

9 tools
generateA
Idempotent
Inspect

PAID: the only tool that spends the user's Raywake balance. Call ONLY after the user approves the quoted USD price, with quote_id from quote for exactly the same model+input. Waits up to 45 seconds. Save the returned idempotency_key even on errors; reuse it with the exact request to recover a lost response. Continue existing jobs with free get_job, never a new generation.

NameRequiredDescriptionDefault
inputYesExact provider-native input matching get_model schema. Media references must be public HTTPS URLs.
modelYesExact endpoint_id returned by search_models/get_model.
quote_idYes
idempotency_keyNoSaved key for an exact retry. Omit for a new approved generation; the server creates and returns one.

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond the annotations: annotations only say it's not read-only, is idempotent and open-world, while the description discloses the monetary cost, a 45-second wait, and error-recovery semantics (persist idempotency_key even on failures, reuse with the identical request to recover a lost response). It stops short of describing what a successful response contains beyond the key.

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

Conciseness5/5

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

Cost warning is front-loaded as the first token, followed by the gating condition, then latency, then recovery guidance, then the sibling routing. Six dense clauses, no filler, every sentence carries an operational constraint.

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

Completeness4/5

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

For a 4-parameter paid mutation with no output schema, coverage is strong: cost, gating, latency, retry/idempotency and next-step routing are all present, and the nested input object is deferred to the referenced get_model schema. Missing only a description of the full success payload (e.g. the resulting job id/status) that the caller must act on.

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

Parameters4/5

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

Schema coverage is 75% and the schema already documents input, model and idempotency_key. The description still adds meaning the schema cannot: quote_id must come from quote for exactly the same model+input, and idempotency_key must be reused only with the exact same request. It doesn't add format detail for quote_id itself, which the schema leaves bare.

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

Purpose5/5

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

Names the specific role precisely: the only tool that spends the user's Raywake balance, invoked with model+input+quote_id and producing a generation job. It is explicitly differentiated from the free siblings (quote produces the quote_id, get_job continues existing jobs) so an agent can place it in the workflow without opening any schema.

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

Usage Guidelines5/5

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

Gives a hard precondition (only after the user approves the quoted USD price), the exact provenance of quote_id, and matching constraint (same model+input). It also states the negative case: never start a new generation to continue a job — use free get_job instead.

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

get_accountA
Read-onlyIdempotent
Inspect

Free. Read available, reserved and debt wallet balances in USD. To add balance, top up at https://raywake.si/billing.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is largely covered. The description adds one genuinely new behavioral fact — the call is free — but says nothing about return shape, rate limits or what happens with an unfunded/debt wallet.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core action front-loaded and the upsell URL demoted to the end.

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

Completeness4/5

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

For a parameterless read with rich annotations and no output schema, the description covers what is returned and the currency. It stops just short of describing the response envelope or error cases, but nothing essential for correct invocation is missing.

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

Parameters4/5

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

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

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

Purpose5/5

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

States a specific verb and resource ('Read ... wallet balances') plus the exact data returned (available, reserved, debt) and the unit (USD). This is unambiguous and cannot be confused with any sibling such as search_models or generate.

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

Usage Guidelines4/5

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

Implies the when: use it to inspect balances, and it explicitly redirects the write-side intent elsewhere ('To add balance, top up at ...'). No explicit when-not condition, but the read-only scope is clear from the phrasing and annotations.

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

get_jobA
Read-onlyIdempotent
Inspect

Free. Read an existing job and its outputs, optionally waiting up to 45 seconds. Does not start or bill a new generation. Review states are terminal; do not resubmit.

NameRequiredDescriptionDefault
job_idYes
wait_secondsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, yet the description still adds real value: it is free, does not incur billing, waits up to 45 seconds, and that review states are terminal. It omits what happens if the wait expires before completion, which would be the last piece an agent needs.

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

Conciseness4/5

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

Three short sentences with the key constraint ('Free') front-loaded and zero repetition of schema data. Slightly clipped phrasing ('Free.' as a fragment) but every sentence earns its place.

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

Completeness4/5

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

For a read-only polling tool with no output schema, it covers the essentials: no cost, no side effects, wait semantics, and terminal-state behavior. Missing only the timeout-expiry behavior and how to interpret a still-running result.

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

Parameters3/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It explains `wait_seconds` semantically ('optionally waiting up to 45 seconds'), but says nothing about `job_id` (format, where to obtain it, length constraints), leaving one of two parameters undocumented.

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

Purpose5/5

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

States a specific verb and resource ('Read an existing job and its outputs') and immediately distinguishes itself from the sibling `generate` by declaring it 'Does not start or bill a new generation'. An agent can tell exactly which tool performs retrieval.

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

Usage Guidelines4/5

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

Clearly implies when to use it (polling an existing job) and warns against misuse ('do not resubmit' when review states are terminal). It does not explicitly name `generate` as the alternative for new work, so routing guidance is inferential rather than prescriptive.

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

get_modelA
Read-onlyIdempotent
Inspect

Free. Read a model input schema and indicative starting price in USD. Never invent inputs. Use public HTTPS URLs for media; local file upload is unavailable.

NameRequiredDescriptionDefault
modelYesExact endpoint_id returned by search_models/get_model.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new traits: the call is free, pricing returned is only 'indicative', and media must be public URLs because local upload is unsupported. It stops short of describing the shape or size of the returned schema, but for a read-only lookup that is a minor gap.

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

Conciseness4/5

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

Three short sentences, front-loaded with the free-cost fact and immediately followed by the purpose. Every sentence carries information, though 'Free.' as a standalone fragment reads as a bullet-list artifact rather than smoothly integrated framing.

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

Completeness4/5

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

For a one-parameter read-only tool with full annotation coverage and no output schema, the description covers purpose, cost, input-sourcing rules, and the media constraint. The only meaningful omission is where the endpoint_id comes from and what the response actually contains, both of which an agent could reasonably want.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'model' parameter is fully documented in the schema, including its link to search_models/get_model. The description adds no format, casing, or sourcing detail beyond that, so the baseline of 3 applies rather than any uplift.

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

Purpose4/5

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

States a specific verb and resource plus the two things returned: the model's input schema and an indicative starting price in USD. That is far more informative than the name 'get_model'. It does not name or contrast with search_models (which supplies the endpoint_id this tool requires), so sibling differentiation is left implicit.

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

Usage Guidelines3/5

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

'Never invent inputs' and 'use public HTTPS URLs for media; local file upload is unavailable' are real invocation constraints that steer behavior. However, there is no explicit guidance on when to use this versus search_models for discovery or quote for pricing, which is the main decision an agent faces among these siblings.

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

get_playbookA
Read-onlyIdempotent
Inspect

Free. Read the short Raywake workflow: search, schema, free quote, user price approval, paid generate, free job polling. Explains USD prices and public media URLs.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds genuine context beyond them: it costs nothing ('Free'), and it discloses content scope (USD prices, public media URLs). It stops short of describing the exact return structure, but that is a minor gap.

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

Conciseness4/5

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

Short and front-loaded with the 'Free' cue, then a compact enumeration of the workflow. The parenthetical step list is dense but each item earns its place.

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

Completeness4/5

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

For a no-param, no-output-schema documentation tool, the description gives enough about what it covers and its cost to call it confidently. A line on the response shape would fully close the gap.

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

Parameters4/5

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

Zero parameters and 100% schema coverage, so there is nothing for the description to compensate for. Baseline 4 applies.

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

Purpose4/5

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

States a specific action and resource: reading the 'short Raywake workflow' that enumerates the pipeline (search, schema, quote, approval, generate, polling). This is clearly distinct from the sibling action tools, though it doesn't explicitly contrast itself with them.

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

Usage Guidelines3/5

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

'Read the short Raywake workflow' implies you call it to understand the process, and 'Free' hints at why you'd start here. But there's no explicit when-to-use/when-not or reference to alternatives like get_account or quote.

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

list_categoriesA
Read-onlyIdempotent
Inspect

Free. List the available model categories for search_models.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds one genuinely non-schema piece of context, "Free" (no credit cost), which is valuable for planning multi-call workflows; however it says nothing about return shape or whether the list is exhaustive or paginated.

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

Conciseness5/5

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

Nine words, zero waste. The cost note and the resource statement are both front-loaded and no filler sentences dilute the definition.

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

Completeness4/5

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

For a zero-param read-only lookup with annotations covering safety and idempotency, this is nearly complete. The only gap is the absence of any hint about the returned category values (count, format, or whether they map 1:1 to search_models filters), which matters slightly more given there is no output schema.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. The description correctly signals a parameterless call by saying nothing about inputs, and the empty schema confirms it.

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

Purpose4/5

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

Specific verb+resource ("List the available model categories") tied to the sibling that consumes them (search_models), so the agent can tell it apart from get_model or get_playbook. It stops short of defining what a category is relative to model records, but the core purpose is unmistakable.

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

Usage Guidelines3/5

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

"for search_models" implies the discovery pattern: call this first to learn valid category values before searching. There is no explicit when-not guidance and no stated alternative, so the usage is implied rather than spelled out.

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

list_jobsA
Read-onlyIdempotent
Inspect

Free. List recent jobs for this account, newest first. Recover an existing job_id and continue with get_job.

NameRequiredDescriptionDefault
limitNo
offsetNo
statusNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuinely new context: that the call is free (no cost) and that results are ordered newest-first. It omits pagination behavior and the meaning of the status filter, which would have been useful.

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

Conciseness5/5

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

Two short sentences, zero filler, with the behavioral facts ('Free', newest-first) front-loaded before the follow-up routing advice. Every clause earns its place.

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

Completeness3/5

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

With no output schema, the description does well to say results are newest-first and to point at get_job for detail. However, for a paginated list tool with three entirely undocumented parameters, it leaves the agent without guidance on paging or filtering, which is the main gap.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden for limit, offset, and status — and it addresses none of them. It never mentions that status filters results, that limit defaults to 20 and caps at 500, or what the offset does. An agent must infer all of this from bare property names.

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

Purpose4/5

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

States a specific verb and resource ('List recent jobs for this account') plus a scoping detail ('newest first'). It also distinguishes itself from get_job by naming that sibling as the follow-up step, though it does not differentiate from list_categories or the other list-style siblings.

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

Usage Guidelines4/5

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

Gives a clear use case: recover an existing job_id, then continue with get_job. That is an explicit alternative-and-next-step pointer. It stops short of saying when *not* to use it (e.g., when you already have the job_id, skip straight to get_job).

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

quoteAInspect

Free. Get a time-limited USD price for exact model+input without spending balance. Show the price, expiry and any usage-based maximum reservation to the user and obtain approval before generate.

NameRequiredDescriptionDefault
inputYesExact provider-native input matching get_model schema. Media references must be public HTTPS URLs.
modelYesExact endpoint_id returned by search_models/get_model.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true; the description adds genuinely non-obvious behavior: it is free, does not spend balance, the price is time-limited, and a usage-based maximum reservation may apply. It does not clarify whether the reservation actually holds funds or how long the expiry window is.

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

Conciseness4/5

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

Three short sentences, front-loaded with the cost fact ('Free.') an agent needs first. The approval instruction is compressed into a slightly dense clause but nothing is redundant.

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

Completeness4/5

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

With no output schema, the description usefully names what comes back (price, expiry, usage-based maximum reservation) and the required human-approval gate. Remaining gap is the reservation semantics and whether the quote holds funds, which matters for a non-readOnly tool with openWorldHint=true.

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

Parameters3/5

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

Schema coverage is 100% and the schema already spells out 'exact endpoint_id returned by search_models/get_model' and the provider-native input object. The description's 'exact model+input' only reinforces that constraint without adding format, size, or media-reference guidance beyond the schema.

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

Purpose5/5

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

States a specific verb+resource: get a time-limited USD price for an exact model+input. It also implicitly distinguishes itself from the sibling 'generate' by naming it as the downstream step, so an agent can tell pricing from execution without opening the schema.

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

Usage Guidelines4/5

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

Clearly sets the workflow context: call this before generate, show the user the price/expiry/reservation, and get approval. There are no explicit exclusions (e.g. when a cached or existing quote should be reused instead of re-quoting), which keeps it just short of a 5.

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

search_modelsB
Read-onlyIdempotent
Inspect

Free. Search Raywake AI models; returns indicative starting prices in USD. Use get_model before quote. Modality filters category/tags locally before pagination.

NameRequiredDescriptionDefault
pageNo
queryNo
categoryNo
modalityNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and non-destructive, so the bar is lower, yet the description adds real context: the tool is free, prices are 'indicative starting prices' rather than quotes, and modality filtering happens locally before pagination. That last point is a non-obvious behavioral trait an agent would otherwise have to discover empirically.

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

Conciseness4/5

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

Four short sentences, front-loaded with the verb and cost signal, with no filler. The telegraphic style ('Use get_model before quote') is slightly ambiguous but earns its brevity.

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

Completeness3/5

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

With no output schema, the description should say more about the shape of results; it only mentions indicative prices. It is adequate for a discovery call but leaves result fields, pagination limits and empty-result behavior unstated.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It only clarifies modality's local-filtering behavior and its interaction with pagination; query, category and page are left entirely undocumented, and it's unclear whether category is exact-match or full-text.

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

Purpose4/5

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

States a specific verb and resource ('Search Raywake AI models') and what comes back (indicative starting prices in USD). It signals the search-vs-detail split with get_model, though it doesn't explicitly distinguish itself from list_categories.

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

Usage Guidelines3/5

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

'Use get_model before quote' establishes a workflow around the tool, implying search is the discovery step and get_model the detail step. However, there is no explicit statement of when to prefer this over list_categories or when not to use it, so guidance is implied rather than stated.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.0
    • First observedgenerate
    • First observedget_account
    • First observedget_job
    • First observedget_model
    • First observedget_playbook
    • First observedlist_categories
    • First observedlist_jobs
    • First observedquote
    • First observedsearch_models

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

Each tool has a fairly distinct role, and the free-vs-paid split (quote vs generate) is clearly signposted. Minor overlap exists between list_categories/search_models and search_models/get_model, since search already returns pricing and categories are also filters, but descriptions help differentiate them.

Naming Consistency4/5

Most names follow a predictable verb_noun pattern (list_categories, search_models, get_model, get_job, list_jobs, get_account, get_playbook). The single-word quote and generate are sensible but break the pattern slightly.

Tool Count5/5

Nine tools is well-scoped for an AI model generation service, covering discovery, pricing, generation, job polling, and account state without redundancy. Each tool appears to earn its place.

Completeness4/5

The core lifecycle (browse → schema → quote → approve → generate → poll → list) and wallet reading are covered, plus a playbook. Minor gaps: no job cancellation/abort tool, and balance top-up is delegated to an external URL.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers