Skip to main content
Glama
renkagod

osint-toolbox-mcp

osint-toolbox-mcp

An MCP server that lets AI agents run classic OSINT tools on your own machine: Sherlock, Maigret, Blackbird, Holehe, GHunt, theHarvester, SpiderFoot, subfinder, dnstwist, dnsrecon, PhoneInfoga and ExifTool, plus built-in WHOIS, DNS, certificate transparency and Wayback Machine lookups. No API keys and no cloud service in between: the tools run locally and query public sources directly.

CI PyPI Python Docker image License: MIT

Ask your assistant "which sites have an account for jane@example.com?" or "what can you find about example.com?", and it picks the tools, runs them and reads the results for you.

Tools

Tool

Give it

You get

Needs

sherlock_username_search

username

accounts on 400+ sites

Sherlock

maigret_username_search

username

accounts on up to 3000+ sites, with the profile data found on them

Maigret

blackbird_username_search

username

accounts on the 700+ sites of the WhatsMyName list

Blackbird checkout (not in the Docker image)

holehe_email_search

email address

which of about 120 sites have an account for it

Holehe

ghunt_google_search

Google account email or Gaia ID

name, profile picture, Maps reviews, calendar and other public data

GHunt, logged in

theharvester_domain_search

domain or company name

email addresses, subdomains, hosts, IP addresses

theHarvester

spiderfoot_scan

domain, IP, email, phone, username, person name...

findings grouped by type

SpiderFoot checkout

phoneinfoga_scan

phone number

country, number formats, carrier (with an API key), search queries

PhoneInfoga

exiftool_metadata

path to a local file

GPS coordinates, camera, author, software, timestamps

ExifTool

subfinder_subdomain_search

domain

subdomains from passive sources, with the sources that reported them

subfinder

dnstwist_lookalike_domains

domain

registered lookalike domains (typos, homoglyphs, other TLDs) with their A, MX and NS records

dnstwist

dnsrecon_domain_scan

domain

DNS records, zone transfer attempts, DNSSEC zone walking

dnsrecon

whois_lookup

domain, IP address, network or AS number

registrar, dates, name servers, holder and contacts where public (RDAP, or WHOIS)

built in

dns_lookup

domain name or IP address

A, AAAA, CNAME, MX, NS, TXT, SOA, CAA records, or the reverse name

built in

crtsh_certificate_search

domain

host names and email addresses from TLS certificates issued for it (crt.sh)

built in

wayback_snapshots

URL or domain

archived snapshots in the Wayback Machine, newest first

built in

osint_toolbox_status

nothing

which tools are installed, and how to install the missing ones

built in

Only installed tools are offered to the agent. Runs take from seconds to half an hour (a full SpiderFoot scan); requests run in parallel and can be cancelled.

Related MCP server: osint-mcp-server

Quick start

Pick one:

  • Docker: every tool but Blackbird in one image, nothing else to install.

  • uvx: one command installs the tools on your machine, without admin rights.

Docker

The image is large, so pull it once before adding the server; otherwise the first start can take longer than your client waits:

docker pull ghcr.io/renkagod/osint-toolbox-mcp

Add the server to your client:

{
  "mcpServers": {
    "osint-toolbox": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/renkagod/osint-toolbox-mcp"]
    }
  }
}

Files for ExifTool, the GHunt login, API keys and proxies are covered in Docker details.

uvx

Install uv, then install the tools. This installs everything that is missing and checks that each tool starts; see Install the tools for what it does:

uvx osint-toolbox-mcp --install

Add the server to your client:

{
  "mcpServers": {
    "osint-toolbox": {
      "command": "uvx",
      "args": ["osint-toolbox-mcp"]
    }
  }
}

To run the latest code from main instead of a release, use uvx --from git+https://github.com/renkagod/osint-toolbox-mcp osint-toolbox-mcp.

Connect your client

One-click install:

Client

Docker (all but Blackbird)

uvx (your tools)

Cursor

Add to Cursor

Add to Cursor

VS Code

Install in VS Code

Install in VS Code

VS Code Insiders

Install in VS Code Insiders

Install in VS Code Insiders

LM Studio

Add to LM Studio

Add to LM Studio

Claude Desktop: download osint-toolbox-mcp-<version>.mcpb from the latest release and open it. Claude Desktop installs it as an extension and asks for the optional SpiderFoot, Blackbird and ExifTool locations; the other tools are found on PATH. You can also paste the JSON above into Settings → Developer → Edit Config.

