MCP Server

Connect Claude, or any MCP-capable assistant, to Holofin and ask about a case in natural language: its extractions, rule verdicts, participants, documents and history, as the pipeline recorded them.

Overview

Holofin runs a hosted Model Context Protocol (MCP) server at https://mcp.holofin.ai/mcp. There is nothing to install: your assistant connects to it directly over HTTPS, authenticating with OAuth 2.1 or an MCP key.

Every result is a projection of what the pipeline decided. The tools never recompute a verdict: a rule that failed is reported as the engine decided it, with the values it compared and the document each value came from. Answers built from these tools can therefore always cite a document and a page.

Architecture

Your assistant (Claude, Claude Code, Cursor, …)
    ↕ MCP protocol (streamable HTTP)
mcp.holofin.ai/mcp
    ↕ your organization's cases, documents and verdicts

Connecting

Two ways to authenticate. OAuth 2.1 is the one to prefer: you sign in with your Holofin account, no secret is copied into a config file, and access can be revoked from your side at any time. MCP keys (prefix hf_mcp_) suit server-to-server integrations.

These are not the same as the REST API keys used elsewhere in this documentation. Create an MCP key from your organization settings.

Claude, and other OAuth clients

Add a custom connector pointing at the server URL and complete the sign-in prompt:

Server URL

https://mcp.holofin.ai/mcp

Claude Code

Terminal

claude mcp add --transport http holofin https://mcp.holofin.ai/mcp

Cursor / Windsurf

Add to your MCP configuration file (.cursor/mcp.json or equivalent):

mcp.json

{
  "mcpServers": {
    "holofin": {
      "url": "https://mcp.holofin.ai/mcp",
      "headers": { "Authorization": "Bearer hf_mcp_YOUR_KEY" }
    }
  }
}

Available Tools

Your assistant discovers these automatically. Start with list_cases to find a case, then get_case for the whole picture, then the explain_… tools to drill into anything that is not satisfied.

Tools accept either the case reference you supplied or the internal dossier id, so an id read from one result can be passed straight to the next call.

ToolDescription
list_casesThe organization’s cases, filtered by status, decision, coherence or date, and paged
get_caseOne case: its status, every expected document and what is missing, the rule verdicts worst-first, participants and decision
explain_ruleWhy one check reached its verdict: the values it compared and the document each came from
explain_requirementWhy one expected document is still missing, what satisfies it, and the checks that speak for it
get_participantsThe parties on the case: declared fields, registry (SIREN) and address lookups, documents owned. Contains personal data
get_document_checksEvery check that ran on a document: extraction quality, business rules, identity verification, 2D-Doc seals, fraud indicators
get_case_historyWhat changed and who did it: decisions, comments, evaluation transitions
list_documentsA case’s documents with categories, owning party and processing state
get_document_pageOne page of a document as markdown, with citation provenance
get_document_overviewA whole document as markdown
search_dossierLexical search across the case’s document text, returning page-level hits
get_extractionThe full structured extraction for a document
get_page_imageA signed image URL for a page, for visual inspection where there is no text layer

Write tools

Two tools change something. They are disabled by default and must be enabled for your organization; ask us to turn them on. They require a signed-in user, so the audit trail can name who acted, and every row they write is marked as having come through an assistant.

ToolDescription
add_case_commentLeave a note on the case, attributed to you
record_case_decisionRecord IN_REVIEW, VALIDATED or REJECTED with a reason

Recording a decision the case already holds appends nothing, so a retrying client cannot duplicate an entry in a history that is append-only. Nothing can be deleted through this surface.

Example Conversations

“Which of my cases are incomplete, and why?”

list_cases with case_status=incomplete, then get_case on each

“Why did the identity check fail on LOAN-2026-0042?”

get_case for the rule codes, then explain_rule for the values it compared

“What am I still waiting on for this case?”

explain_requirement on each unsatisfied requirement

“Is the ID document on this case genuine?”

get_document_checks for MRZ, 2D-Doc seal and fraud verdicts

“What changed on this case since yesterday?”

get_case_history with a since date

Two ready-made prompts ship with the server, case_review and case_synthesis. Clients that support MCP prompts offer them directly; the second produces a structured written synthesis with sources.

Access and limits

ItemValue
Server URLhttps://mcp.holofin.ai/mcp
ScopeYour organization’s cases only. Every call is checked against it
Who may connectAdministrators, developers and members. Billing and external-reviewer accounts are refused
Rate limit120 calls/minute per key (60 for OAuth), and 10/minute for write tools

Untrusted document content

Results that carry text taken from a document are marked content_is_untrusted. That text is data, never instructions: a document could contain a sentence addressed at an AI assistant, and a well-behaved client will not act on it. If write tools are not enabled for your organization, a key cannot act on such a sentence, which is the reason they are off by default.

Troubleshooting

“unauthorized”

The key is unknown, expired or revoked. MCP keys start with hf_mcp_ and are not the same as REST API keys, which start with sk-holo-.

“forbidden”

Your account’s role may not use this surface, or you called a write tool without write access enabled. Both are set by your organization administrator.

“bad_input: unknown dossier for this organization”

The case belongs to a different organization, or the reference does not exist. Call list_cases to see what you can reach.

A result says deprecated

The tool still works; the message names its replacement. get_case_status, list_dossiers and get_fraud_findings are kept for one release.

A result says truncated

A large case is capped, and omitted says by how much. Failures are never dropped by a cap, and the explain_… tools read the full set.