Précis Finance MCP

io.github.precis-financePublished by GitHub account precis-financev0.4.0Updated Nov 5, 2026

Public read-only Précis Finance MCP demo with synthetic data; no account or credentials required.

The publisher's own server: Finance Foundation

VerifiedStreamable HTTPWeb executableDatabasesFinanceData & Analytics

Overview

AI-generated overview

Read-only FP&A connector that lets an assistant query governed financial statements, metric breakdowns, row-level detail, charts and Excel exports.

What you can do
  • Discover the model: orientation guide, scenarios, metric catalogue, dimensions, hierarchy search, variants and inspection sources
  • Run financial statements (P&L, variance, executive summary) as formatted tables or raw figures with a data_ref handle
  • Break metrics down by dimension such as project, employee, cost centre or GL account
  • Inspect row-level detail behind a figure and check data-load history and ingestion bindings
  • Build charts from data_refs with a bounded JavaScript transform and a chart spec
  • Export a cached result to JSON or XLSX and renew download links
When to use it
Useful when a finance team wants an AI client to answer management-reporting questions from its own governed numbers — P&L, budget versus actuals, variance drill-down — instead of an agent writing ad-hoc SQL. The public demo is a quick way to try it on synthetic data.
Requirements
The public demo is a remote streamable HTTP endpoint needing no account, API key or sign-in. Self-hosting needs Docker with Compose v2; the stack bundles ClickHouse, PostgreSQL and Valkey, or can point at your own ClickHouse or Databricks. Local trials use a dev key as bearer token; multi-user deployments use OAuth 2.1 with Keycloak or an external OIDC provider.
Before you install
The shared demo runs on synthetic data and is not your financials. Self-hosted deployments expose real finance data, so you must operate them under your own security model and identity provider. The server is read-only by design, but exported files and download links are short-lived and should be handled as sensitive. The open core excludes write-back, planning and workspace features.

Installation

In SourceWeft

  1. Open Précis Finance MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.precis-finance%2Fprecis-finance-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "pr-cis-finance": {
      "type": "http",
      "url": "https://mcp.precis.finance/mcp"
    }
  }
}

README

Précis Finance MCP — Financial reporting on Databricks and ClickHouse

[License: Elastic 2.0] [MCP] [CI] [Docs]

A read-only, self-hosted Model Context Protocol (MCP) server for financial reporting on Databricks or ClickHouse, built for Financial Planning & Analysis (FP&A) and management reporting. Give Claude, ChatGPT or another MCP-capable client access to governed metrics, financial statements, variance comparisons, row-level drill-down, charts and Excel exports from your own financial data. It is source-available under Elastic License 2.0 and forms the open core of Précis, the Finance Intelligence Platform.

You describe your business metrics once — KPIs, hierarchies, and financial-statement layouts in a YAML catalogue over a semantic layer of plain SQL views, versioned in git — and any MCP-capable client gets consistent, defensible numbers. Use your existing Databricks data model or start a local self-contained service with the bundled ClickHouse engine. Your own financials, not market data.

Use this if

  • You run or support a finance function and want AI clients — Claude, ChatGPT, or any MCP-capable client — answering questions and pulling management reporting from your own numbers.
  • You need governed metrics — one agreed definition of gross margin, utilisation, or revenue by business unit — not an agent querying raw rows in the general ledger or inventing its own definitions.
  • You want it self-hosted, on infrastructure you already operate and under a security model you control — not another cloud contract.
  • You need every answer traceable: read-only by construction, no figure generated by the model, every number aggregated from semantic views you can read.

