Express-based MCP server with handlers for weather, news, GitHub, and finance data retrieval, augmented with OpenAI-based responses
This server exposes 6 tools with significant definition quality gaps. Most tools have descriptions present but they are overly verbose (250-400 chars vs 194 char baseline), lack actionable specificity, and do not articulate WHEN to use each tool or what the agent should do with results. Input schemas exist but are minimal, most parameters are strings with vague descriptions like 'User's message containing stock symbol and finance query'. Parameter names like 'userMessage' are generic and do not follow verb_noun conventions. None of the tools declare output schemas or document what fields the agent should expect in responses. Error handling is present in code (e.g., financeHandler returns 400/500 with messages) but descriptions do not communicate error recovery paths. No tool is idempotent or retryable by design. The tools are tightly coupled to specific external APIs (Yahoo Finance, NewsAPI, GitHub API, OpenWeatherMap) with no abstraction, failures in those APIs surface directly to agents. Security: API keys are injected server-side (good), but the tools do not declare required permissions or scope. Tool naming uses 'handle*MCP' prefix (handleFinanceMCP, handleGitHubMCP) which is generic and does not start with action verbs like 'get_', 'search_', or 'fetch_'. The batch variant (handleBatchMCP) illustrates composition, but no tool chains are documented, agents cannot predict which tool outputs feed into which downstream calls. Overall, the server provides functional HTTP endpoints but falls short of LLM-optimized tool design.
Processes batch weather MCP requests by accepting an array of requests, fetching weather data for each, and returning an array of results
Processes finance MCP requests by extracting stock symbols and detecting action type (price, quote, or analysis), fetching financial data from Yahoo Finance, and providing AI-powered investment insights
Processes GitHub MCP requests by parsing user message to extract action (profile, repos, or repo-info), fetching GitHub data via API, and providing AI-powered analysis
Processes weather MCP requests by extracting city location from user message, fetching weather data from OpenWeatherMap, and providing AI-powered weather-based suggestions
Processes general MCP requests by analyzing user message and routing to appropriate services (weather, news, GitHub, finance) based on detected intents
Processes news MCP requests by detecting action (headlines or search), parsing category and country parameters, fetching news data from NewsAPI, and providing AI-powered news analysis
Tool names do not start with action verbs. All tools use 'handle*MCP' prefix (handleFinanceMCP, handleGitHubMCP, etc.). This violates the verb_noun convention and obscures intent. LLMs expect names like 'get_stock_price', 'search_github_repos', 'fetch_news_headlines'.
No output schemas documented. Tools return JSON responses, but descriptions do not specify what fields are in the response, their types, or required chaining IDs. Agent cannot predict what data is available after a call or compose multi-tool workflows.
Parameter descriptions are too generic. 'User's message containing stock symbol and finance query' does not explain format, constraints, or length limits. Descriptions lack actionable detail, no enum values, regex patterns, or examples of valid input.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 28 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 14 | - | v1 |
Tool descriptions are overly long (250-400 chars) and lack WHEN/WHY guidance. E.g., 'Processes finance MCP requests by extracting stock symbols...' lists implementation steps rather than answering: when should an agent call this? What is it for? How does it differ from other financial tools?
No error recovery guidance in descriptions. Error handling exists in code (400/500 responses) but descriptions do not tell the agent what to do next if a call fails. Missing pattern: error should suggest next steps.
No permission or scope declarations. Tools do not state what permissions they require (e.g., 'read:finance', 'read:github'). Agents cannot reason about least-privilege configuration.
Tight coupling to external APIs with no abstraction. Tools hardcode dependencies on Yahoo Finance, NewsAPI, GitHub API, OpenWeatherMap. If an API fails, the tool fails, no fallback or partial result strategy.
Tool naming and composition. Tools are not designed for natural composition. 'handleMcpRequest' is a router that detects intent and dispatches to other tools, this creates a dependency chain that wastes tokens. Agents should call specific tools (search_github_repos, get_stock_price) directly.