An MCP server that dynamically generates tools from OpenAPI specifications of backend REST services. It discovers healthy services, loads their OpenAPI specs, generates MCP tools, and translates MCP requests to HTTP calls.
This REST adapter generates MCP tools dynamically from OpenAPI/REST endpoints. Tool definitions are visible in the schema (tool_generator.py shows proper JSON Schema with types and descriptions), and all 7 tools follow a consistent naming pattern. However, descriptions are generic and lack LLM-optimization guidance. Parameter descriptions are present but minimal ("Path parameter: customer_id" is just a location label, not actionable context). Output schemas are not documented anywhere in the provided code, only input schemas are visible. Error handling is basic (HTTP status codes returned, but no recovery guidance or suggestions for next steps). The adapter demonstrates competent schema generation but falls short of production-grade tool design that guides LLM reasoning.
Create a new customer
Retrieve a specific customer by ID
Retrieve a list of customers with optional filtering. Query parameters: limit, status
Update an existing customer
Retrieve a specific product by ID
Retrieve a list of products with optional filtering by status
Update product quantity
Parameter descriptions are purely locational ("Path parameter: customer_id") rather than semantic. They do not explain what the parameter controls or what values are valid. This forces LLMs to guess.
Tool descriptions are generic and do not explain WHEN to use each tool or what distinguishes it from similar tools. For example, customer_get_customer says "Retrieve a specific customer by ID" but does not explain when to call it vs customer_list_customers, or what data is returned.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | 2024-11-05+ | v1 |
Output schemas are not documented in the visible source code. LLMs cannot plan downstream tool calls or know what fields to extract without knowing the response structure.
Error responses return HTTP status codes and error text but do not guide the LLM on what to do next. For example, a 404 simply says "Tool not found" rather than suggesting to call list_customers or search with different criteria.
List tools (customer_list_customers, inventory_list_products) accept a 'limit' parameter with a default of 10 but do not mention pagination or a total count. For larger result sets, the LLM cannot know if more results exist or how to fetch them.
Create and update tools do not state whether they are idempotent. customer_create_customer and inventory_update_quantity could silently create duplicates or overwrite data on retry, LLMs need to know this.
No enum constraints on status fields (customer status in customer_list_customers and customer_update_customer, product status in inventory_list_products). LLMs may pass invalid status values without validation guidance.