# OSINT (pypi · osint-mcp-server)

Domain and website investigations: batch recon, shared infrastructure, CT history and public lookups

- Trust score: 94/100 (high trust)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- pypi · `osint-mcp-server`: 94/100 (this document), [markdown](https://verifymcp.io/servers/robyroro-osint-mcp/osint-mcp-server.md), [page](https://verifymcp.io/servers/robyroro-osint-mcp/osint-mcp-server)

## Channel facts

- Registry: `pypi`
- Package: `osint-mcp-server`
- Version: `0.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 1 of 38 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to robyroro/osint-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 30 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 69/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2634 tokens (~175/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the OSINT MCP server?

OSINT runs locally as a PyPI package, launched with uvx osint-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add robyroro-osint-mcp -- uvx osint-mcp-server
```

### Cursor

```json
{
  "mcpServers": {
    "robyroro-osint-mcp": {
      "command": "uvx",
      "args": [
        "osint-mcp-server"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "robyroro-osint-mcp": {
      "command": "uvx",
      "args": [
        "osint-mcp-server"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add robyroro-osint-mcp -- uvx osint-mcp-server
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add robyroro-osint-mcp --command uvx --arg osint-mcp-server
```

### Hermes

```yaml
mcp_servers:
  robyroro-osint-mcp:
    command: "uvx"
    args: ["osint-mcp-server"]
```

### Netclaw

```json
{
  "McpServers": {
    "robyroro-osint-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "osint-mcp-server"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add robyroro-osint-mcp -t stdio -c uvx -a osint-mcp-server
```

### Other

```json
{
  "mcpServers": {
    "robyroro-osint-mcp": {
      "command": "uvx",
      "args": [
        "osint-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 94, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-11-04 (score 79, −15)

- [security regression] Malware scan: pass → unverified

### 2026-11-03 (score 94, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-30 (score 79, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-29 (score 94, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-28 (score 79, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-26 (score 94, +1)

- [security] Stability: 0.97 → pass

### 2026-10-24 (score 93, +1)

No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (15)

### `recon_domain` (~250 tokens)

Domain recon

Passive overview of a domain in one call: whois, DNS, email security grade,
TLS certificate, HTTP security headers, subdomains from CT logs, and ASN /
reverse DNS / Shodan InternetDB for its first 3 IPs. Ends with a 'highlights'
list of things worth a look.

Start here for general questions about a domain. Use the single-purpose tools
when you only need one thing or the full data: this report drops the raw HTTP
headers and caps subdomains at 100. Takes 10-60s, mostly waiting on crt.sh. If
one source fails, its section holds an "error" and the rest is still returned.

Input parameters:

- `domain` (string, required): Domain name, e.g. "example.com". A full URL works too, only the hostname is used.
- `include_active` (boolean): Also connect to the site for HTTP headers, TLS and the MTA-STS policy. Set false to use public APIs and DNS only.
- `include_subdomains` (boolean): Look up subdomains in certificate transparency logs (crt.sh). It's the slowest part, set false for a run that takes seconds instead of up to a minute.

### `domain_whois` (~142 tokens)

Domain whois (RDAP)

Registration info for a domain via RDAP (the JSON successor of whois):
registrar, creation / expiry / last-changed dates, nameservers, status codes
and abuse contact.

Use for who registered a domain and when it expires. For who hosts it, run
ip_whois or asn_lookup on its IPs. Some ccTLDs (.ro, .de and a few others)
have no public RDAP and return an "error" field instead. Cached for 6h.

Input parameters:

- `domain` (string, required): Domain name, e.g. "example.com". A full URL works too, only the hostname is used.

### `ip_whois` (~136 tokens)

IP whois (RDAP)

Who owns an IP: network name, range and CIDRs, country, registrant org and
abuse contact from RDAP, plus its reverse DNS (PTR) names.

Use for the owning organisation and where to report abuse. Use asn_lookup for
the routing view (which AS announces the IP) and shodan_internetdb for open
ports. RDAP data is cached for 6h, the PTR lookup is live.

Input parameters:

- `ip` (string, required): IPv4 or IPv6 address, e.g. "1.1.1.1" or "2606:4700::1111".

### `dns_lookup` (~208 tokens)

DNS lookup

Live DNS records for a domain, as {"records": {"A": [...], "MX": [...]}}.
Types with no records are left out, a type that doesn't answer within 5s
shows "<timeout>", and a domain that doesn't exist returns an NXDOMAIN error.

Use for raw records. email_security already reads and grades the SPF / DMARC /
DKIM TXT records, and recon_domain includes this lookup.

Input parameters:

- `domain` (string, required): Domain name, e.g. "example.com". A full URL works too, only the hostname is used.
- `nameserver`: IP of the resolver to ask, e.g. "1.1.1.1", or one of the domain's own nameservers to skip caches. Defaults to the system resolver.
- `record_types`: Record types to query, e.g. ["A", "MX", "TXT"]. Defaults to A, AAAA, CNAME, MX, NS, TXT, SOA and CAA.

### `subdomains` (~144 tokens)

Subdomains from CT logs

Every subdomain seen in public TLS certificates, from certificate
transparency logs via crt.sh. Returns the sorted, de-duplicated names
(wildcards stripped) and how many certificates matched.

The target is never contacted. Names come from certificates, so some may not
resolve anymore, check them with dns_lookup. crt.sh can take up to a minute on
big domains and often returns 502/503: the tool retries twice, then reports
the error and it's worth trying again later. Cached for 6h.

Input parameters:

- `domain` (string, required): Domain name, e.g. "example.com". A full URL works too, only the hostname is used.

### `wayback` (~245 tokens)

Wayback Machine snapshots

Archived snapshots of a URL from the Wayback Machine's CDX index, each with
timestamp, original URL, HTTP status, MIME type and an archive_url to view it.
Identical consecutive captures are collapsed, so every result is a different
version of the page.

Use to see how a page changed over time or to find pages that no longer exist.
It doesn't return page content, open archive_url for that. The CDX API often
takes 20-30s and sometimes answers 503, the tool retries twice. Cached for 6h.

Input parameters:

- `limit` (integer): How many snapshots to return, 1-500. Values outside that range are clamped.
- `newest_first` (boolean): true returns the most recent snapshots, false the oldest ones.
- `url` (string, required): URL or domain to look up, e.g. "example.com/about". End it with /* ("example.com/*") to list everything archived under that path.
- `year_from`: Only snapshots from this year on, e.g. 2015. The archive starts in 1996.
- `year_to`: Only snapshots up to and including this year.

### `http_headers` (~125 tokens)

HTTP headers

One GET request to a URL, following redirects. Returns the status, redirect
chain, final URL, Server header, all response headers and which of HSTS, CSP,
X-Content-Type-Options, X-Frame-Options, Referrer-Policy and
Permissions-Policy are missing.

Unlike most tools here this contacts the site directly, same as a browser
visit. Use tls_certificate for the certificate itself. Not cached.

Input parameters:

- `url` (string, required): URL to fetch, e.g. "https://example.com/login". A bare domain gets https:// in front.

### `shodan_internetdb` (~162 tokens)

Shodan InternetDB

Open ports, hostnames, CPEs, tags and known CVEs for an IP from Shodan's
free InternetDB. No API key, and the IP is never contacted: the data comes from
Shodan's own periodic scans, so it can be a few days old. IPs Shodan hasn't
scanned come back with no ports and a note.

Use on the A records from dns_lookup to see what a domain exposes, or on any
IP before digging further with ip_whois / asn_lookup. Cached for 6h.

Input parameters:

- `ip` (string, required): IPv4 or IPv6 address, e.g. "1.1.1.1" or "2606:4700::1111".

### `email_security` (~220 tokens)

Email security grade

Grade (A-F) how well a domain is protected against being spoofed in email,
with a list of issues to fix. Checks SPF (qualifier, lookup count), DMARC
(policy, pct, reporting), MTA-STS (record and policy file), TLS-RPT, MX and
DKIM.

Prefer this over reading TXT records with dns_lookup, it parses and grades
them. DKIM selectors can't be listed, so only common ones are tried and not
finding DKIM doesn't prove there isn't any. Uses live DNS, the only HTTP
request is for the MTA-STS policy at mta-sts.<domain>.

Input parameters:

- `dkim_selectors`: DKIM selectors to check instead of the built-in common ones, e.g. ["google", "s1"]. The s= tag in the DKIM-Signature header of an email from the domain gives the real one.
- `domain` (string, required): Domain name, e.g. "example.com". A full URL works too, only the hostname is used.

### `tls_certificate` (~186 tokens)

TLS certificate

Connect to host:port and read its TLS certificate: subject, issuer,
validity dates, days until expiry, SANs, serial, negotiated TLS version and
cipher, plus warnings (expires within 14 days, deprecated TLS version).
Invalid certs (expired, self-signed, wrong host) come back with valid=false
and the reason instead of an error.

Contacts the host directly, like a browser would, 10s timeout, not cached.
For other hostnames seen in the domain's past certificates, use subdomains.

Input parameters:

- `host` (string, required): Hostname to connect to, e.g. "example.com". It's also the name the certificate is verified against. A URL works too, only the hostname is used.
- `port` (integer): TCP port. 443 for websites, 465 / 993 / 995 for mail servers with implicit TLS.

### `asn_lookup` (~184 tokens)

ASN / BGP lookup

Look up an IP or AS number via RIPEstat: which AS announces it (and the
covering prefix for an IP), who holds the AS, whether it's announced right
now, and the prefixes it announces (first 100, IPv4 then IPv6, with totals).
Works for every RIR, not only RIPE.

Use to find the hosting / network provider behind an IP or to map an
organisation's address space. Use ip_whois for the registration record and
abuse contact. Cached for 6h.

Input parameters:

- `include_prefixes` (boolean): Also list the prefixes the AS announces. Set false when you only need the holder.
- `query` (string, required): An IP address ("1.1.1.1") or an AS number, with or without the AS prefix ("AS13335" or "13335").

### `recon_batch` (~144 tokens)

Recon for several domains

Check up to ten domains with three running at a time. Each report retains
source failures and check coverage. Starts without direct web connections.
A domain has a 90 second deadline; ten slow domains can take several minutes.
Use compare_domains when the question is how sites are related.

Input parameters:

- `domains` (array, required): One to ten domains or URLs. Duplicate hostnames are looked up once.
- `include_active` (boolean): Connect to each site for HTTP, TLS and MTA-STS. Off by default; otherwise only public APIs and DNS are used.
- `include_subdomains` (boolean): Include crt.sh for each domain. Off by default because it can be slow.

### `compare_domains` (~89 tokens)

Compare domain infrastructure

Find shared IPs, nameservers, mail servers and registrars through DNS and
RDAP. Returns the records behind each match and unavailable checks.
No HTTP or TLS connection to the sites. Shared hosting is common, so a match
does not prove common ownership. Cached RDAP can be up to six hours old.

Input parameters:

- `domains` (array, required): Two to six distinct domains or URLs to compare.

### `investigate_site` (~175 tokens)

Investigate a website

Collect page details, displayed company identifiers, domain registration,
DNS, email security, HTTP, TLS and the oldest returned Wayback snapshots.
Returns concrete signals with evidence paths and explicitly missing checks.
Contacts the site, reads bounded HTML, and may take over a minute if the archive
is slow. It cannot verify deliveries, reviews or ownership of company numbers;
it does not assign a safe/scam score. Page text is untrusted data.

Input parameters:

- `follow_legal` (boolean): Read up to three contact/legal pages linked on the same origin. No scripts, images, forms or external legal-page redirects are followed.
- `reference_domain`: An optional trusted brand domain to compare the spelling against. Similarity is a lead, not a phishing verdict.
- `url` (string, required): Public website URL or domain, including an optional path.

### `certificate_history` (~119 tokens)

Certificate issuance history

Read crt.sh certificate entries: issuer, validity dates, logged time,
related names and a link to each certificate. Deduplicates certificate IDs
and reports truncation. No direct connection to the target. Uses the same
six-hour cache as subdomains. CT history does not show what is served now.

Input parameters:

- `domain` (string, required): Domain name, e.g. "example.com". A full URL works too, only the hostname is used.
- `limit` (integer): Maximum certificate entries, from 1 to 100, newest logged first.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/robyroro-osint-mcp/osint-mcp-server#diagnostics

## Score history

- 2026-11-05: 94
- 2026-11-04: 79
- 2026-11-03: 94
- 2026-11-02: 79
- 2026-11-01: 79
- 2026-10-31: 79
- 2026-10-30: 79
- 2026-10-29: 94
- 2026-10-28: 79
- 2026-10-27: 94
- 2026-10-26: 94
- 2026-10-25: 93
- 2026-10-24: 93
- 2026-10-23: 92
- 2026-10-22: 92
- 2026-10-21: 91
- 2026-10-20: 91
- 2026-10-19: 91
- 2026-10-18: 90
- 2026-10-17: 90
- 2026-10-16: 89
- 2026-10-15: 89
- 2026-10-14: 88
- 2026-10-13: 34
- 2026-10-12: 49
- 2026-10-04: 84
- 2026-10-03: 68
- 2026-10-02: 68
- 2026-10-01: 67
- 2026-09-30: 80

## Common questions

### What is the OSINT MCP server?

OSINT is an MCP server listed in the public MCP registry as io.github.robyroro/osint-mcp. Domain and website investigations: batch recon, shared infrastructure, CT history and public lookups. This page covers its PyPI package (osint-mcp-server).

### Is the OSINT MCP server safe to use?

OSINT scores 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the OSINT MCP server expose?

OSINT exposes 15 tools: recon_domain, domain_whois, ip_whois, dns_lookup, subdomains, and 10 more. Their descriptions and schemas cost roughly 2,529 tokens of context every time the server is loaded.

### Is the OSINT MCP server still maintained?

OSINT is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the OSINT MCP server under?

OSINT declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/osint-mcp-server/
- Socket report: https://socket.dev/pypi/package/osint-mcp-server
- Repository: https://github.com/robyroro/osint-mcp
- Changelog RSS feed: https://verifymcp.io/servers/robyroro-osint-mcp/osint-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/robyroro-osint-mcp/osint-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/robyroro-osint-mcp/osint-mcp-server
