Threat Intelligence MCP Server
This server provides defense-contractor-grade threat intelligence with multi-source feed aggregation, reputation checking, and compliance with major security standards.
Core Threat Intelligence
Multi-source feed aggregation: Collect IOCs from 10+ sources including Feodo Tracker, URLhaus, CISA KEV, ThreatFox, Emerging Threats, Spamhaus DROP, Blocklist.de, and CINSscore
IP reputation (
check_ip_reputation): Evaluate a single IP against VirusTotal, AbuseIPDB, and Shodan, returning a threat level (clean/low/medium/high/critical)Hash reputation (
check_hash_reputation): Look up MD5, SHA1, or SHA256 hashes against threat intelligence databasesBulk IP checking (
check_bulk_ips): Check up to 100 IPs in a single requestCISA KEV (
get_cisa_kev): Retrieve known exploited vulnerabilities, filterable by days and vendorRecent IOCs (
get_recent_iocs): Fetch from ThreatFox by type (ip:port, domain, url, md5, sha256), up to 500 resultsNetwork threat analysis (
check_network_against_threats): Cross-reference network scan results against threat listsDashboard & stats: Aggregated data for visualization, cache statistics, and API key status
Cache management (
clear_threat_cache): Force a fresh data fetch
Defense & Intelligence Standards
STIX/TAXII 2.1: Export OASIS-compliant STIX bundles and fetch from TAXII 2.1 servers
MITRE ATT&CK: Map IOCs to techniques across all 14 Enterprise tactics and export ATT&CK Navigator layers
TLP 2.0: Classify and enforce Traffic Light Protocol sharing rules
Tamper-evident provenance: SHA-256 hash chain tracking for IOC lifecycle (NIST SP 800-86 compliant)
Defense feeds: Aggregate CISA, ICS-CERT, NSA, and DISA IAVA feeds with ICD 203 confidence scoring
NIST compliance: Map to 25+ NIST SP 800-53 Rev. 5 controls and NIST CSF 2.0 functions
DoD Impact Levels: Classification mapping to IL2–IL6 per CNSSI 1253
Enables checking file hash (MD5/SHA1/SHA256) and IP reputation with detection ratios and vendor verdicts from VirusTotal's threat intelligence database.
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., "@Threat Intelligence MCP Servercheck the reputation of IP 192.0.2.102"
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.

