Skip to main content
Glama

cortex-mcp is a Model Context Protocol (MCP) server for Cortex, the observable analysis and active-response engine from StrangeBee/TheHive Project. It exists because analysts already drive Cortex by hand through its web UI or raw REST API, and an AI client can do that work faster: detonate an indicator across every applicable analyzer, aggregate the taxonomy verdicts, and pull artifacts without anyone clicking through a dozen jobs. It differs from a generic HTTP bridge by exposing Cortex's real domain model as 31 typed MCP tools, auto-detecting observable data types, fanning out analysis with a cap, and gating every destructive action (responders, deletes, file reads) behind explicit confirmation.

What it does

cortex-mcp connects an MCP-capable AI client (Claude Desktop, Claude Code, Codex CLI, OpenClaw, Hermes, and others) to a running Cortex instance so the model can perform real observable analysis and threat-intelligence enrichment. Cortex is the analyzer/responder engine in the StrangeBee and TheHive SOAR stack: it runs analyzers against observables (IPs, domains, URLs, file hashes, emails, files) and executes responders against TheHive entities. This server speaks Cortex's REST API and projects the full pipeline as MCP tools, resources, and prompts, so an agent can browse analyzer definitions, enable and configure them, submit observables, wait for job reports, extract IOC artifacts, and triage alerts. Auto-detection classifies an observable's data type before analysis, bulk analysis fans out across applicable analyzers and aggregates the taxonomy results, and superadmin tools cover organization and user/API-key management. The result is conversational observable analysis: ask "what does Cortex think of 185.220.101.42?" and get an aggregated multi-analyzer verdict back.

Related MCP server: misp-mcp

Prerequisites

  • Node.js 20 or later

  • A running Cortex instance (v3.x recommended)

  • A Cortex API key with appropriate permissions

Installation from source

If you prefer to run from a checkout instead of npx:

git clone https://github.com/lidless-labs/cortex-mcp.git
cd cortex-mcp
npm install
npm run build

Then point your client at the built binary (see the per-client recipes below).

Try it (copy-paste MCP client config)

Add this to your MCP client config (this example is Claude Desktop's claude_desktop_config.json; the same command/args/env shape works for Claude Code, Codex, OpenClaw, and Hermes). It runs the published npm package directly with npx, no clone or build required:

{
  "mcpServers": {
    "cortex": {
      "command": "npx",
      "args": ["-y", "thehive-cortex-mcp"],
      "env": {
        "CORTEX_URL": "http://cortex.example.com:9001",
        "CORTEX_API_KEY": "your-org-admin-key",
        "CORTEX_SUPERADMIN_KEY": "your-superadmin-key"
      }
    }
  }
}

The npm package is named thehive-cortex-mcp; it installs a cortex-mcp binary. Set CORTEX_SUPERADMIN_KEY only if you want the organization and user management tools.

Usage

Claude Code

claude mcp add cortex \
  --env CORTEX_URL=http://cortex.example.com:9001 \
  --env CORTEX_API_KEY=your-org-admin-key \
  --env CORTEX_SUPERADMIN_KEY=your-superadmin-key \
  -- npx -y thehive-cortex-mcp

Add --scope user to make it available from any directory instead of only the current project.

OpenClaw

openclaw mcp set cortex '{
  "command": "npx",
  "args": ["-y", "thehive-cortex-mcp"],
  "env": {
    "CORTEX_URL": "http://cortex.example.com:9001",
    "CORTEX_API_KEY": "your-org-admin-key",
    "CORTEX_SUPERADMIN_KEY": "your-superadmin-key"
  }
}'

If you are running from a source checkout instead, point command/args at the built dist/index.js:

openclaw mcp set cortex '{
  "command": "node",
  "args": ["/absolute/path/to/cortex-mcp/dist/index.js"],
  "env": {
    "CORTEX_URL": "http://cortex.example.com:9001",
    "CORTEX_API_KEY": "your-org-admin-key",
    "CORTEX_SUPERADMIN_KEY": "your-superadmin-key"
  }
}'

Then restart the OpenClaw gateway so the new server is picked up:

systemctl --user restart openclaw-gateway
openclaw mcp list   # confirm "cortex" is registered

Hermes Agent

Hermes Agent reads MCP config from ~/.hermes/config.yaml under the mcp_servers key. Add an entry:

mcp_servers:
  cortex:
    command: "npx"
    args: ["-y", "thehive-cortex-mcp"]
    env:
      CORTEX_URL: "http://cortex.example.com:9001"
      CORTEX_API_KEY: "your-org-admin-key"
      CORTEX_SUPERADMIN_KEY: "your-superadmin-key"

Then reload MCP from inside a Hermes session:

/reload-mcp

Codex CLI

Codex CLI registers MCP servers via codex mcp add:

codex mcp add cortex \
  --env CORTEX_URL=http://cortex.example.com:9001 \
  --env CORTEX_API_KEY=your-org-admin-key \
  --env CORTEX_SUPERADMIN_KEY=your-superadmin-key \
  -- npx -y thehive-cortex-mcp

Codex writes the entry to ~/.codex/config.toml under [mcp_servers.cortex]. Verify with:

codex mcp list

Standalone

export CORTEX_URL=http://cortex.example.com:9001
export CORTEX_API_KEY=your-org-admin-key
npx -y thehive-cortex-mcp     # or `npm start` from a source checkout

MCP Tools (31)

Status

Tool

Description

cortex_get_status

Get Cortex instance health, version, and configuration

Analyzer Tools

Tool

Description

cortex_list_analyzers

List all enabled analyzers, optionally filtered by data type

cortex_get_analyzer

Get details about a specific analyzer by ID

cortex_run_analyzer

Submit an observable to a specific analyzer for analysis

cortex_run_analyzer_by_name

Run an analyzer by name instead of ID (convenience wrapper)

cortex_run_analyzer_file

Submit a file to an analyzer. filePath is confined to CORTEX_FILE_BASE_DIR (disabled if unset); or pass fileBase64

Analyzer Definition Tools

Tool

Description

cortex_list_analyzer_definitions

Browse all available analyzer definitions with filtering (by data type, free/no-config, search)

cortex_enable_analyzer

Enable an analyzer definition in the current org with configuration

