MCP est un transport, Non une architecture
"Comment construire un serveur MCP?" est la mauvaise question
Il existe des SDKs. Un LLM peut former un scaffold en quelques secondes . La question réelle est :
Quel rôle devrait jouer un serveur MCP à l'intérieur d'un système qui ne doit pas être lié?
La rare compétence actuelle consiste à concevoir système autour MCP: autoritéM SK1 autorisation, vérifiabilité , et contrôle déterministeMNK4 Le MCP gère le transport MMK5 ces préoccupations vivent ailleursMRK6
Cet article explique comment j'utilise MCP sans agents, autonome, ou vibes, et pourquoi la plupart des exemples de MCP récréent les mêmes problèmes que ceux que nous avons vu avec l’appel d’outils non contraints.
Il s'agit d'une partie 2 des "LLMs en tant que composantes". Partie 1: Pourquoi les LLM échouent en tant que capteurs Cet article porte sur l’erreur de catégorie d’utilisation des LLM pour la perception.
Qu’est-ce que le MCP en fait ? (et n’est‐il pas?
MCP (Model Context Protocol) est un protocole de câble. Il se déplace
- Inputs et outputs
- Systèmes
- Les métadonnées de l'outil
- Développement des capacités
Il le fait. non pas:
- Décision Lorsque : les outils devraient être utilisés
- Valider la vérité
- Exécuter la confiance
- Gestion des effets secondaires
flowchart LR
subgraph MCP["MCP: What It Does"]
Schema[Schema Discovery] --> Transport[Transport Layer]
Transport --> Invoke[Tool Invocation]
Invoke --> Response[Structured Response]
end
subgraph NotMCP["Not MCP's Job"]
When[When to run?]
Trust[Is this true?]
Should[Should we act?]
Safe[Is this safe?]
end
style MCP fill:none,stroke:#16a34a,stroke-width:2px
style NotMCP fill:none,stroke:#dc2626,stroke-width:2px
style Schema fill:none,stroke:#059669,stroke-width:2px
style Transport fill:none,stroke:#059669,stroke-width:2px
style Invoke fill:none,stroke:#059669,stroke-width:2px
style Response fill:none,stroke:#059669,stroke-width:2px
style When fill:none,stroke:#dc2626,stroke-width:2px
style Trust fill:none,stroke:#dc2626,stroke-width:2px
style Should fill:none,stroke:#dc2626,stroke-width:2px
style Safe fill:none,stroke:#dc2626,stroke-width:2px
MCP est plus proche de OpenAPI qu'un cadre d'agents.
Si vous 'utilisez MCP comme couche de raisonnement,, vous ' avez déjà fait l'erreur de la même catégorie décrite dans Partie 1.
Si MCP est un transport, alors l'architecture vit au-dessus de ce dernier: orchestrationM SK2 politique , validationMNK4 persistanceMMK5 Le reste du présent article est celui de la couche
Principe de base: Proposition vs décision
C'est la règle fondamentale de RAG réduit et Fuzziness restreinte:
- Les composantes probabilistes proposent
- Les systèmes déterministes décident
Dans mes systèmes:
- Les LLM sont Aucune fois autorisations
- Les outils sont Aucune fois d'autonomisation
- Chaque réponse du MCP est une Propositions, n’est pas un fait
"DeterministeM SK1 ici ne signifie pas 't simpliste. Il signifie Règles-géréeM SK1 reproduisable , et vérifiable.
flowchart TD
subgraph Proposers["Proposers (Probabilistic)"]
LLM[LLM Synthesis]
MCP1[MCP Tool Response]
MCP2[MCP Tool Response]
end
subgraph Constrainer["Constrainer (Deterministic)"]
Validate[Validate Proposals]
Compare[Compare Confidence]
Policy[Apply Policy Rules]
Decide[Accept / Reject / Escalate]
end
subgraph Persistence["Persistence (Facts)"]
Facts[(Verified Facts<br/>With Provenance)]
end
LLM --> Validate
MCP1 --> Validate
MCP2 --> Validate
Validate --> Compare
Compare --> Policy
Policy --> Decide
Decide --> Facts
style Proposers fill:none,stroke:#d97706,stroke-width:2px
style Constrainer fill:none,stroke:#2563eb,stroke-width:2px
style Persistence fill:none,stroke:#16a34a,stroke-width:2px
style LLM fill:none,stroke:#d97706,stroke-width:2px
style MCP1 fill:none,stroke:#d97706,stroke-width:2px
style MCP2 fill:none,stroke:#d97706,stroke-width:2px
style Validate fill:none,stroke:#2563eb,stroke-width:2px
style Compare fill:none,stroke:#2563eb,stroke-width:2px
style Policy fill:none,stroke:#2563eb,stroke-width:2px
style Decide fill:none,stroke:#2563eb,stroke-width:2px
style Facts fill:none,stroke:#16a34a,stroke-width:3px
Le serveur MCP ne décide pas't. Le constrainer décideM SK2
Pourquoi "Outils" sont-ils le mauvais modèle mental?
Le cadre MCP par défaut est:
- "Exposer les méthodes comme outils"
- "Laisez le modèle choisir l'outil à appeler
- " Demander la permission avant l'exécution"
Cela ne fonctionne pas pour des raisons prévisibles:
- Les descriptions d'outils deviennent des prompts: Le LLM déduit l’intention du libellé, non de la sémantique du schéma
- Déplacement de la sélection des outils: Le modèle optimise la plausibilité , non l'exactitude M SK2 et choisit les outils en fonction de la similitude des descriptions
- Les prompts de permission sont UX, non sûr: Un dialogue modal n’empêche pas le choix de l’outil erroné
- Aucune reproductibilité: Vous ne pouvez pas reproduire une session parce que la sélection de l'outil était probabiliste.
Forme d'outils (2023) établit la base théorique de l’utilisation des outils LLM : les modèles peuvent apprendre Lorsque : pour appeler les outils en mesurant les résultats réels. C’était un travail fondamental . Mais Toolformer fonctionne à l’heure de la formation avec des ensembles d’outils curatés - pas des systèmes d'agents de temps d’exécution avec des points finals arbitraires du PCMMSC3 La leçon de Toolformer n’est-elle pas? mesurer objectivement les résultats. Voir ma comparaison de Voyager, Toolformer, et approches structurées pour savoir pourquoi la structure bat le brilliance.
Réélaborer: Les paramètres de MCP publient les signauxM SK1 non les actions.
- Les signaux sont typés, bounded, et attribuables
- Tous les signaux ont une provenance de confiance,, , et des points témoins
- La langue naturelle est une couche de présentation, non le substrat
flowchart LR
subgraph Wrong["❌ Tools Mental Model"]
Desc[Tool Description<br/>'Gets weather for city'] --> LLM1[LLM Chooses]
LLM1 --> Execute[Execute Action]
Execute --> Trust1[Trust Result?]
end
subgraph Right["✓ Signals Mental Model"]
Schema2[Typed Schema<br/>city: string, units: enum] --> Invoke2[Deterministic Invoke]
Invoke2 --> Signal[Signal Response<br/>+ confidence + provenance]
Signal --> Validate2[Constrainer Validates]
end
style Wrong fill:none,stroke:#dc2626,stroke-width:2px
style Right fill:none,stroke:#16a34a,stroke-width:2px
style Desc fill:none,stroke:#dc2626,stroke-width:2px
style LLM1 fill:none,stroke:#dc2626,stroke-width:2px
style Execute fill:none,stroke:#dc2626,stroke-width:2px
style Trust1 fill:none,stroke:#dc2626,stroke-width:2px
style Schema2 fill:none,stroke:#16a34a,stroke-width:2px
style Invoke2 fill:none,stroke:#16a34a,stroke-width:2px
style Signal fill:none,stroke:#16a34a,stroke-width:2px
style Validate2 fill:none,stroke:#16a34a,stroke-width:2px
Contrats de signalisation au-dessus du chat
Chaque point final de MCP dans mes systèmes a:
- Un schéma: Typed inputs and outputsM SK1 not free-form text
- Confidentialité: Quelle est la certitude de ce résultat?
- Provenance: D’où provient-il?
- Indicateurs de preuve: Qu’est-ce qui peut être vérifié indépendamment?
Aucune réponse libre-autorité du texte. Aucun M SK2effort le plus efficace " réponsesMSC4
Exemples des systèmes de production:
| Signale | Source de confiance MSC2 Pointeur des preuves MSC3 | |
|---|---|---|
| Extraction du texte par OCR | FlorenceM SK2 cote de confiance | |
| Classification des images | Coefficient de similitude du CLIP MSC2 Emplacement MSC3 Coefficience de similitudes S+ ID d'image de référence M | |
| Transcription sonore | Parole murmuranteM SK2 Confiance de niveau | Étendue d'échantillonnage du temps |
| Identification de l'émetteur | Distance du groupe de diarisation |
La règle: Si un résultat n’est pas validé, il ne peut être validé.
Il s'agit du même principe que Règle de conception #5: les faits doivent être prouvés
Le constérnateur: La partie que tout le monde passe
La plupart des tutorials MCP montrent:
- Définir les outils
- Connexion à LLM
- Laissez-le courir
La composante manquante est la Constrainer - la logique déterministe selon laquelle
- Évaluer les propositions concurrentes
- Exécuter la politique
- Décide ce qui persiste et ce qui est rejeté
- Routes vers l'escalade lorsque la confiance est faible
flowchart TD
subgraph Sources["Signal Sources"]
Heuristics[Heuristics<br/>Text-likeliness: 0.3]
LocalModel[Local Model<br/>Florence-2 OCR: 0.85]
LLMCall[LLM Escalation<br/>GPT-4V: 0.92]
end
subgraph Constrainer["Constrainer Logic"]
Receive[Receive All Signals]
Check{Confidence<br/>≥ 0.7?}
Cross[Cross-Validate<br/>Signals Agree?]
Accept[Accept as Fact]
Reject[Reject / Log]
Escalate[Escalate to<br/>Higher Tier]
end
Heuristics --> Receive
LocalModel --> Receive
LLMCall --> Receive
Receive --> Check
Check -->|Yes| Cross
Check -->|No| Escalate
Cross -->|Yes| Accept
Cross -->|No| Reject
style Sources fill:none,stroke:#d97706,stroke-width:2px
style Constrainer fill:none,stroke:#2563eb,stroke-width:2px
style Heuristics fill:none,stroke:#d97706,stroke-width:2px
style LocalModel fill:none,stroke:#d97706,stroke-width:2px
style LLMCall fill:none,stroke:#d97706,stroke-width:2px
style Receive fill:none,stroke:#2563eb,stroke-width:2px
style Check fill:none,stroke:#2563eb,stroke-width:2px
style Cross fill:none,stroke:#2563eb,stroke-width:2px
style Accept fill:none,stroke:#16a34a,stroke-width:2px
style Reject fill:none,stroke:#dc2626,stroke-width:2px
style Escalate fill:none,stroke:#7c3aed,stroke-width:2px
Décisions de constrainer réelles:
- Rejet de la caption LLM lorsque les héuristiques ne sont pas d’accord sur le texte-likeliness
- Préférer un texte hallucinatoire de confiance plus bas-confidence, mais une OCR démontrée par rapport à un texte élevé
- Évacuer à la vision LLM seulement lorsque le modèle local est fiable < 0.7
MCP relie les composants. Le constrainer les régitM SK1
Démarrage du LLM (et pourquoi je le fais)
Mon serveur MCP fonctionne toujours avec le LLM désactivé.
Il s’agit d’un mode dégradé. mode primaire.
Si votre système cesse de fonctionner lorsque le LLM n'est pas disponible, la LLM faisait un travail qu'elle ne devrait pas' avoirM SK2
C'est le même principe qui sous-tend Pourquoi la structure bat le brilliance: ne l’espérons pas, ' ne nous attendons pas à ce qu’un seul modèle fasse tout, MSC2 Répartir la cognition dans un système où les composants déterministes manipulent ce qui est bon pour eux.
Les fonctions de base:
- Résumé déterministe tiré des faits extraits
- Evidence-première recherche par embeddings et filtres
- Demandes structurées contre la base de données factuelles
Le LLM devient:
- Une couche de synthèse (optionnelle)
- Un moteur d’explication (à la demande)
- Un enrichisseur (pour la sortie de langage naturel)
Le LLM est non pas:
- Un décideur
- Mémoire
- Un moteur de la vérité
flowchart TD
subgraph AlwaysOn["Always On (Deterministic)"]
Sensors[Sensors + Heuristics]
Local[Local Models<br/>Florence-2, Whisper, CLIP]
Facts[(Facts Database)]
Query[Query Engine]
end
subgraph Optional["Optional (LLM)"]
Synthesis[Natural Language Synthesis]
Explain[Explanation Generation]
end
Sensors --> Local
Local --> Facts
Facts --> Query
Query --> Synthesis
Query --> Explain
style AlwaysOn fill:none,stroke:#16a34a,stroke-width:2px
style Optional fill:none,stroke:#6b7280,stroke-width:2px,stroke-dasharray: 5 5
style Sensors fill:none,stroke:#16a34a,stroke-width:2px
style Local fill:none,stroke:#16a34a,stroke-width:2px
style Facts fill:none,stroke:#16a34a,stroke-width:3px
style Query fill:none,stroke:#16a34a,stroke-width:2px
style Synthesis fill:none,stroke:#6b7280,stroke-width:2px
style Explain fill:none,stroke:#6b7280,stroke-width:2px
Pourquoi cela importe:
| Avantage | LLM-Systèmes requis MSC3 LLSMSc4Sstèmes options MSC5 | |
|---|---|---|
| Coût | Par-coûts de l’API pour la demande | Infrastructure fixe |
| La fiabilité | Interruption de l’API = Système en panne | |
| Vérifiabilité | Réponses de Mock LLM | Affirmations déterministes |
| Confiance | "Le modèle l’a dit. |
MCP en tant que limite, Non intégration
Je traite le MCP comme un Établissement d'une bénérance stricte:
- Isolation du processus: Les serveurs MCP fonctionnent dans des processus distincts
- Inputs explicites/outputs: Aucun état mutable partagé
- Aucun contexte ambiant: Chaque appel est évalué à partir d’entrées explicites , non résidu de conversation
- Contrats types: Les violations du schéma sont des erreurs
Cela contraste avec:
- Agents de processus In- avec mémoire partagée
- Prompt-chaining avec l'accumulation contextuelle cachée
- "Conversational" Utilisation d'outils lorsque les virages antérieurs ont une incidence sur le comportement
Pourquoi les limites sont importantes:
- Réjouir: Reproduisez toute session en replayant les intrants
- Vérification: Chaque signal a une origine traçable
- Essais déterministes: Les mêmes intrants → les mêmes sorties
- Conformité: Chaînes de décision explicatives
flowchart LR
subgraph Process1["Process: Orchestrator"]
Orch[Orchestrator<br/>Constrainer Logic]
end
subgraph Process2["Process: MCP Server 1"]
MCP1[Image Analysis<br/>Signals]
end
subgraph Process3["Process: MCP Server 2"]
MCP2[Audio Analysis<br/>Signals]
end
subgraph Process4["Process: MCP Server 3"]
MCP3[Video Analysis<br/>Signals]
end
Orch <-->|MCP Protocol| MCP1
Orch <-->|MCP Protocol| MCP2
Orch <-->|MCP Protocol| MCP3
style Process1 fill:none,stroke:#2563eb,stroke-width:2px
style Process2 fill:none,stroke:#16a34a,stroke-width:2px
style Process3 fill:none,stroke:#16a34a,stroke-width:2px
style Process4 fill:none,stroke:#16a34a,stroke-width:2px
style Orch fill:none,stroke:#2563eb,stroke-width:2px
style MCP1 fill:none,stroke:#16a34a,stroke-width:2px
style MCP2 fill:none,stroke:#16a34a,stroke-width:2px
style MCP3 fill:none,stroke:#16a34a,stroke-width:2px
Modes de défaillance Exemples MCP Don't Talk About
Cas de défaillance réels à la suite d’un usage non restreint du MCP:
| Mode de défaillance | Cause SSK2 Atténuation | ||
|---|---|---|---|
| La hallucination d'outils | Évacuation de la description dans le raisonnement du LLM | ||
| Exécution attendue | Outils d'appels de modèle "juste pour vérifier" | Les portes du connexeur permettent toutes les invocations. | |
| Déplacement du schéma | Changements de comportement des outilsM SK1 schéma ne fonctionne pas't | Systèmes modifiés | |
| Défaillances partielles silencieuses | L'outil retourne des données partielles , le modèle progresse | ||
| LLM surconfidence | Le modèle traite la sortie de l'outil comme une vérité fondamentale | CrossM SK2 Validation, Exigences relatives aux preuves | |
| Augmentation des capacités | Modèle "tries" Outils de plus en plus puissants progressivement | Niveaux des capacités M+ Évaluation des politiques m+ Budgets |
Le thread commun: Ces échecs se produisent parce que le LLM est considéré comme une autorité.
La solution: Les LLM proposent que les entraîneurs décident de l’écart entre le taux d’immatriculation et le taux de mortalité.
Qu’est-ce que le MCP est bon pour ( Lorsque il est utilisé correctement)
MCP est excellent pour:
- Développement des capacités: Énumération du temps d'exécution des signaux disponibles
- Composition de l'interprocessus: Nettoyage des limites entre les composants
- Interopérabilité des outils: Travaille avec n'importe quel client compatible MCP
- Modèle-Intégration agnostique: Swap LLMs sans changer les contrats de signalisation
MCP est non pas:
- Cadre d'agents
- Système de raisonnement
- Une couche de sécurité
- Une limite de confiance
Utiliser le MCP pour ce qu’il est: un protocole de câble pour la communication structurée entre les composants.
Où se termine MCP
MCP normalise la façon dont les modèles et outils échangent le contexte. Il ne définit pas qui est autorisé à agir, dans quelles conditionsM SK2 ou comment les décisions sont vérifiéesMSC3
D’autres approches existent pour formaliser ces contraintes.
Cet article n’est pas sur les ACP, mais sur le principe de conception. les transports et la gouvernance sont des questions distinctes.
MCP vous dit comment pour appeler un outil. Une autre chose doit décider si Dans mes systèmes, ,, il faut que ' soit le constrainer; dans les systèmes d’entreprise, ,, il pourrait être un moteur de politique.
Démonstration MCP vs Production MCP
| Aspect | Démonstration du CPM | Production du CMP M |
|---|---|---|
| Description de l'outil | Langue naturelleM SK1 détaillée | Minimale, schémaMSC4première |
| Qui décide de téléphoner | LLM | Orchestre |
| Format de réponse | FreeM SK1form text | Signaux types avec confiance |
| Validation | Aucune | CrossM SK2 Validation, seuils |
| LLM dépendance | Exigé | Enrichissement facultatif ≥ |
| Réjouir | NonM SK1déterministe | pleinement reproductible |
| Voie de vérification | Logs de conversation | Chaîne de provenance des signaux |
Clôture
MCP permet composition. Le déterminisme permet de la confiance. Les LLMs permettent fluence.
Mais seulement si:
La probabilité propose : et le déterminisme persisteM SK1
MCP sans constérateur est une injection rapide avec des étapes supplémentaires.
Faire de la synthèse l’étape finale. Rendre le LLM facultatif. Faire en sorte que tous les faits soient traçables
Conditions clés
- MCP (Protocole de contexte modèle): Protocole de câble pour la découverte d'outils et l'invocation entre les processus
- Connexeur: Logique déterministe qui évalue les propositions et décide ce qui persiste
- Signale: Réponse type avec confiance, provenanceM SK2 et indicateurs de preuve
- Propositions: Tout élément (LLM, Modèle localMSC3 héuristiqueM SK4 qui suggère des faits sans autorité
- Pointeur de preuve: Référence à la source vérifiable
Articles connexes
Précédent dans la série: Partie 1: Pourquoi les LLM échouent en tant que capteurs
Fondements théoriques:
- Pourquoi la structure bat Brilliance: Voyager, ToolformerM SK2 et DiSE - Le cas de la cognition répartie au-dessus d’une seule brilliance du modèle
- Documents d'outils - Travaux fondamentaux sur l’apprentissage des LLM à utiliser les outils
Mise en œuvre du modèle: