Guide · Teknik

Vad är MCP – och hur använder jag det tillsammans med AI och externa datakällor?

En AI-modell som inte når era system kan bara gissa. MCP är den öppna standarden som ger den kontrollerad åtkomst till databaser, dokument och affärssystem — utan en ny integration per verktyg. Här är hur det fungerar i praktiken.

14 min läsningAI Hackers

Kort svar: vad MCP är

MCP – Model Context Protocol – är en öppen standard för hur en AI-applikation hämtar information från och utför åtgärder i andra system. I stället för att varje AI-verktyg behöver sin egen specialbyggda koppling till er databas, ert CRM och ert dokumentarkiv, beskriver MCP ett gemensamt sätt att presentera de förmågorna. Ett verktyg som talar MCP kan använda vilken MCP-server som helst.

Praktiskt betyder det att ni bygger kopplingen till ert eget system en gång, och sedan kan använda den från Claude, från Codex, från en egen agent — utan att skriva om något. Protokollet togs fram av Anthropic och släpptes öppet; det utvecklas i dag i det öppna, med en publik specifikation och en formell process för ändringar.

Problemet MCP löser

En språkmodell kan bara resonera om det den har i sin kontext. Utan koppling till era system är den hänvisad till vad någon klistrar in i chatten — och till sin träningsdata, som per definition är gammal och inte vet någonting om er verksamhet.

Det uppenbara svaret är att bygga integrationer. Problemet är hur snabbt det växer: med fem AI-verktyg och åtta interna system pratar man i värsta fall om fyrtio separata kopplingar, var och en med sin egen autentisering, sitt eget felhanteringsbeteende och sin egen förvaltning. Varje nytt verktyg multiplicerar arbetet i stället för att lägga till det.

MCP bryter den multiplikationen. Systemen exponeras en gång som MCP-servrar, verktygen talar ett protokoll, och de två sidorna kan bytas ut oberoende av varandra. Det är samma idé som gjorde att skrivardrivrutiner slutade vara ett problem: standardisera gränssnittet, inte parterna.

Så fungerar det: värd, klient och server

Tre roller räcker för att förstå hela protokollet.

RollVad det ärExempel
VärdApplikationen användaren faktiskt sitter i. Den håller i modellen och avgör vad som får hända.Claude Code, Claude-appen, Codex, en egen agent
KlientVärdens anslutning till en enskild server. En klient per server, isolerade från varandra.Skapas åt er av värden — sällan något ni själva skriver
ServerProgrammet som exponerar era förmågor. Det är den här biten ni bygger eller installerar.En server mot er Postgres, ert CRM, ert filarkiv

Två transporter

En MCP-server når värden på ett av två sätt. stdio betyder att servern startas som en lokal process och pratar över standard in- och utflöde — enklast, och rätt val för allt som ska köra på utvecklarens egen maskin. Streamable HTTP betyder att servern körs som en vanlig webbtjänst som flera användare kan dela, vilket är vad ni vill ha för något som hela organisationen ska nå.

Verktyg, resurser och prompter

En server kan erbjuda tre sorters saker, och skillnaden mellan dem är värd att hålla isär — den avgör hur mycket kontroll ni behåller.

  • Verktyg (tools) är åtgärder modellen kan utföra: slå upp en kund, skapa ett ärende, köra en fråga. Det är den kraftfulla kategorin — och den som behöver ert skydd, eftersom modellen väljer när den anropas.
  • Resurser (resources) är data modellen kan läsa: ett dokument, en tabell, ett filträd. Läsande till sin natur, och därmed betydligt mindre riskabelt att öppna upp.
  • Prompter (prompts) är färdiga instruktionsmallar som servern erbjuder — ett sätt att paketera hur något bör göras, inte bara vad som går att göra.

Varje verktyg beskriver sig själv: namn, beskrivning i klartext och ett JSON-schema för sina argument. Det är den beskrivningen modellen läser när den avgör om verktyget är relevant. En slarvigt formulerad beskrivning ger en modell som anropar fel verktyg vid fel tillfälle — verktygstexterna är en del av lösningen, inte dokumentation vid sidan om.

Vad som ändrades i specen 2026-07-28

