Tutoriel développeur 2026-06-16

Construire un MCP Server
depuis zéro

Imaginez un studio de post-production où l'assistant IA doit consulter les métadatas Final Cut, interroger un DAM interne et rédiger des notes de version — sans exposer les masters bruts au cloud. Ce guide s'adresse aux développeurs et ingénieurs agent qui veulent livrer un serveur Model Context Protocol sur mesure avec Python et FastMCP. Vous parcourrez l'environnement, les Tools, Resources, Prompts, le transport HTTP, le débogage, le déploiement et un projet base de connaissances, avec une matrice de décision, sept étapes et des chiffres vérifiables — plus une piste Mac loué pour valider sans compromettre votre MacBook créatif.

Architecture MCP Server FastMCP 2026 : Tools, Resources, Prompts et transport HTTP pour équipes créatives

01 · Pourquoi construire plutôt qu'installer

Les serveurs communautaires couvrent GitHub ou Postgres, rarement votre API de droits créatifs ou vos règles de facturation par projet. Un serveur maison expose trois à sept opérations utiles aux agents, impose des défauts read-only et évolue avec vos microservices — comme un plugin sur mesure pour votre pipeline audiovisuel ou design.

Après notre article sur le MCP comme HTTP de l'ère IA, ce tutoriel est la version mains dans le code.

02 · Trois freins au déploiement

1. Dialecte différent par hôte. OpenAI, Anthropic et Google déclarent les tools différemment. MCP unifie registration et sémantique en JSON-RPC — écrivez une fois, chargez dans Cursor, Claude Desktop et OpenClaw.

2. Frontières floues des credentials. Un serveur MCP lit fichiers, appelle APIs, porte des tokens OAuth. Mélanger une douzaine de serveurs sur le MacBook qui signe vos builds App Store est un risque opérationnel — surtout en équipe créative où les clés API tierces prolifèrent.

3. Chaîne de debug opaque. Host → Client → stdio ou HTTP : une mauvaise ligne de config se traduit par « outils indisponibles ». Sans Inspector ni tests, vous devinez.

03 · Architecture : Host, Client, Server

Le Model Context Protocol (Anthropic, nov. 2024 ; gouvernance LF 2026) structure la découverte de capacités via JSON-RPC 2.0 : initialize, tools/list, tools/call, resources/list, prompts/list.

  • Tools — actions invocables (requête HTTP, écriture fichier contrôlée).
  • Resources — contexte read-only (config, extraits de runbook).
  • Prompts — gabarits de dialogue (« revue de montage », « synthèse changelog »).

Transports : stdio pour le bureau local ; streamable HTTP pour partager un serveur entre plusieurs postes de montage ou un gateway OpenClaw.

04 · Matrice : REST, Function Calling, MCP, LangChain

DimensionRESTFunction CallingMCP
DécouverteOpenAPI statiqueSchema dans le prompttools/list runtime
Multi-hôteClients HTTP universelsUn éditeur de modèleCursor, Claude, OpenClaw
Resources/PromptsNon natifNon natifPremiers citoyens du protocole
Cas créatifCRUD assetsPrototype rapideCatalogue agent durable

Donnée 1 : coût d'intégration −38 % à −55 % avec une couche MCP unifiée. Donnée 2 : duplication Cursor + Claude −70 % de code wrapper. Donnée 3 : 1 000+ serveurs MCP exposés sans auth repérés en scan public — validez les permissions avant production.

05 · Environnement Python + FastMCP

mkdir my-mcp-server && cd my-mcp-server
python3 -m venv .venv && source .venv/bin/activate
pip install "mcp[cli]" fastmcp httpx pydantic chromadb
npx @modelcontextprotocol/inspector python server.py

FastMCP génère le JSON Schema depuis les annotations Python — setup fonctionnel en moins de 20 minutes en stdio, contre ~90 min. avec le SDK brut.

06 · Hello World

from fastmcp import FastMCP
mcp = FastMCP("hello-server")
@mcp.tool()
def say_hello(name: str = "World") -> str:
  return f"Bonjour, {name} !"
if __name__ == "__main__": mcp.run()

Enregistrez dans ~/.cursor/mcp.json ou la config Claude Desktop ; redémarrez le host. Vérifiez avec Inspector avant d'impliquer le modèle.

07 · Cinq Tools pour un studio agent-ready

