
Model Context Protocol (MCP) er en åben standard, der giver AI-modeller en universel måde at forbinde sig til eksterne værktøjer, datakilder og tjenester på. I stedet for at skrive skræddersyet integrationskode for hver kombination af model og værktøj, skriver du én MCP-server, som enhver kompatibel model kan bruge. Anthropic skabte MCP i slutningen af 2024, Linux Foundation styrer det nu, og OpenAI, Google og resten af økosystemet for agentbaseret AI har adopteret det. Her er alt, hvad du behøver at vide for at forstå, bygge og deploye MCP.
MCP ved et øjekast
Hvis du vil have den korte version, før du dykker ned i 6.000 ord med detaljer, så er den her.
| Attribut | Detalje |
|---|---|
| Fuldt navn | Model Context Protocol (MCP) |
| Skabt af | Anthropic (nov. 2024), nu styret af Linux Foundation / AAIF (dec. 2025) |
| Hvad det gør | Universel standard til at forbinde AI-modeller med værktøjer, data og tjenester |
| Problem det løser | Eliminerer M x N skræddersyede integrationer, ligesom USB-C til AI |
| Kerneprimitiver | Værktøjer, ressourcer, prompts og sampling |
| Transport | stdio (lokal udvikling), Streamable HTTP (produktion) |
| Godkendelse | OAuth 2.1 (krævet til HTTP-transport) |
| SDK'er | Python (FastMCP), TypeScript, Java, Kotlin, C# |
| Økosystemets størrelse | 10.000+ aktive servere (ifølge Linux Foundation, dec. 2025) |
| Store adoptører | Claude, ChatGPT, Gemini, Cursor, VS Code Copilot, Windsurf |
| Specifikationsstatus | Åben standard, under aktiv udvikling (2026-køreplan i gang) |
| Bedst til | AI-agenter, der skal interagere med virkelige værktøjer og data |
Lad os nu udfolde hver af disse punkter, startende med hvad MCP egentlig er, og det problem, der gjorde det nødvendigt.
Hvad er Model Context Protocol?
Model Context Protocol er en åben, JSON-RPC-baseret protokol, der standardiserer, hvordan AI-modeller opdager og interagerer med eksterne værktøjer og data. Tænk på det som HTTP til AI-integrationer – et fælles sprog, som enhver model og ethvert værktøj kan tale.
Du har sandsynligvis hørt USB-C-analogien, og den er nyttig op til et vist punkt: før USB-C skulle hver enhed have sit eget kabel. MCP gør det samme for AI, men analogien undervurderer det. USB-C transporterer kun data og strøm. MCP transporterer værktøjsdefinitioner, datatilgangsmønstre, genanvendelige prompt-skabeloner og lader endda servere anmode om fuldførelser fra modellen. Det er en rigere protokol, end en kabelmetafor antyder.
M x N-problemet, som MCP løser
Uden MCP kræver tilslutning af M modeller til N værktøjer M x N skræddersyede integrationer. Lad os sige, at du understøtter 5 LLM'er (Claude, GPT-4, Gemini, Llama, Mistral) og har brug for, at de får adgang til 10 værktøjer (GitHub, Postgres, Slack, Jira osv.). Det betyder 50 specialdesignede integrationslag, hver med sin egen godkendelse, fejlhåndtering og dataformatering.
Med MCP implementerer hver model MCP-klientprotokollen én gang, og hvert værktøj implementerer en MCP-server én gang. Nu er det 5 + 10 = 15 implementationer i stedet for 50. Tilføjer du en ny model? Den virker straks med alle 10 værktøjer. Tilføjer du et nyt værktøj? Alle 5 modeller kan bruge det.
En kort historie om MCP
Anthropic open-sourcede MCP i november 2024 sammen med SDK'er til Python og TypeScript samt connectors til Claude Desktop. Adoptionen gik hurtigt. OpenAI tilføjede MCP-understøttelse til ChatGPT i marts 2025. Google fulgte efter for Gemini i april 2025. I december 2025 donerede Anthropic MCP til Linux Foundations nye Agentic AI Foundation (AAIF), stiftet sammen med Block og OpenAI, hvilket gjorde MCP til en leverandørneutral standard med tværindustriel styring.
Hvad MCP IKKE er:
- Ikke en model eller et AI-framework (det er en protokol, ligesom HTTP)
- Ikke en erstatning for LangChain eller LlamaIndex (disse er orkestreringslag; MCP sidder under dem)
- Ikke begrænset til Anthropic eller Claude (det er modelagnostisk pr. design)
- Ikke det samme som funktionskald (mere om det i sammenligningsafsnittet)
Hvordan fungerer MCP? Arkitektur-dybdeanalyse
MCP har tre roller, og at blande dem sammen er den mest almindelige begynderfejl. Lad os få styr på forskellen.
<!-- IMAGE: MCP-arkitekturdiagram, der viser host-, klient- og serverroller med rigtige eksempler som Claude Desktop, GitHub MCP Server, Postgres MCP Server -->Host, klient og server – hvad er forskellen?
| Komponent | Rolle | Eksempler | Hvad det gør |
|---|---|---|---|
| Host | Applikationen, som brugeren interagerer med | Claude Desktop, Cursor, VS Code | Leverer UI'en, administrerer klientinstanser |
| Klient | Protokolhåndterer inde i hosten | Indbygget i host-applikationen | Opretholder en 1:1-forbindelse med én MCP-server |
| Server | Eksponerer værktøjer og data via MCP | GitHub-server, Postgres-server, Slack-server | Indpakker eksterne API'er/data i MCP-kompatible endpoints |
Her er et konkret eksempel: Du beder Claude Desktop om at tjekke dine åbne GitHub pull requests. Claude Desktop er hosten. Dens indbyggede MCP-klient åbner en forbindelse til GitHub MCP-serveren. Serveren kalder GitHub API'en, henter dine PR'er og returnerer resultaterne til klienten, som giver dem videre til modellen.
En enkelt host kan køre flere klienter, hver forbundet til en anden server. Det er sådan, Claude Desktop samtidigt kan få adgang til GitHub, din Postgres-database og Slack – tre separate MCP-servere, tre separate klientforbindelser, én host.
Hvordan beskeder flyder (JSON-RPC 2.0)
Al MCP-kommunikation bruger JSON-RPC 2.0, en letvægts request/response-protokol. Her er hvordan en tools/list-udveksling ser ud på netværksniveau:
// Client request: "What tools do you have?"
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}
// Server response: one tool available
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a city",
"inputSchema": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
]
}
}Modellen læser disse værktøjsdefinitioner, beslutter hvornår de skal kaldes baseret på brugerens anmodning, og klienten sender en tools/call-anmodning tilbage til serveren med de passende argumenter.
Forbindelsens livscyklus
Enhver MCP-session følger den samme livscyklus:
- Initialisering, klienten sender kapaciteter, serveren svarer med sine egne
- Kapacitetsforhandling, begge sider bliver enige om understøttede funktioner (værktøjer, ressourcer, prompts, sampling)
- Klar, forbindelsen er aktiv; anmodninger flyder begge veje
- Anmodninger/svar,
tools/call,resources/readosv. - Nedlukning, ren afbrydelse
Denne håndtryk sikrer fremadrettet kompatibilitet. Hvis en server tilføjer en ny primitiv, ignorerer ældre klienter den elegant i stedet for at crashe.
MCP-primitiver: Værktøjer, ressourcer, prompts og sampling
MCP definerer fire primitiver, og forståelsen af, hvem der kontrollerer hver enkelt, er nøglen til at designe gode MCP-servere.
| Primitiv | Hvem kontrollerer det | Retning | Eksempel | Brugstilfælde |
|---|---|---|---|---|
| Værktøjer | Modellen beslutter hvornår de kaldes | Klient -> Server | create_github_issue | Handlinger AI'en tager autonomt |
| Ressourcer | Applikation/bruger vælger | Klient -> Server | file://project/README.md | Data knyttet til konteksten |
| Prompts | Bruger udløser | Klient -> Server | code_review skabelon | Genanvendelige interaktionsmønstre |
| Sampling | Server anmoder om fuldførelse | Server -> Klient | Server beder modellen om at opsummere | Agent-loops, hvor serveren bruger LLM'en |
Værktøjer (modelkontrollerede)
Værktøjer er funktioner, som modellen kan kalde. Serveren erklærer dem med et navn, en beskrivelse og en JSON Schema-inputdefinition. Modellen læser disse definitioner, og når en brugers anmodning kræver det, beslutter modellen at invocere værktøjet.
// Client sends tools/call request
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_weather",
"arguments": { "city": "Berlin" }
}
}Hvis du har brugt OpenAI-funktionskald, vil værktøjer føles bekendte, men de er standardiserede på tværs af alle MCP-kompatible modeller.
Ressourcer (applikationskontrollerede)
Ressourcer er read-only dataendpoints. I modsætning til værktøjer beslutter modellen ikke selv at hente en ressource; host-applikationen eller brugeren knytter eksplicit ressourcer til samtalekonteksten. Tænk på dem som GET-endpoints: postgres://mydb/users/schema, file://docs/api-reference.md.
Ressourcer understøtter abonnementer via resources/subscribe, så klienten kan blive notificeret, når data ændres.
Prompts (brugerkontrollerede)
Prompts er genanvendelige skabeloner, som en MCP-server eksponerer. En code_review-prompt kan acceptere en filsti og generere en struktureret review-anmodning. Brugeren (eller host-UI'en) udløser prompts eksplicit; de bliver ikke auto-invokeret af modellen.
Sampling (serverinitieret), avanceret
Her er den primitiv, de fleste guides springer over. Sampling lader serveren bede klienten om at generere en fuldførelse ved hjælp af LLM'en. Dette vender den sædvanlige flow om: i stedet for at modellen kalder et værktøj, kalder værktøjet modellen.
Hvorfor? Agent-loops. Forestil dig en MCP-server, der behandler supportbilletter. Den læser billetten (en ressource), bruger sampling/createMessage til at bede modellen om et resumé og bruger derefter dette resumé til at rute billetten via et værktøj. Serveren orkestrerer et flertrins-workflow ved hjælp af modellens intelligens.
Sampling er begrænset af host-applikationen; brugeren skal godkende det, og hosten kontrollerer, hvad serveren kan anmode om. Dette forhindrer ukontrollerede loops og opretholder menneskelig tilsyn.
Byg din første MCP-server: Python og TypeScript side om side
Nok teori. Lad os bygge en fungerende MCP-server, der eksponerer et get_weather-værktøj. Jeg viser både Python og TypeScript, så du kan sammenligne udvikleroplevelsen og vælge den stack, der passer til dit projekt.
Python med FastMCP
FastMCP er det officielle højniveaus Python-SDK. Det håndterer al protokollens infrastruktur, så du kan fokusere på din værktøjslogik.
# Install FastMCP
pip install fastmcp# weather_server.py
from fastmcp import FastMCP
mcp = FastMCP("Weather Server")
@mcp.tool()
def get_weather(city: str) -> str:
"""Get the current weather for a city."""
# In production, call a real weather API here
weather_data = {
"Berlin": "Cloudy, 12°C",
"Tokyo": "Sunny, 22°C",
"New York": "Rainy, 8°C",
}
return weather_data.get(city, f"No data for {city}")
if __name__ == "__main__":
mcp.run()Det var det – 15 linjer. FastMCP udleder værktøjets input-schema fra Python-typehintsene og docstringen. Ingen JSON Schema-boilerplate.
TypeScript med det officielle SDK
TypeScript SDK (@modelcontextprotocol/sdk) er lidt mere eksplicit, men giver dig fuld kontrol over schemadefinitionerne.
# Install the SDK and Zod for schema validation
npm install @modelcontextprotocol/sdk zod// weather-server.ts
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: "Weather Server",
version: "1.0.0",
});
server.tool(
"get_weather",
"Get the current weather for a city",
{ city: z.string() },
async ({ city }) => {
const weatherData: Record<string, string> = {
Berlin: "Cloudy, 12°C",
Tokyo: "Sunny, 22°C",
"New York": "Rainy, 8°C",
};
return {
content: [
{ type: "text", text: weatherData[city] ?? `No data for ${city}` },
],
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);TypeScript-versionen bruger Zod-schemas i stedet for typehints og returnerer strukturerede indholdsblokke. Mere verbose, men typesikkerheden er fremragende.
Forbind til Claude Desktop
For at forbinde enten server til Claude Desktop skal du tilføje den til din claude_desktop_config.json:
{
"mcpServers": {
"weather-python": {
"command": "python",
"args": ["weather_server.py"],
"cwd": "/path/to/your/project"
},
"weather-typescript": {
"command": "npx",
"args": ["tsx", "weather-server.ts"],
"cwd": "/path/to/your/project"
}
}
}Genstart Claude Desktop, og begge vejrsservere vises på værktøjslisten. Spørg "Hvad er vejret i Berlin?", og modellen kalder dit get_weather-værktøj automatisk.
Test med MCP Inspector
Før du forbinder din server til en host, skal du teste den isoleret med MCP Inspector:
npx @modelcontextprotocol/inspector python weather_server.pyInspectoren åbner en browser-UI, hvor du kan se opdagede værktøjer, invoke dem manuelt og inspicere de JSON-RPC-beskeder, der går frem og tilbage. Det er det absolut bedste debuggingsværktøj i MCP-økosystemet – brug det tidligt og ofte.
MCP-transports: stdio til udvikling, Streamable HTTP til produktion
MCP-beskeder skal have en måde at rejse mellem klient og server på. Det er transportlaget, og valget af det rigtige er vigtigt.
| Transport | Brugstilfælde | Fordele | Ulemper | Status |
|---|---|---|---|---|
| stdio | Lokal udvikling, personlige værktøjer | Nul konfiguration, simpelt, hurtigt | Kun samme maskine | Aktiv |
| Streamable HTTP | Produktion, remote servere, multi-bruger | Virker over netværk, understøtter streaming via SSE, stateless-venlig | Kræver HTTP-server, behov for auth | Aktiv (2025-spec) |
| HTTP+SSE (gammel) | Legacy remote transport | Var den oprindelige remote mulighed | Erstattet af Streamable HTTP | Forældet |
stdio fungerer ved at spawn'e MCP-serveren som en underproces og kommunikere over stdin/stdout. Det er det, du brugte i guiden ovenfor; ingen porte, ingen TLS, ingen auth nødvendig. Perfekt til udvikling og single-user lokale værktøjer.
Streamable HTTP er produktions-transporten, tilføjet i 2025-spec-opdateringen. Klienter sender standard HTTP POST-anmodninger til serveren. Serveren kan svare synkront eller åbne en SSE-stream for længere operationer. Det er stateless-venligt, fungerer bag load balancere og understøtter standard HTTP-godkendelse.
Hvis du ser ældre tutorials, der nævner "HTTP+SSE" som to separate transports (én til sending, én til modtagelse), er det den forældede tilgang. Streamable HTTP konsoliderer begge til en enkelt, renere mekanisme.
Beslutningen er ligetil: brug stdio, når du udvikler lokalt, skift til streamable-http, når du deployer til andre.
// Switching from stdio to Streamable HTTP in TypeScript
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
const transport = new StreamableHTTPServerTransport({ port: 3001 });
await server.connect(transport);MCP vs. funktionskald vs. REST APIs – hvornår skal du bruge hvad?
Dette er spørgsmålet, der dukker op i hver MCP-diskussion, så lad os afgøre det med en direkte sammenligning.
| Funktion | MCP | Funktionskald | REST APIs |
|---|---|---|---|
| Standardisering | Åben protokol, modelagnostisk | Per-leverandør (OpenAI, Anthropic har hver deres) | Universel |
| Værktøjsopdagelse | Indbygget (tools/list) | Ingen, du sender schemas per anmodning | Ingen, kræver docs eller OpenAPI-spec |
| Datatilgang | Ressource-primitiv | Ikke understøttet | Standard endpoints |
| Prompt-skabeloner | Prompt-primitiv | Ikke understøttet | Ikke relevant |
| Auth | OAuth 2.1 (spec-niveau) | Leverandør API-nøgle | Varierer (API-nøgler, OAuth osv.) |
| Streaming | SSE via Streamable HTTP | Leverandørafhængig | Varierer |
| Multi-model | Virker med enhver MCP-kompatibel model | Låst til én leverandørs API | Modelagnostisk (med glue code) |
| Server-økosystem | 10.000+ forudbyggede servere | N/A | Millioner af APIs |
| Opsætningskompleksitet | Kør en MCP-server | Send JSON i API-kald | HTTP-klient |
| Bedst til | Multi-model, multi-værktøjs agentmiljøer | Simpel single-model apps med få værktøjer | Service-til-service kommunikation |
Når funktionskald er nok
Hvis du har færre end 5 værktøjer og bruger én model, er funktionskald simplere. Du definerer dine værktøjsschemas inline med hvert API-kald, modellen returnerer funktionsnavnet og argumenterne, og du eksekverer dem i din applikationskode. Ingen server at køre, ingen protokol at lære. Til en chatbot, der tjekker ordrestatus og slår FAQs op, er funktionskald helt fint.
Når MCP bliver det værd
MCP retfærdiggør sin kompleksitet, når:
- Du understøtter flere LLM'er og ikke vil omskrive værktøjsdefinitioner for hver leverandør
- Du har brug for værktøjsopdagelse, modellen kan spørge, hvad der er tilgængeligt, i stedet for at du hardcoder schemas
- Du ønsker ressourcer og prompts, ikke bare værktøjskald
- Du bygger AI-agenter, der koordinerer autonomt og har brug for et standardiseret integrationslag
- Dit team vokser, og forskellige ingeniører bygger forskellige værktøjer; MCP lader dem arbejde uafhængigt
Dom: MCP vinder, når du har brug for standardiseret, multi-model værktøjsadgang. Funktionskald vinder til simple, single-model brugstilfælde. REST APIs forbliver det rigtige valg til traditionel service-til-service kommunikation, der ikke involverer en LLM.
MCP-økosystemet i 2026: Hvem understøtter det, og hvad er tilgængeligt
MCP gik fra at være et Anthropic-sideprojekt til en industristandard på under 18 måneder. Her er status.
Hvilke LLM'er understøtter MCP?
| LLM | MCP-understøttelse | Siden | Noter |
|---|---|---|---|
| Claude | Naturlig, fuld understøttelse | Nov. 2024 | Skabte MCP; dybeste integration |
| ChatGPT | Officiel understøttelse | Mar. 2025 | Via OpenAIs MCP-integration |
| Gemini | Officiel understøttelse | Apr. 2025 | Google Cloud MCP-servere til Google-tjenester |
| Llama / Open-Source | Via adapters | 2025 | LangChain, LlamaIndex og custom adapters |
| Copilot (VS Code) | Naturlig i agent-tilstand | 2025 | Microsoft leverer MCP-understøttelse i VS Code |
Populære MCP-servere, det er værd at kende
| Kategori | Server | Hvad det gør |
|---|---|---|
| Kode | GitHub | PR'er, issues, repos, kodesøgning |
| Kode | GitLab | Merge requests, pipelines, projektledelse |
| Database | PostgreSQL | Schema-inspektion, query-eksekvering |
| Database | MySQL | Query- og schema-adgang |
| SaaS | Slack | Kanalbeskeder, søgning, notifikationer |
| SaaS | Google Drive | Filadgang, søgning, dokumentlæsning |
| SaaS | Notion | Sidelæsning, databasequeries |
| Søgning | Brave Search | Websøgeresultater |
| DevOps | Docker | Containeradministration |
| Infra | AWS | Cloud-resourceadministration |
Linux Foundations AAIF-annonce citerede 10.000+ aktive servere og 97 millioner månedlige SDK-downloads på tidspunktet for MCP-donationen i december 2025. Økosystemet er ikke længere eksperimentelt; det er produktionsklart.
MCP Apps er en ny primitiv introduceret i januar 2026. Det lader servere levere interaktive UI-komponenter, der renderes inde i host-applikationen. Stadig tidligt, men det signalerer MCP's evolution fra en dataprotokol til et fuld agent-applikationsframework. Værd at holde øje med.
Styring: Fra Anthropic til Linux Foundation
MCP styres af Agentic AI Foundation (AAIF) under Linux Foundation, stiftet af Anthropic, Block og OpenAI. Dette er vigtigt for enterprise-adoption: MCP er ikke bundet til én leverandørs roadmap. 2026-køreplanens prioriteter er transportevolution, agent-til-agent kommunikation (en ny "Tasks"-primitiv), styringsmodenhed og enterprise-readiness.
For teams, der bygger produktions-AI-systemer, integrerer frameworks som et autonomt AI-agent framework som OpenClaw allerede med MCP-servere for at give agenter virkelige evner.
MCP-sikkerhed: OAuth 2.1, trusler og en praktisk tjekliste
Sikkerhed er det område i MCP-økosystemet, der har mest jord at dække. Og tallene maler et skarpt billede.
88%-problemet: Hvorfor de fleste MCP-servere er usikre
Astrix Security analyserede 5.200+ open-source MCP-serverimplementationer og fandt, at 88% kræver legitimationsoplysninger af en art, men 53% relies on insecure long-lived static secrets like API keys and personal access tokens hardcoded in config files. Kun 8,5% implementerer OAuth.
Det betyder, at det overvældende flertal af MCP-servere i naturen bruger den autentificeringsækvivalent, der svarer til at tape husnøglen til yderdøren.
OAuth 2.1 til MCP-servere
MCP-specifikationen kræver OAuth 2.1 for alle HTTP-baserede servere fra juni 2025-opdateringen. Flowet fungerer sådan: MCP-klienten initierer en OAuth 2.1-autorisationsflow med serveren, opnår et scoped access token og inkluderer det med hver efterfølgende anmodning. PKCE (Proof Key for Code Exchange) er påkrævet for alle klienter, ingen undtagelser.
Hvis du bygger en MCP-server, der kører over Streamable HTTP, er OAuth 2.1 ikke valgfrit. Det er spec-påkrævet.
Trusselsmodel: Hvad kan gå galt
Fire trusler fortjener opmærksomhed i enhver MCP-deployment:
- Prompt-injektion via værktøjer: En ondsindet eller kompromitteret datakilde returnerer indhold designet til at manipulere modellen. Hvis et værktøj henter en webside, og siden indeholder skjulte instruktioner, kan modellen udføre dem.
- Confused deputy-angreb: Modellen invokerer et værktøj med bredere tilladelser, end brugeren intendede. Hvis MCP-serveren har admin-adgang til en database, kunne modellen teoretisk set droppe en tabel.
- Token-koncentrationsrisiko: En MCP-server, der holder API-nøgler til GitHub, Slack og din produktionsdatabase, er et enkelt højværdimål. Kompromitter én server, kompromitter alt, den forbinder til.
- Usikker transport: At køre en HTTP MCP-server uden TLS eksponerer hver anmodning, inklusive OAuth-tokens og følsomme data, i plaintext.
Sikkerhedstjekliste til produktions-MCP
- Implementer OAuth 2.1 for enhver server eksponeret over HTTP. Ingen statiske API-nøgler i konfigurationsfiler.
- Anvend least-privilege scoping. Hvis dit værktøj kun læser data, bør serverens credentials være read-only. Giv ikke et rapporteringsværktøj write-adgang.
- Isoler credentials. Hver MCP-server bør have sine egne scoped tokens. Del ikke et enkelt "god-token" på tværs af servere.
- Håndhæv TLS overalt. Streamable HTTP uden HTTPS er et automatisk no-go til produktion.
- Valider og sanitiser værktøjsoutputs. Behandle data returneret af værktøjer på samme måde, som du ville behandle brugerinput – stol ikke blindt på det.
- Rate-limit værktøjsinvokationer. Et ukontrolleret agent-loop, der kalder et værktøj tusindvis af gange, kan udtømme API-kvoter eller forårsage utilsigtede bivirkninger.
- Auditer og log hvert værktøjskald. Inkluder request IDs, timestamps, den kaldende model og værktøjsargumenterne. Du har brug for dette til debugging og til sikkerhedsincidentrespons.
Debugging af MCP: Inspector, logging og almindelige fejl
Du vil støde på fejl. Det gør alle udviklere. Her er hvordan du fikser dem hurtigt.
MCP Inspector er det officielle debuggingsværktøj og din første forsvarslinje. Det forbinder til enhver MCP-server, opdager dens værktøjer/ressourcer/prompts og lader dig invoke dem manuelt, mens det viser den rå JSON-RPC-trafik.
# Launch Inspector against your Python server
npx @modelcontextprotocol/inspector python weather_server.py
# Or against a TypeScript server
npx @modelcontextprotocol/inspector npx tsx weather-server.tsInspectoren åbner en browserbaseret UI med faner for Værktøjer, Ressourcer, Prompts og et notifications-pane. Du kan kalde ethvert værktøj med custom arguments og se præcis, hvilken JSON der går over ledningen. Brug det, før du forbinder til en host-applikation; det er meget lettere at debugge serveren isoleret.
Almindelige fejl og fixes
- "Server not found" i Claude Desktop: Næsten altid et stiproblem i
claude_desktop_config.json. Dobbelttjek atcommandresolver til en rigtig binary, og atcwdpeger på den korrekte mappe. På macOS skal du bruge absolutte stier. - Værktøjs-schema-valideringsfejl: Hvis modellen sender argumenter, der ikke matcher værktøjets
inputSchema, afviser serveren kaldet. Tjek at dine schematyper matcher, hvad modellen forventer. Zod (TypeScript) og typehints (Python) fanger de fleste af disse på definitionstidspunktet. - Transport-forbindelsesafbrydelser: For
stdiobetyder dette normalt, at serverprocessen crashe. Tjek stderr-output. For Streamable HTTP skal du verificere timeout-indstillinger; langvarige værktøjer kan overskride standard HTTP-timeouts. - "Permission denied" eller 401-fejl: OAuth-scope for snævert. Serveren afviser tokenet, fordi det ikke har de nødvendige tilladelser. Udvid scopet, men kun så meget som værktøjet faktisk har brug for.
Logging best practices
Strukturer dine logs med request IDs, så du kan spore en enkelt brugeranmodning på tværs af MCP-klienten, serveren og eventuelle downstream-API'er. Log hver tools/call-invokation med værktøjsnavn, argumenter, responstid og resultatstatus. I produktion skal du sende disse logs til en observabilitetsplatform; når noget går galt kl. 3 om natten, vil du være glad for, at du gjorde det.
Hvordan Techsy bygger med MCP
Vi har integreret MCP i klientprojekter siden starten af 2025, og det mønster, vi ser oftest, er dette: Et team har en AI-funktion, der virker med én model og en håndfuld værktøjer, men de planlægger at scale – flere modeller, flere datakilder, flere agentevner. Det er vendepunktet, hvor MCP begynder at betale sig.
Vores tilgang følger tre trin:
- Vurdér fit. Ikke hvert projekt har brug for MCP. Hvis du kalder to værktøjer fra en enkelt model, er funktionskald simplere, og det vil vi fortælle dig. MCP giver mening, når du forbinder 3+ datakilder, understøtter flere modeller eller bygger agent-workflows, hvor værktøjer skal være discoverable.
- Byg og test servere isoleret. Vi udvikler custom MCP-servere til hver datakilde – interne databaser, SaaS-API'er, proprietære tjenester – og validerer dem med MCP Inspector, før vi forbinder til nogen host.
- Deploy med Streamable HTTP og OAuth 2.1. Til produktion kører vi MCP-servere som containeriserede services bag TLS, med scoped OAuth-tokens og struktureret logging fra dag ét. Ingen statiske secrets.
De mest almindelige integrationer, vi bygger: Forbindelse af AI-assistenter til interne Postgres-databaser, bygning af custom MCP-servere til klient-SaaS-platforme og migration af teams fra spredte funktionskalds-setups til en standardiseret MCP-arkitektur.
Bygger du AI-drevne værktøjer, der skal forbinde til din infrastruktur? Vi hjælper teams med at arkitekture og implementere MCP-integrationer. Få en gratis konsultation
Ofte stillede spørgsmål om MCP
Hvad er Model Context Protocol (MCP)?
MCP er en åben standard, oprindeligt skabt af Anthropic og nu styret af Linux Foundation, der definerer, hvordan AI-modeller forbinder sig til eksterne værktøjer, datakilder og tjenester. Det standardiserer integrationslaget, så én MCP-server virker med enhver kompatibel model, ligesom et universelt stik til AI.
Hvordan fungerer MCP?
MCP bruger en tredelt arkitektur: en host-applikation (som Claude Desktop eller Cursor), en MCP-klient inde i hosten, der administrerer forbindelser, og MCP-servere, der eksponerer værktøjer og data. Al kommunikation bruger JSON-RPC 2.0-beskeder over enten stdio (lokalt) eller Streamable HTTP (remote).
Hvad bruges MCP til?
Almindelige brugstilfælde inkluderer forbindelse af AI-assistenter til databaser (Postgres, MySQL), integration med kodeplatforme (GitHub, GitLab), adgang til SaaS-værktøjer (Slack, Notion, Google Drive) og bygning af autonome AI-agenter, der skal interagere med virkelige tjenester.
Er MCP det samme som funktionskald?
Nej. Funktionskald er modelspecifikt (OpenAIs format adskiller sig fra Anthropics) og per-anmodning; du sender værktøjschemas med hvert API-kald. MCP er en standardiseret protokol, der virker på tværs af modeller, understøtter værktøjsopdagelse og inkluderer ressourcer og prompts udover blot funktionsudførelse.
Hvad er MCP-servere?
MCP-servere er programmer, der eksponerer værktøjer, ressourcer og prompts til AI-modeller via MCP-protokollen. De indpakker eksterne API'er og datakilder i en standardiseret grænseflade. Eksempler inkluderer GitHub MCP-serveren (til PR- og issue-administration) og Postgres MCP-serveren (til databasequeries).
Hvordan bygger jeg en MCP-server?
Brug Python med FastMCP (pip install fastmcp) eller TypeScript med det officielle SDK (npm install @modelcontextprotocol/sdk). Definer dine værktøjer som dekorerede funktioner (Python) eller registrerede handlers (TypeScript), og kør derefter serveren. Se tutorial-afsnittet ovenfor for komplet fungerende kode, eller følg vores trin-for-trin guide til at bygge en MCP-server fra bunden for en fuld gennemgang.
Er MCP sikkert?
Protokollen selv understøtter OAuth 2.1 til godkendelse og scoped tilladelser. Men Astrix Security-research fandt, at 88% af eksisterende MCP-serverimplementationer relies on static secrets rather than OAuth. Protokollen er sikker pr. design, men de fleste real-world deployments har ikke hentet ind endnu.
Hvilke LLM'er understøtter MCP?
Claude har naturlig MCP-understøttelse siden skabelsen i november 2024. ChatGPT tilføjede understøttelse i marts 2025, og Gemini fulgte efter i april 2025. Open-source modeller kan bruge MCP gennem adapters i LangChain og LlamaIndex.
Hvad er forskellen mellem MCP og en REST API?
REST APIs er designet til generel service-til-service kommunikation. MCP er designet specifikt til AI-modelinteraktion; det inkluderer værktøjsopdagelse, schemaforhandling, ressourceadgang og prompt-skabeloner, som REST ikke har. Du ville ikke erstatte dine REST APIs med MCP; de tjener forskellige lag.
Hvem vedligeholder MCP nu?
Linux Foundations Agentic AI Foundation (AAIF), dannet i december 2025, styrer MCP. Det blev stiftet af Anthropic, Block og OpenAI. Denne leverandørneutrale styring er en vigtig grund til, at enterprises adopterer MCP.
Hvad er Streamable HTTP i MCP?
Streamable HTTP er produktions-transportmekanismen tilføjet i 2025 MCP-spec-opdateringen. Den erstatter den ældre HTTP+SSE-transport med et renere design: klienter sender HTTP POST-anmodninger, og servere kan svare synkront eller via SSE-streaming. Det fungerer bag load balancere og understøtter standard HTTP-godkendelse.
Hvor mange MCP-servere findes der?
Linux Foundation citerede 10.000+ aktive servere og 97 millioner månedlige SDK-downloads, da MCP blev doneret til AAIF i december 2025. Økosystemet spænder over databaser, kodeværktøjer, SaaS-integrationer, søgemaskiner og cloud-infrastrukturudbydere.
Konklusion
MCP er gået fra at være Anthropics open-source-eksperiment til industristandardprotokollen for at forbinde AI-modeller med værktøjer på lidt over et år. Her er hvad der betyder noget:
- MCP løser M x N-problemet: én server virker med enhver kompatibel model, én klient virker med enhver server
- Du kan bygge en fungerende MCP-server på under 50 linjer Python (FastMCP) eller TypeScript
- Brug stdio til udvikling, Streamable HTTP til produktion: transportvalget er ligetil
- Sikr dine servere med OAuth 2.1: 88% af nuværende implementationer gør det ikke, og det er en reel risiko
- Økosystemet er produktionsklart: 10.000+ servere, alle store LLM'er, leverandørneutral styring under Linux Foundation
Med blikket fremad fokuserer 2026-køreplanen på agent-til-agent kommunikation via en ny Tasks-primitiv, forbedret enterprise-sikkerhed og MCP Apps til interaktiv server-drevet UI. MCP er ikke længere bare en protokol til værktøjsadgang; det bliver infrastrukturelaget for agentbaseret AI.
Start med tutorial-koden ovenfor, test den i MCP Inspector, og forbind den til Claude Desktop. Du vil have en fungerende MCP-integration på under en time.
Kilder
- MCP Specification (2025-11-25)
- MCP Authorization Specification
- MCP Transports Specification
- MCP Inspector Documentation
- Introducing the Model Context Protocol, Anthropic
- Donating MCP to the Linux Foundation, Anthropic
- Linux Foundation AAIF Announcement
- Google Cloud MCP Support
- FastMCP Python SDK
- MCP TypeScript SDK
- Astrix Security: State of MCP Server Security 2025
- MCP 2026 Roadmap