Sample MCP server that gates tools behind active subscriptions using PayMCP
Single tool 'add' has a basic description but lacks depth and context. Description (79 chars) is below the 194-char baseline for production tools. Input schema is present with proper types (float) and parameter descriptions, but the tool description does not explain WHEN to use it, what prerequisites exist (OAuth + Stripe subscription), or what the return format is. No output schema documented. The tool is gated behind subscription logic via decorator, but this critical context is absent from the description text itself, LLMs cannot infer it from the decorator alone.
Add two numbers (requires Stripe subscription and valid OAuth token).
Tool description lacks prerequisites and context. Does not mention OAuth requirement, Stripe subscription gating, or return format. LLMs cannot infer decorator-based constraints from the description text alone.
No output schema documented. Tool returns structured content but LLMs have no formal specification of the response format (text field, content array structure, etc.).
Description is 79 characters, below the 194-char production baseline. Lacks actionable detail on when/why to call this tool vs alternatives, and what happens on success.
Tool name 'add' is generic and does not convey the subscription/payment context. A name like 'add_with_subscription' or 'add_numbers_premium' would signal the gating to LLMs.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
No error handling guidance. If subscription is invalid or OAuth token expired, the tool will fail, but the description does not explain what errors are possible or how to recover.