# prospection_profils_cibles

Lire ou définir les profils de cibles propres à votre espace : libellés et indices de reconnaissance. N'écrit aucun message.

| | |
|---|---|
| Effets | lecture et écriture dans l'espace du compte |
| Portée OAuth | `mcp:write` |
| Offre requise | aucune — ouvert à tous les comptes |
| Données lues | l'espace du compte authentifié (ses alertes, ses dossiers, sa base) |
| Distribution | MCP historique |

Cet outil n'a pas d'équivalent REST : il s'appelle par le connecteur MCP.

## Paramètres

| Paramètre | Type | Requis | Bornes | Description |
|---|---|---|---|---|
| `accroche` | texte | — | max. caractères 4000 | modifier : le texte de cette variante. |
| `accroche_active` | booléen | — | — | modifier : allumer ou eteindre cette variante. Au moins une doit rester vivante. |
| `accroche_id` | texte | — | max. caractères 32 | modifier : la variante d'accroche a ecrire (exemple a3). Un identifiant inconnu CREE la variante si accroche est fourni. |
| `action` | `lister` · `modifier` | — | défaut `"lister"` | — |
| `action_immediate` | texte | — | max. caractères 200 | Ce qu'on demande au lecteur de faire, en une phrase. Remplit [action]. |
| `bloc` | `salutation` · `presentation` · `personnalisation` · `preuve_recherche` · `gratuit` · `proposition` · `prochainement` · `cloture` | — | — | modifier : le bloc a reecrire. L'accroche ne se modifie pas par ici : passer accroche_id + accroche. |
| `blocs` | objet | — | — | ajouter : les blocs du modele, en un objet. accroche est un tableau de {id, texte, actif} ; les autres sont des chaines. |
| `canal` | `mp` · `relance` · `mail` | — | — | mp = message prive LinkedIn (premier contact), relance = la touche suivante sur le meme fil, mail = un courriel individuel. Les campagnes de masse ont leur propre module. |
| `id` | texte | — | — | UUID du modele. Requis pour lire, modifier, dupliquer, desactiver, activer. |
| `inclure_inactifs` | booléen | — | — | lister : inclure les modeles desactives (defaut false). |
| `lien` | texte | — | max. caractères 300 | Le lien que CE modele montre, pour le champ [lien] : une page a vous, qui s'ouvre pour quelqu'un qui n'a pas de compte. Vide : l'adresse declaree dans vos reglages sert de repli. Distinct de [lien_recherche], qui pointe la recherche du jour dans le produit. |
| `limit` | entier | — | min 1, max 200 | lister : nombre maximum (defaut 50). |
| `modules` | liste de texte | — | — | Ce que VOTRE organisation met en avant pour ce profil, en texte libre (exemple : Pose de toiture, Bardage bois, Zinguerie). Six entrees au plus, 80 caracteres chacune. Remplit le champ [outils], enumere dans cet ordre. |
| `nom` | texte | — | max. caractères 120 | Nom du modele (unique dans l'espace). Pour dupliquer : le nom de la COPIE. |
| `objet` | texte | — | max. caractères 200 | Objet du courriel. Canal mail seulement. |
| `prochainement` | liste de texte | — | — | Ce qui arrive, en texte libre, sans date et sans chiffre. |
| `profil_cible` | texte | — | format `^[a-z0-9_]+$`, max. caractères 40 | A qui le modele s'adresse. PAS une liste fermee : chaque organisation definit ses profils (action profils pour lire les siens, poser_profil pour en ajouter un). Les cinq fournis au depart : industriel, be_architecte, entreprise_distributeur, promoteur, autre. Un identifiant inconnu est CREE dans la liste de l'organisation. |
| `profil_indices` | liste de texte | — | — | poser_profil : les mots qui font reconnaitre ce profil sur la fonction, l'accroche, la societe ou le libelle NAF d'une cible. Ils sont mis a plat (minuscules, sans accent) avant comparaison. Vide : le profil existe mais se choisit a la main. |
| `profil_libelle` | texte | — | max. caractères 80 | poser_profil : le nom affiche de ce profil, en clair et avec ses accents (exemple : Cuisiniste independant). |
| `profil_rang` | entier | — | min 1, max 999 | poser_profil : l'ordre d'essai, du plus specifique au plus general. Le premier indice qui repond gagne (defaut 500). |
| `prospect_id` | texte | — | — | selectionner : UUID du contact vise. Le profil se deduit de sa fonction, de son accroche et de son activite. |
| `texte` | texte | — | max. caractères 4000 | modifier : le nouveau texte du bloc. |

Tout autre paramètre est refusé (`additionalProperties: false`).

## Exemple d'appel

_squelette synthétique : les repères `<…>` se remplacent._

```json
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "action": "lister"
    },
    "name": "prospection_profils_cibles"
  }
}
```

En HTTP, c'est ce corps que l'on poste :

```bash
curl -sS https://prescriptio.fr/api/mcp \
  -H 'Authorization: Bearer <jeton>' \
  -H 'Content-Type: application/json' \
  -d '{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"action":"lister"},"name":"prospection_profils_cibles"}}'
```

## Forme de la réponse

Le résultat est enveloppé par le protocole : un bloc `content[0].text` qui porte le JSON sérialisé, et `structuredContent` qui porte le même objet. Le squelette ci-dessous donne les **types**, jamais des valeurs réelles.

```json
{
  "action": "<texte>",
  "download_url": "<texte>",
  "fields": {},
  "files": [
    {}
  ],
  "ok": false,
  "page": 0,
  "pages_total": 0,
  "quota": {},
  "texte": "<texte>"
}
```

Un champ absent ou `null` n'est ni un zéro ni une estimation : la source ne l'a pas renseigné. Les propriétés additionnelles restent autorisées ; ce squelette n'invente pas les champs manquants.

## Erreurs

Le connecteur MCP renvoie une erreur JSON-RPC pour ce qui empêche l'appel, et une erreur *métier* (`isError`) lisible par le modèle pour ce que l'appel n'a pas pu faire.

| Code JSON-RPC | Quand | Que faire |
|---|---|---|
| `-32601` | Outil inconnu | Appeler `tools/list` ; ne pas deviner un nom |
| `-32602` | Argument absent ou hors schéma | Corriger l'argument nommé dans le message |
| `-32003` | Portée OAuth absente de l'autorisation | Reconnecter en acceptant `mcp:read` ou `mcp:write` |
| `-32004` | Quota dépassé | Attendre le délai indiqué ; ne jamais boucler |
| `-32603` | Dépendance indisponible | Réessayer plus tard ; ne pas rejouer une écriture sans vérifier |

Sur les routes REST `/api/mcp/v1/*`, les mêmes situations sont des codes HTTP : `400 invalid_arguments` / `invalid_cursor`, `401 unauthenticated`, `403 insufficient_scope` / `access_denied` / `user_required` / `organization_required` / `role_denied`, `404 not_found`, `409 conflict`, `429 quota_exceeded` (avec `Retry-After` quand il est connu), `503 unavailable`, `504 timeout`. Le corps porte `error.code`, `error.message`, `error.retry_after_seconds` et `api_contract_version`.

⚠ Un message d'erreur n'est jamais une donnée : ne pas le recopier comme un fait, et ne pas inventer un identifiant ou une URL qu'il ne contient pas.

## Quotas

Un appel compte pour **une unité** dans les deux compteurs d'appels, partagés entre le connecteur MCP et les routes REST :

| Compteur | Compte gratuit | Abonné | Accès interne |
|---|---|---|---|
| Appels / 24 h glissantes | 100 | 5000 | illimité |
| Appels / 60 s (anti-rafale) | 5 | 30 | illimité |
| Dossiers distincts / jour civil (Paris) | 5 | 500 | illimité |

Cet outil ne consomme aucune unité de dossier : chercher est gratuit, c'est la lecture d'un dossier (`marches_dce`, `mairies_deliberations` et leurs téléchargements) qui est décomptée.

**Aucun outil n'est réservé à une offre** (décision du 2026-09-17) : un compte gratuit voit et appelle le catalogue entier, ce sont ces plafonds qui bornent son usage.

## Voir aussi

[Référence technique](/docs/reference/concepts.md) · [Tous les outils](/docs/api/index.md) · [OpenAPI](/openapi.json) · [Texte pour agents](/llms-full.txt)
