OpenAPI to Model Context Protocol (MCP) proxy server - dynamically translates OpenAPI specs into MCP tools
This server presents a fundamental architectural problem: it dynamically generates tools at runtime from OpenAPI specs, making static schema analysis impossible. The single registered tool 'dynamic_tools_from_openapi' is a meta-tool that creates other tools, but those generated tools are not statically defined in the codebase and cannot be evaluated against the quality rubric. The visible tool has a vague description, incomplete parameter documentation, and no output schema. The tool factory code shows basic parameter routing but lacks error handling guidance, validation, and LLM-friendly descriptions. Per the rubric's hard scoring rule: 'If you cannot see the actual tool definition in the source (only inferred): cap that tool's overall at 50.' The dynamically generated tools fall into this category, they are inferred, not explicitly registered with full schemas and descriptions.
Retrieves metadata about the loaded API
Retrieves the loaded OpenAPI specification
Retrieves detailed information about a specific API operation
Lists all available API operations from the OpenAPI specification
Dynamically generated MCP tool from OpenAPI operation. Tool name and description are created at runtime by prefixing server name and extracting operation summary from OpenAPI spec.
Tool is a meta-tool that dynamically generates other tools at runtime. Generated tools are not statically visible in source code, making it impossible to evaluate their schemas, descriptions, and parameter quality.
The visible 'dynamic_tools_from_openapi' tool description ('Dynamically generated tools from OpenAPI specification operations...') is generic and does not follow LLM-optimized description patterns. It explains what the tool does but lacks WHEN to use it, what the output contains, and how to interpret it. Description is ~150 chars but reads like API docs, not agent guidance.
'parameters' input parameter lacks a description. The schema shows it accepts an object with properties as 'Operation parameters as defined in OpenAPI spec', but does not explain what structure is expected, what fields are required, or how to construct the object for a specific operation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 13 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 23 | - | v1 |
No output schema is documented. The tool factory code (lines 60 - 75 in tool_factory.py) shows the tool returns a JSON-RPC response with 'dry_run' flag and 'request' object, but the MCP tool definition does not declare what fields the agent should expect in the result. Without documented output schema, LLMs cannot reliably chain this tool with others.
Error handling is incomplete. The tool_function in tool_factory.py (lines 58 - 75) catches exceptions generically ('except Exception as e') but the code is truncated and error recovery guidance is not visible. Based on the visible code, there is no indication that errors include actionable hints (e.g., 'Invalid operation name. Available operations: ...') or error classification (retryable vs. fatal).
Tool naming: 'dynamic_tools_from_openapi' does not start with a clear action verb and is compound (suggests multiple responsibilities). Per pattern:tool, names should be verb_noun like 'generate_api_tools' or 'load_openapi_operations' to signal the intended action to the LLM.
The 'dry_run' parameter has a description ('Optional flag to perform a dry-run...') but no type is specified in the visible input schema. The schema shows it as boolean, but this type is not explicitly documented in the parameter itself, creating ambiguity for LLMs.
No validation or constraint documentation for the 'parameters' object. LLMs need to know: what is the expected structure? Are there required fields? What happens if invalid OpenAPI operation names are passed? Without constraints, the LLM may pass malformed inputs.