Japanese & Global Stock Market MCP Server for Claude, Cursor, VS Code.
kabu-mcp has 7 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-80 chars, mostly short), and input schemas are present with Zod validation. However, descriptions lack depth, most are under 50 chars and omit WHEN to use each tool or what it returns. Parameter descriptions are minimal (e.g., 'Ticker or Japanese name' for symbol). No output schemas are documented, forcing LLMs to infer response structure. Error handling returns raw error messages without recovery guidance. The 'gate()' pattern for pro features is clever but not transparent in tool descriptions, users won't know a tool is locked until invoked. Tool composition is reasonable (each does one thing), but missing pagination, result limits, and field-level documentation.
🔒 [PRO] Compare stock performance.
Historical OHLCV data. Free.
Real-time stock quote. Use .T for Japan (7203.T=Toyota). Japanese names OK (トヨタ,ソニー). Free.
🔒 [PRO] Japan/US/Crypto market overview.
🔒 [PRO] Batch quotes for portfolio.
Search stocks by name. Japanese OK. Free.
🔒 [PRO] RSI, MACD, Bollinger Bands, SMA with signals.
No output schemas documented. LLMs cannot infer response structure (fields, types, nesting). Forces guessing and increases hallucination risk.
Pro feature gating via license key is not transparent in tool descriptions. LLMs will invoke tools expecting success, then receive 'Pro feature' error. Descriptions should state 'Requires KABU_MCP_LICENSE_KEY env var with kabu_pro_* prefix.'
Descriptions are too short (25-45 chars for most tools). Lack WHEN to use, prerequisites, and return value hints. Baseline for A+ tools is 50-200 chars with explicit context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Error handling returns raw error messages ('Error: No data', 'Error: HTTP 404') without recovery guidance. Should suggest next steps: 'Symbol not found. Try search_stocks() to find the correct ticker.'
search_stocks returns up to 15 results with no pagination or limit parameter. Large result sets waste tokens. Should cap at 10-15 and document the limit in description.