# InterCar : outils pour agents IA

Services pris en charge : demande de chiffrage de remorquage ou de dépannage,
demande d’offre de rachat de véhicule, transmission au back-office et suivi.

## Connexion

- Serveur MCP Streamable HTTP : https://inter-car.fr/mcp
- Versions négociées : 2025-11-25, 2025-06-18, 2025-03-26. Réponses JSON, sans flux SSE.
- OpenAPI pour les outils compatibles REST : https://inter-car.fr/api/agents/v1/openapi.json
- Catalogue et schémas des outils : https://inter-car.fr/api/agents/v1/tools
- WebMCP expose les mêmes outils dans les navigateurs compatibles.

Accès public, sans inscription, clé client ni approbation manuelle par InterCar.
Aucun en-tête Authorization n’est nécessaire. Les quotas automatiques concernent
les appels, les créations, le total du service et le téléphone client. En cas de
HTTP 429, respecter Retry-After si présent, sinon attendre avant de réessayer.
L’assistant doit savoir appeler MCP, REST ou les outils WebMCP du navigateur.

## Parcours

1. Consulter les schémas des outils. Demander au client les données manquantes,
   sans inventer sa localisation, son véhicule, ses coordonnées ou son autorisation.
2. `estimate_intervention` : calcul indicatif serveur, sans enregistrement de dossier.
   Une destination est obligatoire pour le remorquage. Pour une panne sur place,
   choisir `depannage`. Indiquer type, état et accessibilité du véhicule.
3. `prepare_request` : ajouter nom, téléphone, adresse et description de la demande.
   Pour un rachat (`service_type: rachat`), indiquer aussi l’immatriculation et les
   caractéristiques connues du véhicule dans `message` (marque, modèle, année,
   kilométrage, état). Le prix de rachat sera étudié par l’équipe.
4. Présenter `summary`, `pricing` et les limites de l’estimation au client.
   Recueillir son autorisation de transmettre cette demande et ses coordonnées à InterCar.
5. `submit_request` : envoyer le `request_token` reçu et `consent: true` uniquement
   après cette autorisation. Une référence et le statut du dossier sont retournés.
6. `get_request_status` : utiliser le même `request_token` pour lire l’avancement.

Les estimations ne garantissent ni disponibilité ni délai d’arrivée. Ces outils
ne déclenchent aucun paiement, aucune réservation et aucune offre de rachat ferme.
Un prix indisponible peut donner lieu à une demande de devis manuel.

## Exemple REST

`POST /api/agents/v1/tools/prepare_request`, Content-Type: application/json

```json
{
  "service_type": "remorquage",
  "start_address": "15 rue de Lille, 59000 Lille",
  "end_address": "10 rue Nationale, 59200 Tourcoing",
  "vehicle_type": "citadine",
  "vehicle_states": ["en_panne"],
  "access_location": "rue",
  "name": "Client Exemple",
  "phone": "0600000000",
  "message": "Le véhicule ne démarre plus ; les roues tournent librement."
}
```

Les arguments sont identiques via MCP `tools/call` et WebMCP. Aucun en-tête d’authentification requis.

## Reprises et confidentialité

- Le jeton privé protège le suivi du dossier, même si l’agent change d’adresse IP.
- Le jeton expire après 30 minutes pour une première transmission. Après transmission,
  les reprises avec le même jeton retrouvent le dossier et le suivi reste disponible.
- Après une erreur réseau ou HTTP 503, réutiliser exactement le même jeton.
  Ne pas rappeler `prepare_request` pour réessayer une transmission incertaine.
- Le jeton signé contient les informations préparées : il est privé, pas chiffré.
  Ne pas le publier, le journaliser ou le placer dans une URL. Le conserver seulement
  dans la conversation privée ou le stockage sécurisé du client.
- Les appels contenant des données personnelles passent en POST et les réponses
  portent Cache-Control: no-store. Le suivi n’expose pas de coordonnées ni de notes internes.
- HTTP 403 : service désactivé, HTTPS requis ou origine refusée.
- `already_received` : une demande identique a déjà été reçue ; aucun nouveau dossier créé. Utiliser le jeton initial pour le suivi, pas le jeton d’une nouvelle préparation.
- `validation_failed` précise les champs à corriger ; `preparation_expired` demande
  une nouvelle préparation ; `request_not_found` signifie qu’aucun dossier n’a été trouvé.
- `notification_status: pending` signifie que le dossier est enregistré, mais que la
  notification de l’équipe n’est pas encore confirmée. Ne pas créer un autre dossier.

## Documentation des protocoles

- [MCP Streamable HTTP 2025-11-25](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports)
