A Go-based backend service for managing LaTeX debugging, chat completions, and tool execution with OpenAI integration
PaperDebugger exposes a single tool 'dynamic_tool_from_mcp' that acts as a generic proxy to execute arbitrary MCP tools via HTTP+JSON-RPC. The tool definition is inferred from code analysis (internal/services/toolkit/tools/xtramcp/tool_v2.go) rather than explicitly visible in provided source. The tool lacks a meaningful description (generic proxy language), has no discernible input schema documentation in the provided code, and no documented output format. This is a meta-tool pattern (invoking other tools dynamically) which is fundamentally anti-pattern for LLM reasoning, the LLM cannot determine what the tool does or what parameters it accepts without at runtime discovering the registry. The tool is marked WRITE/destructive but has no validation, confirmation, or error recovery guidance. Tool composition is broken: agents cannot chain this tool usefully because output structure and semantics are unknown until runtime.
Generic dynamic tool that executes MCP tools via HTTP requests with JSON-RPC protocol, supporting arbitrary schemas from tool registry
Tool definition inferred rather than explicitly visible in source code. No explicit tool registration with MCP protocol visible. Caps score at 50 per HARD SCORING RULE (inferred tools).
No input schema visible in provided code. Tool accepts 'arbitrary schemas from tool registry' which means LLM cannot determine valid parameters at call time. Input schema score MUST be 0 per HARD SCORING RULE.
Description is generic proxy language ('Generic dynamic tool that executes MCP tools via HTTP requests with JSON-RPC protocol'). Fails to explain WHAT the tool does from an agent perspective, WHEN to use it, or what happens when called. Length ~100 chars but lacks LLM-optimization guidance. Description score capped at 10.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 29 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Tool name 'dynamic_tool_from_mcp' does not start with action verb. It uses 'dynamic_tool' which is vague and generic (pattern:tool requires verb_noun naming like 'execute_mcp_tool', 'invoke_remote_tool', or domain-specific names). Naming score 20.
Tool marked as WRITE/destructive but no error handling, permission gates, or confirmation pattern visible. No recovery guidance if tool execution fails. Violates pattern:error-classification and pattern:confirmation-request. No audit trail or permission checks evident.
Meta-tool anti-pattern: tool wraps arbitrary remote MCP tools. Breaks LLM composability, agent cannot reason about downstream tool outputs or plan multi-step chains because output structure is unknown. Violates pattern:tool-chain.
No documented output schema. Tool returns results from remote MCP tools (structure unknown). LLM cannot extract fields for downstream tool calls. Violates pattern:response-shaper and pattern:include-chaining-ids.