India's public records are "public" in name only.
Blocked by WAFs. Gated by CAPTCHAs. Scattered across seven portals that were never designed to talk to each other.
AI makes it worse. LLMs hallucinate directorships, fabricate court citations, and invent company affiliations with the confidence of fact and the reliability of chance. In a field where one missed link can change a case, an unsourced answer isn't innovation — it's a liability dressed up as intelligence.
Vajra exists because we refuse to accept this.
We build graph-native link analysis that connects fragmented records into a knowledge graph — every node carrying a source URL, every edge carrying a retrieval timestamp. We never draw conclusions. We assemble provenance-stamped leads and hand them to humans who decide what they mean.
Every lead carries its source. Every connection carries proof.
Seven portals. Seven silos. One researcher doing it alone.
These records live across disconnected government portals, each with its own schema, its own access barriers, and its own quiet way of saying "the data is public, but you can't have it." Researchers spend 40 hours per matter hopping between them, downloading PDFs, copy-pasting into spreadsheets, and hoping — hoping — they didn't miss a hidden directorship in a shell company three layers deep.
Their citations break. Their notes go unverified. Their colleagues redo the same work slightly differently next week. No one can prove what was checked, what was missed, or where every lead came from.
This is not diligence. It is a system that was never designed for the people who depend on it.
One name. Four phases. Every lead traced to its source.
A researcher gives Vajra a name. Vajra runs a four-phase investigation pipeline and stores every result in a Neo4j knowledge graph — with a source URL and retrieval timestamp on every node and every edge. Checkpoints make it resume-safe.
Profile & declared assets
Pulls election affidavits from MyNeta/ADR: declared assets, liabilities, party affiliation, constituency, criminal-record disclosures.
Creates Politician and Asset nodes linked by DECLARED edges — each carrying the affidavit page URL.
Corporate & donations
Searches MCA21 for director history, OpenCorporates for cross-border registrations, and the ECI bond-by-bond release for donor-to-party flows.
Creates Company, Donation, and PoliticalParty nodes linked by DIRECTOR_OF and MADE_DONATION edges.
Litigation & case status
Queries eCourts for case status and Indian Kanoon for full-text judgment search. Detects CAPTCHA walls, surfaces them honestly, and falls back to Kanoon.
Creates CourtCase nodes linked by INVOLVED_IN edges. A case mention is a lead, never a finding of guilt or status.
Network & shortest paths
Analyzes the stored graph: company networks, common connections, shortest paths between entities, and cross-source graph queries a spreadsheet can never surface.
Returns json, cypher, or dot exports — every node and edge in the result already carries a source URL.
Every result is a lead — a research finding with provenance, not a conclusion. The tool shows you where to look. You decide what it means.
Five differentiators. No fluff.
Every line below is something the codebase and live VM store validate — verified test runs, real writes, real audit trails, real protocol negotiations. Nothing is a forecast or a slogan.
Provenance is the product
Every node & edge stores a source URL & retrieval timestamp. The same query that gives you the answer tells you where it came from.
Graph-native, not tabular
Director → Company → Donation → Party → Court Case. Connected via a Neo4j knowledge graph. One query, not five spreadsheets.
India-first, not India-added
We handle Akamai WAFs on MCA21. We parse MyNeta's 2024 layout. We detect eCourts' CAPTCHA. India is the only market.
Embeddable via MCP
Vajra ships as an MCP tool provider — stdio & Streamable HTTP, both protocol 2024-11-05 / 2025-03-26 and 2026-07-28. Embed Vajra's graph in any legal-AI host.
Read-only by design
The API is locked down. The write path is gated behind `mcp.allow_investigate`. The only person who can damage the graph is the person who owns it.
Seven registries. One graph. Every node provenance-stamped.
Vajra scrapes what it can reach, parses what it finds, and links what it stores. When a source blocks automated access — MCA21's Akamai WAF, eCourts' CAPTCHA — we surface the failure honestly. We do not silently skip. We do not fabricate fallback.
| Source | What it holds | Status |
|---|---|---|
| MyNeta / ADR | Election affidavits, declared assets & liabilities | ● Active · 2024-layout parser & constituency fallback |
| ECI bond disclosures | Electoral-bond purchaser/encashment data (by bond #) | ● Active · 14,491 donations seeded |
| Indian Kanoon | Court judgments, case text, criminal-case detection | ● Active · most reliable source |
| MCA21 | Corporate filings, director lists, CINs, DINs | ◐ Best-effort · Akamai WAF blocks automation |
| OpenCorporates | Cross-border company registrations & officers | ◐ Best-effort · requires API key |
| eCourts v6 | Case status, filings, court orders | ◐ Best-effort · CAPTCHA required per search |
| CIC / RTI | RTI disclosures, government responses | □ Stub · not yet implemented |
329 politicians profiled · 9,870 assets linked · 14,491 donations mapped · 1,317 donor companies · 24 parties
Every number traces to a verified run against the live Neo4j store on the GCP VM. None are projections. See docs/STATUS.md for audit logs.
Three planes. One Neo4j per customer. Read-only by default.
Vajra is engineered for high-stakes work — disputes, white-collar, diligence, investigations. The architecture is the guarantee. Engineering facts, not aspirations.
Investigation runner
- Disk checkpoints for minutes-to-hours runs
- Polite per-source rate limits; one stable egress IP
- Source-rights controls per pilot scope
- Only writer to customer Neo4j via `vajra` CLI
Hosted Neo4j · one per customer
- Dedicated instance per customer agency
- Per-customer evidence directory; no shared state
- Schema constraints & indexes for identity stability
- Resumed sessions re-scope to the current `allow_investigate` setting after restart
Read-only API tier · serverless
- Read-only FastAPI (PilotGuard enforced)
- `X-API-Key` per customer · 401 without · per-key rate limit
- Ephemeral fs · never writes to disk · audit-only logs
- Interactive docs at
/docs· health at/health
Read-only by default
Public REST mutations return 403. The MCP write tool is hidden from `tools/list` unless `mcp.allow_investigate=true`. The architecture, not a flag, locks the graph down.
Per-customer isolation
One dedicated Neo4j per agency; no shared credentials, ports, logs, or backups between tenants.
Provenance-audited
Every request produces a JSON audit line with masked credentials, tool method, key hash, and JSON-RPC error code. MCP bearer-token rotation is tamper-evident: each retired token is hash-chained into an auditable store.
Human review required
A named reviewer accepts or rejects every material lead. The graph produces findings; the human produces conclusions.
For people who refuse to guess.
The lawyer who refuses to file a memo based on unverified AI output
The investigator who knows one missed directorship can change a case
The journalist who needs every claim to carry a source before it goes to print
The compliance officer who needs an audit trail, not just an answer
The platform team embedding entity investigation into a legal-AI host
The researcher tired of spending 40 hours doing what should take minutes
They share a worldview: evidence before conclusions, provenance before claims, human judgment before automation.
One scoped matter. Four weeks. Evidence before enthusiasm.
Run one real investigation through Vajra. We bring the graph, the API, the MCP server, and an audit trail. You bring the real matter, the named reviewer, and the willingness to grade us honestly at the end. Cell A: ₹50,000 · Cell B: ₹75,000 · Cell C: ₹1,20,000. The cell is fixed; the matter is yours.
Scope one matter
An authorized scope: entities, sources, date window, named reviewer, success criteria. Opaque matter IDs only — no PII ever enters the system.
Stand up isolated env
Dedicated Neo4j instance, dedicated evidence directory, per-customer API key. pilot.enabled fail-closed. No shared state.
Run the pipeline
Up to three scoped matters over four weeks. Checkpoint-resumable. Source skip register & write-audit log delivered with every brief.
Scorecard & go/no-go
Structured feedback at two check-ins, exit scorecard, and a go/no-go based on evidence — not enthusiasm. No continuity commitment on either side.
pre-pilot · no pilot has been run · no customer has paid · see commercialization/ for evidence register
The lines we will not cross.
We will never fabricate a relationship the data does not support. If a connection is probabilistic, we flag it for mandatory human review. A graph edge is a lead, never a conclusion.
We will never publish a conclusion without provenance. Every lead carries a source URL and a retrieval timestamp. Without that, it is an AI-generated opinion dressed up as research.
We will never sell automated decisions in high-stakes contexts. The API is read-only by default. The write path is gated. The system is designed so the only person who can damage the graph is the person who owns it.
We will never scrape private data. Only public records. Only government disclosures. Only information the law already makes available. Only the sources named for the matter at hand.
We will never claim production readiness before the evidence exists. We are a working prototype. We are pilot-first. We will say what works, what doesn't, and what is unvalidated — and we will say it in writing.
We will never weaken the read-only default without explicit decision. This is not a feature to be toggled. It is the architecture. It is the line we will not cross even when crossing it would be easier, faster, or more profitable.
The standard
The public record is not a lie. It's just locked behind a door that wasn't supposed to be there.
We're building the key. Not to replace human judgment — but to make it possible.
Every lead carries its source. Every connection carries proof.
That is the standard. That is Vajra.