A context layer
between your agent and your data.

MCP, the Model Context Protocol, is how AI assistants like Claude use outside tools. Unfurl is an MCP server: your agent asks it questions, and it answers from a resolved copy of your revenue data on your own machine.

Your agent asks.
Unfurl answers.

  1. You ask in plain language"What is my open pipeline by owner?" in Claude, Claude Code, Cursor, or any MCP client.
  2. The agent picks a toolIt calls pipeline_summary with group_by: owner. No SQL, no exports.
  3. Unfurl answers locallyFrom the resolved graph in unfurl.db, over stdio. No network port is opened for the MCP server.
  4. Caveats come alongMissing amounts, merged duplicates, and last-sync times travel with the number.

What it fixes,
and what it flags

  1. Dedupes companiesBy normalized domain: "Acme Robotics" and "Acme Robotics Inc" become one account.
  2. Dedupes contactsBy normalized email: alice+trial@ and alice@ are the same person.
  3. Links billing to CRMStripe customers matched to accounts by email, then by company domain.
  4. Flags what it cannot fixOrphan deals, missing amounts, stale close dates, unattributed revenue: logged and ranked by severity.

Read-only today,
on purpose.

Every Unfurl tool reads; none of them change your CRM or billing. The credentials it asks for are read-only too. If write actions ever come, such as fixing a close date or merging a duplicate in HubSpot, they will be separate tools that propose a change and wait for a person to approve it. None exist yet.

A local dashboard
over the same graph

unfurl ui opens a dashboard at 127.0.0.1:4173: MRR, ARR, pipeline, and win-rate tiles, pipeline by stage or owner, win/loss with loss reasons, churn and risk signals, the data-health log, and a searchable accounts table. It only answers requests from your own machine.

See it on sample data
in two commands.