Paweł Łukasiewicz: programista blogger
Paweł Łukasiewicz
2026-03-03
Paweł Łukasiewicz: programista blogger
Paweł Łukasiewicz
2026-03-03
Udostępnij Udostępnij Kontakt
Wprowadzenie

Przez pierwsze siedem wpisów tego cyklu budowaliśmy Copilota który świetnie rozumie Twój kod. Teraz robimy krok który zmienia wszystko: dajemy mu dostęp do zewnętrznego świata. Baz danych, systemów ticketowych, repozytoriów, API – wszystkiego co jest poza edytorem kodu.

Model Context Protocol (MCP) to otwarty standard opublikowany przez Anthropic w listopadzie 2024. Można śmiało powiedzieć że to jeden z najważniejszych momentów w historii narzędzi AI dla developerów – bo po raz pierwszy narzędzia od różnych dostawców zaczęły mówić wspólnym językiem. GitHub Copilot, Claude Code, Cursor, Windsurf – wszystkie obsługują MCP. Skonfigurujesz server raz i działa w każdym z tych środowisk.

W tym wpisie tłumaczę jak MCP działa od środka, jak skonfigurować pierwsze serwery i – to jest mój główny dodatek – daję Ci gotowe konfiguracje dla pięciu najpopularniejszych serwerów których .NET developer potrzebuje na co dzień: GitHub, PostgreSQL, SQLite, Atlassian Jira i Azure DevOps. Każdy możesz wkleić i uruchomić w 5 minut.

Oryginalna dokumentacja: Extending Copilot Chat with MCP – GitHub Docs. Dokumentacja VS Code: MCP Servers in VS Code. Oficjalna lista dostępnych serwerów: modelcontextprotocol/servers.

Czym jest MCP i dlaczego to zmienia grę?

Zanim MCP, każdy AI asystent musiał budować własne integracje z każdym zewnętrznym narzędziem. GitHub Copilot miał swoje pluginy, Claude miał swoje, Cursor miał swoje. Każda integracja pisana osobno, każda działająca inaczej, żadna przenośna.

MCP rozwiązuje to tak samo jak USB rozwiązał problem podłączania urządzeń do komputerów – definiując jeden wspólny protokół komunikacji. MCP server to po prostu program który "mówi" w tym protokole i udostępnia narzędzia. Klient MCP (czyli Copilot) pyta serwer "co umiesz?" – dostaje listę narzędzi i może ich używać.

── Architektura MCP ──
VS Code + GitHub Copilot
│ MCP Client
│ (odkrywa narzędzia, wywołuje je)
┌─────┴──────┐
▼ ▼ ▼
MCP Server MCP Server MCP Server
(GitHub) (PostgreSQL) (Jira)
│ │ │
GitHub API Twoja baza Atlassian API
Każdy MCP Server: (1) inicjalizacja + handshake, (2) lista tools, (3) wywołanie tool, (4) wynik → Copilot
🔍 Trzy typy transportu MCP – jak server i klient rozmawiają
Transport Gdzie działa Kiedy wybrać
stdio Lokalnie na Twojej maszynie – Copilot odpala proces Zdecydowana większość przypadków. Prosto, bezpiecznie, bez sieciowego overhead
SSE Zdalny server przez HTTP z Server-Sent Events Gdy server musi być współdzielony w teamie lub hostowany centralnie
HTTP Zdalny server przez Streamable HTTP Nowy standard (2025) – używany przez GitHub remote MCP server i enterprise deployments

VS Code obsługuje wszystkie trzy. Visual Studio 2022/2026 i JetBrains obsługują stdio oraz HTTP. Dla absolutnej większości przypadków użyjesz stdio z lokalnym procesem – to właśnie pokazują wszystkie przykłady w tym wpisie.

Gdzie mieszka konfiguracja MCP

MCP servers konfiguruje się w plikach JSON. Masz dwa miejsca do wyboru, każde z innym zakresem:

Plik Lokalizacja Zakres Kiedy używać
mcp.json .vscode/mcp.json WORKSPACE Tylko ten projekt Serwery specyficzne dla projektu – np. połączenie z bazą dev tego projektu. Commituj do repo żeby team miał te same serwery.
settings.json User settings VS Code USER Wszystkie projekty Serwery których używasz wszędzie – np. GitHub, Jira. Nie commituj tu tokenów!

Struktura pliku .vscode/mcp.json:

{
  "inputs": [
    {
      "id": "db_password",
      "description": "Hasło do bazy danych dev",
      "type": "promptString",
      "password": true
    }
  ],
  "servers": {
    "postgres-dev": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_URL": "postgresql://app_user:${input:db_password}@localhost:5432/myapp_dev"
      }
    }
  }
}
🔍 Mechanizm inputs – bezpieczne zarządzanie sekretami

Pole inputs pozwala definiować zmienne które VS Code zapyta przy pierwszym uruchomieniu serwera. Użytkownik wpisuje wartość w bezpiecznym oknie dialogowym, VS Code ją zapamiętuje w zaszyfrowanym keystorze i przekazuje jako zmienną środowiskową. Dzięki temu możesz commitować mcp.json do repozytorium bez żadnych sekretów – każdy developer wpisze swój token przy pierwszym użyciu.

Referencja do inputu: ${input:id_inputu} – wpisujesz to w dowolnym polu args lub env.

Dodanie serwera przez GUI (bez ręcznej edycji JSON):

  1. Otwórz Copilot Chat → tryb Agent
  2. Kliknij ikonę 🔧 Tools w górnym lewym rogu panelu czatu
  3. Na dole listy kliknij "Add More Tools..."
  4. Wybierz "Add MCP Server" → typ → wpisz nazwę pakietu npx
  5. VS Code automatycznie doda wpis do .vscode/mcp.json
Popularne MCP Serwery – gotowe konfiguracje na 5 minut

To jest sekcja którą chciałem dodać od siebie. Zamiast teorii – pięć konkretnych, gotowych konfiguracji dla narzędzi których .NET developer używa na co dzień. Każdą możesz wkleić do .vscode/mcp.json i uruchomić od razu.

Wymagania wstępne dla serwerów stdio opartych na npx: Node.js 18+ zainstalowany lokalnie (nodejs.org). Sprawdź: node --version.

🐙
GitHub MCP Server
github/github-mcp-server (remote) lub @modelcontextprotocol/server-github (npx)
OFICJALNY

Daje Copilotowi dostęp do GitHub API – issues, PR-y, code search, repozytoria, komentarze. To jest najszybsza droga do uruchomienia MCP bo GitHub oferuje wariant zdalny (remote) który nie wymaga żadnej lokalnej instalacji.

Opcja A – Remote (zalecana, zero setup):

W VS Code: Extensions panel → wyszukaj "GitHub MCP" → "Install" → OAuth w przeglądarce. Gotowe.

Lub ręcznie w .vscode/mcp.json:

{
  "servers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    }
  }
}

Uwierzytelnienie przez OAuth – VS Code otworzy przeglądarkę przy pierwszym użyciu.

Opcja B – Lokalny przez Docker (dla enterprise / pełna kontrola):

{
  "inputs": [
    {
      "id": "github_pat",
      "description": "GitHub Personal Access Token (scopes: repo, read:org)",
      "type": "promptString",
      "password": true
    }
  ],
  "servers": {
    "github": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github_pat}"
      }
    }
  }
}

Co możesz robić po podłączeniu:

Listuj otwarte issues
Twórz i komentuj PR-y
Szukaj kodu w repo
Czytaj pliki z gałęzi
Zarządzaj labels
Przeglądaj review comments
🌟 Przykładowe prompty po podłączeniu GitHub MCP:
  • "Pokaż mi wszystkie otwarte issues z etykietą 'bug' przypisane do mnie"
  • "Stwórz PR z opisem zmian z ostatniego commita, przypisz do @kolega"
  • "Znajdź wszystkie miejsca gdzie używamy OrderService w kodzie"
  • "Napisz komentarz review do PR #142 wskazując problem z walidacją"
🐘
PostgreSQL MCP Server
@modelcontextprotocol/server-postgres
OFICJALNY

Daje Copilotowi dostęp do Twojej bazy PostgreSQL – może przeglądać schemat, wykonywać zapytania SELECT, opisywać tabele i relacje. Idealny gdy piszesz migracje EF Core albo debugujesz zapytania LINQ.

{
  "inputs": [
    {
      "id": "pg_connection",
      "description": "PostgreSQL connection string (np. postgresql://user:pass@localhost:5432/mydb)",
      "type": "promptString",
      "password": true
    }
  ],
  "servers": {
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "${input:pg_connection}"
      ]
    }
  }
}
⚠️ Domyślnie tylko tryb read-only