MCP är en levande standard. Den senaste revisionen, 2026-07-28, är den största omskrivningen hittills och ersätter revisionen 2025-11-25. Läser ni äldre guider är det här ni behöver kalibrera om.

  • Protokollet är nu stateless. Handskakningen initialize / notifications/initialized är borttagen, och med den sessioner på protokollnivå och Mcp-Session-Id. Varje anrop bär i stället sin egen protokollversion och sina klientförmågor. Följden är praktisk: en MCP-server skalar nu bakom vanlig HTTP-infrastruktur, med lastbalanserare och flera instanser, utan klistrig sessionsrouting.
  • server/discover är ny och obligatorisk för servrar. Klienten kan fråga rakt ut vilka protokollversioner och förmågor en server har innan den gör något annat.
  • Multi Round-Trip Requests (MRTR) ersätter serverinitierade anrop. Behöver servern mer information mitt i en körning svarar den input_required i stället för att ringa tillbaka, och klienten gör om anropet med svaret. Enklare att resonera om, och enklare att säkra.
  • Långkörande jobb flyttade ut ur kärnan till en officiell tillägsmodul (tasks), med pollning i stället för blockerande anrop.
  • Listsvar är cachebara. Verktygs- och resurslistor bär nu livslängd och cache-räckvidd, vilket sänker både svarstid och kostnad.
  • Roots, Sampling och Logging är utfasade. De fungerar fortfarande, men nya implementationer ska inte bygga på dem.

Koppla in en server i Claude och Codex

Det snabbaste sättet att förstå MCP är att koppla in en färdig server och se vad som händer. Båda verktygen nedan gör samma sak med olika syntax.

Claude Code

För en lokal server som startas som en process — allt efter -- skickas vidare oförändrat:

Terminal
claude mcp add postgres -- npx -y @company/postgres-mcp

För en server som redan körs som en webbtjänst:

Terminal
claude mcp add --transport http notion https://mcp.notion.com/mcp

Ska hela teamet dela konfigurationen lägger ni den i .mcp.json i projektroten och checkar in filen. Claude Code frågar varje användare om godkännande första gången — en incheckad serverlista kan alltså inte tyst börja köra hos någon annan:

.mcp.json
{
  "mcpServers": {
    "kundregister": {
      "command": "npx",
      "args": ["-y", "@company/crm-mcp"],
      "env": { "CRM_TOKEN": "${CRM_TOKEN}" }
    }
  }
}

Tre räckvidder finns: local (bara ni, bara det här projektet), project (den incheckade .mcp.json) och user (ni, i alla projekt).

Codex

Samma server, samma protokoll, annan konfigurationsfil. Codex läser ~/.codex/config.toml:

Terminal
codex mcp add kundregister -- npx -y @company/crm-mcp
~/.codex/config.toml
[mcp_servers.kundregister]
command = "npx"
args = ["-y", "@company/crm-mcp"]

[mcp_servers.kundregister.env]
CRM_TOKEN = "..."

Externa datakällor i praktiken

Var nyttan faktiskt uppstår beror mindre på tekniken än på vilket manuellt moment ni tar bort. De här mönstren återkommer:

DatakällaVad AI:n kan göra när den når denTypisk tidsvinst
Affärssystem och CRMSvara på frågor om kunder, ordrar och historik utan att någon slår upp det manuelltMinuter per fråga, många gånger om dagen
Dokumentarkiv (SharePoint, Drive)Hitta rätt underlag, sammanfatta det och peka på källanTimmar per utredning
Databaser och BIFormulera frågan, köra den mot läsbehörighet och förklara svaretDagar av väntan på analytikerkö
Ärendehantering och e-postKlassificera, prioritera och föreslå svar med ärendehistoriken som grundKontinuerligt, i varje ärende
Externa register och API:erBerika egen data med marknads-, bolags- eller sökdata vid rätt tillfälleErsätter återkommande manuell research

Notera att fyra av fem rader är läsande. Det är sällan en slump. Läsande flöden ger nästan all nytta i början till en bråkdel av risken, och de går att sätta i produktion utan att någon behöver godkänna varje åtgärd. Skrivande flöden är också rätt svar — men senare, och med en godkännandegrind.

