Install guide / VS Code / GitHub Copilot

Connect Normi to VS Code (GitHub Copilot)

Add Normi as an MCP server in VS Code: in agent mode, GitHub Copilot queries DVF sales, DPE energy ratings and the BDNB without leaving the editor.

https://mcp.normi.fr/mcp

Configuration checked on 10 October 2026 against the official VS Code documentation (MCP servers and the mcp.json reference). VS 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

Create the file below in your project, or run MCP: Add Server from the command palette and choose HTTP. On first start, VS Code detects Normi's OAuth sign-in and opens the browser: sign in to normi.fr and approve VS Code.

File: .vscode/mcp.json (project), or MCP: Open User Configuration (profile)

{
  "servers": {
    "normi": {
      "type": "http",
      "url": "https://mcp.normi.fr/mcp"
    }
  }
}

Or in one line, in your user profile:

code --add-mcp '{"name":"normi","type":"http","url":"https://mcp.normi.fr/mcp"}'

API-key variant

VS Code asks for the key the first time the server starts (masked field) and stores it securely: it never appears in mcp.json, so you can commit that file.

{
  "inputs": [
    {
      "type": "promptString",
      "id": "normi-api-key",
      "description": "Normi API key (normi_…)",
      "password": true
    }
  ],
  "servers": {
    "normi": {
      "type": "http",
      "url": "https://mcp.normi.fr/mcp",
      "headers": {
        "Authorization": "Bearer ${input:normi-api-key}"
      }
    }
  }
}

Alternative: STDIO package

If remote servers are blocked, run the npm package @normi/mcp-dvf locally. It relays calls to the same Normi server.

{
  "inputs": [
    {
      "type": "promptString",
      "id": "normi-api-key",
      "description": "Normi API key (normi_…)",
      "password": true
    }
  ],
  "servers": {
    "normi": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@normi/mcp-dvf"],
      "env": {
        "NORMI_API_KEY": "${input:normi-api-key}"
      }
    }
  }
}

A first prompt to try

“Using Normi: how many houses in Bordeaux were resold less than two years after purchase, and at what margin?”

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

{
  "commune": "BORDEAUX",
  "periode": { "mois": 24, "date_debut": "2023-12-31", "date_fin": "2025-12-31" },
  "type_local": "Maison",
  "transactions_revente": 2246,
  "flips_detectes": 37,
  "taux_de_flip": 1.65,
  "marge_brute_mediane": 10000,
  "marge_mediane_pct": 3.53,
  "duree_detention_mediane_jours": 646
}

Over the last 24 months of DVF data, 37 of the 2,246 house resales in Bordeaux are “flips” (resold within 18 to 24 months), or 1.65%, with a median gross margin of €10,000 (+3.5%). Addresses are never returned: only aggregates. The response fields are in French because the API's field names are.

Troubleshooting

The Normi tools don't show up in Copilot Chat↓
MCP tools are only used in agent mode: pick “Agent” in the Chat mode selector, then open the Tools icon and check that Normi is ticked.
Error when the server starts↓
Command palette → “MCP: List Servers” → normi → “Show Output” shows the log. Check the “servers” key (not “mcpServers”) and the “type” field.
VS Code asks for the key again, or keeps an old key↓
The value entered for ${input:normi-api-key} is stored securely. After a key rotation, palette → “MCP: List Servers” → normi → restart, or clear the stored value to be prompted again.
MCP servers are disabled by your organisation↓
A GitHub Copilot Business or Enterprise admin can block MCP servers. Ask them to enable the “MCP servers in Copilot” policy.
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