Pourquoi MCP plutôt qu'un simple chatbot ?
- Le LLM comprend le langage naturel et orchestre les appels
- Le MCP expose les capacités métier sous forme d'outils
- L'API contient la logique et les données
Architecture du serveur MCP
Typescript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "reassurezmoi",
version: "1.0.0",
});
Outil 1 — tarifier_assurance
Typescript
server.tool(
"tarifier_assurance",
"Compare les offres d'assurance emprunteur pour un prêt immobilier",
{
montant: z.number().describe("Montant du prêt en euros"),
duree: z.number().describe("Durée du prêt en mois"),
taux_nominal: z.number().describe("Taux nominal du prêt en %"),
quotite: z.number().default(100).describe("Quotité d'assurance en %"),
date_naissance: z.string().describe("Date de naissance (YYYY-MM-DD)"),
fumeur: z.boolean().default(false),
},
async ({ montant, duree, taux_nominal, quotite, date_naissance, fumeur }) => {
const offres = await apiReassurezmoi.tarifier({
montant,
duree,
taux_nominal,
quotite,
date_naissance,
fumeur,
});
const top3 = offres
.sort((a, b) => a.taux_assurance - b.taux_assurance)
.slice(0, 3);
return {
content: [
{
type: "text",
text: formatOffres(top3),
},
],
};
}
);
Outil 2 — get_offres_assureurs
Typescript
server.tool(
"get_offres_assureurs",
"Retourne les assureurs partenaires et leurs points forts",
{},
async () => {
const assureurs = await apiReassurezmoi.getAssureurs();
return {
content: [{ type: "text", text: JSON.stringify(assureurs, null, 2) }],
};
}
);
Outil 3 — comparer_garanties
Typescript
server.tool(
"comparer_garanties",
"Compare les garanties de deux offres d'assurance",
{
offre_a: z.string().describe("ID de la première offre"),
offre_b: z.string().describe("ID de la seconde offre"),
},
async ({ offre_a, offre_b }) => {
const comparaison = await apiReassurezmoi.comparerGaranties(offre_a, offre_b);
return {
content: [{ type: "text", text: formatComparaison(comparaison) }],
};
}
);
Démarrage du serveur
Typescript
const transport = new StdioServerTransport();
await server.connect(transport);
Exemple de conversation
Configuration client (Claude Desktop)
Json
{
"mcpServers": {
"reassurezmoi": {
"command": "node",
"args": ["/path/to/mcp-reassurezmoi/dist/index.js"],
"env": {
"REASSUREZMOI_API_KEY": "votre_cle_api"
}
}
}
}