cortex_disable_analyzer

Disable (remove) an enabled analyzer (destructive; requires confirm=true)

Job Tools

Tool

Description

cortex_get_job

Get the status and details of an analysis job

cortex_get_job_report

Get the full report of a completed analysis job

cortex_wait_and_get_report

Wait for a job to complete and return the report

cortex_list_jobs

List recent analysis jobs with optional filters

cortex_get_job_artifacts

Get artifacts (extracted IOCs) from a completed job

cortex_delete_job

Delete a specific job (destructive; requires confirm=true)

cortex_cleanup_jobs

Bulk delete jobs by status or age (with dry-run)

Responder Tools

Tool

Description

cortex_list_responders

List all enabled responders, optionally filtered by data type

cortex_run_responder

Execute a responder action against a TheHive entity (destructive; requires CORTEX_ALLOW_DESTRUCTIVE=1 and confirm=true)

Responder Definition Tools

Tool

Description

cortex_list_responder_definitions

Browse all available responder definitions with filtering

cortex_enable_responder

Enable a responder definition with configuration

cortex_disable_responder

Disable (remove) an enabled responder

Bulk Operations

Tool

Description

cortex_analyze_observable

Run analyzers against an observable (auto-detected data type) and aggregate taxonomy results. Pass an analyzers allowlist, or fanOut=true to run all applicable analyzers (capped by CORTEX_MAX_FANOUT)

Organization Management (superadmin)

Tool

Description

cortex_list_organizations

List all organizations

cortex_get_organization

Get organization details

cortex_create_organization

Create a new organization

cortex_update_organization

Update organization description or status

User Management (superadmin)

Tool

Description

cortex_list_users

List all users across organizations

cortex_get_user

Get user details

cortex_create_user

Create a new user in an organization

cortex_renew_user_key

Generate a new API key for a user (invalidates previous)

cortex_get_user_key

Retrieve a user's current API key

MCP Resources (4)

URI

Description

cortex://analyzers

Enabled analyzers with capabilities

cortex://analyzer-definitions

All available analyzer definitions with config requirements

cortex://responder-definitions

All available responder definitions with config requirements

cortex://jobs/recent

Last 50 analysis jobs

MCP Prompts (4)

Prompt

Description

analyze-observable

Guided workflow for analyzing an observable through Cortex

investigate-ioc

Deep investigation workflow for a suspicious IOC

setup-cortex

Guided setup wizard for fresh Cortex instances (enable free analyzers, configure API keys)

triage-alert

Structured alert triage workflow with multi-observable analysis and risk assessment

Configuration

Variable

Required

Default

Description

CORTEX_URL

Yes

-

