MCP Server Guide
Model Context Protocol (MCP) er Anthropics åbne standard for at give sprogmodeller sikker adgang til data og handlinger. Her er hvordan MCP-servere fungerer, hvorfor de er blevet et de facto-standardformat, og hvordan du bygger din første.
Hvad er MCP
Model Context Protocol blev lanceret af Anthropic i november 2024 som et åbent standardformat for kommunikation mellem sprogmodeller og eksterne systemer. Problemet det løser er velkendt: hver LLM-applikation havde tidligere sin egen måde at integrere tools, data-kilder og handlinger på. Det betød at en integration til fx Google Drive skulle bygges én gang til ChatGPT, én gang til Claude, én gang til hvert enkelt agent-framework.
MCP standardiserer denne kommunikation. En MCP-server annoncerer hvilke resources (læse-data), tools (handlinger) og prompts (genbrugelige templates) den udbyder. Enhver MCP-klient — hvad enten det er Claude Desktop, Claude Code, Cursor, Windsurf eller din egen applikation — kan tale med serveren via samme protokol.
I 2025 tilsluttede OpenAI, Google og Microsoft sig standarden. Det betyder at en MCP-server du bygger i dag, kan bruges på tværs af de tre store økosystemer uden ændringer i din server-kode.
Sådan fungerer protokollen
MCP bygger på JSON-RPC 2.0. Serveren kører som en selvstændig proces og kommunikerer med klienten via en af tre transport-metoder: stdio (lokal proces), Server-Sent Events over HTTP (SSE) eller streamable HTTP. Klienten starter serveren, forhandler capabilities og udveksler beskeder for hver tool-invocation.
De centrale koncepter er:
| Koncept | Formål | Eksempel |
|---|---|---|
| Resources | Data modellen kan læse | Fil-indhold, database-rows, API-svar |
| Tools | Handlinger modellen kan udføre | Send email, opret PR, kør SQL-query |
| Prompts | Genbrugelige prompt-templates | Code review, sammenfatning, oversættelse |
| Sampling | Server beder klient om LLM-kald | Server-side generering uden egen API-nøgle |
Byg en MCP-server
Den officielle SDK findes til Python, TypeScript, Java, Kotlin, C#, Rust og Swift. Nedenfor er et minimalt eksempel i Python der eksponerer et enkelt tool: en vejrudsigt-lookup.
from mcp.server.fastmcp import FastMCP
import httpx
mcp = FastMCP("weather-server")
@mcp.tool()
async def get_weather(city: str) -> str:
"""Hent aktuel vejrudsigt for en given by."""
async with httpx.AsyncClient() as client:
r = await client.get(
f"https://api.open-meteo.com/v1/forecast",
params={"latitude": 55.68, "longitude": 12.57, "current_weather": True}
)
data = r.json()
temp = data["current_weather"]["temperature"]
return f"{city}: {temp}°C"
if __name__ == "__main__":
mcp.run(transport="stdio")For at bruge serveren i Claude Desktop tilføjer du den til konfigurationsfilen:
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["/path/to/weather_server.py"]
}
}
}Populære MCP-servere
Der findes hundredvis af færdige MCP-servere. Anthropic vedligeholder en katalog på modelcontextprotocol.io, og community-projekter samler flere hundrede yderligere på GitHub. Nogle af de mest brugte:
Filesystem
Læs og skriv filer i en whitelisted mappe. Praktisk til at lade Claude arbejde med lokale projekter uden at give fuld shell-adgang.
GitHub / GitLab
Læs issues, opret pull requests, commit ændringer. Bruges intensivt i AI-assisted development.
Postgres / SQLite
Kør SELECT-queries mod en database. Modellen kan udforske schemaet og skrive queries baseret på strukturen.
Slack / Notion / Linear
Læs beskeder, opret tasks, opdater sider. Anvendes til at bygge assistenter der interagerer med kollaborative værktøjer.
Puppeteer / Playwright
Browser-automation. Modellen kan hente websider, udfylde formularer og tage screenshots.
Sikkerhed og faldgruber
MCP-servere har fuld adgang til hvad du giver dem. En filsystem-server kan læse og slette filer, en database-server kan køre destruktive queries hvis den ikke er begrænset til read-only. Kør aldrig ukendte MCP-servere fra tilfældige GitHub-repos uden at gennemgå koden først.
Prompt injection er en reel risiko. Hvis en MCP-server henter data fra utroværdige kilder (fx web-sider), kan indholdet indeholde instruktioner der forsøger at manipulere modellen til at kalde andre tools på uønsket måde. Beskyt følsomme tools bag eksplicit brugerbekræftelse i klienten.
Rate limiting og logging bør bygges ind i serveren, især hvis den giver adgang til betalte API'er. En løbsk agent-loop kan generere hundredvis af tool-calls på få minutter og brænde budget hurtigt.
MCP vs. traditionel function calling
Function calling har eksisteret i OpenAIs API siden 2023. Forskellen på MCP og function calling er at MCP standardiserer selve transport-laget og livscyklussen: hvordan tools opdages, hvordan de kaldes på tværs af klienter, og hvordan servere kan opdatere deres capabilities dynamisk.
Med function calling skal du selv definere tools i din prompt-konstruktion for hver applikation. Med MCP definerer du dem én gang i en server, og enhver klient der taler MCP kan bruge dem. Det er samme værdi som REST API'er tilbød da hvert firma havde sin egen proprietære integration.