# prescriptio_messages_types

Les messages TYPES de la prospection : le modele qu'on remplit au lieu de reecrire. Un modele est fait de BLOCS nommes (salutation, presentation, accroche, personnalisation, lien de la recherche, ce qui est gratuit, ce que 12 EUR HT/mois debloquent, ce qui arrive prochainement, cloture) et l'accroche porte plusieurs VARIANTES, dont chacune a ses chiffres : c'est ainsi qu'on trouve la meilleure. Actions : lister, lire, ajouter, modifier (un bloc ou une variante a la fois), dupliquer, desactiver, activer, et selectionner (rend le modele le mieux adapte a un prospect, AVEC la raison du choix). Les modeles sont les MEMES a l'ecran (/prospection/messages) et ici. Ne rend aucune coordonnee personnelle.

| | |
|---|---|
| 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` · `lire` · `ajouter` · `modifier` · `dupliquer` · `desactiver` · `activer` · `selectionner` | — | — | lister (defaut) : les modeles de l'espace. lire : un modele entier. ajouter : en creer un. modifier : UN bloc, UNE variante d'accroche, ou les champs du modele. dupliquer : une copie sous un nouveau nom, pour essayer une accroche sans toucher l'original. desactiver / activer : sans supprimer. selectionner : rendre le modele le mieux adapte a une cible, AVEC la raison. |
| `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` · `outils_12e` · `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 PUBLIC du modele (page /outils/ ou /annuaire/), pour le champ [lien]. Distinct de [lien_recherche], qui est celui de la recherche du jour. |
| `limit` | entier | — | min 1, max 200 | lister : nombre maximum (defaut 50). |
| `modules` | liste de texte | — | — | Les modules que 12 EUR HT/mois debloquent pour CE profil, tels que le rail les nomme (exemple : Marches publics, Annuaire, Ma prospection). Remplit le champ [outils], groupe en hub puis organisation. |
| `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` | `industriel` · `be_architecte` · `entreprise_distributeur` · `promoteur` · `autre` | — | — | A qui le modele s'adresse. |
| `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. |

## 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": "prescriptio_messages_types"
  }
}
```

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":"prescriptio_messages_types"}}'
```

## 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 (`prescriptio_dce`, `prescriptio_mairies` 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)
