A template MCP server implementation in C# using ASP.NET Core, providing tools, prompts, and resources for AI assistants
This is a template server with 5 basic example tools. All tools have explicit descriptions and input schemas are visible in the source code. However, the descriptions are generic and lack depth about when/why to use each tool. Parameter descriptions exist but are minimal. No output schemas are documented. No error recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). The tools themselves are trivial (Echo, GetTimestamp, Calculate) and do not demonstrate real-world patterns. This is typical of a template/starter project, not production-grade.
Performs basic mathematical calculations.
Checks the HTTP status of a given URL.
Echoes the message back to the client.
Generates a new UUID/GUID.
Gets the current timestamp in the specified format.
No output schemas documented for any tool. The rubric requires tools to document what fields and types they return so LLMs can plan downstream tool calls. Currently, output is entirely undocumented.
Tool descriptions are generic one-liners (20-50 chars) that do not explain WHEN or WHY to use the tool vs alternatives, dependencies, or prerequisites. Descriptions should be 50-200 chars and answer: What does it do? When should I call it? What does it return?
Parameter descriptions are minimal (8-50 chars). For example, 'Date format string (optional)' does not specify allowed formats, defaults, or examples. Should be: 'Date format string (defaults to ISO 8601; examples: "O" for ISO, "yyyy-MM-dd" for custom, omit for ISO).'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). While all 5 tools are READ_ONLY, this must be declared in the tool definition so agents and clients understand safe-to-retry semantics.
Calculate tool has no input validation for the 'operation' parameter. It accepts arbitrary strings and only rejects via try-catch. Should declare operation as an enum: ["add", "subtract", "multiply", "divide"]. Similarly, no bounds on numeric inputs (a, b), should specify min/max ranges.
CheckHttpStatus tool has no error recovery guidance. If a URL is invalid or unreachable, the error is returned as JSON with no guidance on what the agent should do next ('Try a different URL', 'Verify network connectivity', etc.).
GenerateUuid format parameter description lists formats but does not explain what each does (e.g., 'N = no hyphens, D = hyphens with dashes'). Should be clearer and include examples of output for each format.