NestJS MCP (Model Context Protocol) module for creating tools for LLM or HTTP with validation, decorators, and OpenAI Function Calls integration.
NestJS MCP framework provides decorator-based tool registration with TypeScript/Zod schema support. However, critical inspection reveals multiple definition quality issues: (1) Tool descriptions are often below 20 characters or lack clarity ('Dynamic prompt', 'Dynamic resource'). (2) Missing descriptions entirely for get_temperature. (3) Parameter descriptions present but tool-level intent is unclear. (4) No visible output schema documentation across all 6 tools despite inputSchema declarations. (5) Typos in descriptions ('sand' instead of 'send', 'fiendly' instead of 'friendly', 'teegram' instead of 'telegram') suggest lack of review. (6) Error handling patterns not visible in source. (7) Security patterns not evident, no permission gates or audit trails shown. The framework supports Zod schema validation, which is positive, but actual tool implementations show gaps in production-readiness patterns.
Dynamic prompt
Dynamic resource
Telegram can sand messages via telegraf
Generate a short, fiendly reply to an incoming Telegram message and send it back to the same chat using teegram.sendMessage tool
Find all user
get_temperature has no visible description in source code, violating pattern:tool-description requiring every tool to have a non-empty description for LLM selection.
Multiple tool descriptions are below 20 character minimum ('Dynamic prompt', 'Dynamic resource') and do not explain WHAT the tool does, WHEN to use it, or prerequisites. LLMs cannot determine correct tool selection from vague names alone.
No output schema documentation visible for any of the 6 tools. IMcpToolResult type exists in decorator but tool definitions do not expose structured return types. LLMs cannot plan downstream calls without knowing response field structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
Tool descriptions contain spelling/grammar errors ('sand messages via telegraf' instead of 'send', 'fiendly reply' instead of 'friendly', 'teegram.sendMessage' instead of 'telegram.sendMessage'). Errors undermine LLM parsing and user trust.
users.find tool has no visible input schema in provided source, only a READ_ONLY risk label. Cannot verify parameter names, types, or constraints. Tool definitions must be directly visible in code.
Error handling and recovery guidance not visible in tool implementations. No evidence of pattern:recovery-guide with actionable next steps for LLM on failure.
Telegram credentials (bot token) passed via @InjectBot() dependency, not via explicit secret injection pattern. While better than parameter exposure, no evidence of environment variable or vault injection shown in code.
No permission gates or scope declarations visible. telegram.sendMessage and telegram_auto_reply can execute destructive/sensitive operations without access control.