Skip to content

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.

Changes · 7

20 tools: 7 change things and 13 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

5 warn
  • The server marks "run_statement" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement" says "run": a word for a change.

    What this check looks for
  • The server marks "run_statement_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement_data" says "run": a word for a change.

    What this check looks for
  • The server marks "run_metric" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric" says "run": a word for a change.

    What this check looks for
  • The server marks "run_metric_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric_data" says "run": a word for a change.

    What this check looks for
  • The server marks "eval_chart_transform" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "create": a word for a change.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "create": a word for a change.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric" says "run": a word for a change.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_metric_data" says "run": a word for a change.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement" says "run": a word for a change.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_statement_data" says "run": a word for a change.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.