Cortex base URL (e.g., http://cortex.example.com:9001)

CORTEX_API_KEY

Yes

-

API key for normal operations (org admin level)

CORTEX_SUPERADMIN_KEY

No

-

Superadmin API key for org/user/definition management

CORTEX_VERIFY_SSL

No

true

Set to false to skip SSL verification. Applied via a scoped HTTP dispatcher for Cortex requests only; it does not disable TLS verification process-wide.

CORTEX_TIMEOUT

No

30

Request timeout in seconds

CORTEX_FILE_BASE_DIR

No

-

Absolute base directory that cortex_run_analyzer_file may read files from. filePath is confined to this directory (realpath checked to defeat symlink/.. escapes); paths outside it are refused. When unset, reading files by path is disabled and you must submit file content via fileBase64.

CORTEX_ALLOW_DESTRUCTIVE

No

0

Set to 1 (or true) to permit running responders (cortex_run_responder), which cause real-world side effects. Off by default. Responders also require confirm=true per call.

CORTEX_MAX_FANOUT

No

10

Maximum number of analyzers cortex_analyze_observable will submit to in a single call when fanning out.

Security and safety gates

This server can trigger real-world actions and submit observables to third-party services, so several capabilities are secured by default:

  • Arbitrary file reads are blocked. cortex_run_analyzer_file only reads files inside CORTEX_FILE_BASE_DIR (realpath-confined to defeat symlink/.. escapes). With no base dir configured, path-based reads are refused; use fileBase64 to submit content explicitly.

  • Responders are gated. cortex_run_responder requires both CORTEX_ALLOW_DESTRUCTIVE=1 in the environment and confirm=true in the call.

  • Single-item destructive tools require confirmation. cortex_delete_job and cortex_disable_analyzer require confirm=true.

  • Bulk analysis is conservative. cortex_analyze_observable does not fan out to every analyzer by default. Pass an explicit analyzers allowlist, or set fanOut=true to run all applicable analyzers (capped by CORTEX_MAX_FANOUT).

  • SSL verification is scoped. Disabling CORTEX_VERIFY_SSL relaxes TLS only for Cortex connections, never for the whole Node process.

Examples

Set up analyzers from scratch

1. Use cortex_list_analyzer_definitions with freeOnly=true to find analyzers
   that need no API keys.
2. Use cortex_enable_analyzer to enable "Abuse_Finder_3_0" with empty config.
3. Use cortex_analyze_observable with data "8.8.8.8" and fanOut=true to run
   all applicable analyzers (or pass analyzers ["Abuse_Finder"] to scope it).

Auto-detect observable type

Use cortex_analyze_observable with data "185.220.101.42" and fanOut=true
(no dataType needed - auto-detects as IP). Or pass an `analyzers` allowlist
to limit which analyzers run.

Clean up old failed jobs

Use cortex_cleanup_jobs with status "Failure", dryRun true to preview,
then dryRun false to delete.

Analyze a file

Set CORTEX_FILE_BASE_DIR=/srv/cortex-uploads in the server environment, then:
Use cortex_run_analyzer_file with analyzerId "Yara_3_0",
filePath "/srv/cortex-uploads/suspicious.exe" to scan with YARA rules.
(Paths outside CORTEX_FILE_BASE_DIR are refused; alternatively pass fileBase64.)

Manage API keys

Use cortex_renew_user_key with userId "analyst1" to rotate their API key.

Triage a security alert

Use the triage-alert prompt with alertDescription "Suspicious outbound traffic
detected" and observables "185.220.101.42, evil.example.com, 44d88612fea8a8f36de82e1278abb02f"

Supported Data Types

Type

Examples

Auto-detected

ip

8.8.8.8, 2001:db8::1

yes

domain

example.com

yes

url

https://malware.example.com/payload

yes

hash

MD5, SHA1, SHA256, SHA512

yes

mail

user@example.com

yes

fqdn

mail.example.com

As domain

filename

malware.exe

Manual

registry

HKLM\Software\Malware

Manual

file

Binary file uploads

Manual

other

CVEs, custom types

Manual

Deployment

Proxmox LXC

bash -c "$(wget -qLO - https://raw.githubusercontent.com/lidless-labs/cortex-mcp/main/scripts/proxmox_install.sh)"

Why not something else?

  • The Cortex web UI is built for one analyst clicking through jobs by hand. cortex-mcp puts the same engine behind an AI client, so analysis, taxonomy aggregation, and artifact extraction happen conversationally instead of through a dozen page loads.

  • A raw REST wrapper or generic HTTP MCP bridge gives a model an untyped endpoint and no domain knowledge. cortex-mcp models analyzers, responders, jobs, definitions, organizations, and users as 31 typed tools with auto data-type detection, capped fan-out, and built-in safety gates, so the agent works in Cortex's vocabulary rather than reconstructing the API from scratch.

  • Wiring Cortex into a SOAR runbook or n8n flow is great for fixed, pre-authored pipelines. This server is for the open-ended path: ad hoc enrichment, investigation, and triage where the analyst (or the agent) decides the next step as results come in.

  • thehive-mcp (the companion server) drives case and alert management in TheHive. cortex-mcp is the analysis-and-response layer; the two are complementary, not substitutes.

What cortex-mcp is not

  • It is not a Cortex replacement or a reimplementation of analyzers. It calls a Cortex instance you already run; Cortex still does the analysis.

  • It is not a SIEM, a case manager, or a TheHive client. Case and alert workflows belong to TheHive (see thehive-mcp).

  • It is not an autonomous responder. Destructive actions (responders, job deletion, file reads by path) are off or confirmation-gated by default and never fire silently.

  • It is not a hosted service. It runs locally as a stdio MCP server next to your client; nothing is sent anywhere except the Cortex instance you configure.

Testing

npm test              # Unit tests
npm run test:watch    # Watch mode
npm run lint          # Type check

# Integration tests (requires live Cortex instance)
CORTEX_URL=http://cortex.example.com:9001 \
CORTEX_API_KEY=your-key \
CORTEX_SUPERADMIN_KEY=your-superadmin-key \
npx vitest run tests/integration.test.ts

Project Structure

cortex-mcp/
  src/
    index.ts                  # MCP server entry point
    config.ts                 # Environment config + validation
    client.ts                 # Cortex REST API client (full surface)
    types.ts                  # Cortex API type definitions
    resources.ts              # MCP resources (4)
    prompts.ts                # MCP prompts (4)
    tools/
      analyzers.ts            # Analyzer tools (list, get, run, run-by-name)
      analyzer-definitions.ts # Definition browsing, enable, disable
      jobs.ts                 # Job management + cleanup
      responders.ts           # Responder tools (list, run)
      responder-definitions.ts # Definition browsing, enable, disable
      bulk.ts                 # Bulk analysis with auto-detect
      status.ts               # Health/version check
      organizations.ts        # Org CRUD (superadmin)
      users.ts                # User CRUD + key management (superadmin)
  tests/
    client.test.ts            # API client unit tests
    tools.test.ts             # Tool handler unit tests
    integration.test.ts       # Live instance integration tests
  scripts/
    proxmox_install.sh        # Proxmox LXC deployment script

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md for the contribution path and SECURITY.md for reporting vulnerabilities. By participating you agree to the Code of Conduct.

License

MIT. See LICENSE.


Available Tools

31 tools
cortex_analyze_observableA

Run applicable analyzers against an observable and collect aggregated results with taxonomy summary. Can auto-detect data type. By default only an explicit allowlist of analyzers runs; set fanOut=true to submit to every applicable analyzer (capped by CORTEX_MAX_FANOUT). Fanning out submits the observable to many third-party services (SSRF-by-proxy / IOC disclosure / quota burn), so it is opt-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
papNoPermissible Actions Protocol level (0-3). Default: 2
tlpNoTraffic Light Protocol level (0=WHITE, 1=GREEN, 2=AMBER, 3=RED). Default: 2/AMBER
dataYesThe observable value (IP, domain, hash, URL, email, etc.)
fanOutNoIf true, submit the observable to ALL applicable analyzers (capped by maxAnalyzers / CORTEX_MAX_FANOUT). Default false: you must pass an `analyzers` allowlist.
timeoutNoTimeout in seconds per analyzer (default: 300)
dataTypeNoThe observable data type. If omitted, will be auto-detected from the value.
analyzersNoExplicit allowlist of analyzer names (substring match, case-insensitive) to run. Required unless fanOut=true. Only matching analyzers that also support the data type are submitted.
maxAnalyzersNoHard cap on how many analyzers to run this call. Defaults to and is clamped by the server's CORTEX_MAX_FANOUT (default 10).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses auto-detection, the allowlist vs fan-out behavior, risks of fan-out (SSRF, IOC disclosure, quota burn), and the cap via CORTEX_MAX_FANOUT. It does not describe the return value structure or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long and packs essential information without fluff. The first sentence is dense but covers the core purpose and key features.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters and no output schema, the description does not detail the return value format (only mentions 'aggregated results with taxonomy summary'). It also omits behavior for timeouts or error handling. However, the schema and annotations cover many aspects, making it adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context about fanOut risks and auto-detection, but the schema already explains the parameters well. The added value is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Run analyzers' and the resource 'observable'. It mentions 'aggregated results with taxonomy summary', which distinguishes it from sibling tools like cortex_run_analyzer that run a single analyzer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly contrasts the two modes: 'only an explicit allowlist' vs 'fanOut=true', and explains that fanning out is opt-in due to third-party risks. It does not, however, explicitly recommend when to use this tool over sibling tools like cortex_run_analyzer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_cleanup_jobsA

Delete multiple jobs by status or age. Useful for cleaning up failed or old jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum jobs to process (default: 100)
dryRunNoIf true (default), only count matching jobs without deleting them
statusNoDelete jobs with this status
olderThanDaysNoDelete jobs older than this many days

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It states 'Delete' indicating mutability, but does not elaborate on irreversibility, authorization needs, or rate limits. The schema covers dryRun behavior, so the description adds minimal behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first states the core action, the second provides a use case. No filler words, efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters with 100% schema coverage and no output schema, the description is adequate. It explains the tool's purpose and filtering. However, it does not clarify whether combining 'status' and 'olderThanDays' uses AND or OR logic, but the schema hints at separate usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description mentions filtering 'by status or age,' aligning with the 'status' and 'olderThanDays' parameters, but does not add significant meaning beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Delete multiple jobs by status or age' and gives a use case 'cleaning up failed or old jobs.' It distinguishes from siblings like cortex_delete_job (single job) and cortex_list_jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case ('cleaning up failed or old jobs') but does not explicitly mention when not to use or compare to alternatives like cortex_delete_job for single deletions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_create_organizationA

Create a new organization in Cortex (requires superadmin API key)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesOrganization name (used as ID, no spaces recommended)
descriptionYesOrganization description

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses the auth requirement but does not explain side effects, success/failure outcomes, or return value. It is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the key purpose and constraint. Every word is necessary and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create tool with no output schema, the description covers the core action and a requirement but does not mention what the tool returns or any post-conditions. It is minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds value by clarifying that the name is used as an ID with no spaces recommended, which goes beyond the schema's description. The description parameter adds no extra info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Create), resource (new organization), and context (in Cortex), with a specific prerequisite (requires superadmin API key). This effectively distinguishes it from siblings like cortex_create_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a key usage condition (superadmin API key) but does not explicitly state when to use this tool versus alternatives like cortex_update_organization. However, the purpose is clear enough for basic selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_create_userA

Create a new user in an organization (requires superadmin API key)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUser display name
loginYesUser login (used as ID)
rolesYesUser roles: "read", "analyze", "orgadmin", or "superadmin"
passwordNoOptional initial password
organizationYesOrganization to assign the user to

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It states 'Create' (mutation) and the auth requirement, but it does not mention possible error states (e.g., duplicate login), idempotency, rate limits, or the response format. This leaves significant undocumented behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that contains all essential information: the action, resource, and a key constraint. There is no unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and 5 parameters. While the description and schema cover the inputs, the lack of any mention of return values or error behavior (e.g., what happens on success or failure) leaves the agent uncertain about the outcome. However, for a standard creation tool, the description is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 5 parameters with descriptions (100% coverage). The description does not add semantic value beyond what the schema provides. Per guidelines, baseline 3 is appropriate when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new user in an organization', specifying the verb 'Create' and the resource 'user in an organization'. This distinguishes it from sibling tools like cortex_list_users (list) and cortex_get_user (retrieve). The additional context 'requires superadmin API key' further clarifies the intended scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly notes the requirement for a superadmin API key, which is a critical usage prerequisite. While it does not provide explicit exclusions or alternative tools, the context of user creation is clear, and the sibling names make distinctions straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_delete_jobA

Delete a specific analysis job by ID. DESTRUCTIVE: requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe job ID to delete
confirmNoMust be set to true to actually delete the job. Defaults to false as a safety guard.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must carry the burden. It discloses destructive nature and the safety guard (confirm flag), but lacks details on idempotency, error behavior, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero fluff. The key information (verb, resource, destructiveness, requirement) is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with no output schema, the description covers the essential behavioral constraints. Missing return value details, but acceptable given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds marginal value. It notes that confirm is a safety guard, which reinforces the schema's default, but does not add new semantics for jobId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Delete' and the resource 'a specific analysis job by ID', distinguishing it from sibling tools like cortex_get_job (read) and cortex_cleanup_jobs (bulk).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly warns about destructiveness and requires confirm=true, providing clear context for use. However, it does not explicitly state when not to use or compare to alternatives, though the destructiveness hint implies caution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_disable_analyzerA

Disable (remove) an enabled analyzer from the current organization. DESTRUCTIVE: requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be set to true to actually disable/remove the analyzer. Defaults to false as a safety guard.
analyzerIdYesThe enabled analyzer's ID (the internal ID from cortex_list_analyzers, not the definition ID)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It declares the tool as 'DESTRUCTIVE' and notes the confirm flag requirement. This provides essential behavioral insight. Additional details like rate limits or auth scope are not provided, but the core destructiveness is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences. Every word adds value: the action, scope, destructiveness warning, and confirmation requirement. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential aspects: what it does, destructiveness, and parameter source (ID from list_analyzers). With no output schema, it doesn't explain return values, but for a disable operation, this is likely sufficient. Could explicitly mention it as inverse of cortex_enable_analyzer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description reinforces the confirm requirement but adds no extra meaning beyond the schema, which already explains the default and ID source. The description's mention of 'requires confirm=true' echoes schema info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Disable (remove) an enabled analyzer' and specifies the scope 'from the current organization'. It distinguishes from siblings like cortex_enable_analyzer and cortex_list_analyzers, making the tool's purpose obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description highlights the destructive nature and the need for confirm=true. While it doesn't explicitly list alternatives, the sibling tool names (e.g., cortex_enable_analyzer) provide context. The safety guard is well emphasized.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_disable_responderA

Disable (remove) an enabled responder from the current organization

ParametersJSON Schema
NameRequiredDescriptionDefault
responderIdYesThe enabled responder's ID (the internal ID from cortex_list_responders, not the definition ID)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It only states the action without disclosing side effects, permissions needed, or error conditions. For a mutation tool, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and directly states the tool's purpose without any redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description is adequate but lacks broader context. It does not mention usage guidelines, consequences of the action, or relationship to other tools, which would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, responderId, is fully described in the schema (100% coverage). The description adds valuable context by specifying it is the internal ID from cortex_list_responders and not the definition ID, which aids correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Disable (remove) an enabled responder' and specifies the scope 'from the current organization'. It uses a specific verb and resource, naturally distinguishing from sibling tools like cortex_enable_responder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like cortex_enable_responder or cortex_list_responders. There is no mention of prerequisites or typical usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_enable_analyzerA

Enable an analyzer definition in the current organization. Provide configuration values for any required fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNoRate limit: max jobs per rate unit (default: 100)
jobCacheNoCache duration in minutes for identical jobs (default: 10)
rateUnitNoRate limit unit (default: Day)Day
definitionIdYesThe analyzer definition ID (e.g., 'Abuse_Finder_3_0', 'VirusTotal_GetReport_3_1')
configurationNoConfiguration key-value pairs (API keys, URLs, etc.). Check cortex_list_analyzer_definitions for required fields.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It fails to mention idempotency, overwriting behavior, or effects of enabling an already enabled analyzer. The parameters rate, rateUnit, and jobCache are not explained in the description, leaving their purpose unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, front-loading the main action. Every sentence is essential and contributes to clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, no output schema, and no annotations. The description omits details on optional parameters and behavioral guarantees, leaving an agent uncertain about usage and side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters with descriptions, so baseline is 3. The description adds context about required configuration fields but does not elaborate on rate, rateUnit, or jobCache beyond the schema. Thus, little additional value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Enable', the resource 'analyzer definition', and the scope 'in the current organization'. It effectively distinguishes from sibling tools like cortex_disable_analyzer or cortex_run_analyzer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises to provide configuration values for required fields and references cortex_list_analyzer_definitions for needed fields, giving practical guidance. However, it does not explicitly state when not to use this tool or mention alternatives like disabling or listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_enable_responderC

Enable a responder definition in the current organization. Provide configuration values for any required fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNoRate limit: max executions per rate unit (default: 100)
rateUnitNoRate limit unit (default: Day)Day
definitionIdYesThe responder definition ID (e.g., 'Mailer_1_0')
configurationNoConfiguration key-value pairs. Check cortex_list_responder_definitions for required fields.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It indicates a mutation ('Enable') but does not discuss reversibility, required permissions, failure modes, or asynchronous behavior. The description lacks important safety and side-effect context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, efficient and front-loaded. No unnecessary words. Could be slightly more detailed without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 4 parameters and no output schema, the description does not mention return values, status of the operation, or error conditions. Lacks context about what happens after enabling (e.g., responder becomes available for execution).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents parameters well. The description adds 'Provide configuration values for any required fields', which slightly reinforces the purpose of the configuration parameter but does not add new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Enable') and the resource ('a responder definition') with context ('in the current organization'). It distinguishes from siblings like 'cortex_disable_responder' and 'cortex_enable_analyzer', but could be more specific about enabling previously disabled responders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., when to enable vs. run a responder). Does not mention prerequisites like listing definitions first or checking configuration requirements via cortex_list_responder_definitions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_analyzerA

Get details about a specific analyzer by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
analyzerIdYesThe analyzer ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It implies a safe read operation but gives no details on error handling, permissions, or return format. For a simple retrieval, it's adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. Every part contributes to purpose clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one required param, no output schema, no nested objects), the description covers the essential purpose. Could mention that it returns analyzer details, but 'Get details' suffices.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (analyzerId: 'The analyzer ID'). The description adds no extra meaning beyond 'by ID', which is already clear from the schema. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get details about a specific analyzer by ID' clearly states the action (get details), the resource (analyzer), and scope (specific, by ID). It distinguishes from sibling tools like cortex_list_analyzers (list all) and cortex_run_analyzer (run analyzer).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have an analyzer ID and need details, but does not explicitly state when to use this over alternatives like cortex_list_analyzers or other get tools. No exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_jobA

Get the status and details of an analysis job

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe job ID to look up

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description implies a read-only operation via 'Get', but does not explicitly state safety, authentication requirements, or side effects. It adds minimal behavioral context beyond the name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with verb, no extraneous words. Maximally concise while still conveying purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description adequately states what the tool returns (status and details). It is complete enough for an agent to understand the basic function.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with the jobId parameter documented. The description adds no additional meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Get' and resource 'status and details of an analysis job', which is specific and distinct from sibling tools like cortex_get_job_artifacts and cortex_get_job_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives such as cortex_get_job_artifacts or cortex_get_job_report. The description does not mention usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_job_artifactsA

Get artifacts (extracted observables/IOCs) from a completed analysis job

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe job ID to get artifacts for

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the job must be completed but does not disclose error handling, response format, or whether the operation is read-only. Basic transparency is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently conveys the tool's purpose with no superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required param, no output schema, no annotations), the description covers the core functionality and a key constraint (completed job). It omits details like pagination or error handling but is generally sufficient for a well-understood context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (one parameter with a clear description). The tool description adds no additional meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves artifacts (IOCs) from a completed analysis job, using a specific verb and resource. It also implicitly differentiates from siblings like cortex_get_job and cortex_get_job_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage after job completion ('from a completed analysis job') but does not explicitly state when to use this tool over alternatives or mention prerequisites or failure conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_job_reportA

Get the full report of a completed analysis job

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe job ID to get the report for

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes the action but does not mention any behavioral traits (e.g., read-only, auth requirements, side effects). For a simple retrieval operation, the lack of detail is acceptable but not excellent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is front-loaded and to the point. Every word is necessary and there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description is mostly complete. It would benefit from mentioning that the job must be completed and from noting any differences from cortex_wait_and_get_report, but it suffices for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter description is adequate. The tool description adds no additional meaning beyond what the schema already 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('Get'), the resource ('full report'), and the condition ('completed analysis job'). Distinguishes from sibling tools like cortex_get_job and cortex_get_job_artifacts by specifying 'full report' and 'completed'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for completed jobs via the word 'completed', providing clear context. Does not explicitly state when not to use or name alternatives, but the condition is sufficient for basic guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_organizationA

Get details about a specific organization (requires superadmin API key)

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYesThe organization ID or name

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the superadmin requirement but does not specify side effects, error handling, or rate limits. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundancy, purpose is front-loaded. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with no output schema, the description conveys the core purpose and auth requirement. Could hint at response fields, but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description does not add parameter details beyond implying orgId specifies which organization. No format or constraints added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb (Get) and resource (organization), includes a requirement (superadmin API key), and distinguishes from siblings like cortex_list_organizations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides the authentication prerequisite but lacks explicit when-not-to-use or alternative tool references. The requirement is clear but no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_statusA

Get Cortex instance health status, version info, and configuration

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It indicates a read-only operation (getting status), implying no side effects. However, it does not mention potential rate limits, authentication needs, or behavior if instance is down. Acceptable but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, 9 words, front-loaded with action and resources. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (no parameters, no output schema), the description adequately covers the purpose. It could optionally mention output format for completeness, but the current description is sufficient for an agent to understand what the tool does.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters (0 params, 100% schema coverage). Baseline for 0 params is 4. The description does not need to add parameter meaning, and it correctly omits any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves Cortex instance health status, version info, and configuration. Uses a specific verb ('Get') and specific resources, distinguishing it from siblings that deal with jobs, users, or analyzers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no context on prerequisites or exclusions. It simply states functionality without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_userA

Get details about a specific user (requires superadmin API key)

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe user login/ID

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the authorization requirement (superadmin API key) and implies a read-only operation ('Get details'), but does not explicitly state read-only, non-destructive behavior, or describe the format of the returned details. Additional context about what fields are returned would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the tool's purpose and critical usage condition. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one required parameter and no output schema. The description covers the purpose and auth requirement adequately for a simple retrieval tool, but lacks detail on what 'details' are returned (e.g., email, roles, organization). With no output schema, the agent lacks full context on expected output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the 'userId' parameter already described as 'The user login/ID'. The description adds no further meaning, format, or examples beyond the schema, so it meets the baseline but provides no extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get details about a specific user') and resource, and distinguishes from sibling tools like 'cortex_list_users' (list all) and 'cortex_create_user' (create). It also includes the required authorization context ('requires superadmin API key').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly mentions the prerequisite of a superadmin API key, providing clear usage context. It does not explicitly state when not to use or name alternatives, but the purpose is so specific that alternatives are implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_get_user_keyA

