ADEO CTI MCP Server
by ADEOSec
Verified
- mcp-shodan
- src
/**
* Type definitions for Shodan API responses
* These interfaces define the structure of data returned by various Shodan API endpoints
* Based on the official Shodan REST API specification
*/
/**
* Represents detailed information about a service running on a host
* This is returned as part of the host information lookup
*/
export interface ShodanHostService {
/** The port number the service is running on */
port: number;
/** The transport protocol (tcp/udp) */
transport: string;
/** Name of the software/product running the service (if detected) */
product?: string;
/** Version of the software/product (if detected) */
version?: string;
/** Common Platform Enumeration (CPE) identifiers for the service */
cpe?: string[];
/** Raw banner data or response received from the service */
data?: string;
/** Vulnerabilities found in this service */
vulns?: ShodanVulnerability[];
}
/**
* Comprehensive host information returned by Shodan
* Contains everything Shodan knows about a specific IP address
*/
export interface ShodanHostInfo {
/** String representation of the IP address */
ip_str: string;
/** City where the host is located (if known) */
city?: string;
/** Full country name where the host is located */
country_name?: string;
/** Organization (usually ISP or company) that owns the IP address */
org?: string;
/** Internet Service Provider (ISP) that owns the IP address */
isp?: string;
/** Autonomous System Number (ASN) the IP belongs to */
asn?: string;
/** List of hostnames that resolve to this IP address */
hostnames?: string[];
/** List of open ports discovered on the host */
ports?: number[];
/** List of tags associated with the host (e.g., "cloud", "database") */
tags?: string[];
/** Timestamp of when Shodan last scanned this host */
last_update?: string;
/** Detailed information about each service discovered on the host */
data?: ShodanHostService[];
}
/**
* DNS Resolution Response
* Maps hostnames to their resolved IP addresses
* Used by the DNS lookup endpoint
*/
export interface ShodanDNSResolution {
/** Key is hostname, value is resolved IP address */
[hostname: string]: string;
}
/**
* Reverse DNS Response
* Maps IP addresses to their associated hostnames
* Used by the reverse DNS lookup endpoint
*/
export interface ShodanReverseDNS {
/** Key is IP address, value is array of associated hostnames */
[ip: string]: string[];
}
/**
* Domain Information Response
* Contains comprehensive DNS information about a domain
* Including subdomains, DNS records, and metadata
*/
export interface ShodanDomainInfo {
/** Tags associated with the domain (e.g., "ipv6", "mail") */
tags?: string[];
/** Array of DNS records found for the domain */
data?: Array<{
/** Subdomain part of the DNS record */
subdomain: string;
/** DNS record type (A, AAAA, MX, etc.) */
type: string;
/** Value of the DNS record */
value: string;
/** When this DNS record was last observed */
last_seen?: string;
}>;
/** List of all discovered subdomains */
subdomains?: string[];
/** Indicates if there are more results available */
more?: boolean;
}
// Search Methods Types
export interface ShodanSearchResult {
matches: ShodanSearchMatch[];
facets?: Record<string, Array<{count: number, value: string}>>;
total: number;
}
export interface ShodanSearchMatch {
product?: string;
hash?: number;
ip: number;
ip_str: string;
port: number;
hostnames: string[];
org?: string;
isp?: string;
location: {
city?: string;
region_code?: string;
area_code?: number;
longitude: number;
latitude: number;
country_code: string;
country_name: string;
};
timestamp: string;
domains?: string[];
data?: string;
asn?: string;
transport?: string;
os?: string;
_shodan: {
crawler: string;
ptr: boolean;
id: string;
module: string;
options: Record<string, any>;
};
}
export interface ShodanSearchTokens {
attributes: {
ports?: number[];
[key: string]: any;
};
errors: string[];
string: string;
filters: string[];
}
export interface ShodanSearchFilters {
filters: string[];
}
export interface ShodanSearchFacets {
facets: string[];
}
// On-Demand Scanning Types
export interface ShodanScanResult {
id: string;
count: number;
credits_left: number;
}
export interface ShodanScanStatus {
id: string;
count: number;
status: 'SUBMITTING' | 'QUEUE' | 'PROCESSING' | 'DONE';
created: string;
}
export interface ShodanScanList {
matches: Array<{
id: string;
status: 'SUBMITTING' | 'QUEUE' | 'PROCESSING' | 'DONE';
created: string;
status_check: string;
credits_left: number;
size: number;
}>;
total: number;
}
export interface ShodanProtocols {
[protocol: string]: string;
}
export interface ShodanPorts {
ports: number[];
}
// Network Alerts Types
export interface ShodanAlert {
id: string;
name: string;
created: string;
expires: string | null;
filters: {
ip: string[];
port: number[];
[key: string]: any;
};
size: number;
credits: number;
}
export interface ShodanAlertInfo extends ShodanAlert {
matches: ShodanSearchMatch[];
}
export interface ShodanAlertList {
alerts: ShodanAlert[];
}
export interface ShodanTrigger {
name: string;
description: string;
rule: string;
}
export interface ShodanTriggerList {
triggers: ShodanTrigger[];
}
// Directory Methods Types
export interface ShodanQuery {
id: string;
name: string;
query: string;
created: string;
description?: string;
votes: number;
timestamp: string;
tags: string[];
sharing: number;
}
export interface ShodanQueryList {
total: number;
matches: ShodanQuery[];
}
export interface ShodanQueryTags {
total: number;
tags: Array<{
count: number;
value: string;
}>;
}
// Account Methods Types
export interface ShodanAccount {
member: boolean;
credits: number;
display_name: string | null;
created: string;
}
export interface ShodanApiStatus {
scan_credits: number;
usage_limits: {
scan_credits: number;
query_credits: number;
monitored_ips: number;
};
plan: string;
https: boolean;
unlocked: boolean;
}
export interface ShodanBillingProfile {
name: string;
address: string;
city: string;
state: string;
postal_code: string;
country: string;
card_last4: string;
card_expiration: string;
}
// Utility Methods Types
export interface ShodanHTTPHeaders {
[header: string]: string;
}
export interface ShodanMyIP {
ip: string;
}
/**
* Represents a vulnerability found in a service
*/
export interface ShodanVulnerability {
/** CVE ID of the vulnerability */
id: string;
/** CVSS score of the vulnerability */
cvss: number;
/** Summary description of the vulnerability */
summary: string;
/** References to more information about the vulnerability */
references?: string[];
}
// Add types for MCP Resources
export interface ResourceUri {
uri: string;
}
export interface ResourceContent {
uri: string;
mimeType?: string;
text?: string;
blob?: string;
}
// Add types for MCP Prompts
export interface PromptArguments {
target?: string;
depth?: string;
timeframe?: string;
// Network Topology Analysis
scanType?: string;
compareWithPrevious?: boolean;
// IoT Device Discovery
deviceType?: string;
manufacturer?: string;
protocol?: string;
// Security Posture Evaluation
complianceFramework?: string;
includeRemediation?: boolean;
// Threat Intelligence
threatSource?: string;
riskLevel?: string;
// Vulnerability Assessment
severityThreshold?: string;
priorityLevel?: string;
}
export interface PromptMessage {
role: "user" | "assistant";
content: {
type: "text";
text: string;
};
}
export interface CVEDBVulnerability {
cve: string;
summary: string;
cvss: number;
cvss_version: number;
cvss_v2?: number;
cvss_v3?: number;
epss: number;
ranking_epss: number;
kev: boolean;
propose_action: string;
ransomware_campaign: string;
references: string[];
published_time: string;
cpes: string[];
}
export interface CVEDBVulnerabilityList {
total: number;
matches: CVEDBVulnerability[];
}
export interface CPEDictionaryEntry {
cpe23: string;
vendor: string;
product: string;
version: string;
update?: string;
edition?: string;
}
export interface CPEDictionaryList {
total: number;
matches: CPEDictionaryEntry[];
}
// VirusTotal API Types
/**
* Base VirusTotal API response interface
*/
export interface VirusTotalResponse<T> {
data: T;
meta?: Record<string, any>;
}
/**
* Common analysis statistics structure
*/
export interface AnalysisStats {
harmless: number;
malicious: number;
suspicious: number;
timeout: number;
undetected: number;
}
/**
* VirusTotal URL Analysis Interface
*/
export interface VirusTotalUrlAnalysis {
id: string;
type: string;
attributes: {
date: number;
status: string;
url: string;
last_analysis_date?: number;
last_analysis_stats?: AnalysisStats;
last_analysis_results?: Record<string, {
category: string;
engine_name: string;
method: string;
result: string | null;
}>;
reputation?: number;
categories?: Record<string, string>;
title?: string;
last_http_response_code?: number;
last_http_response_content_length?: number;
times_submitted?: number;
tags?: string[];
total_votes?: {
harmless: number;
malicious: number;
};
last_final_url?: string;
html_meta?: Record<string, string[]>;
redirection_chain?: string[];
};
links?: {
self: string;
};
relationships?: Record<string, {
data: any;
meta?: {
count: number;
};
}>;
}
/**
* VirusTotal File Analysis Interface
*/
export interface VirusTotalFileAnalysis {
id: string;
type: string;
attributes: {
md5: string;
sha1: string;
sha256: string;
size: number;
last_analysis_date?: number;
last_analysis_stats?: AnalysisStats;
last_analysis_results?: Record<string, {
category: string;
engine_name: string;
method: string;
result: string | null;
}>;
reputation?: number;
meaningful_name?: string;
type_description?: string;
tags?: string[];
total_votes?: {
harmless: number;
malicious: number;
};
times_submitted?: number;
last_submission_date?: number;
first_submission_date?: number;
sandbox_verdicts?: Record<string, {
category: string;
confidence: number;
sandbox_name: string;
malware_classification?: string[];
}>;
capabilities_tags?: string[];
crowdsourced_yara_results?: Array<{
description: string;
rule_name: string;
source: string;
}>;
sigma_analysis_stats?: {
critical: number;
high: number;
medium: number;
low: number;
};
};
links?: {
self: string;
};
relationships?: Record<string, {
data: any;
meta?: {
count: number;
};
}>;
}
/**
* VirusTotal IP Analysis Interface
*/
export interface VirusTotalIpAnalysis {
id: string;
type: string;
attributes: {
as_owner?: string;
asn?: number;
country?: string;
network?: string;
regional_internet_registry?: string;
last_analysis_date?: number;
last_analysis_stats?: AnalysisStats;
last_analysis_results?: Record<string, {
category: string;
engine_name: string;
method: string;
result: string | null;
}>;
reputation?: number;
tags?: string[];
total_votes?: {
harmless: number;
malicious: number;
};
continent?: string;
jarm?: string;
last_https_certificate?: {
issuer: {
C?: string;
CN?: string;
O?: string;
};
subject: {
CN?: string;
};
validity: {
not_after: string;
not_before: string;
};
};
whois?: string;
whois_date?: number;
};
links?: {
self: string;
};
relationships?: Record<string, {
data: any;
meta?: {
count: number;
};
}>;
}
/**
* VirusTotal Domain Analysis Interface
*/
export interface VirusTotalDomainAnalysis {
id: string;
type: string;
attributes: {
creation_date?: number;
last_update_date?: number;
last_analysis_date?: number;
last_analysis_stats?: AnalysisStats;
last_analysis_results?: Record<string, {
category: string;
engine_name: string;
method: string;
result: string | null;
}>;
categories?: Record<string, string>;
reputation?: number;
registrar?: string;
whois?: string;
whois_date?: number;
last_dns_records?: Array<{
type: string;
value: string;
ttl: number;
}>;
tags?: string[];
total_votes?: {
harmless: number;
malicious: number;
};
popularity_ranks?: Record<string, { rank: number }>;
};
links?: {
self: string;
};
relationships?: Record<string, {
data: any;
meta?: {
count: number;
};
}>;
}