mcpField
M
mcp-maltego

mcp-maltego

Local
github.com/Data-UnixSecurity1Updated 3d ago

About mcp-maltego

mcp-maltego is an MCP server for AI agents conducting OSINT investigations with Maltego transforms and Machines. It maintains an investigation graph with step history and supports exchange with Maltego Desktop through native .mtgx files.

Key features

  1. 01Run built-in and custom transforms
  2. 02Chain transforms with Machines
  3. 03Persistent investigation graphs and provenance
  4. 04Recommend investigation next steps
  5. 05Import and export native .mtgx files
  6. 06Generate Markdown and HTML reports

Use cases

  1. 01Investigate domains, infrastructure, or email addresses
  2. 02Track entities and relationships across case steps
  3. 03Continue an agent investigation in Maltego Desktop

MCP support

It exposes OSINT tools to MCP clients for managing cases, entities and links, running transforms and Machines, suggesting next steps, and importing or exporting investigation graphs.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"data-unix-mcp-maltego": {
"command": "npx",
"args": [
"-y",
"mcp-maltego"
]
}
}
}
Run commandnpx -y mcp-maltego

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npmmcp-maltego0.2.0

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

mcp-maltego

Maltego OSINT for AI agents.
Run transforms and Machines, build and analyse link graphs, and hand the result back to Maltego as a native .mtgx, from Claude, Gemini, Codex, Copilot, Cursor or any MCP client.

MCP-MALTEGO — Model Context Protocol Intelligence Graph Integration

npm CI License: MIT MCP Tools Español


mcp-maltego is a Model Context Protocol server that turns an AI agent into a Maltego operator. It runs real transforms (built-in, commercial providers or your own TRX/iTDS servers), chains them into Machines, keeps a persistent investigation graph with memory of every step, recommends the next pivot, and exports everything to Maltego Desktop. One graph is shared by every agent you use.

Key features

  • 20 tools, portable to every model. Flat JSON schemas validated against Gemini's strict function-calling subset; variants grouped with an action parameter so agents are not flooded with tools.
  • 38 real transforms out of the box. 26 without API keys (DNS over HTTPS, RDAP/WHOIS, certificate transparency via crt.sh and CertSpotter, HackerTarget, urlscan.io, Shodan InternetDB, Team Cymru & RIPE Stat ASN/netblocks, Gravatar, GitHub profile details, AlienVault OTX threat pulses, multi-network profile lookup, parsing) and 12 provider transforms that switch on when you set a key: VirusTotal, Shodan, SecurityTrails, Censys, Hunter.io, Have I Been Pwned, GreyNoise and Tatum.
  • Your Maltego transforms too. Speaks the Maltego TRX/iTDS XML protocol, so an agent can run the same transforms you use in Maltego.
  • Machines. DomainRecon, InfrastructureRecon, EmailRecon, CompanyFootprint, PersonalFootprint, PersonaFootprint, URLRecon, ThreatSweep, ASNToNetblocks and your own in TOML, with recursive rounds and cost budgets.
  • HUMINT, Breach Router & Multi-Agent Swarms. Native humint.* entity ontology (humint.Alias, humint.Organization, humint.LocationHistory, humint.PsychologicalTrait), cross-platform pseudonym correlation, subject behavioral profiling ([Hipótesis]), chronological anomaly detection, weighted relationships, a local SQLite
    • k-Anonymity/XposedOrNot breach router (BreachSemanticPivot), and multi-agent case fork/delegate/merge with optimistic locking.
  • An investigation copilot. osint_investigate does detection, case creation, the right Machine, scoring and recommendations in one call. Every step is remembered (what, on what, why, result), every entity has explainable provenance and a priority score, and next-best-action learns from how each transform performed.
  • Native Maltego round-trip. .mtgx export with hierarchical, radial or force-directed layout and the investigation memory embedded; .mtgx import; local transforms inside Maltego Desktop to open a case, expand neighbours and send entities back to the agents; import of your exact Maltego entity ontology.
  • Reports and CLI. Executive reports in Markdown or self-contained HTML, and maltegoctl for terminals and CI.
  • Safe by default. OSINT content is treated as untrusted data, XML is parsed with defusedxml, archives are read with bounds, agents cannot supply arbitrary URLs, and API keys are never logged.

