Jeevesus — DugganUSA threat-intel MCP
Server Details
Membrane for AI agents: threat intel you can check, IOC enrichment, pre-install package checks.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Score is being calculated.
Available Tools
10 toolsai-model-priceLook up AI model pricesARead-onlyIdempotentInspect
Looks up what an AI model or an agent session costs at list price. Prices are dated and copied from each provider's own pricing page.
Returns the per-1M-token USD rates for a model (input, output, and for Anthropic models the 5-minute and 1-hour cache write, cache read and fast-mode rates), the date the provider page was checked, and the page it came from. Pass token counts to get an exact list-price cost for a call or a whole session.
With no args: lists every priced model and each provider's checked date. With {"model":"claude-opus-5-5","input_tokens":2,"cache_read_tokens":300000,"output_tokens":800}: returns the rates and the cost breakdown. A model not in the table returns UNPRICED — never $0.
Public read (no auth).
| Name | Required | Description | Default |
|---|---|---|---|
| fast | No | Anthropic fast mode (premium rates). | |
| model | No | Model id, e.g. "claude-opus-5-5", "gpt-4o-mini", "gemini-2.5-flash". Omit to list all priced models. | |
| input_tokens | No | ||
| output_tokens | No | ||
| cache_read_tokens | No | ||
| cache_write_1h_tokens | No | ||
| cache_write_5m_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real behavior beyond that: prices are dated and sourced from provider pages, the returned fields include the checked date and source page, Anthropic-specific cache and fast-mode rates are enumerated, and unknown models return the sentinel UNPRICED rather than $0. The "public read (no auth)" note is exactly the kind of context annotations cannot express.
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?
Front-loaded with the purpose, then return contents, then two concrete invocation examples including a literal argument object, then the auth note. Every sentence carries information, but the parenthetical enumerating cache rate types is dense and slightly harder to scan than the rest.
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?
There is no output schema, so the description must carry the return shape, and it does: per-1M-token USD rates, checked date, source page, and a cost breakdown. Auth, currency, rate units, and the UNPRICED edge case are all covered. Minor gaps remain around cost-breakdown structure (whether a total is included) and rounding precision.
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 only 29%, so the description must compensate, and it largely does: it explains that token counts turn the lookup into a cost computation, that omitting model lists everything, that cache write rates split into 5-minute and 1-hour, and that fast mode is a premium Anthropic rate. It does not spell out per-parameter behavior for each of the four token fields (e.g. how cache_write_1h_tokens interacts with cache_read_tokens), leaving some mapping to inference.
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: "Looks up what an AI model or an agent session costs at list price." It also scopes the data source ("copied from each provider's own pricing page") and names the two modes (list all models vs. compute cost). None of the sibling tools (check-package, search, enrich-ioc, etc.) overlap, so no differentiation is needed.
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?
Gives explicit invocation contexts: no args lists every priced model with checked dates; passing token counts yields an exact cost for a call or session. It also states the edge-case behavior (UNPRICED, never $0) and that no auth is required. It stops short of stating when an agent should prefer this over estimating from memory, but with unrelated siblings no alternative routing is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check-packageCheck a package before installARead-onlyIdempotentInspect
Checks whether a dependency (npm, PyPI, RubyGems or Packagist/Composer, or a GitHub Action used in a workflow) is on the DugganUSA malicious-package deny-list or has published advisories. Suited to a pre-install step in an agent or a CI pipeline, against slopsquatting and hijacked-package attacks.
Returns a crisp, machine-actionable verdict: {ecosystem, package, version, malicious, verdict:"block"|"allow"|"review", reason, advice, source}. malicious:true = the exact package is on our OSV-curated deny-list (230k+ named-not-heuristic entries across npm + PyPI + RubyGems; RubyGems coverage is thin and Packagist has NO deny-list entries at all, so on those two the OSV lookup and reputation signals are the whole check). malicious:false = not on our known-bad list — absence is NOT proof of safety, so still pin and review new deps. If a version is supplied and the entry is version-scoped, the check is version-aware; all-versions-malicious packages block on any version. With a version, it also checks OSV for published vulnerabilities in that exact version (known_vulnerabilities): a reputable package with known CVEs returns verdict:"review", never block.
One tool call, no auth.
Examples: {"ecosystem":"npm","name":"cxp-jquery"} → malicious:true, verdict:block. {"ecosystem":"pypi","name":"requests"} → malicious:false, verdict:allow. {"ecosystem":"rubygems","name":"rest-client","version":"1.6.13"} → RubyGems check, version-scoped. {"ecosystem":"github-actions","name":"tj-actions/changed-files@v45.0.7"} → owner/repo@ref (or name owner/repo + version); the 2025 compromise advisory makes this verdict:review. Pin a full commit SHA for the strongest check.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The package name to check. | |
| version | No | Optional exact version for version-aware checking. | |
| ecosystem | Yes | Package ecosystem: npm, pypi, rubygems (aliases gem, gems, ruby), packagist (aliases composer, php; name = vendor/package), or github-actions (aliases actions, gha; name = owner/repo or owner/repo@ref, version = the uses: ref: an exact tag or a full commit SHA). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, and the description still adds substantial behavioral context: no auth, one call, the exact verdict vocabulary, the meaning of malicious true vs false, and the important caveat that absence from the deny-list is not proof of safety. It also discloses coverage asymmetries (thin RubyGems, zero Packagist entries) that materially change how the result should be interpreted.
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?
Front-loads the verdict shape and caveats before the examples, and every paragraph carries information. The examples block is somewhat repetitive of the prose and the parenthetical ecosystem alias detail overlaps the schema, so it is slightly longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by spelling out the returned object fields, verdict semantics, and version-aware behavior, plus auth-free operation and coverage limits. An agent can call this and interpret the result correctly without further information.
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 baseline is 3; the description goes beyond it by explaining that supplying a version makes the check version-scoped, that all-versions-malicious packages block on any version, and that known CVEs downgrade a reputed package to 'review' rather than 'block'. The github-actions owner/repo@ref convention is covered largely by the schema wording, so the gain is real but partial.
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 ('checks whether a dependency ... is on the DugganUSA malicious-package deny-list') and enumerates the covered ecosystems, so the agent knows exactly what class of question this answers. It does not explicitly distinguish itself from the sibling tools check-repo and check-workflow, which is the one thing keeping it from a 5.
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?
Gives a clear usage frame ('suited to a pre-install step in an agent or a CI pipeline, against slopsquatting and hijacked-package attacks') and practical guidance to pin full commit SHAs and review new deps. It lacks an explicit exclusion rule pointing at siblings for repo- or workflow-level checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check-repoCheck a stranger's repository for run-on-open and install-time luresARead-onlyIdempotentInspect
Before you open or run a repository someone else sent you (a recruiter's coding test, a downloaded zip, a proof of concept), pass it the few files that matter and get a verdict. It looks for the places a lure hides that a dependency check never reads: npm install hooks that fetch or evaluate code, a VS Code task set to run when the folder opens, agent hooks and MCP servers in .claude, .cursor and .mcp.json, dev container lifecycle commands (initializeCommand runs on your own machine), yarnPath and foreign npm registries, git or URL dependencies, source that decodes and evaluates a payload, and setup.py that fetches or executes. Prompted by the 2026-10-29 Binance theft, where a compromised engineer's laptop is the first account and fake recruitment coding tests are the documented route of the group blamed.
Static and local: nothing is fetched, run or stored. Pass { "files": { "": "" } } with at most 40 files and 28000 characters in total (package.json, .vscode/tasks.json, .claude/settings.json, .mcp.json, .devcontainer/devcontainer.json, .yarnrc.yml, .npmrc, setup.py and any suspicious script). For a whole directory use the command line scanner or the DugganUSA Checks GitHub Action. Returns {verdict:"block"|"review"|"no-findings"|"unknown", findings:[{rule, severity, verdict, file, line, evidence, message, fix}], coverage, note}. "no-findings" means none of the listed patterns were seen in the files you sent; it does NOT mean the repository is safe. "unknown" means nothing was analyzed. Read the code on a machine that holds no credentials before you run it.
One tool call, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Map of repository-relative path to file text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, local, idempotent, non-destructive, but the description adds the crucial operational facts: static and local, nothing fetched, run, or stored, one call, no auth. It also pre-empts the most dangerous misreading by defining that 'no-findings' means only that the listed patterns were absent from the submitted files, not that the repo is safe, and that 'unknown' means nothing was analyzed.
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?
Front-loaded with the action and the verdict framing, then detection scope, then input limits, then return shape and the caveats — a sensible order. It is dense but long, and the Binance theft/recruitment-test backstory plus the near-duplicate restatement of the 40-file/28000-character caps already in the schema are the sentences that earn their place least.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description supplies everything an agent needs: input shape and limits, which files to send, the four possible verdict values with their meanings, the findings record fields, the presence of coverage and note, and the explicit non-guarantee of 'no-findings'. The limitations are stated rather than hidden.
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 documents the path-to-text map, so the baseline is met. The description goes beyond it by explaining the caps in prose (at most 40 files, 28000 characters total) and, more usefully, by naming the high-value paths to include — package.json, .vscode/tasks.json, .claude/settings.json, .mcp.json, .devcontainer/devcontainer.json, .yarnrc.yml, .npmrc, setup.py, plus any suspicious script — which is selection guidance the schema cannot express.
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: pass a stranger's repository files in and get a verdict on run-on-open and install-time lures. It enumerates the exact pattern classes it detects (npm install hooks, VS Code run-on-open tasks, .claude/.cursor/.mcp.json agent hooks, devcontainer initializeCommand, yarnPath, git/URL deps, decode-and-eval payloads, setup.py fetches), which clearly separates it from siblings like check-package and check-workflow.
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?
Explicitly frames the when: before opening or running a repo someone else sent you, with concrete triggers (recruiter coding test, downloaded zip, PoC). It also names the alternative paths for a different scope — the command line scanner or the DugganUSA Checks GitHub Action for a whole directory — and states the safety prerequisite of reading code on a credential-free machine.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check-workflowCheck a GitHub Actions workflow for script injectionARead-onlyIdempotentInspect
Checks the text of one GitHub Actions workflow file for script injection: places where text an outside user controls (an issue or pull request title or body, a comment, a branch name, a commit message) is pasted into a shell script or a github-script body, a privileged trigger that checks out a pull request's code, event text re-evaluated through eval, an externally triggerable workflow with open token permissions, and an AI agent action on such a trigger. Built from Radware's 2026-10-29 report of 83 hidden-command attacks on 61 public repositories.
Static and local: nothing is fetched, run or stored. Pass the workflow's YAML as text (max 28000 characters; use the DugganUSA Checks GitHub Action for whole repositories). Returns {verdict:"block"|"review"|"advisory"|"no-findings"|"unknown", findings:[{rule, severity, verdict, line, expression, message, fix}], coverage, note}. "no-findings" means none of the listed patterns were seen; it does NOT mean the workflow is safe. "unknown" means nothing was analyzed.
One tool call, no auth.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow | Yes | The workflow file text (the YAML of a file under .github/workflows). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and closed-world, and the description adds genuinely new behavior: nothing is fetched, run or stored; the 28000-character input cap; and, most importantly, the interpretation of the verdict values, including that 'no-findings' does not mean the workflow is safe and that 'unknown' means nothing was analyzed. That caveat is exactly the kind of context an agent needs to avoid over-reporting a clean result.
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?
Front-loaded with the purpose and the detection classes, then limits, then return semantics — a sensible order with no filler sentences. The provenance sentence about the Radware report and the named third-party Action are slightly promotional and only marginally aid invocation, keeping it out of the top score.
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?
There is no output schema, yet the description fully specifies the return shape: verdict enum with five values, the fields of each finding, plus coverage and note. Combined with the input cap and the stated analysis scope, an agent has everything needed to call this once and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter and the maxLength of 28000 is already declared in the schema, so the description's restatement adds no new constraint. It does clarify that the value is the file's YAML text for a file under .github/workflows, but that is close to what the schema property description already says — baseline 3.
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 (checks one GitHub Actions workflow file) and then enumerates the exact classes of defect it detects — user-controlled text pasted into shell/github-script, privileged PR-checkout triggers, eval re-evaluation, open token permissions on externally triggerable workflows, and AI agent actions. An agent can distinguish this from check-repo or check-package purely from the description.
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?
Gives clear usage context: pass a single workflow's YAML as text, and use a different mechanism (the DugganUSA Checks GitHub Action) when the target is a whole repository. That is an explicit scope boundary, though it does not name any of the sibling MCP tools as an alternative, so an agent must infer the contrast with check-repo.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
correlateCorrelate an indicator: do we hold it, and what is next to itARead-onlyIdempotentInspect
Answers two different questions about an IP address or domain, and keeps them apart: do we HOLD it, and what sits NEXT to it.
held is an exact yes or no, with held_in naming the lane that answered (iocs, the published blocklist lane, or the graph). neighbors is set membership in our indicator graph: the same /24 for an IPv4 address, the same registrable domain for a domain, with a real count (or "200+" with truncated:true when the scan hit its bound). neighbor_summary says what those neighbors are: how many are attributed to which actor or malware family, from how many lanes. A range we carry that covers the address, with no exact record, is reported as block_coverage, never as a detection.
strength is a single word for a hurried reader: none, adjacent-only, single-lane, multi-lane or corroborated. Read caveats before trusting it: a shared hosting platform or cloud range makes neighbors co-tenants, not related infrastructure, and the response says so when it applies.
Use it after enrich-ioc, or first, when the question is "is this part of something": a scanner next to a known C2, a lookalike domain on a campaign's registrar, a clean address in a dirty /24. Keyed Pro and Enterprise callers also get the neighbor rows themselves (neighbors.sample) to pivot on with enrich-ioc; free and anonymous callers get the counts and the summary.
Not consulted: our own edge observations (blocks, honeypot hits). Read-only. Hashes and URLs are not graph nodes; use enrich-ioc for those.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max neighbor rows returned to Pro and Enterprise callers. Default 10. Counts and the summary do not depend on it. | |
| indicator | Yes | An IPv4 address or a domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations it discloses a great deal: `held` vs `held_in` lane attribution, co-tenant false-positive risk from shared hosting/cloud ranges surfaced via `caveats`, truncation signaling with `truncated:true` at the scan bound, `block_coverage` being reported separately from a detection, and tier-based response differences for Pro/Enterprise versus free/anonymous callers. It also states what is explicitly not consulted (edge observations, honeypot hits).
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?
It is front-loaded with the two-question framing and organized into tight paragraphs covering returns, strength, usage, and exclusions. The field-name-heavy prose is dense but every paragraph carries information an agent needs; there is little filler, though the length is at the upper end for a two-parameter tool.
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?
There is no output schema, so the description carries the full burden of explaining return values, and it does so field by field (held, held_in, neighbors, neighbor_summary, block_coverage, strength, caveats, neighbors.sample). Combined with the usage and exclusion guidance, an agent can call this correctly and interpret the result without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, including the `limit` note that counts and summary do not depend on it. The description reinforces the accepted indicator types (IPv4 or domain) and explains why `limit` only affects Pro/Enterprise sample rows, adding modest but real meaning on top of 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 opens with a precise framing of the two questions it answers ('do we HOLD it, and what sits NEXT to it') and names the concrete resources involved: IPv4 addresses and domains. It clearly separates itself from `enrich-ioc` by defining correlation as graph/lane membership rather than enrichment.
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?
It gives explicit when-to-use conditions ('after `enrich-ioc`, or first, when the question is "is this part of something"') with concrete motivating examples (scanner next to known C2, lookalike domain, clean address in dirty /24). It also states the exclusions outright: hashes and URLs are not graph nodes, use `enrich-ioc` for those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enrich-iocEnrich an indicatorARead-onlyIdempotentInspect
Looks up an IP address, domain, URL or file hash, such as one from a message, log line, SIEM alert or code under review.
Look up a single indicator of compromise (IP, domain, URL, or hash) in the DugganUSA corpus. Returns the threat type, malware family, confidence and references of the record with the strongest attribution (first-party, then curated, then third-party; not necessarily the highest confidence), the attributed actor if any record names one, and a sources list with each record's source, actor, confidence, first_seen (the source's own date when the record carries one, such as a vendor report date, otherwise when it entered our corpus) and ingested_at (always when it entered our corpus, which is not when it was first observed) and description (up to 10). attribution names the strongest record's class. Read-only. Country is filled in only when the source records one; many feeds publish none.
Useful after search finds something, for the full attribution and cross-feed correlation, or directly when triaging a single indicator.
Pass the IOC as either indicator or value (both work). Optional type hint: ip / domain / url / hash / auto.
Examples: indicator="185.93.3.195" → ShinyHunters/UNC6040 infrastructure. indicator="goldenleafway.lat" → fresh Apothecary/ClearFake .lat rotation domain. indicator="ee28b3137d65d74c0234eea35fa536af" → Volexity-attributed malware MD5 (BrazenBamboo/DEEPDATA campaign).
Returns found: false when the indicator isn't in the corpus. That means we hold no record, not that it is safe.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional type hint. Default auto-detect. | |
| value | No | Alias of `indicator`. Either field works. | |
| indicator | No | The indicator to enrich (IP, domain, URL, or hash). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, the description discloses the attribution selection logic (first-party, then curated, then third-party, not necessarily highest confidence), the fields returned for the strongest record and sources, the difference between `first_seen` and `ingested_at`, and the important caveat that `found: false` does not mean the indicator is safe.
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 with front-loaded purpose, usage guidance, return semantics, and examples. It is somewhat verbose for a single-indicator lookup, and the first two sentences redundantly restate the same lookup 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?
There is no output schema, but the description thoroughly explains what is returned, including attribution, actor, source list fields, source count limits, and the not-found behavior. It also notes that country is only populated when the source provides it, which is the kind of operational caveat an agent needs.
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 the parameters and aliases. The description reinforces that `indicator` and `value` both work and gives example values, but its type hint list omits `email`, which the schema enum includes, so it adds only marginal parameter meaning and introduces a small omission.
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: look up a single indicator of compromise in the DugganUSA corpus. It explicitly scopes the tool to one IP, domain, URL, or hash and distinguishes its role from `search` by describing enrichment after search or direct single-indicator triage.
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?
It gives clear usage context: useful after `search` finds something, for attribution and cross-feed correlation, or directly during triage of a single indicator. It names the relevant sibling and implies single-indicator scope, but does not explicitly state when not to use this tool versus other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kev-exploitation-stickinessKEV exploitation stickinessARead-onlyIdempotentInspect
Measures whether a product's exploitation risk is chronic or a one-off, for patch prioritization.
Does in-the-wild exploitation risk STICK to proven products, or SPREAD to new ones? Analyzes CISA KEV: correlates each product's historical known-exploited count against its RECENT KEV additions (Spearman rho), and splits recent additions into repeat-offenders (products with a prior KEV) vs first-time products.
Answers "how should I prioritize patching — chase the chronic offenders, or watch for newcomers?" The result is computed live: it reports rho, the repeat-offender versus first-time split, the share concentrated in the 20 most-exploited products, and an interpretation sentence. This is product-level stickiness, a proxy for exploitation dynamics, not proof of exploit timing.
Public read (no auth). Pass {"days": N} for the recent window (30-720, default 180).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Recent-window size in days (30-720). Default 180. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (read-only, idempotent, non-destructive, closed-world), and the description adds genuinely useful context beyond them: results are computed live, the exact output components are enumerated (rho, repeat/first-time split, top-20 concentration share, interpretation sentence), and it flags that the metric is a proxy rather than exploit-timing proof. Authentication state ('public read, no auth') is also stated, which annotations do not express.
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?
Purpose is front-loaded in the first sentence, then mechanics, then the decision framing. Slightly redundant: the 'chase the chronic offenders, or watch for newcomers' question partly repeats the opening stickiness question, and the ALL-CAPS emphasis adds length without information.
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 one-optional-parameter tool with no output schema, the description carries the right load by enumerating return components and disclaiming interpretation. The only gap is that it never indicates how to read rho direction or magnitude, relying entirely on the returned `interpretation` sentence.
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 single `days` parameter, its 30-720 bounds and its default are already documented in the schema. The description restates the range and default and clarifies that the window defines which additions count as 'recent', but adds no guidance on how window length shifts the rho result. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific analytical operation: it correlates each product's historical KEV count against recent KEV additions via Spearman rho and splits repeat-offenders from first-time products. The verb+resource is concrete and product-level scope is explicit. It loses a point for never naming the closest sibling, kev-vendor-risk, so the agent must infer the vendor-vs-product distinction itself.
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?
Frames the decision it informs ('chase the chronic offenders, or watch for newcomers') and discloses the caveat that this is a proxy for exploitation dynamics, not proof of exploit timing. However, it gives no explicit when-to-use-this-instead-of guidance relative to kev-vendor-risk, and no exclusion conditions, leaving the sibling choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kev-vendor-riskKEV risk by vendorARead-onlyIdempotentInspect
Shows where confirmed exploitation concentrates for a vendor or product (Microsoft, Cisco, Fortinet, an appliance, an ERP), for questions like "what should I patch first".
Vendor / product risk matrix built from CISA's Known Exploited Vulnerabilities (KEV) catalog — where real, confirmed in-the-wild exploitation actually concentrates, not just where CVSS is high.
With no args: returns the top vendors ranked by KEV count (e.g. Microsoft, Cisco, Adobe, Ivanti, Citrix). With {"vendor":"Adobe"}: returns that vendor's or product's known-exploited CVEs (e.g. ColdFusion), most recent first, up to 50, each with a ransomware-use flag (Known or Unknown); kev_count is the full total and truncated says whether the list was cut.
Answers "which vendors/products carry the exploitation risk we should patch first," to assess third-party / supply-chain exposure, or to check whether a freshly-dropped PoC lands on a chronically-exploited product (a proven-soft target) versus a one-off. KEV means CISA has confirmed active exploitation.
Public read (no auth). Source is CISA's KEV catalog, synced daily.
Example: {"vendor":"Citrix"} → NetScaler's known-exploited CVEs; {} → the full top-vendor risk ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor | No | Optional vendor or product name (e.g. "Adobe", "Citrix", "SharePoint", "ColdFusion"). Omit for the top-vendor risk ranking. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower — yet the description still adds real value: no auth required, source is CISA KEV synced daily, results are most-recent-first capped at 50, and each record carries a ransomware-use flag plus kev_count/truncated metadata. That is return-shape and operational context the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded — the one-line hook, then the data source, then per-mode behavior, then use cases, then auth/sync note. It is somewhat longer than needed: the "what should I patch first" framing appears twice and the KEV-means-confirmed-exploitation point is restated in the second and sixth blocks. Trimming that repetition would tighten it without losing information.
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 one optional parameter and no output schema, the description carries the burden of describing returns — and it does, covering ranking output, per-vendor CVE lists, ordering, the 50-item cap, the ransomware flag, kev_count, and truncated. Auth requirements and source freshness are also stated, so nothing an agent needs to call this correctly 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 baseline is 3; the description exceeds it by explaining that omitting the parameter yields the ranked vendor matrix and that the parameter accepts product names as well as vendors ("an appliance, an ERP," ColdFusion, SharePoint, NetScaler). It clarifies the semantic breadth of a single string field rather than just restating it.
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 names a specific verb and resource: it shows where confirmed exploitation concentrates per vendor/product, built from CISA's KEV catalog, and it explicitly explains the two modes (no args = top-vendor ranking, vendor arg = that vendor's CVEs). An agent immediately understands the resource and scope. It stops short of a 5 because it never differentiates itself from the close sibling kev-exploitation-stickiness, leaving the agent to guess which KEV view to pick.
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 context is unusually concrete: "what should I patch first," third-party/supply-chain exposure assessment, and checking whether a fresh PoC lands on a chronically-exploited product. That covers multiple when-to-use scenarios. There are no explicit when-not conditions or named alternatives (e.g. kev-exploitation-stickiness, check-package), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch threat intelligenceARead-onlyIdempotentInspect
Searches threat-intelligence records about threat actors, malware, campaigns, CVEs, breaches, vendors and indicators. The default search covers security topics only; a few public-document archives can be searched by naming them (listed below). It holds no general programming or web content.
Hybrid (keyword + semantic) search across the DugganUSA threat-intelligence corpus (live counts: /api/v1/search/stats). Read-only, prompt-injection sanitized. Returns up to 25 hits, each with index, id, title, snippet, source, timestamp and url (null where the record has none), plus returned (hits in this response) and indexes_unanswered (any index that timed out). No total match count is given.
Searched by default: • iocs (indicators of compromise: IPs, domains, URLs, hashes, packages, with actor attribution) • adversaries (366 threat-actor profiles) • cisa_kev (CISA's Known Exploited Vulnerabilities catalog, synced daily) • pulses (OTX community pulses) • blog (1,800+ DugganUSA threat-intel research posts)
Searched only when named in indexes (public research archives, not threat intel):
• epstein_files (public Epstein court and DOJ documents)
• the_finders and bishop_accountability (public abuse-accountability archives)
• paranormal (fringe-research documents)
Examples: query="ClearFake" → returns the Apothecary/ClearFake records and the related research post. query="ShinyHunters" indexes="iocs,adversaries,blog" → the UNC6040 actor across indicators, its adversary profile and research posts. query="CVE-2026-31431" → the Linux kernel KEV entry plus public proof-of-concept repositories we have collected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, hard max 25). | |
| query | Yes | Search query. | |
| indexes | No | Optional comma-separated indexes. Default: iocs,adversaries,cisa_kev,pulses,blog. Archive indexes (epstein_files, the_finders, bishop_accountability, paranormal) are searched only when named. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent and non-open-world, yet the description still adds real behavior: hybrid keyword+semantic matching, prompt-injection sanitization, a hard 25-hit ceiling, per-hit field contents with nullable url, and the caveats that no total match count is returned and that `indexes_unanswered` flags timed-out indexes. This is the kind of partial-failure and result-shape information annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then result contract, then the index taxonomy, then examples—a sensible ordering. The bulleted index lists are dense but earn their space; only the 'live counts: /api/v1/search/stats' endpoint mention and the fairly long enumeration of per-hit fields feel like marginal padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return contract itself and does so thoroughly: hit fields, `returned`, `indexes_unanswered`, and the explicit absence of a total count. Combined with index scoping and example queries, an agent has enough to call this correctly and interpret the response, with only query-syntax detail 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 a 3 is the floor, but the description goes beyond it by explaining what each index actually contains (iocs with actor attribution, 366 adversary profiles, daily-synced CISA KEV, OTX pulses, 1,800+ blog posts) and why the archives are opt-in. It adds no guidance on `query` syntax—no mention of phrase, boolean, or field-prefix support—and `limit` is left entirely to 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?
Opens with a specific verb and resource ('Searches threat-intelligence records about threat actors, malware, campaigns, CVEs, breaches, vendors and indicators') and immediately bounds the scope ('no general programming or web content'). An agent can distinguish this from enrich-ioc, correlate, or check-package without opening any 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?
Explicitly states the default index set, that archive indexes are 'searched only when named', and that non-security content is out of scope, plus three worked examples showing index selection. It does not route the agent to sibling tools (e.g., when to prefer enrich-ioc or correlate over a broad search), which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stix-feed-summarySummarize the STIX feedARead-onlyIdempotentInspect
Summarizes what is in the feed right now: useful for "what's active this week", feed freshness, or planning SIEM / blocklist ingestion.
Shape report on the most recent 5,000 indicators in the DugganUSA STIX 2.1 feed, bounded to a 1-7 day window. Returns how many of those fall in the window (capped at 5,000), the top malware families or list labels (feeds such as Spamhaus DROP label by list, not family), top source feeds, a breakdown by indicator type, and top countries when the records carry one.
Useful before pulling the full STIX bundle, to gauge feed depth and freshness, plan a SIEM ingestion budget, or check that a campaign is in the corpus.
Does not return the full bundle (STIX 2.1 / TAXII 2.1), which is at bundle_url in the response and needs an API key.
Public read (no auth), cached for 10 minutes. The full bundle needs a free API key.
Example: {"days": 7} returns the last week's feed shape — useful for capacity planning and spot-checking recent ingest tags.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days (1–7). Default 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: the 5,000-indicator cap, the 1–7 day bound, a 10-minute cache, no-auth public read, and the fact that the full bundle lives at bundle_url and requires an API key. It also discloses edge behavior (feeds like Spamhaus DROP label by list rather than family; countries only present when records carry one), which the readOnly/idempotent annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return shape before caveats, and every paragraph is structurally distinct. There is some redundancy — SIEM ingestion planning is mentioned twice and the example sentence repeats capacity-planning framing already stated above.
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?
No output schema exists, so the description carries the burden of explaining return contents, and it does so exhaustively (counts, top families/labels, top feeds, type breakdown, countries, bundle_url). Auth, caching, and cap constraints are all covered for a single-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (min 1, max 7, default 1), so the baseline is 3, but the description adds meaning the schema does not: how the window interacts with the 5,000 cap, and a worked example `{"days": 7}`. Marginal but genuine added value over 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?
Opens with a specific verb and resource ("summarizes what is in the feed right now") and then enumerates exactly what the report contains: counts in window, top malware families or list labels, top source feeds, indicator-type breakdown, and top countries. It also explicitly distinguishes itself from the full STIX bundle, so an agent knows this is an aggregate view, not the data pull.
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?
Gives concrete when-to-use conditions ("what's active this week", feed freshness, planning SIEM/blocklist ingestion, checking a campaign is in the corpus) and names the alternative it precedes ("use before pulling the full STIX bundle"). It does not differentiate against the listed sibling tools such as enrich-ioc, correlate, or search, so routing between those is left to inference.
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.
10 tool updates
- First observed
ai-model-price - First observed
check-package - First observed
check-repo - First observed
check-workflow - First observed
correlate - First observed
enrich-ioc - First observed
kev-exploitation-stickiness - First observed
kev-vendor-risk - First observed
search - First observed
stix-feed-summary
Related MCP Connectors
Pay-per-call cybersecurity for AI agents: vuln scans, threat intel, compliance, code security.
Check packages for CVEs, slopsquatting, and CISA KEV before your AI agent installs them.
Pay-per-call safety checks for AI agents: screen a crypto address or URL before you transact.
Security intelligence for AI agents monitoring Ethereum before actions.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides real-time threat intelligence for AI agents, enabling checks on IPs, domains, URLs, hashes, CVEs, prompt-injection payloads, and malicious AI-skill/MCP-tool definitions against a free database of 890K+ IOCs.-
- AlicenseNot gradedqualityDmaintenanceValidates and checks packages across 19 ecosystems to prevent AI agents from installing hallucinated, deprecated, or malicious packages.55 npmAGPL 3.0
- AlicenseAqualityDmaintenanceDependency security & health auditing for AI agents with no account or API key required.22MIT
- AlicenseNot gradedqualityBmaintenanceIronheights: The Immune System for AI Agents. It protects any AI bot that installs it by checking an agent skill before install: A-F grade, findings, drift and threat model. Runs locally.5,177 npm4Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.