Production-ready starter for building a pay-per-use MCP server on the Apify platform. Ships with Streamable HTTP transport, Apify Actor Standby mode, and per-event billing wired up.
Two tools with clear names and basic schemas. Both have descriptions and input validation via Zod. However, descriptions are minimal (under 100 chars), lack WHEN/WHY guidance, and output schemas are not documented. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Naming follows verb_noun pattern but descriptions do not explain prerequisites or dependencies.
Summarize a block of text into N sentences using Claude. Paid tool.
Count words, characters, and sentences in a block of text. Free.
Tool descriptions lack WHEN/WHY context. 'Count words, characters, and sentences in a block of text. Free.' does not explain when to use this vs other text analysis tools or what the LLM should do with the output.
Output schemas not documented. Callers cannot know the structure of returned fields (e.g., does word-count return {words, characters, sentences} or {count: {words, characters, sentences}}?). LLMs must infer structure from response text.
No tool annotations. Both tools lack readOnlyHint/destructiveHint/idempotentHint. The summarize-text tool calls an external API (Anthropic) and should be marked as potentially non-idempotent or destructive (charges billing).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Error messages lack recovery guidance. summarize-text returns 'Error summarizing text: <message>' but does not suggest next steps (retry, check API key, contact support). Per pattern:recovery-guide, errors should guide the LLM's next action.
Parameter descriptions are minimal. 'The text to analyze' and 'The text to summarize (minimum 50 characters)' lack format guidance, examples of valid input, or dependency hints.