MCP server · date publice românești

anaf-mcp

Verifici firme după CUI sau nume, citești bilanțuri și iei cursul BNR — direct din Claude sau Codex, printr-un link MCP ori local. Datele vin de la sursă.

Conector remote prin URL Zero dependințe Fără OAuth Fără cont, fără API key 8 tool-uri Licență MIT

Ce face

Un server MCP care poate rula remote prin Streamable HTTP sau local pe calculatorul tău și dă asistentului acces la surse publice și gratuite:

SursăCe conține
ANAF — registrul TVAdenumire, nr. reg. com., adresă, CAEN, plătitor TVA, TVA la încasare, split TVA, firme inactive, radiate, RO e-Factura
ANAF — bilanțurisituații financiare anuale: cifră de afaceri, profit/pierdere, active, datorii, număr de salariați
BNR — curs valutarcursul de referință de azi și din arhiva pe ani

Toate sunt endpoint-uri publice: nu ai nevoie de cont, de cheie de API sau de abonament la vreun agregator.

Tool-urile

anaf_firma

Un CUI: datele complete plus un verdict scurt — „OK" sau „ATENȚIE" dacă firma e inactivă, radiată sau neplătitoare de TVA.

anaf_firme

Până la 100 de CUI-uri într-un singur apel. Întoarce și listele separate de firme inactive, neplătitoare de TVA și negăsite — bun pentru curățat baza de clienți sau furnizori.

anaf_bilant

Situațiile financiare pe un an, cu indicatorii în lei și denumirea CAEN.

bnr_curs

Cursul zilei sau al unei date din trecut. Pentru weekend și sărbători întoarce ultima zi bancară.

bnr_conversie

Conversie între valute la cursul BNR dintr-o dată anume.

search_caen

Caută în nomenclatorul CAEN după cod (4754 sau prefixul 47) ori după cuvinte din denumire. Diacriticele nu contează.

top_firme

Clasamentul firmelor dintr-un an după cifra de afaceri, profit net sau salariați — filtrabil pe cod CAEN și județ. Fără limitări Free/Pro: câte ceri, atâtea primești.

search_company

Caută firma după denumire, nu după CUI — ANAF nu are așa ceva. Folosește lista Registrului Comerțului indexată de server și întoarce CUI-ul.

Varianta rapidă: conector prin link

Deploy-ul remote este public, read-only și nu cere cont, OAuth Client ID, secret sau cheie API.

Deploy with Vercel

După deploy, endpointul conectorului este:

https://NUMELE-DEPLOYMENTULUI.vercel.app/mcp

Claude / Claude Desktop

Deschide Customize → Connectors → + → Add custom connector, pune un nume și lipește URL-ul complet terminat în /mcp. Lasă setările OAuth necompletate.

claude mcp add --transport http anaf https://NUMELE-DEPLOYMENTULUI.vercel.app/mcp
claude mcp list

Codex / ChatGPT desktop

Deschide Settings → MCP servers → Add server → Streamable HTTP și lipește același URL.

codex mcp add anaf --url https://NUMELE-DEPLOYMENTULUI.vercel.app/mcp
codex mcp list
Dacă apare OAuth: verifică URL-ul. Trebuie să fie endpointul HTTPS terminat în /mcp, nu pagina GitHub și nu această pagină de documentație.

Instalare locală (opțional)

1

Descărcare și test

Ai nevoie doar de Python 3 — există deja pe macOS și Linux; pe Windows se ia de pe python.org.

git clone https://github.com/sergiudanstan/anaf-mcp.git
cd anaf-mcp
python3 anaf_mcp.py --firma 14399840

Dacă vezi un JSON cu "denumire": "DANTE INTERNATIONAL SA", serverul merge. Reține calea absolută — o folosești la pașii următori:

pwd    # ex: /Users/dan/anaf-mcp
       # → calea completă e /Users/dan/anaf-mcp/anaf_mcp.py
2

Claude Code local

O singură comandă, din orice folder:

claude mcp add anaf -- python3 /CALEA/ABSOLUTA/CATRE/anaf-mcp/anaf_mcp.py

Adaugă -s user dacă vrei serverul disponibil în toate proiectele, nu doar în cel curent:

claude mcp add anaf -s user -- python3 /CALEA/ABSOLUTA/CATRE/anaf-mcp/anaf_mcp.py
claude mcp list          # anaf trebuie să apară cu ✓ connected

În sesiune, /mcp îți arată tool-urile încărcate. De acolo încolo ceri în limbaj natural:

