# Connecteur MCP Kelki > Connecteur MCP https://kelki.fr/mcp : ses 4 outils, leurs schémas et l’installation dans ChatGPT, Claude, Le Chat, Cursor et VS Code. Page : [Connecteur MCP Kelki : outils, installation, exemples](https://kelki.fr/connecteur-mcp/) · Site : Kelki (kelki.fr), en français · Généré depuis les définitions du serveur (usine/mcp/serveur_mcp.py). MCP (Model Context Protocol) : protocole ouvert qui permet à un assistant IA d'utiliser les outils et les données d'un service extérieur ; l'assistant liste les outils du serveur puis les appelle en JSON-RPC 2.0. Le connecteur Kelki prépare avec la personne une demande de rappel par un ou plusieurs professionnels du métier dans sa ville, partout en France, avec les mêmes listes de choix que le formulaire « Rappelez-moi » de kelki.fr. La demande est transmise après le clic de la personne sur « Confirmer ma demande » dans l'e-mail reçu (lien valable 48 heures). Gratuit pour la personne. ## Accès - Adresse : https://kelki.fr/mcp - Transport : Streamable HTTP, POST /mcp, un message JSON-RPC 2.0 par requête, réponse application/json, sans état (GET et DELETE : 405 pour les clients MCP ; un navigateur qui ouvre l'adresse est redirigé vers cette page). - Authentification : accès libre (sans compte, sans clé, sans OAuth). - Versions du protocole : 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26. - Version 2026-07-28 : sans état ; _meta io.modelcontextprotocol/protocolVersion et io.modelcontextprotocol/clientCapabilities dans chaque requête ; en-têtes MCP-Protocol-Version, Mcp-Method, Mcp-Name ; server/discover ; elicitation par résultat input_required si le client déclare elicitation. - Versions 2025 : initialize (version demandée si prise en charge, sinon 2025-11-25), Mcp-Session-Id signé ; lots JSON-RPC en 2025-03-26. - Serveur : name kelki, title Kelki, version 1.0.0 ; capacités tools, resources, prompts, completions, extensions. - Limites : 240 requêtes/min par IP ; 60 demandes par IP sur 10 min ; 3 demandes par téléphone ou e-mail sur 24 h ; 300 demandes à confirmer par heure (tous clients) ; corps ≤ 64 Ko. - Métiers : 89 dans le connecteur ; métiers de santé proposés sur le site kelki.fr seulement : Ambulancier, Audioprothésiste, Diététicien, Infirmière, Masseur-kinésithérapeute, Naturopathe, Opticien à domicile, Ostéopathe, Pédicure-podologue, Psychologue, Sophrologue. - Origines web acceptées (CORS) : chat.mistral.ai, chat.openai.com, chatgpt.com, claude.ai, claude.com, console.mistral.ai, gemini.google.com, kelki.fr, www.kelki.fr ; appels de serveur à serveur sans Origin acceptés. Essai : ```bash curl -s https://kelki.fr/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -H 'MCP-Protocol-Version: 2025-11-25' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` ## Outils ### trouver_service — Trouver le bon métier Annotations : lecture seule : oui (readOnlyHint = true) ; destructif : non (destructiveHint = false) ; idempotent : oui (idempotentHint = true) ; monde ouvert : non (openWorldHint = false). Recherche, parmi les 89 métiers de Kelki, ceux qui correspondent à un besoin décrit avec des mots courants (« fuite sous l’évier », « coupe de cheveux à domicile », « nid de guêpes »). Renvoie pour chaque métier probable son identifiant, son nom, la liste fermée de ses prestations (celles du formulaire « Rappelez-moi » de kelki.fr, plus « Autre besoin ») et les prestations qui correspondent aux mots du besoin. Lecture seule. Paramètres : - `besoin` (chaîne, obligatoire) : Le besoin avec les mots de la personne, ex. « fuite sous l’évier », « plombier ». — 2 à 200 caractères Définition complète (tools/list) : ```json { "name": "trouver_service", "title": "Trouver le bon métier", "description": "Recherche, parmi les 89 métiers de Kelki, ceux qui correspondent à un besoin décrit avec des mots courants (« fuite sous l’évier », « coupe de cheveux à domicile », « nid de guêpes »). Renvoie pour chaque métier probable son identifiant, son nom, la liste fermée de ses prestations (celles du formulaire « Rappelez-moi » de kelki.fr, plus « Autre besoin ») et les prestations qui correspondent aux mots du besoin. Lecture seule.", "inputSchema": { "type": "object", "additionalProperties": false, "required": [ "besoin" ], "properties": { "besoin": { "type": "string", "minLength": 2, "maxLength": 200, "description": "Le besoin avec les mots de la personne, ex. « fuite sous l’évier », « plombier »." } } }, "outputSchema": { "type": "object", "required": [ "ok" ], "properties": { "ok": { "type": "boolean" }, "besoin": { "type": "string" }, "metiers": { "type": "array", "items": { "type": "object", "properties": { "metier": { "type": "string", "description": "identifiant du métier (paramètre metier des autres outils)" }, "nom": { "type": "string" }, "activite": { "type": "string" }, "famille": { "type": "string" }, "prestations": { "type": "array", "items": { "type": "string" } }, "prestations_correspondantes": { "type": "array", "items": { "type": "string" } }, "page": { "type": "string", "format": "uri" } }, "required": [ "metier", "nom", "prestations" ] } }, "erreur": { "type": "string", "description": "explication de l'erreur, à corriger avant un nouvel appel" }, "champ": { "type": "string", "description": "paramètre en cause" }, "choix": { "type": "array", "items": { "type": "string" }, "description": "valeurs acceptées pour ce paramètre" } } }, "annotations": { "title": "Trouver le bon métier", "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false } } ``` Exemple d'appel : ```json { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "trouver_service", "arguments": { "besoin": "fuite sous l’évier" } } } ``` Réponse : ```json { "jsonrpc": "2.0", "id": 2, "result": { "content": [ { "type": "text", "text": "Métiers correspondant à « fuite sous l’évier » (le plus probable d'abord) :\n1. Plombier (metier = plombier) — correspond à : Recherche et réparation de fuites\n Prestations : Recherche et réparation de fuites ; Débouchage de canalisations ; Installation et remplacement de robinetterie ; Installation et réparation de chauffe-eau ; Entretien et réparation de chaudière ; Rénovation de salle de bain ; Intervention après dégât des eaux ; Installation et raccordement électroménager ; Autre besoin\n…" }, { "type": "text", "text": "{\"ok\": true, \"besoin\": \"fuite sous l’évier\", \"metiers\": [{\"metier\": \"plombier\", \"nom\": \"Plombier\", \"activite\": \"plomberie\", \"famille\": \"Réparations et urgences\", \"prestations\": [\"Recherche et réparation de fuites\", \"Débouchage de canalisations\", \"Installation et remplacement de robinetterie\", \"Installation et réparation de chauffe-eau\", \"Entretien et réparation de chaudière\", \"Rénovation de salle de bain\", \"Intervention après dégât des eaux\", \"Installation et raccordement électroménager\", \"Autre besoin\"], \"prestations_correspondantes\": [\"Recherche et réparation de fuites\"], \"page\": \"https://kelki.fr/plombier/\"}]}" } ], "structuredContent": { "ok": true, "besoin": "fuite sous l’évier", "metiers": [ { "metier": "plombier", "nom": "Plombier", "activite": "plomberie", "famille": "Réparations et urgences", "prestations": [ "Recherche et réparation de fuites", "Débouchage de canalisations", "Installation et remplacement de robinetterie", "Installation et réparation de chauffe-eau", "Entretien et réparation de chaudière", "Rénovation de salle de bain", "Intervention après dégât des eaux", "Installation et raccordement électroménager", "Autre besoin" ], "prestations_correspondantes": [ "Recherche et réparation de fuites" ], "page": "https://kelki.fr/plombier/" } ] }, "isError": false } } ``` ### lister_prestations — Prestations et délais d'un métier Annotations : lecture seule : oui (readOnlyHint = true) ; destructif : non (destructiveHint = false) ; idempotent : oui (idempotentHint = true) ; monde ouvert : non (openWorldHint = false). Renvoie les listes fermées du formulaire « Rappelez-moi » de kelki.fr pour un métier : ses prestations (plus « Autre besoin », à décrire en quelques mots), les délais possibles (libellé et précision, adaptés au métier) et le texte d'accord exact que la personne accepte pour envoyer sa demande. Lecture seule. Paramètres : - `metier` (chaîne, obligatoire) : Identifiant du métier, ex. plombier (voir trouver_service). — liste fermée de 89 identifiants (liste complète dans inputSchema ci-dessous) Définition complète (tools/list) : ```json { "name": "lister_prestations", "title": "Prestations et délais d'un métier", "description": "Renvoie les listes fermées du formulaire « Rappelez-moi » de kelki.fr pour un métier : ses prestations (plus « Autre besoin », à décrire en quelques mots), les délais possibles (libellé et précision, adaptés au métier) et le texte d'accord exact que la personne accepte pour envoyer sa demande. Lecture seule.", "inputSchema": { "type": "object", "additionalProperties": false, "required": [ "metier" ], "properties": { "metier": { "type": "string", "enum": [ "chauffagiste", "depannage-informatique", "deratisation", "electricien", "assainissement", "entreprise-climatisation", "debarras", "desinsectisation", "pompe-a-chaleur", "plombier", "ramoneur", "depannage-electromenager", "reparation-smartphone", "volets-roulants", "serrurier", "vitrier", "femme-de-menage", "carreleur", "charpentier", "cordonnier", "couvreur", "cuisiniste", "decorateur-interieur", "ebeniste", "elagueur", "entreprise-nettoyage", "entreprise-de-renovation", "etancheur", "facadier", "panneaux-solaires", "poele-a-bois", "salle-de-bain", "jardinier", "laveur-de-vitres", "maconnerie", "menuisier", "paysagiste", "peintre-en-batiment", "pisciniste", "plaquiste", "isolation", "terrassier", "aide-a-domicile", "barbier", "coach-sportif", "coiffeur", "educateur-canin", "estheticienne", "garde-enfants", "manucure", "pet-sitter", "tatoueur", "extension-cils", "toiletteur", "veterinaire", "auto-ecole", "carrossier", "controle-technique", "chauffeur-vtc", "demenageur", "depannage-remorquage", "epaviste", "garage-moto", "garagiste", "lavage-auto", "location-benne", "location-voiture", "taxi", "agent-immobilier", "architecte", "avocat", "comparateur-assurance", "courtier-energie", "courtier-immobilier", "diagnostic-immobilier", "pompes-funebres", "expert-comptable", "formation-premiers-secours", "geometre", "syndic", "fleuriste", "food-truck", "livraison-de-fleurs", "location-salle", "maquilleuse", "patissier", "photographe", "traiteur", "wedding-planner" ], "description": "Identifiant du métier, ex. plombier (voir trouver_service)." } } }, "outputSchema": { "type": "object", "required": [ "ok" ], "properties": { "ok": { "type": "boolean" }, "metier": { "type": "string" }, "nom": { "type": "string" }, "activite": { "type": "string" }, "famille": { "type": "string" }, "prestations": { "type": "array", "items": { "type": "string" } }, "delais": { "type": "array", "items": { "type": "object", "properties": { "libelle": { "type": "string" }, "precision": { "type": "string" } }, "required": [ "libelle" ] } }, "texte_accord": { "type": "string" }, "page": { "type": "string", "format": "uri" }, "erreur": { "type": "string", "description": "explication de l'erreur, à corriger avant un nouvel appel" }, "champ": { "type": "string", "description": "paramètre en cause" }, "choix": { "type": "array", "items": { "type": "string" }, "description": "valeurs acceptées pour ce paramètre" } } }, "annotations": { "title": "Prestations et délais d'un métier", "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false } } ``` Exemple d'appel : ```json { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "lister_prestations", "arguments": { "metier": "plombier" } } } ``` Réponse : ```json { "jsonrpc": "2.0", "id": 3, "result": { "content": [ { "type": "text", "text": "Plombier — prestations (une au choix) :\n- Recherche et réparation de fuites\n- Débouchage de canalisations\n…" }, { "type": "text", "text": "{\"ok\": true, \"texte_accord\": \"J'accepte que ma demande et mes coordonnées soient transmises à un ou plusieurs professionnels du métier de mon secteur, qui pourront me rappeler à ce sujet.\", \"metier\": \"plombier\", \"nom\": \"Plombier\", \"activite\": \"plomberie\", \"famille\": \"Réparations et urgences\", \"prestations\": [\"Recherche et réparation de fuites\", \"Débouchage de canalisations\", \"Installation et remplacement de robinetterie\", \"Installation et réparation de chauffe-eau\", \"Entretien et réparation de chaudière\", \"Rénovation de salle de bain\", \"Intervention après dégât des eaux\", \"Installation et raccordement électroménager\", \"Autre besoin\"], \"delais\": [{\"libelle\": \"C’est urgent\", \"precision\": \"Dès que possible\"}, {\"libelle\": \"Cette semaine\", \"precision\": \"Dans les prochains jours\"}, {\"libelle\": \"Ce mois-ci\", \"precision\": \"Sans urgence\"}, {\"libelle\": \"Je me renseigne\", \"precision\": \"Pour un projet à venir\"}], \"page\": \"https://kelki.fr/plombier/\"}" } ], "structuredContent": { "ok": true, "texte_accord": "J'accepte que ma demande et mes coordonnées soient transmises à un ou plusieurs professionnels du métier de mon secteur, qui pourront me rappeler à ce sujet.", "metier": "plombier", "nom": "Plombier", "activite": "plomberie", "famille": "Réparations et urgences", "prestations": [ "Recherche et réparation de fuites", "Débouchage de canalisations", "Installation et remplacement de robinetterie", "Installation et réparation de chauffe-eau", "Entretien et réparation de chaudière", "Rénovation de salle de bain", "Intervention après dégât des eaux", "Installation et raccordement électroménager", "Autre besoin" ], "delais": [ { "libelle": "C’est urgent", "precision": "Dès que possible" }, { "libelle": "Cette semaine", "precision": "Dans les prochains jours" }, { "libelle": "Ce mois-ci", "precision": "Sans urgence" }, { "libelle": "Je me renseigne", "precision": "Pour un projet à venir" } ], "page": "https://kelki.fr/plombier/" }, "isError": false } } ``` ### verifier_lieu — Vérifier une ville Annotations : lecture seule : oui (readOnlyHint = true) ; destructif : non (destructiveHint = false) ; idempotent : oui (idempotentHint = true) ; monde ouvert : non (openWorldHint = false). Vérifie une ville ou un code postal en France (« Créteil », « 94000 », « Paris 15 ») et renvoie les villes existantes qui correspondent : nom, code postal, département, les plus peuplées d'abord (10 au plus). Une même ville peut avoir plusieurs codes postaux, ex. Saint-Maur-des-Fossés (94100, 94210). Il s'agit du lieu où le service est demandé. Lecture seule. Paramètres : - `ville_ou_code_postal` (chaîne, obligatoire) : Ville, code postal ou les deux, ex. « Créteil 94000 ». — 2 à 80 caractères Définition complète (tools/list) : ```json { "name": "verifier_lieu", "title": "Vérifier une ville", "description": "Vérifie une ville ou un code postal en France (« Créteil », « 94000 », « Paris 15 ») et renvoie les villes existantes qui correspondent : nom, code postal, département, les plus peuplées d'abord (10 au plus). Une même ville peut avoir plusieurs codes postaux, ex. Saint-Maur-des-Fossés (94100, 94210). Il s'agit du lieu où le service est demandé. Lecture seule.", "inputSchema": { "type": "object", "additionalProperties": false, "required": [ "ville_ou_code_postal" ], "properties": { "ville_ou_code_postal": { "type": "string", "minLength": 2, "maxLength": 80, "description": "Ville, code postal ou les deux, ex. « Créteil 94000 »." } } }, "outputSchema": { "type": "object", "required": [ "ok" ], "properties": { "ok": { "type": "boolean" }, "recherche": { "type": "string" }, "villes": { "type": "array", "items": { "type": "object", "properties": { "ville": { "type": "string" }, "code_postal": { "type": "string" }, "libelle": { "type": "string" }, "departement": { "type": "string" }, "departement_code": { "type": "string" } }, "required": [ "ville", "code_postal" ] } }, "erreur": { "type": "string", "description": "explication de l'erreur, à corriger avant un nouvel appel" }, "champ": { "type": "string", "description": "paramètre en cause" }, "choix": { "type": "array", "items": { "type": "string" }, "description": "valeurs acceptées pour ce paramètre" } } }, "annotations": { "title": "Vérifier une ville", "readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false } } ``` Exemple d'appel : ```json { "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "verifier_lieu", "arguments": { "ville_ou_code_postal": "Créteil" } } } ``` Réponse : ```json { "jsonrpc": "2.0", "id": 4, "result": { "content": [ { "type": "text", "text": "1 ville(s) pour « Créteil » :\n- Créteil (94000), Val-de-Marne (94) : ville = Créteil, code_postal = 94000" }, { "type": "text", "text": "{\"ok\": true, \"recherche\": \"Créteil\", \"villes\": [{\"ville\": \"Créteil\", \"code_postal\": \"94000\", \"libelle\": \"Créteil (94000)\", \"departement\": \"Val-de-Marne\", \"departement_code\": \"94\"}]}" } ], "structuredContent": { "ok": true, "recherche": "Créteil", "villes": [ { "ville": "Créteil", "code_postal": "94000", "libelle": "Créteil (94000)", "departement": "Val-de-Marne", "departement_code": "94" } ] }, "isError": false } } ``` ### demander_rappel — Envoyer une demande de rappel Annotations : lecture seule : non (readOnlyHint = false) ; destructif : non (destructiveHint = false) ; idempotent : non (idempotentHint = false) ; monde ouvert : oui (openWorldHint = true). Crée une demande de rappel sur Kelki et envoie à la personne un e-mail de confirmation. La demande est transmise à un ou plusieurs professionnels du métier de son secteur après son clic sur « Confirmer ma demande » dans cet e-mail (lien valable 48 h ; sans clic, la demande et ses coordonnées sont effacées). metier, prestation et delai prennent les valeurs des listes de lister_prestations ; ville et code_postal, celles de verifier_lieu ; nom, telephone et email sont ceux donnés par la personne. accord vaut true quand la personne a accepté, après un récapitulatif de sa demande, ce texte : « J'accepte que ma demande et mes coordonnées soient transmises à un ou plusieurs professionnels du métier de mon secteur, qui pourront me rappeler à ce sujet. » Paramètres : - `metier` (chaîne, obligatoire) : Identifiant du métier choisi, ex. plombier. — liste fermée de 89 identifiants (liste complète dans inputSchema ci-dessous) - `prestation` (chaîne, obligatoire) : Une prestation de la liste de lister_prestations pour ce métier, ou « Autre besoin ». — 120 caractères au plus - `besoin_libre` (chaîne, facultatif) : Le besoin en quelques mots, obligatoire avec « Autre besoin ». — 160 caractères au plus - `delai` (chaîne, obligatoire) : Un délai de la liste de lister_prestations pour ce métier. — liste fermée : « Dès que possible » ; « Cette semaine » ; « Dans les semaines à venir » ; « Je me renseigne » ; « Pour une date précise » ; « Dans les mois à venir » ; « C’est urgent » ; « Ce mois-ci » - `ville` (chaîne, obligatoire) : Ville renvoyée par verifier_lieu. — 120 caractères au plus - `code_postal` (chaîne, obligatoire) : Code postal renvoyé par verifier_lieu (5 chiffres). — motif ^[0-9]{5}$ - `nom` (chaîne, obligatoire) : Nom de la personne à rappeler. — 2 à 80 caractères - `telephone` (chaîne, obligatoire) : Téléphone français de la personne, ex. 06 12 34 56 78. — 30 caractères au plus - `email` (chaîne, obligatoire) : E-mail de la personne : il reçoit le lien de confirmation. — format email · 254 caractères au plus - `message` (chaîne, facultatif) : Commentaire libre de la personne (disponibilités, détails), facultatif. — 2000 caractères au plus - `accord` (booléen, obligatoire) : true : la personne a accepté le texte d'accord de lister_prestations. Définition complète (tools/list) : ```json { "name": "demander_rappel", "title": "Envoyer une demande de rappel", "description": "Crée une demande de rappel sur Kelki et envoie à la personne un e-mail de confirmation. La demande est transmise à un ou plusieurs professionnels du métier de son secteur après son clic sur « Confirmer ma demande » dans cet e-mail (lien valable 48 h ; sans clic, la demande et ses coordonnées sont effacées). metier, prestation et delai prennent les valeurs des listes de lister_prestations ; ville et code_postal, celles de verifier_lieu ; nom, telephone et email sont ceux donnés par la personne. accord vaut true quand la personne a accepté, après un récapitulatif de sa demande, ce texte : « J'accepte que ma demande et mes coordonnées soient transmises à un ou plusieurs professionnels du métier de mon secteur, qui pourront me rappeler à ce sujet. »", "inputSchema": { "type": "object", "additionalProperties": false, "required": [ "metier", "prestation", "delai", "ville", "code_postal", "nom", "telephone", "email", "accord" ], "properties": { "metier": { "type": "string", "enum": [ "chauffagiste", "depannage-informatique", "deratisation", "electricien", "assainissement", "entreprise-climatisation", "debarras", "desinsectisation", "pompe-a-chaleur", "plombier", "ramoneur", "depannage-electromenager", "reparation-smartphone", "volets-roulants", "serrurier", "vitrier", "femme-de-menage", "carreleur", "charpentier", "cordonnier", "couvreur", "cuisiniste", "decorateur-interieur", "ebeniste", "elagueur", "entreprise-nettoyage", "entreprise-de-renovation", "etancheur", "facadier", "panneaux-solaires", "poele-a-bois", "salle-de-bain", "jardinier", "laveur-de-vitres", "maconnerie", "menuisier", "paysagiste", "peintre-en-batiment", "pisciniste", "plaquiste", "isolation", "terrassier", "aide-a-domicile", "barbier", "coach-sportif", "coiffeur", "educateur-canin", "estheticienne", "garde-enfants", "manucure", "pet-sitter", "tatoueur", "extension-cils", "toiletteur", "veterinaire", "auto-ecole", "carrossier", "controle-technique", "chauffeur-vtc", "demenageur", "depannage-remorquage", "epaviste", "garage-moto", "garagiste", "lavage-auto", "location-benne", "location-voiture", "taxi", "agent-immobilier", "architecte", "avocat", "comparateur-assurance", "courtier-energie", "courtier-immobilier", "diagnostic-immobilier", "pompes-funebres", "expert-comptable", "formation-premiers-secours", "geometre", "syndic", "fleuriste", "food-truck", "livraison-de-fleurs", "location-salle", "maquilleuse", "patissier", "photographe", "traiteur", "wedding-planner" ], "description": "Identifiant du métier choisi, ex. plombier." }, "prestation": { "type": "string", "maxLength": 120, "description": "Une prestation de la liste de lister_prestations pour ce métier, ou « Autre besoin »." }, "besoin_libre": { "type": "string", "maxLength": 160, "description": "Le besoin en quelques mots, obligatoire avec « Autre besoin »." }, "delai": { "type": "string", "enum": [ "Dès que possible", "Cette semaine", "Dans les semaines à venir", "Je me renseigne", "Pour une date précise", "Dans les mois à venir", "C’est urgent", "Ce mois-ci" ], "description": "Un délai de la liste de lister_prestations pour ce métier." }, "ville": { "type": "string", "maxLength": 120, "description": "Ville renvoyée par verifier_lieu." }, "code_postal": { "type": "string", "pattern": "^[0-9]{5}$", "description": "Code postal renvoyé par verifier_lieu (5 chiffres)." }, "nom": { "type": "string", "minLength": 2, "maxLength": 80, "description": "Nom de la personne à rappeler." }, "telephone": { "type": "string", "maxLength": 30, "description": "Téléphone français de la personne, ex. 06 12 34 56 78." }, "email": { "type": "string", "format": "email", "maxLength": 254, "description": "E-mail de la personne : il reçoit le lien de confirmation." }, "message": { "type": "string", "maxLength": 2000, "description": "Commentaire libre de la personne (disponibilités, détails), facultatif." }, "accord": { "type": "boolean", "description": "true : la personne a accepté le texte d'accord de lister_prestations." } } }, "outputSchema": { "type": "object", "required": [ "ok" ], "properties": { "ok": { "type": "boolean" }, "statut": { "type": "string", "enum": [ "a_confirmer" ], "description": "a_confirmer : e-mail envoyé, clic attendu" }, "email_masque": { "type": "string" }, "expire_le": { "type": "string", "format": "date-time" }, "message": { "type": "string" }, "demande": { "type": "object", "properties": { "metier": { "type": "string" }, "prestation": { "type": "string" }, "delai": { "type": "string" }, "lieu": { "type": "string" } } }, "erreur": { "type": "string", "description": "explication de l'erreur, à corriger avant un nouvel appel" }, "champ": { "type": "string", "description": "paramètre en cause" }, "choix": { "type": "array", "items": { "type": "string" }, "description": "valeurs acceptées pour ce paramètre" } } }, "annotations": { "title": "Envoyer une demande de rappel", "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": true } } ``` Exemple d'appel (données fictives) : ```json { "jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": { "name": "demander_rappel", "arguments": { "metier": "plombier", "prestation": "Recherche et réparation de fuites", "delai": "C’est urgent", "ville": "Créteil", "code_postal": "94000", "nom": "Camille Exemple", "telephone": "06 00 00 00 00", "email": "camille@exemple.fr", "message": "Joignable après 18 h", "accord": true } } } ``` Réponse : ```json { "jsonrpc": "2.0", "id": 5, "result": { "content": [ { "type": "text", "text": "Demande enregistrée. Dernière étape : un e-mail vient d'être envoyé à c•••@exemple.fr. La personne clique sur « Confirmer ma demande » dans les 48 heures pour la transmettre à un ou plusieurs professionnels du métier de son secteur, qui la rappelleront. Sans ce clic, la demande s'efface." }, { "type": "text", "text": "{\"ok\": true, \"statut\": \"a_confirmer\", \"email_masque\": \"c•••@exemple.fr\", \"expire_le\": \"2026-11-02T09:30:00Z\", \"message\": \"Demande enregistrée. Dernière étape : un e-mail vient d'être envoyé à c•••@exemple.fr. La personne clique sur « Confirmer ma demande » dans les 48 heures pour la transmettre à un ou plusieurs professionnels du métier de son secteur, qui la rappelleront. Sans ce clic, la demande s'efface.\", \"demande\": {\"metier\": \"Plombier\", \"prestation\": \"Recherche et réparation de fuites\", \"delai\": \"C’est urgent\", \"lieu\": \"Créteil (94000)\"}}" } ], "structuredContent": { "ok": true, "statut": "a_confirmer", "email_masque": "c•••@exemple.fr", "expire_le": "2026-11-02T09:30:00Z", "message": "Demande enregistrée. Dernière étape : un e-mail vient d'être envoyé à c•••@exemple.fr. La personne clique sur « Confirmer ma demande » dans les 48 heures pour la transmettre à un ou plusieurs professionnels du métier de son secteur, qui la rappelleront. Sans ce clic, la demande s'efface.", "demande": { "metier": "Plombier", "prestation": "Recherche et réparation de fuites", "delai": "C’est urgent", "lieu": "Créteil (94000)" } }, "isError": false } } ``` Erreur (valeur hors liste) : résultat isError = true avec le paramètre en cause : ```json { "jsonrpc": "2.0", "id": 9, "result": { "content": [ { "type": "text", "text": "Métier inconnu : « plombie ». Utilisez un identifiant renvoyé par trouver_service." } ], "structuredContent": { "ok": false, "erreur": "Métier inconnu : « plombie ». Utilisez un identifiant renvoyé par trouver_service.", "champ": "metier" }, "isError": true } } ``` Texte d'accord accepté par la personne avant demander_rappel : « J'accepte que ma demande et mes coordonnées soient transmises à un ou plusieurs professionnels du métier de mon secteur, qui pourront me rappeler à ce sujet. » ## Ressources, gabarits, prompt, complétions - `ui://kelki/demande-v1.html` — Formulaire de demande Kelki (text/html;profile=mcp-app) : Parcours à choix : prestation, délai, ville, coordonnées, accord. - `kelki://metiers` — Les métiers de Kelki (application/json) : Identifiant, nom, activité et famille de chaque métier. - `kelki://accord` — Texte d'accord et confirmation par e-mail (text/plain) : Texte accepté par la personne et déroulé de la confirmation. - gabarit `kelki://metier/{metier}` — Prestations et délais d'un métier (text/markdown) : Prestations, délais et questions fréquentes publiées pour un métier. (89 métiers ; identifiants : ressource kelki://metiers) - prompt `trouver_un_professionnel` — Être rappelé par un professionnel près de chez moi : Préparer une demande de rappel Kelki : métier, prestation, délai, ville, puis confirmation. Arguments : besoin (obligatoire, Ce dont vous avez besoin, ex. « fuite sous l’évier ») ; ville (facultatif, Ville ou code postal du lieu) - completion/complete : villes (argument ville du prompt), noms des métiers (besoin), identifiants (metier). - Interface à choix (MCP Apps) : extension io.modelcontextprotocol/ui, ressource ui://kelki/demande-v1.html (text/html;profile=mcp-app), rattachée à trouver_service et lister_prestations (_meta.ui.resourceUri) ; le composant appelle verifier_lieu et demander_rappel par l'hôte, sans requête réseau directe. Consignes envoyées à l'assistant (instructions) : ```text Kelki (kelki.fr) transmet une demande de rappel à un ou plusieurs professionnels du métier choisi, dans la ville de la personne : dépannage, travaux, beauté, conseil, auto, événementiel…, partout en France. Kelki ne publie ni classement ni avis de professionnels : la demande part vers les professionnels du secteur, qui rappellent la personne. Déroulé d'une demande, avec les mêmes listes de choix que le formulaire « Rappelez-moi » du site : 1. trouver_service : métiers correspondant au besoin décrit ; la personne choisit le sien. 2. lister_prestations : prestations du métier (plus « Autre besoin », à décrire en quelques mots), délais possibles et texte d'accord. La personne choisit une prestation et un délai dans ces listes ; elle peut ajouter un commentaire libre. 3. verifier_lieu : villes et codes postaux existants ; si plusieurs correspondent, la personne choisit. 4. Nom, téléphone (numéro français) et e-mail sont ceux que la personne donne elle-même. 5. Avant demander_rappel : récapitulatif de la demande et texte d'accord exact présentés à la personne ; accord = true après son oui explicite. 6. demander_rappel enregistre la demande et envoie un e-mail à la personne : la demande est transmise aux professionnels après son clic sur « Confirmer ma demande » (lien valable 48 h ; sans clic, elle est effacée). Le service est gratuit pour la personne. Données et fonctionnement : https://kelki.fr/assistant-ia/ ``` ## Installer - Claude (claude.ai, Desktop, mobile) : Personnaliser › Connecteurs › « + Ajouter » › « Ajouter un connecteur personnalisé » ; nom Kelki, URL https://kelki.fr/mcp, « sans connexion » ; puis « + » › Connecteurs › Kelki dans la conversation. Team / Enterprise : ajouté par le propriétaire (Paramètres de l'organisation › Connecteurs). - ChatGPT (web) : chatgpt.com/plugins › « + » › « Add custom MCP server » ; nom Kelki, Server URL https://kelki.fr/mcp, « No authentication » ; « Create as a plugin », puis installer le plugin. - Le Chat (Mistral) : Intelligence › Connecteurs › « + Ajouter un connecteur » › « Connecteur MCP personnalisé » ; nom kelki, URL https://kelki.fr/mcp ; « Connecter ». Claude Code : ```bash claude mcp add --transport http kelki https://kelki.fr/mcp ``` .mcp.json (Claude Code, projet) : ```json { "mcpServers": { "kelki": { "type": "http", "url": "https://kelki.fr/mcp" } } } ``` Cursor (~/.cursor/mcp.json ou .cursor/mcp.json) : ```json { "mcpServers": { "kelki": { "url": "https://kelki.fr/mcp" } } } ``` VS Code (.vscode/mcp.json, ou commande « MCP: Add Server » › HTTP) : ```json { "servers": { "kelki": { "type": "http", "url": "https://kelki.fr/mcp" } } } ``` ## Liens - [Kelki dans votre assistant IA](https://kelki.fr/assistant-ia/): présentation pour tous - [Agent Kelki](https://kelki.fr/agent-kelki/): conversation sur kelki.fr et agent A2A - [Carte du serveur MCP](https://kelki.fr/mcp/server-card): JSON (SEP-2127) - [Manifeste ARD](https://kelki.fr/.well-known/ard.json): découverte - [Carte de l'Agent Kelki (A2A)](https://kelki.fr/.well-known/agent-card.json): JSON - [Vos données avec le connecteur](https://kelki.fr/politique-de-confidentialite/#assistant-ia) - [Conditions d'utilisation](https://kelki.fr/conditions-d-utilisation/) - [Rappelez-moi](https://kelki.fr/contact/): le formulaire du site - Contact : contact@kelki.fr ## Optional - [Kelki : présentation du site pour les assistants IA](https://kelki.fr/llms.txt) - [Mentions légales](https://kelki.fr/mentions-legales/)