A template MCP server that dynamically generates tools from an OpenAPI specification and exposes them via FastMCP with SSE transport. Designed to be containerized and deployed with Docker.
Single tool 'dynamic_openapi_tools' has critical definition gaps. Tool name lacks action verb (should be 'call_openapi_endpoint' or similar). Description is generic and does not explain WHEN to use this tool vs calling endpoints directly. Input schema shows three top-level params (path_parameters, query_parameters, body) but lacks per-parameter type definitions, descriptions, and constraints. No output schema documented. No error handling guidance. Tool is dynamically generated from OpenAPI spec, making static validation impossible, actual tool names, descriptions, and schemas are runtime-generated and not visible in source code.
Dynamically generated tools from OpenAPI specification paths. Each path and method in the OpenAPI spec becomes a tool with the naming pattern: {TOOL_PREFIX}_{method}_{path}. Tools forward HTTP requests to the base URL specified in the OpenAPI spec with appropriate headers (x-api-key, version, unique-key) and parameters.
Tool definition is dynamically generated at runtime; actual tool names, descriptions, input/output schemas are not visible in source code.
Input schema lacks per-parameter type definitions and descriptions. Schema shows three top-level object properties (path_parameters, query_parameters, body) but does not specify types (string, number, boolean, object), constraints (enum, pattern, minLength), or descriptions for each parameter.
No output schema documented. Tool description does not specify what fields the response contains, their types, or structure. LLMs cannot plan downstream tool calls or extract data without knowing response shape. LLMs need to know what fields to expect.'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 25 | <=2025-11-25 | v2 |
Tool name 'dynamic_openapi_tools' does not start with an action verb. Current name is generic and does not convey what the tool does.
No error handling guidance. Code catches requests.RequestException and logs it, but tool description does not explain what errors can occur, whether they are retryable, or what the LLM should do next.