Sharp, accurate examples for the Model Context Protocol (MCP) demonstrating core features and best practices
This is an example/template repository, not a production server. While it demonstrates MCP capabilities, most tools lack depth in descriptions, parameter validation guidance, and error handling. 18 tools across 6 server implementations show inconsistent quality. Many tool descriptions are generic templates ('Example tool - replace with your functionality!') rather than production-grade explanations. Parameter descriptions are present but often minimal (10-30 chars), below the 72-char production baseline. No explicit input schema validation, no error recovery guidance, and no tool annotations. The codebase is pedagogical, useful for learning MCP, but not suitable for production agent deployment.
Add two numbers together.
Example async tool - great for I/O operations! Args: data: Dictionary of data to process
Make an HTTP request to a URL (demonstrates async tools). Args: url: The URL to request method: HTTP method (GET, POST, etc.) headers: Optional HTTP headers
Perform basic mathematical operations. Args: operation: The operation to perform (add, subtract, multiply, divide) a: First number b: Second number
Calculate the area of different shapes. Args: shape: The shape type ("rectangle", "circle", "triangle") **kwargs: Shape-specific parameters - rectangle: width, height - circle: radius - triangle: base, height
Process complex data structures (demonstrates advanced tool capabilities). Args: data: List of data objects to process operation: Operation to perform (filter, aggregate, transform) filters: Optional filters to apply
Generic placeholder descriptions undermine tool discovery. 'Example tool - replace with your functionality!' (tool 16) and 'Example async tool - great for I/O operations!' (tool 17) provide zero semantic content for LLM selection. These violate pattern:tool-description which requires 10 - 1024 chars of actionable context.
Parameters lack constraints and validation guidance. calculate_area accepts 'shape' as free-form string with no enum constraint; kwargs is untyped object with vague description. 'Shape-specific parameters (width, height, radius, base)' tells LLM possible keys but not which are required, mutually exclusive, or validated server-side. Violates pattern:constrained-input.
No output schema documentation. While 18 tools are registered, none include documentation of return types or result structure in visible code. LLMs cannot plan chained calls without knowing what fields are returned. Violates pattern:tool requiring documented output schemas.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Create a new game session.
Example tool - replace with your functionality! Args: input_text: The text to process option: Processing option (default, advanced, etc.)
Toggle flag on a cell.
Get the current date and time.
Get detailed information about a file or directory. Args: file_path: Path to the file or directory
List contents of a directory. Args: dir_path: Path to the directory show_hidden: Whether to show hidden files (starting with .)
Session management tool - demonstrates stateful operations. Args: action: Action to perform (create, get, update, delete, list) session_id: Session identifier (auto-generated for create) data: Session data for create/update operations
Manage user sessions (demonstrates stateful operations). Args: action: Action to perform (create, get, update, delete) user_id: User identifier data: Session data for create/update operations
Process image data (demonstrates image handling). Args: image_base64: Base64 encoded image data operation: Operation to perform (analyze, metadata)
Read the contents of a text file. Args: file_path: Path to the file to read encoding: Text encoding (default: utf-8)
Reveal a cell and return the result.
Search for files matching a pattern in a directory. Args: directory: Directory to search in pattern: Filename pattern to search for (supports wildcards) case_sensitive: Whether search should be case sensitive max_results: Maximum number of results to return
State management tools lack idempotency and transaction semantics. manage_user_session and manage_session (tools 6, 18) perform CRUD on sessions without confirming what 'create' does on collision, what 'update' overwrites, or if partial updates are supported. Pattern:idempotent-operation requires agents to know retry safety.
No error handling or recovery guidance in visible code. No try-catch blocks, no validation of required vs optional params, no user-fixable errors with suggestions. E.g. 'shape not supported' should return 'Invalid shape. Try: rectangle, circle, triangle' not a generic exception. Violates pattern:recovery-guide.
Parameter naming inconsistency across similar tools. 'calculate_area(shape, **kwargs)' vs 'basic_calculator(operation, a, b)' vs 'complex_data_processing(data, operation, filters)', no consistent naming convention for operation/action params. Agents conflate similarly named params across tools. Violates pattern:tool naming baseline that 90% of A+ tools use consistent verb_noun + param naming.
Minimal parameter descriptions. Many params described in 10 - 20 chars: 'First number', 'Second number', 'Game session ID', 'X coordinate'. Production baseline is 72 chars. Descriptions lack format/range constraints and dependency hints. E.g. 'max_results: Maximum number of results to return' should say 'max_results: Max number of results (1 - 1000, default 50). Large values may timeout.'
No pagination support for list/search operations. list_directory and search_files accept no limit/offset/cursor params. Code does not document max result size or pagination strategy. Violates pattern:paginated-result.
Stateful operations (minesweeper, sessions) have no confirmation/dry-run pattern. create_game, reveal_cell, and game state mutations do not offer 'dry_run: true' or confirmation step before execution. Pattern:confirmation-request recommends this for irreversible operations.
Ambiguous parameter dependencies. calculate_area(**kwargs) and manage_session(action, session_id, data) do not document which params are required per action/shape. Pattern:tool-description requires explicit dependency hints: 'If action=create, session_id is auto-generated (ignore); data is required. If action=update, both session_id and data are required.'