Bygga en egen MCP-server

För era interna system finns ingen färdig server. Den goda nyheten är att en MCP-server i grunden är ett tunt lager: den beskriver några verktyg och översätter anropen till API:er eller frågor ni redan har. Det officiella SDK:t sköter protokollet.

server.ts (förenklat)
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";

const server = new McpServer({ name: "kundregister", version: "1.0.0" });

server.tool(
  "kund_slag_upp",
  "Slår upp en kund på organisationsnummer och returnerar " +
    "namn, status och ansvarig säljare. Returnerar aldrig personuppgifter.",
  { orgnr: z.string().regex(/^\d{10}$/) },
  async ({ orgnr }) => {
    const kund = await db.kunder.findByOrgnr(orgnr);
    if (!kund) {
      return { content: [{ type: "text", text: "Ingen kund med det numret." }] };
    }
    return {
      content: [
        {
          type: "text",
          text: JSON.stringify({
            namn: kund.namn,
            status: kund.status,
            ansvarig: kund.ansvarigSaljare,
          }),
        },
      ],
    };
  },
);

Fyra saker i det lilla exemplet är värda att kopiera. Verktygsbeskrivningen säger både vad verktyget gör och vad det inte returnerar. Argumentet valideras med ett schema i stället för att litas på. Servern returnerar utvalda fält, inte hela kundposten. Och uteblivet svar är ett normalt svar, inte ett fel — modellen ska kunna säga ”jag hittade ingen” utan att flödet kraschar.

Säkerhet och styrning

MCP ger en AI-modell möjlighet att både läsa er data och utföra åtgärder. Det är exakt det ni vill ha, och exakt därför det behöver styras. Tre risker är specifika nog att nämnas vid namn.

  • Indirekt promptinjektion. Modellen hämtar in innehåll — ett mejl, en webbsida, ett ärende — som bär dolda instruktioner, och behandlar dem som om de kom från er. Angreppet kommer via en betrodd kanal, vilket är varför det är svårt att upptäcka. Grundregeln: allt en modell hämtar in är data, aldrig instruktioner.
  • Tool poisoning. Instruktionerna göms i verktygets egen metadata — beskrivningar, parameternamn, fält som modellen läser vid körning men som användaren aldrig ser i gränssnittet. En server ni installerar utan att granska är därmed ett förtroende ni ger blint.
  • Överbehörighet. Servern kopplas in med bredare rättigheter än uppgiften kräver, ofta för att det gick snabbare. Då avgör inte er riskaptit vad som kan hända vid en incident, utan vad tjänstekontot råkade ha tillgång till.

Det finns ingen enskild kontroll som löser det här. Det som fungerar är flera lager som var för sig är enkla:

  • Minsta möjliga behörighet per server, och läsbehörighet som förval.
  • Godkända serverlistor — installera inte MCP-servrar ni inte har granskat, och lås vilka som får köra.
  • Mänskligt godkännande före åtgärder med konsekvens: utskick, betalningar, borttagningar, allt som når en kund.
  • Loggning som går att granska i efterhand: vilket verktyg, med vilka argument, av vem, när.
  • Maskning av personuppgifter på vägen ut ur servern, inte i modellprompten.

Protokollet självt drar åt samma håll. Revisionen 2026-07-28 skärpte auktorisationsdelen mot etablerad OAuth- och OpenID Connect-praxis, och fasade ut dynamisk klientregistrering till förmån för klientidentiteter som går att verifiera. Det gör det möjligt att koppla ett MCP-anrop till en faktisk identitet — vilket är förutsättningen för att kunna granska något alls.

Så kommer ni igång

