Example MCP server with tools demonstrating phrases about animals
This server has severe definition quality issues that make it unsuitable for production use. Both tools have identical, misleading descriptions ('Prints a phrase about a cat' for both about_mouse and about_cat), zero input schema complexity (empty objects), and no parameter documentation. The naming is vague (about_mouse, about_cat do not start with action verbs like 'get_', 'describe_', or 'retrieve_'), and the server demonstrates minimal effort in tool design patterns. These are toy tools with no real-world applicability.
Prints a phrase about a cat.
Prints a phrase about a cat.
Tool 'about_mouse' has description 'Prints a phrase about a cat.', this is factually incorrect (describes a mouse, not a cat) and is identical to about_cat description. Misleading descriptions cause LLMs to select the wrong tool. [Baseline: 100% of A+ tools have clear, accurate descriptions]
Both tools lack action verbs in names. 'about_mouse' and 'about_cat' do not start with verbs (get_, describe_, retrieve_, list_). Action verbs let LLMs infer intent from the name alone. Baseline: 90% of A+ tools start with action verbs. These fail to match production naming conventions.
Both tools have empty input schemas (Input: {}). No parameters are defined, documented, or constrained. While these tools take no parameters, the schema is not explicitly documented in the observable code as a formal JSON Schema. Schemas MUST be visible and properly typed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 0 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 15 | - | v1 |
No output schema is documented. LLMs cannot determine what fields to expect. The return type is a string ('O rato roeu a roupa do rei da china!'), but this is not formally declared in a schema. [Baseline: 100% of A+ tools have documented return types]
No error handling. If the function raises an exception (syntax error, memory issue, etc.), there is no try-catch, no error categorization (retryable vs. fatal), and no recovery guidance. LLMs receive raw exceptions with no actionable next steps.
Trivial tool purpose. Both tools merely print hard-coded Portuguese phrases about animals. They have no real-world use case, no dynamic parameters, no external data dependencies, and no composition with other tools. This appears to be an example/template, not a functional server.