Claude Code:

claude mcp add osint-toolbox -- uvx osint-toolbox-mcp
claude mcp add osint-toolbox -- docker run -i --rm ghcr.io/renkagod/osint-toolbox-mcp

Clients that read the mcpServers JSON above (paste it into the file):

Client

Where the config lives

Cursor

~/.cursor/mcp.json, or .cursor/mcp.json in a project

Windsurf

~/.codeium/windsurf/mcp_config.json

Cline

MCP Servers → Configure → cline_mcp_settings.json

Roo Code

.roo/mcp.json in a project, or the global MCP settings

Gemini CLI

~/.gemini/settings.json

Antigravity

agent panel "…" → MCP Servers → Manage MCP Servers → View raw config

LM Studio

Program tab → Install → Edit mcp.json

Kiro

~/.kiro/settings/mcp.json, or .kiro/settings/mcp.json in a project

Clients with their own format (shown with uvx; for Docker, use docker with the arguments run -i --rm ghcr.io/renkagod/osint-toolbox-mcp):

code --add-mcp '{"name":"osint-toolbox","command":"uvx","args":["osint-toolbox-mcp"]}'

Or in .vscode/mcp.json:

{
  "servers": {
    "osint-toolbox": {
      "type": "stdio",
      "command": "uvx",
      "args": ["osint-toolbox-mcp"]
    }
  }
}
codex mcp add osint-toolbox -- uvx osint-toolbox-mcp

Or in ~/.codex/config.toml, with a longer timeout for slow scans:

[mcp_servers.osint-toolbox]
command = "uvx"
args = ["osint-toolbox-mcp"]
tool_timeout_sec = 1800

In settings.json:

{
  "context_servers": {
    "osint-toolbox": {
      "command": "uvx",
      "args": ["osint-toolbox-mcp"],
      "env": {}
    }
  }
}

In ~/.config/goose/config.yaml:

extensions:
  osint-toolbox:
    name: osint-toolbox
    type: stdio
    cmd: uvx
    args: [osint-toolbox-mcp]
    enabled: true
    timeout: 1800

In opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "osint-toolbox": {
      "type": "local",
      "command": ["uvx", "osint-toolbox-mcp"],
      "enabled": true
    }
  }
}

In .continue/mcpServers/osint-toolbox.yaml:

name: OSINT Toolbox
version: 1.0.0
schema: v1
mcpServers:
  - name: osint-toolbox
    type: stdio
    command: uvx
    args:
      - osint-toolbox-mcp

Install the tools

Skip this if you use Docker, unless you want Blackbird.

uvx osint-toolbox-mcp --install

installs every tool that is missing, without admin rights, then checks that each one starts. uvx osint-toolbox-mcp --install sherlock maigret installs only the tools named. It needs uv and:

  • puts each Python tool (Sherlock, Holehe, Maigret, GHunt, theHarvester, dnstwist, dnsrecon) in its own environment with uv tool install, on Python 3.12: their dependencies conflict with each other, and some have no builds for newer Pythons. theHarvester and dnsrecon come from their latest GitHub releases;

  • downloads SpiderFoot and Blackbird from GitHub, each with its own virtual environment;

  • downloads PhoneInfoga, subfinder and ExifTool and checks them against the checksums their authors publish. On macOS and Linux, ExifTool needs Perl, which those systems usually have.

Checkouts and downloads go to %LOCALAPPDATA%\osint-toolbox-mcp on Windows, ~/Library/Application Support/osint-toolbox-mcp on macOS and ~/.local/share/osint-toolbox-mcp on Linux; set OSINT_TOOLBOX_HOME to use another folder. The server looks there by itself. GHunt still needs a one-time ghunt login afterwards.

uvx osint-toolbox-mcp --check shows, at any time, every tool as ok, missing (with how to install it) or broken (found but fails to start). The agent can ask the same through the osint_toolbox_status tool.

Installing by hand

Tool

Install

Tested with

Sherlock

uv tool install sherlock-project

0.16

Holehe

uv tool install holehe

1.61

Maigret

uv tool install maigret

0.6

GHunt

uv tool install ghunt, then ghunt login

2.3.4

theHarvester

uv tool install git+https://github.com/laramies/theHarvester@4.11.1, or its newest release tag

4.11.1

dnstwist

