Précis Finance MCP
by precis-finance · remote · no sign-in to list tools · v0.3.0 · published by GitHub user precis-finance
Public read-only Précis Finance MCP demo with synthetic data; no account or credentials required.
20 tools: 7 change things and 13 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things7Claude Code: ask: see these tools
- Only reads13Claude Code: allow: see these tools
5 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http precis-finance https://mcp.precis.finance/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnrun_statement
The server marks "run_statement" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement" says "run": a word for a change.
The server marks "run_statement_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement_data" says "run": a word for a change.
- Warnrun_metric
The server marks "run_metric" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric" says "run": a word for a change.
- Warnrun_metric_data
The server marks "run_metric_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric_data" says "run": a word for a change.
The server marks "eval_chart_transform" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "create": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
20 tools
Changes things 7Claude Code: ask
eval_chart_transformCreate a chart from data_refs (an array of snapshot IDs), a bounded JavaScript function, and chart_spec.1 finding
Why it is in this group
- The description's first verb is "create": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "eval_chart_transform" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "create": a word for a change.
Description, as the server wrote it Create a chart from data_refs (an array of snapshot IDs), a bounded JavaScript function, and chart_spec. Supports line, bar, area, waterfall, scatter, horizontal_bar, forecast_line, cohort_heatmap and sparkline_row. Query first and inspect rows; the transform takes one result per ref and returns flat rows.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
export_datasetExport a cached data_ref to json or xlsx without rerunning the query; returns a temporary file and download link.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Export a cached data_ref to json or xlsx without rerunning the query; returns a temporary file and download link.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
precis_orientationCall this first.No findings
Why it is in this group
- The description's first verb is "call": a word for a change.
Description, as the server wrote it 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.
run_metricBreak one or more metrics down by a dimension — revenue by project, utilisation by employee, headcount trends, GL account drill-down.1 finding
Why it is in this group
- The name "run_metric" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "run_metric" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric" says "run": a word for a change.
Description, as the server wrote it Break one or more metrics down by a dimension — revenue by project, utilisation by employee, headcount trends, GL account drill-down. Rows are the dimension; columns are metrics × scenarios. Pass `scenarios` explicitly and give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Returns a formatted table with structured data. The widget already displays this table to the user. Add useful interpretation; do not reproduce the table or restate all its rows in Markdown unless the user explicitly requests it or the widget is unavailable.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
run_metric_dataBreak one or more metrics down by a dimension — revenue by project, utilisation by employee, headcount trends, GL account drill-down.1 finding
Why it is in this group
- The name "run_metric_data" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "run_metric_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric_data" says "run": a word for a change.
Description, as the server wrote it Break one or more metrics down by a dimension — revenue by project, utilisation by employee, headcount trends, GL account drill-down. Rows are the dimension; columns are metrics × scenarios. Pass `scenarios` explicitly and give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Returns the raw figures (and a `data_ref`) for your own analysis or to build a chart — pass `[data_ref]` as `data_refs` to eval_chart_transform. Does not show the user a table.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
run_statementRun a financial statement — P&L, variance report, or executive summary.1 finding
Why it is in this group
- The name "run_statement" says "run": a word for a change.
- The input takes a statement or command to run (input.statement), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "run_statement" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement" says "run": a word for a change.
Description, as the server wrote it Run a financial statement — P&L, variance report, or executive summary. Rows are statement lines (Revenue, Direct Cost, Gross Margin, …); columns are scenarios. Supports an optional dimension breakdown (e.g. by period or cost centre). For an unspecified general P&L, prefer `full_pnl` when it is listed by precis_orientation. Give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Returns a formatted table with structured data. The widget already displays this table to the user. Add useful interpretation; do not reproduce the table or restate all its rows in Markdown unless the user explicitly requests it or the widget is unavailable.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
run_statement_dataRun a financial statement — P&L, variance report, or executive summary.1 finding
Why it is in this group
- The name "run_statement_data" says "run": a word for a change.
- The input takes a statement or command to run (input.statement), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "run_statement_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement_data" says "run": a word for a change.
Description, as the server wrote it Run a financial statement — P&L, variance report, or executive summary. Rows are statement lines (Revenue, Direct Cost, Gross Margin, …); columns are scenarios. Supports an optional dimension breakdown (e.g. by period or cost centre). For an unspecified general P&L, prefer `full_pnl` when it is listed by precis_orientation. Give every scenario a concise, user-facing `alias` such as Actuals, Budget, Variance, or Var %. Returns the raw figures (and a `data_ref`) for your own analysis or to build a chart — pass `[data_ref]` as `data_refs` to eval_chart_transform. Does not show the user a table.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
Only reads 13Claude Code: allow
get_bindingFetch one data feed's full configuration: source, target dataset, schedule, and extract parameters.No findings
Why it is in this group
- The name "get_binding" says "get": a word for reading.
Description, as the server wrote it Fetch one data feed's full configuration: source, target dataset, schedule, and extract parameters.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_file_downloadRenew a download capability for an available, owned artifact.No findings
Why it is in this group
- The name "get_file_download" says "get": a word for reading.
Description, as the server wrote it Renew a download capability for an available, owned artifact.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_inspection_schemaGet the column schema for an inspection source.No findings
Why it is in this group
- The name "get_inspection_schema" says "get": a word for reading.
Description, as the server wrote it Get the column schema for an inspection source.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_load_statusFetch one data load's full detail by load_id — timestamps, status, rows landed, and any error message.No findings
Why it is in this group
- The name "get_load_status" says "get": a word for reading.
Description, as the server wrote it Fetch one data load's full detail by load_id — timestamps, status, rows landed, and any error message.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
inspect_rowsInspect the row-level detail behind a figure, from an enabled inspection source.No findings
Why it is in this group
- The name "inspect_rows" says "inspect": a word for reading.
Description, as the server wrote it Inspect the row-level detail behind a figure, from an enabled inspection source. Returns a capped sample for reasoning plus a grid for the user.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_bindingsList the configured data feeds (ingestion bindings) with their schedule — which datasets load, from where, how often.No findings
Why it is in this group
- The name "list_bindings" says "list": a word for reading.
Description, as the server wrote it List the configured data feeds (ingestion bindings) with their schedule — which datasets load, from where, how often.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_dimensionsList the dimensions defined in the model — keys, labels, and kinds (leaf / derived / ragged hierarchy).No findings
Why it is in this group
- The name "list_dimensions" says "list": a word for reading.
Description, as the server wrote it List the dimensions defined in the model — keys, labels, and kinds (leaf / derived / ragged hierarchy). Catalogue metadata only; use search_hierarchy to list a dimension's members.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_inspection_sourcesList the row-level sources available for inspection.No findings
Why it is in this group
- The name "list_inspection_sources" says "list": a word for reading.
Description, as the server wrote it List the row-level sources available for inspection.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_kpisBrowse the metric catalogue — metric keys, formats, domains, and the dimensions available per metric.No findings
Why it is in this group
- The name "list_kpis" says "list": a word for reading.
Description, as the server wrote it Browse the metric catalogue — metric keys, formats, domains, and the dimensions available per metric.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_load_historyList data-load attempts from the ingestion audit trail — when each dataset landed, with what status.No findings
Why it is in this group
- The name "list_load_history" says "list": a word for reading.
Description, as the server wrote it List data-load attempts from the ingestion audit trail — when each dataset landed, with what status. Answers "is April in yet?" / "when was this data last loaded?".
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_scenariosList the available planning scenarios and their status.No findings
Why it is in this group
- The name "list_scenarios" says "list": a word for reading.
Description, as the server wrote it List the available planning scenarios and their status.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_variantsList the what-if variants of a scenario.No findings
Why it is in this group
- The name "list_variants" says "list": a word for reading.
Description, as the server wrote it List the what-if variants of a scenario.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
search_hierarchySearch the dimension hierarchies (cost centres, accounts, …) to find valid codes and ids before composing a query.No findings
Why it is in this group
- The name "search_hierarchy" says "search": a word for reading.
Description, as the server wrote it Search the dimension hierarchies (cost centres, accounts, …) to find valid codes and ids before composing a query.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.3.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http precis-finance https://mcp.precis.finance/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__precis-finance__list_scenarios",
"mcp__precis-finance__list_kpis",
"mcp__precis-finance__list_inspection_sources",
"mcp__precis-finance__get_inspection_schema",
"mcp__precis-finance__inspect_rows",
"mcp__precis-finance__search_hierarchy",
"mcp__precis-finance__list_dimensions",
"mcp__precis-finance__list_variants",
"mcp__precis-finance__get_file_download",
"mcp__precis-finance__list_load_history",
"mcp__precis-finance__get_load_status",
"mcp__precis-finance__list_bindings",
"mcp__precis-finance__get_binding"
],
"ask": [
"mcp__precis-finance__precis_orientation",
"mcp__precis-finance__run_statement",
"mcp__precis-finance__run_statement_data",
"mcp__precis-finance__run_metric",
"mcp__precis-finance__run_metric_data",
"mcp__precis-finance__eval_chart_transform",
"mcp__precis-finance__export_dataset"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as precis-finance. Review it before you use it.
