osint-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@osint-mcp-serverrun recon on example.com and tell me what stands out"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
osint-mcp
MCP server that gives Claude (or any MCP client) a handful of passive recon lookups for domains and IPs. No API keys needed, everything comes from public sources.
I got tired of jumping between whois, crt.sh, the Wayback Machine and Shodan tabs when looking into a domain, so this lets the model do it and put the results together.
Tools
tool | what it does | source |
| all of the below at once + a list of highlights worth a look | everything |
| registrar, created/expires, nameservers, abuse contact | RDAP (rdap.org) |
| network owner, CIDR, country, abuse contact, PTR | RDAP + reverse DNS |
| A, AAAA, CNAME, MX, NS, TXT, SOA, CAA (or pick your own) | your resolver or a custom one |
| subdomains found in certificate transparency logs | crt.sh |
| archived snapshots of a URL, supports | Wayback CDX API |
| status, redirect chain, headers, missing security headers | direct request |
| open ports, hostnames, CPEs, known CVEs | Shodan InternetDB (free) |
| SPF, DMARC, MTA-STS, TLS-RPT, DKIM, graded A-F | DNS |
| issuer, expiry, SANs, TLS version, why a cert is invalid | direct connection |
| which AS announces an IP, who owns it, all its prefixes | RIPEstat |
Everything except http_headers and tls_certificate is passive, the target never sees your traffic. Those two just open a normal connection, same as visiting the site in a browser.
Related MCP server: DomainDetails MCP Server
Install
Needs Python 3.10+.
pip install osint-mcp-serveror if you use uv you don't need to install anything, just point the client at uvx (see below).
Claude Desktop
Add this to claude_desktop_config.json:
{
"mcpServers": {
"osint": {
"command": "uvx",
"args": ["osint-mcp-server"]
}
}
}If you installed with pip, "command": "osint-mcp-server" with no args works too.
Claude Code
claude mcp add osint -- uvx osint-mcp-serverCursor, Windsurf etc. take the same JSON as Claude Desktop.
Example prompts
"run recon on example.com and tell me what stands out"
"can someone spoof email from our domain? what should we fix first?"
"which of these 20 domains have certificates expiring this month?"
"what ip ranges does AS13335 announce?"
"check the security headers on these 5 sites and tell me which are worst"
"which of the subdomains of example.com resolve to something with open ports?"
"what did example.com/about look like in 2015?"
Caching
API responses (RDAP, crt.sh, Wayback, RIPEstat, InternetDB) are cached in sqlite for 6 hours at ~/.cache/osint-mcp/cache.sqlite3, mostly so crt.sh doesn't get hammered. DNS, TLS and HTTP checks are always live.
OSINT_MCP_CACHE=off # disable
OSINT_MCP_CACHE_TTL=3600 # seconds
OSINT_MCP_CACHE_PATH=/tmp/x.dbNotes
crt.sh and the Wayback CDX API are slow and return 502/503 pretty often. The server retries a couple of times but sometimes you just have to try again later.
InternetDB isn't real-time and only has IPs Shodan has actually scanned.
DKIM selectors can't be listed,
email_securitytries the common ones. Passdkim_selectorsif you know yours..ro,.deand some other ccTLDs don't have public RDAP, sodomain_whoiscan't do much for them.
Development
git clone https://github.com/robyroro/osint-mcp
cd osint-mcp
pip install -e . pytest
pytestTests don't hit the network, HTTP calls are mocked.
To poke at it with the MCP inspector:
npx @modelcontextprotocol/inspector osint-mcpBe reasonable
This only pulls public data, but still: use it on your own stuff, bug bounty targets that are in scope, or for research. Don't use it to go after people.
License
MIT
Available Tools
11 toolsasn_lookupA
Look up an IP or AS number (e.g. "AS13335") via RIPEstat: which AS announces it, who holds the AS and every prefix it announces.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| include_prefixes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that the lookup uses RIPEstat and lists the output components, but it does not mention rate limits, response size (e.g., 'every prefix' could be large), or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence contains the action, resource, data source, and expected output with an example. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description explains the query semantics and return content, but it omits include_prefixes and any warning about potentially large prefix lists. An agent can make a basic call but lacks full context for optional behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds meaning for the required query parameter by specifying 'IP or AS number' with an example. It does not explain include_prefixes, though the default true aligns with the mention of 'every prefix'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Look up') and resource ('IP or AS number'), and enumerates the returned data: announcing AS, holder, and prefixes. This clearly differentiates it from sibling tools like ip_whois or dns_lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys the intended use case—resolving IP/AS numbers to AS ownership and prefix data via RIPEstat—so an agent can infer when to call it. However, it does not explicitly mention exclusions or compare against sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_lookupA
DNS records for a domain. Defaults to A, AAAA, CNAME, MX, NS, TXT, SOA, CAA. Pass nameserver (e.g. "1.1.1.1") to query a specific resolver.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| nameserver | No | ||
| record_types | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It usefully discloses the default record set and the optional nameserver override, but it does not describe the output format, failure behavior, or whether the query is recursive/authoritative. Partial but not comprehensive disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and immediately useful defaults. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with no output schema and no annotations, the description covers basic invocation and default behavior. It is missing explicit semantics for record_types and return format, but an agent can still make a reasonable basic call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for nameserver with an example and communicates the default record types, which informs how record_types behaves. However, it does not explicitly explain the record_types parameter or list all accepted values, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('DNS records for a domain') and lists the default record types, making the tool's core function clear. It doesn't explicitly differentiate it from siblings like recon_domain or domain_whois, but the DNS-record focus is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when DNS records are needed and explains how to query a specific resolver. However, it does not mention when not to use it or name alternatives for broader recon or WHOIS lookups, leaving some routing decisions to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_whoisA
Registration info for a domain via RDAP: registrar, creation/expiry dates, nameservers, status and abuse contact.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds useful behavioral context by naming the protocol (RDAP) and listing the returned fields, which implies a read-only live lookup. It does not cover rate limits, auth, or edge cases, but for a simple read operation this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, focused sentence that front-loads the purpose and enumerates the output fields. No filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required parameter, read-only lookup) and the description covers purpose, protocol, and expected data fields. There is no output schema, but the field list partially addresses return values. Missing details like error behavior are minor for this tool type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description merely repeats the parameter name ('domain') without adding format, constraints, or examples (e.g., FQDN, no protocol, punycode). For a low-coverage schema, the description should compensate for the missing parameter semantics, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource ('domain registration info') and specifies the data fields returned (registrar, dates, nameservers, status, abuse contact). It distinguishes from sibling tools like ip_whois by explicitly identifying domain and RDAP. However, it lacks an explicit verb (e.g., 'retrieve' or 'query') and does not name sibling tools for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever domain registration details are needed. But it provides no explicit alternatives, exclusions, or conditions ('use ip_whois for IP addresses'). The context is clear but leaves the 'when not' to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_securityA
Grade (A-F) how well a domain is protected against being spoofed in email: SPF, DMARC, MTA-STS, TLS-RPT and DKIM. DKIM selectors can't be listed, so a set of common ones is tried unless you pass your own.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| dkim_selectors | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the A-F output, the five protocols checked, and the non-obvious DKIM selector fallback behavior. It does not explain grading methodology or data sources, but for a read-only grader this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The main purpose and output are front-loaded, and the second sentence adds the key parameter nuance about DKIM selectors.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no output schema, the description covers purpose, output, standards checked, and the one non-obvious parameter. Minor gaps remain around domain format and return structure, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explicitly explains dkim_selectors: common selectors are tried unless the caller passes their own. The domain parameter is self-evident from the surrounding text, though no format caveat is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Grade (A-F)') and a specific resource (a domain's email spoofing protection), then enumerates the exact standards checked. This clearly distinguishes it from sibling lookup/recon tools like dns_lookup or domain_whois.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied clearly: use it when you need an email-security grade for a domain. However, it does not explicitly name alternatives or state when not to use it, leaving some routing judgment to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_headersA
Fetch a URL and return status, redirect chain, response headers and which common security headers are missing.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It transparently states that this performs a live fetch and enumerates what is returned. It does not mention potential side effects like triggering requests on the target or rate limits, but 'Fetch a URL' makes the active network behavior clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the action and packs all key output details without wasted words. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the main behavior and return contents well. It lacks URL format expectations and error-handling notes, but these are minor for a simple HTTP header inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only repeats the parameter name ('URL') without specifying accepted formats, whether a scheme is required, or whether IPs/domains are valid. The agent gets no additional meaning beyond the schema's 'url' string field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Fetch'), a concrete resource ('a URL'), and the exact outputs: status, redirect chain, response headers, and missing security headers. This clearly distinguishes it from the DNS/whois/subdomain siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is clear enough that an agent can infer when to use it: whenever HTTP-level response information is needed. It does not explicitly name alternatives or exclusions, but the sibling tools are sufficiently different in domain that the intended context is obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ip_whoisA
Who owns an IP: network name, CIDR, country, org, abuse contact and reverse DNS (PTR).
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It implies a read-only lookup by saying 'Who owns an IP', but it does not explicitly state that it is non-mutating, mention external network dependencies, or note possible latency or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the core question and then lists the useful output fields without wasted words. It is appropriately sized for a simple one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity and single parameter, the description covers the basic purpose and result fields. However, with no annotations and no output schema, it omits details about response structure, error conditions, and how this tool relates to nearby sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema gives no description for the single `ip` parameter, so the description must compensate. 'Who owns an IP' confirms the parameter expects an IP address, but it does not specify whether IPv4, IPv6, or CIDR-style inputs are accepted, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (an IP address) and the purpose (ownership lookup), and it enumerates the returned data: network name, CIDR, country, org, abuse contact, and reverse DNS. It is clear enough to distinguish from domain-oriented siblings, though it does not explicitly call out a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 you need to know who owns an IP address—but it gives no explicit guidance about when not to use it or when to prefer siblings like domain_whois or asn_lookup. The usage context is inferable from the name and content, not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recon_domainA
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 few IPs. Ends with a 'highlights' list of things worth a look. Takes 10-60s, mostly waiting on crt.sh, pass include_subdomains=false for a faster run.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| include_subdomains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool is 'passive' (non-intrusive), has a 10-60s latency, and depends on external services (crt.sh). It mentions the output ends with a 'highlights' list, giving a sense of the return value. It does not mention rate limits or failure modes, but for a read-only aggregation tool, this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The first sentence packs the core functionality into a list without excess detail, and the second provides latency and an optimization hint. It is front-loaded with the purpose and scoping. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex, aggregating many data sources, and the description covers its main components, latency, and a performance knob. It mentions the 'highlights' output but does not detail the full response structure. Since there is no output schema, a bit more on the output format could help, but the description is sufficient for an agent to decide when to call it. Missing edge-case behavior (e.g., invalid domains) is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. The description explains the 'include_subdomains' parameter indirectly by noting that passing false makes the run faster, implying it controls subdomain enumeration. The 'domain' parameter is self-evident from the tool name. It adds a performance nuance but does not fully describe the effect of include_subdomains on results (e.g., missing subdomain data). This is a partial compensation, hence a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a 'Passive overview of a domain in one call' and enumerates the data sources (whois, DNS, email security, TLS, HTTP headers, CT-log subdomains, ASN, reverse DNS, Shodan). This distinguishes it from the sibling tools, which each cover a single data source. The verb 'recon' and resource 'domain' are specific, and the aggregation is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use this tool: when a broad passive overview is needed in one call. It implies that specific tools (siblings) are for targeted queries, though it does not explicitly name alternatives. It provides a performance tip ('pass include_subdomains=false for a faster run') and a latency range (10-60s), which helps the agent decide. Missing explicit 'when not to use' guidance, but the context is clear enough for a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shodan_internetdbA
Open ports, hostnames, CPEs, tags and known CVEs for an IP from Shodan's free InternetDB (no API key, data can be a few days old).
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It transparently notes that data can be a few days old and requires no API key, which are key behavioral traits. It does not cover error handling or rate limits, but for a simple read-only lookup this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the primary outputs, then notes the source and caveat. There is zero waste, and all information earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one param, no output schema, no annotations), the description is sufficiently complete. It explains what is returned, the data source, and the staleness caveat. Missing details like error handling or rate limits are minor for a tool of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'ip' is a string with no schema description (0% coverage). The description adds that the tool works on an IP but does not specify format (IPv4/IPv6) or any validation. Since the parameter name and description align, meaning is clear, but the description adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (open ports, hostnames, CPEs, tags, known CVEs) and the target (an IP), and distinguishes itself from sibling tools that are domain-oriented. It also names the source (Shodan's InternetDB) and the condition (free, no API key), leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies usage for IP-based reconnaissance and highlights the free/no-key aspect, which differentiates it from paid or key-requiring alternatives. It does not explicitly name alternatives or exclusions, but the scope is evident given the sibling set (mostly domain tools).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subdomainsB
Subdomains seen in public TLS certificates (crt.sh). Can be slow for large domains.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral context. It does disclose that data comes from crt.sh public TLS certificates and warns about slowness. However, it does not mention output format, completeness limitations, or external dependency behavior, so it is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core purpose and includes a relevant performance warning. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool, the description covers the key purpose, source, and a performance warning. It is missing response format and parameter format details, but it is adequate for basic invocation. Clear gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single 'domain' parameter, and the description does not compensate. It does not specify the expected format (e.g., no scheme, whether subdomains are accepted, apex-only) or provide an example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies what the tool returns (subdomains) and its data source (public TLS certificates via crt.sh). This distinguishes it from siblings like dns_lookup or tls_certificate, though it lacks an explicit verb such as 'List' or 'Enumerate'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a performance caveat ('Can be slow for large domains') but gives no explicit guidance on when to use this tool versus alternatives like recon_domain, dns_lookup, or tls_certificate. Usage context is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tls_certificateA
Connect to host:port and read its TLS certificate: issuer, validity dates, days until expiry, SANs, negotiated TLS version. Invalid certs (expired, self-signed, wrong host) are reported with the reason.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| port | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It communicates that the tool performs a network connection (behavior) and reports specific information. It also mentions how invalid certs are handled (reported with reason), which is a behavioral nuance. It doesn't mention timeouts or error handling beyond invalid certs, but the core behavior is disclosed. The description does not contradict any annotations since none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two sentences, and front-loaded with the main action ('Connect to host:port and read its TLS certificate'). It lists key output details and then handles edge cases. There is no waste, but it could be more structured (e.g., separate sentences for parameters and outputs). Overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (network call, multiple output fields) and lack of output schema, the description is fairly complete. It covers what the tool does, the key outputs, and how invalid certs are reported. It doesn't mention timeouts or rate limits, but for a read-only tool, this is acceptable. It might benefit from noting that the connection is outbound and could require network access, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for parameters. The description implies the 'host' parameter is the target host and 'port' is the port to connect to (default 443), but does not explicitly detail these parameters. It adds some context by mentioning 'host:port' in the description, but for an agent, the parameter semantics are mostly clear from the schema names and defaults. The description could be more explicit about the meaning of each parameter, but it is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool connects to a host:port and reads its TLS certificate, listing specific details like issuer, validity dates, days until expiry, SANs, and negotiated TLS version. It distinguishes itself from siblings by focusing on TLS certificate inspection, which is unique among the listed tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need TLS certificate details for a given host and port. It does not explicitly mention alternatives, but among siblings, none are about certificates, so it is clear this is the tool for that task. It also notes invalid certs are reported with reason, providing context for edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waybackC
Archived snapshots of a URL from the Wayback Machine. Use a wildcard like "example.com/*" to list everything archived under a site.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| limit | No | ||
| year_to | No | ||
| year_from | No | ||
| newest_first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does convey that the tool returns archived snapshots and that a wildcard lists everything under a site, but it does not describe response format, pagination, rate limits, or whether snapshots are metadata or content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with no filler. The wildcard example earns its place, though the first sentence is a fragment rather than a complete statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, no output schema, and no annotations, this description is too sparse. It omits response format, semantics for four parameters, and any broader usage context beyond the wildcard trick.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only clarifies the url parameter through the wildcard example; limit, year_to, year_from, and newest_first are left entirely to their self-explanatory names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as archived snapshots from the Wayback Machine and mentions wildcard listing, which is specific enough to distinguish it from the sibling recon tools. However, it lacks an explicit verb like 'retrieve' or 'list,' so it reads as a noun phrase rather than a clear action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over alternatives such as dns_lookup or http_headers. The only usage hint is the wildcard example, which is about input syntax, not selection context.
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.
11 tool updates
v0.2.0- First observed
asn_lookup - First observed
dns_lookup - First observed
domain_whois - First observed
email_security - First observed
http_headers - First observed
ip_whois - First observed
recon_domain - First observed
shodan_internetdb - First observed
subdomains - First observed
tls_certificate - First observed
wayback
TDQS
Scored across 11 tools
Each tool targets a distinct data source or type: recon_domain is an aggregated overview, while domain_whois, ip_whois, dns_lookup, subdomains, wayback, http_headers, shodan_internetdb, email_security, tls_certificate, and asn_lookup each focus on a unique aspect (e.g., registration, DNS, certificates, email). There is minimal overlap; for example, subdomains and asn_lookup are clearly separate.
All tool names follow a consistent noun-based pattern (e.g., domain_whois, ip_whois, dns_lookup, tls_certificate). There is no mixing of styles or ambiguous verbs; the naming clearly indicates the data type being queried.
With 11 tools, the collection is well-scoped for a recon/information-gathering server. Each tool serves a distinct purpose in the security recon workflow, and the number is within the ideal range, avoiding both redundancy and insufficiency.
The toolset covers the major security recon surfaces: domain info, IP info, DNS, subdomains, HTTP headers, TLS, email security, and ASN. Minor gaps include missing passive DNS history, port scanning beyond InternetDB, or vulnerability scanning APIs, but agents can achieve common recon goals with the provided tools.
Maintenance
Related MCP Connectors
454 OSINT recon tools + server-side entity correlation & person sweeps. Keyless.
Query WHOIS/RDAP information for domains, IP addresses, CIDR prefixes and ASNs. Self-hostable.
WHOIS, DNS, SSL, IP geo for security forensics and OSINT — separate from SEO.
STIX IOCs, CVE lookups w/ EPSS/KEV, ATT&CK dossiers, OFAC wallet sanctions, domain age checks.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides 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.37174 npm55MIT
- AlicenseAqualityFmaintenanceProvides comprehensive domain research tools including RDAP, WHOIS, and DNS lookup capabilities, with automatic fallback and support for 50+ TLDs.14 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables external reconnaissance activities including DNS enumeration, subdomain discovery, email security analysis, and SSL certificate inspection against a target domain.13-
- AlicenseNot gradedqualityAmaintenancePassive external attack-surface mapping server that discovers subdomains, DNS records, TLS posture, HTTP headers, and registration data via public sources like CT logs, Shodan, and RDAP/WHOIS, enabling security reconnaissance without active scanning.62 npm1Apache 2.0