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.
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 (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 listKonfiguracja ręczna — mcp.servers
| Pole (local) | Opis |
|---|---|
| type | "local" — wymagane |
| command | wykonywalny + argumenty |
| cwd | katalog procesu (domyślnie workspace) |
| environment | zmienne dokładane do środowiska procesu |
| disabled | true = trzymaj skonfigurowany, ale nie łącz |
| codemode | false = narzędzia bezpośrednio na liście narzędzi modelu, nie przez Code Mode (domyślnie true) |
| timeout | nadpisania per serwer |
{
"$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
}
}
}
}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>.
{
"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.
| Timeout | Domyślnie | Czego dotyczy |
|---|---|---|
| startup | 30 s | połączenie transportu i inicjalizacja |
| catalog | 30 s | listowanie narzędzi/promptów/zasobów |
| execution | 12 h | samo wywołanie narzędzia |
{
"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 _:
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_docsUprawnienia 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).
{
"permissions": [
{ "action": "context7_*", "resource": "*", "effect": "deny" },
{ "action": "context7_resolve_library_id", "resource": "*", "effect": "allow" }
]
}Pomysły na pierwsze MCP
| Serwer | Typ | Do czego |
|---|---|---|
| Context7 | remote | Świeża dokumentacja bibliotek — mniej halucynowanych API |
| Playwright | local | Testy e2e i praca ze stroną: npx @playwright/mcp |
| Sentry | remote (OAuth) | Podgląd błędów produkcyjnych prosto w sesji |
| GitHub MCP | remote | Issue/PR poza CLI git |