Skip to main content
Glama
Forensic Company MCP

Forensic Company MCP

by Bonafon2009

Forensic Company MCP

MCP server in Python for corporate OSINT / compliance research.

Tools

  • server_info

  • normalize_company_name

  • compare_company_names

  • compare_addresses

  • search_gleif_company

  • screen_opensanctions_company

  • get_opensanctions_entity

  • build_relationship_graph

The server deliberately labels matches and shared attributes as investigative leads rather than proof of wrongdoing.

Related MCP server: WhiteIntel MCP Server

1. Create the environment

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

Python 3.10+ is supported by MCP SDK v2.

2. Optional OpenSanctions key

Edit .env:

OPENSANCTIONS_API_KEY=YOUR_KEY

Do not put this key in Expo or React Native source code.

3. Run locally

uvicorn server:app --host 127.0.0.1 --port 8000 --reload

MCP endpoint:

http://127.0.0.1:8000/mcp

Health check:

http://127.0.0.1:8000/health

4. Test it

In another terminal:

source .venv/bin/activate
python client_test.py

Or use MCP Inspector:

npx -y @modelcontextprotocol/inspector

Then connect the inspector to:

http://127.0.0.1:8000/mcp

5. Render

Build command:

pip install -r requirements.txt

Start command:

uvicorn server:app --host 0.0.0.0 --port $PORT

Set these environment variables in Render:

OPENSANCTIONS_API_KEY=...
MCP_ALLOWED_HOSTS=YOUR-SERVICE.onrender.com,YOUR-SERVICE.onrender.com:*
CORS_ORIGINS=https://YOUR-FRONTEND.example

For a native-only React Native client, CORS_ORIGINS is less important because CORS is a browser rule. Keep the MCP provider API keys server-side either way.

Example graph input

Call build_relationship_graph with companies_json containing:

[
  {
    "name": "Empresa A",
    "address": "Av. Ejemplo 100, Monterrey, NL",
    "officers": ["Persona Uno"]
  },
  {
    "name": "Empresa B",
    "address": "Avenida Ejemplo 100, Monterrey, NL",
    "officers": ["Persona Uno", "Persona Dos"]
  }
]

The tool returns nodes and relationship edges such as shared_address and shared_officer.

Important

A sanctions hit, shared address, shared officer, or high name similarity is not by itself evidence of money laundering, a shell company, fraud, or any crime. Preserve the source, entity IDs, dates, and original records so findings can be independently verified.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      A
      maintenance
      Enables AI agents to investigate corporate ownership, trace ultimate beneficial owners, screen sanctions, detect offshore exposure, and access fully cited dossiers from 130M+ entities across 31 global registries.
      21
      96 npm
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables LLM clients to investigate Brazilian companies by CNPJ or name, mapping corporate relationships and gathering structured, source-attributed public evidence from official registries, news, social profiles, judicial proceedings, and PEP checks.
      6
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI assistants to look up, resolve, verify and sanctions-screen legal entities across the UK and Europe by merging company registries, GLEIF LEIs and VIES VAT data into one profile with per-field provenance. Supports KYB and due-diligence workflows through name and identifier search, officer and ownership tracing, filings and insolvency checks, and honest reporting of gaps, stale sources or unavailable data.
      9
      Elastic 2.0