Jak programistycznie sprawdzić polską firmę (VAT, Biała Lista, KRS) — REST, Python, MCP A developer has released skanfirmy.pl, a free tool that aggregates Polish official business registries (VAT status, White List, KRS, REGON, VIES) into simple REST endpoints returning JSON, with no API key required. The service also exposes a Model Context Protocol (MCP) server for AI agents, enabling programmatic verification of Polish companies via HTTP calls from curl, Python, or AI assistants. Weryfikacja kontrahenta to w Polsce nie fanaberia, tylko element należytej staranności — status VAT i zgodność rachunku z Białą Listą wprost wpływają na to, czy zaliczysz koszt i odliczysz VAT. Problem w tym, że oficjalne źródła Ministerstwo Finansów, Ministerstwo Sprawiedliwości, GUS, Komisja Europejska mają rozproszone, różniące się między sobą API. Poniżej pokazuję, jak sprowadzić to do kilku wywołań HTTP, które zwracają czysty JSON — z poziomu curl , Pythona i agenta AI mówiącego protokołem MCP. Wszystkie przykłady korzystają z skanfirmy.pl https://skanfirmy.pl — zestawu narzędzi do weryfikacji firm po NIP/KRS/REGON oraz unijnego VAT VIES . Dane pochodzą wprost z oficjalnych rejestrów, endpointy są bez opłat i bez rejestracji bez klucza API , a warstwa webowa działa client-side, bez trackingu. Najprostszy przypadek — sprawdzenie NIP-u. Endpoint jest publiczny, metoda GET , odpowiedź to JSON: curl https://skanfirmy.pl/nip/5260250995 W odpowiedzi dostaniesz m.in. status VAT czynny/zwolniony/niezarejestrowany , dane podmiotu z Wykazu VAT oraz rachunki figurujące na Białej Liście. Dostępne ścieżki: GET /nip/{nip} — status VAT i dane z Białej Listy dla jednego NIP-u GET /nips/{lista} — kilka NIP-ów naraz lista rozdzielona przecinkami GET /regon/{nip} — dane z rejestru REGON GUS GET /vies/{country}/{number} — walidacja unijnego numeru VAT np. /vies/DE/811128135 Ponieważ to zwykły GET zwracający JSON, wpina się bez ceremonii w dowolny pipeline — cron, funkcję serverless, hook w CI, cokolwiek co potrafi zrobić request HTTP. Z biblioteką requests całość mieści się w kilku linijkach. Poniżej minimalna funkcja, która sprawdza status VAT i sygnalizuje wyjątkiem, gdy podmiot nie jest czynnym płatnikiem: php import requests def sprawdz vat nip: str - dict: r = requests.get f"https://skanfirmy.pl/nip/{nip}", timeout=10 r.raise for status dane = r.json status = dane.get "vatStatus" or dane.get "status" if status = "Czynny": raise ValueError f"NIP {nip}: status VAT = {status r}" return dane wynik = sprawdz vat "5260250995" print "Rachunki na Białej Liście:", wynik.get "accountNumbers", Jedna uwaga na dobre praktyki: literały zwracane przez rejestry MF "Czynny" , "Zwolniony" traktuj jako wartości kanoniczne — porównuj się do oryginału, a ewentualne tłumaczenie zostaw wyłącznie na warstwę prezentacji. Dzięki temu logika nie rozjedzie się przy zmianie języka interfejsu. Masę NIP-ów do przetworzenia hurtowo? Do jednorazowego batcha z eksportem CSV/JSON jest webowe /bulk https://skanfirmy.pl/bulk , a programistycznie ten sam efekt osiągniesz przez GET /nips/{lista} . Tu robi się ciekawie. Kluczowy wyróżnik skanfirmy.pl to pełna dostępność dla agentów: pod https://skanfirmy.pl/mcp stoi serwer Model Context Protocol https://skanfirmy.pl/mcp z 9 narzędziami — również bez klucza API. Agent np. asystent księgowy może wywołać weryfikację NIP-u tak samo, jak człowiek klika w formularz. MCP mówi po JSON-RPC 2.0 przez POST . Wywołanie konkretnego narzędzia to metoda tools/call : curl -X POST https://skanfirmy.pl/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sprawdz nip", "arguments": { "nip": "5260250995" } } }' Listę narzędzi z ich schematami wejścia zwróci tools/list ta sama koperta, inna method . Dla agentów, które wolą samo REST, jest jeszcze https://skanfirmy.pl/llms.txt — mapa endpointów i sposobu użycia w formacie czytelnym dla modeli. Chcąc iść szerzej niż polskie rejestry, zajrzyj do serwisu siostrzanego otwarteapi.pl https://otwarteapi.pl — katalogu publicznych API polskich i światowych pod kątem agentów AI. Status VAT kontrahenta czy jego rachunek na Białej Liście potrafią zmienić się z dnia na dzień — a jednorazowy check tego nie wychwyci. Dlatego jest /monitoring https://skanfirmy.pl/monitoring : codzienne alerty o zmianie statusu VAT lub rachunku, z powiadomieniem push przez webhook podpisany HMAC. W praktyce dopinasz endpoint u siebie, weryfikujesz podpis nagłówka i reagujesz — bez odpytywania rejestrów w pętli. Cały serwis jest dwujęzyczny. Angielskie odpowiedniki stron żyją pod prefiksem /en/ np. https://skanfirmy.pl/en/ , a endpointy REST i MCP są językowo neutralne — działają identycznie niezależnie od tego, po której stronie interfejsu jesteś. Podsumowując: trzy warstwy, jedno źródło danych. curl /GET do szybkiego sprawdzenia, requests do wpięcia w kod, MCP do agenta — wszystko zwraca JSON, bez rejestracji i bez klucza API. Reszta to już Twój pipeline.