A C# implementation of the Model Context Protocol (MCP) server with support for tools, resources, and prompts
ZeroMCP C# is a test/demo framework, not a production MCP server. Tool definitions are scattered across test files and example programs with minimal real-world structure. Of 27 tools listed, most have trivial descriptions (5-20 chars: 'Echo input', 'First tool', 'Second tool', 'Say hello'). Input schemas are present but sparse, many tools have empty input dicts or single undescribed parameters. No output schemas documented. Error handling is minimal (e.g., 'broken' tool just throws). Tools lack verb-noun naming conventions and parameter descriptions. This is a reference implementation, not production-grade.
Add two numbers together
First tool
Second tool
Throws
Check if credentials were injected
Echo a message back
Echo input
Fetch an allowed domain
Trivial descriptions (5-20 chars) on 18+ tools: 'Echo input', 'First tool', 'Second tool', 'Say hello', 'Throws'. LLMs cannot determine when/why to select these tools. Descriptions must be 50-200 chars explaining WHAT, WHEN, and WHY.
13+ tools have empty or missing input schemas (alpha, broken, fetch_evil, tokenstore_check, throw_error, hang, slow, leak_memory, stdout_corrupt, crm_check_creds, nocreds_check_creds, fetch_allowed, fetch_blocked).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 31 | <=2025-11-25 | v2 |
Fetch a blocked domain
Tool that tries a domain NOT in allowlist
Tool with network disabled
Tool with no network restrictions
Tool with wildcard network permission
Greet a person by name
Tool that hangs forever
Fast tool
Say hello
Say hello to someone
Say hello to someone
Tool that leaks memory
Check credentials in unconfigured namespace
Tool that takes 3 seconds
Tool that takes 3 seconds
Tool that writes to stdout
Requires name
Tool that throws
Return the current token from credentials
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. Every tool must document its return type and structure.
Parameter descriptions missing or null on most tools (e.g., 'message' param in echo has null description; 'x' in beta has description but most others lack it). 100% of A+ tools have param descriptions per baseline.
Duplicate tool names (hello appears 4 times, slow appears 2 times, echo appears 2 times) across different test files. LLMs cannot disambiguate. Consolidate or rename to unique, descriptive names.