permisapi-mcp
The permisapi-mcp server provides 18 tools to search, analyze, and enrich 1.2M+ French building permits (Sitadel 2014–2026) via the MCP protocol, covering real estate opportunity scoring, urban planning, risk assessment, cadastre data, construction cost estimation, and contractor discovery.
Search & Retrieval
search_permits— 13 combinable filters (department, commune, type, status, dates, surface, SIREN, MDB score, risk level, PLU zoning)fuzzy_search_addresses— typo-tolerant text search across all French permit addressessearch_permits_in_polygon— find permits inside a custom GeoJSON polygon (e.g., ZAC perimeter)get_permit_details— full permit details (address, applicant, dates, surface, cadastre parcel, coordinates)get_permit_full_view— 360° composite view combining details, DVF, MDB score, PLU, and risks in one call
Real Estate Opportunity Scoring
get_mdb_score— 0–100 opportunity score with tier (low/medium/high/premium) based on 11 weighted signalsget_score_explanation— transparent breakdown of the 11 signals with top drivers/drags and contextual interpretation
Property & Land Analysis
find_dvf_neighbors— nearby property transactions (DVF+ 2014–2025) to estimate local land/property valueget_plu_zoning— PLU zone classification (U/AU/A/N) with constructibility verdict and legal basisget_risks— flood, seismic, clay, ICPE (Géorisques/BRGM) risks with aggregated 0–100 risk scoreget_parcelle_geometry— precise DGFiP cadastre polygon (GeoJSON WGS84) + measured surface areaget_existing_buildings— determine if a parcel is bare land or already built, with building count and typesget_parcelle_by_id— direct cadastre lookup by 14-character Etalab identifierget_neighbor_parcels— cadastral parcels within a 10–2000m radius
Statistics & Bulk Operations
get_commune_density_stats— aggregated BI data on parcels, buildings, and permits per communebulk_enrich_list— cross-reference up to 1,000 addresses/coordinates/parcels with permits, scores, risks, zoning, and cadastre data in one call
Construction & Contractors
get_economics— construction budget estimate (range, scenario: new build/renovation/demolition, trade breakdown via Capeb/FFB rates + INSEE ICP-BT index)get_contractors— find local BTP companies (SIRENE NAF 41/42/43) filtered by radius, trade, and workforce size
permisapi-mcp
Serveur MCP (Model Context Protocol, Anthropic) pour PermisAPI.
Permet à Claude Desktop, Claude.ai web, ChatGPT custom GPT, Cursor, Windsurf ou tout client MCP-compatible de consulter 1,2 M+ permis de construire de France (Sitadel 2014-2026, résidentiel + non-résidentiel, depuis 2014) en langage naturel.
18 outils disponibles : recherche par adresse, score d'opportunité Marchand de Biens v0.3 et son explication transparente (les 11 signaux pondérés détaillés en français avec interprétation contextualisée), prix au m² des ventes voisines sur 12 ans, zonage urbanisme PLU, risques (inondation, sismique, ICPE), parcelle cadastre DGFiP (par identifiant Etalab ou par géométrie), bâtiments existants (terrain nu vs déjà bâti), parcelles voisines d'un permis (pattern d'activité local marchand de biens), recherche par polygone GeoJSON custom (ZAC, périmètre opération), statistiques densité commune, budget chantier estimé (fourchette EUR
scénario neuf / rénovation / démolition basé surfaces Sitadel + barème Capeb / FFB + INSEE ICP-BT), entreprises BTP locales par lot (SIRENE NAF 41/42/43, 1 086 952 actifs en BDD géolocalisés WGS84) et enrichissement de liste client.
Deux modes au choix
Mode 1 : SSE hosted (recommandé, zéro installation)
Connecte directement Claude.ai web ou ChatGPT à https://mcp.permisapi.fr/mcp
avec ta clé PermisAPI en Bearer token. Pas de Python à installer, pas de
config locale, ça marche depuis n'importe quel browser.
Claude.ai web (Settings > Integrations > Add MCP server) :
URL : https://mcp.permisapi.fr/mcp
Auth : Bearer
Token : pk_live_VOTRE_CLECursor / Windsurf (~/.cursor/mcp.json) :
{
"mcpServers": {
"permisapi-hosted": {
"url": "https://mcp.permisapi.fr/mcp",
"headers": { "Authorization": "Bearer pk_live_VOTRE_CLE" }
}
}
}Mode supporté : Streamable HTTP (spec actuelle MCP) sur /mcp ET SSE legacy sur
/sse + /messages/ (backward compat). Aucune donnée n'est stockée côté
serveur MCP, c'est un proxy authentifié vers api.permisapi.fr.
Mode 2 : stdio local (Claude Desktop classique)
Pour Claude Desktop ou si tu préfères tout en local, install Python et le
package permisapi-mcp :
Related MCP server: Dilix MCP
Pré-requis
Python 3.10 ou plus récent (requis par le MCP SDK Anthropic, non négociable)
Une clé PermisAPI : https://permisapi.fr/#pricing (gratuite pour commencer)
Installation
Vérifier d'abord la version Python :
python --version # macOS / Linux / WindowsSi >= 3.10 :
pip install permisapi-mcpSi < 3.10, voir la section Troubleshooting plus bas
(workaround uvx en 1 commande, pas besoin d'upgrade système).
Configuration Claude Desktop
Éditez ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
ou %APPDATA%\Claude\claude_desktop_config.json (Windows) :
{
"mcpServers": {
"permisapi": {
"command": "permisapi-mcp",
"env": {
"PERMISAPI_KEY": "pk_live_VOTRE_CLE"
}
}
}
}Redémarrez Claude Desktop. Vous pouvez maintenant demander :
« Liste les permis de logement déposés à Paris ce mois avec un score MDB > 70 »
« Trouve-moi des opportunités MDB autour de la rue de Passy à Paris »
« Quel est le zonage PLU du permis 0930662500027 ? »
Note sur le périmètre géographique :
Free : 1 département au choix (Paris par défaut). Modifiable via le dashboard.
Explorer : 5 départements au choix (Paris/Lyon/Marseille/Bordeaux/Toulouse par défaut).
Pro / Business / Enterprise : France entière, aucune restriction géographique.
Les exemples ci-dessus ciblent Paris (75) pour qu'ils fonctionnent immédiatement sur tous les plans. Si vous êtes sur Explorer avec ses départements par défaut, vous pouvez aussi demander "à Lyon", "à Bordeaux", etc.
Configuration Cursor / Windsurf / autres clients
Voir le guide complet : https://permisapi.fr/mcp
Tools disponibles (18)
Tool | Endpoint | Plan |
| GET /v1/permits (13 filtres) | Free |
| GET /v1/permits/{num_pa} | Free |
| GET /v1/search?q=text (pg_trgm fuzzy) | Free |
| GET /v1/permits/{num_pa}/dvf (12 ans : Cerema DVF+ 2014-2020 fusionné Geo-DVF 2021-2025) | Pro |
| GET /v1/permits/{num_pa}/score (Score MDB v0.3, 11 signaux) | Pro |
| GET /v1/permits/{num_pa}/score/explain (11 signaux décryptés + interprétation FR contextualisée + top drivers/drags + inputs concrets, USP transparence) | Pro |
| GET /v1/permits/{num_pa}/plu | Pro |
| GET /v1/permits/{num_pa}/risks (Géorisques BRGM) | Pro |
| GET /v1/permits/{num_pa}/parcelle (cadastre DGFiP) | Pro |
| GET /v1/permits/{num_pa}/batiments-existants (terrain nu vs bâti, use case MDB) | Pro |
| GET /v1/parcelles/{id_parcelle} (lookup direct cadastre 14 chars Etalab) | Pro |
| GET /v1/permits/{num_pa}/parcelles-voisines (rayon 10-2000 m, killer feature MDB) | Pro |
| POST /v1/permits/inside-polygon (polygon GeoJSON custom ZAC) | Business |
| GET /v1/stats/commune/{code}/density (BI agrégé parcelles + bâtiments + permits) | Business |
| GET /v1/permits/{num_pa}/360 (composite 6-en-1) | Pro |
| POST /v1/permits/bulk-enrich (croise liste client jusqu'à 1 000 lignes) | Business |
| GET /v1/permits/{num_pa}/economics (budget chantier : fourchette EUR + scénario + breakdown_by_lot Capeb / FFB + INSEE ICP-BT) | Pro |
| GET /v1/permits/{num_pa}/contractors (entreprises BTP locales SIRENE NAF 41/42/43, filtres rayon / métier / effectif) | Pro |
Sécurité
La clé API reste côté user (env var locale, jamais transmise au LLM)
Le LLM voit uniquement les arguments des tools (pas la clé)
Validation stricte des inputs (regex sur
num_pa, ranges Pydantic)16 outils en consultation pure (GET) + 2 outils POST (
bulk_enrich_listqui croise une liste client, etsearch_permits_in_polygonqui prend un polygon GeoJSON custom). Tous en lecture seule côté PermisAPI : aucune donnée client n'est stockée, on renvoie juste les permits qui matchent.
Troubleshooting
pip install permisapi-mcp dit "package introuvable" ou "no matching distribution"
Cause la plus fréquente : votre Python est plus ancien que 3.10. Le MCP SDK Anthropic requiert Python 3.10 minimum, on ne peut pas descendre cette borne.
Vérifiez :
python --version # ou python3 --versionSi < 3.10, deux solutions au choix.
Solution A (recommandée, 30 secondes) : uvx avec pin Python
uvx installe et lance le serveur dans un Python isolé pinné à la version
voulue, sans toucher à votre installation système.
# 1. Installer uv (une seule fois)
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows PowerShell
# 2. Lancer le serveur
uvx --python 3.11 permisapi-mcpPuis dans la config Claude Desktop, remplacez "command": "permisapi-mcp" par :
{
"mcpServers": {
"permisapi": {
"command": "uvx",
"args": ["--python", "3.11", "permisapi-mcp"],
"env": { "PERMISAPI_KEY": "pk_live_VOTRE_CLE" }
}
}
}Solution B : upgrade Python système
macOS :
brew install python@3.11Windows : télécharger https://www.python.org/downloads/ et cocher "Add to PATH"
Linux :
sudo apt install python3.11(ou équivalent distro)
Puis pip3.11 install permisapi-mcp.
Guide setup complet + autres FAQ : https://permisapi.fr/mcp
Licence
MIT.
Support
evan@permisapi.fr : réponse 24-48h sur les plans Pro+, 24-72h sur les autres.
Code source
Available Tools
11 toolsbulk_enrich_listA
Croisez une liste fournie par l'utilisateur (max 1000 lignes) avec les permis de France pour recuperer en 1 appel : permis a proximite + score d'opportunité + risques + zonage + parcelle cadastre. Plan Business+ uniquement, coût = 1 unité quota par ligne. Use case : enrichir une liste prospects/patrimoine. 3 modes par ligne : (lat+lng) ou (adresse) ou (commune+section+numero). Le champ 'ref' identifié chaque ligne dans la response.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| radius_m | No | ||
| max_matches | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses constraints (max 1000 rows, cost per line, plan requirement) and the three input modes, but does not state whether the operation is read-only or has side effects, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of four sentences, directly stating the purpose, constraints, use case, and input modes. It is concise and front-loaded, with no redundant information, though a bulleted list could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 parameters, no output schema, no annotations), the description covers inputs and constraints but does not detail the output structure or how to interpret the results. It mentions the types of returned data but lacks specificity, leaving agents potentially uncertain about the response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It explains the three input modes for rows and the role of 'ref'. However, it does not describe 'radius_m' and 'max_matches' beyond what the schema provides (defaults and limits), missing an opportunity to clarify their semantic impact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool cross-references a user-provided list with French permits to retrieve multiple data points (proximity permits, opportunity score, risks, zoning, cadastre). It specifies the max list size, use case, and distinguishes from sibling tools that focus on single aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies the use case (enriching prospect/asset lists) and explains input modes. However, it does not explicitly tell when not to use this tool or mention alternative tools for specific data types, though the context of sibling tools implies differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_dvf_neighborsC
Pour un permis, retourne les top transactions immobilieres DVF voisines (5 ans glissants). Permet d'estimer la valeur fonciere du quartier. Plan Pro+ uniquement.
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes | ||
| limit | No | ||
| type_local | No | CSV des types : 1=Maison, 2=Appartement, 3=Dependance, 4=Local commercial. | |
| min_year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the rolling window and access restriction, but omits behavior details such as what 'top' means, whether permits must exist, output format, or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences front-loaded with action. The second sentence adds value by explaining the purpose, and the third states an important restriction. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description is too minimal. It does not explain what the tool returns, the meaning of 'top,' or how parameters like limit and min_year affect results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (type_local has a description). The description adds no meaning for limit or min_year, and only implies that num_pa is a permit number. It fails to compensate for the 75% schema coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns top neighboring DVF transactions for a permit, with a rolling 5-year window, and explains its purpose for property value estimation. However, it lacks explicit differentiation from sibling tools like get_permit_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only mentions a plan restriction (Plan Pro+ uniquement) but provides no guidance on when to use this tool versus alternatives like search_permits or get_existing_buildings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fuzzy_search_addressesA
Recherche fuzzy par texte libre sur les adresses (rue, ville, lieudit). Utilise pg_trgm côté DB : insensible aux accents et à la casse, tolérant aux typos. Idéal pour trouver un permis quand on connaît l'adresse approximative mais pas le code postal ou commune INSEE précis. Tous plans (avec respect du scope géo). Coût 1 unité quota. Exemple : 'rue victor hugo paris', 'cours de l ile bordeaux'.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Texte libre a chercher (min 2 chars). | |
| dep_code | No | Restreindre a un département spécifique (ex '75'). | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses technical behavior (pg_trgm, case/accent/typo insensitivity), cost (1 quota unit), and geo scope respect. However, it omits whether the operation is read-only (though implied), what the response contains, or pagination details. The disclosed info is useful but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (few sentences) with a clear front-loaded purpose. Every sentence adds value: purpose, technical details, use case, cost, example. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description covers tool purpose, behavior, use case, cost, and geo-scoping. It lacks a description of the return format or error behavior, which would be helpful. Overall, it is mostly complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (2/3 params have descriptions). The description adds value beyond schema for q by clarifying fuzzy, insensitive, typo-tolerant behavior and giving examples. For dep_code, schema description is sufficient; description adds nothing. For limit, neither schema nor description provides explanation, so a gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: 'Recherche fuzzy par texte libre sur les adresses'. It defines the scope (street, city, lieudit) and gives a concrete use case (finding permits via approximate address). The examples further clarify intent, distinguishing it from sibling tools like search_permits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating 'Idéal pour trouver un permis quand on connaît l'adresse approximative mais pas le code postal ou commune INSEE précis'. This tells when to use it, but it does not explicitly mention when not to or name alternative siblings. The guidance is helpful but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_existing_buildingsA
Liste les bâtiments cadastraux déjà construits sur la parcelle du permit. Use case CRITIQUE marchand de biens : distinguer parcelle nue (vraie construction neuve, value-add max) vs parcelle bâtie (extension/rénovation, value-add moindre). Retourne nb_batiments total + décompte par type (bâti dur / bâti léger / autre) + flag parcelle_nue boolean + détails individuels (id Etalab, type label FR, centroïde, dates création/MAJ cadastre). Source : cadastre.data.gouv.fr via Etalab (DGFiP). Plan Pro+ uniquement. Coût 1 unité quota. 404 si le permit n'a pas de polygone cadastre disponible (rare, ~15% des permits).
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes | Identifiant Sitadel unique (ex PC07404021K1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden. It discloses the output (nb_batiments, breakdown, flag, details), data source, plan restriction (Pro+), cost (1 unit), and error behavior (404). It does not mention mutation or safety, but as a read tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but each sentence provides distinct value (purpose, use case, output details, source, limitations, error). It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains the return values, including counts, flag, and individual details. It also covers source, plan restriction, cost, and error case, making it complete for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'num_pa', which is already described in the schema as 'Identifiant Sitadel unique'. The description adds no additional semantic details beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool lists existing buildings on a parcel for a permit, with specific verb 'Liste' and resource 'bâtiments cadastraux déjà construits'. It distinguishes from siblings by detailing a critical use case (marchand de biens) and output specifics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (e.g., assessing if a parcel is bare or built) and mentions a specific use case. However, it does not explicitly state when not to use or name alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mdb_scoreA
Calcule le Score Opportunité Marchand de Biens v0.1 pour un permis (note 0-100 + tier low/medium/high/premium + breakdown de 7 signaux ponderes). Plan Pro+ uniquement.
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It describes the output (score, tier, breakdown) but does not disclose side effects, prerequisites (beyond plan), error conditions, or whether the operation is read-only. The description gives moderate behavioral context but lacks completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence, front-loaded with the main action and output. It avoids redundancy but could be slightly better structured with separate lines for output and condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and one parameter, the description provides key output details but omits what the '7 signaux' are, how errors are handled, and any dependencies (e.g., permit must exist). It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions the parameter is for a permit ('pour un permis') but does not explain the parameter name (num_pa), format, or example. Minimal additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates a specific score (Score Opportunité Marchand de Biens v0.1) for a permit, with output details (0-100, tier, breakdown). It also identifies the plan restriction, distinguishing it from sibling tools like get_permit_details or search_permits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Plan Pro+ uniquement', providing a clear condition for use. However, it does not mention when not to use this tool or suggest alternatives, though the plan restriction itself guides appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parcelle_geometryA
Géométrie précise de la parcelle cadastre DGFiP du permis (via Etalab open data). Retourne un GeoJSON Polygon WGS84 + surface mesurée en m2 + identifiant Etalab. Permet de visualiser le polygon exact de la parcelle sur une carte (vs juste le point lat/lng adresse). Plan Pro+ uniquement. 404 si la commune n'est pas encore en cache (rare, hors couverture Etalab DOM très récents).
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes | Identifiant Sitadel unique (ex PC07404021K1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return format, data source, access restriction, and error condition (404). No annotations provided, so description covers key behavioral traits adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: 2-3 sentences covering purpose, output, usage context, and error. No fluff, front-loaded with main output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers what is returned, data source, error condition, and access. Lacks mention of response size or rate limits but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter has a clear description in the schema; the tool description adds no further semantic detail beyond what's already there. Baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that it returns precise geometry of the cadastre parcel as GeoJSON Polygon with surface area and Etalab ID. It distinguishes from siblings by contrasting with address-based lat/lng.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions the tool is for 'Plan Pro+ uniquement' and a specific 404 case, implying when to use and limitations. Could be more explicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_permit_detailsB
Recupere tous les détails d'un permis a partir de son identifiant Sitadel (num_pa) : adresse complète, demandeur, dates, surface, parcelle cadastre, lat/lng. Plan Free OK.
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes | Identifiant Sitadel unique (ex PC07404021K1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It does not mention error handling, rate limits, authentication, or behavior on invalid input, and only vaguely hints at cost with 'Plan Free OK'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with front-loaded purpose. The first sentence is slightly long but information-dense. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description adequately lists the types of details returned. The meaning of 'Plan Free OK' is ambiguous, but overall completeness is sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of num_pa. The description adds a list of returned fields but does not enhance understanding of the parameter beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all details of a permit using a specific identifier (num_pa) and lists the types of details returned. It is specific about verb and resource but could better differentiate from sibling get_permit_full_view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings like get_permit_full_view or search_permits. The phrase 'Plan Free OK' hints at cost but does not clarify usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_permit_full_viewA
Vue 360 complète d'un permis en 1 seul appel : détail + sirene + dvf + score MDB + zonage PLU + risques. Le moyen le plus efficace pour analyser un permis quand tu veux tout d'un coup au lieu d'appeler 6 outils séparés. Coût : 6 unités de quota Pro+ (1 par sous-feature, identique à 6 calls séparés). Pour Free / Explorer, retourne uniquement le détail (coût 1 unité). En cas d'échec d'une sous-feature (ex: PLU timeout), le champ vaut null et l'erreur est listée dans fetch_errors. Latence typique 5-7s.
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes | Identifiant Sitadel unique (ex PC07404021K1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses cost (6 units for Pro+, 1 for Free/Explorer), failure behavior (null fields, errors in fetch_errors), and typical latency (5-7s).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph but packs significant detail efficiently. Front-loaded with purpose, though slightly lengthy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should explain return values. It lists sub-features but does not detail the JSON structure or fields. Missing structure for a complex combined tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with description for the single parameter, so baseline 3 applies. The description adds no extra parameter insights beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it provides a full 360 view of a permit in one call, combining detail, sirene, dvf, score, zoning, risks. It distinguishes from siblings by explicitly mentioning it replaces 6 separate tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: when you want everything at once instead of 6 separate tools. Also mentions cost implications and plan limitations (Free/Explorer vs Pro+).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_plu_zoningA
Retourne le zonage urbanisme PLU au point géocodé du permis (UA/UB urbain, AU a urbaniser, A agricole, N naturelle) avec verdict booleen constructible et raison juridique. Source Geoportail de l'Urbanisme. Plan Pro+ uniquement.
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes the output (zoning types, constructible boolean, legal reason) and source, but does not disclose potential side effects, authentication needs, or error handling. The tool is clearly a read-only query, but lacks details on behavior under failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first delivers the core functionality and output details, the second adds source and restriction. No wasted words, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no annotations, and no output schema, the description covers the output structure (zoning types, boolean, reason) and source. It lacks error scenarios or response format specifics, but is mostly complete for a simple query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explicitly explain the 'num_pa' parameter. It implies it is the permit number ('au point géocodé du permis'), but no format or example is provided. The description adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns zoning information (PLU) at the geocoded point of the permit, listing specific zoning types (UA/UB, AU, A, N), a boolean constructibility verdict, and legal reason. It distinguishes itself from sibling tools like get_risks or get_existing_buildings by focusing specifically on zoning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly limits usage to 'Plan Pro+ uniquement', providing a clear condition for when to use this tool. It does not mention when not to use it or suggest alternatives, but the restriction is helpful context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_risksC
Risques naturels et technologiques (inondation, seisme, argile, ICPE proches) connus sur la commune du permis. Score agrege 0-100 + tier. Source Géorisques BRGM. Plan Pro+ uniquement.
| Name | Required | Description | Default |
|---|---|---|---|
| num_pa | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only mentions the data source (Géorisques BRGM) and a usage restriction. It does not specify that this is a read-only operation, potential rate limits, caching behavior, or what happens if the commune has no data. The aggregate score range is given but tier meaning is unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at 25 words but mixes French terms without translation, potentially hindering clarity. It front-loads key information but lacks clear structure (e.g., separate lines for different details). Not verbose but not optimally organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one required parameter, no output schema, and no annotations, the description is insufficient. It lacks details on output format (beyond score and tier), error handling, how to interpret the tier, and what happens if the permit number is invalid. Agents may not reliably know how to use the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter 'num_pa' (string) with 0% description coverage. The tool description does not explain what 'num_pa' represents (e.g., permit number or parcel identifier), leaving the agent to guess from sibling tools. No additional semantic context is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves natural and technological risks (inondation, seisme, argile, ICPE) for the municipality of a permit, including an aggregate score (0-100) and tier. It identifies the specific resource and action, distinguishing it from sibling tools like get_permit_details or get_mdb_score, which cover different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Plan Pro+ uniquement' (only for Pro+ plan) as a constraint, but lacks explicit guidance on when to use this tool versus alternatives. No instructions on prerequisites, when not to use, or comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_permitsB
Recherche des permis de construire de France avec filtres combinables : département, commune, type de permis, état, dates, surface min, SIREN demandeur. Retourne une page de permits avec leurs infos de base. Plan Free OK.
| Name | Required | Description | Default |
|---|---|---|---|
| dep_code | No | Code département INSEE 2 chars (ex 75 Paris, 33 Bordeaux). Requis pour Free/Explorer. | |
| comm_code | No | Code commune INSEE 5 chars (ex 75116 Paris 16e). | |
| permit_type | No | ||
| etat_pa | No | État permis : 1=Accordé, 2=Tacite, 3=Refusé, 4=Irrecevable, 5=Retrait, 6=Achevé. | |
| date_from | No | YYYY-MM-DD. | |
| date_to | No | YYYY-MM-DD. | |
| min_superficie | No | Surface terrain min en m². | |
| siren_dem | No | SIREN du demandeur (9 chiffres). | |
| sort | No | Tri du résultat. Champs autorisés : date_reelle_autorisation, date_depot, an_depot, superficie_terrain. Préfixe '-' pour descendant (ex '-superficie_terrain' pour les plus grandes surfaces en premier). Défaut '-date_reelle_autorisation'. | |
| min_score | No | Filtre les permis avec un Score Opportunité MDB >= N (0-100). Réservé aux plans Pro+. Permet de shortlister les top opportunités en 1 call. Coût quota = `limit` unités (pas 1). | |
| max_risk | No | Filtre les permis dont la commune est au-dessus du tier de risque spécifié (Géorisques BRGM). Exemple 'moderate' retourne uniquement low + moderate. Réservé aux plans Pro+. Coût quota = `limit` unités (pas 1). Use case marchand de biens : exclure d'office les zones inondables / Seveso / sismiques eleves. | |
| plu_zone_type | No | Filtre par prefix de zonage urbanisme PLU. U = urbain constructible, AU = a urbaniser, A = agricole non constructible, N = naturelle non constructible. Réservé aux plans Pro+. Coût quota = limit unites. | |
| plu_constructible | No | Filtre par verdict de constructibilite PLU. true = uniquement zones constructibles (U + AU). false = uniquement zones non constructibles (A + N). Réservé aux plans Pro+. Coût quota = limit unites. Combine avec min_score pour shortlister les vraies opportunités MDB. | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that certain filters have quota costs and are reserved for higher plans, which is good. However, it lacks details on pagination, error responses, or rate limits, and doesn't clarify that 'page' implies no offset parameter (only limit).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with purpose. The first sentence lists filters efficiently. Could be structured with bullet points for readability, but overall no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 complex parameters, no output schema, and no annotations, description covers plan tiers, cost implications, and return type ('page de permits'). Missing details: pagination mechanism, return field list, error handling, and rate limits. However, sibling tools like get_permit_details fill the gap for detailed views, making this adequate for a search endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86% (12 of 14 params have descriptions), so baseline is 3. The description adds minimal value beyond schema: it states 'filtres combinables' and 'infos de base', but doesn't elaborate on parameter usage or constraints beyond what's in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it searches for French building permits with combinable filters and returns basic info. The verb 'Recherche' and resource 'permis de construire' are specific. While it distinguishes from siblings like get_permit_details by its listing nature, it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for filtered searches but provides no explicit when-to-use or alternatives. It mentions plan restrictions (e.g., 'Free OK', 'réservé aux plans Pro+') which gives some context, but no guidance on when to choose this over sibling tools like bulk_enrich_list or find_dvf_neighbors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v0.5.0- First observed
bulk_enrich_list - First observed
find_dvf_neighbors - First observed
fuzzy_search_addresses - First observed
get_existing_buildings - First observed
get_mdb_score - First observed
get_parcelle_geometry - First observed
get_permit_details - First observed
get_permit_full_view - First observed
get_plu_zoning - First observed
get_risks - First observed
search_permits
TDQS
Each tool targets a distinct aspect of permit data: search, details, full view, geometry, buildings, DVF, zoning, risks, merchant score, bulk enrichment, and address lookup. No overlap in functionality.
Tools follow a consistent verb_noun pattern in snake_case, mostly using 'get_' or 'search_', with one 'find_' and one 'fuzzy_search_' as minor deviations. Overall predictable and descriptive.
11 tools is well-scoped for the domain of building permit analysis, covering search, details, and various enrichment analyses without being excessive.
The tool set provides comprehensive coverage for permit analysis: search, details, full view, parcel geometry, existing buildings, DVF, zoning, risks, merchant score, bulk enrichment, and address fuzzy search. No obvious gaps for a read-only API.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Données immobilières officielles françaises (DVF+, cadastre, DPE, risques, urbanisme) via MCP.
French public-data MCP: cross-ref health, demographics, business, geo & real-estate.
Built-environment forecasts, public benchmarks, and permit or zoning readiness through remote MCP.
French address intelligence: 18.6M sold prices, energy, risk, crime and schools — each sourced.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceProvides access to San Francisco public permitting, business, and property data through the Socrata SODA API. Users can search permit details, aggregate statistics, and look up property assessments using natural language.-
- AlicenseAqualityCmaintenanceOpen-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.1215MIT
- AlicenseAqualityAmaintenanceFrance Data MCP lets AI agents query, cross-reference and automatically enrich multiple French public registries through a unified MCP interface. France Data MCP provides a French territorial intelligence layer designed for multi-source reasoning and agentic orchestration.361203MIT
- AlicenseAqualityCmaintenanceA French administration MCP server that enables AI agents to access official public data including communes, geocoding, property risks, and energy performance certificates (DPE) for real estate evaluation.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Evan-Crx/permisapi-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server