osint-mcp-server
Provides GitHub OSINT tools to look up user profiles, list user repositories, extract commit emails, and inspect repository commits via the GitHub API.
Provides Gravatar lookup capability using an email's MD5 hash to retrieve associated avatar information.
Provides Keybase lookup capabilities for resolving identities and associated public information via the Keybase API.
Provides Reddit OSINT tools to retrieve user information and user posts via Reddit's JSON API.
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 full domain recon on example.com"
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.
Pelican ā OSINT MCP Server
A general-purpose open-source intelligence (OSINT) MCP server for AI agents. Local-first: run it on your own machine, connect any Model Context Protocol client (OpenCode, Hermes, Claude, Cursor, Cline, etc.), and give your agent one tool surface for broad public-data lookups.
šŖæ Why "Pelican"?
Pelicans scan the shoreline for fish ā symbolising an OSINT server that scans public data sources for intelligence. Short, distinctive, and animal-themed (like many MCP servers in this space).
Related MCP server: omega-mcp-server
ā” Quick start
Install
# Using uv (recommended)
uv venv && uv pip install -e ".[dev]"
# Or using pip
pip install pelican[dev]
# Or via uvx (one-shot)
uvx pelican-mcpRun the MCP server
# stdio (default ā local AI agents)
pelican-mcp
# HTTP / streamable-http (remote agents)
pelican-mcp --transport http # default port 8000
# or with bearer token auth:
OSINT_MCP_AUTH_TOKEN=$(openssl rand -hex 24) pelican-mcp --transport httpAdd to your MCP client config
OpenCode (opencode.json):
{
"mcpServers": {
"pelican": {
"type": "stdio",
"command": ["uv", "run", "pelican-mcp"]
}
}
}Claude Code:
claude mcp add pelican -- uv run pelican-mcpCLI (no MCP client needed)
pelican-mcp-cli whois_domain '{"domain": "example.com"}'
pelican-mcp-cli osint_domain_recon '{"domain": "example.com"}'
pelican-mcp-cli --list-toolsš¦ What Pelican does
32 MCP tools across three coverage tiers:
Tier | Tools (selected) |
Domain/Infra |
|
Identity/Social |
|
Threat/Breach |
|
Aggregate tools:
osint_list_sourcesā shows all sources and which API keys are configuredosint_domain_reconā all-in-one free domain recon (DNS + WHOIS + crt.sh + hosts + email security + geoip), correlatedosint_ip_reconā all-in-one free IP recon (geoip + RDAP + BGP + Shodan InternetDB), correlated
š API keys (all optional)
Most tools work with zero config. Add only the keys for sources you want to unlock:
Variable | Unlocks | Cost |
| breached-account lookups | ~$4.50/mo |
| OTX pulses + indicator enrichment | free |
| Shodan search/host tools | free tier |
| higher GitHub rate limit | free |
Copy .env.example to .env and add only the keys you need:
cp .env.example .env
# then edit .env with your keysKeys are read into SecretStr and never logged.
š ļø Architecture
pelican/
āāā pelican/ pelican package (v2 compatibility shim: pelican -> osint_mcp_server)
ā āāā __init__.py legacy import shim
ā āāā config.py env/.env settings, source status
ā āāā net.py shared async HTTP/DNS helpers, bounded concurrency
ā āāā server.py FastMCP entry point, tool registration, transports
ā āāā cli.py direct tool invocation (no MCP client)
ā āāā tools/
ā āāā __init__.py
ā āāā domain.py DNS, RDAP, crt.sh, geoip, BGP, wayback, email security
ā āāā social.py GitHub, Reddit, Keybase, username, email, gravatar
ā āāā threat.py HIBP, Ahmia, Shodan InternetDB, CISA KEV, OTX
ā āāā suite.py source listing + aggregate recon tools
āāā tests/ unit tests (5 passing)Every source is an independent module and every tool is read-only ā nothing
here writes to any target. Tools are annotated with FastMCP
readOnlyHint / idempotentHint / openWorldHint so capable clients can
see at a glance that these are safe, repeatable, read-only operations.
š” Credits & attribution
This project is a from-scratch Python implementation that borrows ideas, tool-shapes, source-selection, and endpoint patterns from several excellent MIT-licensed projects. Thanks to their authors:
Project | What we borrowed | License |
free no-key infra sources (DNS, RDAP, crt.sh, geoip, BGP, wayback, HackerTarget, email security), | MIT | |
identity/social tool set & endpoint/field patterns (GitHub, Reddit, Keybase, username enumeration, email permutation, Gravatar, HIBP) | MIT | |
concept of wrapping OSINT tools, ethical-use framing | MIT | |
HIBP k-anonymity password check, Ahmia dark-web search, CISA KEV, explicit FastMCP read-only annotations | MIT | |
always-free Shodan InternetDB tool | MIT |
The licensing sections of these works are reproduced in full below.
š License
MIT. See LICENSE.
The three MIT license texts from the credited upstream projects are reproduced
in this repository under docs/THIRD_PARTY_LICENSES.md as required by their
MIT terms, so attribution survives this derived work's every redistribution.
š£ļø Roadmap (brainstorm separately)
Shodan / VirusTotal / Hunter source implementations (keys already plumbed)
Optional CLI-tool wrappers (Sherlock / Maigret / Holehe) when installed
Local SQLite cache + background poller for threat feeds (like mcp-threatintel)
Publish to PyPI
Pelican ā one interface, many sources. For authorized open-source intelligence research only.
Available Tools
32 toolsbgp_asnBgp AsnCRead-onlyIdempotent
ASN details and announced IPv4/IPv6 prefixes.
| Name | Required | Description | Default |
|---|---|---|---|
| asn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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, so the safety profile is fully covered. The description adds minimal behavioral context beyond the annotations, only indicating the data scope (ASN details and announced prefixes). It does not mention rate limits, data freshness, or response size, but the annotations carry the main burden.
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 resource and data scope. It earns its place with no filler, though it could add a usage hint without becoming verbose.
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 parameter) and has an output schema, so the description does not need to explain return values. However, the missing input format guidance and lack of differentiation from bgp_ip leave a moderate gap for an agent selecting among many network siblings.
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 does not explain the 'asn' parameter format (e.g., plain integer, 'AS123' notation, or with 'AS' prefix). With only one required parameter and no schema description, the description should compensate but does not, leaving the agent uncertain about valid input formatting.
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 'ASN details and announced IPv4/IPv6 prefixes' states a clear resource (ASN) and what it returns (details and prefixes), but it does not differentiate from the sibling tool bgp_ip, which likely handles IP-to-ASN lookups. The verb is implicit ('get'/'lookup'), so it is clear but not maximally specific.
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 provided on when to use this tool versus bgp_ip or other network lookup siblings. The description implies a lookup use case but does not state exclusions or alternatives, leaving the agent to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bgp_ipBgp IpBRead-onlyIdempotent
IP to prefix/ASN routing lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds no behavioral details beyond the action itself, such as rate limits, result scope, or data source assumptions. It does not contradict annotations, but also does not enrich behavioral understanding beyond what structured data already supplies.
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, front-loaded sentence with zero extraneous words. It directly states the action and resource, making it highly concise while still communicating the core function.
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 single-parameter tool with an output schema and rich annotations, the description is minimally adequate. It tells the agent what to input and what general kind of result to expect, but it leaves out any caveats, data scope, or relationship to sibling tools, making it complete only in a basic sense.
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?
With 0% schema description coverage, the description partially compensates by indicating the 'ip' parameter is the IP address for a routing lookup. However, it does not specify formats (IPv4/IPv6), constraints, or whether CIDR is accepted, and the parameter name already strongly suggests an IP address.
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 uses a specific verb ('lookup') and resource ('IP to prefix/ASN routing'), clearly identifying what the tool does. It does not explicitly differentiate from sibling tools like whois_ip or bgp_asn, but it is unambiguous in its own meaning.
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 provided about when to use this tool versus siblings such as bgp_asn, whois_ip, or geoip. The description does not mention scenarios, prerequisites, or alternatives, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_email_breachesCheck Email BreachesARead-onlyIdempotent
Check an email against HaveIBeenPwned breaches (needs HIBP_API_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool readOnly, idempotent, and non-destructive. The description adds useful operational context beyond those annotations: the call depends on an external service (HaveIBeenPwned) and requires a specific API key. Rate limits or failure behavior are not disclosed, but the added dependency note is valuable.
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 sentence with no filler, front-loads the core action, and includes the key prerequisite. 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?
For a single-parameter, read-only lookup with an output schema and rich annotations, the description is largely sufficient: purpose, target resource, external service, and required credential are all present. The only notable gaps are API-key handling and alternative-tool guidance, but these are secondary given the tool's 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?
Schema description coverage is 0%, so the description must compensate for the single 'email' parameter. It only restates that the tool checks 'an email' without adding format expectations, normalization behavior, or validation semantics, providing little value beyond the schema property name and the tool name.
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 verb ('Check'), a resource ('an email'), and the external data source ('HaveIBeenPwned breaches'), so the operation is clear. It does not explicitly distinguish itself from siblings like check_password_breach, but the email-vs-password difference is reasonably implied.
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 use case is implied by the description: check an email against HIBP breaches. However, the description does not mention when not to use it, does not name alternatives, and only adds the prerequisite 'needs HIBP_API_KEY' rather than guidance for choosing between similar email-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_password_breachCheck Password BreachARead-onlyIdempotent
Check if a password appeared in a breach (k-anonymity; password never leaves the machine).
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive behavior. The description adds the key behavioral detail that the password never leaves the machine via k-anonymity, which is valuable context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the core action and immediately gives the critical privacy property. Every word earns its place; no filler.
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 with an output schema, the description covers the essential behavioral context. It could mention what the response includes, but the output schema already handles that. No critical missing information for correct invocation.
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 explain the password parameter. It only restates the word 'password' in the action and mentions the privacy mechanism, but does not describe the expected format, constraints, or how it is processed. It adds minimal meaning over the schema's type: string.
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 verb and resource: 'Check if a password appeared in a breach'. It clearly distinguishes from siblings like check_email_breaches by focusing on passwords. The added k-anonymity note reinforces the purpose without ambiguity.
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 gives clear context for when to use this tool: when you need to check a password breach while keeping the password private. It does not explicitly mention alternatives or exclusions, but the privacy guarantee makes the use case well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cisa_kev_catalogCisa Kev CatalogARead-onlyIdempotent
Fetch the CISA Known Exploited Vulnerabilities catalog.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds no additional behavioral context beyond 'Fetch', but it also does not contradict the annotations. No extra behavioral disclosure is required for such a simple parameterless read.
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, front-loaded sentence with no filler or repetition. Every word contributes to understanding what the tool does.
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 parameterless, read-only fetch tool, this description is complete. The annotations cover safety and idempotency, and the output schema covers the return structure, so nothing necessary for invoking the tool correctly 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?
There are zero parameters, so the schema already provides 100% coverage. The description appropriately clarifies the exact resource being fetched, which is sufficient for a tool with no inputs.
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 verb ('Fetch') and a precise resource ('CISA Known Exploited Vulnerabilities catalog'), making the tool's function immediately clear. It is also easily distinguishable from the unrelated OSINT sibling 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 gives clear context: this tool is for retrieving the CISA KEV catalog. It does not explicitly list when-not-to-use or alternative tools, but with zero parameters and a unique resource, the intended use is unambiguous and no exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crtsh_searchCrtsh SearchARead-onlyIdempotent
Discover subdomains via certificate transparency logs (crt.sh).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds the external crt.sh source but does not disclose potential rate limits, data freshness, wildcard certificate behavior, or other operational nuances. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word earns its place by conveying action, target, and source.
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 low-complexity with strong annotations and an output schema, so the short description plus structured data is mostly sufficient. The main gap is the lack of explicit usage routing and limit semantics, but the overall definition remains adequate for correct invocation.
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 gives no explicit meaning for 'domain' or 'limit'. The phrase 'Discover subdomains' only weakly implies that 'domain' is the target, and 'limit' is entirely unexplained, leaving the agent to rely on the bare schema properties.
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 verb ('Discover'), a clear resource ('subdomains'), and a precise method/source ('via certificate transparency logs (crt.sh)'). This distinguishes it from siblings like dns_lookup or dns_lookup_all by making the passive CT-log approach 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 implies the tool is for subdomain discovery through CT logs, but it does not explicitly say when to choose it over alternatives such as dns_lookup_all or hackertarget_hostsearch, nor does it mention when not to use it. Usage context is present but only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_lookupDns LookupARead-onlyIdempotent
Resolve DNS records for a hostname (A, AAAA, MX, TXT, NS, SOA, CNAME, CAA, SRV).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| record_type | No | A |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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, covering the safety profile. The description adds value by listing the specific record types that can be resolved, which is behavioral information not present in the annotations or schema. It does not mention potential nuances like invalid types or empty results, but the annotation coverage lowers the burden.
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, front-loaded sentence with no filler. Every word adds value, and the supported record types are listed compactly.
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 straightforward read-only DNS lookup tool with an output schema, the description provides sufficient context: it names the resource, the supported record types, and the hostname target. It omits edge-case behavior (e.g., no records found, invalid type handling), but these are minor given the tool's simplicity and the presence of annotations and an output schema.
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?
With 0% schema description coverage, the description must compensate. It explains 'hostname' for the host parameter and implicitly enumerates valid values for record_type by listing record types. However, it does not explicitly state that record_type defaults to 'A' or that only these listed types are accepted, leaving some inference required for correct invocation.
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 verb ('Resolve') and resource ('DNS records for a hostname') and enumerates the supported record types (A, AAAA, MX, etc.). This clearly distinguishes it from sibling tools like dns_lookup_all or whois_domain without needing to inspect schemas.
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 (resolving a specific DNS record type) but does not explicitly state when to choose this over alternatives such as dns_lookup_all (which likely returns all records) or when not to use it. The context is clear enough for simple cases, but exclusions and comparisons are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_lookup_allDns Lookup AllARead-onlyIdempotent
Resolve all common record types for a hostname at once.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, which already cover the safety profile. The description adds the behavioral scope of returning all common record types, but it omits extra context such as whether IP addresses are accepted, timeout behavior, or which record categories are included. No contradiction with annotations exists.
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 front-loaded sentence with no filler or redundancy. Every word contributes to the core meaning of what the tool does, making it highly scannable for an AI agent.
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, has one required parameter, and benefits from rich annotations plus an output schema, so the description does not need to explain return values. The main gap is that 'common record types' is not enumerated, but the output schema can plausibly fill that 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?
Schema description coverage is 0%, so the description must carry parameter meaning. The description's explicit use of 'hostname' clarifies the single required host parameter, but it mostly restates the parameter name and gives no format, normalization, or accepted-value details. It adds some value but not enough to fully compensate for the absent schema documentation.
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 a specific action ('Resolve') on a hostname and scopes it to 'all common record types at once.' This implicitly distinguishes it from the sibling dns_lookup tool, though it does not explicitly name the sibling. It is clear and not tautological.
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 phrase 'at once' implies using this tool for a comprehensive DNS lookup in one call, but it does not explicitly say when to use dns_lookup instead for a single record type. No exclusion criteria or alternative routing are provided, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_email_searchDomain Email SearchARead-onlyIdempotent
Heuristically scrape a domain's public pages for exposed emails.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds meaningful context by saying the operation is heuristic scraping, which signals best-effort results sourced from live public pages rather than a deterministic database lookup.
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 one focused, front-loaded sentence: action, target, and result. It contains no filler, no repetition of annotations, and no unnecessary detail.
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 with rich annotations and an output schema, the description provides the core behavioral context needed to invoke it correctly. The main gap is the absence of explicit guidance about when to select it versus similar email-enumeration siblings.
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 property description for 'domain', and the description does not provide format details, examples, or protocol guidance. However, the description clearly contextualizes the parameter as an internet domain whose public pages are scraped, which is sufficient given the single self-explanatory parameter.
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 uses the specific verb 'scrape' with a clear resource, 'a domain's public pages', and a clear result, 'exposed emails'. It uniquely identifies the tool among OSINT siblings by emphasizing heuristic public-page scraping rather than DNS, WHOIS, or breach-check behavior.
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 the tool should be used when an agent wants emails exposed on a domain's public pages, but it does not explicitly distinguish it from sibling tools like email_permutations or check_email_breaches. There is no when-not-to-use guidance or explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_permutationsEmail PermutationsCRead-onlyIdempotent
Generate common corporate email address permutations.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| last_name | Yes | ||
| first_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is known. The description adds no behavioral context such as rate limits, authentication requirements, or output details. It doesn't contradict the annotations but also doesn't add value beyond them.
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 sentence with no fluff, which is concise and front-loaded. It efficiently states the purpose, but it is perhaps too terse to provide necessary context. It earns its place but could be slightly expanded without losing conciseness.
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 has an output schema and annotations covering safety, so the description needn't explain those. However, it lacks usage guidelines and parameter details, which are important for correct invocation. The description is adequate for a simple read-only tool but not fully complete.
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 for missing parameter documentation. The description mentions the three inputs implicitly by saying 'common corporate email address permutations,' but it doesn't explain the expected format, any restrictions, or the relationship between parameters. The parameter names are self-explanatory, but the description adds little semantic value.
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 clear action ('generate') on a specific resource ('common corporate email address permutations'). It distinguishes from siblings like domain_email_search by focusing on permutation generation, though it doesn't list examples of common permutations. It is clear enough for an agent to understand the tool's function.
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 no guidance on when to use this tool over alternatives. It doesn't mention scenarios, prerequisites, or exclusions. An agent must infer usage from the name alone, which is insufficient given the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_securityEmail SecurityARead-onlyIdempotent
Analyze a domain's SPF/DMARC/DKIM email-authentication and spoofing risk.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds useful context about the specific checks performed (SPF/DMARC/DKIM and spoofing risk), which goes beyond the annotation. No contradictions.
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, front-loaded sentence with no redundant words. It effectively communicates the tool's core functionality.
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 has a single simple parameter, annotations cover behavioral safety, and an output schema exists (so return format need not be described). The description sufficiently covers what the tool does and the input, leaving no critical gaps for an agent to call it correctly.
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?
With schema description coverage at 0%, the description is the only source of parameter meaning. It states 'domain' but does not specify format (e.g., with/without protocol, subdomain inclusion). The meaning is clear enough for a single string parameter, but it could be more explicit.
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 with a specific verb ('Analyze') and resource ('domain's SPF/DMARC/DKIM email-authentication and spoofing risk'). It distinguishes itself from sibling tools like dns_lookup_all or whois_domain by focusing on security analysis rather than raw record retrieval.
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 explicit guidance on when to use this tool versus alternatives. The description implies it is for email security analysis, but does not mention exclusions or direct comparisons to siblings (e.g., dns_lookup for raw SPF records). An agent would infer usage but without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geoipGeoipBRead-onlyIdempotent
IP geolocation: country, region, city, ISP, ASN, proxy/hosting flags.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context about the returned data fields, including proxy/hosting flags, but does not disclose rate limits, data freshness, accuracy, or input constraints. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that names the operation and then lists the key result categories. Every word adds value, with no filler or unnecessary 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 single-parameter read-only lookup with an output schema and safety annotations, the description covers the core purpose. It is slightly incomplete because it omits input format expectations and does not help route between IP-related siblings.
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 only defines 'ip' as a string with no description, and schema description coverage is 0%. The phrase 'IP geolocation' implies the parameter is the IP address to look up, but the description does not add format requirements, accepted address types, or validation details.
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 tool as IP geolocation and lists the output categories (country, region, city, ISP, ASN, proxy/hosting flags). It is easy to understand, though it lacks a direct verb and does not explicitly distinguish itself from IP-related siblings like whois_ip or bgp_ip.
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 about when to use this tool versus alternatives such as whois_ip, bgp_ip, or shodan_internetdb. The field list implies a geolocation use case, but the description provides no explicit context, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_commit_emailsGithub Commit EmailsBRead-onlyIdempotent
Extract email addresses from a user's public GitHub events.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'public' and 'events' scoping, which is useful, but it does not explain behavior beyond that, such as reliance on commit event payloads or limitations of public event data.
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, front-loaded sentence with no filler or redundant repetition of the tool name. It conveys the essential purpose efficiently.
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 one-parameter, read-only tool with an output schema and rich annotations, the description is mostly adequate. However, it lacks usage guidance and a caveat that 'events' likely refers to commit-bearing events, leaving some ambiguity for an agent.
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 should compensate, but it does not meaningfully explain the username parameter beyond the schema's property name. It only implies 'a user's' events without specifying format, GitHub-specific requirements, or examples.
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 uses a specific verb ('Extract') and names both the resource ('email addresses') and the source ('a user's public GitHub events'). This clearly differentiates it from siblings like github_user_info, github_user_repos, and github_repo_commits, which do not extract emails from user events.
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 no guidance on when to use this tool versus alternatives. While the sibling list includes several relevant tools (email_permutations, domain_email_search, github_user_info), the description gives no exclusions, conditions, or routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repo_commitsGithub Repo CommitsBRead-onlyIdempotent
Extract committer emails from a repo's recent commit history.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | ||
| owner | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds only the 'recent commit history' scoping, which is useful but vague; it does not mention limits, auth requirements, or what 'recent' means. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight, front-loaded sentence with no filler. It communicates the core purpose immediately and is an appropriately sized definition for a simple read-only 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?
The tool is simple and has annotations plus an output schema to cover safety and return structure. However, 'recent' is ambiguous, and there is no guidance about usage context or edge cases, leaving minor but real gaps for correct invocation.
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, but it does not explicitly explain 'owner' or 'repo' beyond implying a repository context. The parameter names are conventional, yet the description adds little semantic value for an agent needing to know what values these fields expect.
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 verb and resource ('Extract committer emails from a repo's recent commit history'), so an agent can tell what the tool does. However, it does not differentiate from the similarly named sibling 'github_commit_emails', leaving some ambiguity about which one to pick.
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?
There is no guidance on when to use this tool versus alternatives such as 'github_commit_emails' or 'github_user_repos'. The description gives no context, prerequisites, or exclusions, so an agent must guess which tool fits the task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_user_infoGithub User InfoARead-onlyIdempotent
Get public GitHub profile metadata for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 the metadata is 'public', implying no authentication is needed, which is useful. No additional behavioral traits (e.g., rate limits, response shape) are disclosed, but the annotations carry the main burden.
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 sentence that is front-loaded with the action verb and resource. Zero filler words; every word earns its place. Ideal conciseness.
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 simplicity (one param, annotations covering safety) and the presence of an output schema (not shown), the description is nearly complete. It lacks any mention of edge cases or limitations, but for a straightforward public GitHub profile lookup, 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?
The schema has only one parameter (username) with 0% description coverage. The description says 'for a user' but doesn't explicitly state that the 'username' parameter is the GitHub username or provide format details. Since the parameter is self-explanatory and simple, this is adequate but does not add meaningful semantics 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 verb ('Get'), resource ('public GitHub profile metadata'), and target ('for a user'). This clearly distinguishes it from siblings like github_user_repos (which returns repositories) and github_commit_emails (emails from commits). An agent can immediately understand the tool's function.
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 does not explicitly state when to use this tool versus alternatives like github_user_repos or github_commit_emails. However, the tool name and simple description make its purpose self-evident, and the sibling context suggests it's the primary profile-metadata lookup. Lacks explicit exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_user_reposGithub User ReposARead-onlyIdempotent
List public GitHub repositories for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds the critical constraint that only public repositories are returned, which is a behavioral detail not captured in annotations. However, it omits any mention of rate limits, pagination, or behavior for non-existent users. With annotations present, the description contributes some value but not rich behavioral context.
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, front-loaded sentence with no filler. Every word earns its place, and it immediately conveys the core operation without redundancy.
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 (one parameter), the presence of an output schema, and annotations that cover safety and openness, the description is largely sufficient. It clearly states the action and the scope (public repos). The only minor gap is the lack of explicit mention of pagination or rate limits, but these are likely handled by the output schema and are not essential for basic invocation.
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 zero description coverage for the username parameter. The description partially compensates by indicating that the parameter represents a GitHub user, but it does not clarify formatting (e.g., exact username format), case sensitivity, or whether it expects a handle vs. an ID. It adds minimal meaning beyond the schema, so a baseline score of 3 is appropriate given the low schema coverage.
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 action (List), the resource (public GitHub repositories), and the target (a user). It distinguishes from siblings like github_user_info (which would return user profile details) and github_repo_commits (which lists commits). The verb+resource combination is unambiguous and specific.
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 no guidance on when to use this tool versus alternatives. It does not mention scenarios, prerequisites, or contrasts with sibling tools. An agent would have no context for selecting this over github_user_info or other repo-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gravatar_lookupGravatar LookupBRead-onlyIdempotent
Look up the public Gravatar profile for an email address.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only the 'public' qualifier and does not disclose behaviors such as absence handling or rate limits, but no contradiction exists.
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?
Eleven words in one sentence front-load the action, resource, and input. There is no filler or redundant explanation.
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 single-required-parameter lookup with rich annotations and an output schema, the description is nearly complete: it defines the resource and input. The main missing element is usage routing relative to sibling tools, but the tool's low complexity limits the impact.
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 email parameter is self-explanatory, and the description confirms it is the 'email address' whose profile is looked up. However, schema description coverage is 0% and the description adds no format, normalization, or edge-case information; this is minimally adequate for one obvious string parameter.
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 ('look up'), resource ('public Gravatar profile'), and input ('email address'), so the core action is unambiguous. It does not explicitly compare itself with sibling identity/lookup tools, though the Gravatar resource is unique among the sibling list.
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 about when to choose Gravatar lookup over siblings such as keybase_lookup, check_email_breaches, or domain_email_search, and no exclusion conditions are stated. The agent is left to infer use cases from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hackertarget_hostsearchHackertarget HostsearchBRead-onlyIdempotent
Find hosts/subdomains with resolved IPs via HackerTarget.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false). The description adds no extra behavioral context such as rate limits, API key requirements, or external service dependency, which would have been valuable given the 'via HackerTarget' reference. No contradiction exists.
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 with zero filler. It communicates the core function and source efficiently, and every word contributes value.
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?
With one parameter, an output schema, and strong safety annotations, the description is minimally adequate. However, gaps remain: no domain format guidance and no mention of limitations or failure modes (e.g., rate limits from HackerTarget). Given the low complexity, a score of 3 reflects that it works but leaves important usage details to the agent.
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 for the undocumented 'domain' parameter. It does not clarify the expected format (bare domain vs. subdomain, protocol, etc.), leaving the agent to guess. The word 'hosts/subdomains' implies the domain is the target, but this is insufficient for a parameter with no schema description.
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 ('Find hosts/subdomains with resolved IPs') and identifies the source ('via HackerTarget'). This distinguishes it from siblings like crtsh_search (certificate transparency) and dns_lookup_all (which likely returns raw DNS records) by source and output, though it does not explicitly name alternatives.
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 provided about when to use this tool versus alternatives. The description only states what the tool does, leaving the agent to infer that it is for subdomain enumeration. It does not mention exclusions, prerequisites, or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keybase_lookupKeybase LookupARead-onlyIdempotent
Look up a Keybase user and their linked social accounts / public keys.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 the result scope (linked social accounts and public keys) but does not disclose any additional behavioral details such as error cases, rate limits, or prerequisites.
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 concise sentence front-loads the verb, resource, and expected outputs. There is no filler, repetition of the title, or unnecessary detail.
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 a simple read-only lookup with one parameter and an output schema, so the description is largely sufficient. It only lacks explicit parameter format guidance and alternative routing, which are minor gaps given the low complexity and existing annotations.
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 for the undocumented username parameter. It only restates that the lookup is for a 'Keybase user', adding little beyond the schema's property name. No format, example, or constraint 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 states a specific verb ('Look up'), a specific resource ('a Keybase user'), and the data scope ('linked social accounts / public keys'). It clearly identifies this as a Keybase-specific OSINT tool, distinguishable from the many DNS/IP/email siblings in the tool list.
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 usage context is implied: use this when you need Keybase account linking information. However, the description provides no explicit guidance about when not to use it or which sibling tools might be alternatives, such as username_enumerate or gravatar_lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_domain_reconOsint Domain ReconARead-onlyIdempotent
All-in-one free reconnaissance for a domain (DNS, WHOIS, crt.sh, hosts, email security, geoip).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds that it is free and lists the data categories, but it does not disclose other behavioral aspects like rate limits, pagination, or potential failure modes. With annotations covering safety, the added context is acceptable but minimal.
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, dense sentence that front-loads the purpose and enumerates the scope. No filler or redundant information; 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 has an output schema (per context signal), so return values are documented elsewhere. Annotations cover the safety profile. The description lists the data categories and indicates it is free. It does not mention that it aggregates multiple services or potential latency, but for a read-only recon tool with an output schema, this is sufficient.
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 'domain' parameter. The description mentions 'for a domain,' indicating the input, but provides no format guidance (e.g., whether to include scheme or subdomain). Since it's a single, obvious parameter, this is minimally adequate but could benefit from a note on expected format.
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 performs reconnaissance on a domain and enumerates the specific data sources (DNS, WHOIS, crt.sh, hosts, email security, geoip). This distinguishes it from the many sibling tools that each focus on a single source, making the 'all-in-one' aggregation 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 phrase 'All-in-one' implies use for a broad overview rather than a specific lookup, but it never explicitly says when to prefer this over a dedicated sibling tool, nor does it name alternatives or exclusions. The usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_ip_reconOsint Ip ReconARead-onlyIdempotent
All-in-one free reconnaissance for an IP (geo, rdap, bgp, shodan internetdb).
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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, so the safety profile is fully covered. The description adds the concrete data sources and the fact that it's 'free', which is useful context beyond annotations. It doesn't disclose potential rate limits or delays from aggregating multiple services, but for a read-only tool with strong annotation coverage, this is a minor gap.
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?
One sentence, front-loaded with 'All-in-one free reconnaissance', and the parenthetical list of sources is compact and efficient. No filler or redundant phrasingāevery word adds value.
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 aggregates four distinct data sources and the description names them, giving the agent a clear picture of its scope. An output schema exists, so return values don't need explanation. It doesn't mention potential failures (e.g., Shodan internetdb might have no data for a given IP), but for a read-only recon tool this is acceptable given the annotation coverage.
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 has only one required parameter 'ip' with zero description coverage (0%). The description does not specify expected format (e.g., IPv4/IPv6) or validation rules, relying on the tool name to imply an IP address. Since the parameter is self-explanatory from the tool name and there is only one, the gap is small, but the description still doesn't compensate for the schema's lack of detail.
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?
States a clear verb ('reconnaissance') and resource ('an IP') and enumerates the specific data sources (geo, rdap, bgp, shodan internetdb), which immediately distinguishes it from sibling tools like geoip, whois_ip, bgp_ip, and shodan_internetdb. The 'all-in-one' framing makes its role obvious without needing to inspect other schemas.
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 use for comprehensive IP recon ('all-in-one'), but gives no explicit guidance on when to choose it over the individual sibling tools (e.g., geoip for geo-only, bgp_ip for BGP-only). It also doesn't mention any exclusions or when the combined tool might be overkill. The guidance is implied rather than explicit, which is adequate but not exceptional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_list_sourcesOsint List SourcesA
List all data sources, which are free, and which API keys are configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it accurately conveys a read-only listing operation. It also discloses that the tool surfaces API-key configuration status, which is useful context. It doesn't explicitly say whether actual key values are shown, but the phrasing implies configured status, not secrets.
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 with no wasted words. The primary action comes first and every clause conveys useful information.
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 zero-parameter utility tool with an output schema present, the description is complete enough for an agent to understand what the tool does and what to expect. It gives the essential outcome without needing extra explanation.
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 tool has no parameters, so the schema already fully covers this dimension. The description adds value by clarifying what the returned information will include: data sources, free status, and API-key configuration.
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 uses a specific verb ('List') with a specific resource ('all data sources') and additionally tells the agent what aspects are reported: free status and API-key configuration. This clearly distinguishes it from the many lookup-oriented sibling tools such as dns_lookup and whois_domain.
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 makes the tool's role clear as a meta-level enumeration tool rather than a data lookup tool. It doesn't explicitly state exclusions or alternatives, but no sibling tool overlaps with its purpose of listing sources and API-key configuration status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
otx_indicatorOtx IndicatorBRead-onlyIdempotent
Enrich an indicator (IP/domain/URL/hash) via AlienVault OTX.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | general | |
| indicator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safe read-only nature is covered. The description adds no extra behavioral context such as authentication requirements, rate limits, or how it handles invalid indicators, but it does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It compactly conveys the action, the resource category, and the data source without wasting words.
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 an OSINT enrichment tool among many siblings, the description is missing usage context and the meaning of the 'section' parameter. While the output schema exists and annotations cover safety, the agent still lacks enough information to confidently choose this tool or populate optional parameters correctly.
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 only clarifies the indicator parameter through the listed types. The 'section' parameter is completely unexplained, leaving the agent without enough information to know what values are valid or how the default behaves.
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 uses a specific verb, 'Enrich', and clearly identifies the resource as an indicator with accepted types (IP/domain/URL/hash). It is distinct from the sibling otx_search_pulses because it focuses on indicators rather than pulses, though it does not explicitly call out that distinction.
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 provided about when to use this tool versus the many sibling OSINT tools. There is no mention of exclusions, alternatives, or conditions under which OTX enrichment is preferable to dns_lookup, shodan_internetdb, or whois.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
otx_search_pulsesOtx Search PulsesBRead-onlyIdempotent
Fetch recent AlienVault OTX threat pulses (needs OTX_API_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds the useful operational constraint that an OTX_API_KEY is required, which goes beyond the structured metadata. It does not cover rate limits or error behavior, but for a simple read-only fetch this is reasonable.
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 front-loaded sentence with no filler. The action and resource come first, and the API key requirement is placed in a concise parenthetical.
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 with an output schema, the description covers the core purpose and an important auth requirement. However, it does not clarify how the API key is supplied or what 'recent' means, leaving some ambiguity for an agent.
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 does not mention the 'limit' parameter at all. The parameter name and default are self-explanatory, but the description provides no additional semantics, so it does not compensate for the missing schema documentation.
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 verb and resource: 'Fetch recent AlienVault OTX threat pulses.' It is clear about what the tool does, though it does not explicitly differentiate itself from the sibling tool otx_indicator, so it falls just short of a 5.
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 only contextual guidance is the parenthetical 'needs OTX_API_KEY,' which is a prerequisite, not a usage condition. There is no statement about when to prefer this tool over other OSINT/OTX alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_userReddit UserARead-onlyIdempotent
Get public Reddit profile metadata (account age, karma, mod status).
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint, idempotentHint, non-destructive), so the bar is lowered. The description adds useful context by scoping to 'public' data only, but discloses nothing about rate limits, handling of non-existent/usernames with wrong case, or response behavior. No contradiction with annotations.
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 ten-word sentence that front-loads verb and resource, then adds scoping ('public') and concrete field examples. Every word earns its place with zero filler or redundancy.
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 single-parameter, read-only tool with rich annotations (read-only, idempotent, non-destructive) and an existing output schema, the description covers the essentials: what is fetched, the data scope, and example fields. It would be more complete with a routing note toward reddit_user_posts, but the tool's low complexity keeps this gap minor.
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 does so only indirectly: the tool name, title, and description make the 'username' parameter's purpose self-evident as the Reddit account whose profile metadata is fetched, but no explicit parameter-level guidance is added.
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 verb+resource ('Get public Reddit profile metadata') and enumerates the specific fields returned (account age, karma, mod status). This clearly differentiates it from close siblings like reddit_user_posts (posts vs. profile metadata) and other user-lookup tools, so an agent can select it correctly without opening the schema.
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 use this tool versus alternatives. It does not mention that reddit_user_posts should be used for post history, nor state any conditions or exclusions. Usage context is only implied by the name/description, not explicitly conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reddit_user_postsReddit User PostsBRead-onlyIdempotent
List a Reddit user's recent public posts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint). The description adds only scope ('recent', 'public') and does not disclose behavioral aspects such as pagination, rate limits, or error conditions. No contradiction with annotations, but minimal added value beyond the structured hints.
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, front-loaded sentence with zero waste. It immediately states the action and object, and every word contributes to clarity.
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 simplicity, the presence of an output schema, and annotations covering safety, the description is adequate but not complete. It misses parameter explanations and any guidance on response limits or edge cases, though these are relatively minor for a basic list operation.
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% property description coverage, and the description does not explain the 'username' or 'limit' parameters. The tool is simple and these parameters are self-evident, but the description adds no semantic meaning beyond the schema's basic type/default information.
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 a specific verb ('List') and resource ('a Reddit user's recent public posts'). It distinguishes from the sibling 'reddit_user' by specifying posts rather than profile information. The scope ('recent', 'public') adds precision, making the purpose unambiguous.
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 for fetching posts but does not explicitly contrast with alternatives like 'reddit_user' or state when not to use it. There is no mention of when to prefer this tool over others, leaving usage context to inference from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_darkwebSearch DarkwebARead-onlyIdempotent
Search the dark web via Ahmia.fi (.onion index). Metadata only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, open-world, idempotent, and non-destructive, and the description does not contradict them. The description adds meaningful behavioral context beyond annotations by naming the exact backend (Ahmia.fi) and clarifying that only metadata is returned.
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 with no filler. It leads with the action and resource, then adds the important metadata-only limitation, earning its place with zero redundancy.
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 read-only search tool with rich annotations and an output schema, the description is sufficient. It states what is searched, where it is searched, and the nature of the results; no critical calling context 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%, and the description does not explain 'query' or 'max_results' at all. The meanings must be inferred from parameter names and the schema default, so the description fails to compensate for the missing schema documentation.
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?
States a specific verb ('Search') and resource ('dark web via Ahmia.fi (.onion index)'), and adds a precise scope qualifier ('Metadata only'). This clearly differentiates it from content-scraping or deep-web search tools and from the other OSINT sibling lookups.
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?
Gives a clear use case: searching the dark web through a named index. It does not explicitly list alternatives or exclusion conditions, but the context is strong enough that an agent would know when to select it among the OSINT siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shodan_internetdbShodan InternetdbBRead-onlyIdempotent
Free Shodan InternetDB lookup: open ports, hostnames, CVEs, tags.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 covered. The description adds the useful fact that results include ports, hostnames, CVEs, and tags, but it does not disclose potential limitations, rate limits, or input scope beyond that.
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 leads with the core purpose and immediately lists the key distinguishing data categories. There is no redundant or filler 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 simple single-parameter tool with a known output schema, the description covers the visible outputs but omits usage guidance and parameter details. It is minimally adequate but leaves selection and input-format questions unanswered.
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 does not explain the required 'ip' parameter's format, accepted address types, or validation rules. It only implies an IP lookup through the tool name and service context, which is not sufficient to compensate for the missing schema documentation.
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 ('lookup') on a specific resource ('Shodan InternetDB') and enumerates the distinct output types: open ports, hostnames, CVEs, and tags. This clearly differentiates it from sibling recon tools like whois_ip, bgp_ip, or hackertarget_hostsearch, which are not Shodan InternetDB lookups.
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 gives no guidance on when to prefer this tool over alternatives. It does not mention suitable use cases, exclusions, or sibling tools, so an agent would have to infer selection criteria from the tool name and output list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
username_enumerateUsername EnumerateARead-onlyIdempotent
Probe ~20 major platforms to see if a username is taken.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false) already cover the safety profile. The description adds minimal behavior context beyond 'probe' (network activity), but doesn't disclose potential timeouts, rate limits, or what constitutes 'taken' (existence vs. availability). It doesn't contradict annotations, but adds little beyond them.
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?
One sentence with no filler. The action and scope are front-loaded ('Probe ~20 major platforms'), making it immediately clear what the tool does. 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 has an output schema (though not shown) and annotations cover safety. The description is short but adequate for a simple one-parameter tool. However, it could mention that it queries multiple platforms and might take longer, or that it returns a simple yes/no per platform. Given the simplicity, it's not seriously incomplete, but a bit more context about the multi-platform behavior would help.
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. The single parameter 'username' is self-explanatory, and the description implicitly defines it as the username to probe across platforms. It doesn't add format constraints or clarify edge cases (e.g., case sensitivity), but the name and type string make it understandable.
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 uses a specific verb ('probe') and a clear resource ('~20 major platforms') to check if a username is taken. It clearly distinguishes itself from sibling tools like github_user_info or reddit_user, which target a single platform.
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?
There is no guidance on when to use this tool versus the many single-platform sibling tools. It doesn't mention alternatives, conditions, or exclusions. The description implies a broad multi-platform check but doesn't explicitly instruct the agent on when to choose it over a specific platform lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wayback_urlsWayback UrlsARead-onlyIdempotent
Discover archived URLs for a domain via the Wayback Machine CDX API.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds only that it uses the Wayback Machine CDX API, which implies an external service, but does not disclose rate limits, pagination behavior, or response characteristics. This is adequate but minimal given 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the core action and resource. It contains no filler or redundant repetition of the tool name, earning its place entirely.
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, has only two parameters, an output schema, and annotations covering safety. The description provides enough to understand the operation and call the tool with a domain. Minor gaps remain around limit semantics and domain formatting, but these are not blocking for a tool of this complexity.
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 does not compensate meaningfully. 'Domain' appears in prose, but 'limit' is never mentioned or explained, nor is the expected domain format (e.g., with or without scheme). The schema provides types and a default, but the description adds almost no semantic value beyond what the schema already shows.
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 a specific verb ('Discover') and resource ('archived URLs for a domain') while identifying the exact data source ('Wayback Machine CDX API'). This distinguishes it from the many sibling OSINT tools, which focus on DNS, certificates, WHOIS, or user enumeration.
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 historical or archived URLs for a domain are needed. However, it provides no explicit exclusions or comparisons to alternatives, leaving the agent to infer the appropriate context from the tool's purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whois_domainWhois DomainBRead-onlyIdempotent
Domain registration data (registrar, dates, nameservers) via RDAP.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful context by noting the data comes via RDAP and naming the returned data types, but it doesn't disclose rate limits, RDAP edge cases, or error behavior. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler, and the main data categories are listed in parentheses. It could be improved with an explicit verb and a more front-loaded structure, but for a simple lookup tool the size is appropriate.
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?
With rich annotations, a single obvious parameter, and an output schema present, the description is largely sufficient for tool selection and invocation. It conveys the data categories and protocol, and the safety profile is already covered by annotations. The primary missing element is parameter formatting, which is already captured under parameter semantics.
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 only parameter 'domain' is a bare string with no format guidance. The description never states whether the value should be a bare registrable domain, include a subdomain, or use punycode, so an agent may pass an invalid value. Because the description must compensate for the low schema coverage, this is a meaningful 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 identifies the resource (domain registration data) and the mechanism (RDAP), and lists specific data categories: registrar, dates, and nameservers. It doesn't use an explicit verb like 'retrieve', but the intent is unambiguous. It is also distinguishable from sibling whois_ip because it focuses on domains rather than IP addresses.
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 is for domain registration metadata lookups, which is a clear enough context. However, it does not explicitly mention alternatives such as whois_ip or dns_lookup, and it does not state when not to use this tool. The sibling list provides context, but the description itself offers no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whois_ipWhois IpARead-onlyIdempotent
IP network allocation data via RDAP (network name, CIDR, country).
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, safe, and open-world, so the description does not need to repeat that. It adds useful behavioral context by naming RDAP and the exact data fields returned, but it does not disclose behavior for invalid IPs, rate limits, or partial results. Since annotations cover the safety profile, the added value is modest but sufficient.
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 conveys the data source and key output fields with no redundant wording. It is front-loaded with the core purpose and uses parenthetical detail efficiently.
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 with one parameter, rich annotations, and an output schema, so the description does not need to explain return values. The only minor gap is the lack of detail about acceptable IP formats, but the schema and annotations cover most operational context.
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 one 'ip' string parameter with 0% coverage, and the description does not clarify whether IPv4, IPv6, or CIDR blocks are accepted. The parameter name itself is mostly self-explanatory, and the description's mention of IP network allocation data implies an IP address query, but explicit format guidance would strengthen it.
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 (IP network allocation data) and the data source (RDAP), listing concrete returned fields such as network name, CIDR, and country. It differentiates the tool from siblings like whois_domain and geoip, though it lacks an explicit verb like 'lookup' or 'retrieve'.
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 this tool is used when IP network allocation details are needed, and the RDAP mention helps distinguish it from geolocation or BGP tools. However, it provides no explicit guidance on when not to use it or which sibling alternative to prefer, leaving the agent to infer from tool names.
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.
32 tool updates
v0.1.0- First observed
bgp_asn - First observed
bgp_ip - First observed
check_email_breaches - First observed
check_password_breach - First observed
cisa_kev_catalog - First observed
crtsh_search - First observed
dns_lookup - First observed
dns_lookup_all - First observed
domain_email_search - First observed
email_permutations - First observed
email_security - First observed
geoip - First observed
github_commit_emails - First observed
github_repo_commits - First observed
github_user_info - First observed
github_user_repos - First observed
gravatar_lookup - First observed
hackertarget_hostsearch - First observed
keybase_lookup - First observed
osint_domain_recon - First observed
osint_ip_recon - First observed
osint_list_sources - First observed
otx_indicator - First observed
otx_search_pulses - First observed
reddit_user - First observed
reddit_user_posts - First observed
search_darkweb - First observed
shodan_internetdb - First observed
username_enumerate - First observed
wayback_urls - First observed
whois_domain - First observed
whois_ip
TDQS
Scored across 32 tools
Most tools map to a distinct source or entity (WHOIS, BGP, GitHub, Reddit, OTX), so an agent can usually choose correctly. However, dns_lookup and dns_lookup_all appear near-identical, crtsh_search and hackertarget_hostsearch both target subdomains, and the all-in-one recon tools duplicate many individual lookups.
The set mostly follows a clean snake_case source_or_object convention (github_user_repos, check_email_breaches, otx_indicator). Minor inconsistencies such as dns_lookup vs dns_lookup_all, hackertarget_hostsearch, and osint_list_sources are easy to learn but break the pattern slightly.
At 32 tools, the surface is heavy and likely to increase prompt and selection cost for an agent; while each tool represents a plausible OSINT data source, the count exceeds the range where an agent can quickly scan and disambiguate options. Consolidating the recon aggregators or reducing similar lookups would help.
The server covers a coherent OSINT workflow: DNS/WHOIS/subdomain enumeration, IP/BGP/geo enrichment, social and username lookup, breach checking, and threat-intel feeds. Some broader OSINT categories such as phone numbers, image search, or mainstream social platforms beyond GitHub/Reddit/Keybase are absent, but the core domain is well covered.
Maintenance
Related MCP Connectors
Free public MCP for AI agents ā 193 tools, 44 workflows. No API key.
Hyperion ā MCP tool marketplace for AI agents: web, OSINT, security, research via one key.
Enrich, search, assess, and manage threat intelligence through 80+ typed MCP tools.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
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
- AlicenseNot gradedqualityDmaintenanceMCP server that exposes 108+ omega-cli OSINT tools for reconnaissance, web analysis, threat intelligence, and reporting, enabling AI assistants to perform comprehensive open-source intelligence tasks.MIT
- AlicenseNot gradedqualityDmaintenanceProvides 26 free OSINT tools as MCP tools for AI agents, enabling automated OSINT investigations directly from conversations.43 PyPIMIT
- FlicenseNot gradedqualityDmaintenanceProvides 95 free tools and 22 workflows for AI agents via MCP, no API key required, covering versatile functionalities.2-