Oficjalny serwer PostgreSQL wykonuje tylko zapytania SELECT – nie możesz przez niego modyfikować danych. To zamierzone zachowanie zapewniające bezpieczeństwo. Jeśli potrzebujesz pełnego dostępu (INSERT, UPDATE, DELETE), rozważ inne serwery z explicite włączonym trybem write – i nigdy nie podłączaj produkcyjnej bazy!

Co możesz robić po podłączeniu:

Opisz schemat bazy
Listuj tabele i kolumny
Wykonuj SELECT
Sprawdzaj relacje FK
Analizuj indeksy
Debuguj wolne zapytania
🌟 Przykładowe prompty po podłączeniu PostgreSQL MCP:
  • "Opisz strukturę tabeli Orders i wszystkie jej relacje"
  • "Napisz migrację EF Core która dodaje indeks na Orders.CustomerId – sprawdź najpierw czy już istnieje"
  • "To zapytanie LINQ jest powolne – wygeneruj jego SQL i zaproponuj optymalizację"
  • "Ile zamówień ze statusem Pending jest starszych niż 24h? Daj mi też przykładowe ID."
🗄️
SQLite MCP Server
@modelcontextprotocol/server-sqlite
OFICJALNY

Lżejszy odpowiednik serwera PostgreSQL dla plików SQLite. Przydatny w projektach które używają SQLite (testy integracyjne, lokalna baza dla Maui/WPF, prototypy). Ten serwer – w przeciwieństwie do PostgreSQL – obsługuje też operacje zapisu.

{
  "servers": {
    "sqlite": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sqlite",
        "C:/Projects/MyApp/myapp.db"
      ]
    }
  }
}

Na Windows używaj ukośników lub podwójnych backslashów w ścieżce. Na macOS/Linux: /Users/user/Projects/myapp.db

📋
Atlassian MCP Server (Jira + Confluence)
mcp.atlassian.com (remote SSE)
REMOTE

Oficjalny serwer Atlassian hostowany przez Atlassian jako zdalny endpoint – zero lokalnej instalacji. Daje dostęp do Jira (issues, sprinty, projekty) i Confluence (strony, przestrzenie). Działa przez OAuth z Twoim kontem Atlassian.

{
  "servers": {
    "atlassian": {
      "type": "sse",
      "url": "https://mcp.atlassian.com/v1/sse"
    }
  }
}

Przy pierwszym użyciu VS Code otworzy przeglądarkę do autoryzacji OAuth z Twoim kontem Atlassian Cloud. Obsługuje tylko Atlassian Cloud – nie Jira Server/Data Center.

Alternatywa dla Jira Server/Data Center (PAT):

{
  "inputs": [
    {
      "id": "jira_url",
      "description": "URL Twojego Jira (np. https://firma.atlassian.net)",
      "type": "promptString"
    },
    {
      "id": "jira_email",
      "description": "Email konta Jira",
      "type": "promptString"
    },
    {
      "id": "jira_token",
      "description": "Jira API Token (atlassian.com → Account Settings → Security → API tokens)",
      "type": "promptString",
      "password": true
    }
  ],
  "servers": {
    "jira": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@ashari/mcp-server-atlassian-jira"],
      "env": {
        "ATLASSIAN_SITE_NAME": "${input:jira_url}",
        "ATLASSIAN_USER_EMAIL": "${input:jira_email}",
        "ATLASSIAN_API_TOKEN": "${input:jira_token}"
      }
    }
  }
}
🌟 Przykładowe prompty po podłączeniu Jira MCP:
  • "Jakie zadania mam przypisane w bieżącym sprincie?"
  • "Stwórz issue 'Dodaj walidację dla OrderService' w projekcie BACKEND, typ: Task, priority: High"
  • "Podsumuj co zostało zrobione w sprincie który właśnie się skończył"
  • "Zmień status BACKEND-421 na 'In Review' i dodaj komentarz z linkiem do PR"
☁️
Azure DevOps MCP Server
tiberriver256/mcp-server-azure-devops (community)
COMMUNITY

Dla teamów które używają Azure DevOps zamiast GitHub. Daje dostęp do work items, repozytoriów, pipeline'ów i pull requestów przez Azure DevOps REST API. Aktywnie rozwijany projekt community z dobrą adopcją w środowiskach enterprise Microsoft.

