greynoise-mcp-server
OfficialThe GreyNoise MCP Server provides MCP-compatible clients with access to GreyNoise threat intelligence across the following capability areas:
IP Analysis
Lookup IP Context: Full details for a single IP (classification, tags, geo, scan/HTTP/TLS/SSH data, etc.)
Quick Check IP: Fast, lightweight classification for a single IP
Multi-IP Check: Bulk check up to 10,000 IPs at once
GNQL (GreyNoise Query Language) Search
GNQL Query: Full search with raw scan data and scroll pagination
GNQL Metadata Query: Lighter metadata-only search with optional CSV output
GNQL Stats: Aggregate statistics (top orgs, countries, tags, ASNs, classifications)
Recall / Timeseries Analysis
GNQL Timeseries: Hourly IP-activity records over a time range
GNQL Timeseries Stats: Unique-IP counts per hour/day over a time range
Tags
List, search, and get details for GreyNoise tags; view tag activity timeseries; analyze and aggregate tag activity summaries
Vulnerability Intelligence
Get CVE Details: CVSS/EPSS scores, KEV status, exploitation stats, and observed activity
Get Trending Vulnerabilities: Currently trending and anomalous vulnerability tags
Sensor Sessions
Search and filter sessions, discover field schema, aggregate counts, build connection graphs, view timeseries, get unique values, retrieve individual session metadata, and download PCAPs
Business Service Intelligence (BSI) (requires BSI license)
Single and bulk IPv4 provider lookups; statistics grouped by trust level, company, and category
Callback / C2 Intelligence (requires entitlement)
Look up individual callback/C2 IPs, list/filter/export them, and get aggregate overview statistics
Blocklists (requires entitlement)
Create, list, get, update, and delete dynamic GNQL-based blocklists; retrieve current IPs in a blocklist
Alerts (requires entitlement)
Create, list, get, update, enable, disable, and delete scheduled GNQL alerts; test webhook delivery
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@greynoise-mcp-serveranalyze IP 71.6.135.131"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GreyNoise MCP Server
A Model Context Protocol server for the GreyNoise API. It gives MCP-compatible clients (Claude Desktop, Claude Code, Cursor, etc.) access to GreyNoise threat intelligence — IP context, GNQL search, Recall timeseries, tags, CVEs, sensor sessions, BSI, callback/C2 data — plus operational tools to act on findings (blocklists and alerts).
Requires a GreyNoise API key. Your plan's entitlements determine which capabilities are available; the server exposes every tool and returns a clear "not entitled" message for any capability your plan doesn't include, so the rest keep working.
Installation
MCPB bundle (Claude Desktop)
Download greynoise-mcp-server.mcpb from the releases page and double-click to install. It prompts for your API key.
npx (config-based clients)
{
"mcpServers": {
"greynoise": {
"command": "npx",
"args": ["@greynoise/greynoise-mcp-server"],
"env": { "GREYNOISE_API_KEY": "your-greynoise-api-key" }
}
}
}Local build
{
"mcpServers": {
"greynoise": {
"command": "node",
"args": ["/absolute/path/to/greynoise-mcp-server/build/index.js"],
"env": { "GREYNOISE_API_KEY": "your-greynoise-api-key" }
}
}
}Related MCP server: OSINT MCP Server
Configuration
Variable | Required | Default | Purpose |
| yes (stdio) | — | GreyNoise API key. For HTTP transport the key is taken per-request from the |
| no |
| Override the API base (e.g. staging). |
| no |
| HTTP transport listen port. |
| no |
| Allowed Host header values (DNS-rebinding protection) for HTTP transport. |
Transports
npx @greynoise/greynoise-mcp-server # stdio (default)
npx @greynoise/greynoise-mcp-server --transport http # streamable HTTP on $PORTstdio is the default and what desktop/CLI clients use. HTTP transport authenticates each request via a Bearer token, builds an isolated server per request, and enforces DNS-rebinding protection. Express is loaded lazily for HTTP; install it if you use that transport (npm install express).
Capabilities
Every tool returns both human-readable text and machine-readable structuredContent (validated against a published outputSchema), and carries MCP annotations so clients can apply safety policy — read-only tools run freely; write tools are marked, and destructive ones (delete-*) request confirmation.
IP analysis
Tool | Description |
| Full context for one IP: classification, tags, ISI (scan/HTTP/TLS/SSH/TCP raw data), BSI, geo, network metadata. |
| Fast, lightweight classification + business-service check for one IP. |
| Check up to 10,000 IPs at once, with a summary breakdown. |
GNQL (GreyNoise Query Language)
Tool | Description |
| Full GNQL search including raw scan data; scroll pagination. |
| Lighter GNQL search (metadata only). Supports |
| Aggregate statistics for a GNQL query (top orgs, countries, tags, ASNs, classifications, …). |
Recall (temporal analysis)
Tool | Description |
| Hourly IP-activity records for a query over a time range. |
| Unique-IP counts per hour/day over a time range. |
Tags
Tool | Description |
| Complete tag list (cached 1h). |
| Search tags by query / category / intention / CVE. |
| Full record for one tag by id or slug. |
| Time-series activity for a tag or CVE. |
| Filter tags and aggregate their activity into a summary. |
Vulnerabilities
Tool | Description |
| GreyNoise intel for one CVE: CVSS/EPSS, KEV status, exploitation + observed activity. |
| Currently trending and anomalous vulnerability tags. |
Sessions (sensor network data)
Tool | Description |
| Query/filter sensor sessions over a time range (Lucene syntax). |
| Discover the queryable session field schema. |
| Session counts grouped by one or more fields (nested drill-down). |
| Connection graph (nodes + links) between source/destination fields. |
| Session volume over time, optionally grouped by a field. |
| Distinct values of a field, optionally with counts. |
| Full metadata for one session by ID. |
| Download one session's PCAP to a temp file. |
| Export a PCAP across multiple sessions matching a query. |
| Download one session as PCAP or raw payload. |
BSI — Business Service Intelligence (requires BSI license)
Tool | Description |
| Provider matches for one IPv4. |
| Provider matches for up to 1,000 IPv4 addresses. |
| IP/CIDR counts grouped by trust level / company / category. |
Callback / C2 (requires entitlement)
Tool | Description |
| One callback/C2 IP: attack stage, RIOT status, enrichment, downloaded files. |
| Paginated callback IPs filtered by stage, dates, file attributes, scanners. |
| Export matching callback IPs as a plain list. |
| Aggregate statistics for matching callback IPs. |
Operational — Blocklists (write; requires entitlement)
Tool | Notes |
| Create a dynamic blocklist from a GNQL query. |
| Read. |
| Update query/name/limit/enabled. |
| Destructive — clients confirm. |
Operational — Alerts (write; requires entitlement)
Tool | Notes |
| Scheduled GNQL alert with email/webhook recipients. |
| Read. |
| Update query/schedule/recipients/name/enabled. |
| Resume / pause. |
| Destructive — clients confirm. |
| Send a test payload to a webhook URL. |
Resources
Read-only URIs clients can fetch or reference directly:
Resource | Description |
| IP context (JSON). |
| CVE exploitation details (JSON). |
| Tag metadata by slug (with slug autocompletion). |
| A single GreyNoise research article. |
| List of published research articles. |
| Article categories. |
Prompts
Guided analysis workflows:
Prompt | Arguments ( |
|
|
|
|
|
|
|
|
|
|
|
|
Development
npm install
npm run build # bundle with tsup -> build/index.js
npm run dev # watch + rebuild + run
npm test # jest
npm run typecheck # tsc --noEmit
npm run pack:mcpb # build the .mcpb bundleThe zod schemas in src/greynoise/schemas/ are the single source of truth for API response shapes (they validate responses at runtime and drive each tool's outputSchema). A vendored copy of the API's OpenAPI spec lives in spec/oas-production.yaml; run the /update-api reconciliation to check tools/schemas against it.
Releasing
Releases are automated via GitHub Actions, with a manual approval gate. Two workflows:
.github/workflows/ci.yml— runs on every PR/push: typecheck, tests, build,npm audit, and a.mcpbbuild. No credentials required..github/workflows/release.yml— runs on av*tag: publishes to npm via staged publishing and drafts a GitHub Release with the.mcpb. Nothing goes public without a human.
Prerequisites (one-time, already configured)
npm Trusted Publisher (OIDC) — configured on npmjs.com for this repo +
release.ymlwithnpm stage publish(stage-only) permission. NoNPM_TOKENis stored; auth is tokenless via GitHub OIDC.The workflow has
id-token: writeandcontents: write, and upgrades npm to satisfy staged publishing (npm ≥ 11.15.0, Node ≥ 22.14).
Cutting a release
Push a version tag — that's the whole release. The git tag is the single source of truth: the workflow stamps it into package.json + manifest.json (and the User-Agent) at build time, so there's nothing to bump or keep in sync by hand.
git tag v0.5.1 && git push origin v0.5.1The tag triggers release.yml, which stages that version to npm and creates a draft GitHub Release. Neither is public yet.
Approving (the manual gate)
Staged publishes require a maintainer with 2FA — they can't be approved from CI (by design):
npm stage list @greynoise/greynoise-mcp-server # find the stage-id
npm stage view <stage-id> # (optional) inspect
npm stage approve <stage-id> # 2FA -> version goes live(Or approve from the package page on npmjs.com.) Then publish the draft GitHub Release from the Releases tab to make the .mcpb public.
Changelog
See NEWS.md.
Available Tools
46 toolsanalyze-tags-activityAnalyze Tags ActivityARead-only
Filter GreyNoise tags then aggregate their v3/tags/{id}/activity into a summary (total active IPs by classification, most active tags, per-tag detail). query substring-matches name/description/slug/label; category and intention are exact (case-insensitive) matches. days must be 1, 10, or 30 (default 30).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days of activity: 1, 10, or 30 | 30 |
| query | No | Substring to match in name, description, slug, or label | |
| category | No | Exact category match, e.g. 'activity' | |
| intention | No | Exact intention match, e.g. 'malicious', 'benign' |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| tags_detail | No | |
| time_period | No | |
| analyzed_tags | Yes | |
| most_active_tags | No | |
| total_active_ips_by_classification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world behavior. The description adds value by detailing parameter matching rules and the output summary structure. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first summarizes purpose and output, second details parameter behavior. It is concise, front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (though not shown), the description explains the summary output components and parameter behavior fully. Annotations provide open-world context. The description is complete for an agent to use 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 description coverage is 100%, and the description adds detailed semantics: query matches across multiple fields, category and intention are exact case-insensitive, and days restricted to specific values with default. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (filter and aggregate), the resource (GreyNoise tags activity), and the output summary (total active IPs by classification, most active tags, per-tag detail). It distinguishes from sibling tools like get-tag-details and get-tag-activity by focusing on aggregation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidelines for parameter matching: query substring-matches name/description/slug/label, category and intention are exact case-insensitive, and days must be 1, 10, or 30. It does not explicitly state when to use this tool over alternatives, but the aggregation purpose is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsi-bulk-lookupBSI Bulk IP LookupARead-only
Look up BSI provider matches for up to 1,000 IPv4 addresses. Results preserve request order; any IPv6 address fails the whole request with HTTP 400. Requires a BSI license.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | IPv4 addresses to look up (1-1000, IPv6 not supported) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), the description discloses order preservation, whole-request failure on IPv6, and license requirement—no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: first sentence states purpose and capacity, second covers order, failure mode, and prerequisites. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and full annotation coverage, the description still adds necessary constraints (IPv6 failure, license, order) and is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the 'ips' parameter (type, format, constraints). The description adds only behavioral context (order preservation) rather than clarifying parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (look up), resource (BSI provider matches), and constraints (up to 1,000 IPv4 addresses). It distinguishes this bulk tool from the likely single-IP sibling 'bsi-lookup'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: order preservation, IPv6 failure behavior, and license requirement. It does not directly name alternatives but the sibling list and task imply single vs bulk distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsi-category-statsBSI Category StatsARead-only
Counts of BSI IPs and CIDRs grouped by category. Requires BSI entitlements.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Snapshot date: 'now' (default, live BSI data) or 'YYYY-MM-DD' for historical data (404 if unavailable) |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | |
| stats | No | |
| source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is clear. The description adds the requirement for BSI entitlements, which is useful behavioral context. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core purpose and constraints with no extraneous content. Every word earns its place.
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?
The tool has an output schema, so return values are covered. The description is sufficient given the tool's simplicity (one optional parameter). It explains the data grouping and entitlement requirement, leaving no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a full description of the date parameter including pattern and default. The description adds no extra meaning beyond the schema, so 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?
The description clearly states the tool provides counts of BSI IPs and CIDRs grouped by category, and mentions required entitlements. It distinguishes effectively from sibling tools like bsi-company-stats or bsi-trust-stats, which group by different criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only notes that BSI entitlements are required. It does not provide guidance on when to choose this tool over siblings like bsi-company-stats or bsi-trust-stats, nor does it mention any scenarios where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsi-company-statsBSI Company StatsARead-only
Counts of BSI IPs and CIDRs grouped by company name. Requires BSI entitlements.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Snapshot date: 'now' (default, live BSI data) or 'YYYY-MM-DD' for historical data (404 if unavailable) |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | |
| stats | No | |
| source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, and the description adds the entitlement requirement. No further behavioral traits are needed; it does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the purpose and a constraint. Every word is necessary and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description adequately covers the purpose and a critical requirement. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and fully describes the `date` parameter. The description adds no additional parameter information, so baseline score of 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?
The description clearly states it counts BSI IPs and CIDRs grouped by company name, which is a specific verb and resource. It distinguishes from sibling tools like bsi-category-stats and bsi-trust-stats.
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 mentions a prerequisite (BSI entitlements) but does not provide explicit when-to-use or when-not-to-use guidance compared to alternatives. Usage is implied by the verb and grouping, but no sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsi-lookupBSI Single-IP LookupARead-only
Look up Business Service Intelligence provider matches for a single IPv4 address. Returns providers whose CIDRs contain the IP, in ascending precedence order (lower = higher priority). IPv6 is rejected. Requires a BSI license.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IPv4 address to look up (IPv6 not supported) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ip | No | |
| matches | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint (safe read) and openWorldHint (data not authoritative). The description adds valuable behavioral context: IPv6 is rejected, results are in ascending precedence order (lower = higher priority), and a license is required. No contradictions with annotations.
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 extremely concise, consisting of three short sentences that convey purpose, ordering, constraint, and license requirement. Every sentence carries essential information with no 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?
Given the presence of an output schema, the description need not detail return values. It adequately covers input constraints, output ordering, and license requirement. It could optionally note error handling (e.g., invalid IP format), but the schema's pattern already handles validation hints. Overall, it is sufficiently complete for a simple lookup 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?
The input schema has 100% coverage with a clear description, format, and pattern for the 'ip' parameter. The description reiterates 'single IPv4 address' and mentions IPv6 rejection, but adds no new semantics beyond the schema. With full schema coverage, a baseline of 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?
The description uses a specific verb 'look up' and clearly defines the resource as 'Business Service Intelligence provider matches for a single IPv4 address'. It distinguishes from siblings like multi-ip-check (single vs. multiple IPs) and other bsi-*-stats tools (provider matches vs. aggregated stats).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool requires a BSI license, providing a key precondition. It implicitly suggests usage for single IPv4 lookups, and by naming 'single IPv4 address' it hints not to use for multiple IPs (use multi-ip-check) or for category/company/trust stats. However, it does not explicitly list alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bsi-trust-statsBSI Trust-Level StatsARead-only
Counts of BSI IPs and CIDRs grouped by trust level. Requires BSI entitlements.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Snapshot date: 'now' (default, live BSI data) or 'YYYY-MM-DD' for historical data (404 if unavailable) |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | |
| stats | No | |
| source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint, so the safety profile is covered. The description adds the requirement for BSI entitlements, which is beyond annotations. However, no other behavioral traits (e.g., rate limits, output format) are disclosed.
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 extremely concise, consisting of two clear sentences with no extraneous information. It is front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description is sufficient for a simple read-only tool. It states the main function and a requirement. Some context about trust levels or data scope might be helpful but is not critical.
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 does not add meaning beyond the schema; the 'date' parameter is fully described in the schema, and the description makes no additional reference to parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool counts BSI IPs and CIDRs grouped by trust level, using a specific verb and resource. It distinguishes from sibling tools like bsi-category-stats and bsi-company-stats, which group by different dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Requires BSI entitlements' as a prerequisite, but does not provide explicit guidance on when to use this tool versus alternatives. Usage is implied by the title and the existence of sibling tools, but no when-not-to-use or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
callback-ip-lookupCallback IP LookupARead-only
Look up a single callback/C2 IP: attack stage, scanner associations, RIOT status, geo/network enrichment, and downloaded malware files.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | The callback IP address to look up |
Output Schema
| Name | Required | Description |
|---|---|---|
| ip | No | |
| is_riot | No | |
| last_seen | No | |
| enrichment | No | |
| file_count | No | |
| first_seen | No | |
| is_stage_1 | No | |
| is_stage_2 | No | |
| scanner_ips | No | |
| active_files | No | |
| attack_stage | No | |
| scanner_count | No | |
| riot_trust_level | No | |
| source_workspaces | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds rich behavioral context beyond annotations by detailing the exact return categories (attack stage, scanner associations, RIOT status, geo/network enrichment, downloaded malware files). No contradictions with annotations.
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?
Single sentence front-loaded with the main action, followed by a precise list of return fields. No wasted words; every phrase earns its place.
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?
Tool has one simple parameter and an output schema (not shown but indicated). Description fully explains what the tool does and what it returns, with no gaps. Annotations cover safety. Complete for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'ip', which is described as 'The callback IP address to look up'. The description does not add further parameter-level detail, but the high schema coverage meets the baseline. Description clarifies the return types, indirectly supporting parameter understanding.
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?
Description starts with a specific verb ('Look up') and resource ('single callback/C2 IP'), then enumerates return fields like attack stage, scanner associations, RIOT status, geo/network enrichment, and downloaded malware files. This clearly distinguishes it from siblings like 'list-callback-ips' (list) and 'quick-check-ip' (simpler check).
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?
Implies use for individual lookups via 'single callback/C2 IP', but provides no explicit context about when to use this tool versus alternatives like 'multi-ip-check' or 'bsi-lookup'. No when-not-to-use or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
callback-overviewCallback Overview StatisticsARead-only
Aggregate statistics for callback/C2 IPs matching the filters: counts by attack stage, file analysis status, RIOT trust levels, scanner associations, and top threat names. Bounded to a recent window (days: 1-7, default 1) — wider ranges overload the aggregation.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | No | Filter to this specific set of callback IPs | |
| days | No | Lookback window in days (1-7, default 1) | |
| file_hash | No | File SHA256 hash | |
| file_name | No | File name substring match | |
| file_type | No | File MIME type (e.g. "application/x-executable") | |
| has_files | No | true = only IPs with malware files; false = only IPs without files | |
| is_stage_1 | No | true = file was downloaded from this IP (stage 1) | |
| is_stage_2 | No | true = suspected C2 based on VT/sandbox analysis (stage 2) | |
| scanner_ips | No | Filter to IPs associated with these scanner IPs |
Output Schema
| Name | Required | Description |
|---|---|---|
| total_ips | No | |
| stage_1_ips | No | |
| stage_2_ips | No | |
| total_files | No | |
| not_riot_ips | No | |
| files_with_vt | No | |
| ips_with_files | No | |
| unconfirmed_ips | No | |
| files_without_vt | No | |
| riot_level_1_ips | No | |
| riot_level_2_ips | No | |
| riot_level_3_ips | No | |
| top_threat_names | No | |
| total_cross_refs | No | |
| distinct_scanners | No | |
| ips_with_scanners | No | |
| ips_without_files | No | |
| total_scanner_links | No | |
| ips_without_scanners | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and openWorld hints. The description adds the explicit time window constraint (1-7 days) and the performance overload warning, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: one summarizing the tool's function and output dimensions, the other stating the crucial time window constraint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 optional params, no required) and the presence of an output schema, the description covers the key information: purpose, grouping dimensions, and important usage bound. Could benefit from noting that output is aggregate only, but overall sufficient.
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% with descriptions for all 9 parameters. The description reinforces the days constraint and lists the output dimensions, providing context beyond the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it aggregates statistics for callback/C2 IPs, listing the exact breakdown dimensions (attack stage, file analysis, etc.), which distinguishes it from listing tools like list-callback-ips.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for aggregate stats with a recent window, but does not explicitly compare to siblings like list-callback-ips or bsi-trust-stats. The warning against wide ranges provides some guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-alertCreate AlertA
Create a scheduled alert that runs a GNQL query and notifies recipients (email/webhook) when it matches. Requires a plan entitled to alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Alert name | |
| query | Yes | GNQL query the alert monitors | |
| enabled | No | Whether the alert is active (default: true) | |
| schedule | Yes | When the alert query runs and notifies | |
| recipients | Yes | Where to send alert notifications | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. | |
| query_workspace_id | No | Workspace to run the query against, if different |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| type | No | |
| status | No | |
| enabled | No | |
| schedule | No | |
| created_at | No | |
| gnql_query | No | |
| parameters | No | |
| recipients | No | |
| updated_at | No | |
| workspace_id | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent, non-destructive action. The description adds the plan requirement and the basic behavior (runs query, notifies), but does not provide deeper behavioral details such as rate limits, idempotency guarantees, or consequences of creating an alert. With annotations present, the description adds some value but is not extensive.
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 contains two sentences that are front-loaded and to the point. No extraneous information. Every word contributes to the purpose and prerequisite.
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 create tool with a rich schema (7 parameters, nested objects, output schema), the description covers the core purpose and prerequisite. The output schema documents return values, so the description does not need to elaborate. Minor omission: it does not mention that workspace_id defaults to the bound workspace, but that is in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already documents each parameter. The description only restates that the alert 'runs a GNQL query', which is already in the schema. It adds no additional semantic meaning or examples beyond what the schema provides, so baseline score of 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?
The description clearly states the verb 'Create', the resource 'scheduled alert', and what it does ('runs a GNQL query and notifies recipients'). It distinguishes itself from sibling tools like list-alerts, update-alert, etc., which perform different actions on alerts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite ('Requires a plan entitled to alerts'), which provides usage context. However, it does not explicitly state when to use this tool vs alternatives like update-alert or delete-alert, though the tool name and purpose imply its usage for creation only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-blocklistCreate BlocklistA
Create a dynamic blocklist from a GNQL query. The blocklist auto-populates with IPs matching the query. Requires a plan entitled to blocklists.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-friendly blocklist name | |
| query | Yes | GNQL query whose matching IPs populate the blocklist | |
| enabled | No | Whether the blocklist is active (default: true) | |
| ip_limit | No | Max IPs to include | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| query | No | |
| token | No | |
| enabled | No | |
| ip_limit | No | |
| created_at | No | |
| updated_at | No | |
| workspace_id | No | |
| last_ip_count | No | |
| entitlement_level | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present (readOnlyHint false, destructiveHint false, etc.) and the description adds useful behavioral context: the blocklist auto-populates dynamically and requires a specific plan. This goes beyond what annotations provide, clarifying the resource nature and prerequisites.
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 extremely concise: two sentences that first state the purpose and then add a key prerequisite. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description does not need to explain return values. It covers the creation action, parameter semantics (via schema), and the prerequisite. It is sufficiently complete for the tool's complexity and sibling 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 the schema fully describes all five parameters. The description adds some meaning to the query parameter (dynamic, auto-populates) but does not significantly enhance understanding of other parameters beyond their schema descriptions. 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?
The description clearly states the tool creates a dynamic blocklist from a GNQL query, using specific verb 'create' and resource 'blocklist'. It distinguishes from sibling tools like 'update-blocklist' and 'list-blocklists' by emphasizing the dynamic nature and query-based population.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a prerequisite (requires a plan entitled to blocklists) but does not provide guidance on when to use this tool versus alternatives like update-blocklist or when not to use it. It lacks explicit context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-alertDelete AlertADestructiveIdempotent
Permanently delete an alert. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | Alert ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds context by stating the deletion is permanent and cannot be undone, which reinforces the irreversible nature beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the purpose and critical behavior. Every sentence is necessary and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete tool with output schema present and comprehensive annotations, the description is sufficiently complete. It could mention what is returned, but output schema likely covers that.
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?
Input schema has 100% description coverage, so the schema already explains parameters. The description adds no additional parameter details. Baseline score 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?
The description states 'Permanently delete an alert', clearly identifying the verb (delete) and resource (alert). It distinguishes from sibling tools like create-alert, update-alert, enable-alert, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for deleting alerts but does not explicitly state when to use this tool versus alternatives like disable-alert or update-alert. No guidance on prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-blocklistDelete BlocklistADestructiveIdempotent
Permanently delete a blocklist. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| blocklist_id | Yes | Blocklist ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=true. The description adds valuable context about permanence ('cannot be undone'), which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently communicates the action and its permanence. No unnecessary 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?
Given the tool's simplicity and the presence of annotations, the description covers essential behavioral aspects. However, it could mention side effects on related resources (e.g., blocklist entries) for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already fully documented. The description adds no additional meaning to the parameters beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (delete) and resource (blocklist), and distinguishes from siblings like create, get, update. The phrase 'Permanently delete' adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives like disabling a blocklist. The warning 'This cannot be undone' implicitly advises caution but lacks explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable-alertDisable AlertAIdempotent
Disable (pause) an alert without deleting it.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | Alert ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| type | No | |
| status | No | |
| enabled | No | |
| schedule | No | |
| created_at | No | |
| gnql_query | No | |
| parameters | No | |
| recipients | No | |
| updated_at | No | |
| workspace_id | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive and idempotent behavior. The description adds 'pause' and 'without deleting' but does not further elaborate on side effects or states. The bar is lowered due to annotations, but some extra context is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence with no unnecessary words. Front-loaded with the action and resource.
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 simple mutation with good schema coverage and an output schema, the description is mostly complete. However, it does not mention that the alert must exist or what happens if already disabled, but this is minor given the annotations and schema.
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% with descriptive parameter names and descriptions. The tool description adds no additional meaning to the parameters, so 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?
The description clearly states the verb 'Disable (pause)' and the resource 'alert'. It distinguishes from the sibling tool 'delete-alert' by explicitly saying 'without deleting it'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to pause an alert without deletion) but does not mention when not to use, such as when the alert is already disabled, nor does it list alternative tools like 'enable-alert' or 'update-alert'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable-alertEnable AlertAIdempotent
Enable (resume) a previously disabled alert.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | Alert ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| type | No | |
| status | No | |
| enabled | No | |
| schedule | No | |
| created_at | No | |
| gnql_query | No | |
| parameters | No | |
| recipients | No | |
| updated_at | No | |
| workspace_id | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent, not read-only, not destructive. Description adds minimal behavioral context, e.g., no mention of prerequisites or behavior if already enabled.
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?
Single sentence, front-loaded with key information, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple toggle action with full param coverage and output schema present, the description is adequate though minimal. Missing context about idempotency? But annotations cover that.
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 covers both parameters with descriptions (100% coverage). Description adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Enable' (or 'resume') and the resource 'alert', distinguishing it from siblings like get-alert, list-alerts, update-alert.
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?
Implies usage for previously disabled alerts, but lacks explicit when-to-use or when-not-to-use guidance compared to alternatives like update-alert.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export-callback-ipsExport Callback IPsARead-only
Export callback/C2 IPs matching the filters as a plain list. Same filters as List Callback IPs. Dates are YYYY-MM-DD.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | No | Filter to this specific set of callback IPs | |
| file_hash | No | File SHA256 hash | |
| file_name | No | File name substring match | |
| file_type | No | File MIME type (e.g. "application/x-executable") | |
| has_files | No | true = only IPs with malware files; false = only IPs without files | |
| is_stage_1 | No | true = file was downloaded from this IP (stage 1) | |
| is_stage_2 | No | true = suspected C2 based on VT/sandbox analysis (stage 2) | |
| scanner_ips | No | Filter to IPs associated with these scanner IPs | |
| last_seen_after | No | Only IPs last seen after this date (YYYY-MM-DD) | |
| first_seen_after | No | Only IPs first seen after this date (YYYY-MM-DD) | |
| last_seen_before | No | Only IPs last seen before this date (YYYY-MM-DD) | |
| first_seen_before | No | Only IPs first seen before this date (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ips | Yes | |
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, indicating safe, standalone operation. The description adds that the output is a 'plain list', which is helpful but does not disclose additional behavioral traits (e.g., output format specifics, pagination, or limits). With annotations present, the description adds moderate context but not rich detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action and output type. The reference to 'Same filters as List Callback IPs' is efficient but slightly dependent on external knowledge. Overall, it is concise and structured well, earning a high 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?
Given the tool has 12 optional parameters, many sibling tools, and an output schema (present but not detailed), the description provides basic context ('plain list', date format). However, it misses details on how the export is delivered (e.g., file or stream) and any limits. The output schema reduces the burden, leaving completeness adequate but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 12 parameters with descriptions (100% coverage). The description does not add any parameter-specific information beyond what the schema provides, so it meets the baseline for high coverage without enhancing semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Export', the resource 'callback/C2 IPs', and the output format 'plain list'. It explicitly distinguishes from the sibling tool 'List Callback IPs' by mentioning shared filters, providing specific and actionable purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for exporting filtered IPs, referencing 'Same filters as List Callback IPs', but does not explicitly state when to use this tool versus alternatives like exporting sessions or searching. No when-not or alternative guidance is provided, leaving usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export-session-dataExport Session DataA
Download a single session's data for a given session ID as a PCAP or raw payload (type: pcap | rawSource | rawDestination; default pcap). Saves the binary to a temp file and returns its path. Not available when scope=demo.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Export format: pcap | rawSource | rawDestination (default: pcap) | |
| scope | No | Data scope: workspace (default) or demo | |
| session_id | Yes | The unique session identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | No | |
| filePath | No | |
| fileSize | No | |
| available | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a side effect: 'Saves the binary to a temp file and returns its path'. This adds behavioral context beyond annotations (readOnlyHint=false, openWorldHint=true). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that covers all essential information: action, resource, options, side effect, and a constraint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters and an output schema (assumed), the description adequately explains the output (temp file path) and the demo scope limitation. It could briefly mention the return format structure, but overall is complete.
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% with good descriptions for all parameters. The description adds minimal extra meaning, reaffirming the type enum and default pcap. It does not provide new semantic details beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Download a single session's data'), the resource ('for a given session ID'), and the output formats ('PCAP or raw payload'). It distinguishes from sibling tools like 'export-sessions-pcap' by specifying 'single session'. The constraint 'Not available when scope=demo' adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a constraint ('Not available when scope=demo') but does not explicitly state when to use this tool versus alternatives like 'export-sessions-pcap' or 'get-session'. No context on when to choose pcap vs raw formats or when to avoid this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export-sessions-pcapExport Sessions PCAPA
Export a PCAP file containing packets from multiple GreyNoise sensor sessions matching query criteria. Saves the binary PCAP to a temporary directory and returns the file path. The file can be opened with Wireshark, tshark, or tcpdump.
Use Lucene query syntax to filter sessions (e.g., "destination.port:443", "source.ip:1.2.3.4").
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of sessions to include (default: 100) | |
| query | No | Lucene query string to filter sessions | |
| scope | No | Data scope for the query (default: workspace) | |
| sort_by | No | Field to sort results by (default: lastPacket) | lastPacket |
| end_time | Yes | End time for the query range (ISO 8601 format, e.g. 2026-01-07T23:59:59Z) | |
| sort_desc | No | Sort in descending order (default: true) | |
| start_time | Yes | Start time for the query range (ISO 8601 format, e.g. 2026-01-01T00:00:00Z) |
Output Schema
| Name | Required | Description |
|---|---|---|
| filePath | No | |
| fileSize | No | |
| available | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool saves a binary PCAP to a temporary directory and returns the file path, which adds context beyond annotations. The annotations include readOnlyHint:false (indicating mutation) and openWorldHint:true, which align with the description. No contradictions found.
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 extremely concise at three sentences, each serving a distinct purpose: stating the action, detailing the behavior, and providing usage examples. It is front-loaded and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but indicated), the description does not need to explain return values. It adequately covers the main purpose, output location, and query syntax. For a tool with 7 parameters and 2 required, the description is complete enough for effective usage.
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?
While the input schema already provides descriptions for all 7 parameters (100% coverage), the description adds value by giving concrete examples of Lucene query syntax for the 'query' parameter. This enhances understanding beyond the schema alone. Other parameters are not elaborated further, but the baseline is 3 due to high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it exports a PCAP file from GreyNoise sensor sessions and returns the file path. It uses a specific verb ('Export') and resource ('PCAP file from sessions'). However, it does not explicitly differentiate from sibling tools like 'export-session-data' or 'search-sessions', which limits clarity for selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to export PCAP files matching query criteria) and provides guidance on using Lucene query syntax with examples. However, it does not mention when not to use it or suggest alternative tools for different needs, such as when only session data is needed instead of PCAP.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-alertGet AlertARead-only
Retrieve a single alert's configuration by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | Alert ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| type | No | |
| status | No | |
| enabled | No | |
| schedule | No | |
| created_at | No | |
| gnql_query | No | |
| parameters | No | |
| recipients | No | |
| updated_at | No | |
| workspace_id | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation, indicating a read-only operation. However, it adds no extra behavioral context beyond what annotations already provide (e.g., no mention of output format, pagination, or rate limits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the key information. Every word earns its place with no redundancy or fluff.
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 simple get-by-ID tool with an output schema, the description is sufficiently complete. It clearly communicates the tool's purpose and input requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions. The description adds no additional meaning beyond 'by ID'. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (retrieve), the resource (alert configuration), and the method (by ID). It effectively distinguishes from sibling tools like list-alerts (which returns multiple) and update-alert (which modifies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have an alert ID and need its configuration, but it does not explicitly state when to use this tool versus alternatives like list-alerts or update-alert. No when-not or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-blocklistGet BlocklistARead-only
Retrieve a single blocklist's configuration by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| blocklist_id | Yes | Blocklist ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| query | No | |
| token | No | |
| enabled | No | |
| ip_limit | No | |
| created_at | No | |
| updated_at | No | |
| workspace_id | No | |
| last_ip_count | No | |
| entitlement_level | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. Description adds retrieval by ID, which is partially redundant with schema. Doesn't disclose error behavior or response format beyond what annotations hint.
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?
Single, concise sentence with no unnecessary words. Front-loaded with verb and resource.
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?
Output schema exists, so return values are covered. Description is sufficient for a simple retrieval tool, though it could mention error cases for invalid IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented. Description adds no new meaning beyond 'by ID'. 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?
Description clearly states verb 'Retrieve', resource 'blocklist's configuration', and mechanism 'by ID'. It distinguishes from sibling tools like list-blocklists (multiple) and get-blocklist-ips (IPs).
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?
Implies usage when needing a single blocklist by ID, but lacks explicit guidance on when not to use it or alternatives. No comparison with list-blocklists or other retrieval methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-blocklist-ipsGet Blocklist IPsCRead-only
Retrieve the current list of IPs in a blocklist.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Max IPs to return | |
| blocklist_id | Yes | Blocklist ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ips | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true. Description adds only 'current list', which is redundant with 'retrieve'. No disclosure of behavior beyond annotations (e.g., that the list may change, that size parameter limits results, or that results may be paginated). With annotations covering safety, the description contributes little.
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?
Single sentence, no wasted words. Front-loaded with verb and resource. However, it could be slightly more structured with a hint about required parameter or usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown) and clear annotations, the description provides minimal but functional coverage. It omits when to use the tool relative to siblings and does not mention that a blocklist_id is required, which is critical context for a 3-parameter tool with one required field.
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%, with each parameter described (size maximum, blocklist_id type, workspace_id default). Description does not add any extra meaning or context for parameters. Baseline 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Retrieve the current list of IPs in a blocklist' – a specific verb and resource. It distinguishes from sibling 'list-blocklists' (which lists blocklists) and 'list-callback-ips' (which lists callback IPs). However, it does not mention the required blocklist_id parameter explicitly, missing an opportunity to reinforce purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it doesn't say 'Use this to get IPs for a specific blocklist; for listing all blocklists, use list-blocklists.' The agent must infer usage from sibling names and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-cve-detailsGet CVE DetailsARead-only
Get GreyNoise vulnerability intelligence for one CVE: CVSS/EPSS scores, KEV status, exploitation stats, and observed benign/threat IP activity. cve_id must match 'CVE-YYYY-NNNNN' (e.g. CVE-2023-6549); case-insensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | CVE ID in 'CVE-YYYY-NNNNN' format (e.g. CVE-2023-6549) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| details | Yes | |
| timeline | Yes | |
| exploitation_stats | No | |
| exploitation_details | Yes | |
| exploitation_activity | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool provides vulnerability intelligence (read-only operation) and lists returned data categories (scores, stats, IP activity). No contradictions with annotations (readOnlyHint, openWorldHint).
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?
Single sentence, front-loaded with the core purpose, followed by specific details. No redundant words; every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and presence of an output schema, the description fully covers what the tool does and how to invoke it. No additional details needed.
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. The description adds format validation and case-insensitivity guidance, enhancing understanding beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: retrieving GreyNoise vulnerability intelligence for a single CVE. It lists specific data points (CVSS/EPSS scores, KEV status, etc.) and distinguishes itself from sibling tools that handle sessions, IP lookups, or bulk operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies the required format for cve_id ('CVE-YYYY-NNNNN') and notes case-insensitivity. It implies single-CVE usage but does not explicitly state when not to use it or mention alternatives, though sibling context makes the scope clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-sessionGet SessionARead-only
Get full metadata and connection details for a single GreyNoise sensor session by its ID. Returns source/destination IPs and ports, timestamps, byte/packet counts, classification, and any additional enrichment fields.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Data scope for the query (default: workspace) | |
| session_id | Yes | The unique session identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| _id | No | |
| source | No | |
| lastPacket | No | |
| destination | No | |
| firstPacket | No | |
| classification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint, so the description does not need to reiterate safety. It adds value by detailing return fields (IPs, ports, timestamps, etc.), which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core action and list return fields, with no wasted words. Perfectly concise and well-structured.
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 output schema present and annotations covering behavior, the description is complete. It specifies the single required input and typical output fields, fully sufficient for the tool's simple purpose.
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 mentions 'by its ID' which aligns with session_id, but does not add any additional meaning beyond the schema's own descriptions. No extra value for parameters.
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?
Description clearly states the tool retrieves metadata and connection details for a single session by ID, listing specific fields returned. It distinguishes from sibling tools like 'search-sessions' which returns multiple sessions, and export tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you have a session ID and need full details, but does not explicitly mention when not to use or compare to alternatives like 'search-sessions' for listing. However, the context is clear enough for an agent to infer proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-session-pcapGet Session PCAPA
Download the raw PCAP capture for a single GreyNoise sensor session. Saves the binary PCAP file to a temporary directory and returns the file path. The file can be opened with Wireshark, tshark, or tcpdump.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Data scope for the query (default: workspace) | |
| session_id | Yes | The unique session identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
| filePath | No | |
| fileSize | No | |
| available | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds beyond annotations by explaining the side effect of saving to a temporary directory and returning a file path, and suggests tools to open the file. No contradiction with annotations, which indicate non-read-only and open-world hints.
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?
Three sentences, no wasted words. The key action is front-loaded, and the file format and usage context are efficiently provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description correctly omits return value details. It covers the essential behavior: download, temporary storage, file path return, and compatibility with analysis tools. No gaps identified.
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 description adds minimal extra meaning for parameters. It does not elaborate on 'scope' or 'session_id' beyond what the schema already describes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Download' and the resource 'raw PCAP capture for a single GreyNoise sensor session', which distinguishes it from sibling tools like 'export-sessions-pcap' that likely handle multiple sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (need a single session's PCAP) but does not explicitly state when not to use or list alternatives. The presence of sibling 'export-sessions-pcap' provides context but not direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-tag-activityGet Tag ActivityARead-only
Retrieve time-series unique-IP counts and intention activity for a tag (by id/slug) or by CVE, from v3/tags/{id}/activity. Provide exactly one of id_or_slug or cve. days must be 1, 10, or 30 (default 30); granularity is 1h for 1 day, else 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| cve | No | CVE identifier to retrieve activity for (matches associated tags) | |
| days | No | Days of activity: 1, 10, or 30 | 30 |
| id_or_slug | No | Tag ID or slug to retrieve activity for |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and openWorld hints. The description adds value by detailing the output type (time-series IP counts and intention activity) and constraints on time range (days) and granularity (1h vs 24h). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. First sentence captures purpose and key constraint. Second sentence details parameter specifics. Well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters (all described), high schema coverage, and presence of an output schema, the description sufficiently covers what the tool does, required inputs, and behavioral nuances. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds critical usage semantics: the exclusivity constraint between 'id_or_slug' and 'cve', and the relationship between 'days' and 'granularity'. This goes beyond the schema's individual property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the specific resource 'time-series unique-IP counts and intention activity for a tag or by CVE'. It also highlights exclusivity of two parameters, distinguishing it from sibling tools like 'get-tag-details' or 'analyze-tags-activity'.
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 'Provide exactly one of id_or_slug or cve' and specifies allowed values for 'days' with default. However, it does not explicitly compare with alternatives or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-tag-detailsGet Tag DetailsARead-only
Get the full record for a single GreyNoise tag, looked up by exact tag id or slug (slug matched case-insensitively) over the cached v3/tags list.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_slug | Yes | Tag ID or slug to retrieve details for |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| cves | No | |
| name | Yes | |
| slug | Yes | |
| label | No | |
| category | No | |
| intention | No | |
| created_at | No | |
| references | No | |
| description | No | |
| recommend_block | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint; description adds behavioral context: uses a cached list for lookups, case-insensitive slug matching. No contradictions. Provides useful details beyond annotations.
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?
Single sentence that conveys all essential information without redundancy or extraneous detail. Efficient and well-structured.
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?
Output schema exists, so return values are covered. Description mentions caching, adding context for data freshness. Could include cache refresh timing but not necessary for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a basic description. Description adds meaning: exact match for id, case-insensitive match for slug, and the lookup is over a cached list, providing context beyond the schema's minimal description.
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?
Description clearly states the verb 'Get', the resource 'full record for a single GreyNoise tag', and the lookup method (by id or slug, case-insensitive, from cached list). It distinguishes from sibling tools like 'get-tag-activity' by specifying it retrieves the full record for a single tag.
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?
Implies usage over a cached list but does not explicitly state when to use this tool versus alternatives (e.g., get-tag-activity). No guidance on when not to use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-trending-vulnerabilitiesGet Trending VulnerabilitiesARead-only
List currently trending and anomalous GreyNoise vulnerability tags. Takes no parameters. Makes two calls (sort=trending, sort=anomalies) and returns the combined set with a 'source' field per tag plus a total count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tags | Yes | |
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint and openWorldHint, so the description adds value by detailing the two internal API calls and the resulting combined set with a 'source' field and total count. This goes beyond the annotations.
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 three sentences long, front-loaded with the purpose, and each sentence adds essential information (what, no params, internal mechanics, output details). No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, readOnlyHint, openWorldHint, and an output schema (exists but not displayed), the description fully explains the tool's behavior: two calls, combined result with source field and total count. The agent has enough context to use it 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?
The input schema has no parameters (100% coverage), and the description confirms it takes no parameters. Since there are zero parameters, a baseline of 4 is appropriate, and the description adds no extra meaning but is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists trending and anomalous GreyNoise vulnerability tags, specifies it takes no parameters, and explains the internal behavior of making two calls. It is distinct from sibling tools like 'get-tag-activity' which likely returns different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes no parameters are required, making usage straightforward, but does not explicitly compare with alternative tools or provide when/when-not guidance. It is adequate for a simple list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnql-metadata-queryGNQL Metadata QueryARead-only
Search GreyNoise data using GNQL, returning IP metadata without raw scan data. Lighter and faster than gnql-query.
Supports the same GNQL query syntax as gnql-query. Use this when you need IP classification, tags, and metadata but not raw scan details (ports, fingerprints, HTTP paths).
Results are paginated via the scroll token. Set quick=true to return only IP and classification/trust level.
Set format="csv" for spreadsheet-friendly CSV output (columns: ip, classification, actor, organization, source_country, tags, ports, bsi_found, bsi_name, bsi_trust_level); default "json" renders a Markdown summary. structuredContent is always the full JSON regardless of format.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Results per page (default: 25, max: 10000) | |
| query | Yes | GNQL query string | |
| quick | No | If true, return only IP and classification/trust level | |
| format | No | Output format for the text response (default: json) | json |
| scroll | No | Pagination scroll token from a previous response |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| request_metadata | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint. The description adds behavioral context: returns only metadata (no raw data), supports pagination via scroll token, and describes output formats including the structuredContent always being full JSON. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and differentiation, then logically expands on usage, pagination, and output formats. Every sentence adds value without redundancy. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, 100% schema coverage, output schema exists, and multiple siblings, the description covers all essential aspects: purpose, differentiation, query syntax support, pagination, quick mode, format options, and output behavior. It is complete for informed use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions, but the description adds significant meaning: explains 'quick' returns only IP and classification, details CSV columns, and notes that the text response differs from structuredContent. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Search') and resource ('GreyNoise data'), specifies the return type ('IP metadata without raw scan data'), and distinguishes from sibling gnql-query by noting it is 'lighter and faster'. This leaves no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'Use this when you need IP classification, tags, and metadata but not raw scan details.' It also compares to gnql-query and mentions pagination via scroll token, providing clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnql-queryGNQL QueryARead-only
Search GreyNoise data using GNQL (GreyNoise Query Language). Returns full IP context results including raw scan data.
GNQL is a domain-specific query language that uses Lucene deep under the hood.
Facets:
"ip" - The IP address of the scanning device
"classification" - Whether the device has been categorized as unknown, benign, or malicious
"first_seen" / "last_seen" - Date the device was first/most recently observed
"actor" - The benign actor the device has been associated with (Shodan, Censys, etc)
"tags" - Tags assigned to the device over the past 90 days
"cve" - CVEs associated with the device
"vpn" / "vpn_service" / "bot" / "tor" - Boolean/string indicators
"metadata.category" - Network category (business, isp, hosting, education, mobile)
"metadata.source_country" / "metadata.source_country_code" - Source location
"metadata.organization" / "metadata.asn" / "metadata.rdns" - Network info
"raw_data.scan.port" / "raw_data.scan.protocol" - Scan targets
"raw_data.web.paths" / "raw_data.web.useragents" - HTTP activity
"raw_data.ja3.fingerprint" / "raw_data.hassh.fingerprint" - TLS/SSH fingerprints
Examples:
"classification:malicious last_seen:1d" - Malicious IPs seen in last day
"tags:Mirai" - Devices tagged as Mirai
"raw_data.scan.port:445 metadata.os:Windows*" - Windows hosts scanning port 445
"cve:CVE-2021-30461" - Devices associated with a CVE
"source_country:Iran destination_country:Ukraine single_destination:true" - Targeted scanning
Results are paginated. Use the scroll parameter to retrieve additional pages.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Results per page (default: 25, max: 10000) | |
| query | Yes | GNQL query string | |
| scroll | No | Pagination scroll token from a previous response |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| request_metadata | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true and openWorldHint=true. The description adds value by detailing that results are paginated and the use of a scroll token. It also lists available facets and query examples, giving the agent a clear understanding of the tool's behavior beyond the annotations.
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 a clear opening, bullet-pointed facets, and examples. It is comprehensive but not overly verbose. All content is relevant and adds value. Minor room for tightening, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (query language, pagination, facets), the description covers all necessary aspects: what the tool does, how to use GNQL, available fields, example queries, and pagination. An output schema exists, so return values are documented separately. The description is complete for an agent to use the tool 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?
The input schema has 100% description coverage for the three parameters (query, size, scroll). The description adds some context by explaining GNQL syntax and providing examples but does not significantly enhance parameter understanding beyond what the schema already provides. Baseline score 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?
The description clearly states the tool's purpose: 'Search GreyNoise data using GNQL (GreyNoise Query Language). Returns full IP context results including raw scan data.' This distinguishes it from sibling tools like gnql-stats (aggregations) and gnql-timeseries (time series). The verb 'Search' with specific resource and output is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the GNQL language, provides examples, and notes pagination. However, it does not explicitly state when to use this tool vs. alternatives (e.g., gnql-stats for counts, gnql-metadata-query for metadata). The user can infer context from the examples, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnql-statsGNQL StatsARead-only
Get aggregate statistics for results matching a GreyNoise GNQL query.
GNQL (GreyNoise Query Language) is a domain-specific query language that uses Lucene deep under the hood.
Facets:
"ip" - The IP address of the scanning device IP
"classification" - Whether the device has been categorized as unknown, benign, or malicious
"first_seen" - The date the device was first observed by GreyNoise
"last_seen" - The date the device was most recently observed by GreyNoise
"actor" - The benign actor the device has been associated with, such as Shodan, Censys, GoogleBot, etc
"tags" - A list of the tags the device has been assigned over the past 90 days
"spoofable" - This IP address has been opportunistically scanning the Internet, however has failed to complete a full TCP connection. Any reported activity could be spoofed.
"vpn" - This IP is associated with a VPN service. Activity, malicious or otherwise, should not be attributed to the VPN service provider.
"vpn_service" - The VPN service the IP is associated with
"cve" - A list of CVEs that the device has been associated with
"bot" - If the IP is known to belong to a known BOT
"single_destination" - A boolean parameter that filters source country IPs that have only been observed in a single destination country
"metadata.category" - Whether the device belongs to a business, isp, hosting, education, or mobile network
"metadata.country" - The full name of the country the device is geographically located in (This is the same data as "metadata.source_country". "metadata.source_country" is preferred)
"metadata.country_code" - The two-character country code of the country the device is geographically located in (This is the same data as "metadata.source_country_code". "metadata.source_country_code" is preferred)
"metadata.sensor_hits" - The amount of unique data that has been recorded by the sensor
"metadata.sensor_count" - The number of sensors the IP Address has been observed on
"metadata.city" - The city the device is geographically located in
"metadata.region" - The region the device is geographically located in
"metadata.organization" - The organization that owns the network that the IP address belongs to
"metadata.rdns" - The reverse DNS pointer of the IP
"metadata.asn" - The autonomous system the IP address belongs to
"metadata.tor" - Whether or not the device is a known Tor exit node
"metadata.destination_country" - The full name where the GreyNoise sensor is physically located
"metadata.destination_country_code" - The country code where GreyNoise sensor is physically located
"metadata.source_country_code" - The two-character country code of the country the device is geographically located in
"metadata.source_country" - The full name of the country the device is geographically located in
"raw_data.scan.port" - The port number(s) the devices has been observed scanning
"raw_data.scan.protocol" - The protocol of the port the device has been observed scanning
"raw_data.web.paths" - Any HTTP paths the device has been observed crawling the Internet for
"raw_data.web.useragents" - Any HTTP user-agents the device has been observed using while crawling the Internet
"raw_data.ja3.fingerprint" - The JA3 TLS/SSL fingerprint
"raw_data.ja3.port" - The corresponding TCP port for the given JA3 fingerprint
"raw_data.hassh.fingerprint" - The HASSH fingerprint
"raw_data.hassh.port" - The corresponding TCP port for the given HASSH fingerprint
Behavior:
You can subtract facets by prefacing the query with a minus character
The data that this endpoint queries refreshes once per hour
Shortcuts:
You can find interesting hosts by using the GNQL query term "interesting"
You can use the keyword "today" in the "first_seen" and "last_seen" parameters: "last_seen:today" or "first_seen:today"
Examples:
"last_seen:today" - Returns all IPs scanning/crawling the Internet today
"tags:Mirai" - Returns all devices with the "Mirai" tag
"tags:"RDP Scanner"" - Returns all devices with the "RDP Scanner" tag
"classification:malicious metadata.country:Belgium" — Returns all compromised devices located in Belgium
"classification:malicious metadata.rdns:.gov" - Returns all compromised devices that include .gov in their reverse DNS records
"metadata.organization:Microsoft classification:malicious" — Returns all compromised devices that belong to Microsoft
"(raw_data.scan.port:445 and raw_data.scan.protocol:TCP) metadata.os:Windows*" - Return all devices scanning the Internet for port 445/TCP running Windows operating systems (Conficker/EternalBlue/WannaCry)
"raw_data.scan.port:554" - Returns all devices scanning the Internet for port 554
"-metadata.organization:Google raw_data.web.useragents:GoogleBot" — Returns all devices crawling the Internet with "GoogleBot" in their useragent from a network that does NOT belong to Google
"tags:"Siemens PLC Scanner" -classification:benign" - Returns all devices scanning the Internet for SCADA devices who ARE NOT tagged by GreyNoise as "benign" (Shodan/Project Sonar/Censys/Google/Bing/etc)
"classification:benign" - Returns all "good guys" scanning the Internet
"raw_data.ja3.fingerprint:795bc7ce13f60d61e9ac03611dd36d90" — Returns all devices crawling the Internet with a matching client JA3 TLS/SSL fingerprint
"raw_data.hassh.fingerprint:51cba57125523ce4b9db67714a90bf6e" — Returns all devices crawling the Internet with a matching client HASSH fingerprint
"raw_data.web.paths:"/HNAP1/"" -Returns all devices crawling the Internet for the HTTP path "/HNAP1/"
"8.0.0.0/8" - Returns all devices scanning the Internet from the CIDR block 8.0.0.0/8
"cve:CVE-2021-30461" - Returns all devices associated with the supplied CVE
"source_country:Iran" - Returns all results originating from Iran
"destination_country:Ukraine single_destination:true" — Returns all results scanning in only Ukraine
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of top aggregate results to return (1-10000) | |
| query | Yes | GNQL query string (e.g., 'classification:malicious last_seen:30d') |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| query | Yes | |
| stats | Yes | |
| adjusted_query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, and the description does not contradict these. It adds useful behavioral context: data refreshes hourly, and explains facet subtraction. No destructive behavior is implied.
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 sections (facets, behavior, shortcuts, examples) and front-loaded with the purpose. However, it is lengthy; some introductory sentences about GNQL could be trimmed for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description covers query construction, facets, behavior, and examples thoroughly. It does not need to explain return values. No gaps are evident.
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% with clear descriptions for both parameters. The description adds significant context for the 'query' parameter by detailing GNQL syntax, facets, and examples, but for 'count' it only repeats schema info.
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?
Description states 'Get aggregate statistics for results matching a GreyNoise GNQL query.' This clearly specifies the verb (Get), resource (aggregate statistics), and context (GNQL query), distinguishing it from siblings like gnql-metadata-query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a 'Behavior' section noting how to subtract facets, data refresh frequency, and 'Shortcuts' with keywords like 'today' and 'interesting'. It provides many examples, giving strong usage guidance, though it lacks explicit contrast with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnql-timeseriesGNQL TimeseriesBRead-only
Retrieve hourly GNQL records for a time range. Enables temporal analysis of IP activity matching any GNQL query (Recall).
Returns IP records bucketed by hour, useful for investigating when specific IPs were active and what they were doing.
Time bounds use ISO 8601 (e.g. 2025-01-15T00:00:00Z). size is results per hourly bucket (default: 25, max: 10000).
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Results per hourly bucket (default: 25) | |
| query | Yes | GNQL query string | |
| end_time | No | End of time range (ISO 8601 format) | |
| start_time | No | Start of time range (ISO 8601 format, e.g. 2025-01-15T00:00:00Z) |
Output Schema
| Name | Required | Description |
|---|---|---|
| buckets | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, which the description does not contradict. The description adds behavioral details such as hourly bucketing and ISO 8601 time format, but does not elaborate on the open-world nature or potential unknown results beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise with four sentences, each serving a distinct purpose: stating the action, explaining utility, specifying time format, and detailing the size parameter. No redundant information, and key points are front-loaded.
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?
The description covers the main purpose, time format, and size constraints, but it does not explain what happens when start_time or end_time are omitted (since they are optional). The output schema exists and may compensate, but the description leaves a gap in understanding default behavior for time bounds.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage with descriptions for all four parameters. The description adds an example of ISO 8601 format and clarifies size constraints (default, max), but these are already present in the schema. The description does not add significant new semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves hourly GNQL records for a time range, specifying it is for temporal analysis of IP activity. It distinguishes the tool from its sibling 'gnql-timeseries-stats' by focusing on records rather than statistics, but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is useful for investigating when IPs were active, but it does not provide guidance on when to avoid using it or compare it with other sibling tools like 'gnql-stats' or 'gnql-metadata-query'. No explicit when-to-use or when-not-to-use advice is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnql-timeseries-statsGNQL Timeseries StatsARead-only
Get the number of unique IPs matching a GNQL query per hour/day over a time range (Recall Stats).
Returns aggregated counts of unique IPs per time bucket, useful for trend analysis and understanding how scanning/attack activity changes over time.
interval must be 'hour' or 'day'. Time bounds use ISO 8601 format.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | GNQL query string | |
| end_time | No | End of time range (ISO 8601 format) | |
| interval | Yes | Time bucket interval ('hour' or 'day') | |
| start_time | No | Start of time range (ISO 8601 format) |
Output Schema
| Name | Required | Description |
|---|---|---|
| max | Yes | |
| min | Yes | |
| data | Yes | |
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's job is lighter. It adds value by specifying that results are aggregated counts per time bucket, that the interval must be 'hour' or 'day', and that time bounds use ISO 8601 format. These details go beyond the annotations.
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 three short sentences: the first states the core purpose, the second elaborates on output and use case, and the third gives parameter constraints. Every sentence adds value; no wasted words. It is front-loaded and efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, output schema exists, annotations present), the description covers: purpose, use case, parameter constraints, and return value nature. It does not leave important gaps, and the output schema handles return details. The description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal extra meaning: it reiterates that interval must be 'hour' or 'day' (already in schema as enum) and that time bounds use ISO 8601 (also in schema). This is adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the number of unique IPs matching a GNQL query per hour/day over a time range', using a specific verb and resource. It distinguishes this tool from siblings like 'gnql-stats' and 'gnql-timeseries' by focusing on unique IP recall stats and trend analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it is 'useful for trend analysis and understanding how scanning/attack activity changes over time', providing clear context for when to use it. However, it does not explicitly state when not to use it or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-alertsList AlertsARead-only
List the alerts configured in a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| alerts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true. Description adds little beyond the title, but no contradictions.
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?
Single sentence, zero waste. Perfectly sized for the tool's simplicity.
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?
Simple tool with one parameter and output schema. Description is sufficient given low complexity and rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with full schema description coverage. Description adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('List') and resource ('alerts configured in a workspace'). Distinguishes from siblings like 'get-alert' (single alert) and mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives mentioned, but simple read-only list context is implied by readOnlyHint annotation and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-blocklistsList BlocklistsARead-only
List the blocklists in a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max blocklists to return (1-100) | |
| offset | No | Pagination offset | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | |
| total | No | |
| offset | No | |
| blocklists | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds no extra behavioral details. It merely states 'list', which is consistent but not enriching.
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?
Single sentence with no wasted words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values are covered elsewhere. However, the description does not mention that workspace_id defaults to the bound API key workspace, which is only in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all parameters adequately. The description does not add any parameter information beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'blocklists' within a workspace, distinguishing it from siblings like 'get-blocklist-ips' and 'update-blocklist'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'get-blocklist-ips' or 'list-alerts'. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-callback-ipsList Callback IPsARead-only
Paginated list of callback/C2 IPs filtered by attack stage, first/last seen date ranges, file attributes, and scanner associations. Dates are YYYY-MM-DD.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | No | Filter to this specific set of callback IPs | |
| page | No | Zero-indexed page number (default 0) | |
| file_hash | No | File SHA256 hash | |
| file_name | No | File name substring match | |
| file_type | No | File MIME type (e.g. "application/x-executable") | |
| has_files | No | true = only IPs with malware files; false = only IPs without files | |
| page_size | No | Results per page, 1-100 (default 20) | |
| is_stage_1 | No | true = file was downloaded from this IP (stage 1) | |
| is_stage_2 | No | true = suspected C2 based on VT/sandbox analysis (stage 2) | |
| scanner_ips | No | Filter to IPs associated with these scanner IPs | |
| last_seen_after | No | Only IPs last seen after this date (YYYY-MM-DD) | |
| first_seen_after | No | Only IPs first seen after this date (YYYY-MM-DD) | |
| last_seen_before | No | Only IPs last seen before this date (YYYY-MM-DD) | |
| first_seen_before | No | Only IPs first seen before this date (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| items | No | |
| total | No | |
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true. The description adds context about pagination, date format (YYYY-MM-DD), and filter options, which goes beyond the annotations by clarifying the tool's operational behavior (e.g., paginated, filterable).
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?
Single sentence that front-loads the purpose and then efficiently lists filter categories. Every word earns its place; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 optional parameters) and the presence of an output schema, the description adequately summarizes the tool's functionality. The output schema covers return values, and the annotation indicates safe read-only behavior, so no further behavioral details are necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so schema already documents all 14 parameters. The description adds marginal value by grouping filters into categories (attack stage, dates, file attributes, scanner associations) and specifying date format, but does not explain parameter interaction or defaults beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'paginated list of callback/C2 IPs' with specific filters (attack stage, dates, file attributes, scanner associations). It distinguishes itself from sibling tools like 'lookup-ip-context' or 'get-blocklist-ips' by focusing on filtered, paginated lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing IPs with various filters but does not explicitly mention when to use this tool versus alternatives (e.g., lookup-ip-context for single IP details). No guidance on exclusions or preferred use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup-ip-contextLook Up IP ContextARead-only
Get detailed GreyNoise context for a single IP: classification, tags, Internet Scanner Intelligence (scan/HTTP/TLS/SSH/TCP raw data), Business Service Intelligence, geo, and network metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IP address to look up (IPv4 or IPv6) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ip | Yes | |
| request_metadata | No | |
| business_service_intelligence | Yes | |
| internet_scanner_intelligence | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds value by detailing the specific data categories returned (classification, tags, raw scan data, business service intelligence, geo, network metadata), which are not covered by annotations. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and lists all relevant data types. No redundant information; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter input, read-only annotations, and existence of an output schema, the description provides a comprehensive overview of the return data. Minor omission: could mention potential rate limits or authentication requirements, but these are likely covered by the API 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% with a single required 'ip' parameter and a clear description in schema. The tool description does not add parameter-specific details beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'detailed GreyNoise context for a single IP', and explicitly lists the types of data included (classification, tags, intelligence, geo, network). This sets it apart from sibling tools like 'multi-ip-check' which handles multiple IPs, and session/alert tools which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for a single IP lookup and hints at the rich data returned, but does not explicitly instruct when to use this tool over siblings like 'multi-ip-check' or 'get-session'. There are no 'when-not' or alternative recommendations, leaving the agent to infer context from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multi-ip-checkMulti-IP CheckARead-only
Check up to 10,000 IP addresses at once. Returns classification, business-service status, and trust level for each, plus a summary breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | List of IP addresses to check (1-10,000, IPv4 or IPv6) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| request_metadata | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds value by specifying the batch size limit (10,000) and the return structure. However, it does not disclose potential errors, rate limits, or how invalid IPs are handled, which would be useful for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff, front-loading the key capability (batch check) and then listing outputs. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (context signal true), the description adequately covers inputs and expected outputs. It could be improved by mentioning error handling or performance considerations for large batches, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the only parameter ('ips') thoroughly, including format and constraints. The description adds no additional meaning beyond what the schema provides, so baseline score of 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?
The description clearly states the action ('Check up to 10,000 IP addresses'), the resource ('IP addresses'), and the specific outputs ('classification, business-service status, trust level, summary breakdown'). This uniquely distinguishes it from sibling IP tools like 'lookup-ip-context' which handles single IPs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., 'lookup-ip-context' for single IPs). It does not mention circumstances where this batch check is appropriate or any prerequisite actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quick-check-ipQuick Check IPARead-only
Get a fast, lightweight classification and business-service check for a single IP address.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IP address to look up (IPv4 or IPv6) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ip | Yes | |
| business_service_intelligence | Yes | |
| internet_scanner_intelligence | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds 'fast, lightweight' but does not disclose additional behavioral traits such as rate limits, data sources, or any side effects beyond what annotations 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?
Single sentence, no unnecessary words, front-loaded with key information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, output schema exists (not shown but present), and annotations cover read behavior, the description is sufficient. It could mention the return type but is not required due to output schema.
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 parameter 'ip' is thoroughly defined with format, pattern, and description. The description adds no extra meaning beyond 'single IP address', so the schema carries the load.
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?
Description clearly states verb 'Get' and resource 'classification and business-service check for a single IP address'. It is specific and distinguishes from siblings like multi-ip-check (multiple IPs) and callback-ip-lookup (different purpose).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage with 'fast, lightweight' but does not explicitly state when to use this tool versus alternatives like lookup-ip-context or bsi-lookup. No exclusions or criteria provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-sessionsSearch SessionsARead-only
Query and filter GreyNoise sensor network sessions over a time range. Returns a paginated list with source/destination IPs and ports, timestamps, byte/packet counts, and classification. Use Lucene query syntax (e.g. destination.port:443).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| query | No | Lucene query string to filter sessions | |
| scope | No | Data scope: workspace (default) or demo | |
| sort_by | No | Field to sort by (default: lastPacket) | |
| end_time | Yes | End time, ISO 8601 (e.g. 2025-01-07T23:59:59Z) | |
| page_size | No | Results per page, 1-100 (default: 25) | |
| sort_desc | No | Sort descending (default: true) | |
| start_time | Yes | Start time, ISO 8601 (e.g. 2025-01-01T00:00:00Z) |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| sessions | No | |
| pagination | No | |
| request_metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only and open-world behavior, which the description confirms. Beyond annotations, the description adds that results are paginated and lists the types of fields returned (source/destination IPs, ports, timestamps, byte/packet counts, classification), providing useful behavioral context.
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 only two sentences, front-loading the core purpose and return information. Every word contributes meaning without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (indicated), the description adequately covers the tool's purpose, parameters, and return fields. It mentions pagination and the required time range, missing only minor defaults like page size, which are in the schema.
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 description adds limited value beyond the schema. It mentions Lucene query syntax for the 'query' parameter, but otherwise relies on the schema for parameter details. 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?
The description clearly states the verb ('Query and filter') and resource ('GreyNoise sensor network sessions') with specific return fields. It distinguishes from siblings like 'get-session' (single session) and 'export-session-data' (export) by focusing on search/filter across a time range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions using Lucene query syntax and a time range, but does not explicitly state when to use this tool versus alternatives (e.g., 'get-session' for a single session, 'export-session-data' for bulk export). Usage context is implied but lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session-connectionsSession ConnectionsARead-only
Build a connection graph (nodes + links) between a source field and a destination field over a time range. Useful for visualizing communication relationships.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Lucene query string to filter sessions | |
| scope | No | Data scope: workspace (default) or demo | |
| end_time | Yes | End time, ISO 8601 (e.g. 2025-01-07T23:59:59Z) | |
| max_nodes | No | Max nodes to return, 1-10000 (default: 100) | |
| src_field | No | Source field to aggregate on (default: source.ip) | |
| dest_field | No | Destination field to aggregate on (default: destination.ip) | |
| start_time | Yes | Start time, ISO 8601 (e.g. 2025-01-01T00:00:00Z) | |
| min_connections | No | Min connections to include a node (default: 1) |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | No | |
| nodes | No | |
| total | No | |
| request_metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that the tool returns 'nodes + links', which is consistent and provides some output context. However, it does not disclose any additional behavioral traits such as aggregation behavior, cardinality limits, or that it operates on aggregated data rather than raw sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and contains no redundant or verbose language. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, graph output), the description covers the core concept well. The presence of an output schema reduces the need to explain return values. However, it lacks details on default parameters (e.g., max_nodes=100, src_field=source.ip) and aggregation semantics, which would be helpful for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; it only mentions 'source field and destination field' in general terms. No additional parameter guidance or examples are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds a connection graph between source and destination fields over a time range, using a specific verb ('build') and resource ('connection graph'), and adds the use case 'visualizing communication relationships'. This distinguishes it from sibling tools like session-unique-values or search-sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for visualizing communication relationships but does not explicitly state when to use this tool versus alternatives, nor does it provide conditions when not to use it. No exclusions or sibling references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session-countsSession CountsARead-only
Aggregate session counts grouped by one or more fields over a time range. Multiple fields produce nested (drill-down) buckets.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Buckets per aggregation level, 1-100 (default: 10) | |
| query | No | Lucene query string to filter sessions | |
| scope | No | Data scope: workspace (default) or demo | |
| fields | Yes | Comma-separated fields to aggregate on (e.g. source.ip,destination.port) | |
| end_time | Yes | End time, ISO 8601 (e.g. 2025-01-07T23:59:59Z) | |
| start_time | Yes | Start time, ISO 8601 (e.g. 2025-01-01T00:00:00Z) |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | |
| total | No | |
| request_metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. Description adds the nested bucketing behavior but does not disclose pagination, result format, or any side effects. Adequate but not rich beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-loaded with purpose. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description need not detail return values. Covers core behavior and constraints (time range, fields). Could mention optional filters, but schema covers that. Adequate.
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 covers all parameters with descriptions (100% coverage). Description adds value by explaining that multiple fields produce nested buckets, which is not in schema. Justification for grouping behavior is helpful.
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?
Description clearly states it aggregates session counts grouped by fields, with nested bucketing for multiple fields. This distinguishes it from siblings like session-timeseries or search-sessions.
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?
Implies usage for aggregating counts by fields, but lacks explicit when-not-to-use or alternative tool references. Sibling tools exist but are not contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session-fieldsList Session FieldsARead-only
Discover the queryable session field schema: field identifiers, types, groups, and whether each is sortable. Use these field names when building session queries, counts, connections, timeseries, and unique-value requests.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Data scope: workspace (default) or demo |
Output Schema
| Name | Required | Description |
|---|---|---|
| fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds behavioral context by specifying what is returned (field identifiers, types, groups, sortability). No contradictions or hidden side effects are present, and the disclosure is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every word adds value. No redundancy or fluff; it efficiently conveys the tool's function and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, read-only, with an output schema), the description fully covers purpose, when to use, and what to expect. No gaps remain for an agent to misuse the 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%, with the 'scope' parameter described in the schema itself. The description does not repeat parameter details, which is acceptable. It adds no semantic value beyond the schema, earning the 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?
The description clearly states the tool's purpose: to discover the queryable session field schema, including identifiers, types, groups, and sortability. It distinguishes itself from sibling tools that perform actual queries (e.g., search-sessions) by being a metadata discovery tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use the tool: 'Use these field names when building session queries, counts, connections, timeseries, and unique-value requests.' This provides clear guidance on its role as a prerequisite for constructing queries, leaving no ambiguity about context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session-timeseriesSession TimeseriesARead-only
Return session volume over time, optionally grouped by a field. Without a field, returns a single timeseries; with a field, returns per-group timeseries.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Groups to return when field is set, 1-100 (default: 10) | |
| field | No | Field to group the timeseries by | |
| query | No | Lucene query string to filter sessions | |
| scope | No | Data scope: workspace (default) or demo | |
| end_time | Yes | End time, ISO 8601 (e.g. 2025-01-07T23:59:59Z) | |
| interval | No | Time bucket interval (default: auto) | |
| start_time | Yes | Start time, ISO 8601 (e.g. 2025-01-01T00:00:00Z) |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | |
| total | No | |
| timeseries | No | |
| request_metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds value by explaining the dynamic behavior based on the 'field' parameter. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and key distinction. Every word serves a purpose with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given schema coverage is 100% and an output schema exists, the description completes the picture by explaining the optional grouping behavior. Minor gap: does not detail the default sizing behavior when field is set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond schema by explaining the effect of the 'field' parameter on the output structure.
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?
Description clearly states the tool returns session volume over time, with optional grouping by a field. This distinguishes it from sibling tools like gnql-timeseries which return different metric timeseries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly differentiates between use without field (single timeseries) and with field (per-group timeseries), giving clear context. However, it does not directly address when to use this tool versus siblings like gnql-timeseries or search-sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session-unique-valuesSession Unique ValuesARead-only
Return the distinct values of a single session field over a time range (server produces a CSV). Optionally include per-value counts. Useful for extracting distinct IPs, ports, or other field values matching a query.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | Field to get unique values for (e.g. source.ip) | |
| query | No | Lucene query string to filter sessions | |
| scope | No | Data scope: workspace (default) or demo | |
| end_time | Yes | End time, ISO 8601 (e.g. 2025-01-07T23:59:59Z) | |
| start_time | Yes | Start time, ISO 8601 (e.g. 2025-01-01T00:00:00Z) | |
| include_counts | No | Include per-value counts in the output (default: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | |
| field | Yes | |
| total | No | |
| values | Yes | |
| include_counts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint and openWorldHint annotations by stating that the server produces a CSV and optionally includes per-value counts. It does not contradict annotations and provides useful output format information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core function and output format in the first sentence and adds optional features and examples in the second. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema coverage and presence of an output schema, the description adequately covers the main use case. However, it could explicitly mention the scope parameter and provide more detail on the query usage to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters with full descriptions, so the description does not add significant new meaning. While it reinforces the role of start/end_time and query, it does not explain nuances like scope or include_counts beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Return the distinct values'), the resource ('a single session field'), and constraints ('over a time range'). It also mentions optional per-value counts. This distinguishes it from sibling tools like search-sessions or session-fields, which return different results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete use cases ('extracting distinct IPs, ports, or other field values matching a query'), but does not explicitly state when not to use this tool or compare it to alternatives. The guidance is helpful but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test-alert-webhookTest Alert WebhookAIdempotent
Send a test payload to a webhook URL to verify delivery before wiring it to an alert.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Webhook URL to test | |
| type | No | Webhook type, if applicable | |
| headers | No | Custom headers to send | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | |
| status_code | No | |
| response_body | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool sends a test payload to verify delivery, which is consistent with the annotations (idempotentHint=true, destructiveHint=false). It adds context about verification without contradicting annotations. No additional behavioral details like auth or rate limits are provided, but annotations already cover safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that effectively communicates the tool's purpose. No filler or redundant information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description adequately explains the purpose. An output schema exists (not shown), so return values are covered elsewhere. Minor gaps exist, such as what the test payload contains or how verification is reported, but overall it's sufficient for a test 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?
The input schema has 100% coverage with descriptions for all 4 parameters. The tool description does not add any additional meaning beyond the schema; it is a concise one-liner. With high schema coverage, 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?
The description clearly states the tool sends a test payload to a webhook URL to verify delivery before wiring it to an alert. The verb 'send test payload' and resource 'webhook URL' are specific, and the purpose is distinguished from sibling tools like create-alert which actually creates an alert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'before wiring it to an alert', which implies the tool should be used to test webhook delivery prior to finalizing alert configuration. No explicit alternatives or exclusions are given, but the context is clear enough given the tool's specific purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-alertUpdate AlertAIdempotent
Update an alert's query, schedule, recipients, name, or enabled state.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Alert name | |
| query | Yes | GNQL query the alert monitors | |
| enabled | No | Whether the alert is active | |
| alert_id | Yes | Alert ID (UUID) | |
| schedule | Yes | When the alert query runs and notifies | |
| recipients | Yes | Where to send alert notifications | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. | |
| query_workspace_id | No | Workspace to run the query against, if different |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| type | No | |
| status | No | |
| enabled | No | |
| schedule | No | |
| created_at | No | |
| gnql_query | No | |
| parameters | No | |
| recipients | No | |
| updated_at | No | |
| workspace_id | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds no additional behavioral context beyond listing updatable fields. It does not contradict annotations, but it does not enrich the agent's understanding of side effects (e.g., whether updates trigger notifications).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 14 words, front-loading the action and objects. No extraneous information. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a complex nested schema (schedule, recipients) and an output schema (context indicates presence). The description is minimal, but the schema fully covers parameters and return values. It adequately informs the agent about the tool's scope, though it could mention that all required fields (alert_id, name, query, schedule, recipients) must be provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already described in the input schema. The tool description adds no new meaning beyond the schema, merely echoing field names (query, schedule, etc.). 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?
The description 'Update an alert's query, schedule, recipients, name, or enabled state' clearly states the verb (update) and the specific resources (alert fields). It distinguishes from sibling tools like 'enable-alert' (which likely only toggles enabled state) and 'get-alert' (read-only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists what fields can be updated but does not explicitly state when to use this tool vs. alternatives like 'enable-alert' or 'get-alert'. It lacks guidance on context or prerequisites, leaving the agent to infer from the field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-blocklistUpdate BlocklistAIdempotent
Update a blocklist's query, name, IP limit, or enabled state.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-friendly blocklist name | |
| query | Yes | GNQL query whose matching IPs populate the blocklist | |
| enabled | No | Whether the blocklist is active | |
| ip_limit | No | Max IPs to include | |
| blocklist_id | Yes | Blocklist ID (UUID) | |
| workspace_id | No | Workspace ID (UUID). Defaults to the workspace the API key is bound to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| query | No | |
| token | No | |
| enabled | No | |
| ip_limit | No | |
| created_at | No | |
| updated_at | No | |
| workspace_id | No | |
| last_ip_count | No | |
| entitlement_level | No | |
| query_workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no extra behavioral context (e.g., permission requirements, side effects, error states). Given annotation coverage, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero wasted words. It efficiently communicates the tool's purpose while remaining minimal.
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 6 parameters, 100% schema coverage, and an output schema, the description's minimalism is partly justified. However, it lacks any summary of side effects, return value, or usage notes. Adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema sufficiently documents all 6 parameters. The description merely lists fields already in the schema and adds no additional meaning, interactions, or constraints. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Update') and resource ('blocklist'), and explicitly lists the modifiable fields (query, name, IP limit, enabled state). This clearly distinguishes the tool from siblings like 'list-blocklists' (listing) and 'get-blocklist-ips' (reading IPs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there any prerequisites, exclusions, or context for usage. The description only states what it does, which is insufficient for an AI agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct, clearly defined purpose. BSI, alert, blocklist, session, and GNQL tools have unique suffixes that differentiate them, and the descriptions leave no ambiguity about what each tool does.
Most tools follow a verb_noun pattern with hyphens (e.g., export-sessions-pcap, lookup-ip-context). However, a few tools like session-fields, session-timeseries, and callback-overview start with nouns, breaking the pattern. Overall, conventions are mostly consistent.
With 28 tools, the set exceeds the 25-tool threshold for 'too many.' While each tool serves a specific need, the count feels heavy for a single server, and several stats tools could potentially be combined with a parameter.
The read-side is very complete—IP context, sessions, GNQL, BSI, callbacks, alerts, and blocklists are well-covered. However, there is no tool to create or delete alerts or blocklists, which is a notable lifecycle gap for management workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
GreyNoise Community MCP — internet scanner classification (free tier with key)
Enrich, search, assess, and manage threat intelligence through 80+ typed MCP tools.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server that extracts Indicators of Compromise (IoCs) from unstructured text and checks their reputation across multiple threat intelligence services. It enables real-time analysis of IPs, domains, hashes, and URLs, providing enriched context for security workflows within LLMs.519MIT
- AlicenseDqualityDmaintenanceA comprehensive MCP server providing tools for IP, domain, email, and image-based open-source intelligence. It integrates services like Shodan, VirusTotal, and HaveIBeenPwned to facilitate advanced security research and data gathering.5648ISC
- AlicenseNot gradedqualityAmaintenanceAn MCP server that exposes a 60+ tool security and threat-intel stack to AI agents, enabling secret scanning, Sigma rule generation, ransomware lookup, OSINT, and deep research.1MIT
- AlicenseBqualityBmaintenanceA professional-grade network analysis MCP server that integrates Wireshark/TShark, Nmap, and threat intelligence to enable packet capture, network scanning, threat detection, and credential extraction through natural language.412MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/GreyNoise-Intelligence/greynoise-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server