Educational MCP server examples and demonstrations covering basic tools, advanced features (notifications, sampling, roots, HTTP transport), and a comprehensive transSum server for document summarization and translation
This is a course repository with multiple disconnected MCP server examples, each with varying quality. The scoring reflects the portfolio average. Most tools lack adequate descriptions (under 20 chars or generic). Several tools are duplicated (two 'add' tools). Input schemas are present but parameter descriptions are minimal. Error handling is absent or non-existent. No tool annotations detected. The tooling is fragmented across multiple subprojects (notifications, roots, sampling, cli_project_mcp, transSum-server) with inconsistent quality standards.
Add two integers together
Add two integers together
Convert an MP4 video file to another format using ffmpeg
Edit a document by replacing a string in the documents content with a new string.
List all directories that are accessible to this server. These are the root directories where files can be read from or written to.
Read directory contents. Path must be within one of the client's roots.
Read the contents of a document by its ID and return it as a string.
Duplicate tool 'add' appears twice (in notifications and at the end). This causes ambiguity and breaks tool composition, LLMs cannot distinguish which add to call. Remove the duplicate.
Tool descriptions are too short and lack actionable context. 'Summarize text using client-side sampling to request LLM completions' (≈60 chars) does not explain WHEN to use this tool vs other summarization tools (summarize_text, summarize_file). Baseline for A+ tools: 50-200 chars with clear intent and differentiation.
Parameter descriptions are minimal or missing context. 'text_to_summarize' has description 'The text to summarize' (23 chars), no guidance on max length, encoding, or whether it accepts HTML/Markdown. Parameter descriptions should be 50-150 chars with constraints and format hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Summarize text using client-side sampling to request LLM completions
Load a document file and produce a summary. Supports .txt, .md, .pdf, .html, .csv, .json files.
Summarize a block of text into a concise, structured summary. Handles long texts automatically via intelligent chunking.
Translate text into a specified target language. Supports any language pair the underlying model handles.
No input validation or error handling visible in tool implementations. Tools like convert_video and edit_document make destructive changes but provide no confirmation flow, dry-run option, or recovery guidance. Pattern: confirmation-request and recovery-guide are absent.
Output schemas are not documented. LLMs cannot plan downstream tool calls or extract data without knowing what fields to expect. Tools return 'CallToolResult' with content, but exact field structure is unclear to the agent.
Three different 'summarize' tools (summarize, summarize_text, summarize_file) risk LLM confusion. Tool names should disambiguate, consider summarize_text_inline vs summarize_text_from_file. Current naming violates pattern:tool (avoid multiple tools doing same thing differently).
Tool convert_video accepts format as free-form string ('e.g. mov') instead of an enum. LLMs will hallucinate invalid formats. Document valid formats as an enum: ['mov', 'avi', 'mkv', 'webm', ...].
translate_text has a default for target_language ('English') but no enum of supported languages. LLM may pass unsupported language codes. Provide enum or at least a list of valid languages in the description.
No pagination support visible in list_roots or tools that return collections. If a directory contains thousands of files, read_dir will fail or overwhelm context. Add limit/offset and return a total_count or next_cursor.