A Model Context Protocol (MCP) server template with configuration-driven tool registration, supporting dynamic HTTP-based tools, prompts, and resources
The server exposes a single tool 'dynamic_http_tool' with a vague, generic name that does not follow verb_noun conventions. The description is moderately detailed (approximately 130 characters) but lacks clarity on WHEN to use this tool versus calling APIs directly. The input schema shows parameter definitions with type, description, and validation fields, but the schema is inferred from a configuration structure rather than being explicit in tool registration code. The tool name 'dynamic_http_tool' is a significant red flag: it signals a utility tool that wraps arbitrary HTTP calls rather than a domain-specific action. This violates the 'start with an action verb' and 'one clear job' principles. No output schema is documented. There is no evidence of error handling guidance, recovery paths, or examples of what this tool produces. The tool appears to be designed for executing arbitrary configured API requests, which is a framework pattern rather than a real agent tool.
Dynamically registered HTTP-based tool that executes configured API requests with parameter validation and response formatting
Tool name 'dynamic_http_tool' is generic and does not start with a clear action verb. LLMs cannot infer intent from 'dynamic_http_tool', it could mean anything. Should be 'call_api', 'execute_http_request', or domain-specific names like 'fetch_data' or 'send_webhook'.
No output schema documented. LLMs need to know what fields to expect so they can plan downstream tool calls and extract data. The description says 'response formatting' but never specifies what response structure is returned.
Tool description lacks guidance on WHEN to use it. It states what it does abstractly ('executes configured API requests') but not when the agent should invoke it or what makes it different from other tools. A production description would say: 'Use this to invoke pre-configured external APIs. Each API is defined in configuration with parameters, validation, and response mapping.'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 31 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Parameter schema uses an array of parameter objects rather than a traditional JSON Schema properties object. This is configuration-driven rather than declarative. The schema field shows 'parameters': {'type': 'array', ...} which suggests parameters are defined dynamically in config, not statically in the tool definition. This makes validation at registration time impossible and forces runtime interpretation.
No error handling guidance. The risk is marked 'WRITE', indicating destructive capability, but there is no documentation of what errors can occur (network timeout, invalid parameter, API rejection) or what the LLM should do in each case.
Tool definition appears to be inferred from handler code (mcp-server-template/internal/handlers/tool_handler.go) rather than explicitly registered with a schema. This violates the principle that tool definitions must be statically visible in tool registration.