A Slack bot assistant that integrates with Anthropic Claude and MCP servers for dynamic tool execution
This MCP server has 4 tools with significant quality gaps. Only 1 tool (get_dspy_docs) has complete input schema definition visible in source. The remaining 3 tools (add_mcp_server, remove_mcp_server, list_mcp_servers) appear in the specification but their implementations are not shown in the provided source code, they are referenced as being in src/app.ts which was not included. Descriptions range from adequate (get_dspy_docs: 62 chars, good) to minimal (list_mcp_servers: 31 chars, borderline). Parameters lack descriptions for critical fields: add_mcp_server requires 'name', 'command', and 'args' but the 'args' parameter has no description beyond stating it's an array of strings. Error handling exists but is basic, the get_dspy_docs tool catches axios errors and returns them as plain text rather than structured recovery guidance. No tool annotations (destructiveHint, readOnlyHint, idempotentHint) are present despite having obvious state-modifying operations (add_mcp_server, remove_mcp_server). Output schemas are not documented. No pagination support visible. Tool definitions for 3 of 4 tools are inferred rather than directly visible in source, triggering the hard cap rule.
Add a new MCP server to the manager
Get the latest DSPy documentation and package information
List all registered MCP servers
Remove an MCP server from the manager
3 of 4 tools lack visible input schema definitions in provided source code. Tools add_mcp_server, remove_mcp_server, and list_mcp_servers are specified but implementation not shown (src/app.ts excluded). Per hard scoring rules, when tool definitions cannot be verified in source, schema score must be 0 and overall tool score capped at 50.
get_dspy_docs returns free-form markdown text converted to plain text via marked.parse(), but output schema is not documented. LLMs cannot infer the structure of returned fields (package_info vs documentation). Per pattern:response-shaper, structured output with typed fields is required.
add_mcp_server and remove_mcp_server are destructive tools (WRITE operations) but lack tool annotations. No destructiveHint, idempotentHint, or readOnlyHint provided to help LLMs reason about side effects and retry safety. Agents cannot distinguish which tools are safe to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Critical parameter add_mcp_server.args lacks description. The specification shows it as an array of strings but does not explain what these arguments control, their format, or constraints. Per pattern:tool-description, every parameter requires a description so LLMs understand what to pass.
Error handling in get_dspy_docs returns plain text error messages (not structured). Does not classify errors as retryable vs fatal or provide recovery guidance per pattern:recovery-guide. Example: 'Error fetching DSPy docs: <message>' gives the LLM no actionable next step.
list_mcp_servers description is only 31 characters ('List all registered MCP servers'). While technically above p10, this description lacks WHEN to call it, prerequisites, or what structure is returned. Descriptions under 50 chars typically score 35-40 to reflect inadequacy.
No pagination parameters visible for any tool that returns lists. list_mcp_servers and get_dspy_docs (which accepts 'section' enum) may return unbounded results. Per pattern:paginated-result, tools returning lists should accept limit and offset/cursor to prevent context window exhaustion.
GITHUB_TOKEN is required environment variable but not documented in any tool description. Per pattern:secret-injection, credentials must never be parameters, which is correct here, but the tool description should state the prerequisite so LLMs understand if the tool may fail.