</>Kurs OpenCode
Kurs/rozdział 0725 min

MCP — zewnętrzne integracje

Model Context Protocol: podłączanie serwerów lokalnych i zdalnych, OAuth, timeouty i nazwy narzędzi.

Czym jest MCP i po co

MCP (Model Context Protocol) to otwarty standard podłączania zewnętrznych usług do agentów AI. Serwer MCP wystawia narzędzia (a także prompty, zasoby i instrukcje), które agent widzi jak natywne funkcje: baza dokumentacji (Context7), automatyzacja przeglądarki (Playwright), błędy z Sentry, bazy danych, systemy ticketowe.

Każde narzędzie MCP zjada kontekst modelu i zwiększa powierzchnię ataku, więc dokręcaj tylko to, czego realnie używasz.

⚠
Uwaga

MCP tool to cudzy kod zdalnie wykonywalny przez agenta. Dodawaj serwery ze znanych źródeł i ograniczaj je uprawnieniami (akcja <serwer>_<narzędzie>).

Instalacja z CLI — najkrótsza droga

Zdalne serwery domyślnie próbują OAuth. Jeśli mcp list pokazuje „needs authentication”, otwórz OpenCode, wpisz /mcps, zaznacz serwer i zaloguj się w przeglądarce. Gotowy serwer widać jako ✓ connected i agent może go używać.

Zdalny i lokalny serwer w dwóch komendach
# zdalny (Streamable HTTP) — zapis do konfiguracji projektu
opencode mcp add context7 --url https://mcp.context7.com/mcp
opencode mcp add context7 --global --url https://mcp.context7.com/mcp  # globalnie

# lokalny (stdio) — komenda po --
opencode mcp add everything -- npx -y @modelcontextprotocol/server-everything

# status połączeń
opencode mcp list

Konfiguracja ręczna — mcp.servers

Pole (local)Opis
type"local" — wymagane
commandwykonywalny + argumenty
cwdkatalog procesu (domyślnie workspace)
environmentzmienne dokładane do środowiska procesu
disabledtrue = trzymaj skonfigurowany, ale nie łącz
codemodefalse = narzędzia bezpośrednio na liście narzędzi modelu, nie przez Code Mode (domyślnie true)
timeoutnadpisania per serwer
opencode.jsonc — serwer lokalny z pełnym zestawem opcji
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "everything": {
        "type": "local",
        "command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
        "cwd": ".",
        "environment": {
          "LOG_LEVEL": "info",
          "MCP_API_KEY": "{env:MCP_API_KEY}"
        },
        "disabled": false
      }
    }
  }
}
✦
Wskazówka

Sekrety wyłącznie przez substitucję {env:NAZWA} — NIE wklejaj kluczy do pliku JSON. Shellowe "$NAZWA" NIE rozwija się w stringach JSON; tylko składnia {env:...}.

Serwer zdalny, nagłówki i OAuth

  • oauth: false tylko gdy serwer używa wyłącznie klucza/nagłówka.
  • Przy OAuth (domyślne): discovery serwerów autoryzacji, PKCE, odświeżanie tokenów, dynamiczna rejestracja klientów — kredencjale trzymane POZA konfiguracją projektu.
  • Dostane własne client_id/secret? Użyj pól oauth: client_id, client_secret, scope, callback_port, redirect_uri (snake_case V2).
  • Wyloguj/zmień konto: opencode mcp logout <nazwa>; flow z CLI wystartuje też opencode mcp auth <nazwa>.
Remote + API key w nagłówku (OAuth wyłączony)
{
  "mcp": {
    "servers": {
      "context7": {
        "type": "remote",
        "url": "https://mcp.context7.com/mcp",
        "oauth": false,
        "headers": {
          "CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
        }
      }
    }
  }
}

Timeouty i wersje protokołu

protocol: legacy (domyślnie) mówi klasycznym initialize; auto sonduje rewizję 2026-07-28 z fallbackiem; wymuszenie 2026-07-28 zerwie połączenie ze starszymi serwerami. Trzymaj auto tylko tam, gdzie potrzebne.

TimeoutDomyślnieCzego dotyczy
startup30 społączenie transportu i inicjalizacja
catalog30 slistowanie narzędzi/promptów/zasobów
execution12 hsamo wywołanie narzędzia
Globalne limity + wyjątek dla wolnego serwera
{
  "mcp": {
    "timeout": {
      "startup": 45000,
      "catalog": 30000,
      "execution": 600000
    },
    "servers": {
      "slow-tools": {
        "type": "remote",
        "url": "https://mcp.example.com/mcp",
        "timeout": { "catalog": 60000 },
        "protocol": "auto"
      }
    }
  }
}

Jak nazywają się narzędzia MCP

Efektywna nazwa to <serwer>_<narzędzie>, a znaki spoza [a-zA-Z0-9_-] zamieniają się na _:

serwer „context 7”, narzędzie „resolve.library/id”
name:   context_7_resolve_library_id
# w Code Mode:  tools.context_7.resolve_library_id(...)
# akcja uprawnień: action "context_7_*" / resource "*"
# prompty MCP → komendy:  /context_7:find_docs

Uprawnienia i wyłączanie

  • deny chowa narzędzie i blokuje użycie — serwer zostaje połączony.
  • disabled: true rozłącza serwer bez usuwania konfiguracji.
  • Usunięcie serwera = usuń wpis z konfiguracji, w której go dodano (projekt lub global).
  • Przeglądanie/łączenie z TUI: komenda /mcps (spacja przełącza, Enter łączy/uwierzytelnia).
Schowaj destrukcyjne narzędzia bez rozłączania serwera
{
  "permissions": [
    { "action": "context7_*", "resource": "*", "effect": "deny" },
    { "action": "context7_resolve_library_id", "resource": "*", "effect": "allow" }
  ]
}

Pomysły na pierwsze MCP

SerwerTypDo czego
Context7remoteŚwieża dokumentacja bibliotek — mniej halucynowanych API
PlaywrightlocalTesty e2e i praca ze stroną: npx @playwright/mcp
Sentryremote (OAuth)Podgląd błędów produkcyjnych prosto w sesji
GitHub MCPremoteIssue/PR poza CLI git