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):
- Otwórz Copilot Chat → tryb Agent
- Kliknij ikonę 🔧 Tools w górnym lewym rogu panelu czatu
- Na dole listy kliknij "Add More Tools..."
- Wybierz "Add MCP Server" → typ → wpisz nazwę pakietu npx
- 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.
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.
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.
{
"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:
🌟 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ą"
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:
🌟 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."
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
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"
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"
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}"
}
}
}
}