Get the current API key for a user. Requires superadmin API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe user login/ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must bear the full burden. It states the operation is a get and requires superadmin, but does not disclose if the key is returned as plain text, any security implications, or that it is a read-only operation. More detail would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and 12 words, extremely concise and front-loaded. Every word provides value with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool with no output schema, the description is fairly complete: it covers the action, resource, and auth requirement. However, it could mention what the response contains or edge cases like key expiration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a description for userId. The description adds no additional meaning beyond the schema, making it baseline appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'current API key for a user'. It distinguishes from siblings like cortex_renew_user_key (renew vs get) and cortex_get_user (user info vs key).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the requirement of 'superadmin API key', which is a key guideline for when to use this tool. It does not compare to alternatives or mention when not to use, but the context is clear for a simple get operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_list_analyzer_definitionsA

List all available analyzer definitions (installed but not necessarily enabled). Filter by data type or find analyzers that require no API keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 50)
searchNoSearch analyzer names and descriptions (case-insensitive)
dataTypeNoFilter by supported data type (ip, domain, hash, url, file, mail, fqdn, etc.)
freeOnlyNoIf true, only return analyzers that require no configuration/API keys

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden. It discloses the non-destructive read operation and the installed vs enabled distinction. However, it does not mention return format, pagination, or any 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that conveys the main purpose and filtering capability. It is concise and front-loaded, though could benefit from slightly more structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description omits return value hints and does not mention the limit parameter. It adequately covers purpose and filters but lacks completeness for a 4-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 4 parameters with 100% dedicated descriptions. The description summarizes two parameters (dataType, freeOnly) but adds little beyond the schema. Baseline 3 is appropriate as schema already clarifies semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'List', the resource 'analyzer definitions', and the scope 'installed but not necessarily enabled'. It also mentions filtering by data type and free-only analyzers, distinguishing it from sibling tools like cortex_list_analyzers which likely list only enabled analyzers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for viewing installed definitions but does not explicitly state when not to use it or compare to alternatives like cortex_list_analyzers. Some guidance is provided via filtering options, but no direct exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_list_analyzersA