Requirements

  • Node.js 18 or newer (for npx).
  • uv — manages the Python 3.12 runtime automatically (if uv is not installed yet, mcp-maltego installs it automatically into ~/.maltego-mcp/bin on first run).

Prepare the runtime, ~/.maltego-mcp/.env template, Maltego Desktop bridge .mtz, and global CLI launchers (mcp-maltego, maltego-mcp, maltegoctl, maltego-mcp-bridge in ~/.local/bin / %USERPROFILE%\.local\bin added to your PATH) in one command:

npx -y mcp-maltego setup

You can also choose a specific deployment mode or client target on any OS / distribution (Windows PowerShell/CMD, macOS, Ubuntu/Debian, Kali, Fedora/RHEL, Arch, Alpine):

npx -y mcp-maltego setup --mode global              # (Default) Global CLI in ~/.local/bin + PATH (run from any directory)
npx -y mcp-maltego setup --mode local               # Isolated inside ~/.maltego-mcp without modifying PATH
npx -y mcp-maltego setup --mode http                # Prepare + print Streamable HTTP server startup
npx -y mcp-maltego setup --client claude            # Print ready-to-use config for a specific client (claude|gemini|codex|copilot|cursor|all)

Getting started

Standard configuration, valid for most MCP clients:

{
  "mcpServers": {
    "maltego": {
      "command": "npx",
      "args": ["-y", "mcp-maltego"]
    }
  }
}

Then ask your agent:

Investigate example.com, give me the summary of the case and export it for Maltego.

Claude Code
claude mcp add maltego -- npx -y mcp-maltego
Claude Desktop

Edit claude_desktop_config.json (Settings → Developer → Edit Config) and add the standard configuration above.

Gemini CLI

Add the standard configuration to ~/.gemini/settings.json (all projects) or .gemini/settings.json (one project).

Codex
codex mcp add maltego -- npx -y mcp-maltego

or in ~/.codex/config.toml:

[mcp_servers.maltego]
command = "npx"
args = ["-y", "mcp-maltego"]
GitHub Copilot CLI

Add the standard configuration to ~/.copilot/mcp-config.json, or to .mcp.json / .github/mcp.json in a repository.

VS Code

.vscode/mcp.json:

{ "servers": { "maltego": { "command": "npx", "args": ["-y", "mcp-maltego"] } } }
Cursor

Add the standard configuration to ~/.cursor/mcp.json or .cursor/mcp.json.

OpenCode

opencode.json:

{ "mcp": { "maltego": { "type": "local", "command": ["npx", "-y", "mcp-maltego"], "enabled": true } } }
Qwen Code

Add the standard configuration to ~/.qwen/settings.json or .qwen/settings.json.

Orca IDE and other multi-agent setups

Clone this repository and open it in Orca: it ships the project file each agent reads (.mcp.json, .gemini/settings.json, .codex/config.toml, .cursor/mcp.json, .qwen/settings.json, opencode.json), so every worktree gets the server without manual registration. All agents share one graph in ~/.maltego-mcp. See docs/ORCA.md.

Remote (Streamable HTTP)
npx -y mcp-maltego --transport http --port 8000   # http://127.0.0.1:8000/mcp

The server binds to localhost only. It has no authentication yet, so do not expose it to a network.

Tools