Ordningen spelar större roll än verktygsvalet. Den här sekvensen ger svar tidigt och håller risken låg medan ni lär er.

  1. 1

    Välj ett moment som gör ont, inte ett system

    Leta efter stället där någon regelbundet klipper och klistrar mellan ett system och en chatt. Det är där nyttan är mätbar och uppenbar för den som utför arbetet.
  2. 2

    Börja läsande

    Första servern ska bara hämta. Ni får nästan hela nyttan, en bråkdel av risken, och ingen behöver godkänna varje anrop medan ni lär er.
  3. 3

    Avgränsa i servern, inte i prompten

    Bestäm i koden vilka fält som lämnar systemet. En instruktion om vad modellen ”inte ska titta på” är inte en säkerhetsåtgärd.
  4. 4

    Kör skarpt med en liten grupp i två veckor

    Mät sparad tid och notera varje gång svaret blev fel. Felen är den mest värdefulla informationen ni får i hela projektet.
  5. 5

    Lägg till skrivande åtgärder med grind

    Först när det läsande flödet är stabilt. Varje åtgärd med konsekvens får ett mänskligt godkännande och en logg som går att följa upp.
  6. 6

    Bestäm förvaltningen innan ni skalar

    Vem äger servern, vem godkänner nya, hur uppgraderas de när specen ändras? Utan svar blir varje ny integration en ny liten skuld.

Vi bygger den här typen av kopplingar åt svenska företag — oftast mot Microsoft 365, affärssystem och egna databaser, med kontrollpunkterna på plats från början. Vill ni resonera kring ett konkret flöde är vår kostnadsfria AI-audit ett bra första steg, och våra AI-assistenter visar hur det ser ut i drift.

Vanliga frågor

Korta svar på viktiga frågor

Vad står MCP för?

MCP står för Model Context Protocol. Det är en öppen standard som beskriver hur en AI-applikation hämtar kontext från och utför åtgärder i externa system — databaser, affärssystem, dokumentarkiv, API:er. Anthropic tog fram protokollet och släppte det öppet; i dag stöds det av flera oberoende AI-verktyg, bland andra Claude och Codex.

Är MCP samma sak som ett API?

Nej. MCP ligger ovanpå era API:er. Ett API beskriver hur två system pratar med varandra; MCP beskriver hur ett AI-verktyg upptäcker vilka förmågor som finns, vad de gör, vilka argument de tar och hur svaret ser ut — på ett sätt som är likadant oavsett vilket AI-verktyg som frågar. En MCP-server är oftast ett tunt lager framför API:er ni redan har.

Måste vi skicka vår data till en molnmodell för att använda MCP?

Inte nödvändigtvis, men var noggranna här. MCP-servern kan köras helt inom er egen miljö, och ni bestämmer vad den exponerar. Däremot går det som servern returnerar in i modellens kontext — så om modellen är en molntjänst lämnar den datan er miljö. Avgränsa därför på serversidan: returnera det som behövs för uppgiften, maska personuppgifter, och lägg känsliga flöden mot en modell som får hantera dem.

Vad ändrades i MCP-specifikationen 2026-07-28?

Den största förändringen är att protokollet blev stateless: handskakningen initialize/initialized togs bort, liksom sessioner på protokollnivå och Mcp-Session-Id-headern. Varje anrop bär nu sin egen protokollversion. Dessutom infördes server/discover, mönstret Multi Round-Trip Requests, cachebara listsvar, och en formell livscykelpolicy — där Roots, Sampling och Logging nu är utfasade med minst tolv månaders varsel.

Vilka är de största säkerhetsriskerna med MCP?

Tre sticker ut. Indirekt promptinjektion: innehåll som modellen hämtar in bär dolda instruktioner som den följer. Tool poisoning: instruktioner göms i verktygets egen metadata, som modellen läser men användaren inte ser. Och överbehörighet: servern får bredare åtkomst än uppgiften kräver, så en lyckad attack når allt. Motmedlet är inte en enskild kontroll utan flera lager — minsta möjliga behörighet, godkända serverlistor, mänskligt godkännande före konsekvenstunga åtgärder, och loggning som går att granska i efterhand.

Hur kommer vi igång utan att bygga om allt?

Börja med ett läsande flöde mot en datakälla som redan orsakar manuellt klipp-och-klistra, kör det mot en liten grupp under ett par veckor och mät tiden det sparar. Ett läsande flöde har låg risk, ger snabbt svar på om nyttan finns, och bygger den kunskap ni behöver innan ni låter AI skriva tillbaka till era system.

Ska vi titta på ert flöde?

Berätta vilket manuellt moment som kostar er mest tid, så säger vi rakt ut om det är värt att automatisera — och vad det skulle kräva.