{
  "inputs": [
    {
      "id": "ado_org",
      "description": "Nazwa organizacji Azure DevOps (np. mycompany w dev.azure.com/mycompany)",
      "type": "promptString"
    },
    {
      "id": "ado_pat",
      "description": "Azure DevOps PAT (dev.azure.com → User Settings → Personal access tokens)",
      "type": "promptString",
      "password": true
    }
  ],
  "servers": {
    "azure-devops": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@tiberriver256/mcp-server-azure-devops"],
      "env": {
        "AZURE_DEVOPS_ORG_URL": "https://dev.azure.com/${input:ado_org}",
        "AZURE_DEVOPS_AUTH_METHOD": "pat",
        "AZURE_DEVOPS_PAT": "${input:ado_pat}"
      }
    }
  }
}
🌟 Przykładowe prompty po podłączeniu Azure DevOps MCP:
  • "Pokaż mi active work items przypisane do mnie w projekcie Backend"
  • "Stwórz Task 'Refaktoryzacja OrderService' i przypisz do mnie"
  • "Jaki jest status ostatniego pipeline'u na gałęzi main?"
  • "Otwórz PR z opisem zmian, powiąż z work item #1234"

Kompletny mcp.json łączący wszystkie serwery

Możesz skonfigurować wszystkie pięć serwerów razem w jednym pliku workspace:

{
  "inputs": [
    {
      "id": "github_pat",
      "description": "GitHub PAT (scopes: repo, read:org)",
      "type": "promptString",
      "password": true
    },
    {
      "id": "pg_connection",
      "description": "PostgreSQL connection string",
      "type": "promptString",
      "password": true
    },
    {
      "id": "jira_token",
      "description": "Atlassian API Token",
      "type": "promptString",
      "password": true
    },
    {
      "id": "jira_email",
      "description": "Email konta Atlassian",
      "type": "promptString"
    },
    {
      "id": "jira_url",
      "description": "URL Jira (np. https://firma.atlassian.net)",
      "type": "promptString"
    }
  ],
  "servers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    },
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "${input:pg_connection}"]
    },
    "jira": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@aashari/mcp-server-atlassian-jira"],
      "env": {
        "ATLASSIAN_SITE_NAME": "${input:jira_url}",
        "ATLASSIAN_USER_EMAIL": "${input:jira_email}",
        "ATLASSIAN_API_TOKEN": "${input:jira_token}"
      }
    }
  }
}
Bezpieczeństwo – co musisz wiedzieć

MCP to potężne narzędzie – a to znaczy że wymaga odpowiedzialnego podejścia do bezpieczeństwa. Kilka zasad których bezwzględnie warto przestrzegać:

✅ Rób to
  • Używaj mechanizmu inputs dla wszystkich sekretów – VS Code szyfruje i zapamiętuje
  • Podłączaj tylko bazy deweloperskie/testowe – nigdy produkcji
  • Używaj kont z minimalnym zakresem uprawnień (least privilege)
  • Dla serwerów community sprawdź reputację i gwiazdki na GitHubie przed użyciem
  • Commituj mcp.json do repo – ale nigdy bez sekretów (używaj inputs!)
  • Weryfikuj listę aktywnych narzędzi w panelu Tools zanim zaczniesz sesję
❌ Nie rób tego
  • Nie wklejaj tokenów i haseł bezpośrednio do mcp.json
  • Nie podłączaj produkcyjnej bazy danych – nawet read-only
  • Nie używaj kont admin z pełnymi uprawnieniami do Jira/GitHub
  • Nie instaluj losowych serwerów z npm bez weryfikacji kodu źródłowego
  • Nie dawaj serwerowi dostępu do większej liczby narzędzi niż potrzebuje
  • Nie ignoruj okienek potwierdzenia gdy Copilot prosi o zgodę na wywołanie narzędzia
⚠️ Okienka potwierdzenia – dlaczego są ważne

Za każdym razem gdy Copilot chce wywołać narzędzie MCP – VS Code wyświetla prośbę o potwierdzenie z opisem co narzędzie zrobi. Nie klikaj automatycznie "Allow always" bez czytania. To jest Twoja ostatnia linia obrony przed nieoczekiwanym zachowaniem agenta. Okienko zawiera pełną listę parametrów – jeśli coś wygląda podejrzanie (np. serwer chce usunąć dane których nie prosiłeś usuwać) – zawsze możesz odmówić.

Jak uruchomić serwer i zweryfikować że działa

1
Stwórz lub edytuj plik .vscode/mcp.json

Wklej konfigurację serwera. Zapisz plik – VS Code wykryje zmiany automatycznie.

2
Kliknij "Start" w CodeLens