uv tool install dnstwist --with dnspython --with tld --with idna

20250130

dnsrecon

uv tool install git+https://github.com/darkoperator/dnsrecon@1.6.3, or its newest release tag

1.6.3

subfinder

a binary from its releases, on PATH

2.16.0

PhoneInfoga

a binary from its releases, on PATH

2.11.0

ExifTool

exiftool.org, brew install exiftool or apt install libimage-exiftool-perl

13.59

SpiderFoot

a checkout, see below

commit 0f815a2

Blackbird

a checkout, see below

commit b455050

If a Python tool fails to build on your default Python, add --python 3.12 to its uv tool install.

SpiderFoot and Blackbird run from git checkouts. Give each its own .venv, which the server picks up automatically, and tell the server where the checkout is:

git clone https://github.com/smicallef/spiderfoot
cd spiderfoot
uv venv --python 3.12
uv pip install -r requirements.txt

Then set OSINT_SPIDERFOOT_DIR to that folder in your client's config (env). Blackbird is the same with https://github.com/antoniaci/blackbird and OSINT_BLACKBIRD_DIR. SpiderFoot pins lxml<5, which has no builds for Python 3.13 and newer; to use a newer Python, apply patches/spiderfoot-requirements.patch first.

Configuration

All settings are environment variables, set in the env block of your client's config:

{
  "mcpServers": {
    "osint-toolbox": {
      "command": "uvx",
      "args": ["osint-toolbox-mcp"],
      "env": {
        "OSINT_SPIDERFOOT_DIR": "/home/me/spiderfoot",
        "OSINT_EXIFTOOL": "/opt/exiftool/exiftool"
      }
    }
  }
}

Variable

Meaning

OSINT_SHERLOCK, OSINT_HOLEHE, OSINT_MAIGRET, OSINT_GHUNT, OSINT_THEHARVESTER, OSINT_SUBFINDER, OSINT_DNSTWIST, OSINT_DNSRECON, OSINT_PHONEINFOGA, OSINT_EXIFTOOL

Full path to the tool, when it isn't on PATH

OSINT_SPIDERFOOT_DIR, OSINT_BLACKBIRD_DIR

Folder of the SpiderFoot or Blackbird checkout

OSINT_SPIDERFOOT_PYTHON, OSINT_BLACKBIRD_PYTHON

Python to run the checkout with; by default its .venv, then python on PATH

OSINT_TOOLBOX_HOME

Where --install puts checkouts and downloads, and where the server looks for them

OSINT_MAX_OUTPUT_CHARS

Longest result returned to the model, 100000 by default; 0 for no limit

HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY

Used by the built-in lookups and --install (HTTP and SOCKS5 proxies), and passed on to the tools, which may or may not use them

Besides PATH, the server looks in the --install folder and in the folders uv tool and pipx install into (~/.local/bin by default), which desktop apps often leave out of PATH.

Docker details

  • Blackbird is not in the image: it has no license that allows redistributing it. Install it yourself to use it.

  • ExifTool: the container sees only mounted files. Add -v /path/to/files:/data:ro to the arguments and ask about /data/photo.jpg.

  • GHunt: log in once into a named volume, then mount it:

    docker run -it --rm --entrypoint ghunt -v osint-toolbox-ghunt:/home/osint/.malfrats ghcr.io/renkagod/osint-toolbox-mcp login

    GHunt's listening mode (option 1) doesn't work in a container; pick option 2 (paste from the GHunt Companion extension) or 3 (an oauth_token, see GHunt's README).

  • API keys: theHarvester reads /home/osint/.theHarvester/api-keys.yaml (mount your file there), PhoneInfoga reads its keys from environment variables (-e NAME=value).

  • Proxy: -e HTTPS_PROXY=http://host.docker.internal:8080, for example.

  • Tags: latest and version tags such as 1.0.0 for releases, edge for the current main. Built for linux/amd64 and linux/arm64.

A full configuration:

{
  "mcpServers": {
    "osint-toolbox": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/home/me/osint-files:/data:ro",
        "-v", "osint-toolbox-ghunt:/home/osint/.malfrats",
        "ghcr.io/renkagod/osint-toolbox-mcp"
      ]
    }
  }
}