World Intelligence MCP Server
Real-time global intelligence across 30+ domains with 132 MCP tools, a live ops-center dashboard, a CLI, and a Qdrant vector store for enterprise-grade semantic search across accumulated intelligence. All data comes from free, public APIs: no paid subscriptions required.
Built for AI agents that need world awareness: market conditions, geopolitical risk, military posture, supply chain disruptions, cyber threats, and more — all queryable via the Model Context Protocol. The vector store enables natural language queries like "military activity near Taiwan" or "cyber threats targeting healthcare" across all historical data.
What You Get
Domain | Tools | Data Sources |
Financial Markets | 7 | Yahoo Finance, CoinGecko, Alternative.me, Mempool |
Forex & Currency | 3 | ECB/Frankfurter (8 major pairs, timeseries, cross rates) |
Bonds & Yields | 2 | FRED, Yahoo Finance (yield curve, bond ETFs, spread analysis) |
Earnings | 2 | Yahoo Finance (mega-cap calendar, surprise history) |
SEC Filings | 3 | SEC EDGAR (full-text search, company filings, 8-K material events) |
Company Enrichment | 1 | Yahoo Finance + GDELT + SEC + GitHub (composite profile) |
Macro Composite | 1 | Weighted 6-signal market verdict (Fear&Greed, VIX, sectors, DXY, BTC, yields) |
Economic Indicators | 6 | AAA fuel prices, EIA energy, FRED macro, World Bank |
Central Banks | 1 | 15 central bank policy rates |
BTC Technicals | 1 | SMA 50/200, golden/death cross, Mayer Multiple |
Natural Disasters | 2 | USGS earthquakes, NASA FIRMS wildfires |
Environmental | 2 | NASA EONET, GDACS disaster alerts |
Climate | 1 | Open-Meteo temperature/precipitation anomalies |
Conflict & Security | 4 | ACLED events, UCDP, unrest detection, humanitarian data |
Military & Defense | 6 | adsb.lol, OpenSky, hexdb.io, surge detection, theater posture, aircraft batch |
Infrastructure | 5 | Cloudflare Radar, submarine cables, cascade analysis, cloud status, RIPEstat BGP/RPKI |
Maritime | 2 | NGA navigation warnings, vessel snapshots |
Aviation | 2 | FAA airport delays, domestic flight snapshot |
News & Media | 3 | 119 RSS feeds (4-tier), GDELT, trending keywords |
Intelligence Analysis | 8 | Signal convergence, focal points, instability index, risk scores, escalation |
NLP Intelligence | 4 | Entity extraction, event classification, news clustering, keyword spikes |
Strategic Synthesis | 4 | Strategic posture, world brief, fleet report, population exposure |
Geospatial | 11 | Military bases, ports, pipelines, nuclear facilities, cables, datacenters, spaceports, minerals, exchanges, trade routes, cloud regions |
AI & Technology | 4 | arXiv papers, HuggingFace models, Hacker News, GitHub trending |
Cyber Threats | 1 | URLhaus, Feodotracker, CISA KEV, SANS |
Health | 1 | WHO DON, ProMED, CIDRAP disease outbreaks |
Space Weather | 1 | NOAA SWPC (Kp index, solar flares, alerts) |
Social & Sanctions | 3 | Reddit velocity, OFAC SDN list, nuclear test site monitoring |
Country Intelligence | 3 | Country brief, country stocks, financial centers |
Prediction Markets | 1 | Polymarket event contracts |
Elections | 1 | Global election calendar with risk scoring |
Displacement | 1 | UNHCR refugee/IDP data |
Shipping | 1 | Dry bulk shipping stress index |
Government | 1 | USAspending.gov federal contracts |
Traffic | 2 | Road traffic flow, real-time incidents |
Cross-Domain Alerts | 2 | Alert digest, weekly trends |
Monitoring | 2 | Webcams, server health/status |
Vector Search | 5 | Qdrant semantic search, similarity, timeline, stats |
Cross-Domain Analytics | 3 | Correlation, domain summary, trend detection |
Reports | 1 | PDF/HTML multi-domain intelligence reports |
Daily Digest | 1 | Cited markdown morning brief: top events, headlines, trends, and timeline |
AOI Geofences | 10 | User-defined areas of interest in three shapes (circle, polygon, corridor): define/list/update/delete, a cited multi-domain brief, hotspot escalation scoring, and enter/leave change detection for a user's own area. News is scoped to the place the area sits in (OSM Nominatim reverse geocoding, no key), not to the area's name |
Severe Weather | 2 | NWS active CAP alerts (US), Meteoalarm (39 EU countries) |
Space Launches | 1 | Launch Library 2 upcoming launches |
Volcanoes | 1 | Smithsonian GVP weekly activity report |
Tropical Cyclones | 2 | NHC (Atlantic, E/C Pacific) + JTWC (NW Pacific, N Indian, S Hemisphere) |
Situation Brief | 1 | Cited situational awareness brief over MCP: bounded server-side overview synthesized via local Ollama, with a mechanically-cited fallback |
Total: 132 tools across 30+ intelligence domains.
Related MCP server: MCP Threat Intel Server
Quick Start
Install
git clone https://github.com/marc-shade/world-intel-mcp.git
cd world-intel-mcp
pip install -e .
# Optional extras
pip install -e ".[dashboard]" # Live ops-center dashboard
pip install -e ".[vector]" # Qdrant vector store + FastEmbed
pip install -e ".[dev]" # pytest, respx, coverageRun as MCP Server
world-intel-mcp # stdio mode for Claude Code, Cursor, etc.Claude Code Configuration
Add to ~/.claude.json:
{
"mcpServers": {
"world-intel-mcp": {
"command": "world-intel-mcp"
}
}
}Dashboard
intel-dashboard # http://localhost:8501
intel-dashboard --port 9000 # custom portPDF/HTML Reports
pip install -e ".[pdf]" # requires: brew install pango (macOS)
intel report # full PDF report → ~/.cache/world-intel-mcp/
intel report --format html # HTML (no native deps needed)
intel report -o brief.pdf # custom output path
intel report -s markets,cyber,earthquakes # select sectionsMap-first ops center: Leaflet map with toggle-able layers (quakes, military, conflict, fires, convergence, nuclear, infrastructure, your AOI geofences with last-sweep counts), 47 live SSE feeds, HUD bar, glassmorphic panels, per-source circuit breaker health.
CLI
intel markets # stock indices
intel earthquakes --min-mag 5.0
intel status # cache + circuit breaker healthArchitecture
server.py (MCP stdio) ─┐ ┌─ VectorStore (Qdrant)
cli.py (Click CLI) ├─> sources/*.py ─> Fetcher ─> CircuitBreaker ─┤
dashboard.py (SSE) │ analysis/*.py └─ Cache (SQLite)
collector.py (daemon) ─┘Fetcher: Centralized async HTTP client (httpx). Retries, per-source rate limiting, stale-data fallback. Auto-stores results in vector store on fresh fetches.
CircuitBreaker: Per-source tracking. 3 consecutive failures trips for 5 minutes. Each RSS feed gets its own breaker.
Cache: SQLite WAL-mode TTL cache.
get()returns live data,get_stale()returns expired data for fallback.VectorStore: Qdrant + FastEmbed (BAAI/bge-small-en-v1.5, 384-dim). Async background worker queue for non-blocking storage. Enables semantic search across all accumulated intelligence.
Collector: Standalone daemon that fetches all 51 sources in parallel and populates the vector store. Run once or as a daemon (default: 5-minute interval). Includes the AOI change sweep, so a running daemon continuously watches every defined geofence.
Sources (
sources/*.py): 30+ modules, each exportsasync def fetch_*(fetcher, **kwargs) -> dict.Analysis (
analysis/*.py): Cross-domain synthesis — signal aggregation, instability indexing, NLP, company enrichment, macro composite.Config (
config/*.py): Curated datasets — 22 hotspots, 70+ bases, 40 ports, 24 pipelines, 24 nuclear facilities, 34 cables, 48 datacenters, 27 spaceports, 82 exchanges.
MCP Tools Reference
Financial Markets (7)
Tool | Description |
| Stock index quotes (S&P 500, Dow, Nasdaq, FTSE, Nikkei) |
| Top crypto prices and market caps from CoinGecko |
| Stablecoin peg health (USDT, USDC, DAI, FDUSD) |
| Bitcoin spot ETF prices and volumes |
| US equity sector performance (11 SPDR ETFs) |
| 7 macro indicators (Fear & Greed, VIX, DXY, gold, 10Y, BTC) |
| Commodity futures (gold, silver, crude, natgas, grains) |
Forex & Currency (3)
Tool | Description |
| Latest FX rates from ECB. Filter by base/target currencies |
| Historical FX rate with trend analysis (configurable days) |
| All 8 major pairs + cross rates + DXY proxy |
Bonds & Yields (2)
Tool | Description |
| US Treasury yield curve (2Y-30Y), 2s10s/3m10y spreads, inversion flag |
| Bond ETFs: AGG, TLT, HYG, LQD, TIP with price/change |
Earnings (2)
Tool | Description |
| Upcoming earnings for 20 mega-cap stocks with EPS estimates |
| Historical earnings surprise (actual vs estimate, trend) |
SEC Filings (3)
Tool | Description |
| Full-text search across all EDGAR filings |
| Company filings by ticker (10-K, 10-Q, 8-K) with CIK resolution |
| Latest 8-K material events (M&A, exec changes, earnings) |
Company Enrichment (1)
Tool | Description |
| Composite profile: stock quote + financials + news + SEC + GitHub |
Macro Composite (1)
Tool | Description |
| Weighted market score (0-100) with verdict: RISK_ON to STRONG_CAUTION |
Economic (6)
Tool | Description |
| Daily US retail gasoline, diesel, and E85 prices from AAA |
| US residential natural gas prices from EIA |
| US electricity retail rates by sector/state from EIA |
| Brent/WTI crude oil and natural gas from EIA |
| FRED economic data (GDP, CPI, unemployment, rates) |
| World Bank development indicators by country |
Central Banks (1)
Tool | Description |
| Policy rates for 15 major central banks |
BTC Technicals (1)
Tool | Description |
| Bitcoin SMA 50/200, golden/death cross, Mayer Multiple |
Natural Disasters (2)
Tool | Description |
| USGS earthquakes (configurable magnitude/time/limit) |
| NASA FIRMS satellite fire hotspots (9 global regions) |
Environmental (2)
Tool | Description |
| NASA EONET natural events |
| GDACS disaster alerts with severity scoring |
Conflict & Security (4)
Tool | Description |
| ACLED armed conflict events |
| Uppsala Conflict Data Program events |
| Social unrest with Haversine dedup |
| HDX humanitarian crisis datasets |
Military & Defense (6)
Tool | Description |
| Military aircraft via adsb.lol (OpenSky fallback) |
| Activity across 5 theaters (EU, Indo-Pacific, ME, Arctic, Korea) |
| Aircraft lookup by ICAO24 hex (hexdb.io) |
| Batch aircraft lookup (multiple hex codes) |
| Foreign aircraft concentration anomaly detection |
| USNI News naval fleet tracker |
Infrastructure (4)
Tool | Description |
| Cloudflare Radar internet disruptions |
| Submarine cable corridor health |
| Infrastructure cascade simulation |
| Cloud platform health (AWS, Azure, GCP, Cloudflare, GitHub) |
Maritime (2)
Tool | Description |
| NGA maritime navigation warnings |
| Naval activity at 9 strategic waterways |
Geospatial Datasets (10)
Tool | Description |
| 70 military bases from 9 operators |
| 40 strategic ports across 6 types |
| 24 oil/gas/hydrogen pipelines |
| 24 nuclear power/enrichment/research facilities |
| 34 submarine communications cables |
| 48 AI/HPC datacenters worldwide |
| 27 global spaceports |
| 27 strategic mineral deposits |
| 82 stock exchanges worldwide |
| Major trade routes and chokepoints |
News & Media (3)
Tool | Description |
| 119 global RSS feeds with 4-tier source ranking |
| Trending terms with spike detection |
| GDELT 2.0 global news search |
Intelligence Analysis (8)
Tool | Description |
| Geographic convergence of multi-domain signals |
| Multi-signal focal point detection |
| Country-level signal aggregation |
| Activity deviations from baselines |
| Country Instability Index v2 (0-100) |
| ACLED-based conflict risk scoring |
| Escalation scores for 22 intel hotspots |
| Comprehensive country intelligence dossier |
NLP Intelligence (4)
Tool | Description |
| Named entity extraction (countries, leaders, orgs, CVEs, APTs) |
| Event classification into 14 threat categories |
| Topic clustering by Jaccard similarity |
| Keyword spike detection with Welford's algorithm |
Strategic Synthesis (4)
Tool | Description |
| Composite global risk from 9 weighted domains |
| Structured daily intelligence summary |
| Naval fleet activity report with readiness scoring |
| Population at risk near active events (105-city dataset) |
Climate (1)
Tool | Description |
| Open-Meteo temperature/precipitation anomalies |
Prediction Markets (1)
Tool | Description |
| Polymarket prediction contracts |
Elections (1)
Tool | Description |
| Global election calendar with risk scoring |
Displacement (1)
Tool | Description |
| UNHCR refugee/IDP statistics |
Aviation (2)
Tool | Description |
| FAA airport delay status |
| Global air traffic snapshot from OpenSky |
Cyber Threats (1)
Tool | Description |
| Aggregated cyber intel (URLhaus, CISA KEV, SANS) |
Space Weather (1)
Tool | Description |
| Solar activity (Kp index, X-ray flux, SWPC alerts) |
AI & Technology (4)
Tool | Description |
| arXiv AI papers, HuggingFace models |
| Hacker News top stories |
| GitHub trending repositories |
| arXiv paper search |
Health (1)
Tool | Description |
| WHO DON, ProMED, CIDRAP outbreaks |
Social & Sanctions (3)
Tool | Description |
| Reddit geopolitical discussion velocity |
| OFAC SDN list search |
| Seismic monitoring near nuclear test sites |
Shipping & Trade (1)
Tool | Description |
| Dry bulk shipping stress index |
Government (1)
Tool | Description |
| USAspending.gov federal contracts |
Country Intelligence (3)
Tool | Description |
| Quick country situation summary |
| Stock exchanges and listings by country |
| Global financial centers ranking |
Extended Geospatial (1)
Tool | Description |
| Cloud provider regions worldwide |
Traffic (2)
Tool | Description |
| Road traffic flow data |
| Real-time traffic incidents |
Cross-Domain Alerts (2)
Tool | Description |
| Cross-domain alert aggregation |
| Weekly trend analysis |
Monitoring (2)
Tool | Description |
| Public webcam locations and live previews |
| Server health, cache stats, circuit breaker status |
Vector Search (5)
Tool | Description |
| Natural language search across all accumulated intelligence |
| Find events similar to a given data point |
| Chronological view of intelligence for a domain/category |
| Vector store collection statistics |
| Trigger an on-demand collection cycle |
Cross-Domain Analytics (3)
Tool | Description |
| Find correlated signals across all domains for a given topic |
| Per-category summary of stored intelligence (counts, sources, recency) |
| Detect activity surges/drops by comparing recent vs baseline periods |
Reports (1)
Tool | Description |
| Generate a PDF or HTML intelligence report covering 18 domains in parallel |
AOI Geofences (5)
Tool | Description |
| Define a named area of interest: point + radius in km (1-2000) |
| List all user-defined AOIs |
| Delete a user-defined AOI by name |
| Cited brief for an AOI: earthquakes, military flights, wildfires, conflict events, aviation, nearby infrastructure, and news mentions, all filtered to the AOI's radius |
| Hotspot escalation scoring (same engine as the 22 built-in hotspots) applied to a user AOI |
Situation Brief (1)
Tool | Description |
| Cited situational awareness brief, generated on demand over MCP: a bounded server-side overview (earthquakes, military flights, ACLED conflict events, wildfires, cyber threats, disease outbreaks, news, space weather, strategic posture, alert digest), synthesized via local Ollama or a mechanically-cited fallback when Ollama is unreachable |
Watching your own area (geofences/AOIs)
Static infrastructure results (bases, ports, nuclear, cables, datacenters, spaceports) draw on this repo's curated strategic datasets, which are global and deliberately sparse, not exhaustive local registries. A quiet AOI brief means nothing from those curated sets is in range, not that your area has no infrastructure.
Before the AOI family, only intel_signal_convergence accepted a real
point-plus-radius, intel_military_flights took a bbox, and hotspot
escalation scoring was restricted to the 22 hardcoded INTEL_HOTSPOTS.
The intel_aoi_* tools let you name your own area (a city, a border
region, a facility) and get the same cited, multi-domain treatment.
Geofences survive the antimeridian (a Bering Strait or Fiji AOI queries
both sides of the dateline), and pipelines/undersea cables are matched
as line features via great-circle segment distance, not just by their
endpoints.
Define an AOI once, then brief, score, edit, and watch it. Three shapes: a circle (point + radius), a polygon (3-64 vertices, for a border region or strait a radius cannot express), or a corridor (a waypoint route + width, for a shipping lane or supply road):
intel_aoi_define(name="Pittsburgh", lat=40.4406, lon=-79.9959, radius_km=50)
intel_aoi_define_polygon(name="Taiwan Strait", vertices=[[22.5, 118.0], [22.5, 121.5], [26.5, 122.0], [26.5, 118.5]])
intel_aoi_define_corridor(name="Suez Approach", waypoints=[[29.9, 32.55], [27.5, 34.0], [24.0, 36.0]], width_km=80)
intel_aoi_brief(name="Taiwan Strait")
intel_aoi_escalation(name="Pittsburgh")
intel_aoi_update(name="Pittsburgh", radius_km=100) # resize/rename in place
intel_aoi_changes(name="Suez Approach") # what entered/left since last sweep
intel_aoi_digest() # one-call sweep across ALL your areasThe same nine operations are available from the terminal: intel aoi define|define-polygon|define-corridor|list|update|delete|brief|escalation|changes.
Membership is exact for the shape (an event inside a polygon's
bounding circle but outside the polygon is excluded); corridor
distances are measured to the route. Line-feature infrastructure
(pipelines, undersea cables) matches the bounding circle for
non-circle shapes, disclosed in data_gaps.
intel_aoi_changes is the alerting primitive: the first call records a
baseline, and every later call reports what entered and left the fence
per domain, with failed fetches reported as data_gaps rather than
counted as departures.
intel_aoi_brief filters every geo-capable domain to the 50 km radius
around Pittsburgh: earthquakes, military flights (bbox derived from the
radius), wildfires (region-mapped, since NASA FIRMS has no point+radius
query), ACLED conflict events, a sample of nearby aviation traffic,
nearby static infrastructure (military bases, ports, pipelines, nuclear
facilities, undersea cables, datacenters, spaceports) with distances in
km, and news headline mentions of "Pittsburgh". Every item in the
response carries a [n] citation into a numbered sources list, and
data_gaps names any domain that couldn't be scoped to the AOI (for
example, wildfires when the AOI falls outside NASA FIRMS's coverage
regions, or conflict events when ACLED credentials aren't configured)
instead of silently omitting it.
intel_aoi_escalation runs the same baseline/military/conflict/social-
unrest scoring engine that powers intel_hotspot_escalation for the 22
built-in hotspots, but scoped to your AOI's own radius instead of a fixed
2-degree window.
AOIs persist in a dedicated table inside the same SQLite cache database
the server already uses (~/.cache/world-intel-mcp/cache.db by default,
or $WORLD_INTEL_CACHE_DB), so a scheduled agent can watch any named
area across restarts with intel_aoi_list / intel_aoi_delete to manage
them.
Vector Store
The optional Qdrant vector store accumulates intelligence over time for semantic retrieval. All data fetched through the Fetcher is automatically embedded and stored.
Setup
# Install Qdrant (Docker)
docker run -p 6333:6333 qdrant/qdrant
# Install vector dependencies
pip install -e ".[vector]"
# Run the collector daemon (populates vector store 24/7)
intel-collector --daemon # every 5 minutes
intel-collector --daemon --interval 120 # every 2 minutes
intel-collector --sources markets,cyber # specific domains only
intel-collector # single collection cycle
intel-collector --daemon --sources aoi --interval 900 # AOI watch only: sweep every geofence every 15 minThe aoi group runs intel_aoi_digest as a sweep: each cycle diffs every
defined AOI against its stored snapshot and advances it, so the daemon
interval is your geofence watch cadence. Change digests are logged and
(when the vector store is enabled) stored for semantic search. Set
WORLD_INTEL_AOI_WEBHOOK to get a POST whenever a sweep finds something
entered or left a geofence (quiet sweeps never fire); with
WORLD_INTEL_AOI_WEBHOOK_FORMAT=text the body is raw markdown with a
Title header, which ntfy-style sinks render directly.
Running as a macOS launchd Service
scripts/collector-daemon.sh manages the collector as a launchd agent so it
survives reboots. It fills in com.agentic.intel-collector.plist.template
with this checkout's own path (resolved from the script's own location, so
it works from any clone) and installs the result to
~/Library/LaunchAgents/.
scripts/collector-daemon.sh start # install + load the launchd job
scripts/collector-daemon.sh status # check state and log info
scripts/collector-daemon.sh logs # tail stdout (logs err for stderr)
scripts/collector-daemon.sh stop # unload the launchd job
scripts/collector-daemon.sh restart
scripts/collector-daemon.sh render # print the filled-in plist without installing itSemantic Search Examples
Once data accumulates, AI agents can query across all domains:
"military activity near Taiwan strait" — finds military flights, naval warnings, theater posture data
"cyber threats targeting healthcare" — finds URLhaus, CISA KEV entries related to healthcare
"economic indicators suggesting recession" — finds yield curve inversions, macro signals, FRED data
The vector store uses FastEmbed (ONNX-based, BAAI/bge-small-en-v1.5) for embeddings — no GPU required, ~3 second cold start.
Environment Variables
Variable | Required | Description |
| No | ACLED conflict events |
| No | Satellite wildfire data |
| No | Energy price data |
| No | Internet outage data |
| No | Macro economic data (also used for yield curve) |
| No | Military flight fallback |
| No | Military flight fallback |
| No | Ollama server for AI-generated briefs (default: |
| No | Ollama model for AI-generated briefs (default: |
| No | Logging level (default: INFO) |
| No | URL POSTed when an AOI sweep finds changes (collector daemon); quiet sweeps don't fire |
| No |
|
Everything else uses free, unauthenticated public APIs.
Development
pip install -e ".[dev]"
pytest # 900 tests (918 total, 18 live-network smoke tests deselected by default)
pytest --cov=world_intel_mcp # with coverage
pytest tests/test_forex.py -v # single moduleAdding a New Source
Create
sources/your_source.pywithasync def fetch_your_data(fetcher: Fetcher, **kwargs) -> dictUse
fetcher.get_json(url, source="your-source", cache_key=..., cache_ttl=300)— automatic caching, retries, circuit breaking, rate limitingIn
server.py: addTool(...)toTOOLS, addcaseto_dispatch()(use inline import)Add tests using
respxto mock HTTP (seetests/test_forex.pyfor pattern)Optionally add to
dashboard/app.py(SSE) andcli.py(Click)
License
MIT
Available Tools
11 toolscheck_bulk_ipsC
Check multiple IP addresses against threat feeds in bulk.
Args: ips: JSON array of IP addresses or comma-separated list
Returns: JSON with reputation results for all IPs
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions bulk checking against threat feeds but lacks critical behavioral details: it doesn't specify rate limits, authentication needs, data sources, or what happens on errors. For a tool with no annotation coverage, this is a significant gap in transparency.
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 appropriately sized and front-loaded, with the core purpose stated first. The 'Args' and 'Returns' sections add structure without redundancy. However, the 'Returns' section could be more concise, as the output schema exists, making some details unnecessary.
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 moderate complexity (bulk IP checking), no annotations, and an output schema present, the description is partially complete. It covers the basic purpose and parameter format but lacks usage guidelines, behavioral context, and error handling details. The output schema reduces the need to explain return values, but overall completeness is adequate with clear gaps.
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 description coverage is 0%, so the description must compensate. It adds value by explaining that 'ips' accepts a 'JSON array of IP addresses or comma-separated list', which clarifies the input format beyond the schema's 'type: string'. However, it doesn't detail validation rules, IP format requirements, or size limits, leaving some semantics unclear.
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: 'Check multiple IP addresses against threat feeds in bulk.' It specifies the verb ('check'), resource ('IP addresses'), and scope ('bulk'), distinguishing it from single-IP tools like 'check_ip_reputation'. However, it doesn't explicitly differentiate from other bulk tools like 'check_network_against_threats', keeping it from a perfect score.
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 doesn't mention when to prefer this over 'check_ip_reputation' for single IPs or how it differs from 'check_network_against_threats' for bulk checks. No exclusions or prerequisites are stated, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_hash_reputationA
Check a file hash (MD5/SHA1/SHA256) against threat intelligence.
Args: file_hash: File hash to check
Returns: JSON with reputation data
| Name | Required | Description | Default |
|---|---|---|---|
| file_hash | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool checks against threat intelligence, but does not disclose behavioral traits such as rate limits, authentication needs, data sources, or error handling. This leaves significant gaps for a tool that likely queries external services.
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 appropriately sized and front-loaded with the core purpose, followed by structured sections for args and returns. It avoids unnecessary details, though the 'Args' and 'Returns' headings could be integrated more seamlessly into the flow.
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 has an output schema (returns JSON with reputation data), the description does not need to explain return values. It covers the basic purpose and parameter semantics adequately, but could improve by adding more behavioral context (e.g., rate limits) to compensate for the lack of 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%, but the description adds meaning by specifying the parameter as a 'file hash' and listing supported hash types (MD5/SHA1/SHA256). However, it does not detail format constraints (e.g., length, case sensitivity) or provide examples, leaving some ambiguity 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 clearly states the tool's purpose with a specific verb ('check') and resource ('file hash') against a target ('threat intelligence'). It distinguishes from siblings by specifying hash checking (vs. IPs, networks, feeds, etc.) and mentions supported hash types (MD5/SHA1/SHA256), making it 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 checking file hashes against threats, but does not explicitly state when to use this tool versus alternatives like check_ip_reputation or check_bulk_ips. It provides some context (e.g., hash types) but lacks explicit guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ip_reputationC
Check an IP address against multiple threat intelligence sources.
Args: ip: IP address to check
Returns: JSON with reputation data from multiple sources
| 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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'multiple threat intelligence sources' but doesn't specify which sources, latency, rate limits, authentication needs, or error handling. For a tool that likely queries external APIs, this leaves critical operational details unclear.
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 front-loaded with the core purpose, followed by structured 'Args' and 'Returns' sections. It's efficient with minimal waste, though the 'Returns' section could be more specific about the JSON structure instead of just stating 'JSON with reputation data'.
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 moderate complexity (single parameter, threat intelligence query), the description covers the basics but lacks depth. The output schema exists, so return values needn't be detailed, but behavioral aspects like source reliability or rate limits are missing, making it adequate but incomplete.
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 description coverage is 0%, but the description explicitly documents the single parameter ('ip: IP address to check'), adding essential meaning beyond the bare schema. However, it doesn't provide format details (e.g., IPv4 vs. IPv6) or validation rules, so it only partially compensates for the schema 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 clearly states the tool's purpose: 'Check an IP address against multiple threat intelligence sources.' It specifies the verb ('check') and resource ('IP address'), though it doesn't explicitly differentiate from sibling tools like 'check_bulk_ips' or 'check_hash_reputation' beyond the IP focus.
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 like 'check_bulk_ips' for multiple IPs or 'check_hash_reputation' for non-IP checks. It lacks context on prerequisites, limitations, or exclusions, leaving the agent to infer usage from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_network_against_threatsC
Check network scan results against threat intelligence.
Args: scan_results: JSON string from network scanner with device IPs
Returns: JSON with any matched threats
| Name | Required | Description | Default |
|---|---|---|---|
| scan_results | Yes |
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 of behavioral disclosure. It states the tool checks against threat intelligence and returns JSON with matches, but lacks critical details: whether this is a read-only operation, if it requires authentication, rate limits, what happens on errors, or if it modifies any state (e.g., updates a cache). For a security tool with zero annotation coverage, this is a significant 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?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured 'Args' and 'Returns' sections. Each sentence earns its place by providing essential information without redundancy. Minor improvements could include integrating the sections more fluidly.
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 (security analysis), no annotations, and an output schema exists (implied by 'Returns: JSON'), the description is moderately complete. It covers the basic operation and parameter semantics but lacks behavioral context (e.g., safety, performance) and usage guidelines. The output schema reduces the need to explain return values, but more context is needed for effective 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 description coverage is 0%, so the description must compensate. It adds meaning by specifying that 'scan_results' is a 'JSON string from network scanner with device IPs', which clarifies the parameter's format and content beyond the schema's generic 'string' type. However, it doesn't detail the exact JSON structure or provide examples, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check network scan results against threat intelligence.' It specifies the verb ('check') and resource ('network scan results'), and distinguishes it from siblings like check_ip_reputation by focusing on bulk scan results rather than individual IPs. However, it doesn't explicitly differentiate from check_bulk_ips, which might be a similar sibling.
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 like check_bulk_ips or check_ip_reputation. It mentions 'scan results' but doesn't clarify prerequisites (e.g., requires prior network scanning) or exclusions (e.g., not for single IPs). This leaves the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_threat_cacheB
Clear the threat intelligence cache to force fresh data fetch.
Returns: JSON confirmation
| 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. It states the action ('clear cache') and outcome ('force fresh data fetch'), but lacks critical behavioral details: it doesn't specify permissions required, whether this is destructive (e.g., deletes cached data), rate limits, or side effects on other tools. The mention of 'JSON confirmation' is vague about response structure.
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 highly concise and well-structured: two brief sentences that front-load the core action and mention the return type without redundancy. Every sentence adds value, with no wasted 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?
Given the tool's simplicity (0 parameters, output schema exists), the description is moderately complete. It covers the basic purpose and return format, but as a mutation tool with no annotations, it should ideally include more behavioral context (e.g., safety, permissions) to be fully helpful 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?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description doesn't add param details, which is appropriate, earning a baseline score of 4 for not introducing unnecessary 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 the tool's purpose with a specific verb ('Clear') and resource ('threat intelligence cache'), and distinguishes it from siblings by focusing on cache management rather than threat checking or data retrieval. However, it doesn't explicitly differentiate from all siblings (e.g., 'fetch_threat_feed' also involves data fetching).
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 minimal guidance: it implies usage when fresh data is needed, but offers no explicit when/when-not rules, prerequisites, or alternatives. It doesn't compare with siblings like 'fetch_threat_feed' or 'get_threat_feeds' that might overlap in data freshness contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_threat_feedB
Fetch and parse a specific threat intelligence feed.
Args: feed_name: Name of the feed (feodo_tracker, urlhaus_recent, etc.)
Returns: JSON with IOCs from the feed
| Name | Required | Description | Default |
|---|---|---|---|
| feed_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool fetches and parses a feed, implying a read operation, but doesn't cover critical aspects like authentication needs, rate limits, error handling, or whether it caches results. For a tool with no annotation coverage, this leaves significant gaps in understanding its 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 appropriately sized and front-loaded, with the core purpose stated first. The 'Args' and 'Returns' sections are structured clearly, though they could be integrated more seamlessly. There's minimal waste, but it could be slightly more polished in flow.
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 has an output schema (returns JSON with IOCs), the description doesn't need to explain return values in detail. It covers the basic purpose and parameter semantics adequately. However, with no annotations and incomplete behavioral transparency, it could do more to address gaps like error cases or performance considerations.
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 description coverage is 0%, but the description compensates by explaining the 'feed_name' parameter: 'Name of the feed (feodo_tracker, urlhaus_recent, etc.)'. This adds meaning beyond the bare schema, providing examples and context. However, it doesn't detail all possible feed names or constraints, so it partially addresses the coverage gap but not fully.
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: 'Fetch and parse a specific threat intelligence feed.' It specifies the verb ('fetch and parse') and resource ('threat intelligence feed'), distinguishing it from siblings like 'check_ip_reputation' or 'get_recent_iocs' that focus on reputation checks or recent IOCs rather than fetching feeds. However, it doesn't explicitly differentiate from 'get_threat_feeds', which might be similar.
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 doesn't mention siblings like 'get_threat_feeds' (which might list available feeds) or 'get_recent_iocs' (which might fetch recent IOCs without specifying a feed), leaving the agent to infer usage context. There's no explicit when/when-not or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cisa_kevA
Get CISA Known Exploited Vulnerabilities.
Args: days: Get vulnerabilities added in last N days (default: 30) vendor: Filter by vendor name (optional)
Returns: JSON with recent KEVs
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| vendor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool 'gets' data and returns JSON, but fails to describe critical behaviors such as whether this is a read-only operation (implied but not stated), any rate limits, authentication requirements, or what happens with invalid inputs (e.g., negative days). For a tool with no annotation coverage, this leaves significant gaps in understanding its operational traits.
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 well-structured and front-loaded with the core purpose, followed by clear sections for arguments and returns. Every sentence earns its place: the first states what the tool does, the next two explain parameters succinctly, and the last specifies the return format. There is zero waste, making it easy for an agent to parse quickly.
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 moderate complexity (2 parameters, no nested objects) and the presence of an output schema (which handles return values), the description is largely complete. It covers the purpose, parameters, and return format adequately. However, it lacks details on behavioral aspects like error handling or data freshness, which would be helpful since no annotations are provided to fill those gaps.
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 by explaining parameters, which it does effectively. It clarifies that 'days' retrieves vulnerabilities added in the last N days with a default of 30, and 'vendor' is an optional filter by vendor name. This adds meaningful context beyond the bare schema, covering both parameters' purposes and defaults, though it could benefit from examples or format details (e.g., vendor name casing).
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 ('Get') and resource ('CISA Known Exploited Vulnerabilities'), making it immediately understandable. It distinguishes itself from sibling tools like 'get_recent_iocs' or 'get_threat_feeds' by focusing specifically on CISA's KEV database, which is a distinct dataset of known exploited vulnerabilities rather than general indicators or feeds.
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 through the mention of filtering by days and vendor, suggesting it's for retrieving recent or vendor-specific vulnerabilities. However, it lacks explicit guidance on when to use this tool versus alternatives like 'get_recent_iocs' (which might overlap in recency) or 'check_network_against_threats' (which could involve KEV data), leaving the agent to infer context without clear exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboard_summaryB
Get a summary of all threat intelligence for dashboard display.
Returns: JSON with aggregated threat data for visualization
| 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?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns aggregated threat data for visualization, but doesn't cover critical aspects such as whether it's a read-only operation, potential rate limits, authentication requirements, data freshness, or any side effects. For a tool with no annotation coverage, this leaves key behavioral traits unspecified.
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 highly concise and well-structured: two sentences that directly state the purpose and return format without any fluff. The first sentence explains what the tool does, and the second clarifies the output, making it front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description doesn't need to detail inputs or return values. However, it lacks context on usage scenarios, behavioral traits, and differentiation from siblings, which are important for a tool in a server with multiple threat intelligence tools. The description is minimally adequate but has clear gaps in guidance and transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter-specific information, which is appropriate here. A baseline of 4 is applied since there are no parameters to document, and the description doesn't introduce any confusion or redundancy regarding 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 clearly states the tool's purpose: 'Get a summary of all threat intelligence for dashboard display.' It specifies the verb ('Get') and resource ('summary of all threat intelligence'), and the context ('for dashboard display') provides additional clarity. However, it doesn't explicitly differentiate from sibling tools like 'get_threat_stats' or 'get_recent_iocs', which might also provide aggregated data, so it doesn't reach the highest score.
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 mentions 'dashboard display' as a context, but doesn't specify scenarios, prerequisites, or exclusions. With sibling tools like 'get_threat_stats' and 'get_recent_iocs' that might overlap, the lack of comparative guidance is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_iocsB
Get recent IOCs (Indicators of Compromise) from ThreatFox.
Args: ioc_type: Filter by type (ip:port, domain, url, md5, sha256) limit: Maximum IOCs to return (default: 100, max: 500)
Returns: JSON with recent IOCs
| Name | Required | Description | Default |
|---|---|---|---|
| ioc_type | No | ||
| limit | No |
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 of behavioral disclosure. It mentions that the tool returns 'JSON with recent IOCs' but doesn't specify details like pagination, rate limits, authentication requirements, or error handling. For a tool with potential security implications (IOCs), this is a significant gap in transparency.
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 well-structured and front-loaded with the core purpose, followed by clear sections for 'Args' and 'Returns'. Every sentence earns its place by providing essential information without redundancy, making it efficient and easy to parse.
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 moderate complexity (2 parameters, no annotations, but with an output schema), the description is somewhat complete but has gaps. It covers parameters well and notes the return format, but lacks behavioral context (e.g., auth, rate limits) and doesn't leverage the output schema to detail the JSON structure, leaving room for improvement in overall completeness.
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 effectively explains both parameters: 'ioc_type' with its filter options (e.g., 'ip:port', 'domain') and 'limit' with its default and max values. This adds crucial meaning beyond the bare schema, though it could benefit from more detail on format constraints (e.g., URL encoding).
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 verb ('Get') and resource ('recent IOCs from ThreatFox'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'fetch_threat_feed' or 'get_threat_feeds', which might also retrieve threat data, leaving some ambiguity about when to choose this specific tool.
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 alternatives like 'fetch_threat_feed' or 'get_threat_feeds'. The description lacks context about prerequisites, such as whether authentication is needed, or any explicit exclusions, leaving the agent to infer usage based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threat_feedsB
Get list of all available threat intelligence feeds.
Returns: JSON with available feeds and their descriptions
| 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?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the return format ('JSON with available feeds and their descriptions'), which adds some context, but lacks details on permissions, rate limits, caching behavior, or whether this is a read-only operation. For a tool with zero annotation coverage, this is insufficient.
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 brief and front-loaded, stating the purpose in the first sentence and the return format in the second. Both sentences add value, with no wasted words. However, it could be slightly more structured by explicitly separating usage context from output details.
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 has an output schema, the description doesn't need to explain return values in detail, which it acknowledges. However, with no annotations and multiple sibling tools, the description lacks context on behavioral traits and usage differentiation. It's minimally adequate but has clear gaps in guiding the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate given the schema's completeness. A baseline of 4 is applied since there are no parameters to document.
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 verb 'Get' and resource 'list of all available threat intelligence feeds', making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'fetch_threat_feed' or 'get_recent_iocs', which might have overlapping functionality. The description is specific about what it returns but lacks sibling 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?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'fetch_threat_feed' and 'get_recent_iocs', there's no indication of whether this tool is for metadata listing, bulk retrieval, or other contexts. No prerequisites or exclusions are mentioned, leaving usage ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threat_statsB
Get statistics about loaded threat data and cache status.
Returns: JSON with threat intelligence statistics
| 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?
No annotations are provided, so the description carries the full burden. It mentions 'cache status' which hints at behavioral aspects related to caching, but doesn't disclose details like whether this is a read-only operation, performance characteristics, or error handling. The description adds some context but lacks comprehensive behavioral traits.
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 brief with two sentences, but the second sentence 'Returns: JSON with threat intelligence statistics' is redundant given the output schema exists. This wastes space without adding value, reducing efficiency.
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 (0 parameters, output schema provided), the description is mostly complete. It covers the purpose and hints at cache-related behavior, but could benefit from more usage guidance relative to siblings. The output schema handles return values, so no need to explain them in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here, and the baseline for 0 parameters is 4, as it avoids unnecessary repetition.
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 the verb 'Get' and resource 'statistics about loaded threat data and cache status', making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_dashboard_summary' or 'get_threat_feeds', which might provide overlapping or related statistics.
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. With siblings like 'get_dashboard_summary' and 'get_threat_feeds' that might offer similar or complementary data, there's no indication of context, prerequisites, or exclusions to help an agent choose appropriately.
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.
11 tool updates
- First observed
check_bulk_ips - First observed
check_hash_reputation - First observed
check_ip_reputation - First observed
check_network_against_threats - First observed
clear_threat_cache - First observed
fetch_threat_feed - First observed
get_cisa_kev - First observed
get_dashboard_summary - First observed
get_recent_iocs - First observed
get_threat_feeds - First observed
get_threat_stats
TDQS
Each tool has a clearly distinct purpose with no ambiguity. The tools cover specific threat intelligence operations like checking IPs/hashes, fetching feeds, getting CISA KEVs, retrieving IOCs, and managing cache/stats, all with well-defined boundaries. There is no overlap that would cause misselection.
Tool names follow a consistent verb_noun pattern throughout, such as check_bulk_ips, fetch_threat_feed, get_cisa_kev, and clear_threat_cache. All tools use snake_case with clear, descriptive names that align with their functions, making them predictable and readable.
With 11 tools, the count is well-scoped for a threat intelligence server, covering essential operations like reputation checks, feed management, data retrieval, and cache control. Each tool earns its place without feeling excessive or insufficient for the domain.
The tool surface provides complete coverage for threat intelligence workflows, including checking various IOCs (IPs, hashes, networks), fetching and managing feeds, retrieving vulnerabilities and recent IOCs, and supporting dashboards and statistics. There are no obvious gaps that would hinder agent operations.
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
Threat intel + your scans/findings/Shield posture. CVE, EPSS, KEV, package vuln lookup, DAST.
AI-powered threat intelligence, smart contract auditing, and cybersecurity OSINT.
Enrich, search, assess, and manage threat intelligence through 80+ typed MCP tools.
55 tools, 7 Resources, Sigma rules, email SPF/DMARC, MITRE, CVE/KEV, risk_score. No key.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI-powered threat intelligence analysis of IPs, domains, URLs, and file hashes across multiple threat intelligence platforms (VirusTotal, AlienVault OTX, AbuseIPDB, IPinfo) with APT attribution and interactive reporting through natural language queries.39Apache 2.0
- AlicenseAqualityCmaintenanceProvides unified access to multiple threat intelligence sources like AlienVault OTX, AbuseIPDB, and GreyNoise for security research and analysis. It enables users to perform simultaneous lookups on IPs, domains, hashes, and URLs across several platforms within a single response.7507MIT
- FlicenseNot gradedqualityDmaintenanceProvides threat intelligence and vulnerability research tools by integrating with NVD, VirusTotal, AbuseIPDB, Shodan, and MITRE ATT\&CK. It enables users to perform CVE lookups, analyze IP reputation, and retrieve detailed MITRE ATT\&CK technique information.1-
- FlicenseAqualityNot gradedmaintenanceProvides real-time threat intelligence including IP risk scores, CVE lookups, and malware hash analysis without requiring an API key. It enables users to monitor active threats, predict CISA KEV additions, and detect pre-attack infrastructure staging through natural language.8-
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/marc-shade/world-intel-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server