Référence MCP

Serveur MCP — Vue d'ensemble

Le serveur MCP Normi expose 33 outils DVF, DPE, BDNB, ANIL et SIRENE via le protocole Model Context Protocol (HTTP Streamable). Branchez-le à claude.ai, ChatGPT, Claude Desktop, Claude Code, Cline ou tout client MCP compatible.

Connexion

URL du serveurhttps://mcp.normi.fr/mcp
TransportHTTP Streamable — stateless, sans session
AuthentificationConnexion OAuth 2.1 (claude.ai, ChatGPT, Claude Code…) ou Authorization: Bearer VOTRE_TOKEN

Avec un client compatible OAuth, collez simplement l'URL : le serveur répond 401 avec un en-tête WWW-Authenticate, le client vous envoie vous connecter à Normi et autoriser l'accès, puis appelle les outils avec le jeton obtenu. Les crédits sont débités sur la clé API active de votre compte. Détails

Le serveur ne maintient aucun état entre les requêtes : chaque appel est indépendant. Votre client peut appeler initialize comme d'habitude, mais rien n'est requis avant un tools/call — et il n'y a pas de mcp-session-id à conserver entre deux appels.

Exemple d'initialisation

Requête

curl -X POST https://mcp.normi.fr/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer normi_votre_token" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-06-18",
      "capabilities": {},
      "clientInfo": { "name": "mon-agent", "version": "1.0.0" }
    }
  }'

Réponse

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": {},
      "prompts": {}
    },
    "serverInfo": {
      "name": "Normi-MCP",
      "version": "1.0.0"
    }
  }
}

Appel d'outil

curl -X POST https://mcp.normi.fr/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer normi_votre_token" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "analyze_market_statistics",
      "arguments": {
        "code_postal": "75011",
        "type_local": "Appartement"
      }
    }
  }'

Les 33 outils MCP

OutilCréditsDescription
resolve_location1 créditsRésoudre une localisation libre en filtres canoniques
search_property_transactions5 créditsRecherche transactions DVF avec filtres
analyze_market_statistics5 créditsStats agrégées : médiane, prix/m², volume
analyze_purchasing_power5 créditsRatio prix/revenu par commune (pouvoir d'achat), croisant DVF et INSEE Filosofi
analyze_rental_yield10 créditsRendement locatif brut estimé par commune, croisant loyers ANIL et prix DVF
detect_flips10 créditsReventes rapides : taux de flip, marge brute et durée de détention par commune
find_property_comparables10 créditsBiens similaires autour d'un point GPS
analyze_price_trends10 créditsSéries temporelles par mois/trimestre/an
compare_locations10 créditsComparer 2 à 5 zones côte à côte
analyze_market_activity10 créditsVolume d'activité et saisonnalité
get_zonal_price_distribution15 créditsPrix par zone (code postal / commune) — données JSON pour cartographie
lookup_property_history20 créditsHistorique complet pour une adresse précise
estimate_property_value10 créditsAVM : fourchette basse/médiane/haute à partir de comparables DVF
score_market_health10 créditsScore de santé du marché (0–100) pour une zone
add_property_to_portfolio / list_portfolio_properties / get_portfolio_property / update_portfolio_property / delete_portfolio_property0–10 créditsGérer un portefeuille de biens avec estimations automatiques
create_market_alert / list_market_alerts / update_market_alert / delete_market_alert0 créditsAlertes webhook sur nouvelles transactions (Scale/Enterprise)
analyze_dpe_distribution10 créditsDistribution DPE (A–G) et médianes énergétiques pour une zone
analyze_dpe_price_premium10 créditsPrime de prix par classe DPE — diagnostic le plus proche dans le même département (≤200 m)
analyze_dpe_price_and_thermal_risk10 créditsAnalyse combinée : prix par classe, passoires thermiques, prime verte
get_building_characteristics2 créditsCaractéristiques BDNB du bâtiment le plus proche d'une transaction DVF : année, matériaux, usage, étages
analyze_building_age_price_impact10 créditsPrix médian/m² par tranche de construction (avant 1919, 1919–1945 … 2006+)
score_renovation_potential10 créditsScore de potentiel de rénovation (0–100) : bâtiments anciens sous-valorisés dans la zone
analyze_building_stock5 créditsStock de bâtiments par commune/département : répartition par tranche, usage, logements

Crédits

Chaque appel d'outil déduit un nombre fixe de crédits de votre solde. La déduction se fait en arrière-plan après l'exécution réussie (fire-and-forget). Si vos crédits sont insuffisants, l'outil retourne un message d'erreur dans content[0].text — pas d'erreur HTTP 402.

Chaque réponse inclut un champ _credits : { "used": 5, "remaining": 95 }. Un champ note apparaît quand le solde restant est inférieur à 20.

Codes d'erreur HTTP

CodeCauseAction recommandée
401Aucun identifiantLa réponse porte WWW-Authenticate : un client compatible lance la connexion OAuth. Sinon, envoyez votre clé API.
401Clé API ou jeton OAuth invalide, expiré ou révoquéClé : vérifiez qu'elle est active. OAuth : le client rafraîchit le jeton, ou l'utilisateur se reconnecte si l'autorisation a été révoquée.
403no_active_key : jeton OAuth valide mais aucune clé API active sur le compteCréez une clé dans le dashboard ; l'application reprend à l'appel suivant.
429Trafic protocole anormalLes appels d'outils au-delà de 60/min (Free, Indie, Agent, Pro) ou 120/min (Enterprise) renvoient un résultat isError, pas un 429.
Crédits insuffisants : erreur dans le contenu, pas HTTP
Quand un outil ne peut pas s'exécuter faute de crédits, le serveur retourne HTTP 200 avec un message d'erreur dans content[0].text. Surveillez ce champ dans vos intégrations.