verifică CUI 14399840 la ANAF
ia-mi bilanțul pe 2024 pentru 14399840 și spune-mi marja netă
am lista asta de CUI-uri din facturi — care sunt inactive sau neplătitoare de TVA?
cât era euro pe 30 iunie 2026?
convertește 12.500 EUR în RON la cursul din 15 martie 2026

Ștergi serverul cu claude mcp remove anaf.

3

Codex local

Editezi ~/.codex/config.toml și adaugi:

[mcp_servers.anaf]
command = "python3"
args = ["/CALEA/ABSOLUTA/CATRE/anaf-mcp/anaf_mcp.py"]

Pe versiunile recente de Codex CLI merge și direct din terminal:

codex mcp add anaf -- python3 /CALEA/ABSOLUTA/CATRE/anaf-mcp/anaf_mcp.py
codex mcp list

Repornești codex și ceri la fel, în limbaj natural.

Capcana uzuală: în Codex secțiunea se numește mcp_servers (cu underscore), iar în Claude mcpServers (camelCase). E cea mai frecventă greșeală de configurare.
4

Claude Desktop local

Editezi ~/Library/Application Support/Claude/claude_desktop_config.json pe macOS, sau %APPDATA%\Claude\claude_desktop_config.json pe Windows:

{
  "mcpServers": {
    "anaf": {
      "command": "python3",
      "args": ["/CALEA/ABSOLUTA/CATRE/anaf-mcp/anaf_mcp.py"]
    }
  }
}

Repornești complet aplicația (Quit, nu doar închis fereastra). Tool-urile apar la iconița MCP din bara de input.

5

Indexul de date (sincronizare unică)

search_company și top_firme lucrează peste un index local. Îl iei gata construit, dintr-o comandă:

python3 anaf_mcp.py --sync

Descarcă ~350 MB de pe GitHub Releases și îl despachetează în ~/.cache/anaf-mcp/. Conține 4.201.586 de firme de la Registrul Comerțului și 899.961 de rânduri din situațiile financiare anuale.

Indexul se reconstruiește cu tools/build_index.py și se publică ca release. Build-ul trebuie rulat dintr-o rețea din România: data.gov.ro rezolvă DNS-ul, dar refuză conexiunile din cloud-ul din afara țării — pe runnerele GitHub expiră.

Fluxul firesc: cauți după nume → iei CUI-ul → îl dai la anaf_firma pentru datele fiscale la zi. Indexul e o fotografie lunară; ANAF e sursa live.

În deployment-ul remote, indexul compact este inclus automat; utilizatorul nu descarcă nimic.

6

Verificare din terminal, fără client

Fiecare tool are un echivalent CLI — util ca să vezi dacă problema e la server sau la client:

python3 anaf_mcp.py --firma RO14399840
python3 anaf_mcp.py --bilant 14399840 2024
python3 anaf_mcp.py --curs 2026-06-30
python3 anaf_mcp.py --caen instalatii electrice
python3 anaf_mcp.py --cauta dante international
python3 anaf_mcp.py --top 4754
python3 anaf_mcp.py --test

Dacă nu merge

SimptomCauză uzuală
serverul nu apare / „failed to connect"calea din config nu e absolută, sau python3 nu e în PATH-ul clientului — pune calea completă, ex. /usr/bin/python3
merge în terminal, dar nu în clientai editat alt fișier de config, sau nu ai repornit clientul
HTTP 403 de la ANAFai modificat USER_AGENT; WAF-ul ANAF respinge șirurile cu paranteze sau ;
date vechie cache-ul: rm -rf ~/.cache/anaf-mcp
Claude cere OAuth Client IDai introdus pagina GitHub în locul URL-ului remote terminat în /mcp

Cache și limite

Cache pe disc în ~/.cache/anaf-mcp/ (sau ANAF_MCP_CACHE_DIR), cu prospețime diferită per tip de date: 6 ore datele de firmă, 30 de zile bilanțurile, 30 de minute cursul zilei, 90 de zile arhiva anilor încheiați.

Limitele ANAF sunt respectate de server: maximum 100 de CUI-uri per apel și un apel pe secundă — cererile se serializează și așteaptă singure.

Ce nu acoperă

Contracte și achiziții publice (SEAP/SICAP). API-ul public de la e-licitatie.ro răspunde, dar filtrele după firmă, dată sau cod CPV sunt ignorate de server — întoarce mereu aceeași felie fixă de 2000 de înregistrări. Fără contractul corect de filtrare, orice tool peste el ar da rezultate greșite, așa că nu există aici.

Asociați, administratori, istoric mențiuni. ONRC le dă doar prin RECOM, contra cost. Lista reprezentanților legali există totuși ca fișier deschis pe data.gov.ro, dacă vrei să o indexezi la fel ca lista firmelor.