ToolUsage créatif / prodImplémentation
search_assetsDAM interneAsync + limite 20 hits
read_briefFichier brief clientRacine sandbox
fetch_render_statusAPI farmhttpx timeout 10 s
query_project_dbSQL read-onlyParamètres liés
aggregate_exportsMétriques batchMax 10 IDs
@mcp.tool()
async def fetch_render_status(job_id: str) -> str:
  async with httpx.AsyncClient(timeout=10) as c:
    r = await c.get(f"{API}/jobs/{job_id}")
    r.raise_for_status()
    return r.text

Gardez 10–15 tools maximum ; au-delà de vingt, les logs montrent une hausse nette des mauvais choix de tool par le modèle.

08 · Resources : contexte sans effet de bord

@mcp.resource("docs://runbook/{incident}")
def runbook(incident: str) -> str:
  return (RUNBOOKS / f"{incident}.md").read_text()

Les hosts préchargent souvent les resources sans dialogue d'approbation — pas de PII, pas de secrets. Préférez des résumés agrégés.

09 · Prompts : workflows réutilisables

@mcp.prompt()
def code_review(language: str = "Swift") -> str:
  return f"""Revue {language} : sécurité, perf IO, lisibilité, tests."""

Complète les Agent Skills Cursor — Skill pour le « quand », Prompt MCP pour le squelette de dialogue.

10 · HTTP : du Mac solo au gateway équipe

TransportDéploiementAuthScénario
stdioSubprocess localProcess ownerCursor sur MacBook
SSE (legacy)Serveur distantBearer/OAuthGateways 2025
Streamable HTTPEndpoint uniqueOAuth 2.1Production 2026
mcp run server.py --transport streamable-http --port 8080

Limitez à 60 req/min/token, journalisez chaque tools/call, conformité RGPD via minimisation des arguments loggés.

11 · Débogage en quatre couches

  1. Inspector : connecter, lister, appeler manuellement.
  2. Logging structuré sur stderr — jamais print sur stdout en stdio.
  3. pytest avec ClientSession et stdio_client.
  4. Fumée Host : lookup read-only, écriture bornée, dialog d'approbation.

12 · Production : sept étapes

  1. Versions épinglées dans pyproject.toml.
  2. Secrets en vault, pas dans l'image Docker.
  3. Supervision systemd/K8s, RAM 256 MB par instance idle.
  4. Endpoint /health séparé.
  5. Alerte si erreurs >5 % sur 5 minutes.
  6. Scopes OAuth minimaux.
  7. Rehearsal sur Mac loué — voir intégration OpenClaw MCP.

13 · Base de connaissances ChromaDB

Scénario fréquent en agence : indexer markdown interne, exposer search_knowledge et index_document. ChromaDB all-MiniLM-L6-v2 (384 dim.) ; 100 k pages ≈ 2–4 Go disque, 8 Go RAM recommandés.

@mcp.tool()
def search_knowledge(query: str, top_k: int = 5) -> str:
  res = collection.query(query_texts=[query], n_results=top_k)
  return "\n---\n".join(res["documents"][0] or [])

14 · Écosystème juin 2026

10 000+ serveurs publics ; packages officiels GitHub, Stripe, Notion. Avant de réinventer, cherchez le registre ; construisez si redaction métier ou auth interne. MCP coexiste avec A2A (délégation agent-agent).

15 · Conclusion : répéter sur un Mac jetable

Vous disposez du fil complet — Tools typés, Resources, Prompts, HTTP, tests, durcissement. Un serveur MCP maison remplace les docs API collées dans le prompt et stabilise les agents.

Cependant, développer sur le MacBook qui porte vos certificats Developer, vos tokens Frame.io et votre Keychain production mélange des mondes. WSL ou Linux ne reproduisent pas TCC, Keychain ni les dialogues GUI d'approbation macOS. Les VM cloud ajoutent une latence qui fausse vos benchmarks stdio.

Pour un sprint MCP de une à deux semaines — surtout avec tools en écriture — louer un Mac mini M4 isolé reste l'option élégante : Apple Silicon identique à votre parc, compte utilisateur vierge, SSH/VNC pour les validations GUI, effacement sans résidu avant restitution. La location journalière aligne le coût sur la durée réelle du PoC créatif.

MacDate · Développement MCP

Testez vos serveurs MCP sur un Mac que vous effacez — pas sur la machine qui signe vos livrables.

MacDate propose Mac mini M4 et Mac Studio en location journalière avec SSH/VNC — idéal pour Cursor, OpenClaw, FastMCP et MCP Inspector en sandbox créative.

Tarifs bare-metal · Guide première location journalière

Pour aller plus loin