MCP — integracja z asystentami AI#
KSeFka obsługuje protokół MCP (Model Context Protocol) — standard pozwalający asystentom AI (Claude, Cursor i innym) bezpośrednio tworzyć faktury, zarządzać kontrahentami i pobierać dane bez opuszczania czatu.
Wymagania#
- Zainstalowana aplikacja KSeFka
- Skonfigurowana firma (Ustawienia → Firmy)
- Wybrane środowisko KSeF (test / demo / produkcja)
- Licencja PRO albo trwający 30-dniowy okres próbny, wspólny z aplikacją i CLI; szczegóły na stronie Licencja PRO
Serwer MCP sprawdza licencję przy każdym wywołaniu narzędzia, nie tylko przy starcie. Gdy okres próbny się skończy, a klient AI wciąż trzyma serwer uruchomiony, każde narzędzie odpowie błędem zaczynającym się od "Funkcja PRO:" z adresem strony zakupu i poleceniem aktywacji ksefka authorize <TOKEN>. Gdy pliku ustawień aplikacji nie da się odczytać, komunikat mówi zamiast tego, jak go naprawić. Po aktywacji licencji narzędzia działają od następnego wywołania, bez restartu klienta AI.
Uruchomienie serwera#
Serwer MCP uruchamia się przez CLI jako proces stdio — klient AI zarządza jego cyklem życia automatycznie:
ksefka mcp
Domyślnie serwer startuje w środowisku zapisanym w preferencjach aplikacji (ostatnio wybranym w sidebarze). Możesz nadpisać środowisko startowe flagą --env:
ksefka mcp --env test
Szybsza konfiguracja: Wklej do czatu z AI: https://ksefka.com/llms.txt — asystent sam się skonfiguruje i wyjaśni jak zacząć.
Konfiguracja Claude Desktop#
Otwórz plik konfiguracyjny Claude Desktop (claude_desktop_config.json) i dodaj wpis:
{
"mcpServers": {
"ksefka": {
"command": "ksefka",
"args": ["mcp"]
}
}
}Lokalizacja pliku konfiguracyjnego:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Konfiguracja Cursor#
W ustawieniach Cursor przejdź do MCP Servers i dodaj:
{
"ksefka": {
"command": "ksefka",
"args": ["mcp"]
}
}Przełączanie środowiska#
Jedna sesja serwera MCP może swobodnie przełączać się między środowiskami KSeF (test / demo / produkcja) bez restartu klienta AI. Dwa narzędzia:
get_environment— zwraca aktualnie aktywne środowisko, ID i nazwę aktywnej firmy. Wywołaj przed każdą mutacją, żeby mieć pewność gdzie pracujesz.switch_environment— zmienia aktywne środowisko natest,demolubproduction. Zmiana jest sesyjna — po restarcie klienta serwer wraca do środowiska startowego: wartości flagi--env, a jeśli nie została podana, do środowiska zapisanego w preferencjach aplikacji desktopowej. Zmiany przezswitch_environmentnie są utrwalane.
⚠️ Gdy aktywne środowisko to production, asystent AI ma w instrukcjach zadanie potwierdzać z Tobą każdą operację mutującą (tworzenie faktur, wysyłanie do KSeF, zmiany kontrahentów). Dla zatwierdzenia faktury do wysyłki i pliku przelewów serwer dodatkowo wymusza zgodę w Ustawieniach i potwierdzenie tokenem, opisane w sekcji Zapis w środowisku produkcyjnym.
Uwaga: flaga --company-id w CLI dotyczy wyłącznie środowiska startowego. Po switch_environment serwer odczytuje aktywną firmę z preferencji nowego środowiska — ID firm są różne w każdej bazie.
Przełączanie firmy#
Jeśli w danym środowisku masz skonfigurowanych kilka firm, sesja MCP może przełączać się między nimi bez restartu klienta AI. Dwa narzędzia:
list_companies— zwraca listę firm dostępnych w bazie danych aktualnie aktywnego środowiska. Każdy element maid,company_name,niporaz flagęis_session_activewskazującą firmę używaną przez bieżącą sesję MCP. Tylko aktywne środowisko — żeby zobaczyć firmy z innego, najpierw wywołajswitch_environment.switch_company— zmienia aktywną firmę w obrębie bieżącego środowiska. Parametrcompany_id(zlist_companies). Zmiana jest sesyjna — nie modyfikuje preferencji aplikacji desktopowej i nie zmienia środowiska. Po restarcie klienta lub poswitch_environmentaktywna firma wraca do firmy zapisanej w preferencjach środowiska.
⚠️ Gdy aktywne środowisko to production, asystent AI powinien potwierdzić z Tobą zmianę firmy przed wywołaniem switch_company. Każda kolejna mutacja zapisze się dla nowo wybranej firmy.
Reset przy zmianie środowiska: wywołanie switch_environment z innym środowiskiem zawsze resetuje aktywną firmę do firmy z preferencji tego środowiska. Jeśli wcześniej zmieniłeś firmę przez switch_company, ta zmiana nie propaguje się do innego środowiska i nie jest zachowywana po powrocie do poprzedniego — każde wejście do innego środowiska zaczyna się od jego domyślnej firmy. Wyjątek: wywołanie switch_environment ze środowiskiem, w którym już jesteś, jest no-op'em i nie resetuje firmy (zachowuje aktualny switch_company).
Zapis w środowisku produkcyjnym#
Dwa narzędzia mają skutki poza KSeFką: finalize_invoice kieruje fakturę do kolejki wysyłki do KSeF, a generate_payment_file tworzy plik, który trafia do banku. W środowisku production oba działają dopiero po spełnieniu dwóch warunków, które sprawdza serwer KSeFki, nie model.
Zgoda w aplikacji. W KSeFce otwórz Ustawienia → CLI → Integracja AI i włącz "Pozwól asystentowi AI zatwierdzać dokumenty w produkcji". Opcja jest domyślnie wyłączona, dotyczy tylko środowiska produkcyjnego i nie da się jej włączyć z czatu ani z wiersza poleceń. Dopóki jest wyłączona, oba narzędzia w produkcji odpowiadają błędem z kodem PRODUCTION_WRITES_DISABLED i nie zmieniają niczego; asystent dostaje w komunikacie ścieżkę do tej opcji.
Potwierdzenie każdej operacji. Pierwsze wywołanie bez tokenu nic nie zapisuje. Zwraca status: "confirmation_required", podgląd skutków (numer faktury, kontrahent, kwota brutto albo liczba przelewów i nazwa pliku) oraz confirmation_token. Asystent ma pokazać Ci podgląd i zapytać o zgodę, a dopiero po Twoim "tak" wywołać narzędzie ponownie z tym tokenem; wtedy faktura trafia do kolejki albo plik powstaje na dysku. Token działa raz, wygasa po 5 minutach i przestaje działać, gdy dokument zmienił się od chwili podglądu (inne pozycje, inny kontrahent, inny rachunek odbiorcy lub firmy, faktura opłacona w międzyczasie). Każdy z tych przypadków kończy się kodem CONFIRMATION_INVALID; asystent wywołuje narzędzie jeszcze raz bez tokenu i pokazuje nowy podgląd. Gdy nie ma czego zapisać (żadna z faktur nie kwalifikuje się do przelewu, dokument nie jest szkicem wystawionym), narzędzie odpowiada od razu, bez tokenu.
Token wraca do tego samego asystenta, więc nie dowodzi, że zgoda przyszła od Ciebie: wymusza krok z podglądem, blokuje zapis jednym wywołaniem i wykrywa zmianę dokumentu między podglądem a wykonaniem. Twarda granica jest jedna: zgoda w Ustawieniach. Dopóki jej nie włączysz, żaden asystent nie zatwierdzi faktury przez finalize_invoice ani nie utworzy pliku przelewów w produkcji; o drodze przez harmonogramy cykliczne, która tej bramki nie ma, mowa niżej.
W środowiskach test i demo nic się nie zmienia: oba narzędzia działają od razu, bez zgody i bez tokenu.
send_now, które wysyła fakturę do KSeF od razu, w produkcji też wymaga zgody w Ustawieniach. Tokenu nie ma, bo wysyła tylko faktury już zatwierdzone: przez finalize_invoice z tokenem albo w aplikacji. Szkic odrzuca z prośbą o zatwierdzenie.
Narzędzia tylko do odczytu#
Każde narzędzie deklaruje adnotacje MCP (readOnlyHint, destructiveHint, idempotentHint), z których klient AI buduje własne pytania o zgodę. Tylko odczytują dane: get_environment, list_companies, list_invoices, get_invoice, list_proformas, get_proforma, list_contractors, get_contractor, lookup_company_by_nip, list_products, get_product, list_templates, get_attachments, list_recurring, get_recurring, monthly_summary, dashboard_stats, fetch_nbp_rate i get_daemon_status. Jako destrukcyjne (mogą nadpisać lub usunąć dane albo skierować dokument do KSeF) oznaczone są finalize_invoice, send_now, generate_payment_file, convert_proforma, cancel_proforma, update_contractor, delete_contractor, remove_attachment, delete_recurring, generate_recurring, process_recurring i ksef_authorize. Pozostałe dodają nowe rekordy albo zmieniają stan, który da się przestawić z powrotem.
Jedna droga do KSeF nie przechodzi przez bramkę: harmonogram faktury cyklicznej utworzony z trybem "gotowa do wysłania" sam kieruje kolejne faktury do kolejki, także gdy utworzy go asystent przez create_recurring_from_invoice. Przy tych narzędziach w produkcji asystent ma jedynie prośbę o potwierdzenie z opisu narzędzia; sprawdzaj tryb harmonogramu, który proponuje.
Treść faktur a asystent AI#
Faktury otrzymane pisze ktoś inny. Nazwa pozycji, opis albo uwagi na fakturze zakupowej mogą zawierać zdanie skierowane do asystenta, na przykład polecenie zatwierdzenia dokumentu albo zmiany rachunku kontrahenta. Gdy asystent czyta taką fakturę przez get_invoice, to zdanie trafia do jego kontekstu razem z danymi i model może je potraktować jak Twoje polecenie. Dlatego zgoda w Ustawieniach jest po stronie serwera: asystent, który dał się namówić, nie zatwierdzi faktury przez finalize_invoice ani nie utworzy pliku przelewów, dopóki jej nie włączysz. Po włączeniu chroni Cię to, że asystent musi przejść przez podgląd, i Twoja uwaga przy tym podglądzie. Przy zmianach kontrahentów, rachunków i harmonogramów cyklicznych, które nie przechodzą przez tę bramkę, czytaj to, co asystent proponuje, zanim się zgodzisz.
Dane, które asystent pobiera z KSeFki, trafiają do dostawcy modelu, z którym rozmawiasz (Anthropic dla Claude, OpenAI dla ChatGPT, operator modelu w Cursorze). KSeFka niczego sama nie wysyła: wynik każdego narzędzia odbiera klient AI na Twoim komputerze i to on przekazuje go do modelu. Numery faktur, nazwy i NIP-y kontrahentów, kwoty i numery rachunków, o które zapytasz, są więc przetwarzane na warunkach tego dostawcy. Jeśli nie chcesz, żeby dane produkcyjne opuszczały komputer, pracuj z asystentem w środowisku demo albo pytaj o konkretne faktury zamiast o całe listy.
Synchronizacja i wysyłka do KSeF#
Serwer MCP sam nie łączy się z KSeF. Synchronizację i wysyłkę zleca procesowi pracy w tle (demonowi), który uruchamia otwarta aplikacja KSeFka albo komenda ksefka daemon start (opis w dokumentacji CLI). Gdy demon nie działa, nic nie jest pobierane z KSeF ani do niego wysyłane, a sync_now i send_now odpowiadają błędem z kodem DAEMON_NOT_RUNNING i podpowiedzią, jak go uruchomić. Ten sam kod dostaniesz, gdy demon działa na innym środowisku niż sesja MCP.
sync_nowsynchronizuje firmę aktywną w sesji (albo podaną wcompany_id) i czeka na wynik do 2 minut. Gdy części faktur nie pobrała, odpowiedź mastatus: "partial"i listę problemów wresult.failures. Dłuższa synchronizacja trwa dalej w demonie, a odpowiedź mastatus: "in_progress".send_nowzinvoice_idwysyła zatwierdzoną fakturę i czeka na status z KSeF do 2 minut. Bezinvoice_idzleca wysyłkę wszystkich zatwierdzonych faktur firmy i odpowiada od razu.finalize_invoicezsend_now: truezatwierdza fakturę i od razu ją wysyła. Status z KSeF jest w polusendodpowiedzi. Gdy wysyłka nie ruszy (brak demona, odmowa demona), faktura zostaje zatwierdzona i wyjdzie z kolejką; fakturę odrzuconą przez KSeF trzeba poprawić i wysłać ponownie.get_daemon_statusmówi, czy demon działa, kiedy ostatnio zsynchronizował każdą firmę i do kiedy trwa blokada po limicie zapytań KSeF.
Dostępne narzędzia#
| Narzędzie | Opis |
|---|---|
| Sesja | |
get_environment | Zwraca aktywne środowisko KSeF, ID i nazwę aktywnej firmy |
switch_environment | Przełącza aktywne środowisko (test / demo / production) bez restartu — sesyjnie. Resetuje aktywną firmę do firmy z preferencji nowego środowiska |
list_companies | Lista firm dostępnych w bazie aktywnego środowiska, z oznaczeniem aktywnej |
switch_company | Przełącza aktywną firmę w obrębie bieżącego środowiska — sesyjnie, bez zmiany środowiska |
| Faktury | |
list_invoices | Lista faktur z filtrowaniem po kierunku, miesiącu, statusie, kontrahencie i wartości |
get_invoice | Szczegóły faktury wraz z pozycjami |
create_invoice | Utwórz fakturę (VAT, korygującą, zaliczkową, rozliczeniową) — dane jako obiekt JSON |
finalize_invoice | Przenieś szkic do stanu "gotowa do wysłania do KSeF". W produkcji dwa kroki: podgląd z tokenem, potem zatwierdzenie. Z send_now: true od razu wysyła przez demona |
unfinalize_invoice | Cofnij finalizację faktury z powrotem do szkicu |
copy_invoice | Skopiuj fakturę jako nowy szkic z dzisiejszą datą |
mark_invoice_paid | Oznacz fakturę jako opłaconą lub nieopłaconą (lokalna adnotacja użytkownika, nie pole KSeF/XML) |
export_invoice | Eksportuj fakturę do PDF i/lub XML. PDF zawiera kod QR, gdy faktura ma numer KSeF lub certyfikat offline |
generate_payment_file | Wygeneruj plik przelewów (Elixir-0, MPP albo SEPA) dla faktur otrzymanych do zapłaty. W produkcji dwa kroki: podgląd z tokenem, potem zapis pliku |
open_invoice | Otwórz fakturę w aplikacji desktopowej do podglądu lub edycji |
| Załączniki | |
attach_file | Dodaj załącznik do faktury (pdf, png, jpg, jpeg, webp, gif, bmp, tiff) |
get_attachments | Lista załączników faktury |
remove_attachment | Usuń załącznik faktury |
| Faktury cykliczne | |
list_recurring | Lista harmonogramów faktur cyklicznych aktywnej firmy |
get_recurring | Szczegóły harmonogramu faktury cyklicznej |
create_recurring_from_invoice | Utwórz harmonogram faktury cyklicznej na podstawie istniejącej faktury — kopiuje pozycje, kontrahenta i ustawienia płatności |
pause_recurring | Wstrzymaj harmonogram faktury cyklicznej |
resume_recurring | Wznów wstrzymany harmonogram faktury cyklicznej |
generate_recurring | Wygeneruj kolejne wystąpienie faktury cyklicznej teraz, niezależnie od daty |
process_recurring | Przetwórz wszystkie zaległe harmonogramy — generuje faktury dla wszystkich, których data następnego wystąpienia już minęła. Zwraca ok oraz osobne listy generated i failed (nazwa harmonogramu i powód), więc asystent widzi każdy harmonogram, który został bez faktury |
delete_recurring | Usuń harmonogram faktury cyklicznej |
| Kontrahenci | |
list_contractors | Lista kontrahentów z wyszukiwaniem po nazwie lub NIP |
get_contractor | Pełne dane kontrahenta |
create_contractor | Dodaj nowego kontrahenta |
update_contractor | Zaktualizuj dane kontrahenta |
delete_contractor | Usuń (dezaktywuj) kontrahenta |
lookup_company_by_nip | Pobierz dane firmy z rejestru GUS BIR1 na podstawie NIP |
| Produkty | |
list_products | Lista produktów/usług z katalogu |
get_product | Szczegóły produktu |
create_product | Dodaj produkt do katalogu — opcjonalne parametry vat_exemption_reason_type i vat_exemption_reason zapisują podstawę zwolnienia przy stawce zw. |
| Raporty i kursy walut | |
monthly_summary | Podsumowanie miesięczne: suma przychodów i kosztów |
dashboard_stats | Statystyki bieżącego miesiąca |
fetch_nbp_rate | Kurs średni NBP dla waluty na dany dzień |
| Szablony i KSeF | |
list_templates | Lista szablonów faktur |
ksef_authorize | Zapisz token autoryzacyjny KSeF |
| Praca w tle | |
sync_now | Synchronizuj firmę z KSeF teraz, czekaj na wynik do 2 minut |
send_now | Wyślij zatwierdzoną fakturę albo kolejkę firmy do KSeF teraz |
get_daemon_status | Stan demona: czy działa, ostatnia synchronizacja firm, blokada po limicie KSeF |
Przykład#
Wpisujesz do czatu:
AI kolejno wywołuje:
list_contractors— szuka "Acme" w bazie kontrahentówcreate_invoice— tworzy fakturę: kierunekissued, 1 pozycja (10 h × 200 zł, VAT 23%), kontrahent z poprzedniego kroku, termin płatności +14 dniopen_invoice— otwiera fakturę w aplikacji do podglądu i ewentualnej korekty
Efekt: w KSeFce pojawia się gotowy szkic faktury na kwotę 2460 zł brutto (2000 zł netto + 460 zł VAT). Możesz go przejrzeć, poprawić i wysłać do KSeF — bez ręcznego wypełniania formularza.
Serwer MCP zawiera wbudowane instrukcje dla AI dotyczące faktur korygujących, zaliczkowych, rozliczeniowych oraz faktur w walutach obcych z automatycznym kursem NBP.