Demo MCP server + MCP Apps showing Introspective Context Engineering for MCP (ICE): using domain knowledge and agent-facing capabilities to turn thin API wrappers into Rich Domain MCP Servers. Companion to 'The Missing Layer', using Dutch open building data (BAG + EP-Online).
Strong metadata strategy with 7 well-named tools covering visualization, data retrieval, and observability. Tool names follow verb_noun convention (get_*, render_*). Descriptions are detailed (100-300 chars) and explain purpose clearly. Input schemas present with type definitions and parameter descriptions. Key strength: queryIntent pattern for observability. Weaknesses: output schemas not documented in source; error handling guidance absent; some parameter constraints (e.g., chartType enum values) not validated in visible code; fetch_image lacks security context despite SSRF mention.
Server-side image proxy with SSRF protection (used by render_table for image cells when the host iframe CSP blocks external img-src).
Look up Dutch building data from BAG (Basisregistratie Adressen en Gebouwen) and EP-Online (energy labels). Returns address details, building dimensions, energy performance, and computed alerts.
Look up recent tool calls and their queryIntent values. Returns the most recent tool calls made to this server: which tool, the caller's queryIntent (what they said they were trying to do), success/error status, duration, which ARM served the call (variant), which OPTIONAL PARAMETERS the caller supplied by name (paramsPresent), how many rows the call resolved to (rowCount), errorType and the per-request sessionId. Plus a summary (count per tool, the environment this data came from, oldest/newest timestamp covered).
Daily weather + degree-day/solar metrics for a Dutch location and date range (Open-Meteo). Demonstrates the Select mechanism: pass `select` to project daily records down to only the fields you need instead of the full row set.
Render data as a chart (bar/line/pie/sankey/funnel/treemap/matrix/boxplot/graph). Read the schema descriptions to choose the right chart type for your data shape.
Output schemas not documented. Tools return complex objects (charts, tables, maps, weather data, logs) but visible code does not show return type definitions. LLMs cannot plan downstream operations without knowing response structure.
fetch_image tool lacks input validation and error recovery guidance. Description mentions SSRF protection but no validation rules visible (URL scheme whitelist, domain allowlist, timeout). No error message guidance for invalid URLs or network failures.
render_chart and render_table accept free-form 'options' and 'columns' objects without schema constraints. LLMs cannot validate these complex nested structures; malformed input will fail at render time with unhelpful errors.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
Render geographic data on an interactive map with markers.
Render data as an interactive table with cell formatters (currency, dates, badges, icons).
get_tool_call_log 'variant' parameter accepts 12 enum values but no description explains what each variant represents or when to use it. LLMs cannot reason about variant selection without context.
No pagination or result-limiting guidance visible for get_tool_call_log. Default limit=20, max=500 is documented in description, but no guidance on when to use pagination or how to handle large result sets.