GroupToolWhat it does
Catalogosint_list_entity_typesEntity ontology by category (standard + native humint.* + imported from your Maltego)
osint_list_transformsTransforms, Machines, provider keys and server status
Casesosint_manage_caseCreate, fork/delegate sub-cases for multi-agent swarms, merge (with optimistic locking) or delete
osint_list_casesPaginated list
osint_get_case_summaryCounts, priority entities and quality indicators
Entitiesosint_upsert_entityCreate or merge an entity (normalised value, deterministic id, notes)
osint_manage_entityEdit confidence/notes/properties, set .mtgx visual_style, run HUMINT analyze_behavior, or delete
osint_get_entityDetails, explained score, provenance, pending transforms
osint_search_entitiesSearch a case or across cases; sort by priority
Linksosint_link_entitiesLink/unlink entities, analyze HUMINT role/sentiment/weight, or correlate cross-platform identities
osint_get_neighborsRelated entities with direction and link type
osint_find_pathsPaths between two entities
Transformsosint_run_transformOne transform on one entity
osint_expand_entityEvery applicable transform ("Run All")
osint_run_machineA Machine or an ad-hoc chain, with rounds and budgets
Copilotosint_investigateEverything in one call: detect, case, Machine, score, recommend, report
osint_suggest_next_stepsDeterministic next-best-action with transform performance history
osint_get_timelineInvestigation procedural memory (steps) or subject chronological timeline & anomalies (subject)
Exchangeosint_export_casemtgx (with layout and memory), json, graphml, csv, report_md, report_html
osint_import_graphImport a .mtgx saved in Maltego (with its memory) or a CSV

entity_type accepts any Maltego type, your own prefix.Name, or "auto" to detect it from the value.

Transforms

CategoryTransformsAPI key
DNS (over HTTPS + passive)DNSToIP, DNSToIPv6, DomainToMX, DomainToNS, DomainToTXT, DNSToCNAME, IPToReverseDNS, HackerTargetSubdomains—
WHOIS (RDAP with ARIN fallback)DomainToWhois, IPToWhois—
Network & ExposureIPToAS, IPToNetblock (Team Cymru), RIPEStatASNToNetblocks, InternetDBIPToServices (ports, CPEs, CVEs)—
Certificates & WebDomainToSubdomains (crt.sh + CertSpotter fallback), CertSpotterSubdomains, URLScanDomainSearch—
Identity, Social & HUMINTAliasToProfiles (GitHub, GitLab, Hacker News, Keybase, DEV), GitHubAliasToDetails, GravatarEmailToProfile, EmailToAlias, AnalyzeSubjectBehavior—
Breach & Threat Intel (keyless)BreachSemanticPivot (local SQLite + HIBP Pwned Passwords k-Anonymity + XposedOrNot), OTXHashToThreatPulses—
ParsingEmailToDomain, URLToDomain, WebsiteToDomain, DomainToWebsite—
VirusTotalVTDomainToIP, VTIPToDomain, VTDomainToSubdomains, VTHashToDetectionVIRUSTOTAL_API_KEY
ShodanShodanIPToServices, ShodanDomainToSubdomainsSHODAN_API_KEY
SecurityTrailsSecurityTrailsSubdomainsSECURITYTRAILS_API_KEY
CensysCensysIPToServicesCENSYS_API_ID, CENSYS_API_SECRET
Hunter.ioHunterDomainToEmailsHUNTER_API_KEY
Have I Been PwnedHIBPEmailToBreachesHIBP_API_KEY
GreyNoiseGreyNoiseIPContextGREYNOISE_API_KEY
TatumTatumBTCAddressToTxTATUM_API_KEY

Pass keys through your client's configuration:

{ "mcpServers": { "maltego": { "command": "npx", "args": ["-y", "mcp-maltego"],
  "env": { "SHODAN_API_KEY": "...", "VIRUSTOTAL_API_KEY": "..." } } } }

Your own Maltego transform servers (TRX / iTDS) are declared in ~/.maltego-mcp/transforms.toml; see config/transforms.example.toml. Custom Machines go in the same file.

Maltego Desktop integration