Example requests

  • "Which sites have an account registered to jane.doe@example.com?"

  • "Search for the username jdoe_1987 with Sherlock and Maigret and compare what they find."

  • "What subdomains and email addresses are public for example.com?"

  • "Which lookalike domains of example.com are registered, and do any of them have mail servers?"

  • "Who owns example.com and when does it expire? Show me how its homepage looked in 2015."

  • "Read the metadata of /home/me/photo.jpg and tell me where and with what it was taken."

  • "Run a passive SpiderFoot scan of example.com and summarize the findings."

Troubleshooting

  • A tool is missing. Run uvx osint-toolbox-mcp --install, or --check to see why a tool isn't found (docker run --rm ghcr.io/renkagod/osint-toolbox-mcp --check for the image). After installing, restart your client so it lists the new tools. Desktop apps often start servers with a shorter PATH than your terminal; set the tool's OSINT_* variable to its full path.

  • Long scans time out. Many clients stop waiting for a tool after a minute or so. Raise the limit where your client allows it: MCP_TOOL_TIMEOUT in milliseconds for Claude Code, tool_timeout_sec for Codex CLI, timeout in milliseconds on the server entry for Gemini CLI, timeout in seconds for Goose. Otherwise ask for faster runs: a passive SpiderFoot scan, Maigret without all_sites.

  • GHunt fails. It needs a valid login: run ghunt login. When the saved session has been revoked, ghunt login itself fails; run ghunt login --clean to delete it, then ghunt login.

  • Empty results, errors or captchas. Sites rate-limit and change their pages; retry later, lower the load, or go through a proxy. If a tool fails the same way outside the server, report it to that tool's project.

  • Windows and .bat or .cmd wrappers. Arguments to such wrappers pass through cmd.exe, so the server refuses inputs with characters like & or |; point the OSINT_* variable at the real executable instead.

Responsible use

These tools collect information about real people and organizations. Use them only where you have a lawful basis and authorization: your own accounts, security assessments within scope, research that respects privacy law (GDPR, CCPA and local equivalents) and the sites' terms of service. Don't use them to stalk, harass, dox or otherwise harm anyone. You are responsible for what you run and for what you do with the results.

Contributing

Issues and pull requests are welcome; see CONTRIBUTING.md. Report vulnerabilities privately as described in SECURITY.md. Changes are listed in the changelog.

License and credits

MIT, see LICENSE.

The tools belong to their authors and keep their own licenses: Sherlock, Maigret, Holehe, GHunt, theHarvester, SpiderFoot, Blackbird, PhoneInfoga, ExifTool. The server starts them as separate programs; the Docker image contains them unmodified.

This project started from frishtik/osint-tools-mcp-server (MIT).

Available Tools

16 tools
dns_lookupDNS lookupA
Read-onlyIdempotent

DNS records of a name (A, AAAA, CNAME, MX, NS, TXT, SOA, CAA by default), or the reverse name of an IP address. Asks public DNS-over-HTTPS resolvers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDomain name, or an IP address for a reverse (PTR) lookup
typesNoRecord types to fetch

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the annotations by stating that it queries public DNS-over-HTTPS resolvers and listing the default record types. This is consistent with the read-only, idempotent, open-world annotations and helps the agent understand the external nature of the lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The main operation is front-loaded, and the default behavior plus resolver detail are included without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with strong annotations, the description covers the essential behavior and parameter semantics. There is no output schema or mention of result formatting, but the return concept of 'DNS records' is clear enough for an agent to proceed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters fully, but the description adds value by specifying the default record types fetched when no types array is provided and confirming that an IP triggers a reverse lookup. This goes beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (DNS records) and the dual mode of operation: forward lookup for a domain or reverse PTR lookup for an IP. It does not explicitly distinguish itself from sibling tools like dnsrecon_domain_scan, but the purpose is specific and understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over alternatives such as dnsrecon_domain_scan, whois_lookup, or subfinder_subdomain_search. The description implies a simple direct DNS lookup, but it does not state when not to use it or which sibling covers broader reconnaissance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dnsrecon_domain_scandnsrecon DNS reconnaissanceB
Read-onlyIdempotent