List all enabled analyzers, optionally filtered by data type

ParametersJSON Schema
NameRequiredDescriptionDefault
dataTypeNoFilter by supported data type (ip, domain, hash, url, file, mail, fqdn, etc.)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only adds 'enabled' and optional filter, but lacks details on output format, pagination, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded, no unnecessary words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should clarify return format. Missing details on output structure, pagination, or default behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with description matching. Description adds no new meaning beyond schema's 'Filter by supported data type'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'list' verb, resource 'enabled analyzers', and optional filter. Distinguishes from siblings like cortex_get_analyzer (single) and cortex_list_analyzer_definitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. Usage is implied by name but no alternatives mentioned despite many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_list_jobsC

List recent analysis jobs with optional filters

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of jobs to return (default: 50)
statusNoFilter by status (Waiting, InProgress, Success, Failure, Deleted)
dataTypeNoFilter by data type
analyzerNameNoFilter by analyzer name

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It fails to mention pagination, ordering, side effects (none, but not stated), or what 'recent' means. This is insufficient for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no fluff. Could benefit from an additional sentence about typical usage or results, but current form is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema, the description is minimally adequate. However, it omits details like default limit (50), sorting, and result structure. Given low complexity, score 3.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions. The description adds only 'optional filters', which is already implied by zero required parameters. No additional semantic value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List recent analysis jobs with optional filters', specifying the verb (List) and resource (analysis jobs). It distinguishes from siblings like cortex_get_job (single job) but the term 'recent' is ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as cortex_get_job for specific jobs or cortex_get_job_report for reports. The description does not mention filtering capabilities or use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_list_organizationsA

