MCP Server for Auto-News providing Claude with access to Indonesian stock market news through a news pipeline that scrapes, indexes, and queries articles
This MCP server provides 5 tools for Indonesian stock market news retrieval and pipeline management. While all tools have descriptions and most have input schemas, the quality is inconsistent. Tool naming follows verb_noun convention (get_, read_, check_, run_) which is good. However, parameter descriptions are generic and lack specificity about constraints, formats, and expected values. Some tools have minimal or absent schema details for empty-object parameters. Error handling guidance is not visible in the code, and output schemas are completely undocumented. The server operates over STDIO only, which is a hard transport limitation. Most critically, there is no visible error recovery guidance, output schema documentation, or per-parameter validation rules, all critical for production agent tooling.
Check if the required Docker containers (Milvus, etcd, minio) are running. This is useful for troubleshooting if the news pipeline fails.
Retrieve today's fundamental Indonesian stock market news. This will run the full news pipeline: scraping articles, indexing them in the vector database, and querying the most relevant articles using semantic search. Returns condensed, relevant news articles ready for analysis.
Check the current status of the news pipeline. Returns: is_running, last_run timestamp, last_status (success/failed), last_error.
Read the latest condensed news file (news_condensed.txt) that was generated by the news pipeline. Use this if the news has already been fetched and you just want to read the results without running the full pipeline again.
Start the news pipeline in the background (non-blocking). Scrapes Indonesian financial news, indexes with Milvus, and creates condensed report. Check progress with get_news_status(), read result with read_news_report(). max_items: articles to scrape. top_k: top relevant articles. days_back: lookback days.
Empty-object parameters lack documentation. read_condensed_news, check_docker_status, and get_news_status all define inputSchema with empty properties but provide no explanation of what they do or what they return.
Output schemas completely undocumented. No tool documents what fields are returned, their types, or required vs optional status. LLMs cannot plan downstream calls or extract values without knowing response structure.
Parameter descriptions lack specificity. For numeric parameters (max_items, top_k, days_back, max_chars), no minimum/maximum bounds are stated. LLMs could pass absurd values (max_items=1000000, days_back=-100) without constraint guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
No error handling or recovery guidance. The code stub for check_docker_status_internal() is incomplete (cuts off mid-string). No visible error responses, retryable classifications, or actionable error messages in any tool implementation.
Inconsistent parameter type declarations. run_news_pipeline_async correctly uses 'integer' and 'boolean' types, but get_news uses 'number' for integer-like fields (max_items, top_k, days_back) which could lead to float values where integers are expected.
Default parameter values are inconsistent and not justified. get_news has default max_items=100 but description says 'default: 50'. run_news_pipeline_async has defaults but read_condensed_news and check_docker_status provide no guidance on behavior since they take no parameters.
No idempotency or side-effect documentation. run_news_pipeline_async is clearly a write operation (starts background process), but the description does not state whether it's safe to retry, what side effects occur, or whether duplicate calls create duplicate pipeline runs.
Missing tool-chaining context. No documentation of what IDs or references the tools return, making it unclear how to chain calls. E.g., does get_news_status return a run_id that can be used elsewhere? Does read_condensed_news need a file path parameter?