DNS reconnaissance of a domain with dnsrecon: SOA, NS, MX, A, AAAA and SRV records, zone transfer attempts, DNSSEC zone walking and certificate-log names, depending on scan_type.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain name, e.g. example.com
scan_typeNostd (default): standard records and a zone transfer attempt; srv: common SRV records; axfr: zone transfer against every name server; crt: names from crt.sh; zonewalk: DNSSEC NSEC walk

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds some behavioral context by mentioning zone transfer attempts and DNSSEC zone walking, but much of this is already reflected in the scan_type enum descriptions, and no additional context such as network intensity or external service usage is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one dense, front-loaded sentence that packs the tool's purpose, target resource, and capability set without filler. Every clause contributes useful information, and the dependency on scan_type is clearly signaled.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two parameters, one required, and rich enum documentation, the description is largely sufficient: it identifies the target, the operation family, and the scan-dependent output types. It lacks explicit return-value/pagination details, but no output schema exists and the core request shape is fully inferable from the schema and description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both domain and scan_type already documented, so the baseline is 3. The description mentions scan_type and lists scan-dependent outputs, but it does not add semantic detail beyond what the schema enum descriptions already provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the action ('DNS reconnaissance') and the resource ('a domain') and enumerates the specific record types and operations covered, such as SOA, NS, MX, zone transfer attempts, and certificate-log names. It does not explicitly distinguish itself from the sibling dns_lookup tool, but the broader scope is evident from the detailed capability list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance about when to choose this tool over alternatives such as dns_lookup, subfinder_subdomain_search, or whois_lookup. It only notes that execution depends on scan_type, which is a parameter detail rather than a selection criterion or exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dnstwist_lookalike_domainsdnstwist lookalike domainsA
Read-onlyIdempotent

Generate lookalike domains (typos, homoglyphs, other TLDs) for a domain and check which are registered, with their A, MX and NS records (dnstwist). Useful to spot phishing domains.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain name, e.g. example.com
registered_onlyNoReturn only lookalikes that are registered (default: true)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable behavioral details beyond those: it generates multiple categories of lookalikes (typos, homoglyphs, other TLDs), checks registration status, and returns specific DNS record types (A, MX, NS). This gives the agent a solid expectation of the tool's behavior without repeating the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs in the action, scope, output, and use case with no filler or redundancy. It is front-loaded with the core functionality and remains easy to parse for an agent scanning multiple tool definitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (2 params, 1 required, schema fully covering them, no output schema), the description is largely complete: it states the input, the transformations, the filtering option behavior implied by 'registered', and the DNS records returned. It does not describe output format or pagination, but that is not critical for a simple read-only generator tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both the 'domain' and 'registered_only' parameters. The description does not add parameter-level details beyond what the schema provides, but it does not need to. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Generate'), names the resource ('lookalike domains'), and specifies the exact technique (typos, homoglyphs, other TLDs) and output (A, MX, NS records). This clearly distinguishes it from sibling tools like subfinder_subdomain_search or dnsrecon_domain_scan, which focus on subdomains or DNS enumeration rather than typo-squatting detection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states a use case: 'Useful to spot phishing domains.' This gives the agent clear context for when to invoke this tool over alternatives. It does not explicitly name sibling tools or state when not to use it, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

exiftool_metadataExifTool metadataA
Read-onlyIdempotent

Read the metadata of a local photo, video or document with ExifTool: GPS coordinates, camera, author, software and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the photo, video or document

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it invokes ExifTool and reads local metadata, but it does not disclose potential behavior such as requiring ExifTool to be installed or failing on unsupported file types. This is acceptable given the annotations, but not richly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence that front-loads the action and resource, then adds concrete examples of the metadata categories. Every phrase earns its place with no repetition of schema fields or annotation values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only tool with no output schema, the description gives enough context for an agent to invoke it correctly and understand what it will retrieve. A small gap is that it does not mention output format or failure modes, but these are not critical given the tool's simplicity and the safe-read annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the only parameter, file_path, is already described as an absolute path to the photo, video, or document. The description reinforces this by mentioning local files but adds little semantic detail beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), a clear resource ('metadata of a local photo, video or document'), and the method ('with ExifTool'). It also enumerates concrete metadata categories (GPS, camera, author, software, timestamps), making the tool's purpose immediately recognizable and distinct from the OSINT search siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'local' clearly establishes that this tool is for on-disk files rather than online investigations, which implicitly differentiates it from the sibling tools (email, username, domain searches). However, it does not explicitly state when not to use it or name an alternative, so it stops short of full usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

osint_toolbox_statusToolbox statusA
Read-onlyIdempotent

