MCP server that turns any SAP CAP or OData v4 service into LLM tools by reading its OData metadata document. No per-service code.
cap-mcp-bridge exposes 12 well-structured OData tools with consistent naming (verb_noun pattern: list_, describe_, query_, get_, create_, update_, delete_, invoke_). All tools have descriptions (avg ~80 chars) and input schemas with typed parameters. However, output schemas are not documented in the source, parameter descriptions lack detail on constraints/formats, and error handling guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Descriptions are functional but brief, below the 50-200 char LLM-optimized baseline. Parameter validation rules and format constraints are not stated in descriptions.
Create a new entity in an entity set
Delete an entity by key
Get detailed description of an entity set including all properties, navigations, and capabilities
Retrieve a single entity by key with optional property selection and navigation expansion
Invoke an unbound OData action with parameters
Invoke a bound OData action on an entity
Invoke a bound OData function on an entity
Invoke an unbound OData function with parameters
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does query_entity return? Is it paginated? Does it include total count?). Violates pattern:tool and pattern:paginated-result.
Parameter descriptions lack constraint details. 'filter' is described as 'Filter expression (structured or string format)' but does not specify valid syntax, operators, or examples. 'top' lacks min/max bounds. Violates pattern:constrained-input and review:param-validation-rules.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | <=2025-11-25 | v2 |
List all entity sets in the service with summaries including record counts, capabilities, and navigations
Query an entity set with filtering, ordering, selection, expansion, and pagination
Refresh the cached OData metadata from the service and report changes
Update an existing entity by key
No tool annotations despite clear risk classifications. delete_entity is DESTRUCTIVE, create_entity/update_entity/invoke_action are WRITE, but no destructiveHint or readOnlyHint metadata. LLMs cannot distinguish safe from risky operations. Violates pattern:command-tool.
Error handling guidance absent. Handlers throw BridgeError subclasses but no recovery hints are documented. LLMs receive raw errors with no guidance on retry, user input, or next steps. Violates pattern:recovery-guide and pattern:error-classification.
Descriptions are brief (avg 60-70 chars, below 50-200 char LLM-optimized baseline). 'Invoke an unbound OData function with parameters' does not explain WHEN to use it vs invoke_bound_function, what it returns, or prerequisites. Violates pattern:tool-description.