Kranli
New Swiss building permit applications by municipality and trade (last 90 days, official sources).
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"permis-construire": {
"url": "https://kranli.ch/mcp"
}
}
}Remote endpoints
https://kranli.ch/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢chercher_demandes(commune, canton, metier, jours, rayon_km, ...)
Search new building permit applications published in Switzerland (Kranli, official publications of the last 90 days) by municipality or canton, trade and period, newest first. Each application comes with its date, municipality, official description, status, trades, link to the official publication, source and mandatory notice ("formule"). / Cherche les nouvelles demandes de permis de construire publiées en Suisse (publications officielles des 90 derniers jours), par commune ou canton, métier et période, les plus récentes d’abord, avec le lien officiel, la source et la formule de chaque demande.
Input Schema
{
"type": "object",
"properties": {
"commune": {
"type": "string",
"maxLength": 80,
"description": "Municipality: name, postcode or identifier, e.g. \"Sion\", \"1950\", \"buchs-ag\". / Commune : nom, numéro postal ou identifiant."
},
"canton": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter canton code, e.g. \"VS\". / Sigle du canton, par exemple « VS »."
},
"metier": {
"type": "string",
"maxLength": 80,
"description": "Trade: identifier from the metiers tool or a few words, e.g. \"heat pump\", \"pompe à chaleur\", \"Wärmepumpe\", \"solaire\". / Métier : identifiant ou quelques mots."
},
"jours": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30,
"description": "How many days back (at most 90). / Nombre de jours en arrière (90 au plus)."
},
"rayon_km": {
"type": "integer",
"minimum": 0,
"maximum": 50,
"default": 0,
"description": "With a municipality: also the municipalities within this many km. / Avec une commune : aussi les communes à moins de N km."
},
"limite": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10,
"description": "Number of applications returned. / Nombre de demandes rendues."
},
"langue": {
"type": "string",
"enum": [
"fr",
"de",
"it",
"en"
],
"default": "fr",
"description": "Language of labels and of the answer (fr, de, it, en). / Langue des libellés et de la réponse."
}
},
"additionalProperties": false
}🟢trouver_commune(nom, canton, langue)
Find a Swiss municipality by name or postcode; returns its identifier, canton and number of applications in the last 7, 30 and 90 days. / Trouve une commune suisse par son nom ou son numéro postal : identifiant, canton et nombre de demandes récentes.
Input Schema
{
"type": "object",
"properties": {
"nom": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "Name or postcode, e.g. \"Sion\", \"Buchs AG\", \"8001\". / Nom ou numéro postal."
},
"canton": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter canton code, e.g. \"VS\". / Sigle du canton, par exemple « VS »."
},
"langue": {
"type": "string",
"enum": [
"fr",
"de",
"it",
"en"
],
"default": "fr",
"description": "Language of labels and of the answer (fr, de, it, en). / Langue des libellés et de la réponse."
}
},
"required": [
"nom"
],
"additionalProperties": false
}🟢communes_proches(commune, rayon_km, canton, langue)
List the municipalities within a radius of a municipality (distance between official centres, rounded to the km), with their recent applications. / Les communes autour d’une commune (distance entre centres officiels, arrondie au kilomètre), avec leurs demandes récentes.
Input Schema
{
"type": "object",
"properties": {
"commune": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "Municipality: name, postcode or identifier. / Commune : nom, numéro postal ou identifiant."
},
"rayon_km": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10,
"description": "Radius in km. / Rayon en kilomètres."
},
"canton": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter canton code, e.g. \"VS\". / Sigle du canton, par exemple « VS »."
},
"langue": {
"type": "string",
"enum": [
"fr",
"de",
"it",
"en"
],
"default": "fr",
"description": "Language of labels and of the answer (fr, de, it, en). / Langue des libellés et de la réponse."
}
},
"required": [
"commune"
],
"additionalProperties": false
}🟢metiers(langue)
List the ten trade families used by Kranli (heating and heat pumps, solar, windows, roofing, facades, interior, outdoor and pools, new build, civil engineering, electrical) with their identifiers and recent counts. / Les dix familles de métiers de Kranli, avec leurs identifiants et leurs demandes récentes.
Input Schema
{
"type": "object",
"properties": {
"langue": {
"type": "string",
"enum": [
"fr",
"de",
"it",
"en"
],
"default": "fr",
"description": "Language of labels and of the answer (fr, de, it, en). / Langue des libellés et de la réponse."
}
},
"additionalProperties": false
}🟢resume_semaine(canton, langue)
Number of building permit applications of the last 7 days, by canton and by trade. / Le nombre de demandes de permis de construire des 7 derniers jours, par canton et par métier.
Input Schema
{
"type": "object",
"properties": {
"canton": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter canton code, e.g. \"VS\". / Sigle du canton, par exemple « VS »."
},
"langue": {
"type": "string",
"enum": [
"fr",
"de",
"it",
"en"
],
"default": "fr",
"description": "Language of labels and of the answer (fr, de, it, en). / Langue des libellés et de la réponse."
}
},
"additionalProperties": false
}Community
Evidence