MCP server providing HTTP/SSE transport for Thai stock market data with OAuth 2.1 authorization and API key authentication
The server defines 3 tools with reasonable names and descriptions. All tools follow verb_noun naming (get_stock_price, get_stock_info, search_stocks). Descriptions are present and explain the purpose, return values, and provide examples. However, input schemas are minimal, only single string parameters with basic descriptions. No output schemas are documented. The server lacks error handling guidance, parameter constraints (enums, ranges), and does not address idempotency or retry semantics. Tool composition is sound (search → get pattern is logical), and all three tools are READ_ONLY, which aids safety. The descriptions average ~180 characters, within the 194-char baseline. Parameter descriptions are brief but present. Overall, the tools are functional and clear but lack the rigor expected for production use (no output schema documentation, no error handling patterns, no parameter validation constraints).
Get detailed company information for a Thai stock listed on SET. Returns company name, sector, industry, market cap, description, and website.
Get current stock price information for a Thai stock listed on SET. Returns current price in THB, price change, percentage change, and trading volume. Example symbols: AOT (Airports of Thailand), PTT (PTT Public Company), KBANK (Kasikornbank).
Search for Thai stocks by symbol or company name. Returns a list of matching stocks with their symbols and company names. Useful for finding the correct ticker symbol when you know the company name.
No output schemas documented. LLMs cannot predict what fields to expect from tool responses, forcing them to guess and parse unstructured output. This increases error rates and wastes tokens.
Input schemas lack constraints. The 'symbol' parameter in get_stock_price and get_stock_info accepts any string, no enum of valid Thai stock symbols, no length constraints, no pattern validation. The 'query' parameter in search_stocks specifies 'minimum 2 characters' only in description text, not as a formal constraint. This invites hallucinated invalid symbols and wastes API calls.
No error handling guidance. The descriptions do not tell the LLM what to do if a stock symbol is not found, if the API is unavailable, or if the request times out. Error responses must include recovery actions like 'Try search_stocks() to find the correct symbol.'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 52 | 2025-06-18+ | v1 |
Parameter descriptions are too brief. 'Thai stock ticker symbol (e.g., AOT, PTT, KBANK)' and 'Thai stock listed on SET' lack guidance on format, case sensitivity, or length. Example values in descriptions risk being treated as literal values by LLMs rather than representative examples.
Tool descriptions mention example symbols (AOT, PTT, KBANK) inline. LLMs tend to reuse example values literally in real calls. These should be replaced with formal constraints (enum of valid symbols or regex pattern) or moved to parameter-level descriptions only.