Skip to main content
Glama
maltiverse-mcp

maltiverse-mcp

by lumutech

maltiverse-mcp

A local stdio MCP server that exposes the Maltiverse threat-intelligence API to Claude Code and any other MCP client. Give it an IP, domain, URL, or file hash and it returns Maltiverse's verdict, threat attributions, and behaviour flags — or hunt the whole dataset with a search query.

All tools are read-only. The API key is supplied only through the MALTIVERSE_API_KEY environment variable that claude mcp add --env injects — there are no config files, no prompts, and no --api-key flag (which would leak into shell history and ps).

Tools

Tool

What it does

Kind

maltiverse_check_indicator

Look up any IoC (IP / domain / URL / hash); type auto-detected

read-only

maltiverse_check_ip

Reputation of an IPv4/IPv6 address

read-only

maltiverse_check_hostname

Reputation of a hostname/domain

read-only

maltiverse_check_url

Reputation of a full URL (hashed to Maltiverse's checksum)

read-only

maltiverse_check_sample

Reputation of a malware sample by MD5/SHA-1/SHA-256/SHA-512

read-only

maltiverse_search

Search the IoC dataset with Elasticsearch query-string syntax (paginated)

read-only

Each lookup accepts response_format: concise (default — verdict, threat names, feeds, key flags) or detailed (adds full per-feed attributions).

Related MCP server: Yunaq GAC MCP Server

Install

pip install maltiverse-mcp
# or
uv tool install maltiverse-mcp
# or run with zero install
uvx maltiverse-mcp

Get a free API key from your Maltiverse profile ("Generate API Key").

Claude Code setup (the claude CLI)

Claude Code ≠ Claude Desktop. The claude mcp commands below configure Claude Code (the CLI / IDE extension) and write to ~/.claude.json. They do not affect the Claude Desktop GUI app, which reads a different file — see Claude Desktop app for that. If you add a server with claude mcp add and don't see it in the desktop app, this is why.

# pip install (the console script must be on PATH)
claude mcp add --scope user --transport stdio maltiverse \
  --env MALTIVERSE_API_KEY=YOUR_KEY -- maltiverse-mcp

# zero-install via uv
claude mcp add --scope user --transport stdio maltiverse \
  --env MALTIVERSE_API_KEY=YOUR_KEY -- uvx maltiverse-mcp

# if the script isn't on PATH (a project venv, pyenv, etc.), use an absolute path
claude mcp add --scope user --transport stdio maltiverse \
  --env MALTIVERSE_API_KEY=YOUR_KEY -- /abs/path/to/.venv/bin/maltiverse-mcp

# ...or point at a specific interpreter and run the module
claude mcp add --scope user --transport stdio maltiverse \
  --env MALTIVERSE_API_KEY=YOUR_KEY -- /abs/path/to/.venv/bin/python -m maltiverse_mcp

Then:

claude mcp list              # shows: maltiverse  ✔ Connected
claude mcp get maltiverse    # full config + connection status
# inside a `claude` session, run /mcp to see the server and its tools

Argument order matters. --env accepts multiple KEY=value pairs, so never put the server name directly after --env. Keep the name before --env (as above), or put another flag in between. The -- separates Claude's own flags from the command that launches the server.

Choosing a scope

--scope decides where the server is registered and therefore where it shows up:

Scope

Stored in

Visible in

user

~/.claude.json

every Claude Code session, any directory (recommended)

local

~/.claude.json (per-project)

only sessions started in that one directory

project

committed .mcp.json

anyone who checks out the repo (see Team setup)

If you added it with --scope local and it "disappeared", you were likely running claude from a different directory. Re-add it with --scope user:

claude mcp remove maltiverse -s local   # drop the project-scoped one (if any)
claude mcp add --scope user --transport stdio maltiverse \
  --env MALTIVERSE_API_KEY=YOUR_KEY -- maltiverse-mcp

Rotating the key

claude mcp remove maltiverse -s user
claude mcp add --scope user --transport stdio maltiverse \
  --env MALTIVERSE_API_KEY=NEW_KEY -- maltiverse-mcp

Team setup (committed .mcp.json, no secret)

Commit this and let each developer provide the key via their own environment:

{
  "mcpServers": {
    "maltiverse": {
      "type": "stdio",
      "command": "maltiverse-mcp",
      "env": { "MALTIVERSE_API_KEY": "${MALTIVERSE_API_KEY}" }
    }
  }
}

Claude Desktop app (the GUI)

The desktop app does not read ~/.claude.json and is not configured by the claude mcp commands. It has its own config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Edit that file by hand (create it if missing) and add a maltiverse entry under mcpServers, keeping any existing servers:

{
  "mcpServers": {
    "maltiverse": {
      "command": "/abs/path/to/.venv/bin/maltiverse-mcp",
      "env": { "MALTIVERSE_API_KEY": "YOUR_KEY" }
    }
  }
}
  • Use an absolute command path — the desktop app does not inherit your shell PATH, so a bare maltiverse-mcp (or uvx) usually won't resolve. If you installed into a venv, point at .venv/bin/maltiverse-mcp; its shebang selects the right Python automatically. (On Windows use .venv\\Scripts\\maltiverse-mcp.exe.)

  • macOS: do not put the venv under ~/Documents, ~/Desktop, or ~/Downloads. The desktop app has no privacy (TCC) permission for those folders, so the spawned Python fails with PermissionError: [Errno 1] Operation not permitted: .../pyvenv.cfg and the server shows "Server disconnected". Install into a venv elsewhere (e.g. ~/.venvs/maltiverse-mcp) and point command there — or grant the app access under System Settings → Privacy & Security → Files and Folders / Full Disk Access.

  • This is plain JSON — there is no --transport / --env / -- syntax here; use command, optional args, and env.

  • After saving, fully quit the app (⌘Q on macOS / right-click → Quit in the tray on Windows — closing the window is not enough) and reopen it. The server appears under the tools/🔌 menu.

Environment variables

Variable

Required

Default

Purpose

MALTIVERSE_API_KEY

yes (for tool calls)

—

Bearer API key from your Maltiverse profile

MALTIVERSE_BASE_URL

no

https://api.maltiverse.com

Override the API base URL

MALTIVERSE_TIMEOUT

no

30

Per-request timeout in seconds

MALTIVERSE_LOG_LEVEL

no

WARNING

Logging level (logs go to stderr)

The server starts fine without a key — it stays connected and its tools are discoverable — but any tool call returns an actionable error telling you how to set the key.

Security: for user/local scope the key is stored by Claude Code in ~/.claude.json. Don't commit that file, and don't commit a .mcp.json that contains the literal key — use ${MALTIVERSE_API_KEY} expansion as shown above.

Troubleshooting

claude mcp get maltiverse        # inspect config + connection status
  • In a session, run /mcp to see server status and the tool list.

  • Slow to start? MCP_TIMEOUT=10000 claude raises the startup timeout.

  • Output truncated? Raise MAX_MCP_OUTPUT_TOKENS (responses default to ≤20 results).

  • "Failed to connect" almost always means the maltiverse-mcp console script isn't on PATH. Use the absolute-interpreter form above (-- /abs/path/to/python -m maltiverse_mcp).

  • Claude Desktop shows "Server disconnected" right after starting, with PermissionError: ... Operation not permitted: .../pyvenv.cfg in its logs — the venv is under a macOS-protected folder (~/Documents/~/Desktop/~/Downloads). See Claude Desktop app: install the venv elsewhere (e.g. ~/.venvs/maltiverse-mcp) or grant the app Files-and-Folders access.

Development

python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
ruff check . && ruff format --check . && mypy src && pytest -q

Inspect it interactively with the MCP Inspector (set MALTIVERSE_API_KEY in its UI):

npx @modelcontextprotocol/inspector maltiverse-mcp

License

MIT — see LICENSE.

Available Tools

6 tools
maltiverse_check_hostnameCheck hostname/domain reputation (Maltiverse)A
Read-onlyIdempotent

Look up the reputation of a hostname or domain in Maltiverse.

Use for domains/FQDNs (phishing, malware distribution, C2). Pass the bare hostname without a scheme or path — for a full URL use maltiverse_check_url.

Inputs: hostname (required), response_format. Returns: Reputation report for one IP, hostname, URL, or malware sample.

maltiverse_check_indicatorCheck any indicator (auto-detect type, Maltiverse)A
Read-onlyIdempotent

Look up any indicator when you don't know its type up front.

This is the convenient default: pass an IP, domain, URL, or hash and the server routes to the correct Maltiverse endpoint. Prefer the specific tools (maltiverse_check_ip/_hostname/_url/_sample) when you already know the type and want to avoid ambiguity.

Inputs: indicator (required), response_format. Returns: Reputation report for one IP, hostname, URL, or malware sample.

maltiverse_check_ipCheck IP reputation (Maltiverse)A
Read-onlyIdempotent

Look up the threat-intel reputation of an IP address in Maltiverse.

Use this when you have an IP and need its classification (malicious / suspicious / neutral / whitelist), associated threats and feeds, ASN, and behaviour flags (C2, scanner, TOR, VPN, proxy, etc.). For domains use maltiverse_check_hostname; if you don't know the indicator type, use maltiverse_check_indicator.

Inputs: ip (required), response_format. Returns: Reputation report for one IP, hostname, URL, or malware sample.

maltiverse_check_sampleCheck file-hash reputation (Maltiverse)A
Read-onlyIdempotent

Look up a malware sample by file hash in Maltiverse.

Returns classification, AV detection ratio, file type, and threat attributions. Accepts MD5/SHA-1/SHA-256/SHA-512; the right endpoint is chosen from the hash length.

Inputs: file_hash (required), response_format. Returns: Reputation report for one IP, hostname, URL, or malware sample.

maltiverse_check_urlCheck URL reputation (Maltiverse)A
Read-onlyIdempotent

Look up the reputation of a specific URL in Maltiverse.

Maltiverse keys URLs by the SHA-256 of the raw URL string; this tool computes that checksum for you. Pass a full URL (with scheme). To check just the domain, use maltiverse_check_hostname instead.

Inputs: url (required), response_format. Returns: Reputation report for one IP, hostname, URL, or malware sample.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.3/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool targets a distinct indicator type (IP, hostname, URL, hash) plus a router and a search, and the descriptions explicitly cross-reference the others ('for domains use X, for full URLs use Y'). The only intentional overlap — maltiverse_check_indicator as a default router — is clearly framed as a fallback to the specific tools rather than a competing option.

    Naming Consistency5/5

    All six tools follow a single lowercase snake_case verb_noun convention with a uniform server prefix (maltiverse_check_ip, maltiverse_check_url, maltiverse_search). The one meta-tool (check_indicator) still conforms to the same pattern, so the surface is fully predictable.

    Tool Count5/5

    Six tools is well-proportioned for a read-only threat-intel lookup server, with one tool per indicator type plus a router and a search. There is no filler, and each tool earns its place by mapping to a real Maltiverse endpoint.

    Completeness4/5

    All the core lookup paths an agent needs — IP, hostname, URL, hash, generic routing, and dataset search with pagination guidance — are covered with no dead ends. Minor gaps remain: no bulk/multi-indicator lookup and no write-side operations (tagging, sample submission) that the underlying API likely supports.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables comprehensive threat analysis for Indicators of Compromise (IoCs) including IP addresses, file hashes, domains, and URLs. It provides detailed reputation scores, security vendor evaluations, and network metadata to facilitate security assessments and risk detection.
      4
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables users to access and query the ORKL Threat Intelligence Library, including threat reports, threat actors, and sources, through MCP tools and resources.
      6
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides threat intelligence tools like IoC lookups, event backtracking, and IP enrichment via MCP, enabling automated triage and evidence queries.
      1
      -