A NestJS-based LLM agent server that integrates with MCP (Model Context Protocol) servers to provide tool calling, resource access, and prompt management capabilities
Server exposes 6 tools with significant definition gaps. Tool names lack clear action verbs (getAllTools, getAllFuncTools are vague; queryAgent is ambiguous). Most descriptions are generic and under 100 chars, failing to explain WHEN to use each tool or what distinguishes them. Input schemas are present for only 2 of 6 tools (callTool, queryAgent); the other 4 have no visible schema definitions. Parameters lack type constraints and detailed descriptions. No output schemas documented. Error handling is minimal, callTool returns a string '调用工具失败' with no recovery guidance. The server acts as a meta-tool aggregator but does not follow composition patterns: getAllTools and getAllFuncTools do nearly identical work (should be one tool with a format parameter). No idempotency guarantees, no pagination for potentially large result sets, no permission gates on destructive operations.
Invokes a specific MCP tool with provided arguments
Retrieves all function call tools from connected MCP servers in OpenAI function format
Retrieves all available tools from connected MCP servers
Retrieves all available prompt templates from connected MCP servers
Retrieves all available resources from connected MCP servers
Queries the LLM agent with chat messages, enabling tool calling and multi-turn conversations
Four tools (getAllTools, getAllFuncTools, getResources, getPrompts) have NO visible input schemas.
Tool names lack action verbs. 'getAllTools' and 'getAllFuncTools' are vague (get what? all of what?). 'queryAgent' is ambiguous, does it query state, invoke, or configure? Names should be verb_noun like 'list_tools', 'invoke_tool', 'chat_with_agent'.
Duplicate functionality: getAllTools and getAllFuncTools both retrieve tools from MCP servers, differing only in output format. Should be one 'list_tools' tool with a 'format' parameter (enum: mcp | openai_function).
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract fields without knowing response structure. callTool returns 'any', queryAgent returns unspecified chat response.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 31 | 2026-07-28+ | v2 |
Error handling is minimal. callTool catches errors and returns a generic string '调用工具失败' (tool call failed) with no recovery guidance, invalid value details, or retry classification. Per pattern:recovery-guide, errors must tell the LLM what to do next.