FakturaXL MCP Server

FakturaXL MCP Server

Enables read-only interaction with the FakturaXL API for querying invoices, clients, products, and stock levels with pagination, date chunking, and rate limiting.

Category
访问服务器

README

FakturaXL MCP Server

Zdalny, read-only serwer MCP dla API FakturaXL. Wystawiany pod URL przez Streamable HTTP — klient MCP podaje adres serwera oraz klucz API FakturaXL w nagłówku Authorization: Bearer.

Stack

  • Node.js (>=20) + TypeScript (ESM)
  • @modelcontextprotocol/sdk v1.x (McpServer + StreamableHTTPServerTransport)
  • Express (endpoint HTTP)
  • fast-xml-parser (API FakturaXL komunikuje się XML-em)

Instalacja

npm install
cp .env.example .env   # Windows: copy .env.example .env

Uruchomienie

npm run dev     # tryb deweloperski (tsx watch)
npm run build   # kompilacja do dist/
npm start       # uruchomienie z dist/

Serwer nasłuchuje na http://localhost:<PORT>/mcp (domyślnie port 3000). Health check: GET /health.

Konfiguracja (.env)

Zmienna Domyślnie Opis
PORT 3000 Port serwera HTTP
FAKTURAXL_BASE_URL https://program.fakturaxl.pl/api Bazowy URL API
FAKTURAXL_TIMEOUT_MS 30000 Timeout wywołań do FakturaXL
LOG_LEVEL info debug / info / warn / error
LOG_TO_FILE true Zapis logów do logs/fakturaxl-YYYY-MM-DD.log
DEFAULT_LIST_LIMIT 50 Domyślna liczba wierszy zwracanych z list
MAX_LIST_LIMIT 500 Twardy górny limit zwracanych wierszy
MAX_RANGE_MONTHS 24 Maks. zakres dat dla auto-chunkingu (potem przycięcie + ostrzeżenie)
CACHE_TTL_MS 300000 TTL cache list słownikowych (klienci/produkty/...)
PAGE_SIZE 500 Rozmiar strony przy auto-paginacji
RATE_LIMIT_RETRIES 5 Liczba prób przy kodzie 2 (rate limit)

Warstwa praktyczna (agent-friendly)

Serwer nie jest cienkim wrapperem — ukrywa uciążliwości API przed agentem:

  • Auto-paginacja — pobiera wszystkie strony pod spodem; agent nie widzi strona/na_stronie.
  • Chunking dat — dowolny zakres jest wewnętrznie dzielony na okna ≤31 dni (limit API) i scalany. Powyżej MAX_RANGE_MONTHS zakres jest przycinany z ostrzeżeniem.
  • Natywny throttling — globalny rate limiter respektuje odstępy z dokumentacji (dokumenty 5 s; produkty/klienci/stany 10 s; reszta 1 s) + retry z backoff na kod 2. Agent nigdy nie dostaje błędu limitu.
  • Filtrowanie po kliencie (którego API nie ma) — po nazwie (fuzzy) lub NIP, realizowane po stronie serwera.
  • Compact + summary + has_more — listy zwracają skrócone rekordy, zawsze z agregatami (liczba, sumy per waluta, rozkład statusów/rodzajów) i informacją o obcięciu, żeby nie zalewać kontekstu agenta.
  • Cache TTL — listy słownikowe (klienci/produkty/magazyny/działy) są cache'owane, co przyspiesza wyszukiwanie i ogranicza wywołania.

Autoryzacja

Jeden sekret: klucz API FakturaXL = token Bearer. Klient MCP wysyła w każdym żądaniu nagłówek:

Authorization: Bearer <TWOJ_KLUCZ_API_FAKTURAXL>

Brak nagłówka → HTTP 401. Nieprawidłowy klucz → FakturaXL zwraca kod 3, mapowany na czytelny błąd narzędzia. Serwer działa w trybie stateless (nowa instancja per request; klucz nie jest nigdzie przechowywany).

Dostępne narzędzia (tylko odczyt)

Narzędzie Opis
lista_dokumentow Faktury dla dowolnego zakresu dat + filtr klienta/statusu/typu/rodzaju. Compact + summary + has_more.
podsumowanie_dokumentow Same agregaty (liczba, sumy per waluta, rozkład statusów/rodzajów) — bez wierszy.
pobierz_dokument Pełne dane pojedynczego dokumentu po ID.
pobierz_pdf PDF dokumentu w base64.
znajdz_klienta Wyszukiwanie klienta po nazwie/NIP.
lista_klientow Lista klientów (opcjonalny filtr szukaj).
znajdz_produkt Wyszukiwanie produktu po nazwie/kodzie/kodzie kreskowym.
lista_produktow Lista produktów (opcjonalny filtr szukaj).
stany_magazynowe Ilości produktów w magazynach.
lista_magazynow Lista magazynów.
lista_dzialow Lista działów firmy.