Which OSINT tools this server can run on this machine, and how to install the missing ones. Call it when a tool you need is not available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate safety (readOnly, idempotent, non-destructive). The description adds behavioral context by stating the tool reports status and installation instructions rather than performing installations, which clarifies its non-mutating scope. It could mention response format, but the core behavior is transparent enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. The key information—what the tool reports and when to use it—is front-loaded and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with annotations covering safety, the description is complete: it identifies the tool's purpose, the information it provides, and the precise invocation trigger. No output schema is required because the tool's outputs are summarized adequately by the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4; there is no parameter burden for the description to address. The description still clarifies what the tool covers, which is sufficient given the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this tool reports which OSINT tools the server can run on this machine and how to install missing ones. It is distinct from the sibling tools, which perform specific OSINT searches rather than report on toolbox availability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent when to call it: 'Call it when a tool you need is not available.' This direct trigger condition is sufficient for a meta-status tool and no alternative is needed since siblings are the tools being checked, not competitors.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

phoneinfoga_scanPhoneInfoga phone number scanA
Read-onlyIdempotent

Scan a phone number with PhoneInfoga: country, number formats, carrier and line type (with an API key), and search engine queries for it.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYesPhone number in international (E.164) format, e.g. +14155552671

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is well covered. The description adds meaningful context: carrier/line type requires an API key and the scan involves search engine queries, implying external web activity. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence stating the action and then efficiently enumerating the result categories. There is no filler or redundant information, and every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one parameter, no output schema, and annotations covering safety, the description provides a clear outline of the returned information domains. It lacks explicit response structure or error/edge-case details, but the tool's low complexity makes this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents the single 'number' parameter with format (E.164) and example (100% coverage). The description does not add any additional parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'scan', names the resource (a phone number), and lists concrete outputs: country, number formats, carrier/line type (with an API key), and search engine queries. This clearly differentiates it from sibling tools targeting emails, usernames, domains, or metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is implied by the tool name and description — scanning phone numbers — but it never explicitly states when to choose this tool over alternatives or when not to use it. Sibling tools are obviously for other entity types, so the context is clear but not directly articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spiderfoot_scanSpiderFoot scanA
Read-onlyIdempotent

Run a SpiderFoot scan: it detects the target type and runs the matching modules. Results are grouped by event type. A 'passive' scan takes minutes, 'all' can take 30+ minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesDomain, IP address, subnet (CIDR), email address, phone number, username, person name in double quotes (e.g. "John Smith"), Bitcoin address or BGP AS number
use_caseNoWhich modules run: passive (no direct contact with the target, fastest), footprint, investigate, or all (default, slowest)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context: it detects target type automatically, groups results by event type, and discloses time expectations (minutes vs 30+ minutes). This goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no waste. The core action is front-loaded, and the time guidance is efficiently packed into the final sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 params, 100% schema coverage, and safety annotations, the description is nearly complete. It explains what happens during the scan, how results are organized, and time expectations. It doesn't mention output format, but with no output schema and the annotations covering safety, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters thoroughly. The description adds the time-duration context for use_case values, which is useful, but doesn't add meaning beyond the schema's parameter descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs a SpiderFoot scan, detects target type, and runs matching modules. It distinguishes itself from sibling tools by focusing on SpiderFoot's multi-type target scanning rather than a single search type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the use_case options and their time implications, giving an agent context on when to choose 'passive' vs 'all'. It doesn't explicitly name sibling alternatives, but the target-type flexibility and scan duration guidance provide clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wayback_snapshotsWayback Machine snapshotsA
Read-onlyIdempotent

Archived snapshots of a URL, a site or a domain in the Internet Archive's Wayback Machine, newest first, with links to view each one.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLatest date, e.g. 2021 or 20211231
urlYesURL or domain, e.g. example.com/about
fromNoEarliest date, e.g. 2019 or 20190131
limitNoNumber of snapshots (default: 50)
matchNoexact URL (default), every URL under it (prefix), the whole host, or the domain with subdomains

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral detail beyond annotations by specifying ordering ('newest first') and that links to view snapshots are included, but it does not add much else about response behavior or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-formed sentence with no fluff, filler, or repetition. Key information is front-loaded: what the tool returns, the data source, ordering, and the link behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with fully documented parameters and rich annotations, the description conveys the essential return content (archived snapshots, newest first, links to view). There is no output schema, but the description gives a minimally sufficient picture for an agent to interpret the response, even if field-level details are not specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the input schema, including url semantics, defaults, and the match enum. The description adds no parameter-level meaning beyond what the schema provides, which matches the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (archived snapshots of a URL/site/domain in the Wayback Machine) and the output (newest first, with links to view each one). It is clear and distinguishable from the OSINT sibling tools, though it lacks an explicit verb like 'list' or 'retrieve', so it stops just short of the top tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: when a user needs historical archived versions of a web resource from the Internet Archive. However, it does not mention when not to use it or name alternative sibling tools, so usage guidance is only implicitly conveyed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whois_lookupWHOIS lookupA
Read-onlyIdempotent

