Install guide / Claude Code

Connect Normi to Claude Code

One command adds Normi to Claude Code, then /mcp signs you in. Claude Code can then query DVF sales, DPE energy ratings and the BDNB from the terminal, your scripts or CI.

https://mcp.normi.fr/mcp

Tested on 10 October 2026 with Claude Code 2.1.233 (adding the server and OAuth detection), and checked against the official documentation. Claude Code MCP documentation

Before you start

  • A Normi account: sign in with Google, 500 free credits a month.
  • For the API-key connection or the STDIO package: a normi_… key, created in Dashboard → Tokens. It is shown only once.
  • For the STDIO package: Node.js 18 or later (npx).

Remote connection (HTTP Streamable)Recommended

Add the server, then run /mcp inside Claude Code: it opens the Normi sign-in page. No key to copy. --scope user makes Normi available in all your projects.

claude mcp add --transport http --scope user normi https://mcp.normi.fr/mcp
# then, inside Claude Code:
/mcp

Check the connection status:

claude mcp list
# normi: https://mcp.normi.fr/mcp (HTTP) - ✔ Connected

API-key variant (CI, remote machine)

Without a browser, pass a key in the Authorization header:

export NORMI_API_KEY=normi_YOUR_TOKEN
claude mcp add --transport http --scope user normi https://mcp.normi.fr/mcp \
  --header "Authorization: Bearer $NORMI_API_KEY"

To share the config with your team, commit a .mcp.json at the project root. Claude Code replaces ${NORMI_API_KEY} with each developer's environment variable, so the key never ends up in Git.

File: .mcp.json

{
  "mcpServers": {
    "normi": {
      "type": "http",
      "url": "https://mcp.normi.fr/mcp",
      "headers": {
        "Authorization": "Bearer ${NORMI_API_KEY}"
      }
    }
  }
}

Alternative: STDIO package

The npm package @normi/mcp-dvf runs locally and relays calls to the same Normi server. The -- separates Claude Code's options from the server command.

claude mcp add --env NORMI_API_KEY=normi_YOUR_TOKEN --transport stdio normi \
  -- npx -y @normi/mcp-dvf

A first prompt to try

“Using Normi, do apartments with a poor DPE rating sell for less in Paris 11?”

The agent calls analyze_dpe_price_premium (10 credits). An excerpt of the real response, captured on 10 October 2026 against the 2014–2025 DVF data:

{
  "classes": {
    "A": { "count": 669,  "median_prix_m2": 9217, "vs_median_pct": -0.8 },
    "B": { "count": 241,  "median_prix_m2": 9543, "vs_median_pct": 2.7 },
    "C": { "count": 1678, "median_prix_m2": 9501, "vs_median_pct": 2.3 },
    "D": { "count": 5303, "median_prix_m2": 9354, "vs_median_pct": 0.7 },
    "F": { "count": 4366, "median_prix_m2": 9206, "vs_median_pct": -0.9 },
    "G": { "count": 1808, "median_prix_m2": 9286, "vs_median_pct": 0 }
  },
  "summary": "Class B homes sell at +2.7% vs. median; class F at -0.9%"
}

In Paris 11 the gap stays small: from -0.9% (class F) to +2.7% (class B) around the median, over more than 20,000 sales matched to a DPE. The medians are not adjusted for location or year of sale: this is a description, not a measured “green premium”.

Troubleshooting

claude mcp list shows “! Needs authentication”↓
The server is added but not signed in yet. Run /mcp inside Claude Code, pick normi and follow the sign-in in your browser. Without a browser, use the API-key variant.
Normi only shows up in one folder↓
Without --scope, the server is registered at local scope (this project only). Remove it (claude mcp remove normi) and add it again with --scope user.
${NORMI_API_KEY} is empty with .mcp.json↓
The variable must be exported in the shell that starts Claude Code. Check with echo $NORMI_API_KEY before running claude.
Revoking OAuth access↓
In /mcp, pick normi then “Clear authentication”. On the Normi side: Dashboard → Tokens → Connected apps → Revoke.
Error 401 — Unauthorized↓
API key: it is missing, mistyped or revoked (the normi_ prefix is part of the key). Check that the environment variable is visible to the client. OAuth: access has expired or been revoked; reconnect from the client.
“no active API key” (403) on every call↓
Your account no longer has an active key. Create one in the dashboard: an OAuth connection resumes on the next call, a key-based config needs the new key.
Insufficient credits↓
The message comes back in the tool response, not as HTTP 402. The free plan tops up to 500 credits on the 1st of each month; you can also buy credits from the dashboard.
Error 429 — Rate limited↓
You are over your plan's requests-per-minute limit. Wait a few seconds, or cap how many calls your agent makes in parallel.

Next steps