Skip to main content
Glama
Abraar02

ThreatWatch MCP

by Abraar02

๐Ÿ›ก๏ธ 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.

Python 3.11+ License: Apache-2.0 MCP


โœจ 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

analyze_ioc

Analyse a single IP / domain / URL / hash

bulk_analyze

Analyse up to 50 IOCs concurrently

detect_iocs_in_text

Extract IOCs from log files, reports, pastes

add_watch

Add an IOC to the real-time watch-list

remove_watch

Remove an IOC from the watch-list

list_watches

Show all monitored IOCs and their status

get_alerts

Retrieve alerts from monitored IOCs

run_monitor_cycle

Manually trigger a re-scan of all watches

server_status

Show configured sources and monitor state


๐Ÿš€ Installation

Prerequisites

  • Python 3.11 or higher

  • Claude Desktop

  • API keys (see below โ€” all free tier)

Step 1 โ€” Clone the repo

git clone https://github.com/YOUR_USERNAME/threatwatch-mcp.git
cd threatwatch-mcp

Step 2 โ€” Install

pip3 install fastmcp httpx python-dotenv
pip3 install -e .

Step 3 โ€” Verify installation

which threatwatch

You 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

virustotal.com

AlienVault OTX

Recommended

Unlimited

otx.alienvault.com

AbuseIPDB

Optional

1,000 req/day

abuseipdb.com

IPinfo

Optional

50,000 req/month

ipinfo.io

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.json

Windows:

%APPDATA%\Claude\claude_desktop_config.json

Step 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 threatwatch block inside your existing mcpServers object โ€” 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 .env file โ€” it is in .gitignore by default

  • Restrict config file permissions on your machine:

    chmod 600 ~/Library/Application\ Support/Claude/claude_desktop_config.json
  • All 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

Available Tools

9 tools
add_watchAdd WatchA

Add an IOC to the real-time watch-list. ThreatWatch will periodically re-scan it and flag changes in threat status.

ParametersJSON Schema
NameRequiredDescriptionDefault
iocYesThe indicator to monitor (IP, domain, URL, hash).
labelNoOptional human-readable label (e.g. "customer gateway").
alert_onNoList of severities to alert on. Options: "malicious", "suspicious", "any_change". Default: ["malicious", "suspicious"].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
iocYesThe indicator to analyse (IP, domain, URL, or file hash).
include_rawNoIf True, append raw JSON responses from each source.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
iocsYesList of indicators (IPs, domains, URLs, hashes). Max 50.
max_concurrentNoMaximum parallel requests per source (default 5).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesRaw text to scan for indicators.
auto_analyzeNoIf True, automatically analyse each discovered IOC.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
severityNoFilter by severity โ€” "malicious", "suspicious", or "all".all
mark_readNoMark returned alerts as read (default True).
since_minutesNoReturn alerts from the last N minutes (default 60).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
watch_idYesThe ID returned by add_watch (or shown in list_watches).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 9 tool updatesv1.0.0
    • First observedadd_watch
    • First observedanalyze_ioc
    • First observedbulk_analyze
    • First observeddetect_iocs_in_text
    • First observedget_alerts
    • First observedlist_watches
    • First observedremove_watch
    • First observedrun_monitor_cycle
    • First observedserver_status

TDQS

A3.8/5.0

Scored across 9 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

With 9 tools, the set is well-scoped for a threat intelligence watch server, covering analysis, watch-list management, monitoring, and alerting without redundancy.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enterprise network analysis platform that enables AI-powered packet analysis, threat detection, and network security capabilities through Claude Desktop integration.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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 PyPI
    39
    Apache 2.0
  • A
    license
    C
    quality
    C
    maintenance
    An 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.
    29
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    This 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
    -