Czy MCP jest nowoczesnym sposobem na dostęp do aplikacji?

Kilka tygodni temu dostałem pytanie, które mnie zaskoczyło: „Czy mogę napisać do Claude’a 'sprawdź, czy wszystkie zadania na budowie są zakończone’ i żeby po prostu to zrobił — bez klikania w aplikację?”
Odpowiedź brzmi: tak. I właśnie temu służy MCP.
Co to jest MCP?
Model Context Protocol to otwarty standard (opracowany przez Anthropic, przyjęty przez branżę), który definiuje, jak agent AI może korzystać z zewnętrznych narzędzi — baz danych, API, systemów plików — w kontrolowany i przewidywalny sposób.
Wyobraź sobie REST API, ale zaprojektowane od podstaw dla agentów, nie dla frontendu. Zamiast wysyłać HTTP requesty z kodu, Claude „wywołuje funkcje” opisane jako narzędzia (tools). Każde narzędzie ma nazwę, opis i schemat parametrów — tak żeby model wiedział, kiedy i jak go użyć.
{
"name": "list_tasks",
"description": "Zwraca listę zadań z workspace. Filtruj po statusie lub przypisanej osobie.",
"inputSchema": {
"type": "object",
"properties": {
"status": { "type": "string", "enum": ["toDo", "inProgress", "done", "delayed"] },
"assigneeId": { "type": "string", "format": "uuid" }
}
}
}
Jak to działa w praktyce — na przykładzie Plan Budowlany
Zbudowałem planbudowlany-mcp — publiczny serwer MCP dostępny na npm (npx planbudowlany-mcp), który pozwala Claude’owi (lub innemu agentowi) rozmawiać z danymi budowy. Konfiguracja w Claude Desktop wygląda tak:
{
"mcpServers": {
"planbudowlany": {
"command": "npx",
"args": ["planbudowlany-mcp"],
"env": { "PB_API_KEY": "pb_twój_klucz" }
}
}
}
Serwer MCP udostępnia modelowi API w postaci zrozumiałych narzędzi (tools). W wersji 0.21.38 wystawiamy m.in.:
– get_workspace_info — bazowe informacje o projekcie i budżecie,
– list_tasks, get_task, create_task, update_task_status, create_subtask — kompleksowe zarządzanie harmonogramem,
– get_cost_summary, list_costs, create_cost — pobieranie podsumowań, szczegółów i dodawanie wydatków,
– list_issues, get_issue, update_issue — zarządzanie usterkami na budowie (z edycją tytułu i opisu),
– list_activity — wgląd w dziennik budowy (dziennik aktywności),
– get_timeline — harmonogram / dane Gantta z zależnościami.
Po podpięciu tej konfiguracji mogę napisać do Claude’a:
„Podsumuj stan kosztów na budowie 'Projekt Alfa’ i powiedz, które zadania są opóźnione.”
Claude wywoła get_cost_summary, potem list_tasks z filtrem status=InProgress i porównaniem z terminami — i odpowie ludzkim językiem, z danymi pobranymi prosto z systemu. Gdy dopytam: „Utwórz usterkę do pierwszego z opóźnionych zadań”, model po prostu to zrobi wywołując odpowiednie narzędzia. W kolejnych krokach planujemy udostępnić agentom opcje wprowadzania wydatków (add_cost_entry), tworzenia wpisów w dzienniku budowy (add_journal_entry) czy chociażby przeszukiwania bazy dokumentów i załączników (list_documents).
Nie napisałem ani linii kodu integracyjnego dla tego konkretnego zapytania. Nie robiłem dedykowanego skryptu. Nie pobierałem CSV do Excela.
Więcej przykładów — co możesz zapytać?
Oto kilka konkretnych zdań, które można wysłać do Claude po podpięciu planbudowlany-mcp:
- „Jakie zadania są opóźnione i dlaczego?” — Claude wywołuje
list_tasksz filtremdelayedi łączy wyniki z harmonogramem zget_timeline. - „Podsumuj budżet projektu i powiedz, w których kategoriach przekroczyliśmy plan.” —
get_cost_summary+list_costszestawia planowane vs. rzeczywiste wydatki. - „Utwórz zadanie 'Wylewka pod posadzkę’ na przyszły tydzień, kategoria: roboty wykończeniowe.” —
create_taskw jednym zdaniu, bez otwierania aplikacji. - „Mam usterkę — pęknięte okno w salonie. Zapisz zgłoszenie.” — Claude sprawdzi istniejące raporty przez
list_issuesi zaproponuje odpowiedni raport do uzupełnienia. - „Przygotuj tygodniowe podsumowanie dla inwestora — co zrobiliśmy, co jest w toku, jakie są koszty.” — Claude łączy
list_activity,list_tasksiget_cost_summaryw jeden spójny raport gotowy do wysłania. - „Co się działo na budowie w ostatnim tygodniu?” —
list_activityzwraca chronologiczny dziennik zdarzeń, Claude formatuje go w czytelny przegląd.
Żadne z tych zapytań nie wymaga napisania kodu. Wystarczy naturalne zdanie po polsku.
Jak wygląda rozmowa? Przykład na żywo
Poniżej skrócony zapis rzeczywistej rozmowy z Claude Desktop po podpięciu planbudowlany-mcp:
Ja: Mam spotkanie z inwestorem za godzinę. Szybko — co jest opóźnione i ile wydaliśmy do tej pory?
Claude: Sprawdzam projekt…
[wywołuje get_workspace_info, list_tasks z filtrem delayed, get_cost_summary]
Znalazłem 3 opóźnione zadania:
- Instalacja elektryczna — planowana na 10 czerwca, brak aktualizacji od 5 dni
- Tynkowanie ścian zewnętrznych — data minęła 8 czerwca, oznaczone jako
delayed - Dostawa okien PCV — od dostawcy nie przyszło potwierdzenie terminu
Budżet projektu: 320 000 zł. Wydano: 187 400 zł (58,6%). Pozostało: 132 600 zł.
Ja: Dobra. Dodaj notatkę do instalacji elektrycznej — „Czekamy na elektryka, kontakt w przyszłym tygodniu.”
Claude: [pobiera get_task, aktualizuje przez update_task_status]
Zaktualizowano zadanie „Instalacja elektryczna”. Status: delayed, notatka zapisana.
Ja: Przygotuj mi krótkie podsumowanie na e-mail do inwestora.
Claude: Oczywiście:
Szanowny Panie Kowalski,
Projekt przebiega zgodnie z budżetem — wydano 58,6% środków (187 400 zł z 320 000 zł planowanych). Trzy etapy wymagają uwagi: instalacja elektryczna, tynkowanie zewnętrzne i dostawa okien PCV. Pracujemy nad przyspieszeniem — instalator potwierdzi termin w przyszłym tygodniu. Pełny harmonogram i zestawienie kosztów dostępne na platformie.
Cała rozmowa: 2 minuty. Zero klikania w interfejsy, zero kopiowania danych między zakładkami.
Klucze API — element puzzli
Żeby serwer MCP mógł działać bezpiecznie, potrzebuje tożsamości — nie hasła, tylko długożyciowego klucza. W Plan Budowlany wdrożyliśmy właśnie klucze API (z prefiksem pb_...), które opierają się na najlepszych praktykach bezpieczeństwa:
- Restrykcyjny dostęp: Klucz może wygenerować tylko Owner lub Admin danego projektu (ograniczyliśmy to do 5 aktywnych kluczy na workspace). Zablokowaliśmy też możliwość ich tworzenia w wersjach demonstracyjnych, by chronić testowe środowiska.
- Jednorazowy odczyt: Pełny, 46-znakowy klucz (oparty o bezpieczny format Base62) wyświetlamy tylko raz, w momencie generowania. W bazie danych przechowujemy wyłącznie jego bezpieczny hash (SHA-256) oraz krótki prefiks — dokładnie tak samo jak Personal Access Tokens w GitHubie.
- Token Exchange (API Key → JWT): Serwer MCP nie wysyła tego długożyciowego klucza przy każdym zapytaniu o dane. Zamiast tego wywołuje nasz serwer autoryzacji (
/connect/token), używając niestandardowego typu żądania (grant_type=api_key) i wymienia klucz na krótkożyciowy token JWT. Zanim token wygaśnie, agent odświeży go automatycznie w tle. - Izolacja na poziomie projektu (Workspace-scoped): Każdy wygenerowany JWT działa wyłącznie w kontekście jednego, konkretnego projektu (zasilając m.in. wymagany wszędzie nagłówek
X-Workspace-Id), co blokuje złośliwe próby sięgnięcia po dane innych inwestycji użytkownika. - Natychmiastowe unieważnianie (Soft-revoke): Usunięcie klucza z poziomu UI działa od razu. W ułamku sekundy blokujemy do niego dostęp, co przydaje się, gdy konfiguracja omyłkowo trafi na publiczne repozytorium.
Zero haseł w configu. Koniec z wklejaniem własnego adresu e-mail. Pełna kontrola nad tym do jakich danych dostaje się agent.
Skąd wziąć klucz? W aplikacji: Ustawienia workspace → Klucze API → „Wygeneruj klucz”. Pełny klucz
pb_...zobaczysz tylko raz — skopiuj go od razu doPB_API_KEYw configu MCP.
Pełna lista komend (tools) — v0.21.38
Wszystkie narzędzia działają w kontekście jednego projektu (workspace), do którego przypisany jest klucz API. Operacje zapisu (create_*, update_*) wymagają odpowiednich uprawnień w macierzy ról.
| Obszar | Komenda | Co robi |
|—|—|—|
| Workspace | get_workspace_info | Nazwa projektu, waluta, budżet i członkowie zespołu |
| Zadania | list_tasks | Lista zadań głównych (filtr: status, „przypisane do mnie”) |
| | get_task | Pełny szczegół zadania wraz z podzadaniami i ID zależności |
| | create_task | Tworzy nowe zadanie główne |
| | update_task_status | Zmienia status zadania (toDo / inProgress / done / delayed) |
| | create_subtask | Tworzy podzadanie pod istniejącym zadaniem głównym |
| Koszty | list_costs | Lista wydatków projektu |
| | get_cost_summary | Podsumowanie budżet vs. wydatki |
| | create_cost | Dodaje wydatek (musi być przypięty do zadania) |
| Usterki | list_issues | Raporty usterek na budowie |
| | get_issue | Pełny raport usterek — każda usterka z wagą i statusem |
| | update_issue | Nowość — edycja tytułu i opisu pojedynczej usterki |
| Dziennik | list_activity | Dziennik aktywności budowy (najnowsze pierwsze) |
| Harmonogram | get_timeline | Dane harmonogramu / Gantta wraz z zależnościami |
W kolejnych iteracjach planujemy dołożyć m.in. dodawanie wpisów do dziennika (add_journal_entry), załączanie zdjęć do usterek oraz przeszukiwanie bazy plików (list_documents).
MCP zastępuje REST? Nie. Uzupełnia.
To pytanie pojawia się często i rozumiem, dlaczego. Odpowiedź jest jednak prosta:
REST API projektujemy dla deweloperów i frontendu — muszą być dokładne, wersjonowane, zoptymalizowane pod konkretne use case’y.
MCP projektujemy dla agentów — muszą być opisowe, czytelne dla modelu językowego i bezpieczne do wywołania w chainie.
W Plan Budowlany mamy i jedno, i drugie. Frontend Vue.js używa REST. Serwer MCP siedzi na tym samym REST i tłumaczy go na język agentów. To nie rywalizacja — to warstwa abstrakcji.
MCP a Frontend i Aplikacja Mobilna
Agent AI nie sprawi jednak, że przestaniesz używać tradycyjnej aplikacji na telefonie czy w przeglądarce. Służą one do skrajnie różnych scenariuszy:
- Frontend / Aplikacja mobilna: Idealne do akcji „tu i teraz”. Kiedy wchodzisz na budowę, odpalasz aplikację, aby jednym rzutem oka sprawdzić podgląd aktualnych zadań w planie dnia, błyskawicznie oznaczyć etap jako „zakończony” albo zrobić i przypiąć zdjęcie usterki. Liczy się gotowy interfejs (UI) i natychmiastowa reakcja.
- MCP (Claude / AI): Rozwiązuje problemy złożone, analityczne lub wymagające przetwarzania danych tekstowych. Kiedy chcesz zestawić ze sobą opóźnione zadania, powiązać je z zaplanowanym budżetem i zredagować z tego profesjonalne podsumowanie dla inwestora — wyklikiwanie tego w UI to strata czasu. Wywołanie jednego zdania do agenta, który sam odpyta serwer przez MCP i skomponuje raport, to dla odmiany prawdziwa magia.
Wniosek? MCP daje potężny interfejs konwersacyjny dla skomplikowanych operacji, podczas gdy Frontend/Mobile to fundament codziennej, szybkiej pracy operacyjnej z systemem.
Dlaczego to ważne dla SaaS?
Dawniej „integracja” oznaczała Zapier, webhooks, albo własny dział inżynierii klienta. Dziś coraz więcej firm będzie wymagało: „czy wasza aplikacja ma MCP?” — tak samo jak kiedyś pytały o API.
Użytkownik, który umie pisać do Claude’a po polsku, właśnie zyskał dostęp do danych, na który wcześniej musiałby czekać na raport lub zatrudnić analityka.
Dla mnie jako solopreneuera to nie jest feature — to nowy kanał dostępu do produktu. I myślę, że za rok będzie standardem.
Plan Budowlany to platforma do zarządzania projektami budowlanymi. Jeśli budujesz dom lub zarządzasz budową — sprawdź ją na planbudowlany.online.