A dynamic proxy that converts OpenAPI endpoints into MCP tools on the fly
MCPify converts OpenAPI specs to MCP tools dynamically. The 7 demo tools have reasonable naming (verb_noun pattern: listUsers, getUserById, deleteUser, createUser, listProducts, getProductById, createProduct) and complete input schemas with typed parameters and descriptions. However, several critical issues limit the score: (1) Most tool descriptions are extremely brief (10-20 chars: 'Retrieve a list of users', 'Get a user by ID'), providing minimal context for LLM selection and no guidance on when to use vs similar tools. (2) No output schemas are documented anywhere in the source, LLMs cannot know what fields to expect from responses. (3) No error handling guidance is visible in tool definitions. (4) Some parameter descriptions lack actionable detail (e.g., 'Numeric ID of the user to retrieve' doesn't specify format, range, or constraints). (5) The deleteUser and createProduct tools lack destructive/write confirmation patterns. (6) No per-tool security annotations (readOnlyHint, destructiveHint) are present despite the Risk metadata in the spec being provided. This is a proof-of-concept OpenAPI→MCP translator, so dynamic generation constraints apply, but production use would require template improvements.
Create a new product
Create a new user
Delete a user
Get a product by ID
Get a user by ID
Retrieve a list of products
Retrieve a list of users
Tool descriptions are too brief (10-25 chars). Examples: 'Retrieve a list of users', 'Get a user by ID'. These lack context on WHEN to use the tool vs similar ones, prerequisites, or side effects.
No output schemas are documented. LLMs cannot know what fields to expect in responses. This violates the 'Document the output schema' critical check in the rubric (pattern:tool, pattern:response-shaper). Tools should declare return types like {id, name, email, role} for createUser or {id, name, email} for listUsers.
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 | 16 | - | v1 |
Destructive/write tools lack confirmation or explicit risk annotations. deleteUser and createUser/createProduct are destructive/write operations but have no dry-run option, confirmation step, or tool annotation (destructiveHint/idempotentHint) to signal to agents that these are irreversible.
No error handling guidance. Tool definitions lack recovery instructions (e.g., 'If user not found, call listUsers() with a search term'). Errors should categorize as retryable, user-fixable, or fatal, per pattern:recovery-guide.
Parameter descriptions lack actionable format/constraint details. E.g., 'Numeric ID of the user to retrieve' doesn't specify min/max range, string format, or validation rules.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are not present in the tool definitions, despite Risk metadata being provided in the spec. listUsers, getUserById, getProductById should be marked readOnlyHint=true; deleteUser should have destructiveHint=true.
No pagination guidance for list operations. listUsers and listProducts lack limit/offset or cursor parameters and do not document how many results are returned or whether truncation is possible. Per pattern:paginated-result, tools should return a total count or next_cursor.