mcp-shodan
The mcp-shodan server enables querying and analysis of Shodan's network intelligence and security services:
Perform IP reconnaissance to retrieve geolocation, open ports, services, SSL certificates, hostnames, and cloud provider details
Search Shodan's database for internet-connected devices with advanced filters and result limiting
Query detailed vulnerability information from Shodan's CVEDB including CVSS scores and EPSS rankings
Resolve domain names to IP addresses (supports batch queries)
Perform reverse DNS lookups to find hostnames associated with IP addresses (supports batch queries)
Search for Common Platform Enumeration (CPE) entries by product name with pagination options
Find vulnerabilities affecting specific products or CPEs with filtering by KEV status, sorting by EPSS, date ranges, and pagination
Requires Node.js v18 or later as a runtime environment for the MCP server.
Click on "Install 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., "@mcp-shodanlook up CVE-2021-44228 details"
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.
Shodan MCP Server
A Model Context Protocol (MCP) server for querying the Shodan API and Shodan CVEDB. This server provides comprehensive access to Shodan's network intelligence and security services, including IP reconnaissance, DNS operations, vulnerability tracking, and device discovery. All tools provide structured, formatted output for easy analysis and integration.
Quick Start (Recommended)
Installing via Claude Code
claude mcp add --transport stdio --env SHODAN_API_KEY=your-shodan-api-key shodan -- npx -y @burtthecoder/mcp-shodanInstalling via Codex CLI
codex mcp add shodan --env SHODAN_API_KEY=your-shodan-api-key -- npx -y @burtthecoder/mcp-shodanInstalling via Gemini CLI
gemini mcp add -e SHODAN_API_KEY=your-shodan-api-key shodan npx -y @burtthecoder/mcp-shodanInstalling via Smithery
To install Shodan Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @burtthecoder/mcp-shodan --client claudeInstalling Manually
Install the server globally via npm:
npm install -g @burtthecoder/mcp-shodanAdd to your Claude Desktop configuration file:
{
"mcpServers": {
"shodan": {
"command": "mcp-shodan",
"env": {
"SHODAN_API_KEY": "your-shodan-api-key"
}
}
}
}Configuration file location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Restart Claude Desktop
Related MCP server: Shodan-MCP-Server
Alternative Setup (From Source)
If you prefer to run from source or need to modify the code:
Clone and build:
git clone https://github.com/w0h1v/mcp-shodan.git
cd mcp-shodan
npm install
npm run buildAdd to your Claude Desktop configuration:
{
"mcpServers": {
"shodan": {
"command": "node",
"args": ["/absolute/path/to/mcp-shodan/build/index.js"],
"env": {
"SHODAN_API_KEY": "your-shodan-api-key"
}
}
}
}Features
Network Reconnaissance: Query detailed information about IP addresses, including open ports, services, and vulnerabilities
DNS Operations: Forward and reverse DNS lookups for domains and IP addresses
Vulnerability Intelligence: Access to Shodan's CVEDB for detailed vulnerability information, CPE lookups, and product-specific CVE tracking
Device Discovery: Search Shodan's database of internet-connected devices with advanced filtering
Tools
1. IP Lookup Tool
Name:
ip_lookupDescription: Retrieve comprehensive information about an IP address, including geolocation, open ports, running services, SSL certificates, hostnames, and cloud provider details if available
Parameters:
ip(required): IP address to lookup
Returns:
IP Information (address, organization, ISP, ASN)
Location (country, city, coordinates)
Services (ports, protocols, banners)
SSL/TLS details per service (certificate subject/issuer CN, serial, SHA-256 fingerprint, validity, TLS versions, cipher, JARM, JA3S) — certificate SAN hostnames appear in the top-level Hostnames/Domains
Cloud Provider details (if available)
Associated hostnames and domains
Tags
2. Shodan Search Tool
Name:
shodan_searchDescription: Search Shodan's database of internet-connected devices
Parameters:
query(required): Shodan search querymax_results(optional, default: 10): Number of results to return
Returns:
Search summary with total results
Country-based distribution statistics
Detailed device information including:
Basic information (IP, organization, ISP)
Location data
Service details
Web server information
Associated hostnames and domains
3. CVE Lookup Tool
Name:
cve_lookupDescription: Query detailed vulnerability information from Shodan's CVEDB
Parameters:
cve(required): CVE identifier in format CVE-YYYY-NNNNN (e.g., CVE-2021-44228)
Returns:
Basic Information (ID, published date, summary)
Severity Scores:
CVSS v2 and v3 with severity levels
EPSS probability and ranking
Impact Assessment:
KEV status
Proposed mitigations
Ransomware associations
Affected products (CPEs)
References
4. DNS Lookup Tool
Name:
dns_lookupDescription: Resolve domain names to IP addresses using Shodan's DNS service
Parameters:
hostnames(required): Array of hostnames to resolve
Returns:
DNS resolutions mapping hostnames to IPs
Summary of total lookups and queried hostnames
5. Reverse DNS Lookup Tool
Name:
reverse_dns_lookupDescription: Perform reverse DNS lookups to find hostnames associated with IP addresses
Parameters:
ips(required): Array of IP addresses to lookup
Returns:
Reverse DNS resolutions mapping IPs to hostnames
Summary of total lookups and results
6. CPE Lookup Tool
Name:
cpe_lookupDescription: Search for Common Platform Enumeration (CPE) entries by product name
Parameters:
product(required): Name of the product to search forcount(optional, default: false): If true, returns only the count of matching CPEsskip(optional, default: 0): Number of CPEs to skip (for pagination)limit(optional, default: 1000): Maximum number of CPEs to return
Returns:
When count is true: Total number of matching CPEs
When count is false: List of CPEs with pagination details
7. CVEs by Product Tool
Name:
cves_by_productDescription: Search for vulnerabilities affecting specific products or CPEs
Parameters:
cpe23(optional): CPE 2.3 identifier (format: cpe:2.3:part:vendor:product:version)product(optional): Name of the product to search for CVEscount(optional, default: false): If true, returns only the count of matching CVEsis_kev(optional, default: false): If true, returns only CVEs with KEV flag setsort_by_epss(optional, default: false): If true, sorts CVEs by EPSS scoreskip(optional, default: 0): Number of CVEs to skip (for pagination)limit(optional, default: 1000): Maximum number of CVEs to returnstart_date(optional): Start date for filtering CVEs (format: YYYY-MM-DDTHH:MM:SS)end_date(optional): End date for filtering CVEs (format: YYYY-MM-DDTHH:MM:SS)
Notes:
Must provide either cpe23 or product, but not both
Date filtering uses published time of CVEs
Returns:
Query information
Results summary with pagination details
Detailed vulnerability information including:
Basic information
Severity scores
Impact assessments
References
Requirements
Node.js (v20 or later)
A valid Shodan API Key
Troubleshooting
API Key Issues
If you see API key related errors (e.g., "Request failed with status code 401"):
Verify your API key:
Must be a valid Shodan API key from your account settings
Ensure the key has sufficient credits/permissions for the operation
Check for extra spaces or quotes around the key in the configuration
Verify the key is correctly set in the SHODAN_API_KEY environment variable
Common Error Codes:
401 Unauthorized: Invalid API key or missing authentication
402 Payment Required: Out of query credits
429 Too Many Requests: Rate limit exceeded
Configuration Steps: a. Get your API key from Shodan Account b. Add it to your configuration file:
{ "mcpServers": { "shodan": { "command": "mcp-shodan", "env": { "SHODAN_API_KEY": "your-actual-api-key-here" } } } }c. Save the config file d. Restart Claude Desktop
Testing Your Key:
Try a simple query first (e.g., dns_lookup for "google.com")
Check your Shodan account dashboard for credit status
Verify the key works directly with curl:
curl "https://api.shodan.io/dns/resolve?hostnames=google.com&key=your-api-key"
Module Loading Issues
If you see module loading errors:
For global installation: Use the simple configuration shown in Quick Start
For source installation: Ensure you're using Node.js v18 or later
Development
Build the project:
npm install
npm run buildTest interactively with FastMCP's built-in dev tool:
npx fastmcp dev build/index.jsError Handling
The server includes comprehensive error handling for:
Invalid API keys
Rate limiting
Network errors
Invalid input parameters
Invalid CVE formats
Invalid CPE lookup parameters
Invalid date formats
Mutually exclusive parameter validation
Version History
v1.0.30: Fixed
reverse_dns_lookupcrash on IPs without PTR records, added SSL/TLS certificate details toip_lookupoutput, pinned axios below 1.14.1 — first npm release since v1.0.22v1.0.22: Published to the official MCP Registry — added
server.jsonmanifest, CLI install support for Claude Code, Codex, and Gemini CLIv1.1.0: Migrated from raw
@modelcontextprotocol/sdkto FastMCP — modular tool files, automatic schema validation, simplified error handlingv1.0.12: Added reverse DNS lookup and improved output formatting
v1.0.7: Added CVEs by Product search functionality and renamed vulnerabilities tool to cve_lookup
v1.0.6: Added CVEDB integration for enhanced CVE lookups and CPE search functionality
v1.0.0: Initial release with core functionality
Contributing
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
7 toolscpe_lookupARead-only
Search for Common Platform Enumeration (CPE) entries by product name in Shodan's CVEDB. Supports pagination and can return either full CPE details or just the total count. Useful for identifying specific versions and configurations of software and hardware.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of CPEs to skip (for pagination). | |
| count | No | If true, returns only the count of matching CPEs. | |
| limit | No | Maximum number of CPEs to return (max 1000). | |
| product | Yes | The name of the product to search for CPEs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds pagination support and the option to return only a count. These are behavioral traits beyond what annotations provide, with 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 two sentences, front-loaded with the core purpose, followed by key capabilities. Every sentence earns its place with no 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 read-only lookup with fully documented parameters and no output schema, the description covers the main behavioral options (pagination, count mode) and a clear use case. It doesn't detail return format, but given the simplicity and annotation coverage, this is adequate.
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 100%, so all four parameters are documented in the schema. The description mentions pagination and count, but these are already covered in the schema descriptions, so it adds minimal semantic value beyond what is structured.
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 specific verb 'Search' and resource 'CPE entries' within 'Shodan's CVEDB'. It distinguishes from the sibling cves_by_product by focusing on CPEs rather than CVEs, and the name reinforces this.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'identifying specific versions and configurations of software and hardware.' However, it does not explicitly mention alternatives or exclusion criteria. The sibling cves_by_product likely covers CVEs, so the contrast 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.
cve_lookupARead-only
Query detailed vulnerability information from Shodan's CVEDB. Returns comprehensive CVE details including CVSS scores (v2/v3), EPSS probability and ranking, KEV status, proposed mitigations, ransomware associations, and affected products (CPEs).
| Name | Required | Description | Default |
|---|---|---|---|
| cve | Yes | The CVE identifier to query (format: CVE-YYYY-NNNNN). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, covering safety and openness. The description adds substantial behavioral context by listing the specific fields returned (CVSS v2/v3, EPSS, KEV status, mitigations, ransomware associations, CPEs), which goes beyond the annotations and helps the agent set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. The first sentence front-loads the core purpose, and the second enumerates the key return fields. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup tool with no output schema, the description adequately covers the return content by listing the major fields. It does not mention error handling or pagination, but given the simplicity and the openWorldHint annotation, the essential information is present. Minor gaps prevent a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the parameter (pattern and description), so schema coverage is 100%. The description does not add new parameter semantics beyond what the schema already provides; it merely reinforces that a CVE ID is needed. With full schema coverage, baseline 3 is appropriate.
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 ('Query') and resource ('detailed vulnerability information from Shodan's CVEDB'), and enumerates the concrete data returned (CVSS, EPSS, KEV, mitigations, ransomware, CPEs). This clearly distinguishes it from siblings like cves_by_product, which likely searches by product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a CVE identifier (the required parameter), but it does not explicitly mention when not to use it or recommend alternatives like cves_by_product for product-based queries. Guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cves_by_productARead-only
Search for vulnerabilities affecting specific products or CPEs. Supports filtering by KEV status, sorting by EPSS score, date ranges, and pagination. Can search by product name or CPE 2.3 identifier. Returns detailed vulnerability information including severity scores and impact assessments.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of CVEs to skip (for pagination). | |
| count | No | If true, returns only the count of matching CVEs. | |
| cpe23 | No | The CPE version 2.3 identifier (format: cpe:2.3:part:vendor:product:version). | |
| limit | No | Maximum number of CVEs to return (max 1000). | |
| is_kev | No | If true, returns only CVEs with the KEV flag set. | |
| product | No | The name of the product to search for CVEs. | |
| end_date | No | End date for filtering CVEs (format: YYYY-MM-DDTHH:MM:SS). | |
| start_date | No | Start date for filtering CVEs (format: YYYY-MM-DDTHH:MM:SS). | |
| sort_by_epss | No | If true, sorts CVEs by EPSS score in descending order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the tool is known to be a read-only, broad-scope operation. The description adds value by disclosing the return content ('detailed vulnerability information including severity scores and impact assessments') and mentions pagination support, which goes beyond the annotations. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the primary purpose front-loaded and the supporting capabilities summarized in the second sentence. It is not overly verbose, though the second sentence packs multiple features into one clause. No extraneous information is present, and the structure is logical.
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 complexity (9 parameters, all with schema descriptions) and the absence of an output schema, the description provides a sufficient overview, including the two search modes (product name vs. CPE identifier) and the return of severity/impact info. It could be more explicit about the relationship between product and cpe23 (e.g., whether they can be combined), but overall it covers the key usage 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?
Schema description coverage is 100%, so each parameter is already documented in the schema (e.g., skip, count, cpe23, limit, is_kev, product, dates, sort_by_epss). The description adds only a high-level summary (supports filtering by KEV, sorting by EPSS, date ranges, pagination) without adding new semantic detail. This aligns with the baseline of 3 for fully covered schemas.
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 ('Search') and a precise resource ('vulnerabilities affecting specific products or CPEs'), and lists the supported filtering/sorting capabilities. This clearly distinguishes it from sibling tools like cve_lookup (individual CVE lookup) and cpe_lookup (CPE details), making its 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 clearly conveys that this tool is for product/CPE-based vulnerability searches and mentions the search options (by product name or CPE 2.3). However, it does not explicitly state when to prefer this over sibling tools, such as using cve_lookup for a specific CVE or cpe_lookup for CPE metadata. The guidance is implied rather than explicit, so it earns a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_lookupARead-only
Resolve domain names to IP addresses using Shodan's DNS service. Supports batch resolution of multiple hostnames in a single query. Returns IP addresses mapped to their corresponding hostnames.
| Name | Required | Description | Default |
|---|---|---|---|
| hostnames | Yes | List of hostnames to resolve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, so the description isn't required to state safety. It adds the batch resolution feature and the mapping behavior, which is useful context. 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?
Three sentences, no waste, key purpose first.
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 no output schema, the description covers purpose, behavior, and return format adequately. No 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?
Schema covers the parameter fully (100%). Description adds the 'batch' nuance but essentially repeats the schema's 'list' semantics. Baseline 3 is appropriate.
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 (Resolve), resource (domain names to IP addresses), and names the service (Shodan's DNS). Implicitly differentiates from reverse_dns_lookup by direction.
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?
Implied usage: if you need to resolve domain names to IPs, this is the tool. But no explicit when-not-to-use or alternatives mentioned. Batch capability is mentioned but not as a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ip_lookupARead-only
Retrieve comprehensive information about an IP address, including geolocation, open ports, running services, SSL certificates, hostnames, and cloud provider details if available. Returns service banners and HTTP server information when present.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | The IP address to query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately reflects a read-only lookup operation and adds helpful qualifiers like 'if available' and 'when present.' It does not contradict the readOnlyHint annotation, though it omits potential error or rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, free of fluff, and front-loads the core purpose before listing specific return categories.
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 no output schema provided, the description usefully enumerates expected return data. It lacks error/edge-case details, but the listed outputs give sufficient context for typical use.
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 already documents the ip parameter as 'The IP address to query,' and the description repeats this without adding format constraints, IPv4/IPv6 guidance, or examples. Schema coverage is effectively complete, so baseline score applies.
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?
Clearly states the tool retrieves comprehensive information about an IP address and enumerates the types of data returned (geolocation, open ports, services, SSL certificates, hostnames, cloud details). This distinguishes it from sibling tools like dns_lookup or cve_lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's scope clear but does not explicitly state when to use it over alternatives such as shodan_search or dns_lookup. Usage guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverse_dns_lookupARead-only
Perform reverse DNS lookups to find hostnames associated with IP addresses. Supports batch lookups of multiple IP addresses in a single query. Returns all known hostnames for each IP address, with clear indication when no hostnames are found.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | List of IP addresses to perform reverse DNS lookup on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds behavioral context beyond annotations: it supports batch queries, returns all known hostnames per IP, and provides clear indication when none are found. This is useful operational detail that the schema and annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states the core purpose, the second adds batch and return details. Information is front-loaded and 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?
This is a simple one-parameter tool with a clear return description. The description explains what the tool does, how it handles multiple IPs, and what it returns (hostnames and a not-found indication). Annotations cover read-only and open-world aspects. Nothing essential for correct invocation is missing, even without 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?
Schema description coverage is 100%, with the ips parameter clearly documented as a list of IP addresses. The description adds no new semantic meaning—'batch lookups' is implied by the array type. Per the baseline rule for high coverage, a 3 is appropriate; the description does not compensate or add value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (perform reverse DNS lookups), a clear resource (IP addresses), and the expected output (hostnames). It also distinguishes itself from forward DNS lookups by the term 'reverse,' which is reinforced by the sibling dns_lookup. This is unambiguous and not a tautology.
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 IP-to-hostname resolution but does not explicitly contrast with alternatives like dns_lookup or ip_lookup. It mentions batch support, which is a feature, but offers no when-to-use/when-not-to-use guidance. Usage is inferred from the tool name and context rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shodan_searchBRead-only
Search Shodan's database of internet-connected devices. Returns detailed information about matching devices including services, vulnerabilities, and geographic distribution. Supports advanced search filters and returns country-based statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for Shodan. | |
| max_results | No | Maximum results to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the read-only safety profile (readOnlyHint=true, openWorldHint=true), lowering the burden. The description adds value by specifying what results contain (services, vulnerabilities, geographic distribution, country statistics), but it does not disclose operational traits such as API-key requirements or rate limits that matter for a Shodan-backed search.
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?
Three sentences, front-loaded with the primary purpose. Minor redundancy exists in listing return types twice ('services, vulnerabilities, and geographic distribution' and 'country-based statistics'), but overall there is no wasted verbiage.
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 no output schema, the description correctly takes on explaining return content, which it does (services, vulnerabilities, geo distribution). However, it omits operational essentials for a network-scanning API—authentication requirements and result pagination—and offers only vague filter syntax guidance, leaving an agent under-informed for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both query and max_results are already documented. The description adds only a marginal hint that query supports advanced filters, without syntax or examples. This matches the baseline 3 for high-coverage schemas.
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+resource ('Search Shodan's database of internet-connected devices') and describes what it returns. It implicitly distinguishes from the lookup siblings (ip_lookup, cve_lookup, etc.) by being a filter/statistics search rather than a single-entity lookup, though this differentiation is not made 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 mention of 'advanced search filters' and 'country-based statistics' implies this is for broad exploratory searches rather than targeted lookups, but no alternative tool is named and no when-not-to-use conditions are given. An agent must infer the boundary against the six lookup siblings.
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. Dates show when Glama detected each change.
7 tool updates
v1.0.0- Changed
cpe_lookup2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
cve_lookup2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
cves_by_product2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
dns_lookup2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
ip_lookup2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
reverse_dns_lookup2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
- Changed
shodan_search2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
7 tool updates
- First observed
cpe_lookup - First observed
cve_lookup - First observed
cves_by_product - First observed
dns_lookup - First observed
ip_lookup - First observed
reverse_dns_lookup - First observed
shodan_search
TDQS
Scored across 7 tools
Each tool serves a distinct purpose: IP lookup, general Shodan search, CVE lookup, DNS resolution, reverse DNS, CPE lookup, and CVE-by-product search. No significant overlap or ambiguity.
Most tools follow a consistent 'object_action' pattern (e.g., ip_lookup, cve_lookup, dns_lookup). Minor deviations like 'shodan_search' and 'cves_by_product' are still clear and predictable, keeping overall consistency high.
Seven tools is well-scoped for a Shodan integration, covering core functionalities without being bloated or sparse. Each tool adds clear value.
The set covers major Shodan capabilities: IP enrichment, general search, DNS, reverse DNS, CVE and CPE queries. It lacks some advanced features like alerting or account management, but the primary use cases are well represented.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Shodan InternetDB MCP — wraps Shodan InternetDB (internetdb.shodan.io)
Shodan MCP — wraps the full Shodan REST API (api.shodan.io)
Defensive Shodan search and host intelligence MCP using customer-provided SHODAN_API_KEY for
MCP server for ScanMalware.com URL scanning, malware detection, and analysis.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA WebSocket server that provides MCP interface for searching and retrieving information about internet-connected devices, IP addresses, DNS data, and CVE vulnerabilities through the Shodan API.3-
- FlicenseNot gradedqualityDmaintenanceThis is a Model Context Protocol (MCP) server that provides access to the Shodan API. It allows you to programmatically query Shodan for information about devices, vulnerabilities, and more.2-
- FlicenseNot gradedqualityDmaintenanceIntegrates Shodan search capabilities into MCP-compatible applications for discovering internet-connected devices. Enables domain searches, IP lookups, and advanced queries to identify exposed services, infrastructure mapping, and security analysis.3-
- FlicenseNot gradedqualityBmaintenancePassive reconnaissance MCP server powered by Shodan, enabling host lookups, search, and DNS queries gated against HackerOne scope snapshots.-
Appeared in Searches
- Information on LinkedIn Business or LinkedIn Advertising
- Information about the VIX (Volatility Index)
- Accessing Clearbit APIs for Company Information and Website Visitor Data
- A guide to finding data in public databases
- How to retrieve information about a device using Microsoft Defender, Intune, and Jamf
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/w0h1v/mcp-shodan'
If you have feedback or need assistance with the MCP directory API, please join our Discord server