MCP Server untuk data saham Indonesia (IDX) - Implementasi Node.js/TypeScript
The server provides 9 well-structured tools with consistent naming conventions (all start with verb: get_, search_, compare_). Tool descriptions are present and reasonably detailed (averaging ~120 chars), explaining what each tool does and when to use it. However, several critical gaps limit production readiness: (1) No documented output schemas for any tool, LLMs cannot plan downstream composition without knowing what fields are returned; (2) Parameter descriptions are minimal or absent in several tools (e.g., get_market_overview and get_sector_performance have no parameters but no documentation of their return structure); (3) Missing error handling guidance, no indication of what errors can occur, when to retry, or how to recover; (4) No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only operations. Tool definitions are clearly visible in src/server/index.ts, so inference penalty does not apply. The core toolkit is logically organized and domain-coherent (Indonesian stock market analysis), but lacks the depth needed for confident agent integration.
Compare performance of multiple stocks over a specified period
Get list of all available stock tickers in the historical dataset
Get information about the historical dataset including last update and coverage
Get historical price data for a specific stock
Get Indonesian stock market overview including IHSG index, volume, and top movers
Get performance data for all IDX sectors
Get comprehensive technical analysis for a stock with indicators and recommendations
No output schemas documented for any tool. LLMs cannot plan multi-step workflows without knowing return field names, types, and available IDs for chaining. For example, search_stocks returns results, but are they paginated? Do they include ticker symbols for downstream get_stock_info calls?
Missing parameter descriptions for tools with no required inputs (get_market_overview, get_sector_performance, get_available_stocks, get_dataset_info). Even though these tools have empty parameter lists, their descriptions lack detail about what data they return and when to call them instead of similar tools.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Get detailed information for a specific Indonesian stock
Search for stocks by company name or ticker symbol
No error handling guidance in any tool. Descriptions do not indicate what errors can occur (e.g., invalid ticker, API timeout, rate limit), whether they are retryable, or how to recover. LLMs receive failures with no actionable recovery path.
No tool annotations (readOnlyHint, idempotentHint) despite all 9 tools being read-only, stateless operations. Annotations enable agents to reason about side effects and retry safety without inferring from descriptions.
Unclear result limits and pagination strategy. Tools like search_stocks and get_available_stocks likely return large lists, but descriptions do not specify: (a) what the maximum result count is, (b) whether results are paginated, (c) what pagination fields/parameters are available. This risks LLMs being surprised by large or truncated results.
compare_stocks requires 2 - 5 tickers (minItems=2, maxItems=5) but the description does not explain this constraint or why the max is capped at 5. This forces LLMs to guess whether passing 6 tickers will fail or be silently truncated.