DirectionHow
Agent → Maltegoosint_export_case writes a .mtgx; open it with File → Open
Maltego → agentSave as .mtgx in ~/.maltego-mcp/imports/ and ask the agent to import it
Live, inside Maltegonpx mcp-maltego ctl mtz generates local transforms (MCP · Abrir caso, MCP · Vecinos en el caso, MCP · Guardar en el caso); import the file with Import | Export → Import Config
Your ontologyExport your config from Maltego and run npx mcp-maltego ctl import-entities config.mtz

Local transforms work in Maltego CE and the commercial editions, with no transform server. For the bridge, install the package globally (npm i -g mcp-maltego) so the command path stays stable. Details in docs/MALTEGO.md.

Configuration

VariableDefaultPurpose
MALTEGO_MCP_HOME~/.maltego-mcpShared state: graph, catalog, imports, exports, runtime
MALTEGO_MCP_TRANSFORMS_FILE<home>/transforms.tomlCatalog of your transform servers and Machines
MALTEGO_MCP_BACKENDmemorymemory (local JSON, multi-process safe) or gremlin (Azure Cosmos DB, experimental)
MCP_MALTEGO_UVauto-detectedFull path to uv if it is not on PATH

More in docs/USO.md (Spanish).

CLI

npx mcp-maltego ctl inspect case.mtgx           # validate a .mtgx
npx mcp-maltego ctl lookup DomainToMX gmail.com  # quick lookup, nothing saved
npx mcp-maltego ctl transforms --type maltego.Domain
npx mcp-maltego ctl export demo --format report_html
npx mcp-maltego ctl import-entities config.mtz
npx mcp-maltego ctl mtz

Example prompts

  • Investigate [email protected] and tell me which pivots are worth running next.
  • Run DomainRecon on example.com with two rounds and a budget of 200 entities.
  • Find every path between the IP 93.184.216.34 and the email in case demo.
  • Export case demo for Maltego with a radial layout and write me an HTML report.
  • Import the graph I saved in Maltego as acme.mtgx into case acme and continue from there.

AI agents and skills for contributors and analysts

The repository ships 10 agents and 15 skills from a single source (.agents/), generated for Claude Code, Gemini CLI, Qwen Code, GitHub Copilot and Codex, with skills in the open Agent Skills format (also read by Cursor):

  • Investigation agents (use this MCP): osint-analyst (copilot with next-best-action loop and memory), cti-analyst (defensive exposure and IOC triage), ioc-composer (multi-MCP IOC graphs with MISP, ATT&CK, TheHive, Cortex), recon-toolchain-integrator (theHarvester, amass, recon-ng, SpiderFoot output into the graph).
  • Investigation skills: company footprint, identity footprint, infrastructure mapping, IOC graph composition, external OSINT tools, investigation methodology.
  • Development agents and skills: MCP tool design, transforms and custom providers, Machines, graph model, Maltego formats, non-standard entities, security review, tests, release and deployment.

Inspired by community work (SulimanAbdulrazzaq/maltego-mcp, lidless-labs/maltego-mcp, HexStrike AI, MCP-Kali-Rust); offensive capabilities (exploitation) are deliberately out of scope.

Security and responsible use

OSINT content is untrusted and is never followed as instructions. See SECURITY.md for the design and for how to report vulnerabilities. You are responsible for complying with the law, each provider's terms of service and data-protection rules (for example GDPR) in your jurisdiction.

Development

git clone https://github.com/Data-Unix/MCP-MALTEGO.git && cd MCP-MALTEGO
uv sync
uv run pytest -q && uv run ruff check . && uv run mypy src   # Python
npm test                                                       # npm launcher
npx @modelcontextprotocol/inspector uv run maltego-mcp        # inspect the server

Architecture, conventions for contributors and AI agents: AGENTS.md. Coverage of the functional specification: docs/COBERTURA.md. Changes: CHANGELOG.md.

License

MIT. Maltego is a trademark of Maltego Technologies GmbH. This project is independent and not affiliated with or endorsed by Maltego Technologies.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.