Read-only financial-data access over MCP — the open core of Précis (metric engine, semantic layer, ingestion, ClickHouse read layer, MCP transport, OIDC auth).
Précis Finance MCP demonstrates solid definition quality with well-structured tool names, comprehensive descriptions, and proper parameter schemas. All 6 tools follow verb-noun naming conventions and include detailed descriptions explaining WHAT they do and WHEN to use them. Parameter schemas are present with type definitions and descriptions. However, output schemas are not documented, error handling guidance is minimal, and some parameter constraints could be formalized as enums. The server shows careful design for a domain-specific tool (financial data ingestion), with discovery-first tools (precis_orientation, reload_integrations) and proper filtering parameters on list operations. Risk classifications are declared but not integrated into descriptions.
Fetch one binding's full configuration. Returns the binding's source, dataset, schedule (mode + cron expression or watch config), column_map, scenario handling, and extract parameters.
Fetch one `load_history` row by `load_id` — full detail including timestamps, status, and any error message. Use this when `list_load_history` surfaces a problematic load and you need the dbt test failure detail or the exception text. Per-test results live in dbt's run_results.json on the orchestrator host, not on the load_history row.
List active bindings with their schedule mode and configuration. Optional filters (combined with AND): `source_id` to scope to one source, `target` to scope to one live table (e.g. 'live.fact_gl'). Use this to answer "what bindings target NetSuite?" or "what's the schedule for the bindings that fill live.fact_gl?"
List recent ingestion attempts from `load_history`. All filters are optional and combine with AND. Returns up to `limit` rows (hard-capped at 200) ordered most-recent-first. Use this to answer "did April GL from NetSuite land?", "what failed in the last hour?", or "show me every load that's still running." Args: binding_id: e.g. 'netsuite_prod__gl' — restrict to one binding. dataset_id: e.g. 'gl' — restrict to one dataset across sources. period: 'YYYYMM' — restrict to one accounting period. status: one of 'running' / 'success' / 'failed_extract' / 'failed_recon' / 'failed_swap' / 'failed_dbt' / 'failed_validation' / 'failed_other'. limit: row cap (default 50, max 200).
Output schemas not documented. No structured schema definition for any tool's response fields. LLMs cannot plan downstream tool calls or understand what fields to extract.
Parameter constraints not formalized as enums. 'status' in list_load_history accepts multiple values (running|success|failed_extract|...) but this is documented only in text, not as a schema enum. Forces LLMs to parse textual constraints.
No pagination parameters on list_load_history despite 'limit' parameter. Tool accepts limit but no 'offset' or 'cursor' field documented; unclear how to iterate large result sets. No total_count in description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | 2026-07-28+ | v2 |
Call this first. Returns how to use Précis over this connector: the data model (scenarios, metrics, statements, dimensions), the reporting-tool variants, and how to build charts. Read it before composing queries.
Reload the integration registry from disk without restarting. Re-reads `instance/integrations/{sources,bindings}/*.yml`, validates everything, and atomically swaps the active registry on success. A failed validation leaves the previous registry untouched. Also re-binds the `IbisRegistry` to the (same) `IntegrationRegistryRef`, which clears its connection cache so federated reads pick up changed Source credentials and `kind` on the next query — otherwise stale Ibis connections would survive the reload. Use this after editing any YAML in `instance/integrations/` to make changes live immediately.
Error handling guidance absent. No description of error conditions, recovery steps, or which errors are retryable. E.g., reload_integrations can fail on validation but no guidance on how to diagnose or fix.
Tool annotations (readOnlyHint, destructiveHint) present in risk classification but not exposed in tool definition or description where LLMs can see them. Risk is metadata, not schema-accessible.