List all organizations (requires superadmin API key via CORTEX_SUPERADMIN_KEY)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the auth requirement, but does not explicitly state that it is a read-only operation or describe any side effects, rate limits, or pagination. More detail on the expected behavior would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action, and contains no fluff or redundant information. Every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description should provide more context about the return format (e.g., list of organization objects) and whether there is pagination. It currently lacks this information, making it insufficient for an agent to fully understand the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters in the input schema, so the description does not need to add parameter information. The baseline score of 4 applies because schema coverage is 100% and no extra param context is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all organizations', which is a specific verb-resource pair. It distinguishes from sibling tools like cortex_get_organization (single) and cortex_create_organization (create). The auth hint ('requires superadmin API key') adds further clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the required superadmin key, which implies when it can be used, but it does not explicitly compare with alternatives like cortex_get_organization or explain when this tool is preferable over other list commands.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_list_responder_definitionsA

List all available responder definitions (installed but not necessarily enabled). Filter by data type or find responders that require no API keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 50)
searchNoSearch responder names and descriptions (case-insensitive)
dataTypeNoFilter by supported data type (case, case_task, case_artifact, alert, etc.)
freeOnlyNoIf true, only return responders that require no configuration/API keys

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must cover behavioral traits. It mentions 'installed but not necessarily enabled' and filtering, but lacks details on pagination, ordering, response format, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence front-loaded with main action. Efficient and clear without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should hint at return format. It does not mention what fields are returned for definitions. Missing error handling or pagination behavior. Incomplete for a list tool with 4 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds 'Filter by data type or find responders that require no API keys', which aligns with dataType and freeOnly parameters but does not add new information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all available responder definitions (installed but not necessarily enabled)' with specific verbs and resource. It distinguishes from sibling tools like cortex_list_responders (likely lists enabled ones) and cortex_list_analyzer_definitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for browsing available responders, but does not explicitly state when to use this vs. alternatives like cortex_list_responders or other list tools. No exclusions or prerequisites provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_list_respondersA

