MCP server that dispatches API operations from a catalog, supporting read/write/destructive operations with output shaping, search, and code execution
Gum exposes 6 meta-tools that act as dispatchers to a dynamic catalog. While schemas are present with type definitions, descriptions are severely underdeveloped. Tool names are generic (read, write, destructive, code) and do not follow verb_noun conventions. Parameters like 'op_id' and 'args' are opaque and force LLMs to understand a two-level indirection (tool → catalog operation). No output schemas are documented. Error handling and recovery guidance are absent. The 'gum.code' tool accepts arbitrary Risor scripts, creating injection risks. Overall, this is a framework for exposing operations, not a well-designed agent tool interface.
Execute Risor code with access to the catalog
Get detailed information about a catalog operation
Invoke a destructive-class catalog op
Invoke a read-class catalog op
Search the catalog of available operations using BM25 ranking
Invoke a write-class catalog op
Generic tool names (read, write, destructive, code) do not follow verb_noun convention and obscure intent. LLMs cannot infer what these tools do from names alone.
Descriptions are too brief (30-50 chars) and lack context. 'Invoke a read-class catalog op' does not explain WHEN to use this tool, what it returns, or how it differs from gum.describe.
Parameters 'op_id' and 'args' are opaque. LLMs must call gum.search_apis or gum.describe first to discover valid operations, forcing multi-step workflows for every action.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., does gum.read return op_id for chaining?).
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2025-06-18+ | v2 |
gum.code accepts arbitrary Risor scripts with no input validation or sandboxing hints. Script injection is possible if user input is embedded without escaping.