Investigator MCP
APPRomanian Public Records for AI Clients
JUL 2026

"Nu e un site pe care cauti. E o baza pe care o dai AI-ului tau."
Overview
Romania publishes a lot: every MP and magistrate files a wealth and interests declaration, every public contract lands in SEAP, court registries are online, Securitate collaboration verdicts are public, laws are published article by article. It is all public and almost none of it is usable — different portals, scanned PDFs, no identifiers, no way to cross-reference.
Investigator MCP turns that pile into one queryable layer and exposes it through the Model Context Protocol, so a journalist connects it to the assistant they already use — Claude, Claude Code, Cursor, ChatGPT, Gemini CLI — and their model suddenly knows Romanian wealth declarations, public contracts and court records alongside everything else it knows. No AI client? The same tools run from a hosted chat in the browser.
It started in December 2025 as an internal dashboard for investigative journalists and became, in July 2026, a launched product with 35 tools live, OAuth, billing, and a free tier that civic NGOs, activists and researchers never pay for.
What's in the data plane
- 1,690 members of parliament (461 currently serving, 1,229 historical back to 2008) and 6,776 magistrates — judges and prosecutors across 36 courts
- 8,857 declaration PDFs parsed with Gemini Vision into ~62,000 structured facts: real estate, income, bank accounts, investments, vehicles, loans, divested assets
- ~126,000 public procurement contracts published from a 3.4 GB local SEAP corpus (470K tenders, 22M direct acquisitions)
- Court case search across 246 courts, CNSAS verdicts, full-text legislation, company fiscal status, diaspora election results, Eurostat series
What it can answer
The interesting part isn't lookup, it's the analysis baked into the tools:
- Conflicts of interest — declaration counterparties matched against SEAP suppliers, scored by severity
- Subsistence test — declared income against inferred family size, per day
- Income vs acquisitions — anomaly scoring when what was bought outruns what was earned
- Diploma mills — education cross-checked against flagged universities (76 MPs flagged, 98 problematic diplomas)
- Sinecurists — classification from real plenary activity rather than titles (52 found)
- FOIA drafting — generates legally formatted Legea 544/2001 requests with the right institution
- Book fact-checking — verifies claims politicians make about their own publications
Engineering highlights
One tool registry, two surfaces
The same declaration file drives both the hosted Gemini agent and the MCP tool list, transpiled from Gemini's schema into MCP JSON Schema. The web agent and what Claude sees can't drift apart, because there is only one source.
A denylist no config can override
Tool exposure is an env allowlist followed by a hard-coded denylist. Even setting the allowlist to everything cannot expose the tools blocked for licensing reasons or under GDPR Article 10 (criminal-record data). Each block carries its rationale inline, and the site publishes a legal basis per tool.
Privacy as a schema constraint
Personal identification numbers, exact home addresses, minors' names and birth dates are never persisted. Income tools drop names; property tools reduce location to county. Data minimization is enforced where the rows are written, not in a policy document.
LLM ergonomics in the response shape
Wealth declarations restate the same assets every year, so a naive model sums them and reports a politician ten times richer than they are. Every wealth tool returns a deduplicated snapshot plus a trajectory, with explicit guidance telling the model never to sum the series.
Entity resolution that survives the sources
Parliament sites spell the same person three ways across chambers and legislatures. A six-stage dedup chain runs automatically after every scrape — token overlap with mandate-collision checks, cross-chamber merges on non-overlapping legislatures, stub cleanup, optional birth-date verification.
Cache-first, cost-aware
Every tool call goes through a content-addressed cache keyed on the tool and arguments, with per-tool TTLs and automatic invalidation when a scraper touches the underlying rows. Cache hits answer in under 50ms and cost nothing upstream. Per-call token, latency and cost telemetry feeds a daily budget alert.
Permanent citations
Every extracted fact keeps a hash-addressed archived copy of its source PDF, so a citation in a published article survives the day parliament reorganizes its website.
Access
Free tier for anyone, Pro at €29/month for commercial newsrooms, and civic tiers granted free to NGOs, activists and independent journalists — the paying users subsidize the ones who can't. Connection is one command (claude mcp add) with OAuth 2.1 and dynamic client registration, the same pattern Notion and Figma use — no API keys to paste.
Why I built this
Because the data was already public and still unusable, and because the people who should be using it — journalists, not engineers — shouldn't have to write scrapers. Built with input from anti-corruption journalist Valeriu Nicolae. It is a personal project, closed source, and not built to make money.