List all enabled responders, optionally filtered by data type

ParametersJSON Schema
NameRequiredDescriptionDefault
dataTypeNoFilter by supported data type

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It only states the basic function without disclosing behavioral traits such as return format, pagination, rate limits, or the meaning of 'enabled'. This lack of detail leaves an agent uncertain about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a single, front-loaded sentence with no unnecessary words. It efficiently conveys the tool's purpose and optional filter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no output schema), the description provides a minimal but adequate overview. However, it lacks details about the return structure or any pagination, making it slightly incomplete for complex use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the 'dataType' parameter. The description's mention of 'optionally filtered by data type' adds no new meaning beyond what the schema provides, leading to a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list', the resource 'enabled responders', and the optional filter by data type. It effectively distinguishes from siblings like 'cortex_list_analyzers' (for analyzers) and 'cortex_list_responder_definitions' (for definitions, not just enabled).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (listing enabled responders with optional filtering) but does not provide explicit when-to-use or when-not-to-use guidance compared to sibling tools. There is no mention of alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_list_usersA

List all users across organizations (requires superadmin API key via CORTEX_SUPERADMIN_KEY)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only reveals the authorization trait but does not mention return format, pagination, or other behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with no parameters and no output schema, the description covers the core purpose and auth requirement, but lacks information about response format or data volume.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is effectively 100%. The description adds no param-specific info, but the baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'all users across organizations', distinguishing it from siblings like cortex_get_user (single user) and cortex_create_user (creation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the requirement of a superadmin API key, indicating when to use, but does not mention alternatives for non-superadmin users or context for 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.

cortex_renew_user_keyA

Generate a new API key for a user (invalidates the previous key). Requires superadmin API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe user login/ID to renew the key for

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses important side effects (invalidates previous key) and permission requirements (superadmin). No annotations are provided, so description carries the burden; it does so effectively for a simple mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with two sentences that cover purpose, side effect, and permission. No unnecessary words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single required parameter, no output schema), the description fully covers what an agent needs: action, side effect, and authentication requirement. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema adequately describes the userId parameter. The description adds no extra semantic beyond what is already in the schema, meeting the baseline but not exceeding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it generates a new API key for a user and invalidates the previous key. The verb 'generate' and resource 'API key for a user' are specific, and it distinguishes itself from sibling tools like cortex_get_user_key.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions requirement for superadmin API key, providing clear context. Does not explicitly list when not to use or alternatives, but the purpose is self-evident given sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_run_analyzerC

Submit an observable to a specific analyzer for analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
papYesPermissible Actions Protocol level (0-3)
tlpYesTraffic Light Protocol level (0=WHITE, 1=GREEN, 2=AMBER, 3=RED)
dataYesThe observable value (IP, domain, hash, URL, etc.)
messageNoOptional context message for the analysis
dataTypeYesThe observable data type
analyzerIdYesThe analyzer ID to run

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It does not disclose behavioral traits such as whether the analysis is synchronous, how to obtain results, or any authentication or rate limit implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no unnecessary words. It is front-loaded with the key action, though it lacks structure for additional context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters (5 required), no output schema, and no annotations, the description is too brief. It does not explain how to interpret the result or any prerequisites for using the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage of parameter descriptions. The description adds no additional meaning beyond the schema, which is the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the action ('submit'), the resource ('observable to analyzer'), and the purpose ('analysis'). It is clear but does not differentiate from sibling tools like cortex_analyze_observable or cortex_run_analyzer_by_name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There are many sibling tools for running analyzers, and the description offers no context on selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_run_analyzer_by_nameB

Run an analyzer by name instead of ID (convenience wrapper)

ParametersJSON Schema
NameRequiredDescriptionDefault
papNoPermissible Actions Protocol level (default: 2)
tlpNoTraffic Light Protocol level (default: 2/AMBER)
dataYesThe observable value
dataTypeYesThe observable data type
analyzerNameYesThe analyzer name to search for

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden of behavioral disclosure. It fails to mention any side effects, authentication needs, rate limits, or error states (e.g., what happens if the analyzer name is not found). The minimal description does not adequately disclose behavioral traits beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no unnecessary words. It is efficiently front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, no output schema, and is a mutation (runs an analyzer), the description is too brief. It lacks information about return values, job creation, error handling, and expected behavior, making it incomplete for an agent to use confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage, so baseline is 3. The description adds no additional meaning to parameters beyond what is already in the schema (e.g., analyzerName, dataType, data). It does not clarify syntax, formats, or relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs an analyzer by name instead of ID, which is a specific verb-resource pair. It also distinguishes from the sibling tool cortex_run_analyzer by explicitly contrasting name vs ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description labels the tool a 'convenience wrapper', implying it is an alternative to cortex_run_analyzer (ID-based), but it does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention any prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_run_analyzer_fileB

Submit a file to a specific analyzer for analysis. Provide a file path or base64-encoded content.

