MCP Server for SAGE Lake data access. Provides tool endpoints for AI agents to query the SAGE Data Lake (1.78B rows, 40K+ indicators, 85 organizations).
Server has 6 tools with basic schemas and descriptions, but significant gaps prevent higher scores. All tools have descriptions (10-100 chars, mostly adequate) and input schemas with type definitions. However, parameter descriptions are sparse or missing entirely (e.g., sage_query_indicators 'domain' param lacks description; sage_get_timeseries has no descriptions for year_from/year_to). Output schemas are completely undocumented, LLMs cannot plan downstream calls or extract structured data. No error handling guidance, no pagination support despite tools returning potentially large result sets (268M embeddings, 33M triples). Tool implementations are stubs returning plain text, not structured responses. No tool annotations (readOnlyHint, etc.) despite all being read-only. Parameter constraints are mentioned in descriptions but not formalized as enums or patterns.
Query the 33M-triple causal knowledge graph for relationships between entities.
Get comprehensive country profile with all available indicators across domains.
Cross-domain analysis joining two SAGE Lake indicators on country-year.
Search 268M evidence embeddings using hybrid BM25+vector retrieval.
Get time series data from SAGE Lake for a specific indicator and country.
Search SAGE Lake indicators by keyword. Returns matching indicator codes, names, source organizations, and row counts.
Output schemas completely undocumented. All tools return TextContent with plain-text responses. LLMs cannot parse structured results, extract IDs for chaining, or plan multi-step workflows. E.g., sage_query_indicators should return {indicator_code, indicator_name, source_org, row_count} as structured JSON, not a text blob.
Parameter descriptions missing or incomplete. sage_get_timeseries has no descriptions for year_from, year_to. sage_query_indicators 'domain' param lists values in description but should use enum constraint. sage_causal_graph 'relation_type' description lists values but not as enum. Formal constraints are machine-parseable; free-text examples invite hallucination.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | <=2025-11-25 | v2 |
No pagination support despite tools returning potentially massive result sets (268M embeddings, 33M triples, 40K+ indicators). sage_evidence_search and sage_causal_graph accept limit but no offset/cursor. Large unbounded results blow context windows and degrade LLM reasoning.
No error handling guidance. Tool implementations are stubs with no validation, no recovery hints, no categorization of errors as retryable vs fatal. E.g., if indicator_code is invalid, what should the LLM do? Try sage_query_indicators first? Retry? Give up?
No tool annotations. All 6 tools are read-only but lack readOnlyHint annotation. This prevents agents from reasoning about safety and side effects. Current MCP spec (2026-07-28) supports readOnlyHint, destructiveHint, idempotentHint, should be used.