Modul 7 – Custom Tools, MCP och integrationer

OpenCode-utbildningen på AIWiki.se ← Tillbaka till översikten


När inbyggda verktyg (läs fil, skriv fil, kör kommando, sök kod) inte räcker finns det två vägar:

  1. Custom Tools – lokala verktyg du definierar direkt, körs i samma process.
  2. MCP-servrar – externa processer som agenten kommunicerar med via Model Context Protocol.

De är inte utbytbara. De tjänar olika syften och passar olika situationer.


Custom Tools är lokala verktyg som du definierar i OpenCodes konfiguration. Agenten kan anropa dem precis som inbyggda verktyg.

{
  "tools": {
    "custom": [
      {
        "name": "query_database",
        "description": "Kör en SELECT-query mot development-databasen",
        "type": "bash",
        "command": "psql $DATABASE_URL -c '{query}' --csv",
        "parameters": {
          "query": {
            "type": "string",
            "description": "SQL SELECT-query att köra"
          }
        },
        "permissions": {
          "allow_patterns": ["SELECT *"],
          "deny_patterns": ["DROP *", "DELETE *", "UPDATE *", "INSERT *"]
        }
      }
    ]
  }
}

Custom Tools exekveras i den lokala miljön. Det innebär att säkerhetsmodellen är kritisk:

  • Definiera explicita ``allow_patterns`` och ``deny_patterns`` för SQL-verktyg.
  • Kör med minsta möjliga behörighet (read-only databaskonton, begränsade API-nycklar).
  • Logga alla anrop från custom tools i CI-miljöer.
  • Undvik att lägga hemligheter direkt i verktygets konfiguration – använd miljövariabler.
{
  "name": "fetch_api_schema",
  "description": "Hämtar aktuellt API-schema från intern developer portal",
  "type": "http",
  "url": "https://api-portal.intern/schema/{service}",
  "method": "GET",
  "headers": {
    "Authorization": "Bearer $PORTAL_API_KEY"
  },
  "parameters": {
    "service": {
      "type": "string",
      "description": "Tjänstens namn (t.ex. 'users', 'orders')"
    }
  }
}

MCP är ett öppet protokoll för att ansluta externa system till AI-agenter. Det är designat av Anthropic men är provider-agnostiskt.

En MCP-server är en separat process som:

  • Exponerar verktyg (tools) som agenten kan anropa
  • Kan tillhandahålla resurser (resources) – filer, dokument, data
  • Kommunicerar via JSON-RPC
Dimension Custom Tools MCP-server
Komplexitet Enkel (JSON-config) Kräver separat implementation
Separation Körs i samma process Separat process, isolerad
Återanvändbarhet Per OpenCode-installation Kan användas av alla MCP-klienter
Stateful Nej Kan hålla state
Externa system Enkla HTTP-anrop Komplexa integrationer med autentisering

Tumregel: Custom Tools för enkla anrop. MCP för komplexa, stateful integrationer med externa system.

{
  "mcp": {
    "servers": [
      {
        "name": "mem0-memory",
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "@mem0ai/mem0-mcp"],
        "env": {
          "MEM0_API_KEY": "$MEM0_API_KEY"
        }
      },
      {
        "name": "github",
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-github"],
        "env": {
          "GITHUB_TOKEN": "$GITHUB_TOKEN"
        }
      }
    ]
  }
}
Server Syfte Typiskt användningsfall
``@mem0ai/mem0-mcp`` Persistent minne Spara beslut och kontext mellan sessioner
``@modelcontextprotocol/server-github`` GitHub-integration Läs issues, PRs, kod utan checkout
``@modelcontextprotocol/server-postgres`` Databas Läs databasstruktur och data
``@modelcontextprotocol/server-filesystem`` Filsystem Expanderat filsystemstöd
Anytype MCP Kunskapsbase Integrera mot Anytype-dokument

  Kodbas → OpenCode → MCP (Mem0) → Persistent minne
                    ↓
              Dokumentation uppdateras
              med kontext från tidigare sessioner

Användningsfall: en agent som arbetar med en stor kodbas under lång tid behöver minnas beslut som fattades i tidigare sessioner. Mem0 fungerar som ett externt minne.

  CI-pipeline → OpenCode (read-only agent)
                    ↓ MCP
              GitHub (läs issues, PRs)
              PostgreSQL (läs schema)
                    ↓
              Genererar rapport / dokumentation
              (skriver INTE till databas eller repo direkt)

En agent i CI ska nästan aldrig ha skrivrättigheter till produktionssystem. MCP-anslutningar kan konfigureras read-only.

Aspekt Självhostad Molnbaserad
Kontroll Full kontroll Leverantörsberoende
Dataresidency Data lämnar inte lokalt Data skickas externt
Driftkostnad Kräver infrastruktur Ingår i tjänsten
Tillgänglighet Beror på din infrastruktur Hög tillgänglighet

För offentlig sektor och organisationer med GDPR-krav: självhostad MCP är ofta nödvändigt för känslig data. En hybrid är möjlig – icke-känslig data via molntjänst, känslig data via självhostad MCP.


En minimal MCP-server i TypeScript (som ett exempel på vad som krävs):

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
 
const server = new Server(
  { name: "intern-dokumentation", version: "1.0.0" },
  { capabilities: { tools: {} } }
);
 
server.setRequestHandler("tools/list", async () => ({
  tools: [
    {
      name: "sokDokument",
      description: "Sök i intern dokumentationsbas",
      inputSchema: {
        type: "object",
        properties: {
          query: { type: "string", description: "Sökfråga" }
        },
        required: ["query"]
      }
    }
  ]
}));
 
server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "sokDokument") {
    const query = request.params.arguments.query;
    // Hämta från intern källa...
    return { content: [{ type: "text", text: `Resultat för: ${query}` }] };
  }
});
 
const transport = new StdioServerTransport();
await server.connect(transport);

  • Custom Tools är enkla lokala verktyg – bra för enkla HTTP-anrop och bash-kommandon.
  • MCP är protokollet för komplexa externa integrationer med separation och stateful stöd.
  • Säkerhetsmodellen är kritisk för båda – principen om minsta privilegium gäller.
  • Läs-skriv-separation är ett viktigt arkitekturmönster för CI och produktionsmiljöer.
  • Självhostad MCP är nödvändigt för känslig data i reglerade miljöer.

Kopierad!
AI Prompt: Pitcha en MCP-server ingen bad om
Du är en ivrig konsult på ett möte. Pitcha en MCP-server för ett externt system som ingen i rummet förstår varför en AI-agent skulle behöva koppla upp sig mot. Exempel: kommunens snöröjningsschema, en kaffemaskins telemetri, eller ett arkiv med historiska busslinjenummer. Pitchen ska låta helt rimlig.

Testa prompt på …


Föregående modul: ← Modul 6 – CLI, TUI och automatisering Nästa modul: Modul 8 – Governance, säkerhet och organisation →

← Tillbaka till översikten