Vajra Technologies / Public-record intelligence / India
Every lead carries its source.
Every connection carries proof.
India’s records are scattered across seven portals that never talk. Vajra links affidavits, corporate filings, bond disclosures and court dockets into one knowledge graph — 31,053 nodes, 43,712 edges, zero fabricated relationships.
We never draw conclusions. We assemble provenance-stamped leads.
Seven portals. Six access barriers. One researcher doing it alone.
Evidence on every node: source_url · retrieved_at · schema v3
Government records are public in name only. Different portals, different schemas, different barriers. Teams spend 40 hours per matter downloading PDFs and pasting into spreadsheets, hoping they did not miss a directorship three layers deep. This is not diligence. It is a system that was never designed for the people who depend on it.
491
politicians profiled, declared assets and liabilities verified against live MyNeta data.
0
fabricated edges across 7 sources. No relationship is inferred without provenance.
14,491
electoral-bond donations mapped to donor companies and recipient parties, three cycles joined.
14,730
declared assets linked, each attributed to its source page and retrieval timestamp.
One name. Four phases. Source URL on every node.
A researcher gives Vajra a name. Vajra runs four phases into a Neo4j graph. Checkpoints make every run resume-safe. Results are leads with provenance, never conclusions.
PHASE 01
Profile and declared assets
Election affidavits from MyNeta/ADR: declared assets, liabilities, party affiliation, constituency, criminal-record disclosures. Stored as Politician + Asset via DECLARED.
source: myneta.info
PHASE 02
Corporate and donations
MCA21 director history, OpenCorporates cross-border registrations, ECI bond-by-bond release for donor-to-party flows. Company, Donation, PoliticalParty via DIRECTOR_OF, MADE_DONATION.
sources: mca21, opencorporates, eci bonds
PHASE 03
Litigation and case status
eCourts for case status, Indian Kanoon for full-text judgment search. CAPTCHA walls surface as honest failures. CourtCase via INVOLVED_IN. A case mention is a lead, never a finding of guilt.
sources: ecourts, indiankanoon, cic/rti
PHASE 04
Network and shortest paths
Graph traversal: company networks, common connections, shortest paths between entities. Exports json, cypher, dot, every node and edge carrying a source URL.
backend: neo4j
Six reasons, each with a provenance trail.
Provenance is the product
Every node and edge stores a source URL and retrieval timestamp. DECLARED edges carry the affidavit page URL.
Graph-native, not tabular
Politician, Company, Donation, Party, CourtCase in one Neo4j graph. One cypher query, not five spreadsheets.
Entity resolution
rapidfuzz resolves “A. Raja” to “Raja A”, “Akshay” to “Akshaya”. CIN and DIN are golden identifiers.
India-first
MCA21 Akamai WAF handled, MyNeta 2024 layout parsed, eCourts CAPTCHA detected. India is the only market.
Embeddable via MCP
MCP tool provider over stdio and Streamable HTTP, both protocol eras. mcp_e2e_sdk_http.py 17/17 live.
Read-only by design
REST mutations return 403. Write tool hidden in tools/list unless mcp.allow_investigate=true.
Vajra scrapes what is reachable, parses what is there, and links what it stores. WAFs and CAPTCHAs surface as honest failures, never as silent skips.
491
politicians
14,730
assets
14,491
donations
1,317
donor companies
24
parties
31,053
nodes
43,712
edges
Three planes. Read-only by default.
PLANE 01
Collect
Investigation runner on your VM or CI cron. Disk checkpoints for minutes-to-hours runs, polite per-source rate limits, one stable egress IP. The only writer to the customer Neo4j.
PLANE 02
Store
Hosted Neo4j, one per customer, encrypted Bolt. Dedicated evidence directory, schema constraints for identity stability, sessions re-scope to the current allow_investigate setting.
PLANE 03
Serve
Read-only FastAPI tier, Python 3.12 ASGI, scales to zero. X-API-Key per customer, per-key rate limit, ephemeral fs, audit-only logs. Health at /health.
Read-only by default
REST mutations return 403. Write tool hidden unless explicitly enabled. 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 emits a JSON audit line: masked credentials, tool method, key hash, error code. Bearer rotation is tamper-evident.
Human review required
A named reviewer accepts or rejects every material lead. The graph produces findings. The human produces conclusions.
The entity layer for legal-AI platforms.
Vajra ships as an MCP tool provider. Veritect, SCC, Manupatra, CaseMine, Claude Desktop, and custom agents call Vajra over stdio or HTTP for provenance-stamped entity leads.
- 01Seven read tools: search, graph export, company network, shortest paths, common connections, source metadata, health.
- 02One gated write tool:
vajra_investigate. Hidden by default. - 03Zero new runtime dependency. Server uses only Python stdlib and the graph layer.
- 04Both protocol eras:
2024-11-05/2025-03-26and stateless2026-07-28.
stdio: mcp SDK v1 client / Python
async with streamable_http_client(url, http_client=http_client) as (read, write):
async with ClientSession(read, write) as session:
await session.discover()
tools = await session.list_tools()
result = await session.call_tool(
"vajra_search_entities",
{"query": "Nitin Gadkari", "limit": 5})
Live-validated on the GCP VM: mcp_e2e_sdk_http.py 17/17, v2 17/17, write 9/9, session resume 12/12.
Built for teams that verify before they file.
The law firm that refuses to file a memo on unverified AI output
The due-diligence team screening for politically exposed persons
The legal-AI platform embedding entity investigation via MCP
The investigative journalist who needs every claim to carry a source
The political-risk consultancy tracking corporate-political ties
The compliance officer who needs an audit trail, not just an answer
Evidence before conclusions. Provenance before claims. Human judgment before automation.
One scoped matter. Four weeks. Evidence before enthusiasm.
We bring the graph, the API, the MCP server, and the audit trail. You bring the matter and the named reviewer. Cells: A ₹50,000, B ₹75,000, C ₹1,20,000. The cell is fixed. The matter is yours.
01
Scope one matter
Authorized scope: entities, sources, date window, named reviewer. Opaque matter IDs only.
02
Isolated env
Dedicated Neo4j, dedicated evidence directory, per-customer key. pilot.enabled fail-closed.
03
Run the pipeline
Up to three scoped matters over four weeks. Checkpoint-resumable. Source-skip register delivered.
04
Scorecard
Two check-ins, exit scorecard, go/no-go on evidence. No continuity commitment on either side.
pre-pilot. No pilot has been run. No customer has paid. See commercialization/ for the evidence register.
The lines we will not cross.
01
Never fabricate a relationship the data does not support. Probabilistic edges flag for mandatory human review.
02
Never publish a conclusion without provenance. Every lead carries a source URL and a retrieval timestamp.
03
Never sell automated decisions in high-stakes contexts. Read-only by default. Write path gated.
04
Never scrape private data. Only public records, only government disclosures, only what the law already makes available.
05
Never claim production readiness before the evidence exists. Working prototype, pilot-first.
06
Never weaken the read-only default without explicit decision. Not a toggle. The architecture.