MCP server implemented as Azure Functions that exposes tools for snippet management via Azure Blob Storage through an API Management gateway
This Azure Functions-based MCP server has 3 tools with basic schema definitions but significant quality gaps. Tool naming is acceptable (verb_noun pattern), but descriptions are extremely minimal (10-34 chars vs. 194 char baseline). Parameter descriptions exist but are terse. Output schemas are entirely undocumented, the code returns strings with no structured response spec. Error handling is minimal with only string returns, no recovery guidance. The hello_mcp tool has an empty schema and trivial description. get_snippet and save_snippet have partial schemas but no output documentation. No tool annotations present. The server exposes internal Azure Blob Storage details in code (path templates) and lacks comprehensive error classification.
Retrieve a snippet by name.
Hello world.
Save a snippet with a name.
hello_mcp has empty input schema (toolProperties='[]') and trivial 10-character description ('Hello world.'). Per hard scoring rules, description must score 0-20 and schema must be 0.
No output schemas documented for any tool. Code returns plain strings (e.g., 'Retrieved snippet: %s', 'Snippet saved successfully'). LLMs cannot infer next steps or extract structured data.
Tool descriptions are far below 194-char baseline: 'Hello world.' (10 chars), 'Retrieve a snippet by name.' (27 chars), 'Save a snippet with a name.' (27 chars). Descriptions do not state WHAT the tool does, WHEN to use it, or WHAT it returns. They do not distinguish save_snippet from get_snippet beyond action.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Error handling returns plain strings like 'No arguments provided', 'No snippet name provided', 'No snippet content provided'. These are not recovery-guide errors; they do not tell the LLM what to do next or categorize as retryable/user-fixable/fatal.
Parameter 'snippetname' is defined in tool properties but no enum, format, length constraint, or character restriction is specified. Description says 'The name of the snippet', no guidance on valid formats (alphanumeric? max length? special chars allowed?).
No pagination support. If snippet content is large, it is returned in full without limit or chunking. Per pattern, tools returning data should cap results at 20-50 items and offer pagination.
Tool definitions show Azure Blob Storage internal path template: 'snippets/{mcptoolargs.snippetname}.json'. This leaks implementation details. Schemas should be backend-agnostic.
No tool annotations present (toolAnnotations field not provided in features). save_snippet is a WRITE/destructive tool; save_snippet should declare destructiveHint: true. get_snippet should declare readOnlyHint: true for clarity.
save_snippet modifies state but description does not explicitly say 'This tool saves a snippet and will overwrite an existing snippet with the same name.' LLMs need to know irreversible consequences.