ParametersJSON Schema
NameRequiredDescriptionDefault
papNoPermissible Actions Protocol level (0-3)
tlpNoTraffic Light Protocol level (0=WHITE, 1=GREEN, 2=AMBER, 3=RED)
messageNoOptional context message for the analysis
filePathNoPath to the file to analyze. Confined to the CORTEX_FILE_BASE_DIR directory; paths outside it (or filesystem reads when CORTEX_FILE_BASE_DIR is unset) are refused. Use fileBase64 for arbitrary content.
filenameNoFilename (required with fileBase64, auto-detected from filePath)
analyzerIdYesThe analyzer ID to run
fileBase64NoBase64-encoded file content (alternative to filePath)
contentTypeNoMIME type of the file (default: application/octet-stream)application/octet-stream

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the burden falls on the description. It only says 'submit for analysis' without disclosing behavioral traits like error handling, permissions, rate limits, or whether the analysis is synchronous. This is insufficient for a mutation-like tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, readable sentence that conveys the essential action. It is efficient with no redundant words, though it could be slightly more structured by separating the two input methods into separate clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters and no output schema, the description is too minimal. It does not explain relationships (e.g., filePath vs fileBase64 mutual exclusivity), constraints (filePath confined to directory), or required combinations (filename with fileBase64). The schema covers details but the description lacks synthesis.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter. The description adds a high-level overview ('provide a file path or base64-encoded content') but does not add meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('submit a file') and the resource ('to a specific analyzer'), and specifies two input methods (file path or base64). This distinguishes it from sibling tools like cortex_run_analyzer which likely handle observables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions providing a file path or base64 content but does not give guidance on when to use this tool versus alternatives (e.g., cortex_run_analyzer for observables) or when not to use it. No exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cortex_run_responderA

Execute a responder action against a TheHive entity (case, task, artifact, alert). DESTRUCTIVE: responders perform real-world side effects (blocking IPs, sending mail, isolating hosts). Gated behind the CORTEX_ALLOW_DESTRUCTIVE env var AND confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be set to true to actually run the responder. Defaults to false as a safety guard against accidental side effects.
objectIdYesThe ID of the entity from TheHive
objectTypeYesThe type of TheHive entity to act on
parametersNoOptional responder-specific parameters
responderIdYesThe responder ID to execute

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It explicitly labels the tool as DESTRUCTIVE and explains real-world side effects and gating conditions, which is clear. However, it does not mention whether the action is asynchronous or what the return behavior is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and contains no fluff. Every sentence adds value, addressing purpose, subject, and key behavioral guardrails.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema, the description covers essential behavioral aspects (destructive, guardrails) but does not explain what the tool returns (likely a job object) or how it integrates with the overall workflow. It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds context for the 'confirm' parameter (must be true to run) and 'parameters' (responder-specific), but these details are already partially in the schema. The added value is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Execute a responder action against a TheHive entity (case, task, artifact, alert).' It distinguishes itself from sibling tools like cortex_run_analyzer by explicitly mentioning 'responder' and the entity types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that the tool is gated behind CORTEX_ALLOW_DESTRUCTIVE env var and confirm=true, but it does not explicitly state when to use this tool versus alternatives (e.g., run_analyzer) or 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.

cortex_update_organizationB

Update an organization's description or status (requires superadmin API key)

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYesThe organization ID or name
statusNoNew status: "Active" or "Locked"
descriptionNoNew description for the organization

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations; description only notes the superadmin requirement. Does not disclose side effects, mutability, or behavior for omitted fields. Lacks detail beyond auth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action and resource, followed by auth requirement. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers essential purpose and auth, but lacks return value info (no output schema) and usage context. Adequate for a simple update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover all 3 parameters (100%). Description adds minimal extra meaning by summarizing 'description or status', but no format or constraints beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('Update'), the resource ('organization'), and specific updatable fields ('description or status'). Distinct from sibling tools like cortex_create_organization and cortex_get_organization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Only mentions a prerequisite (superadmin API key) but does not explain context 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.

cortex_wait_and_get_reportB

Wait for a job to complete and return the full report (with polling timeout)

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe job ID to wait for
timeoutNoTimeout in seconds (default: 300, max: 3600)

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions polling timeout but does not detail polling behavior, timeout handling, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, concise, front-loaded with key action and object.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, description is incomplete; missing details on polling interval, timeout behavior, and error states.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and description does not add extra meaning beyond what the schema already provides for jobId and timeout.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb (wait for and return) and resource (full report), distinguishing it from siblings like cortex_get_job_report which likely returns immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage can be inferred (use when job is in progress) but lacks explicit when-to-use or when-not-to-use instructions, nor comparison to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: analyzers, responders, jobs, organizations, and users are separate domains. Within each, operations are unique (list, get, create, update, delete, enable, disable, run). Descriptions clarify any potential overlap, e.g., cortex_analyze_observable vs cortex_run_analyzer.

Naming Consistency5/5

All tools follow a consistent `cortex_verb_noun` pattern with snake_case. Verbs like list, get, create, run are used uniformly. Even compound verbs like `wait_and_get` fit the pattern. No mixing of styles.

Tool Count4/5

With 31 tools, this is a large set, but each tool corresponds to a specific operation in the Cortex security analysis platform. The count is slightly above the typical well-scoped range but justified by the platform's complexity and the need to cover analyzers, responders, jobs, organizations, and users.

Completeness4/5

The tool set covers core CRUD operations for analyzers, responders, jobs, organizations, and users. Notable gaps include missing delete tools for users and organizations, and no update for users besides key renewal. But the main analysis workflow is fully covered, and the gaps are minor.

Maintenance

ActivityActive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    An 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.
    5
    19
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that enables LLMs to interact with MISP for threat intelligence sharing, IOC lookups, and event management. It provides tools for investigating indicators, discovering correlations, and exporting intelligence in formats like STIX and Suricata.
    36
    34
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A security-focused MCP server that enables automated log retrieval and threat analysis using LangGraph orchestration and RAG. It allows users to detect suspicious activity and generate structured security insights by integrating LLM reasoning with log data and runbook documentation.
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that provides condensed and normalized data from OpenCTI to LLMs, enabling lookup of observables, adversaries, and reports with enriched context.
    16
    MIT

Latest Blog Posts

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/lidless-labs/cortex-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server