An MCP Server to integrate with IBM Operational Decision Manager (ODM) Decision Center, providing access to decision center REST API endpoints as tools.
This server exposes a single dynamically-generated tool (dynamic_decision_center_api_tools) whose schema, descriptions, and parameter definitions are NOT visible in the provided source code. The tool is auto-generated from IBM ODM REST API endpoints via OpenAPI parsing, but the actual tool registration, input schemas, parameter descriptions, and output documentation are not shown in the source excerpts. The server code shows generic placeholder handling ('arguments: dict | None') with no evidence of proper JSON Schema definition, parameter validation, or LLM-friendly descriptions. Tool responses are coerced to JSON strings without structured output schema documentation. Per the hard rules, when tool definitions cannot be verified in source code, schema and description scores must be severely penalized. The single tool scores ~28, pulling the overall average to 28.
Dynamically generated tools based on IBM ODM Decision Center OpenAPI specification. Each endpoint from the Decision Center REST API becomes a callable tool with parameters extracted from the OpenAPI schema.
No visible input schema for the single tool. The tool accepts 'arguments: dict | None' with no JSON Schema validation, type definitions, or parameter constraints visible in source code.
Tool description is generic boilerplate ('Dynamic tools generated from IBM ODM Decision Center REST API endpoints...') and does not explain WHAT each dynamically-generated sub-tool does, WHEN to call it instead of alternatives, or WHAT it returns. Description length is ~215 chars but lacks LLM-optimized content.
No parameter descriptions visible. The tool accepts arbitrary 'arguments' dict but does not document what fields are valid, what types they must be, allowed ranges, or enums. LLMs cannot infer parameter meaning from names alone.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 9 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 13 | - | v1 |
No documented output schema. The tool returns JSON-stringified responses without explaining what fields the agent should expect, their types, or how to chain them into downstream tool calls. Baseline: 100% of A+ tools document return types.
Tool name 'dynamic_decision_center_api_tools' violates naming pattern. It does not start with a verb (get_, create_, list_, search_, etc.) and is plural/generic ('tools'). The name does not convey a specific action, LLMs cannot infer intent.
No evidence of error handling or recovery guidance in tool code. The call_tool handler returns errors as generic ValueError/exceptions with no structured error classification (retryable, user-fixable, fatal) or actionable guidance for the LLM.
Dynamic tool generation from OpenAPI endpoints is inferred from code (fetch_endpoints, generate_tools_format) but the actual schema transformation logic is not shown. Here, the tool is ONLY inferred, and the cap is overridden by the missing schema/description issues, resulting in a much lower score.
No validation of input arguments before passing to DecisionCenterManager.invokeDecisionCenterApi. Free-form dict arguments can cause injection, malformed requests, or silent failures.