ThreatWatch MCP
Provides tools for analyzing IPs, domains, URLs, and hashes using VirusTotal's threat intelligence data.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ThreatWatch MCPAnalyze IP 185.220.101.1 for threats"
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.
๐ก๏ธ ThreatWatch MCP
AI-Powered Threat Intelligence with Real-Time Alert Monitoring
A Model Context Protocol (MCP) server that brings multi-source threat intelligence directly into Claude Desktop and any MCP-compatible AI assistant.
โจ What Makes ThreatWatch Different
Feature | ThreatWatch | fastmcp-threatintel |
Real-time watch-list & alerts | โ | โ |
Persistent alert history | โ | โ |
Shodan InternetDB (free, no key needed) | โ | โ |
Status-change detection | โ | โ |
IOC extraction from freeform text | โ | โ |
Works with zero API keys | โ | โ |
Related MCP server: FastMCP ThreatIntel
๐ Available MCP Tools
Tool | Description |
| Analyse a single IP / domain / URL / hash |
| Analyse up to 50 IOCs concurrently |
| Extract IOCs from log files, reports, pastes |
| Add an IOC to the real-time watch-list |
| Remove an IOC from the watch-list |
| Show all monitored IOCs and their status |
| Retrieve alerts from monitored IOCs |
| Manually trigger a re-scan of all watches |
| Show configured sources and monitor state |
๐ Installation
Prerequisites
Python 3.11 or higher
API keys (see below โ all free tier)
Step 1 โ Clone the repo
git clone https://github.com/YOUR_USERNAME/threatwatch-mcp.git
cd threatwatch-mcpStep 2 โ Install
pip3 install fastmcp httpx python-dotenv
pip3 install -e .Step 3 โ Verify installation
which threatwatchYou should see a path like /usr/local/bin/threatwatch or
/Library/Frameworks/Python.framework/Versions/3.x/bin/threatwatch.
Copy this path โ you'll need it in Step 5.
๐ API Keys (All Free)
Source | Required | Free Limit | Sign Up |
VirusTotal | Recommended | 1,000 req/day | |
AlienVault OTX | Recommended | Unlimited | |
AbuseIPDB | Optional | 1,000 req/day | |
IPinfo | Optional | 50,000 req/month | |
Shodan InternetDB | None needed | Always free | Built-in |
ThreatWatch works with zero API keys โ Shodan InternetDB is always available and returns open ports, CVEs, and hostnames for any IP for free.
โ๏ธ Connect to Claude Desktop
Step 4 โ Open the Claude Desktop config
macOS:
open -e ~/Library/Application\ Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonStep 5 โ Add ThreatWatch
Add the threatwatch entry to your mcpServers block.
Replace the command path with the output of which threatwatch from Step 3,
and fill in your API keys:
{
"mcpServers": {
"threatwatch": {
"command": "/Library/Frameworks/Python.framework/Versions/3.13/bin/threatwatch",
"env": {
"VIRUSTOTAL_API_KEY": "your_virustotal_key_here",
"OTX_API_KEY": "your_otx_key_here",
"ABUSEIPDB_API_KEY": "your_abuseipdb_key_here",
"IPINFO_API_KEY": "your_ipinfo_key_here"
}
}
}
}If you already have other MCP servers configured, just add the
threatwatchblock inside your existingmcpServersobject โ don't replace the whole file.
Step 6 โ Restart Claude Desktop
Fully quit Claude Desktop (Cmd + Q on Mac, system tray โ Exit on Windows)
and reopen it.
Step 7 โ Verify
Click the "+" button at the bottom of the Claude chat โ Connectors. You should see ThreatWatch listed with all 9 tools.
Then test it:
Run server_status๐ฌ Example Prompts
Analyse IP 185.220.101.1 for threats
Check if domain update-adobe-flash.ru is malicious
Is this hash dangerous: d41d8cd98f00b204e9800998ecf8427e
Extract all IOCs from this log and analyse them:
[paste your firewall log, SIEM alert, or email header]
Add a watch on 185.220.101.1 and alert me if it becomes malicious
Get all alerts from the last hour
Run a full monitor cycle now๐ How Real-Time Monitoring Works
add_watch("185.220.101.1", alert_on=["malicious", "suspicious"])
โ
โผ
Watch-list saved to ~/.threatwatch/watchlist.json
โ
โผ
run_monitor_cycle() โ trigger manually or on a schedule
โ
โผ
Re-queries all sources for each watched IOC
โ
โผ
Status changed or threshold crossed?
โ
Yes โ No
โผ โผ
Alert (no-op)
โ
โผ
get_alerts(since_minutes=60)๐๏ธ Project Structure
threatwatch-mcp/
โโโ src/
โ โโโ threatwatch/
โ โโโ __init__.py โ package definition
โ โโโ server.py โ FastMCP server + all 9 MCP tools
โ โโโ config.py โ settings from environment variables
โ โโโ ioc_detector.py โ IOC type detection (IP/domain/URL/hash)
โ โโโ intel_sources.py โ API adapters (VT, OTX, AbuseIPDB, IPinfo, Shodan)
โ โโโ alert_monitor.py โ real-time watch-list + alert engine
โ โโโ reporter.py โ Markdown report builder
โโโ tests/
โ โโโ test_core.py โ unit tests
โโโ pyproject.toml โ package config + dependencies
โโโ .env.example โ environment variable template
โโโ README.md๐ Security Notes
Never commit your
.envfile โ it is in.gitignoreby defaultRestrict config file permissions on your machine:
chmod 600 ~/Library/Application\ Support/Claude/claude_desktop_config.jsonAll API keys used are read-only โ they can query data but cannot modify anything
If a key is ever leaked, regenerate it instantly from each service's dashboard
๐งช Running Tests
pip3 install pytest pytest-asyncio
pytest tests/ -v๐ License
Apache 2.0 โ see LICENSE for details.
๐ Acknowledgments
FastMCP โ the MCP framework that powers ThreatWatch
fastmcp-threatintel โ original inspiration
VirusTotal, AlienVault OTX, AbuseIPDB, IPinfo, Shodan โ threat intelligence sources
Available Tools
9 toolsadd_watchAdd WatchA
Add an IOC to the real-time watch-list. ThreatWatch will periodically re-scan it and flag changes in threat status.
| Name | Required | Description | Default |
|---|---|---|---|
| ioc | Yes | The indicator to monitor (IP, domain, URL, hash). | |
| label | No | Optional human-readable label (e.g. "customer gateway"). | |
| alert_on | No | List of severities to alert on. Options: "malicious", "suspicious", "any_change". Default: ["malicious", "suspicious"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses key behavior: periodic re-scanning and flagging of threat-status changes. It doesn't cover auth requirements, rate limits, or whether additions are idempotent, which limits it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste; the behavioral trait (periodic rescan / change flagging) is front-loaded immediately after the core action.
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?
Complete enough for a 3-parameter mutation tool: it explains the watch-list mechanism and what the tool will do over time, and an output schema exists so return values need no explanation. It could be richer on auth or error behavior, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents ioc, label, and alert_on (including severity options and defaults). The description adds no parameter-level detail beyond what the schema provides. Baseline 3 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?
States a specific verb (Add) and resource (IOC to the real-time watch-list), and contrasts with siblings like analyze_ioc (one-shot) and remove_watch/list_watches (lifecycle counterpart). An agent can identify it as the creation operation for the watch-list without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (to track an IOC over time via periodic re-scan) versus one-shot siblings like analyze_ioc. However, it doesn't explicitly state when not to use it or name the alternatives, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_iocAnalyze IocB
Analyse a single Indicator of Compromise (IOC) across all available threat intelligence sources.
Supports: IPv4/IPv6 addresses, domain names, URLs, MD5/SHA1/SHA256 hashes.
| Name | Required | Description | Default |
|---|---|---|---|
| ioc | Yes | The indicator to analyse (IP, domain, URL, or file hash). | |
| include_raw | No | If True, append raw JSON responses from each source. |
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 behavioral burden. It discloses that analysis spans 'all available threat intelligence sources' (implying multiple external lookups), but says nothing about permissions, rate limits, latency, network egress, or how unknown/malformed indicators are handled.
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 short, front-loaded sentences: purpose first, then supported formats. Every line earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. However, with zero annotations on a tool that fans out to external intelligence sources, the description omits operational context (external calls, failure/unknown-indicator behavior) that an agent would benefit from.
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 the 'ioc' and 'include_raw' parameters are already documented in the schema, including the supported formats. The description's list of supported IOC types duplicates rather than extends that, so baseline 3 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?
States a specific verb (analyse), resource (Indicator of Compromise), and scope ('a single ... IOC across all available threat intelligence sources'), and the word 'single' implicitly contrasts with the bulk_analyze sibling. It stops short of naming that alternative explicitly, so it is clear but not sibling-differentiating at the highest level.
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 when-to-use guidance is offered: nothing tells the agent when to prefer this over bulk_analyze or detect_iocs_in_text, and no prerequisites or exclusions are stated. Usage is only inferable from the word 'single'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_analyzeBulk AnalyzeB
Analyse multiple IOCs concurrently and return a consolidated summary.
| Name | Required | Description | Default |
|---|---|---|---|
| iocs | Yes | List of indicators (IPs, domains, URLs, hashes). Max 50. | |
| max_concurrent | No | Maximum parallel requests per source (default 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. 'Concurrently' and 'consolidated summary' hint at parallel execution and aggregated output, but there is no information on auth requirements, throttling, partial-failure behavior, or cost, which matter for a 50-item batch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the action, target, and result are stated immediately. Nothing is wasted.
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?
An output schema exists, so explaining return values is unnecessary, and the schema covers both parameters fully. However, for a batch/concurrent tool with zero annotations, the silence on concurrency limits, error semantics, and sibling choice leaves 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?
Schema description coverage is 100%, so both 'iocs' and 'max_concurrent' are already documented in the schema, including the max-50 cap and default of 5. The description adds nothing beyond that, so the baseline of 3 is correct.
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 gives a specific verb ('Analyse') plus a clear resource ('multiple IOCs') and states the output shape ('consolidated summary'). It implicitly separates itself from the singular analyze_ioc through 'multiple', but never names the sibling explicitly, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says to prefer this over analyze_ioc for batches, nor when a single analyze_ioc call is more appropriate. No mention of prerequisites, rate limits, or failure handling that a batch operation would normally need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_iocs_in_textDetect Iocs In TextA
Extract all IOCs (IPs, domains, URLs, hashes) from freeform text such as log files, incident reports, or paste-bin content.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Raw text to scan for indicators. | |
| auto_analyze | No | If True, automatically analyse each discovered IOC. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the extraction scope and IOC types, but omits details such as whether extraction is deduplicated, ordered, limited by input size, or whether auto_analyze triggers side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It states the action, resources, and input context efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need not be explained. Parameter semantics are covered by the schema, and the description adequately frames the tool's purpose, though it could add more when-to-use guidance for the sibling analysis tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the input schema. The description adds no parameter-specific syntax or behavior beyond what the schema provides, making the baseline 3 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 and resource: extract all IOCs from freeform text. It names the IOC types (IPs, domains, URLs, hashes) and input sources, making it distinguishable from sibling analysis tools like analyze_ioc and bulk_analyze.
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 examples such as log files, incident reports, and paste-bin content, but it does not explicitly say when to use this tool instead of analyze_ioc or bulk_analyze. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alertsGet AlertsC
Retrieve alerts generated by the real-time monitor for watched IOCs.
| Name | Required | Description | Default |
|---|---|---|---|
| severity | No | Filter by severity โ "malicious", "suspicious", or "all". | all |
| mark_read | No | Mark returned alerts as read (default True). | |
| since_minutes | No | Return alerts from the last N minutes (default 60). |
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 behavioral burden, and it discloses almost nothing beyond 'retrieve'. Critically, mark_read defaults to true, meaning a nominally read-shaped call mutates state (marking alerts read) โ the description never warns about this side effect, nor about the default 60-minute window or volume limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is tight, though arguably under-specified rather than genuinely concise for a tool with a mutation side effect.
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?
An output schema exists, so return values need not be described, and parameter semantics are fully covered by the schema. However, the mark_read write side effect and the relationship to the monitor cycle are absent, leaving the agent with gaps a single sentence could have closed.
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 the schema already documents severity, mark_read, and since_minutes with defaults. The description adds no parameter meaning beyond that, which is the baseline 3 when the schema does the heavy lifting.
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 (Retrieve) and resource (alerts) with the source scoped to 'real-time monitor for watched IOCs'. It is understandable on its own, though it does not explicitly distinguish itself from siblings like run_monitor_cycle or list_watches.
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 on when to use this versus run_monitor_cycle (which presumably produces these alerts) or list_watches. There are no prerequisites, no mention of ordering or freshness relative to monitoring cycles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watchesList WatchesA
List all IOCs currently on the watch-list with their last-known status.
Returns: Markdown table of watched IOCs.
| 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 exist, so the description carries the full disclosure burden. It usefully states that it returns a markdown table including last-known status, but says nothing about permissions, freshness of the status data, or pagination. For a read-only listing tool the risk profile is low, so this is adequate rather than alarming.
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 short sentences, the action front-loaded and the return shape stated second. No filler, no restatement of the title.
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?
An output schema exists, so the return values need not be spelled out, and with no input parameters the description is nearly complete. The only thin spot is the absence of any usage context, which keeps it short of full marks.
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 takes zero parameters, so there is nothing for the description to disambiguate beyond confirming it is unfiltered. Baseline of 4 applies for a parameterless tool.
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?
Specific verb ('List') plus a well-scoped resource ('IOCs currently on the watch-list') with the returned attribute (last-known status) named. It is clearly distinguishable from siblings like add_watch, remove_watch, and analyze_ioc, though it never explicitly contrasts itself with them.
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 says what the tool returns but gives no when-to-use guidance, no conditions, and no mention of alternatives such as get_alerts or the watch-modification siblings. The agent must infer the intended invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_watchRemove WatchC
Remove an IOC from the real-time watch-list.
| Name | Required | Description | Default |
|---|---|---|---|
| watch_id | Yes | The ID returned by add_watch (or shown in list_watches). |
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 bears the full burden. 'Remove' implies a destructive mutation and notes the watch-list is real-time, but it doesn't address reversibility, side effects on active monitoring, or whether removal requires authorization. The output schema is present, but behavioral context for a mutation tool remains thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no waste. It is appropriately sized for a simple one-parameter removal tool, though it could front-load a bit more operational context.
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 an output schema and full parameter coverage, the definition is minimally complete, but for a mutation tool with no annotations it should convey more about effects and prerequisites. It does enough for an agent to act but leaves behavioral questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema itself explains watch_id originates from add_watch or list_watches. The description adds no further parameter detail, so the baseline 3 is appropriate since the schema does the work.
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 (remove) and resource (IOC from the real-time watch-list), which clearly distinguishes it from siblings like add_watch and list_watches. The action and target are unambiguous, though it doesn't explicitly reference the sibling relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. An agent could infer it's the inverse of add_watch, but the description doesn't say so, and no preconditions or context for removal are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_monitor_cycleRun Monitor CycleA
Manually trigger a monitoring cycle โ re-scans all watched IOCs immediately rather than waiting for the next scheduled interval.
Returns: Summary of how many IOCs were checked and how many triggered alerts.
| 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, the description carries the full behavioral burden. It does disclose a meaningful side effect โ that a manual run re-scans all watches and can produce alerts โ but says nothing about cost, rate limits, permissions, or whether it can collide with an in-flight scheduled cycle.
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 tight, front-loaded sentences with no filler, and the trigger semantics come first. The 'Returns:' block is mildly redundant given that an output schema already exists, which keeps it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter trigger with an output schema, the description covers the only things an agent needs: what it does, that it affects all watches immediately, and that alerts may follow. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool 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?
States a specific verb and resource ('manually trigger a monitoring cycle') and clarifies scope ('re-scans all watched IOCs'), which separates it from the single-IOC siblings like analyze_ioc. It never names a sibling tool outright, so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'rather than waiting for the next scheduled interval' gives a clear condition for reaching for this tool (need an immediate rescan). There is no explicit when-not guidance, no mention of the alternative tools, and no note on whether it should be run alongside a scheduled cycle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusServer StatusA
Return the current ThreatWatch server status including configured API sources, watch-list size, and pending alert count.
Returns: A Markdown status card.
| 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 behavioral burden. It discloses the return content and format ('Markdown status card'), but does not explicitly state read-only safety, side effects, authentication needs, or rate limits. 'Return' implies a safe read, but this is not made fully explicit.
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 short sentences, front-loaded with purpose and followed by return format. It is appropriately sized and contains no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, empty input schema, and presence of an output schema, the description is nearly complete. It names the included status fields and return format, though it lacks explicit usage routing and safety details.
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 zero parameters, so there are no parameter semantics to document. Per the scoring rule, zero parameters establish a baseline of 4.
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 and resource: 'Return the current ThreatWatch server status.' It also enumerates what the status includes (configured API sources, watch-list size, pending alert count), distinguishing it from sibling tools like analyze_ioc or get_alerts.
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?
Usage is implied by the status-checking purpose, but the description does not explicitly say when to use this tool versus alternatives or when not to use it. An agent can infer it is for server health/status, but no routing guidance is provided.
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.
9 tool updates
v1.0.0- First observed
add_watch - First observed
analyze_ioc - First observed
bulk_analyze - First observed
detect_iocs_in_text - First observed
get_alerts - First observed
list_watches - First observed
remove_watch - First observed
run_monitor_cycle - First observed
server_status
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: status, single analysis, bulk analysis, watch management, alert retrieval, manual monitor, and text extraction. No overlap between tools; an agent can easily select the right one based on the action and resource.
All tool names follow a consistent verb_noun pattern (e.g., analyze_ioc, add_watch, get_alerts) or noun_status pattern (server_status), with clear and predictable naming throughout.
With 9 tools, the set is well-scoped for a threat intelligence watch server, covering analysis, watch-list management, monitoring, and alerting without redundancy.
The tool surface provides complete lifecycle coverage: analyze IOCs (single/bulk), manage watch-list (add/remove/list), monitor (manual/automatic), retrieve alerts, and extract IOCs. No obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
AI-powered threat intelligence, smart contract auditing, and cybersecurity OSINT.
Real-time threat intel for AI agents: 890K+ IOCs incl. prompt-injection & AI-skill threats
Enrich, search, assess, and manage threat intelligence through 80+ typed MCP tools.
Security intelligence for AI agents. 27 x402 endpoints: honeypot, forensics, CAPTCHA, preflight.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnterprise network analysis platform that enables AI-powered packet analysis, threat detection, and network security capabilities through Claude Desktop integration.1-
- 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.10 PyPI39Apache 2.0
- AlicenseCqualityCmaintenanceAn AI-powered penetration testing server that integrates over 30 security tools with Groq LLM analysis for automated vulnerability scanning, triage, and reporting. It enables users to perform comprehensive security assessments through natural language natively within Claude Desktop.29MIT
- FlicenseNot gradedqualityCmaintenanceThis MCP server connects Claude Desktop to OpenCTI for AI-augmented threat intelligence analysis, enabling natural language queries and instant, contextualized answers from your threat intelligence database.29-