Python SDK for building MCP (Model Context Protocol) servers and clients. Includes FastMCP for ergonomic server creation and example servers demonstrating tools, resources, and prompts.
This is the official MCP Python SDK repository, not a deployed MCP server. The three tools examined ('fetch', 'add', 'name_shrimp') are example implementations in separate example directories (simple-tool, fastmcp/desktop.py, fastmcp/complex_inputs.py). Critical issues: (1) Tool definitions are scattered across example files with no central registration visible in the source provided. (2) The 'add' tool has a malformed schema, 'a' and 'b' properties lack a 'required' array at the schema root, making their necessity ambiguous to consumers. (3) The 'name_shrimp' tool's input schema references a 'ShrimpTank model' object without providing its schema definition, violating the pattern:tool-schema requirement. (4) Descriptions are minimal and do not articulate WHEN or WHY to use each tool. (5) No error handling guidance, no output schemas documented, no parameter constraints (enums, ranges) defined. (6) Tool definitions appear inferred from file locations rather than explicit registration statements visible in the provided code.
Add two numbers
Fetches a website and returns its content
List all shrimp names in the tank
Tool definitions are inferred from file locations rather than explicitly registered in a visible tool definition registry or decorator block. No central @tool or register_tool() calls visible in the provided source code snippet.
The 'add' tool's input schema is malformed: missing 'type': 'object' and 'required' array at the root level. Parameters 'a' and 'b' are listed as bare properties without a schema wrapper, violating JSON Schema structure.
The 'name_shrimp' tool references a 'ShrimpTank model' object type in the 'tank' parameter, but the ShrimpTank schema definition is not provided. This violates the pattern:tool-schema requirement to document all input types.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Descriptions are minimal and below production standards. 'Add two numbers' (16 chars) fails the 20-char minimum. 'Fetches a website and returns its content' lacks context (error handling, timeout behavior, redirect policy). No descriptions explain WHEN or WHY to use each tool.
No output schemas are documented for any tool. LLMs cannot plan downstream tool calls or extract results without knowing the response structure.
Parameters lack constraints, enums, and validation rules. 'url' has no format constraint (URI?), 'extra_names' array has no 'items' schema, 'tank' has no ShrimpTank definition. Free-form parameters invite hallucinated values.
No error handling guidance. What happens if the URL is unreachable? If the tank ID is invalid? What should the LLM do next? Tools provide no recovery hints.