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
Tuesday, 20 January 2026
Det här är en del 2 av | " | LLM som komponenter Del 1: Varför LLM misslyckas som sensorer omfattade kategoriska felet med att använda LLMs för perception. Denna artikel omfattar kategoriskafeln i att använda MCP som arkitektur
" Hur bygger jag en MCP-server?
SDKs existerar. En LLM kan bygga en byggnadsställning på några sekunder . Den verkliga frågan är
Vilken roll ska en MCP-server spela in i ett system som inte måste ligga
Den knappa förmågan är nu att designa system runt MCP: auktoritet, tillstånd, kontrollerability, och deterministisk kontroll. MCP hanterar transport — dessa intressen bor någon annanstans
Denna artikel förklarar hur jag använder MCP utan agenter, självstyre, eller viber, och varför de flesta MCP-exempler återskapar samma problem som vi
MCP (Modella Kontextprotokollet) är ett kabelprotokoll. Den rör sig
Det gör det. inte:
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 är närmare OpenAPI än det är till en agent ram
Om du' använder MCP som ditt resonemangslayer, så har du redan gjort samma kategorisk fel som beskrivit i Del 1.
Om MCP är transport, så lever arkitekturen ovanför den.
Detta är grundregeln från Reduzerad RAG och Begränsad otydighet:
I mina system:
"Deterministiskt " här betyder inte regeln, -, styrd, ,, reproducerad, M SK2 och auditerad.
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
MCP-servern bestämmer inte.
Standardformatet för MCP är:
Detta misslyckas av förutsägbara anledningar:
Reframställa: MCP slutpunkter publicerar signaler
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
Varje MCP slutpunkt i mina system har:
Inget gratis-textberättigande . Nej " bästa ansträngning
exempel från produktionssystem:
| Signal | Förtroendes källa ♫ ♫ | ♫ Evidence Pointer ♫ | ||||||
|---|---|---|---|---|---|---|---|---|
| OCR: s extraktion av text | Florence | -2 | självförtroende | МSK3 | Bounding box koordinater | |||
| Bildklassificering | CLIP likvärdighetsvärde | Embedding | МSK3 | likvärdigkeitsvärdet | + | referensbild ID | ||
| Synkronisering av ljud | Fluttra ord | - | Tillförtroende på samma nivå | |||||
| Lautsprekeridentifikation | Diariseringscluster avstånd | Segmentgränser |
Regelen: Om ett resultat inte kan valideras, så är det inte accepterat.
Detta är samma princip som Designregler #5: fakta behöver bevis
De flesta MCP-lektioner visar:
Den saknande komponenten är konstrainer - den deterministiska logiken som
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
Verkliga konstrainer beslut:
MCP kopplar samman komponenter
Mina MCP-server fungerar fortfarande med den deaktiverade LLM
Det här är "'", det är inte en nedgraderad mode , .", primära mode.
Om ditt system slutar fungera när LLM inte är tillgängligt,
Kernfunktionen:
LLM blir ":".
LLM är inte:
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
Varför är detta viktigt:
| nytta | LLM | - | Erforderliga system | ||
|---|---|---|---|---|---|
| kostnaderna | Per, - sök-API-kostnaden, | ||||
| Tillförlitlighet | API avlägsning = system nedsluten ♫ | ♫ Kernfunktionen fortsätter ♫ | |||
| Testbarhet | Mock LLM-responser | Deterministiska antaganden | |||
| Tillit | " Modelet sa så. |
Jag behandlar MCP som en hårt gräns:
Detta kontrasterar med:
Varför är gränser viktiga:
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
Verkliga misslyckanden från obegränsad MCP-användning:
| Missbruksmöjlighet | orsak | dämpning | |||||
|---|---|---|---|---|---|---|---|
| verktygshallucinationer | Beschreibungsläcka in i LLM resonemang | Minimala beschreibungerM SK2 schemat-first design | |||||
| Över execution | Modellansöker verktygen " bara för att kolla" | Konsträngare sätter alla invocations | |||||
| Schemadrift | verktygsbeteende förändrasM SK1 schemat inte ' t | Versionerade schema | , | kontrakttest | |||
| Tysta partiella misslyckanden | verktygen återvänder partiella data , modell fortskrider | Tillförtroende tröskeln | , | komplettitetskontroller | |||
| LLMs övertygelse | Modell hanterar verktygsresultat som grunden till sanning. | ||||||
| Kapacitets escalation | Modell | " | Tresor | МSK2 | progressivt mer kraftfulla verktyg ♫ | Kapacitetsnivåer ♫ |
Den vanliga threaden: dessa misslyckanden händer eftersom LLM är tilltrolig som en auktoritet.
Fixen: LLMs föreslår att ",", Constrainers decide , och ",", fakta förblir.
MCP är utmärkt för:
MCP är inte:
Använd MCP för vad det är
MCP standardiserar hur modeller och verktyg utbyter sammanhang. Det definierar inte vem som är tillåten att agera
Det finns andra sätt att formalisera dessa begränsningar. ( som ibland beskrivs som handlingskapacitetsprotokoll.
Den här artikeln handlar inte om AKP, utan om designprincipen. transporter och styrning är separata problem.
MCP säger till dig hur att ringa ett verktyg. Något annat måste bestämma om du borde, i mina system, att, i företagssystemen, kanske det är en policymotor.
| Aspect | Demo MCP | Production MCP | ||||
|---|---|---|---|---|---|---|
| verktygsbeschreibunger | Naturligt språk, detaljerad | MinimaltM SK3 schemat | ||||
| Vem bestämmer sig för att ringa | LLM | |||||
| Reaktionsformat | Gratis-form text | Geskrivna signaler med självförtroende | ||||
| Validering | Ingen | Cross-ValideringM SK3 tröskel | ||||
| LLM beroende | Erforderligt ♫ ♫ | ♫ Optionell rikaring ♫ | ||||
| Spela om | Otrev - deterministisk | fullt återskapbar | ||||
| Revideringsspår | Konversation logs | Signalprovanskedjan |
MCP gör det möjligt sammansättning. Determinism gör det möjligt tillit. LLMs gör det möjligt skicklighet.
Men bara om:
sannolikheten föreslår — och determinismen förblir kvar
MCP utan konstrainer är bara en snabb injiction med extra steg.
Gör syntekniken till det sista steget. Gör LLM till en optional variant. Gör varje fakta spårbar
tidigare i serien: Del 1: Varför LLM misslyckas som sensorer
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.