Registration data for a domain, IP address, network or AS number: registrar, dates, name servers, holder and contacts where public. Uses RDAP, or WHOIS for registries without RDAP.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesDomain (example.com), IP address, CIDR network or AS number (AS13335)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive behavior. The description adds value by disclosing that it uses RDAP or WHOIS depending on registry support, and that data may be limited to public information ('where public'). This contextualizes the tool's behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the data scope and fields, followed by the protocol note. Every word earns its place; there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only lookup tool with no output schema, the description covers what the tool does, what data it returns, and the protocol nuance. It sufficiently equips an agent to decide when to invoke it and what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents the query parameter with format examples (domain, IP, CIDR, AS number). The description repeats these same resource types without adding new semantic detail, so it provides borderline marginal value over the schema. Baseline 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as returning registration data for domains, IPs, networks, or AS numbers, with specific data fields (registrar, dates, name servers, holder, contacts). This is distinct from sibling tools like DNS lookup or subdomain search, so an agent can easily differentiate it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when registration data is needed for the listed resource types) but does not explicitly mention alternatives or exclusions. It provides clear context for the tool's purpose, though it stops short of naming sibling tools to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 8 tool updatesv1.1.0
    • Addedcrtsh_certificate_search
    • Addeddns_lookup
    • Addeddnsrecon_domain_scan
    • Addeddnstwist_lookalike_domains
    • Addedosint_toolbox_status
    • Addedsubfinder_subdomain_search
    • Addedwayback_snapshots
    • Addedwhois_lookup
  2. 8 tool updatesv0.1.1
    • Addedexiftool_metadata
    • Addedghunt_google_search
    • Addedholehe_email_search
    • Addedmaigret_username_search
    • Addedphoneinfoga_scan
    • Addedsherlock_username_search
    • Addedspiderfoot_scan
    • Addedtheharvester_domain_search

TDQS

A3.7/5.0

Scored across 16 tools

Disambiguation3/5

The tools are mostly organized by distinct external utilities, but some outputs overlap: subfinder, crtsh, dnsrecon, and theHarvester can all surface subdomains or hostnames, and sherlock and maigret both search usernames across many sites. The descriptions clarify the source and depth of each tool, but an agent still faces plausible ambiguity when choosing among them.

Naming Consistency4/5

Almost all tools follow a predictable snake_case pattern of underlying_tool plus a descriptive suffix, such as subfinder_subdomain_search, phoneinfoga_scan, and whois_lookup. A few names like wayback_snapshots and exiftool_metadata omit an action verb, but the overall convention is consistent and readable.

Tool Count4/5

Sixteen tools is slightly above the ideal range but appropriate for an OSINT toolbox that wraps one external utility per tool. Each tool covers a distinct reconnaissance category, and none feel redundant enough to remove.

Completeness4/5

The toolbox covers major OSINT workflows well: domain enumeration, DNS, WHOIS, certificate transparency, lookalike domains, email lookup, username search, phone lookup, file metadata, and web archives. Some common areas like IP reputation or breach-data search are missing, but the included surface is broad and practical.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Exposes popular OSINT and reconnaissance tools like Sherlock, SpiderFoot, and Holehe through MCP and HTTP APIs for AI assistants. Runs security research tools in sandboxed environments and returns normalized JSON results for investigation and analysis.
    1
    -
  • A
    license
    A
    quality
    C
    maintenance
    Provides AI agents with 37 OSINT tools and 12 data sources to perform unified reconnaissance, domain analysis, and attack surface mapping. It enables agents to query, correlate, and reason across platforms like Shodan, VirusTotal, and Censys in parallel.
    37
    204 npm
    53
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to perform controlled OSINT tasks (domain, IP, email, phone, username recon; metadata analysis; breach checks) in a Docker sandboxed Kali Linux environment.
    -