Przykład (agent): „faktury od K8 z ostatniego kwartału” → lista_dokumentow z data_od/data_do i klient: "K8". Chunking, paginacja, throttling i mapowanie nazwy klienta na klient_id dzieją się wewnętrznie.

Świadomie pominięte (bo zakres read-only): wystawianie faktur/korekt, wysyłka e-mail, KSeF, relacje, tagi, zmiana statusu.

Logowanie

Każde wywołanie API FakturaXL logowane jest jako raw request/response (URL, nagłówki, body, status). Token API jest maskowany (widoczne tylko ostatnie 4 znaki). Logi trafiają na konsolę oraz — gdy LOG_TO_FILE=true — do katalogu logs/.

Struktura

src/
  index.ts                 # Express + Streamable HTTP + Bearer auth + error handler
  server.ts                # buildServer(apiToken) - instancja McpServer per request
  config.ts                # konfiguracja z .env
  logger.ts                # logger JSON + maskowanie sekretów
  tools/register.ts        # rejestracja narzędzi read-only (compact + summary + limit)
  fakturaxl/client.ts      # XML->POST->JSON, mapowanie błędów, rate limiter + retry
  fakturaxl/rateLimiter.ts # globalny throttling per endpoint (odstępy z dokumentacji)
  fakturaxl/pagination.ts  # auto-paginacja (fetchAllPages)
  fakturaxl/dates.ts       # chunking zakresu dat na okna <=31 dni + cap 24 mies.
  fakturaxl/cache.ts       # cache TTL w pamięci
  fakturaxl/service.ts     # getDocuments, findClients/Products, listy słownikowe
  fakturaxl/compact.ts     # compact mappery + agregacja (summary)
  fakturaxl/codes.ts       # mapa kodów zwracanych przez API
docs/
  api-fakturaxl.md         # dokumentacja API FakturaXL
Dockerfile                 # multi-stage: build / runtime (prod) / dev
docker-compose.dev.yml     # lokalny dev (hot-reload, bez Traefika)
docker-compose.example.yml # szablon compose produkcyjnego (Traefik) do skopiowania

Docker

Serwer jest bezstanowy i nie przechowuje sekretów — klucz API FakturaXL podaje klient MCP per request (Bearer). Dlatego obrazy/compose nie zawierają danych wrażliwych.

Pliki:

  • Dockerfile — multi-stage (build → runtime produkcyjny, oraz dev z hot-reload). Obraz produkcyjny na node:22-alpine, uruchamiany jako user node, z healthcheckiem /health.
  • docker-compose.dev.yml — lokalny development (tsx watch, port 3000:3000, bez Traefika).
  • docker-compose.example.yml — szablon produkcyjny za Traefikiem (TLS, zewnętrzna sieć traefik-net) do skopiowania i dostosowania (MCP_DOMAIN, TRAEFIK_CERTRESOLVER).

Dev (lokalnie)

docker compose -f docker-compose.dev.yml up --build
# MCP: http://localhost:3000/mcp   health: http://localhost:3000/health

Serwer (produkcja, Traefik)

Wymaga istniejącej zewnętrznej sieci traefik-net. Skopiuj szablon i ustaw domenę/certresolver przez zmienne:

cp docker-compose.example.yml docker-compose.yml
# w .env obok compose:
#   MCP_DOMAIN=fakturaxl-mcp.twoja-domena.pl
#   TRAEFIK_CERTRESOLVER=myresolver
docker compose up -d

Router nasłuchuje na ${MCP_DOMAIN} (entrypoint websecure, TLS przez ${TRAEFIK_CERTRESOLVER:-myresolver}), kierując ruch na port 3000 kontenera. W mcp.json klienta użyj wtedy https://<MCP_DOMAIN>/mcp z nagłówkiem Authorization: Bearer <klucz>.

Test lokalny (MCP Inspector)

npx @modelcontextprotocol/inspector

W Inspectorze: transport Streamable HTTP, URL http://localhost:3000/mcp, nagłówek Authorization: Bearer <klucz>.

Wdrożenie produkcyjne (Linux)

Rekomendowana ścieżka to Docker + Traefik (sekcja „Docker" powyżej):

MCP_DOMAIN=fakturaxl-mcp.twoja-domena.pl docker compose up -d --build

Alternatywnie bez Dockera: npm ci && npm run build && npm start za reverse proxy (nginx/Caddy/Traefik) z TLS, kierującym /mcp na port aplikacji.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选