Po zapisaniu pliku pojawi się przycisk ▶ Start nad listą serwerów w pliku. Kliknij go – VS Code odpali proces serwera i zbierze listę dostępnych narzędzi. Przy pierwszym uruchomieniu zostaniesz poproszony o wpisanie wartości dla wszystkich inputs.

3
Sprawdź status w panelu Tools

Otwórz Copilot Chat → Agent mode → ikona 🔧 Tools. Zobaczysz listę aktywnych serwerów i ich narzędzi. Jeśli serwer ma zielony wskaźnik – działa. Czerwony lub brak – sprawdź logi w Output → GitHub Copilot.

4
Przetestuj prostym zapytaniem

Wpisz proste pytanie które wymaga narzędzia MCP – np. "Jakie tabele są w bazie?" dla PostgreSQL albo "Pokaż moje otwarte issues" dla GitHub. Jeśli Copilot poprosi o potwierdzenie użycia narzędzia i zwróci sensowną odpowiedź – wszystko gra.

⚠️ Serwer nie startuje? Najczęstsze przyczyny
  • Brak Node.js lub stara wersja – sprawdź node --version, wymagane 18+
  • Błędne connection string – przetestuj połączenie z bazą osobno (np. przez pgAdmin lub psql) przed podłączeniem do MCP
  • Błędna ścieżka bezwzględna – dla serwerów wymagających ścieżki (np. SQLite) użyj absolutnej ścieżki, nie relatywnej
  • Policy organizacji – jeśli masz Copilot Business/Enterprise, admin musi włączyć politykę "MCP servers in Copilot" w ustawieniach organizacji
  • Stary VS Code – MCP wymaga VS Code 1.99+. Sprawdź Help → About i zaktualizuj jeśli potrzeba
MCP w agencie – zamknięcie klamry

W poprzednim wpisie pokazywałem jak podłączyć MCP server bezpośrednio w pliku .agent.md. Teraz rozumiesz dlaczego to jest tak potężne – agent może mieć "wbudowane" połączenia z narzędziami które są mu zawsze potrzebne, bez konfigurowania ich osobno przez użytkownika.

---
name: db-expert
description: >
  Ekspert bazodanowy dla projektu MyApp. Ma dostęp do schematu
  bazy PostgreSQL i może analizować zapytania EF Core.
  Używaj gdy piszesz migracje lub debugujesz wolne zapytania.
model: claude-sonnet-4-5
tools:
  - read
  - search
  - postgres
mcp-server:
  postgres:
    type: stdio
    command: npx
    args: ["-y", "@modelcontextprotocol/server-postgres"]
    env:
      POSTGRES_URL: ${{ secrets.DEV_DATABASE_URL }}
---

Jesteś ekspertem PostgreSQL i EF Core 9...
🔍 secrets w konfiguracji agenta

Składnia ${{ secrets.NAZWA }} w pliku agenta jest inspirowana GitHub Actions. Sekrety są rozwiązywane przez Copilot z zaszyfrowanego keystora VS Code lub zmiennych środowiskowych. Dzięki temu możesz commitować plik agenta bez żadnych sekretów – każdy developer który sklonuje repo będzie poproszony o podanie wartości przy pierwszym użyciu.

Podsumowanie

MCP to moment w którym Copilot przestaje być "asystentem w edytorze" i staje się pełnoprawnym uczestnikiem Twojego środowiska deweloperskiego.

  • MCP = otwarty standard – skonfiguruj raz, działa w Copilot, Claude Code, Cursor i innych kompatybilnych narzędziach
  • Trzy typy transportu: stdio (lokalny), SSE (zdalny legacy), HTTP (zdalny nowy standard). Dla większości przypadków: stdio.
  • Konfiguracja w .vscode/mcp.json – workspace (projekt, commituj) lub user settings (globalne). Używaj inputs dla sekretów.
  • 5 gotowych konfiguracji dla .NET devów: GitHub (remote, zero setup), PostgreSQL (read-only, schema inspection), SQLite, Atlassian Jira (cloud + server) i Azure DevOps.
  • Bezpieczeństwo: tylko bazy dev/test, least privilege, weryfikacja narzędzi przed "Allow always", nigdy produkcja.
  • MCP w agencie – agent może mieć "wbudowane" serwery przez pole mcp-server w pliku .agent.md.

W kolejnym wpisie omawiamy Automatyzację z Hooks – jak wyzwalać agentów i workflows automatycznie na podstawie zdarzeń w repozytorium, bez ręcznego uruchamiania.