Back to "MCP est un transport, Non une architecture"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ACP AI Architecture LLM MCP Patterns

MCP est un transport, Non une architecture

Tuesday, 20 January 2026

"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:

  1. Les descriptions d'outils deviennent des prompts: Le LLM déduit l’intention du libellé, non de la sémantique du schéma
  2. 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
  3. Les prompts de permission sont UX, non sûr: Un dialogue modal n’empêche pas le choix de l’outil erroné
  4. 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:

  1. Définir les outils
  2. Connexion à LLM
  3. 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:

  1. Réjouir: Reproduisez toute session en replayant les intrants
  2. Vérification: Chaque signal a une origine traçable
  3. Essais déterministes: Les mêmes intrants → les mêmes sorties
  4. 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:

Mise en œuvre du modèle:

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.