RunAPI Qwen 2 MCP server for image generation: create tasks, poll results, and check pricing across 2 model variants from Claude Code, Codex, Cursor, and VS Code.
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation and error handling. get_task has optional parameters with minimal guidance on defaults and dependencies. check_pricing lacks clarity on what 'model' and 'action' mean in practice. Neither tool documents output structure or error recovery paths. Descriptions are present but generic (avg ~80 chars, below the 194-char baseline for A+ tools). No parameter descriptions visible in the schema definitions, only inline in code comments. Error handling returns jsonText() with generic error fields, offering no recovery guidance to LLMs.
Look up RunAPI pricing for the qwen-2 model line.
Fetch the current status and latest result payload for a qwen-2 task.
Parameter descriptions missing from schema. 'action' and 'model' parameters lack descriptions explaining what values are valid, when they default, and what happens if omitted.
Output schema not documented. Neither tool specifies what fields the LLM should expect in the response (e.g., does get_task return task.status, task.result, task.error?). LLMs cannot plan downstream calls without knowing response structure.
Error handling provides no recovery guidance. Errors return generic jsonText({error: ...}) with no hint on whether to retry, call a different tool, or ask the user. Pattern requires 'what to do next' in error responses.
Ambiguous parameter semantics. 'action' in get_task is described as 'Asynchronous endpoint the task was created on' but check_pricing uses 'action' to mean 'Endpoint name'. Same parameter name, different meanings across tools, LLMs will conflate them.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Tool descriptions lack context on when to use each tool. 'Fetch the current status...' does not explain: Is this for polling async tasks? What does 'latest result payload' contain? When should the LLM call this vs. create a new task?