Requirements

  • Docker — Engine + Compose v2. Everything runs in containers; there is nothing else to install.
  • No warehouse to provision — the stack bundles ClickHouse (the engine's analytical store), PostgreSQL (platform and artifact state), and Valkey (temporary snapshots). A local trial runs with nothing else and loads a sample finance model.
  • Already run ClickHouse or Databricks? — optionally point the engine at your own instance instead of the bundled one; see ClickHouse data modes or Databricks setup.
  • An MCP-capable client — Claude (claude.ai and Desktop connectors, against a deployed instance), Claude Code, ChatGPT, or any MCP client.
  • Optional Excel access — the multi-user image also hosts the Précis Excel add-in at /excel; enable its OAuth client when you want live read-only workbook functions.

What Précis Finance MCP looks like

[Claude, connected to Précis over MCP, rendering a governed P&L with comparatives and then drilling Revenue down to cost-centre level — sample data]

Every figure aggregates from the semantic views — account, cost centre, period, scenario — and the measures generic metric layers can't express (a utilisation denominator averaged across periods, re-aggregated by quarter or business unit, with subtotals in the layout) are first-class catalogue definitions.

Try the public demo

Connect a remote MCP client to https://mcp.precis.finance/mcp to explore Précis Finance MCP without installing anything or creating an account. The shared server exposes read-only tools over a synthetic finance dataset; it does not contain your financial data. No API key or sign-in is required.

For Claude Code:

sh
claude mcp add --transport http precis-demo https://mcp.precis.finance/mcp

Then ask precis_orientation what the demo supports, or request a P&L with comparatives. See the public demo connection guide for other MCP clients and the limits of this shared instance.

Quickstart — single-user local trial

sh
export MCP_DEV_KEY=$(openssl rand -hex 32)export ARTIFACT_SIGNING_KEY=$(openssl rand -hex 32)docker compose -f deploy/docker-compose.local.yml up -d --builddocker compose -f deploy/docker-compose.local.yml exec precis-mcp \  python -m precis_mcp.sample_data   # populate the demo model

One stack — the server plus ClickHouse, Postgres and Valkey — a shared dev key, bound to 127.0.0.1. Point any MCP client at http://127.0.0.1:8768/mcp with the dev key as bearer token. For example, with Claude Code:

sh
claude mcp add --transport http precis http://127.0.0.1:8768/mcp \  --header "Authorization: Bearer $MCP_DEV_KEY"

Then ask a finance-specific question to prove this is not a generic SQL MCP: "Show the P&L for FY2025 with comparatives." · "Drill revenue down by cost centre." · "Show utilisation by month for the Digital Transformation team."

Full walkthrough, including the demo data and bringing your own model: docs/getting-started/quickstart.md.

Rather do this on a call? We pair with early adopters to stand Précis Finance MCP up against their own warehouse — precis.finance or [email protected].

Multi-user deployment

deploy/docker-compose.yml runs the multi-user stack — the open server, PostgreSQL, ClickHouse (if using the bundled deployment), Valkey, artifact storage, and OAuth 2.1 + PKCE sign-in. Deployment is modular along independent axes:

  • Data — bundled ClickHouse (empty or with sample data), your own ClickHouse instance, or Databricks: ClickHouse data modes · Databricks setup
  • Identity — local dev key, the bundled Keycloak (optionally federated to your IdP), or a direct external OIDC provider (Auth0 / Okta / Entra / Ping): docs/deployment/oauth-keycloak.md, docs/deployment/external-idp-recipes.md
  • Ingress — the bundled Caddy proxy (bundled-proxy profile, on by default) terminates TLS with automatic Let's Encrypt certificates from nothing but PRECIS_DOMAIN. The app itself is proxy-agnostic: drop the profile to front it with an ingress you already operate (reference nginx vhost in deploy/nginx/, host helper scripts/install-precis-mcp.sh --nginx)
  • Backups — additive backup compose profile: scheduled bundles (Postgres dump + ClickHouse backup + instance config) to a local volume or S3, with restore and drill commands: docs/operations/backups.md
  • Excel add-in — optional hosted workbook functions served from the same instance at /excel; enable with the bundled Keycloak client or a public client in your external IdP: docs/excel/

scripts/deploy-mcp.sh --data-mode ... --auth-mode ... is the friendly front door over the Compose profiles. Every knob is an environment variable: docs/configuration/environment-variables.md.

Configure your data model

Your model lives in an instance/ directory — metric catalogue, semantic SQL views, ingestion bindings — and the bundled demo instance shows the shape. Start at docs/configuration/catalogue-and-semantic.md, then docs/configuration/ingestion.md and docs/operations/onboarding-ingestion.md to load your data. For Databricks, see the Databricks schema contract. The developer guide for adding server tools is docs/development/adding-read-tools.md.

Security and read-only posture

Start with the mechanisms, not the promise.

  • Read-only by construction — the server retrieves; it never writes to or changes your source. There is no write path back.
  • No figure is generated by the model — the agent requests defined metrics; Précis calculates and returns them using the agreed financial rules. Ask for utilisation by department and you get each department’s utilisation, with a total calculated using the same governed definition. Other agentic analytics approaches rely on agents writing SQL. When an agent writes SQL for each question, it must interpret how the measure should be calculated and aggregated, introducing opportunities for errors. Précis defines that logic once in the reporting engine and applies it consistently as the conversation develops. The agent retrieves the figures and narrates the results.
  • Traceable to source — every number traces from response → semantic view → warehouse. The semantic views are plain SQL you can read; the catalogue is versioned in git.
  • Your own warehouse, not market data — it runs in your environment, against your warehouse, under your own access controls.
  • Identity — a local dev key, the bundled Keycloak (optionally federated to your IdP), or a direct external OIDC provider (Auth0 / Okta / Entra / Ping).
  • Operator responsibility — Précis Finance MCP is designed to expose governed read operations; you still deploy and operate it under your own security model. Disclosure policy: SECURITY.md.

FP&A and financial reporting on Databricks

Use your existing Databricks environment as the analytical backend for Précis Finance MCP. Keep your financial data and pipelines in place, without copying the inputs into another analytical database.

Map your data to reporting views and agree the metric and statement definitions; finance can then request a monthly P&L, compare actuals with budget or drill into the drivers of a variance through a compatible MCP client.

What Précis adds alongside Databricks Genie: consistent financial calculations and presentation. Your agreed aggregation rules, statement layouts, comparison columns and number formats carry through each report. The agent requests established financial operations from the reporting engine, reducing repeated query generation and the scope for calculation errors as the investigation develops.

Our FP&A case study: Précis and Databricks Genie compares five financial requests against the same Databricks data, showing the differences in calculation fidelity, financial presentation and waiting time. Précis completed responses in 16–35 seconds, compared with 73–108 seconds for Genie in that session. The study compares the full Précis workspace with the native Genie interface; Finance MCP uses the same reporting engine, while response times depend on the connected client and deployment.

Read the Databricks product update for the broader platform benefits, including approved planning writeback. Précis Finance MCP remains read-only.

Documentation

Full documentation: docs.precis.finance.

Précis Finance MCP vs Précis

The deployment and data model you build here are the foundation the full Précis platform runs on. Précis is currently pre-General Availability and adds a licensed agentic workspace over this same engine and data model. Moving from the open core to Précis is workflow configuration and adoption — not a second data-integration project. Précis prepares; the finance professional decides.

What ships — and what doesn't

Ships in Précis Finance MCP (Elastic License 2.0): the MCP server and transport · metric engine · financial-statement layouts · semantic SQL view pattern · YAML metric catalogue · sample finance model · ingestion path · hosted read-only Excel add-in · ClickHouse analytical store · PostgreSQL platform state · local dev-key mode · multi-user OAuth 2.1 mode · Docker Compose deployment · backup & restore profile · configuration and deployment docs.

Lives in Précis, not in this repo: the workspace UI · the conversational agent · plan write-back · scenario commit workflows · scheduled Dispatch briefings · report / management-pack workflow · Excel write-back / round-trip · commercial support (unless separately agreed).

Talk about Précis — the full platform and design-partner programme: precis.finance or [email protected].

Support and services

Précis Finance MCP is built to be self-serve, and the documentation aims to be enough. If you'd like help beyond it — configuring your data model, a guided deployment, ongoing support, or a demo environment to evaluate against realistic data — book a setup session at precis.finance or write to [email protected]. The same address reaches the team behind the full Précis platform.

Contributing

This repository is a one-way mirror of the Précis monorepo: main advances by sync commits, and pull requests are applied internally with your authorship and DCO sign-off preserved, then published in the next sync. See CONTRIBUTING.md.

License

Elastic License 2.0 — source-available. Free to use, modify, self-host (including commercially), and redistribute; you may not offer it to third parties as a hosted or managed service.

Source: README.md at commit f536a5c

Tools

20

precis_orientation

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.

Takes no parameters.

list_scenarios

List the available planning scenarios and their status.

Takes no parameters.

list_kpis

Browse the metric catalogue — metric keys, formats, domains, and the dimensions available per metric.

Takes no parameters.

list_inspection_sources

List the row-level sources available for inspection.

Takes no parameters.

get_inspection_schema

Get the column schema for an inspection source.

Parameterssource_keyrequired

inspect_rows

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.

Parameterslimitcolumnsfiltersperiod_endsource_keyrequiredscenario_idrequiredperiod_start

run_statement

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.

Parametersscalefiltersdecimalsscenariosstatementdimensionsperiod_endperiod_start

run_statement_data

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.

Parametersscalefiltersdecimalsscenariosstatementdimensionsperiod_endperiod_start

run_metric

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.

Parametersscalefiltersmetricsrequireddecimalsscenariosdimensionsperiod_endperiod_start

run_metric_data

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.

Parametersscalefiltersmetricsrequireddecimalsscenariosdimensionsperiod_endperiod_start

search_hierarchy

Search the dimension hierarchies (cost centres, accounts, …) to find valid codes and ids before composing a query.

Parameterslimitquerydimension

list_dimensions

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.

Takes no parameters.

list_variants

List the what-if variants of a scenario.

Parametersscenario_idrequired

eval_chart_transform

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. Cached values are already scaled: scale 3 means non-exempt metrics are in thousands; scale 0 means units. Percentages (75 means 75%), FTEs and other scale-exempt metrics retain their units. Do not scale again; y_scale is forced to 0. For multiple sources, inspect each scale and format; re-query same-unit series at a common scale, and use separately labelled axes for different units (line/bar/area) or separate charts. Conflicting nonempty caption scale labels are omitted; unlabelled sources leave other labels intact. Set axis unit labels explicitly.

Parametersdata_refsrequiredchart_specrequiredtransform_coderequired

export_dataset

Export a previously returned data_ref to json or xlsx without rerunning the query. Use this for standard Excel exports of reports already shown, rather than rebuilding their JSON with Python. Financial XLSX uses shared server formatting and retains source/region metadata for add-in conversion. Returns a temporary file/download link; an expired snapshot requires a fresh authorized query, whose values may change.

Parametersformatrequireddata_refrequired

get_file_download

Renew a download capability for an available, owned artifact.

Parametersfile_idrequired

list_load_history

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

Parameterslimitperiodstatusbinding_iddataset_id

get_load_status

Fetch one data load's full detail by load_id — timestamps, status, rows landed, and any error message.

Parametersload_idrequired

list_bindings

List the configured data feeds (ingestion bindings) with their schedule — which datasets load, from where, how often.

Parameterstargetsource_id

get_binding

Fetch one data feed's full configuration: source, target dataset, schedule, and extract parameters.

Parametersbinding_idrequired

Version history

4
  1. v0.4.0LatestNov 5, 2026
  2. v0.3.0Oct 9, 2026
  3. v0.2.6Sep 24, 2026
  4. v0.2.5Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.

Other Finance integrations