HTTP client connector for Forest Soul Forge daemon — exposes read/analyze/safe-run API as MCP tools. Daemon URL via FSF_DAEMON_URL (default http://127.0.0.1:7423); optional bearer token via FSF_API_TOKEN.
Forest Soul Forge exposes 11 tools via fastmcp/STDIO. All tools have descriptions (10-80 chars, mostly adequate) and input schemas with typed parameters. However, critical gaps undermine production readiness: (1) Tool names lack action verbs, 'health', 'trust', 'route', 'bounties', 'quarantined', 'verify', 'why', 'nodes', 'agents', 'training_tasks', 'run_training' are mostly nouns or domain-specific jargon, not verb_noun patterns like 'get_health', 'list_trust_scores', 'recommend_route'. LLMs struggle to infer intent from noun-only names. (2) Parameter descriptions are minimal (5-40 chars) and lack actionable constraints, e.g., 'Optional node identifier' does not explain what a node is, valid formats, or when to use it. (3) Output schemas are not documented anywhere in the source, no indication of what fields each tool returns, forcing LLMs to guess. (4) No error handling guidance, tools return HTTP status codes but no recovery hints. (5) No pagination support despite tools like 'bounties' and 'quarantined' returning lists. Baseline: 90% of A+ tools start with action verbs; 100% document return types; 94% have descriptions; 100% of params have descriptions. This server meets ~40% of those baselines.
The live agent fleet (GET /agents).
Uncertainty-ranked bounty board (GET /synapse/bounties).
Daemon liveness + posture (GET /healthz).
All tracked nodes + problem_classes (GET /synapse/nodes).
Quarantine candidates (GET /synapse/quarantined).
Trust-based routing recommendation (GET /synapse/route).
Run the full tiered self-test ladder, deterministic + read-only, and return the report (POST /training/run). No live side effects.
Tool names lack action verbs. 'health', 'trust', 'route', 'bounties', 'quarantined', 'verify', 'why', 'nodes', 'agents', 'training_tasks' are nouns or domain jargon, not verb_noun patterns. LLMs cannot infer intent from names alone. Rename to 'get_health', 'list_trust_scores', 'recommend_route', 'list_bounties', 'list_quarantined_nodes', 'verify_trust_ledger', 'explain_trust_value', 'list_nodes', 'list_agents', 'list_training_tasks', 'run_training_suite'.
Output schemas not documented. No indication of what fields each tool returns (e.g., does 'trust' return {node, score, problem_class}? Does 'bounties' return {id, title, uncertainty, status}?). LLMs cannot plan downstream calls or extract data without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 33 | 2026-07-28+ | v2 |
The tiered training-ladder catalog (GET /training/tasks).
Synaptic trust scores, optionally filtered (GET /synapse/trust).
Trust-ledger hash-chain integrity (GET /synapse/verify).
Provenance behind a trust value (GET /synapse/why).
Parameter descriptions are minimal (5-40 chars) and lack actionable constraints. E.g., 'Optional node identifier' does not explain what a node is, valid format, or when required. Descriptions should be 50-200 chars with format/range/enum constraints per pattern:tool-description.
No pagination support for list-returning tools. 'bounties' and 'quarantined' accept 'top' and 'min_n' but no offset/cursor or total_count in response. Large result sets will blow context window. Add limit (1-100, default 20), offset, and return {items: [...], total: N, has_more: bool}.
No error handling guidance. Tools return HTTP status codes but no recovery hints. E.g., if 'trust' returns 404 for a node, the response should suggest 'Node not found. Call list_nodes() to see available nodes.' Errors must guide LLM recovery per pattern:recovery-guide.