Skip to main content
Glama
doublegate

CyberChef MCP Server

by doublegate

CyberChef MCP Server

This project provides a Model Context Protocol (MCP) server interface for CyberChef, the "Cyber Swiss Army Knife" created by GCHQ.

By running this server, you enable AI assistants (like Claude, Cursor AI, and others) to natively utilize CyberChef's extensive library of 504 data manipulation operations—including encryption, encoding, compression, and forensic analysis—as executable tools.

Latest Release: v3.8.0 | Release Notes | Tutorial | Examples | Breaking Changes | Security Policy

Upstream base: GCHQ CyberChef v11.4.0 | Licence: GPL-3.0-or-later (from v2.0.0; v1.9.x and earlier remain Apache-2.0)

CyberChef MCP Banner

npm MCP Enabled License Docker Version Node.js Version Security Scan codecov

Project Context

CyberChef is a simple, intuitive web app for carrying out all manner of "cyber" operations within a web browser. It was originally conceived and built by GCHQ.

This fork wraps the core CyberChef Node.js API into an MCP server, bridging the gap between natural language AI intent and deterministic data processing.

Fork Relationship

This project maintains a selective sync relationship with the upstream GCHQ/CyberChef repository:

  • Synced from upstream: src/core/** (minus three generated paths) and six upstream-owned files in src/node/. Mirrored verbatim — never hand-edit them; fork changes live as re-applied patches.

  • Web UI Components: Removed (88 files, ~19,260 lines) — not needed for an MCP server

  • MCP-Specific Code: this fork's own (src/node/mcp-server.mjs, src/node/lib/**, tests/mcp/, workflows)

  • Sync is one-way: pull only. As of v2.0.0 the combined work is GPL-3.0-or-later, so MCP-layer changes cannot be contributed back to an Apache-2.0 upstream.

Exact scope, the patch model, and what to do when a sync conflicts: Upstream Sync Guide.

See Upstream Sync Guide for details on the synchronization process.

CyberChef MCP Blueprint

Related MCP server: Pentester-MCP

Features

MCP Tools

The server exposes CyberChef operations as MCP tools:

  • Runs on ARM, and 30% smaller (v2.8.0): images are published for linux/arm64 as well as linux/amd64 — Apple Silicon, Graviton, Raspberry Pi 4/5 — and the image is down from 643 MB to 453 MB. Also CYBERCHEF_OFFLINE=true for air-gapped hosts: 502 of the 504 operations never touched a network anyway, so this is a fail-closed switch for the two that do, checked against the recipe rather than the tool name. See the edge deployment guide for architectures, sizing and air-gapped install, and the release notes for how the size reduction was done and verified.

  • Observable (v2.7.0): a dependency-free Prometheus endpoint at /metrics (20 metric families, off by default — unlike the health probes it reports which tools are used, how often and how large the inputs are, which is a reconnaissance surface), OpenTelemetry spans following the MCP semantic conventions, and trace_id/span_id on every log line. It adds one package: the OTel API, not the SDK — measured at 1 package / 2.6 MB / +9 ms against the SDK's 71 packages / 50 MB / +100 ms, which would have handed back more than half of v2.6.0's startup work on every stdio launch. You supply the SDK, so every OTLP backend works rather than a chosen few. Ships a Grafana dashboard, alert rules and a runnable Prometheus stack — all executed against a live server rather than reviewed. Tool arguments are never recorded: the conventions mark them Opt-In, and for this server the arguments are the sensitive material.

  • OAuth 2.1 authentication on HTTP (v2.5.0): the server acts as an OAuth 2.1 Resource Server — RFC 9728 Protected Resource Metadata, JWKS-based bearer validation, and RFC 8707 audience binding, which is the check that stops a token minted for another service being replayed here. Scope-based RBAC with three scopes (cyberchef:read, cyberchef:write, cyberchef:network), where the scope a tool needs is derived from its annotations rather than a table that goes stale. Audit logging for who called what. Off unless CYBERCHEF_AUTH_ISSUER is set, and deliberately not applied to stdio — the MCP specification says stdio SHOULD NOT use OAuth, because a bearer token protects nothing when the client already owns the process.

  • Multi-tenancy (v2.5.0): the operation cache, recipe store, concurrency pool and audit trail are isolated per tenant, with the tenant read from a claim on an already-verified token (CYBERCHEF_TENANT_CLAIM) — never from a header the caller controls. Without it, any caller on a shared HTTP deployment could list, modify and delete any other caller's saved recipes, and clear() destroyed every tenant's at once. Off unless configured, and configuring it without CYBERCHEF_AUTH_ISSUER is a startup error rather than a silent downgrade.

  • Starts in ~185 ms (v2.6.0): it used to take ~1.3 seconds, of which ~1.15 s was importing all 504 operation implementations before answering anything — paid on every launch, on stdio, which is how every editor starts the server. The 504-operation barrel is now loaded only by the three tools that need it (cyberchef_search, batch search, and saved-recipe execution). tools/list is built from metadata, and an ordinary operation call loads just the one operation it runs — verified: cyberchef_bake completes without the barrel being loaded at all. A background warm-up was tried, measured, and removed: module loading blocks the event loop, so it just moved the cost in front of the first request.

  • Deployable as a service (v2.6.0): a Helm chart and Compose file with liveness/readiness/startup probes and a drain that loses no requests during a rolling update. Liveness deliberately stays healthy while draining — a liveness failure there gets the pod killed mid-drain. The chart refuses to render configurations the server would reject at startup, so they fail at helm template rather than as a crashloop.

  • Bounded calls to the authorization server (v2.6.0): JWKS discovery had no timeout (Node's fetch has none by default) and cached failures not at all, so an issuer outage turned every request into two outbound ones that could hang until the OS gave up. Now a 5 s deadline and a circuit breaker: 20 verifications against a down issuer went from 40 outbound attempts to 10.

  • Eighteen analysis tools that are not operations (v2.4.0, expanded through v3.8.0): the original four are cyberchef_xor_key_length (repeating-key XOR length by index of coincidence), cyberchef_cyclic_pattern (De Bruijn patterns and overflow offsets, byte-compatible with pwntools' cyclic), cyberchef_hash_identify (hash format with the hashcat mode and John format name) and cyberchef_rsa_attack (Fermat, shared factors, Wiener and unpadded small-e). Twelve more arrived in v3.3.0 (classical ciphers, crib dragging, entropy scanning, hash cracking and statistics, JWT weaknesses, plaintext scoring, multi-key RSA, substitution and Vigenère breaking, timestamp identification, corpus diffing), then cyberchef_ecdsa_recover in v3.4.0 (private-key recovery from a reused ECDSA nonce) and cyberchef_cert_chain in v3.8.0 (orders an X.509 bundle, verifies every link cryptographically, and reports the chain's validity window as the intersection of its members', both ends). See Analysis Tools. An operation is a pure run(input, args) over one input and cannot express an analysis; cyberchef_bake cannot either, because a recipe is a pipeline, not a loop. Exposed at every tool surface. There is deliberately no plugin loadernode:vm is not a security boundary, and that was measured rather than assumed (ADR 0002).

  • Protocol revision 2026-07-28 (v2.3.0): served on both stdio and HTTP alongside the 2025 era, from one set of handlers. Existing clients are unaffected — a v1-SDK client still negotiates 2025-11-25 against the same registrations. On HTTP the two eras are routed per request by the SDK's own classifier, so 2025 traffic keeps the sessionful wiring while modern traffic is served per request.

  • Three transports (v2.3.0): stdio, Streamable HTTP, and a socket binding over a Unix domain socket or loopback TCP (CYBERCHEF_TRANSPORT=socket), one pinned server instance per connection. It carries no authentication, so a non-loopback bind is refused unless explicitly allowed and the Unix socket is created 0600. There is deliberately no WebSocket transport — MCP does not define one.

  • Every image operation works (v2.3.0): 17 of them returned Node's shared buffer pool instead of the image — unreadable output, and the surplus was whatever the process had recently allocated. Add Text To Image had never worked in this fork at all, since v1.7.1. Both are fixed as fork patches.

  • Images and audio come back as images and audio (v2.2.0): Generate QR Code, Render Image and the image set return an MCP image content block; Play Media returns an audio block. Before v2.2.0 the html-to-text conversion deleted the payload and these operations returned an empty string — they had never worked over MCP. Other binary stays byte-lossless latin1 text, or base64 with CYBERCHEF_BINARY_OUTPUT=base64.

  • Tool annotations on every tool (v2.2.0): readOnlyHint, destructiveHint, idempotentHint, openWorldHint and a readable title, so a client can skip the approval prompt for a pure operation. The exceptions were measured, not guessed — only HTTP request and DNS over HTTPS reach the network, and non-idempotence was determined by running each candidate twice and comparing.

  • Prompts and resources (v2.2.0): five workflow prompts (analyse-unknown-data, extract-iocs, deobfuscate-script, identify-hash, decode-chain) for when you do not yet know which of 504 operations you need, and saved recipes exposed as readable resources at recipe://<id>.

  • cyberchef_bake: The "Omni-tool". Executes a full CyberChef recipe (a chain of operations) on an input. Ideal for complex, multi-step transformations (e.g., "Decode Base64, then Gunzip, then prettify JSON").

  • All 504 operations, without paying for 504 schemas (v2.1.0): tools/list is an index by default — 42 tools and 44,406 bytes, rather than 545 tools and 424,810 bytes. The index grew in v3.3.0 because twelve new registry tools have no navigation path of their own — a registry tool that is not listed cannot be called at all. Every operation stays reachable: cyberchef_categories -> cyberchef_list_operations -> cyberchef_describe_operation walks down to any of them, cyberchef_search finds one by keyword, and cyberchef_bake runs any of them by name. CYBERCHEF_TOOL_SURFACE=curated (120 tools, 107,652 bytes) or =all (all 545, 424,810 bytes) if you would rather pre-load. See the User Guide.

    • cyberchef_to_base64 / cyberchef_from_base64

    • cyberchef_aes_decrypt

    • cyberchef_sha2

    • cyberchef_yara_rules

    • ...and hundreds more.

  • cyberchef_search: A utility tool to help the AI discover available operations and their descriptions.

  • Recipe Management (v1.6.0): 10 tools for saving, organizing, and reusing multi-operation workflows

    • cyberchef_recipe_create / cyberchef_recipe_get / cyberchef_recipe_list

    • cyberchef_recipe_update / cyberchef_recipe_delete / cyberchef_recipe_execute

    • cyberchef_recipe_export / cyberchef_recipe_import

    • cyberchef_recipe_validate / cyberchef_recipe_test

  • Advanced Features (v1.7.0): 5 new tools for enterprise-grade capabilities

    • cyberchef_batch - Execute multiple operations in parallel or sequential mode

    • cyberchef_telemetry_export - Privacy-first usage analytics (opt-in)

    • cyberchef_cache_stats / cyberchef_cache_clear - Cache inspection and management

    • cyberchef_quota_info - Resource quota and usage tracking

  • Migration Tools (v1.8.0): Comprehensive v2.0.0 preparation and migration assistance

    • cyberchef_migration_preview - Analyze recipes for v2.0.0 compatibility with two modes:

      • analyze mode: Check recipes for breaking changes with detailed diagnostics

      • transform mode: Automatically convert recipes to v2.0.0 format

    • cyberchef_deprecation_stats - Track deprecated API usage statistics

      • Shows deprecation warnings triggered in current session

      • Reports session duration, suppression status, and v2 compatibility mode

      • Lists all 8 deprecation codes (DEP001-DEP008) with details

    • The cyberchef_ prefix is permanent. DEP001, DEP007 and DEP008 announced its removal in v1.8.0 and were withdrawn in v2.0.0: removing it saves 2.6% of the tools/list payload while colliding 19 tool names in MCP's flat namespace and breaking every existing integration. Keep using cyberchef_to_base64, cyberchef_bake and cyberchef_search. See v2.0.0 Breaking Changes.

  • Worker Thread Pool (v1.9.0): CPU-intensive operations offloaded to worker threads

    • cyberchef_worker_stats - Monitor worker pool utilization, active/completed tasks, and pool configuration

    • Enable with CYBERCHEF_ENABLE_WORKERS=true environment variable

    • Configurable pool size, idle timeout, and minimum input size for worker routing

Technical Highlights

  • Dockerized: Runs as a self-contained Docker container on a Chainguard Wolfi Node.js base (v26.8.1 at time of writing), pinned by digest and bumped weekly by Dependabot. Measured against the published v3.1.0 image: 453 MB on disk, 141 MB as the gzipped release tarball, running as UID 65532 (nonroot). The base is rebuilt daily and carries no package manager (apk, wget and curl are all absent) -- but it does include a BusyBox shell and npm, so treat a container compromise as having a shell available. This line previously claimed "no shell" and "726 MB on disk"; both were wrong, and the correction is recorded in the v3.1.0 baseline.

  • Dual-Registry Publishing: Images published to both Docker Hub and GitHub Container Registry (GHCR) for maximum accessibility and Docker Scout health score optimization.

  • Supply Chain Attestations: SBOM and provenance attestations attached to Docker Hub images for enhanced security transparency and compliance (SLSA Build Level 3).

  • Dual Transport (v1.9.0; per-session HTTP since v2.0.0): Stdio (default) or Streamable HTTP via CYBERCHEF_TRANSPORT=http. Every HTTP client gets its own session and its own MCP server instance, with CORS, DNS-rebinding protection and a session cap. See the HTTP Transport Guide.

  • MCP Streaming with Progress (v1.9.0): Operations send notifications/progress via the MCP SDK progress token mechanism for real-time status updates during long-running tasks.

  • Worker Thread Pool (v1.9.0): Piscina-based worker threads offload CPU-intensive operations (AES, Blowfish, bcrypt, scrypt, PBKDF2, etc.) to prevent event loop blocking. Configurable pool size and routing thresholds.

  • Schema Validation: All inputs are validated against schemas derived from CyberChef's internal type system using zod.

  • Modern Node.js: Requires Node.js >=24 <27, matching upstream exactly. The published image runs Node 26.8.1.

  • Recipe Management (v1.6.0): Save and reuse multi-operation workflows with full CRUD operations, import/export in multiple formats (JSON/YAML/URL/CyberChef), recipe composition with nesting support, and curated library of 25+ production-ready recipes across 5 categories. See Recipe Management Guide for details.

  • Advanced Features (v1.7.0): Enterprise-grade capabilities with batch processing (parallel/sequential execution of up to 100 operations), privacy-first telemetry collection (disabled by default, no input/output data captured), sliding window rate limiting for resource protection, enhanced caching with inspection tools, and resource quota tracking (concurrent operations, data sizes). All features are configurable via environment variables with secure defaults. See Release Notes for details.

  • Enhanced Observability (v1.5.0): Structured JSON logging with Pino for production monitoring, comprehensive error handling with actionable recovery suggestions, automatic retry logic with exponential backoff, request correlation with UUID tracking, circuit breaker pattern for cascading failure prevention, and streaming infrastructure for progressive results on large operations. See Release Notes for details.

  • Performance Optimized (v1.4.0): LRU cache for operation results (100MB default), automatic streaming for large inputs (10MB+ threshold), configurable resource limits (100MB max input, 30s timeout), memory monitoring, and comprehensive benchmark suite. See Performance Tuning Guide for configuration options.

  • Upstream Sync Automation (v1.3.0; rebuilt in v2.0.0): Weekly monitoring of upstream releases, an atomic whole-tree mirror, fork changes carried as patches that fail the sync if they stop applying, comprehensive validation (1,246 MCP + 241 Node-API + 2,289 operation tests), and an emergency rollback. See the Upstream Sync Guide.

  • Security Hardened (v1.4.5+): Chainguard Wolfi base image with zero-CVE baseline, non-root execution (UID 65532), automated Trivy vulnerability scanning with build-fail thresholds, dual SBOM strategy (Docker Scout attestations + CycloneDX), read-only filesystem support, SLSA Build Level 3 provenance, and 7-day SLA for critical CVE patches. Fixed 11 of 12 code scanning vulnerabilities including critical cryptographic randomness weakness and 7 ReDoS vulnerabilities. See Security Policy and Security Fixes Report for details.

  • Production Ready: Comprehensive CI/CD with CodeQL v4, automated testing, and dual-registry container publishing (Docker Hub + GHCR) with complete supply chain attestations.

Quick Start

Prerequisites

  • Node.js >=24 <27 for the npm install, or Docker for the container.

Installation Options

Option 1: npm (Recommended)

npx cyberchef-mcp

No clone, no build, no Docker daemon. For an MCP client, point it at the same command:

{
  "mcpServers": {
    "cyberchef": { "command": "npx", "args": ["-y", "cyberchef-mcp"] }
  }
}

Installing it permanently works too — npm install -g cyberchef-mcp, then run cyberchef-mcp. The package also ships cyberchef-migrate, which checks and converts v1.x recipes for v2.x.

Option 2: Pull from Docker Hub

# Docker Hub provides health scores and supply chain attestations
docker pull parobek/cyberchef-mcp:latest
docker tag parobek/cyberchef-mcp:latest cyberchef-mcp
docker run -i --rm cyberchef-mcp

Option 2b: Pull from GitHub Container Registry (Alternative)

docker pull ghcr.io/doublegate/cyberchef-mcp_v3:latest
docker tag ghcr.io/doublegate/cyberchef-mcp_v3:latest cyberchef-mcp
docker run -i --rm cyberchef-mcp

Option 3: Download Pre-built Image (Offline Installation)

For environments without direct GHCR access, download the pre-built Docker image tarball from the latest release:

  1. Download the tarball (141 MB compressed; measured against the published v3.1.0 asset, not estimated):

    # Download from GitHub Releases
    wget https://github.com/doublegate/CyberChef-MCP/releases/download/v3.8.0/cyberchef-mcp-v3.8.0-docker-image.tar.gz
  2. Load the image into Docker:

    docker load < cyberchef-mcp-v3.8.0-docker-image.tar.gz
  3. Tag for easier usage:

    docker tag parobek/cyberchef-mcp:latest cyberchef-mcp
  4. Run the server:

    docker run -i --rm cyberchef-mcp

Option 4: Build from Source

  1. Clone the Repository:

    git clone https://github.com/doublegate/CyberChef-MCP.git
    cd CyberChef-MCP
  2. Build the Docker Image:

    docker build -f Dockerfile.mcp -t cyberchef-mcp .
  3. Run the Server (Interactive Mode): This command starts the server and listens on stdin. This is what your MCP client will run.

    docker run -i --rm cyberchef-mcp
  4. Optional: Run with Enhanced Security (Read-Only Filesystem): For maximum security in production deployments:

    docker run -i --rm --read-only --tmpfs /tmp:rw,noexec,nosuid,size=100m cyberchef-mcp

Client Configuration

Cursor AI

  1. Go to Settings > Features > MCP.

  2. Add a new server:

    • Name: CyberChef

    • Type: command

    • Command: docker

    • Args: run -i --rm cyberchef-mcp

Claude Code (CLI)

Add to your configuration file (typically ~/.config/claude/config.json):

{
  "mcpServers": {
    "cyberchef": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "cyberchef-mcp"]
    }
  }
}

Claude Desktop

Add to your Claude Desktop configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "cyberchef": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "cyberchef-mcp"]
    }
  }
}

After adding the configuration, restart Claude Desktop. The CyberChef tools will appear in the available tools panel.

Performance & Configuration

Version 1.4.0 introduces comprehensive performance optimizations and configurable resource limits. All features can be tuned via environment variables for your deployment needs.

Performance Features

LRU Cache for Operation Results

  • Automatically caches operation results to eliminate redundant computation

  • Configurable cache size (100MB default) and item count (1000 default)

  • Cache keys based on operation + input + arguments (SHA256 hash)

Automatic Streaming for Large Inputs

  • Inputs exceeding 10MB automatically use chunked processing

  • Supports encoding, compression, and hashing operations

  • Memory-efficient handling of 100MB+ files

  • Transparent fallback for non-streaming operations

Resource Limits

  • Maximum input size validation (100MB default)

  • Operation timeout enforcement (30 seconds default)

  • Prevents out-of-memory crashes and runaway operations

Memory Monitoring

  • Periodic memory usage logging to stderr

  • Heap and RSS tracking for troubleshooting

Configuration Options

Every setting can be given either in a cyberchef.config.json file or as an environment variable, with environment variables taking precedence over the file. Nothing is required: with no file, the server behaves exactly as it always has.

{
  "server":   { "maxInputSize": 10485760, "operationTimeout": 30000 },
  "security": { "offline": true },
  "tools":    { "surface": "curated" }
}

A malformed file, an unknown section or an unknown setting stops the server with a message naming the mistake, rather than starting on defaults nobody chose. All 64 settings, their sections and their environment-variable equivalents are in the configuration guide.

The same settings as environment variables:

# Logging (v1.5.0+)
LOG_LEVEL=info                           # Logging level: debug, info, warn, error, fatal

# Retry Logic (v1.5.0+)
CYBERCHEF_MAX_RETRIES=3                  # Maximum retry attempts for transient failures
CYBERCHEF_INITIAL_BACKOFF=1000           # Initial backoff delay in milliseconds
CYBERCHEF_MAX_BACKOFF=10000              # Maximum backoff delay in milliseconds
CYBERCHEF_BACKOFF_MULTIPLIER=2           # Backoff multiplier for exponential backoff

# Streaming (v1.5.0+)
CYBERCHEF_STREAM_CHUNK_SIZE=1048576      # Chunk size for streaming (1MB)
CYBERCHEF_STREAM_PROGRESS_INTERVAL=10485760  # Progress reporting interval (10MB)

# Recipe Management (v1.6.0+)
CYBERCHEF_RECIPE_STORAGE=./recipes.json  # Storage file path
CYBERCHEF_RECIPE_MAX_COUNT=10000         # Maximum number of recipes
CYBERCHEF_RECIPE_MAX_OPERATIONS=100      # Max operations per recipe
CYBERCHEF_RECIPE_MAX_DEPTH=5             # Max nesting depth

# Batch Processing (v1.7.0+)
CYBERCHEF_BATCH_MAX_SIZE=100             # Maximum operations per batch
CYBERCHEF_BATCH_ENABLED=true             # Enable/disable batch processing

# Telemetry & Analytics (v1.7.0+)
CYBERCHEF_TELEMETRY_ENABLED=false        # Privacy-first: disabled by default

# Rate Limiting (v1.7.0+)
CYBERCHEF_RATE_LIMIT_ENABLED=false       # Disabled by default
CYBERCHEF_RATE_LIMIT_REQUESTS=100        # Max requests per window
CYBERCHEF_RATE_LIMIT_WINDOW=60000        # Time window in milliseconds

# Cache Management (v1.7.0+)
CYBERCHEF_CACHE_ENABLED=true             # Enable/disable caching

# Resource Quotas (v1.7.0+)
CYBERCHEF_MAX_CONCURRENT_OPS=10          # Maximum concurrent operations

# Deprecation & Migration (v1.8.0+)
V2_COMPATIBILITY_MODE=false              # Enable v2.0.0 behavior preview (elevates warnings to errors)
CYBERCHEF_SUPPRESS_DEPRECATIONS=false    # Suppress deprecation warnings

# Transport (v1.9.0+; per-session HTTP since v2.0.0)
CYBERCHEF_TRANSPORT=stdio                # Transport type: stdio or http
CYBERCHEF_HTTP_PORT=3000                 # HTTP transport port
CYBERCHEF_HTTP_HOST=127.0.0.1            # HTTP bind address (use 0.0.0.0 in a container)
CYBERCHEF_ALLOWED_HOSTS=                 # Comma-separated Host allowlist. DNS-rebinding protection
                                         # is ON by default (loopback names). Set this when binding
                                         # a non-loopback address; `*` disables the check.
CYBERCHEF_ALLOWED_ORIGINS=               # Comma-separated Origin allowlist; enables CORS. Required
                                         # by browser MCP clients (e.g. MCP Inspector's web UI).
CYBERCHEF_SESSION_TIMEOUT=1800000        # Idle HTTP session reap threshold (30 min)
CYBERCHEF_HTTP_MAX_BODY=4194304          # Maximum accepted HTTP request body (4 MiB)
CYBERCHEF_HTTP_PATH=/mcp                 # MCP endpoint path; any other path returns 404
CYBERCHEF_MAX_SESSIONS=100               # Cap on concurrent HTTP sessions; initialize 503s beyond it

# Worker Thread Pool (v1.9.0+)
CYBERCHEF_WORKER_MIN_THREADS=1           # Minimum worker threads
CYBERCHEF_WORKER_MAX_THREADS=4           # Maximum worker threads
CYBERCHEF_WORKER_IDLE_TIMEOUT=30000      # Worker idle timeout in milliseconds
CYBERCHEF_WORKER_MIN_INPUT_SIZE=1024     # Minimum input size for worker routing (bytes)

# Performance (v1.4.0+)
CYBERCHEF_MAX_INPUT_SIZE=104857600       # Maximum input size (100MB)
CYBERCHEF_OPERATION_TIMEOUT=30000        # Operation timeout in milliseconds (30s)
CYBERCHEF_STREAMING_THRESHOLD=10485760   # Streaming threshold (10MB)
CYBERCHEF_ENABLE_STREAMING=true          # Enable streaming for large operations
CYBERCHEF_ENABLE_WORKERS=false           # Enable worker thread pool (disabled by default)
CYBERCHEF_CACHE_MAX_SIZE=104857600       # Cache maximum size (100MB)
CYBERCHEF_CACHE_MAX_ITEMS=1000           # Cache maximum items

Example Configurations

High-Throughput Server (Large Files)

docker run -i --rm --memory=4g \
  -e CYBERCHEF_MAX_INPUT_SIZE=524288000 \
  -e CYBERCHEF_STREAMING_THRESHOLD=52428800 \
  -e CYBERCHEF_CACHE_MAX_SIZE=524288000 \
  -e CYBERCHEF_OPERATION_TIMEOUT=120000 \
  ghcr.io/doublegate/cyberchef-mcp_v3:latest

Low-Memory Environment

docker run -i --rm --memory=512m \
  -e CYBERCHEF_MAX_INPUT_SIZE=10485760 \
  -e CYBERCHEF_STREAMING_THRESHOLD=5242880 \
  -e CYBERCHEF_CACHE_MAX_SIZE=10485760 \
  -e CYBERCHEF_CACHE_MAX_ITEMS=100 \
  ghcr.io/doublegate/cyberchef-mcp_v3:latest

Claude Desktop with Custom Limits

{
  "mcpServers": {
    "cyberchef": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "CYBERCHEF_MAX_INPUT_SIZE=209715200",
        "-e", "CYBERCHEF_CACHE_MAX_SIZE=209715200",
        "ghcr.io/doublegate/cyberchef-mcp_v3:latest"
      ]
    }
  }
}

Debug Logging for Troubleshooting (v1.5.0+)

docker run -i --rm \
  -e LOG_LEVEL=debug \
  -e CYBERCHEF_MAX_RETRIES=5 \
  ghcr.io/doublegate/cyberchef-mcp_v3:latest

Worker Thread Pool for CPU-Intensive Operations (v1.9.0+)

docker run -i --rm \
  -e CYBERCHEF_ENABLE_WORKERS=true \
  -e CYBERCHEF_WORKER_MAX_THREADS=8 \
  -e CYBERCHEF_WORKER_IDLE_TIMEOUT=60000 \
  ghcr.io/doublegate/cyberchef-mcp_v3:latest

HTTP Transport for Browser/Remote Clients (v1.9.0+)

docker run --rm -p 3000:3000 \
  -e CYBERCHEF_TRANSPORT=http \
  -e CYBERCHEF_HTTP_PORT=3000 \
  -e CYBERCHEF_HTTP_HOST=0.0.0.0 \
  -e CYBERCHEF_ALLOWED_HOSTS=localhost:3000,127.0.0.1:3000 \
  ghcr.io/doublegate/cyberchef-mcp_v3:latest

CYBERCHEF_ALLOWED_HOSTS is new in v2.0.0. DNS-rebinding protection is on by default — with nothing set the server answers only to localhost, 127.0.0.1 and [::1] — so binding a non-loopback address means naming the hosts you will reach it by, as the example above does.

Loopback is not an exemption: DNS rebinding exists to reach loopback, by making the victim's browser resolve an attacker-controlled name to 127.0.0.1. The browser then treats the request as same-origin, so no preflight is sent and CYBERCHEF_ALLOWED_ORIGINS never comes into it. See the HTTP transport guide for the full walkthrough.

Multiple simultaneous clients work from v2.0.0. Before it, the HTTP transport was a single process-wide instance, so the first client to connect succeeded and every one after it was refused with Invalid Request: Server already initialized (#36). Each client now gets its own session and its own MCP server instance. See the HTTP Transport Guide.

For detailed performance tuning guidance, see the Performance Tuning Guide.

Performance Benchmarks

Run the benchmark suite to measure performance on your hardware:

# Install dependencies
npm install

# Generate required configuration
npx grunt configTests

# Run benchmarks
npm run benchmark

The benchmark suite tests 20+ operations across multiple input sizes (1KB, 10KB, 100KB) in categories including:

  • Encoding operations (Base64, Hex)

  • Hashing operations (MD5, SHA256, SHA512)

  • Compression operations (Gzip)

  • Cryptographic operations (AES)

  • Text operations (Regex)

  • Analysis operations (Entropy, Frequency Distribution)

Security

This project implements comprehensive security hardening with continuous improvements:

Latest Enhancements (v1.6.0)

  • Recipe Management System: Save, organize, and reuse multi-operation workflows

    • CRUD Operations: Create, read, update, delete recipes with versioning

    • Import/Export: JSON, YAML, URL, and CyberChef format support

    • Recipe Composition: Nest recipes within recipes for complex workflows

    • Recipe Library: 25+ curated examples in 5 categories (Cryptography, Encoding, Data Extraction, Forensics, Networking)

    • Validation Tools: Pre-execution validation with complexity estimation

    • Testing Tools: Test recipes with sample inputs before deployment

    • 10 New MCP Tools: Complete recipe lifecycle management

    • See Recipe Management Guide for complete usage documentation

Enhanced Observability (v1.5.0)

  • Enhanced Error Handling: Comprehensive error reporting for production debugging

    • 8 Error Codes: Standardized error classification (INVALID_INPUT, MISSING_ARGUMENT, OPERATION_FAILED, TIMEOUT, OUT_OF_MEMORY, UNSUPPORTED_OPERATION, CACHE_ERROR, STREAMING_ERROR)

    • Rich Context: Detailed debugging information (input size, operation name, request ID, timestamp)

    • Recovery Suggestions: Actionable recommendations for common issues

    • Retryable Classification: Automatic distinction between transient and permanent failures

  • Structured Logging with Pino: Production-ready observability

    • JSON Logs: Machine-readable logs for monitoring tools (Datadog, Splunk, ELK)

    • Request Correlation: UUID-based request tracking across operations

    • Performance Metrics: Duration, throughput, cache hits, memory usage

    • Configurable Levels: debug, info, warn, error, fatal via LOG_LEVEL environment variable

  • Automatic Retry Logic: Resilience for transient failures

    • Exponential Backoff: 1s → 2s → 4s with jitter to prevent thundering herd

    • Configurable Retries: Default 3 attempts, customizable via CYBERCHEF_MAX_RETRIES

    • Smart Detection: Automatically retries timeouts, memory issues, network errors

    • Circuit Breaker: Opens after 5 consecutive failures to prevent cascading issues

  • MCP Streaming Infrastructure: Progressive results for large operations

    • Chunked Processing: Memory-efficient handling of 100MB+ inputs

    • Progress Reporting: Updates every 10MB for long-running operations

    • 14 Supported Operations: Encoding (Base64, Hex), hashing (MD5, SHA family), text operations

    • Configurable Thresholds: Streaming chunk size and progress interval

Security Hardening (v1.4.6)

  • Chainguard Wolfi Base Image: minimal, rebuilt daily, zero-CVE baseline

    • Zero-CVE Baseline: Daily security updates with 7-day SLA for critical patches

    • 70% Smaller Attack Surface: Minimal OS footprint compared to traditional Alpine/Debian images

    • Non-Root Execution: Runs as UID 65532 (nonroot user), with no package manager in the image

    • SLSA Build Level 3 Provenance: Verifiable supply chain integrity

    • Multi-stage Build: -dev variant for compilation, the slim runtime variant for production

  • Read-Only Filesystem Support: Production-ready immutable deployments

    • Supports docker run --read-only with tmpfs mount for /tmp

    • Compliance-ready for PCI-DSS, SOC 2, FedRAMP requirements

    • Example: docker run -i --rm --read-only --tmpfs /tmp:rw,noexec,nosuid,size=100m cyberchef-mcp

  • Security Scan Fail Thresholds: Automated vulnerability prevention

    • Trivy scanner configured with exit-code: '1' in CI/CD

    • Builds automatically fail on CRITICAL or HIGH vulnerabilities

    • Prevents vulnerable images from reaching production

  • Dual SBOM Strategy: Comprehensive supply chain transparency

    • Part 1: Docker buildx attestations for automated registry scanning (Docker Scout)

    • Part 2: Trivy CycloneDX SBOM for offline compliance auditing

    • Both SBOMs attached as release assets for verification

Code Security (v1.4.1+)

  • 11 of 12 Code Scanning Vulnerabilities Fixed: Comprehensive security hardening completed

    • CRITICAL: Fixed insecure cryptographic randomness in GOST library - replaced Math.random() with crypto.randomBytes()

    • HIGH: Addressed 7 ReDoS (Regular Expression Denial of Service) findings across 6 operations

      • Withdrawn — this protection is no longer present. The fix worked by importing a SafeRegex.mjs helper into the affected operations. Those operations live under src/core/operations/, which upstream-sync.yml copies verbatim from upstream, so a later sync removed every import. The module has been removed rather than left as dead code claiming a protection it no longer provided.

      • See the incident record for the verification and the general rule it establishes: a hand-edit inside src/core/** is a fix with an expiry date set by the next sync.

  • All 1,933 Tests Passing: Security fixes validated with comprehensive test suite

  • See Security Fixes Report for complete details

Supply Chain Security (v1.4.5+)

  • Dual-Registry Publishing with Attestations: Enhanced security transparency and compliance

    • Docker Hub: Primary distribution with Docker Scout health score monitoring

    • GitHub Container Registry (GHCR): Secondary distribution for GitHub ecosystem integration

    • Both registries receive identical images with full attestation support

  • Docker Scout Attestations: Build integrity and software transparency

    • Provenance Attestation (mode=max): Complete build process metadata (builder, materials, recipe) for SLSA Build Level 3 compliance

    • SBOM Attestation: Automatic Software Bill of Materials generation in SPDX-JSON format

    • Achieves optimal Docker Scout health score (grade A or B) on Docker Hub

    • 15 points out of 100 in health score calculation - one of the highest-weighted policy categories

  • Dual SBOM Strategy: Comprehensive software transparency

    • Docker Attestation SBOM: Attached to image manifest for registry-based validation and docker sbom command

    • Trivy SBOM Artifact: Standalone CycloneDX file for offline audits and compliance reporting

    • Both SBOMs include complete dependency tree with version information

  • Trivy Integration: Container and dependency scanning on every build with fail-fast thresholds

  • GitHub Security Tab: All findings automatically uploaded as SARIF

  • Verification: Use docker scout quickview and docker sbom commands to inspect attestations locally

Container Security (v1.4.5+)

  • Chainguard Wolfi: Zero-CVE baseline, rebuilt daily

  • Non-Root Execution: Container runs as UID 65532 (nonroot)

  • Read-Only Filesystem: Supports --read-only flag for immutable deployments

  • Minimal Attack Surface: no package manager (apk, wget and curl are absent) and production dependencies only. A BusyBox shell and npm ARE present -- this line said "no shell" until v3.2.0, when measuring the published image showed otherwise. Size a container compromise accordingly.

  • Health Checks: Built-in container health monitoring

Cryptographic Hardening (v1.2.5)

  • Argon2 OWASP Compliance: Default parameters follow OWASP 2024-2025 recommendations

    • Type: Argon2id (hybrid side-channel + GPU resistance)

    • Memory: 19 MiB (OWASP minimum)

    • Iterations: 2 (OWASP recommended for 19 MiB)

  • Secure Random Number Generation: All cryptographic operations use crypto.randomBytes() or crypto.getRandomValues()

  • CVE-2025-64756 Fixed: Updated npm to resolve glob command injection vulnerability

Automated Security Scanning

  • CodeQL Analysis: Continuous code scanning for security vulnerabilities

  • Weekly Scans: Scheduled scans catch newly discovered vulnerabilities

Secure Deployment

# Recommended: Run with maximum security options
docker run -i --rm \
  --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=100m \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  cyberchef-mcp

# Note: the image already runs as non-root (UID 65532)
# --read-only requires tmpfs mount for /tmp directory

For detailed information, see:

Project Roadmap

CyberChef MCP Server has a comprehensive development roadmap spanning 19 releases across 6 phases through August 2027.

Phase

Releases

Timeline

Focus

Status

Phase 1: Foundation

v1.2.0 - v1.4.6

Q4 2025 - Q1 2026

Security hardening, upstream sync, performance

Completed

Phase 2: Enhancement

v1.5.0 - v1.7.3

Q2 2026

Streaming, recipe management, batch processing

Completed

Phase 3: Maturity

v1.8.0 - v2.0.0

Q3 2026

API stabilization, upstream catch-up, relicensing, v2.0.0

v2.0.0 Released

Phase 4: Expansion

v2.2.0 - v2.4.0

Q4 2026

Multi-modal (v2.2.0 shipped), protocol currency and transports (v2.3.0 shipped), the tool registry and its first four tools (v2.4.0 shipped)

Complete

Phase 5: Enterprise

v2.5.0 - v2.7.0

Q1 2027

OAuth 2.1, RBAC, audit logging and multi-tenancy (v2.5.0 shipped), horizontal scaling and deployment (v2.6.0 shipped), metrics, tracing and dashboards (v2.7.0 shipped)

Complete

Phase 6: Evolution

v2.8.0 - v3.0.0

Q2-Q3 2027

Edge deployment, AI-native features, v3.0.0

Planned

External project integration — what it actually produced. The planning tree (External Project Integration, 30 documents) scoped 80-120 new tools from 8 security projects. Measuring each against the 504 operations already present cut that hard: four tools shipped in v2.4.0, drawn on xortool, pwntools, RsaCtfTool, hashcat and John. Four of the eight projects contributed nothing, because the capability was already here — Magic covers what Ciphey, Ares and katana's core do, and cryptii's encodings have 26 equivalents among the operations. The cyberchef-recipes preset corpus remains unbuilt. See THIRD-PARTY-NOTICES.md for what was taken from where.

See the Full Roadmap for detailed release plans and timelines.

Documentation

New here? Start with the Tutorial — a guided first hour, from install to decoding a real sample. Then examples/ for eight runnable scripts that CI executes on every change, so they cannot drift from the code.

Detailed documentation is organized in the docs/ directory:

User Guides

Development Guides

Technical Documentation

Project Management

Strategic Planning

v2.0.0 Integration Planning

  • External Project Integration: Comprehensive planning for v2.0.0+ integrations

    • Overview: Integration strategy and architecture (4 phases, 12 sprints, 80-120 new tools)

    • Phase Plans: Foundation, JavaScript Native, Algorithm Ports, Advanced

    • Sprint Plans: 12 detailed sprint breakdowns with task lists

    • Tool Integration Plans: Per-tool integration strategies (Ciphey, cryptii, xortool, RsaCtfTool, John, pwntools, katana, recipes)

    • Technical Guides: Tool registration, algorithm porting, testing, dependencies

Reference Documentation

Security & Releases

  • Security Policy: Security policy and vulnerability reporting

  • Security Audit: Comprehensive security assessment

  • Security Fixes Report: Detailed report of 11 vulnerability fixes (ReDoS and cryptographic weaknesses)

  • Security Fixes Summary: Quick reference for recent security improvements

  • v2.0.0 Breaking Changes: Comprehensive migration guide for v2.0.0 with deprecation codes, examples, and FAQ

  • Release Notes v2.6.0: Startup cut from ~1300 ms to ~185 ms by deferring an import of all 504 operations; health probes and a drain that loses no requests on a rolling update; a Helm chart and Compose file; a 5 s deadline and circuit breaker on calls to the authorization server. Re-scoped: the plan's Redis session store solved a problem MCP 2026-07-28 deleted — the protocol has no sessions. 1,246 MCP tests.

  • Release Notes v2.5.0: Multi-tenancy completes the Enterprise Features milestone — the cache, recipe store, concurrency pool and audit trail isolated per tenant, with identity taken only from an already-verified token. Plus a rate limiter that had never limited anything since v1.7.0: it was keyed on a per-request UUID, so 1000 requests against a limit of 5 produced 0 denials and 1000 leaked map entries. 1,218 MCP tests.

  • Release Notes v2.4.0: The tool registry and its first four tools — XOR key length by index of coincidence, De Bruijn patterns compatible with pwntools, hash identification with hashcat modes, and four RSA attacks. No plugin loader, with the node:vm measurement that rules one out. Three documents corrected that described work nobody had done.

  • Release Notes v2.3.0: Protocol revision 2026-07-28 on stdio and HTTP, a socket transport, npm distribution unblocked, 17 image operations returning a pooled backing ArrayBuffer — unrelated bytes — instead of the image, Add Text To Image working for the first time, the coverage gate raised from 75/70/90/75 to 95/88/96/96, 1,023 MCP tests

  • Release Notes v2.2.0: Images and audio as content blocks (Generate QR Code returned "" and never worked), tool annotations on all 527 tools, prompts and resources, LM Hash off OpenSSL, unknown arguments rejected instead of silently defaulted, 955 MCP tests

  • Release Notes v2.1.0: Tool-list hierarchy (~97% smaller tools/list), Zod 4 schema fix, all 10 flow-control operations working, AES and 62 other toggleString operations fixed, logs to stderr, 60s shutdown hang removed, tutorial + 8 runnable examples

  • Release Notes v2.0.0: Upstream v11.4.0 (504 operations), GPL-3.0-or-later relicense, Node 24 floor, per-session HTTP transport (#36), 272 security findings closed, 757 MCP tests

  • Open-alert disposition: Every Dependabot and code-scanning alert — fixed, suppressed with a justification, or dismissed with a reason

  • Release Notes v1.9.0: MCP streaming, worker thread pool, HTTP transport, upstream v10.20.0, security updates, 689 tests

  • Release Notes v1.8.0: Breaking changes preparation - deprecation warnings, migration preview tool, v2.0.0 compatibility mode

  • Release Notes v1.7.3: Reference documentation and v2.0.0 integration planning - 42 new documentation files, comprehensive security tool reference

  • Release Notes v1.7.2: CI improvements, test expansion, documentation updates - enhanced workflows, 150 new tests, corrected metrics

  • Release Notes v1.7.1: Repository cleanup and workflow enhancements - removed 88 unused files, enhanced upstream sync

  • Release Notes v1.7.0: Advanced features - batch processing, telemetry, rate limiting, cache enhancements, resource quotas

  • Release Notes v1.6.2: Technical debt fixes - ESLint errors resolved, ENABLE_WORKERS default corrected

  • Release Notes v1.6.1: Comprehensive test coverage (311 tests, 78.93% coverage) and Codecov integration

  • Release Notes v1.6.0: Recipe management system with CRUD operations, import/export, and curated library

  • Release Notes v1.5.0: Enhanced error handling, structured logging, automatic retry, streaming infrastructure

  • Release Notes v1.4.6: Sprint 1 Security Hardening - Chainguard distroless migration, zero-CVE baseline, read-only filesystem support

  • Release Notes v1.4.5: Supply chain attestations and documentation reorganization

  • Release Notes v1.4.4: Docker Hub build fix and 12 security vulnerability fixes

  • Release Notes v1.4.3: Dependency resolution and Node.js 22 compatibility

  • Release Notes v1.4.2: CI/CD improvements and zero-warning workflows

  • Release Notes v1.4.1: Security patch - 11 Code Scanning vulnerabilities fixed

  • Release Notes v1.4.0: Performance optimization with caching, streaming, and resource limits

  • Release Notes v1.3.0: Upstream sync automation with comprehensive testing

  • Release Notes v1.2.6: nginx:alpine-slim optimization for web app

  • Release Notes v1.2.5: Security patch with OWASP Argon2 hardening

  • Release Notes v1.2.0: Security hardening release

  • Release Notes v1.1.0: Security fixes and Node.js 22 compatibility

  • Release Notes v1.0.0: Initial MCP server release

Development

Local Setup

If you want to modify the server code without Docker:

  1. Install Dependencies:

    npm install
  2. Generate Config: (Required to build the internal operation lists)

    npx grunt configTests
  3. Run Server:

    npm run mcp

CI/CD

This project uses GitHub Actions to ensure stability and security:

Core Development Workflows:

  • MCP Server CI (core-ci.yml): Tests the underlying CyberChef logic and configuration generation on Node.js 24

  • Docker Build (mcp-docker-build.yml): Builds, verifies, and security scans the cyberchef-mcp Docker image

  • Pull Request Checks (pull_requests.yml): Automated testing and validation for pull requests

  • Performance Benchmarks (performance-benchmarks.yml): Automated performance regression testing on code changes (v1.4.0+)

Code Quality & Coverage:

  • Codecov Integration: Comprehensive code quality analytics with three distinct components

    • Coverage Analytics: Automated coverage tracking with V8 provider and status checks on pull requests

      • Project coverage threshold: 95% (codecov.yml)

      • Patch coverage threshold: 90% for new code

      • Multiple coverage formats: lcov, JSON, HTML, Cobertura

      • Component-level tracking: MCP Server, Core Operations, Node API

    • Bundle Analysis: Webpack bundle size tracking and visualization via @codecov/webpack-plugin

      • Automated bundle size change detection in pull requests

      • Historical bundle size trends and optimization insights

      • Dry-run mode for local development

    • Test Analytics: JUnit XML test result reporting and analysis

      • Test performance tracking over time

      • Flaky test detection

      • Test execution time monitoring

    • Configuration: codecov.yml, coverage flags, thresholds, PR commenting

    • See Codecov Integration Guide for complete setup and usage documentation

Security & Release Workflows:

  • Security Scan (security-scan.yml): Trivy vulnerability scanning, SBOM generation, weekly scheduled scans

  • CodeQL Analysis (codeql.yml): Automated security scanning for code vulnerabilities (CodeQL v4)

  • Release (mcp-release.yml): Publishes Docker image to GHCR with SBOM attachment on version tags (v*), automatically creates GitHub releases

Upstream Sync Automation (v1.3.0+):

  • Upstream Monitor (upstream-monitor.yml): Monitors GCHQ/CyberChef for new releases weekly (Sundays at noon UTC), creates GitHub issues for review

  • Upstream Sync (upstream-sync.yml): Selective file synchronization workflow - copies only src/core/operations/*.mjs files, prevents restoration of deleted web UI components, creates PR for review

  • Rollback (rollback.yml): Emergency rollback mechanism with state comparison and ref-proj guidance

All workflows use the latest CodeQL Action v4 for security scanning and SARIF upload.

Testing

# Run all tests (requires Node.js >=24 <27; 241 Node-API + 2,289 operation tests)
npm test

# Run MCP validation test suite (1,246 tests across 46 files, with Vitest)
npm run test:mcp

# Run MCP tests with coverage report
npm run test:coverage

# Run performance benchmarks (v1.4.0+)
npm run benchmark

# Test Node.js consumer compatibility
npm run testnodeconsumer

# Lint workflows (matches the CI gate)
actionlint .github/workflows/*.yml

# Lint code
npm run lint

Test Coverage: The MCP server maintains comprehensive test coverage:

  • 1,246 MCP tests across 46 suites, plus 241 Node-API tests, 2,289 operation tests and 9 runnable examples executed by CI

  • Coverage thresholds (vitest.config.mjs): 96% lines, 95% statements, 88% branches, 96% functions, with src/node/lib/** held separately at 99 lines / 99 statements / 94 branches / 100 functions

  • Current coverage: 96.50% lines, 95.67% statements, 96.43% functions, 89.16% branches

  • Note: individual suite names are not listed here because the list went stale three times; ls tests/mcp/*.test.mjs is authoritative.

Contributing

Contributions to the MCP adapter are welcome! We appreciate:

  • Bug Reports: Open an issue with detailed steps to reproduce

  • Feature Requests: Check Roadmap first, then open an issue

  • Pull Requests: See Tasks for areas needing work

  • Documentation: Improvements to guides and examples are always welcome

Development Workflow

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Make your changes and test thoroughly

  4. Commit with conventional commit messages (feat:, fix:, docs:, etc.)

  5. Push to your fork and submit a pull request

For contributions to the core CyberChef operations, please credit the original GCHQ repository.

Repository Information

Support

If you find this project useful, consider supporting its development:

Buy Me a Coffee Thanks.dev

Licensing

As of v2.0.0, CyberChef-MCP is licensed under GPL-3.0-or-later. Versions 1.9.x and earlier remain Apache-2.0 and are unaffected.

Upstream CyberChef is released under the Apache 2.0 Licence and is covered by Crown Copyright. Files inherited from upstream keep their Apache-2.0 headers; the full text is preserved in LICENSE.Apache-2.0. This is not a relicensing of GCHQ's code — it is the combined work that is GPLv3, which Apache-2.0's one-way compatibility with GPLv3 permits.

The change was forced by v2.0.0 incorporating algorithms from GPL-licensed reference tools: katana is GPL-3.0-or-later (ruling out GPLv2) and John the Ripper is GPL-2.0-or-later, while Apache-2.0 is compatible with GPLv3 but not GPLv2. GPL-3.0-or-later is the only licence that admits all three. The reasoning is recorded in ADR 0001, and per-component attribution is in THIRD-PARTY-NOTICES.md.

What this means for you: running CyberChef-MCP — including serving it over HTTP — carries no obligation, as GPLv3 has no network-use clause. Distributing a derivative of it does: that must also be GPLv3. If your policy precludes GPLv3, stay on the v1.9.x line, which remains Apache-2.0 and receives security-only patches through its LTS window.

Available Tools

42 tools
cyberchef_bakeB
Destructive

Execute a CyberChef recipe. Use this for complex chains of operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesThe input data
recipeYesList of operations to perform

TDQS

B3.4/5.0
Behavior2/5

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

Annotations mark this as destructive and potentially open-world, but the description itself adds no behavioral context beyond 'execute.' It does not mention whether output is returned synchronously, whether recipes can trigger external side effects, or what operational consequences the destructiveHint refers to. Since it adds no insight beyond the annotations, it under-delivers for an execution 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?

The description is only two short sentences with no wasted words. It front-loads the main action and follows with a brief usage hint. Nothing repeats the schema, and every sentence earns its place.

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?

For a tool with no output schema, potentially destructive behavior, and broad execution capabilities, this description is too thin. It does not describe return values, error behavior, execution limits, or how it differs from related tools like cyberchef_recipe_execute. The schema covers inputs well, but not the execution context an agent needs.

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 already documents the input and recipe parameters, including the recipe's op/args shape and a pointer to cyberchef_describe_operation. The tool description adds no parameter-level detail, so it earns the baseline score of 3 rather than being penalized for a schema gap.

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 a concrete action and resource: it executes a CyberChef recipe. It also adds a usage scope by mentioning 'complex chains of operations.' However, it does not explicitly distinguish this from sibling tools like cyberchef_recipe_execute, which may also sound recipe-related, so it is not fully differentiated.

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

Usage Guidelines4/5

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

The phrase 'Use this for complex chains of operations' provides a clear, explicit when-to-use context. It stops short of naming exclusions or alternatives such as cyberchef_magic or cyberchef_recipe_execute, so there is no when-not-to-use guidance.

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

cyberchef_batchB
Destructive

Execute multiple CyberChef operations in batch (parallel or sequential mode). Supports partial success.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution modeparallel
operationsYesArray of operations to execute

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate destructive=true and readOnly=false, so the description does not need to restate that this is a mutating batch operation. It adds 'supports partial success,' which is useful, but does not explain failure semantics, side effects, ordering guarantees, or what happens to partially completed batches.

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, tight sentence that front-loads the core purpose and includes the key nuance of partial success. Every part earns its place with no filler.

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?

There is no output schema, yet the description does not explain what the tool returns, how results are reported, how failures are surfaced, or how partial success manifests. For a batch execution tool with destructive potential, an agent needs more behavioral context to invoke it correctly and interpret results.

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 coverage is 100%, and both properties have descriptions. The description mentions parallel/sequential mode, but the schema already documents the enum and default, so the description adds minimal new meaning beyond the structured data.

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 tool executes multiple CyberChef operations in batch and identifies the two execution modes. It is specific enough to distinguish from most sibling tools that handle single operations, though it does not explicitly contrast with recipe_execute or bake.

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 phrase 'execute multiple operations in batch' implies this tool is for grouping operations rather than calling them one at a time, but it gives no explicit guidance on when to choose this over alternatives such as recipe_execute, nor does it mention any exclusions or prerequisites.

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

cyberchef_cache_clearB
Read-onlyIdempotent

Clear the operation result cache.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior1/5

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

Description contradicts annotations: 'Clear' is a mutating action, but readOnlyHint is true. While idempotentHint and destructiveHint align with a cache-clear operation, the readOnly contradiction is significant and confusing for an agent deciding whether this tool is safe to invoke.

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 filler or redundant information. It states the action and target in the fewest possible 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 zero-parameter operation, a one-line description is a minimum viable definition. However, it does not explain what 'operation result cache' is, what consequences clearing it has, or how it relates to cyberchef_cache_stats, and the readOnlyHint contradiction leaves the overall context inconsistent.

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 zero parameters, so the empty input schema is fully self-explanatory. The description does not need to add parameter-level detail; baseline 4 applies.

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

Purpose5/5

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

The description uses a specific verb ('Clear') and a specific resource ('the operation result cache'), making the tool's action immediately clear. It also naturally distinguishes this tool from the sibling cyberchef_cache_stats: one clears, the other reports stats.

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 gives no guidance on when to clear the cache versus inspecting it with cyberchef_cache_stats, nor does it mention any prerequisites or side effects. Usage context is only implied by the verb 'Clear'.

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

cyberchef_cache_statsA
Read-onlyIdempotent

Get cache statistics including hits, misses, size, and items.

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?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description is consistent with them. It adds the list of reported metrics but does not disclose extra behavioral details such as whether statistics are cumulative or reset by cache_clear.

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 efficient sentence with no filler; every word contributes to meaning and the key scoping phrase 'cache statistics' is 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?

For a zero-parameter read-only utility the description is nearly complete, listing the essential output fields. It falls slightly short of 5 because it does not clarify units or semantics for 'size,' which could mean bytes, entries, or another measure.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100%, so there is nothing for the description to clarify. The baseline of 4 applies because no parameter semantics are 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 uses a specific verb ('Get') and resource ('cache statistics') and enumerates the exact metrics returned (hits, misses, size, items). This clearly distinguishes it from siblings like cyberchef_cache_clear (mutation) and cyberchef_worker_stats (different resource).

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 given about when to prefer this tool over alternatives or when not to use it. While the name and read-only annotations imply it is for inspection, the description does not state exclusions or mention cache_clear/worker_stats as alternatives.

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

cyberchef_categoriesA
Read-onlyIdempotent

List CyberChef's operation categories with counts and examples. Start here to browse what this server can do, then use cyberchef_list_operations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
usageYes
categoriesYes
totalOperationsYes

TDQS

A4.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is established. The description adds that results include counts and examples and that this is a discovery entry point, but it does not disclose additional behavioral constraints beyond those. No contradiction with annotations.

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

Conciseness5/5

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

Two short sentences: the first states exactly what the tool does, and the second provides the recommended usage flow. 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.

Completeness5/5

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

For a zero-parameter, read-only discovery tool with an output schema, the description is complete. It tells the agent what the tool returns, why to use it, and what to do next.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing for the description to document. The baseline for zero-parameter tools is 4, and the description appropriately avoids inventing parameter details.

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 uses a specific verb and resource: it lists CyberChef's operation categories with counts and examples. It also explicitly differentiates itself from cyberchef_list_operations by framing this as the starting point for server-wide exploration.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance ('Start here to browse what this server can do') and names the next tool to use (cyberchef_list_operations). This makes the navigation path clear for an agent.

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

cyberchef_cert_chainA
Read-onlyIdempotent

Order a PEM bundle of X.509 certificates into a chain and report where it breaks: wrong order, a missing intermediate, an expired link, an issuer not permitted to sign, or an issuer whose name and key identifier match while its SIGNATURE does not — the shape of a substituted certificate. Every link is verified CRYPTOGRAPHICALLY: matching names and key identifiers are metadata, and anyone can mint a certificate carrying the ones they like. The three X.509 operations each parse ONE certificate and nothing relates two.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoJudge validity at this instant (ISO 8601) instead of now. For asking whether a chain WILL be valid at a future date, or was at an incident's timestamp.
inputYesOne or more PEM certificate blocks, in any order. A concatenated bundle — the form `fullchain.pem` and most servers use — is the expected input.
expiry_warning_daysNoFlag any certificate expiring within this many days of the reference time.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description explains that every link is verified cryptographically and that matching names/key identifiers are only metadata, warning about substituted certificates. It also lists the distinct break conditions, adding meaningful behavioral detail that an agent could not infer from annotations or 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?

Three purposeful, front-loaded sentences: purpose and failure modes, a cryptographic verification caveat, and a disambiguation from related operations. No filler or redundant restatement of the tool name.

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 complex X.509 tool with no output schema, the description covers inputs, break-reporting behavior, cryptographic verification, and the single-certificate alternative. It stops short of specifying the exact success/error output shape, but enough is present for an agent to invoke it correctly.

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 input, as_of, and expiry_warning_days. The description reinforces the chain-ordering concept but does not add material parameter-level detail beyond the schema; the baseline of 3 applies.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Order a PEM bundle of X.509 certificates into a chain and report where it breaks.' It enumerates concrete failure modes and closes by contrasting itself with the other X.509 operations, so an agent can distinguish this chaining tool from single-certificate parsers.

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 makes the intended input context explicit: a PEM bundle in any order, such as fullchain.pem. The final sentence signals that this tool is for relating multiple certificates, while the other X.509 operations parse one certificate, giving implied when-to-use guidance, though it does not name the alternative tools directly.

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

cyberchef_classical_cipherA
Read-onlyIdempotent

Encode and decode the classical ciphers CyberChef has no operation for: Playfair, the Polybius square, ADFGVX and Baudot/ITA2 (tap code is a Polybius square, so it is the same tool). Every contested convention is a parameter, because implementations that disagree on one disagree on every message.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoKeyword for the square. Playfair, Polybius and ADFGVX only.
modeNoDirection.encode
inputYesThe message or ciphertext.
cipherYesWhich cipher.
polybius_sizeNoSquare size. 5x5 needs a 25-letter alphabet; 6x6 fits 26 letters and 10 digits.
baudot_profileNoWhich figures-shift table. They differ in exactly six cells.ita2
polybius_orderNoCoordinate order. Row-then-column is canonical.row_column
playfair_fillerNoThe letter inserted between a doubled pair and used to pad an odd length.X
baudot_bit_orderNoBit order in each five-bit group. `value` is Wikipedia's and dcode's, `transmission` is ITU-T S.1's. If CR and LF come out transposed, use the other.value
polybius_alphabetNoOverride the square's alphabet. The 6x6 default (letters then digits) is a convention, not a standard, so set this when matching a specific source.
transposition_keyNoADFGVX only: the columnar transposition applied after fractionation. Without it you get only ADFGVX's first half, a 6x6 Polybius square.
playfair_reductionNoHow Playfair gets 26 letters into 25 squares. merge_ij is canonical; omit_v is dcode.fr's default.merge_ij
playfair_replace_doublesNoBug-compatibility with pycipher, which REPLACES the second letter of a doubled pair rather than inserting a filler. Lossy: it does not round-trip.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds that this is a pure encode/decode transform and that disputed conventions are exposed as parameters, which is useful but does not go into output format, error behavior, or operational edge cases.

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 front-loaded sentences with no filler. The first sentence delivers the cipher list and scope; the second gives one concise rationale for the large parameter surface. Every clause earns its place.

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 high-complexity tool with 13 parameters, the description stays appropriately high-level while the schema's 100% coverage carries invocation details. It supplies key selection context: which ciphers, the tap-code equivalence, and the convention-parameter principle. An explicit output contract would be the only notable addition, but for encode/decode transforms the return shape is largely inferable.

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 every parameter already has a detailed description, so the baseline of 3 applies. The description's statement that every contested convention is a parameter is a useful design principle but adds no concrete parameter-level meaning 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 names a specific verb ('encode and decode') and a concrete resource set ('Playfair, the Polybius square, ADFGVX and Baudot/ITA2'), and explicitly frames the tool as covering ciphers CyberChef lacks. The parenthetical about tap code being a Polybius square prevents a common mis-selection. This clearly distinguishes the tool from sibling operations.

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?

It clearly scopes use to the four listed classical ciphers and tells the agent these are ciphers CyberChef has no native operation for, which establishes when this tool is the right choice. It does not name a specific sibling tool as an alternative or list exclusion cases, but the selection context is strong enough to guide an agent.

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

cyberchef_corpus_diffA
Read-onlyIdempotent

Compute statistics ACROSS a set of samples — what a recipe cannot express, since Fork runs each branch separately and nothing combines them. Infers record structure from per-offset byte AND bit variance, grouping adjacent offsets into fields; finds repeated cipher blocks (ECB and any other diffusion-free mode) and reports WHERE they sit; and finds nonce reuse, emitting the XOR of the two bodies, which is both the evidence and the way in. Assumes fixed-length or left-aligned samples.

ParametersJSON Schema
NameRequiredDescriptionDefault
samplesYesThe samples to compare. At least two; more is better for every statistic.
analysesNoWhich analyses to run. All of them by default.
block_sizeNoCipher block size for the ECB check. 16 for AES; 8 for DES and Blowfish.
input_formatNoHow the samples are encoded.Hex
nonce_prefix_bytesNoLeading bytes to treat as the nonce or IV. 12 for GCM, 16 for a CBC IV, 8 for ChaCha20. 0 disables the check.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent, and the description adds substantial behavioral detail on top: it infers structure from byte AND bit variance, reports where repeated blocks sit, and emits the XOR of nonce-reused bodies. This goes well beyond the safety profile provided by annotations.

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 dense paragraph with no filler. The core purpose is front-loaded, each subsequent sentence describes a distinct capability, and the closing assumption is a necessary constraint. Every sentence earns its place.

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 analytical complexity and the absence of an output schema, the description gives high-level but useful output expectations: field groupings, block locations, and an XOR result. It does not specify the exact return shape or how the three analyses are organized in the response, so a small gap remains for an agent that needs to interpret results precisely.

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 description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining what the analyses actually do (field grouping, block position reporting, XOR evidence), and it enriches the samples parameter with the fixed-length or left-aligned assumption. It does not tie these details to specific parameter names, but it still adds useful context.

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 opens with a specific verb and resource: 'Compute statistics ACROSS a set of samples.' It then enumerates the concrete analyses performed (field inference, repeated-block detection, nonce reuse), which clearly distinguishes this tool from single-input recipe/bake siblings. The contrast with Fork makes the purpose and scope unmistakable.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool instead of a recipe: 'what a recipe cannot express, since Fork runs each branch separately and nothing combines them.' It also provides a key exclusion condition with 'Assumes fixed-length or left-aligned samples,' telling the agent when the tool is not appropriate.

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

cyberchef_crib_dragA
Read-onlyIdempotent

Drag a guessed plaintext fragment along a XOR ciphertext and report every offset where it fits, ranked. With TWO ciphertexts under one key their XOR cancels the key, so a crib guessed in one message yields the matching span of the OTHER. With ONE ciphertext and a known fragment it yields key bytes instead; supply key_length and periodicity becomes a far stronger filter than printability, recovering the whole key when the crib is at least as long as it.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoHow many offsets to report, best first.
cribYesThe guessed plaintext fragment, e.g. " the ".
ciphertextYesThe ciphertext to drag along.
key_lengthNoSingle-ciphertext mode only: the repeating key's length, if known. Derived bytes must then agree mod this length, which rejects far more offsets than printability.
ciphertext_bNoA second ciphertext under the SAME key. Every hit is then a span of the other plaintext. Omit it to recover key bytes instead.
input_formatNoHow the ciphertexts are encoded. The crib is always literal text.Hex
printable_onlyNoReport only fully printable results. False when the plaintext is not text.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark the tool read-only and non-destructive; the description adds substantial behavioral detail beyond that: XOR cancels the key in two-ciphertext mode, periodicity modulo key_length is a stronger filter than printability, and full key recovery requires a crib at least as long as the key. No contradiction with annotations.

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

Conciseness5/5

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

The description is dense but efficient: three sentences front-load the core behavior, then explain the two modes and the key_length refinement. No filler or redundant restating of the tool name.

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 core algorithm, mode selection, key_length behavior, and key-recovery requirements. The only notable gap is the lack of an explicit output-shape description, such as how offsets and recovered key bytes are formatted, and no output schema exists to fill that gap.

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%, so the baseline is 3. The description adds meaning by explaining that ciphertext_b is only for the shared-key mode, key_length applies in single-ciphertext mode, and periodicity filtering is stronger than printable_only. This goes beyond the schema without repeating it.

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 names a specific technique and resource: dragging a guessed plaintext crib along XOR ciphertext and reporting ranked matching offsets. It also clearly distinguishes the two operating modes (two ciphertexts vs one), so an agent can tell it apart from generic CyberChef operations.

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 gives explicit mode-selection guidance: with two ciphertexts under the same key, use it to recover the other plaintext span; with one ciphertext, use it for key-byte recovery, and supply key_length to strengthen filtering. It does not explicitly name alternative sibling tools, but the specialized purpose and conditions are clear.

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

cyberchef_cyclic_patternA
Read-onlyIdempotent

Generate a De Bruijn (cyclic) pattern, or find the offset of a fragment within one. Compatible with pwntools' cyclic/cyclic_find, so patterns and offsets are interchangeable with it. Use mode=find with the bytes recovered from a crashed register to get the overflow offset; hex input is interpreted as both big- and little-endian, because a register dump is usually reversed relative to memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesGenerate a pattern, or find an offset in one.
lengthNogenerate: how many bytes to produce. find: how long the pattern was.
alphabetNoSymbols to build from. The default matches pwntools.abcdefghijklmnopqrstuvwxyz
fragmentNofind: the bytes recovered, as text or hex (e.g. "aabc" or 0x63626161).
fragment_formatNofind: how to read `fragment`. Auto tries hex first, then text.Auto
subsequence_lengthNoBytes of uniqueness: 4 for 32-bit, 8 for 64-bit. Must match the pattern.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses a non-obvious parsing trap: 'hex input is interpreted as both big- and little-endian, because a register dump is usually reversed relative to memory.' It also states the interop guarantee with pwntools' cyclic/cyclic_find, which an agent could not infer from the schema or annotations.

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?

Three sentences with no filler: purpose, compatibility, and a concrete usage scenario. The most important scoping information is front-loaded in the first sentence, and every sentence earns its place.

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?

Despite having 6 parameters and no output schema, the description covers the core generate/find workflows, explains the compatibility contract, and warns about the endianness subtlety. Remaining details (defaults, bounds, enum values) are fully documented in the schema, so nothing an agent needs to invoke this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% with per-parameter descriptions, defaults, and enums, so the baseline is 3. The description adds workflow wiring — mapping fragment bytes from a register dump and mode=find to the overflow offset — and the dual-endianness interpretation that modifies how `fragment` is parsed. These add meaning beyond the schema fields.

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 opens with a precise verb+resource statement: 'Generate a De Bruijn (cyclic) pattern, or find the offset of a fragment within one,' covering both modes explicitly. The pwntools compatibility mention further differentiates it from every sibling, none of which reference cyclic patterns or overflow offset finding.

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?

It gives an explicit when-to-use instruction: 'Use mode=find with the bytes recovered from a crashed register to get the overflow offset,' tying the tool to a concrete exploit-development workflow. It does not name explicit alternatives or when-not-to-use conditions, but no sibling overlaps with this functionality, so the guidance is sufficient.

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

cyberchef_deprecation_statsA
Read-onlyIdempotent

Get statistics on deprecated API usage in current session. Shows which deprecation warnings have been triggered and v2.0.0 preparation status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context beyond that by specifying the semantic scope ('current session') and the precise output content (triggered deprecation warnings and v2.0.0 preparation status). No contradictions with annotations.

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

Conciseness5/5

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

Two focused sentences, each earning its place: the first states the core function and scope, the second details what information the statistics include. There is no redundant or filler language.

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

Completeness5/5

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

For a zero-parameter, read-only stats tool with no output schema, the description is fully adequate: it states what the tool does, its scope, and the substance of the result. Combined with the rich annotations (read-only, idempotent, non-destructive), nothing essential is missing.

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

Parameters4/5

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

The tool has zero parameters and the input schema is empty, so schema description coverage is 100%. Per the baseline rule for tools with no parameters, a score of 4 is appropriate; there are no parameter semantics for the description to clarify.

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 uses a specific verb ('Get') and precise resource ('statistics on deprecated API usage'), and further clarifies what is included: 'which deprecation warnings have been triggered and v2.0.0 preparation status.' This clearly distinguishes it from sibling stats tools like cyberchef_cache_stats or cyberchef_worker_stats, which focus on different domains.

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 gives a clear context: use it when you need deprecation statistics or v2.0.0 preparation status in the current session. It does not explicitly mention alternatives or when-not-to-use, but the specificity of the scope ('current session', 'deprecated API usage') makes the intended use obvious.

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

cyberchef_describe_operationA
Read-onlyIdempotent

Full argument schema, defaults and types for one or more operations. This is what you need before calling cyberchef_bake with a new operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesOne operation name, or several, e.g. "AES Encrypt" or ["Gzip", "To Base64"]

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds meaningful behavioral context by specifying what information the tool returns (schema, defaults, types) and why it matters for baking operations. This goes beyond simply restating the annotations.

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

Conciseness5/5

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

The description is two concise sentences with no filler. The core value proposition is front-loaded, and the practical usage note immediately follows, making it easy for an agent to parse and act on.

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

Completeness4/5

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

Given the low complexity, high schema coverage, and read-only annotations, the description is largely complete. It states the input, the output content, and the usage context, though it does not mention error behavior for unknown operation names—a minor gap.

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 schema already documents the operations parameter with examples and types, so description-level parameter explanation is not critical. The description reinforces that one or more operation names are accepted and that this is for new operations, but it does not add significant semantic detail 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 the tool's function: it returns the full argument schema, defaults, and types for one or more operations. It also distinguishes itself from cyberchef_bake by positioning this as a required prerequisite step, making its purpose unambiguous.

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 tells the agent when to use this tool: before calling cyberchef_bake with a new operation. It does not enumerate alternatives or exclusions, but the workflow context is clear enough to guide correct usage.

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

cyberchef_ecdsa_recoverA
Read-onlyIdempotent

Recover an ECDSA private key from two signatures that reused a nonce, detected by a shared r. Exact algebra, not a search: k = (z1-z2)/(s1±s2), d = (s1·k - z1)/r. Returns up to TWO candidates, because a shared r means the nonce was k or n-k and the pair cannot choose between them without the public key -- low-S normalisation makes that common. The four ECDSA operations all work on ONE signature and nothing compares two, which is where ECDSA actually fails — the PS3 firmware key and the 2013 Android Bitcoin thefts were both this. Does NOT attack merely biased nonces; that needs a lattice and is not implemented.

ParametersJSON Schema
NameRequiredDescriptionDefault
curveNoThe curve the signatures are over. Only its order `n` is used, so this must be right — a wrong curve produces a plausible number that verifies against nothing.secp256k1
signaturesYesTwo or more signatures over the same key. Every pair sharing an `r` is reported.

TDQS

A4.9/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint/idempotentHint annotations by disclosing that up to TWO candidates may be returned, why low-S normalization makes that common, and that a wrong curve produces a plausible but unverifiable number. It also clarifies the operation is deterministic algebra, not a search, which is non-obvious behavioral context.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, formula, output ambiguity, scope contrast, and exclusion of biased-nonce attacks. It is front-loaded with the core purpose and remains tightly structured despite covering subtle cryptographic behavior.

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?

Even without an output schema, the description tells the agent what to expect (up to two candidates), why ambiguity can occur, what inputs are required conceptually, and what failure modes exist (wrong curve, biased nonces). This is complete enough for correct invocation and interpretation for a specialized cryptographic tool.

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 input schema already documents every parameter thoroughly (curve enum, signature formats, hash width rationale), so parameter-level detail is well covered. The description adds mathematical meaning by giving the exact formulas involving z1, z2, s1, s2, and r, and notes that only the curve's order n is used—value beyond the schema's field-level 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?

States a specific verb ('Recover'), a precise resource ('ECDSA private key'), and the exact attack condition ('two signatures that reused a nonce, detected by a shared r'). It also distinguishes itself from single-signature ECDSA operations and from search-based approaches, so an agent can separate it from siblings without opening the schema.

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

Usage Guidelines5/5

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

Explicitly defines when to use the tool: when two signatures share an r, and when not to use it: biased nonces require a lattice and are not implemented. It also contrasts this tool against the four single-signature ECDSA operations, giving clear routing logic against sibling tools.

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

cyberchef_entropy_scanA
Read-onlyIdempotent

Find WHERE a file's entropy is high, not just whether it is: contiguous regions above a threshold, with offsets. CyberChef's Entropy curve has a fixed 256-byte bin, no threshold and no region output. Applies Lyda and Hamrock's packed-binary rule (a CONJUNCTION of mean > 6.677 and peak > 7.199, not the single 7.0 usually quoted) and adds chi-squared and serial correlation as a second axis, which is what separates compressed from encrypted. Reports what a high number does and does not establish.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesThe data.
thresholdNoBits per byte above which a window counts as high-entropy. 7.0 is conventional and weak; the report says why.
step_bytesNoDistance between windows. Defaults to the window size, i.e. no overlap.
max_regionsNoHow many regions to return.
input_formatNoHow `input` is encoded.Raw
window_bytesNoWindow size for the sliding scan. 256 is the sourced figure; a larger window hides encryption that exists only in small areas.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral detail on top: the exact Lyda-Hamrock conjunction thresholds, the second chi-squared/serial-correlation axis, and an explicit caveat that the report states what a high number does and does not establish.

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 dense but every sentence earns its place: purpose, comparison to the naive alternative, methodology, and interpretative limits. The most important capability is front-loaded in the first sentence.

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 provides strong context for a read-only scan with six parameters and no output schema: what it scans for, the algorithm, and the caveat about interpretation. It leaves the exact return structure somewhat implicit, but the schema covers all inputs and the core behavior is clear.

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 parameters are already well documented. The description adds conceptual context about thresholds and windows but does not need to repeat per-parameter details; the 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 first sentence states a specific verb and resource: find WHERE entropy is high in a file, returning contiguous regions above a threshold with offsets. It clearly distinguishes the tool from CyberChef's generic Entropy curve by naming what is missing there (fixed 256-byte bin, no threshold, no region output).

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 gives clear context for when this tool adds value: locating high-entropy regions and separating compressed data from encrypted data. It contrasts with CyberChef's Entropy curve and says it goes beyond a simple 'whether' answer, but it stops short of an explicit, structured when-to-use/when-not-to-use guide with named sibling tools.

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

cyberchef_hash_crackA
Read-onlyIdempotent

Recover the plaintext behind a fast unsalted hash from a wordlist: MD5, SHA-1, SHA-256/384/512 and NTLM. Follows hash_identify with the question that matters — is this password one anybody would guess? Deliberately REFUSES bcrypt, scrypt, Argon2, yescrypt and the crypt(3) family BY NAME rather than attempting them, because a pure-JS attempt would find nothing and imply the password was strong. Supply a wordlist; a small common-password list and cheap mutations are built in. Bounded to 20 seconds, about 24 million candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashesYesThe hashes, as hex. Several share one pass over the wordlist.
wordlistNoCandidates to try, in order. The built-in common list runs first.
algorithmNoWhich digest. `auto` infers it from the hex length and tries every candidate when that is ambiguous, as it is at 32 characters.auto
mutationsNoCapitalise, uppercase, append a digit or year, leetspeak. About 20x the search.
include_commonNoTry the built-in list of the most-used passwords first.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnly and idempotent hints; the description adds meaningful runtime behavior: a 20-second bound, about 24 million candidates, a built-in common-password list, cheap mutations, and a deliberate refusal path for memory-hard KDFs so an empty result won't be misread as a strong password. There is no contradiction with the annotations.

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

Conciseness5/5

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

Every sentence earns its place: purpose, workflow placement, exclusions, input expectations, and time bound. The most decision-relevant information is front-loaded, and the description remains compact despite covering several distinct behaviors.

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?

All invocation-critical details are present: supported algorithms, wordlist handling, mutation toggle, common-password behavior, time bound, and anti-pattern refusal. A small gap is the lack of an output/return description (e.g., what is returned when no candidate matches within the time bound), and there is no output schema to fill that gap.

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 already explains hashes, wordlist ordering, algorithm auto-inference, mutations, and include_common. The description adds some framing around the wordlist and mutations but does not need to compensate for missing parameter documentation, so the high-coverage baseline of 3 applies.

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

Purpose5/5

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

The opening sentence names the verb (Recover), the resource (plaintext behind a fast unsalted hash), and the exact hash families (MD5, SHA-1, SHA-256/384/512, NTLM). It also distinguishes it from sibling hash_identify by framing this as the follow-up question, so an agent can tell at a glance what this tool does and how it relates to nearby tools.

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

Usage Guidelines5/5

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

The description explicitly says this follows hash_identify, scopes usage to fast unsalted hashes, and names algorithms it deliberately avoids (bcrypt, scrypt, Argon2, yescrypt, crypt(3)) with the rationale. This gives both when-to-use and when-not-to-use guidance without requiring the agent to inspect sibling descriptions.

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

cyberchef_hash_identifyA
Read-onlyIdempotent

Identify a password hash by its structure — bcrypt, sha512crypt, argon2, PHPass, Django, LDAP, MySQL, NetNTLM and others — and report the hashcat mode and John format name for each match. Falls back to length-based candidates for a bare digest. Use this before trying to crack something: CyberChef's Analyse hash operation reads hex length only and reports "Invalid hash" for bcrypt, sha512crypt and argon2.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesThe hash, one per call. Whitespace is trimmed.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile needs no repetition. The description adds genuine behavioral context beyond annotations: the length-based fallback for bare digests, multiple matches (one report 'for each match'), and why structure-based identification is required for non-hex hashes. No annotation contradiction.

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?

Three sentences, each earning its place: purpose plus outputs, fallback behavior, then routing guidance. The core purpose is front-loaded before the format list, and the when-to-use advice is saved for last. No filler or repetition of schema/annotation content.

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

Completeness5/5

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

For a low-complexity tool (1 required parameter, no output schema, read-only/idempotent annotations), the description covers what the tool returns (hashcat mode, John format), edge-case behavior (bare digests), and when to invoke it. With no output schema present, the description adequately conveys the return shape. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% ('The hash, one per call. Whitespace is trimmed.'), so the baseline is 3. The description adds semantic meaning by specifying the input type (a password hash, not arbitrary data) and implying that bare hex digests are also accepted via the fallback, which helps an agent judge what to pass. This pushes it above baseline.

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 names a specific verb and resource — 'Identify a password hash by its structure' — and enumerates concrete output artifacts (hashcat mode, John format name) plus supported formats. It differentiates itself from siblings like cyberchef_hash_crack and cyberchef_timestamp_identify by scoping to structure-based identification rather than cracking or timestamp detection.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('Use this before trying to crack something') and names the alternative it replaces (CyberChef's Analyse hash operation), explaining that the alternative misreads bcrypt, sha512crypt and argon2 as 'Invalid hash'. This is concrete routing guidance an agent can act on without inspecting siblings.

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

cyberchef_hash_statisticsA
Read-onlyIdempotent

Analyse a set of password hashes as a SET: which formats appear and in what proportion, which accounts share a password, which entries are locked or passwordless rather than hashed, and which algorithm is the weakest link. Answers questions that are properties of the corpus rather than of any single hash, so calling hash_identify in a loop cannot produce them. Accepts bare hashes one per line or user:hash records including /etc/shadow. Reads structure only — it never cracks anything and never reaches the network.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesThe corpus: one hash per line, or user:hash records (/etc/shadow works as-is). Blank lines and # comments are skipped. At most 1 MB.
reveal_sharedNoReport which accounts share a digest. The usernames are echoed back; set false if the output is going somewhere the hashes should not.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, the description discloses valuable operational constraints: it reads structure only, never cracks hashes, and performs no network access. These are exactly the behavioral traits that affect whether an agent should select this over hash_crack or other network-capable tools, and they align with the annotations.

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

Conciseness5/5

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

Four sentences, each doing distinct work: output scope, sibling differentiation, input format, and safety/network behavior. The most load-bearing claim (set-level analysis) is front-loaded and there is no filler or tautology.

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

Completeness5/5

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

For a two-parameter tool with complete schema descriptions and strong annotations, the description is sufficient even without an output schema: it names every output dimension the agent should expect (formats/proportions, shared accounts, locked/passwordless status, weakest link). It also covers the input contract clearly and states the tool's hard limits.

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 baseline is 3. The description restates the input format ('bare hashes one per line or user:hash records including /etc/shadow') but adds no parameter-specific detail beyond what the schema already documents; the reveal_shared parameter is fully explained in the schema with privacy guidance.

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 opens with a specific verb and resource: 'Analyse a set of password hashes as a SET', then enumerates concrete outputs (format proportions, shared accounts, locked/passwordless entries, weakest algorithm). It also distinguishes itself from hash_identify by noting corpus-level questions cannot be produced by looping single-hash identification.

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

Usage Guidelines5/5

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

It explicitly defines when the tool is appropriate: questions that are properties of the corpus rather than of any single hash. It names hash_identify as the alternative that cannot answer these questions, and the final sentence rules out misuse by saying it never cracks anything and never reaches the network.

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

cyberchef_jwt_weaknessA
Read-onlyIdempotent

Report everything wrong with a JWT that can be established from the token alone. JWT Verify answers whether a signature is valid under a key you supply, which is a different question: alg: none has no signature to verify and one signed with secret verifies perfectly. Checks the algorithm (including the case and Unicode-escape variants that bypass naive filters), an empty signature, the ECDSA psychic signature (CVE-2022-21449), quickstart secrets, and the standard claims. Headers that only matter because of what a SERVER does with them — jku, jwk, x5u, kid — are reported as present, never as confirmed.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesThe JWT, in compact serialisation.
secretsNoExtra HMAC secrets to try, in addition to the built-in quickstart list. This is a configuration check, not a cracking run — for a wordlist use hashcat mode 16500.
now_secondsNoUnix time to evaluate exp and nbf against. Defaults to the current time.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, and the description adds substantial context beyond that: the exact check categories (algorithm bypass variants including case/Unicode escapes, empty signature, ECDSA psychic signature CVE-2022-21449, quickstart secrets, standard claims). Most valuably, it discloses the confidence semantics — headers like jku, jwk, x5u, kid are 'reported as present, never as confirmed' — which prevents the agent from over-interpreting findings.

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 front-loaded with the core purpose in the first sentence, then builds purpose → differentiation → check checklist → caveat in logical order. Every sentence carries load-bearing information, though the second sentence is dense and could be tightened into a shorter aside without losing the usage guidance.

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?

With no output schema, the description carries the burden of conveying what the tool reports, and it delivers: it enumerates the check categories, explains the scope limitation ('from the token alone'), and specifies the confidence granularity of findings. It does not describe the exact report/return structure, but for a scanner of this complexity the behavior is well-specified.

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%, so the baseline is 3; the description raises it by contextualizing the secrets parameter as the 'built-in quickstart list' that the checks exercise, connecting the schema's 'configuration check, not a cracking run' framing to the described behavior. The now_seconds parameter's default behavior is fully documented in the schema, so no description compensation 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 opening sentence names a specific verb, resource, and scope: 'Report everything wrong with a JWT that can be established from the token alone.' It then explicitly differentiates itself from JWT Verify by explaining that signature validity is 'a different question.' An agent can tell exactly what this tool does and how it differs from related operations without opening the schema.

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

Usage Guidelines5/5

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

The description explicitly names the alternative ('JWT Verify') and gives the condition that selects it: someone wanting to know whether a signature is valid under a supplied key should not use this tool, because 'alg: none has no signature to verify and one signed with secret verifies perfectly.' The secrets parameter also routes wordlist cracking to 'hashcat mode 16500,' providing a clear when-not-to-use signal.

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

cyberchef_list_operationsA
Read-onlyIdempotent

List the operations in one category, with a one-line summary of each. Use cyberchef_describe_operation for full argument schemas.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesCategory name, e.g. "Encryption / Encoding", "Hashing", "Extractors"

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextYes
categoryYes
operationsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by specifying that results are one-line summaries and that deeper argument details are intentionally deferred to another tool, which shapes agent expectations beyond the annotations.

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

Conciseness5/5

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

Two sentences with no fluff: the first states the operation and output, the second routes to the relevant sibling. The most important scoping information is front-loaded.

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

Completeness5/5

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

For a simple read-only listing tool with one documented parameter and an output schema, the description covers what an agent needs to select and invoke it correctly. It also names the natural follow-up tool for richer detail.

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 single 'category' parameter is already documented with examples. The description adds minimal semantic value beyond restating the category concept, so it appropriately relies on 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?

States a specific verb ('List'), a resource ('operations'), and a scoping dimension ('in one category') plus the output format (one-line summary). It also differentiates from cyberchef_describe_operation by explicitly directing full argument schema lookups there.

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

Usage Guidelines5/5

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

The description gives clear usage context: use this tool for category-scoped operation lists with summaries. It names the alternative tool for a different need ('Use cyberchef_describe_operation for full argument schemas'), effectively telling the agent when not to use this tool.

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

cyberchef_magicB
Read-onlyIdempotent

The Magic operation attempts to detect various properties of the input data and suggests which operations could help to make more sense of it.OptionsDepth: If an operation appears to match the data, it will be run and the result will be ana...

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoLayers of encoding to unwrap. Default 3 handles the usual nesting (base64-then-gzip); raise only if output is still encoded. Cost grows fast.
inputYesThe input data to process
intensive_modeNoAlso brute-force XOR, bit rotations and encodings, not just detect them. Finds single-byte XOR; slow, and only the first 100 bytes are tried.
extensive_language_supportNoCompare against 284 languages instead of ~40. Usually widens the match list without sharpening it; the language result is an estimate either way.
crib_known_plaintext_string_or_regexNoRegex a decoding must match to be reported. The most effective filter when you know any of the plaintext -- a flag prefix, a header, an expected word.

TDQS

B3.3/5.0
Behavior3/5

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

The description reveals that matching operations will actually be run and their results analyzed, which is useful behavioral context beyond the readOnly/idempotent annotations. The text is truncated at 'the result will be ana...', so the full behavior is not visible; this limits the transparency score.

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

Conciseness3/5

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

The opening sentence is informative, but the text is poorly formatted with run-together content like 'it.OptionsDepth:' and appears truncated. It is not excessively long, but the structure is messy enough to reduce clarity.

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

Completeness3/5

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

With no output schema, the description should say more about what Magic returns—such as suggested recipes, confidence levels, or decoded output—but it only says it 'suggests which operations.' The parameter docs are strong, yet the missing output expectations and truncated description leave a moderate gap.

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 each parameter already has rich, behavior-oriented documentation such as cost growth, 100-byte limits, and language count trade-offs. The tool description adds little beyond what the schema already provides, so baseline 3 is appropriate.

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 states a specific purpose: detect properties of the input data and suggest operations to make sense of it. This clearly identifies the tool's function, though it does not explicitly differentiate it from sibling detection tools like cyberchef_entropy_scan or cyberchef_hash_identify.

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 context is implied rather than explicit: an agent can infer this is for unknown-format input that needs automatic analysis. However, there is no direct guidance about when to prefer Magic over alternatives like baking a known recipe or using a more targeted identifier.

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

cyberchef_migration_previewA
Read-onlyIdempotent

Analyze recipes and configurations for v2.0.0 compatibility. Returns compatibility issues and optionally transforms recipes to v2.0.0 format.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoanalyze: check compatibility, transform: convert to v2.0.0 formatanalyze
recipeYesRecipe object or array to analyze

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds that it returns compatibility issues and can transform recipes, but it does not clarify whether 'transform' returns a converted recipe or persists changes, which is ambiguous given readOnlyHint=true. This is not a direct contradiction, but it misses an opportunity to remove confusion.

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, efficient sentence that front-loads the core purpose and packs both operational modes without 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?

For a two-parameter tool with full schema coverage and safety annotations, the description is mostly sufficient, but the absence of an output schema and the ambiguity around whether transformation modifies state leave an agent without a complete picture of the result or effect. More detail on the issue format or the read-only nature of the transform would be needed for a higher score.

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 already documents the mode enum and the recipe parameter. The description adds no concrete parameter-format details beyond what the schema provides, so the 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 states a specific action ('Analyze... for v2.0.0 compatibility'), identifies the resource ('recipes and configurations'), and clearly distinguishes this tool from siblings like cyberchef_deprecation_stats or cyberchef_recipe_validate by its migration focus. The optional transform behavior is also explicitly named.

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 clearly frames when to use this tool: when checking or migrating recipes/configurations to v2.0.0. It does not explicitly name alternatives or state when not to use it, so it misses the top score, but the context is unambiguous.

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

cyberchef_plaintext_checkA
Read-onlyIdempotent

Decide whether a candidate is plaintext, and say which evidence decided it. This is the judgement every automatic-decoding search has to make and that no CyberChef operation exposes: Entropy, Chi Square and Index of Coincidence give the statistics, not the verdict. Reports printable ratio, English word hits, chi-squared against English letter frequencies and index of coincidence, with a verdict and the reason for it. Useful as the stopping condition when you are peeling layers off unknown data by hand.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesThe candidate. At most 1 MB.
languageNoWhich language model to score against. Only English is implemented; the argument exists so a second one does not change the call shape.english

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already signal read-only, idempotent, and non-destructive behavior. The description adds useful behavioral detail by listing the exact evidence reported (printable ratio, English word hits, chi-squared, index of coincidence) and the verdict-plus-reason output, going beyond what the annotations alone convey.

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 front-loaded with the core purpose, then delivers a compact list of reported evidence and a practical use case. Every sentence contributes either purpose, output clarity, or usage guidance, with no filler.

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 no output schema, the description sufficiently covers return content by naming the evidence fields and the verdict/reason. It also provides the key context for when this tool is useful, while the schema and annotations cover parameter constraints and safety. Nothing essential for selecting or invoking the tool is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains that 'input' is the candidate and 'language' selects the English model. The description reinforces the notion of a candidate and mentions English, but adds no parameter-level detail beyond what the schema provides; 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?

States a specific action ('Decide whether a candidate is plaintext') and a concrete resource/output (verdict plus deciding evidence). It also distinguishes itself from CyberChef operations by explaining that they expose statistics, not the verdict, which differentiates it from siblings like cyberchef_entropy_scan.

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?

Gives clear context: it is the stopping condition when peeling layers off unknown data by hand, and positions the tool as the judgement an automatic-decoding search needs. It does not explicitly name sibling alternatives or state when not to use it, so it falls short of a 5.

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

cyberchef_quota_infoA
Read-onlyIdempotent

Get current resource quota information including concurrent operations and data sizes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the useful context that the information is 'current' and includes concurrent operations and data sizes, but it does not describe the output shape or any refresh/accuracy behavior. With annotations carrying the main burden, this is acceptable 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 one tight, front-loaded sentence: 'Get current resource quota information' immediately conveys the action and subject, and 'including concurrent operations and data sizes' adds valuable scope without unnecessary words.

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 no-parameter, read-only info tool, the description plus annotations are nearly sufficient for an agent to call it correctly. The only notable gaps are the lack of explicit usage guidance relative to similar stats tools and the absence of any indication about return format, but the tool is simple enough that these are minor rather than blocking.

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 and the schema is empty, so there is nothing for the description to clarify. Schema description coverage is effectively 100%, and the baseline for zero-parameter tools applies. The description adds no parameter-specific meaning, but none 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 states a specific action ('Get'), a distinct resource ('resource quota information'), and the content scope ('concurrent operations and data sizes'). It clearly identifies what the tool does and separates it from cache/stats/worker sibling tools by naming the quota resource.

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 only implies when to use this tool: when current quota information is needed. It does not explicitly say when to prefer it over related tools like worker_stats or cache_stats, nor does it mention any exclusions. For a zero-parameter read tool this is minimally adequate but leaves the agent to infer context.

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

cyberchef_recipe_createC

Create a new recipe with multiple operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRecipe name
tagsNoRecipe tags
authorNoAuthor email
metadataNo
operationsYesList of operations
descriptionNoRecipe description

TDQS

C2.9/5.0
Behavior2/5

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

The annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false) establish that this is a non-idempotent write that does not destroy data, and the description's 'Create' verb is consistent with that. However, beyond confirming the write, the description discloses no behavioral context: it does not say what happens on duplicate names, whether the recipe is persisted server-side, whether operations are validated at creation time, or what the agent should expect in return. With idempotentHint=false, duplicate-handling behavior is especially relevant and is left entirely unaddressed.

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 seven-word sentence with the verb front-loaded and zero filler. It is efficiently structured and immediately readable. However, it is arguably thinner than the tool's complexity warrants, which slightly undercuts the 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?

This is a mutation tool with 6 parameters, nested objects, no output schema, and 39 siblings including 9 recipe-* tools, yet the description provides only one sentence. With no output schema, the agent cannot infer the return value or success indicators, and the description does not cover them. Missing context around duplicate handling, validation behavior, and relationship to recipe_validate/recipe_test/recipe_import leaves the description incomplete for correct invocation.

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 83%, above the 80% threshold, so the schema carries most of the parameter documentation (name, tags, author, operations, description all have descriptions). The description's 'multiple operations' merely echoes the schema's 'List of operations' field and adds no new semantics. The few uncovered details, such as the inner metadata fields (category, complexity, estimatedTime) and the args/recipe structure inside operations items, are not compensated for by the description, keeping this at baseline.

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 states a specific verb ('Create') and resource ('a new recipe'), and the phrase 'with multiple operations' adds a scoping detail that aligns with the required operations parameter. It is clearly distinguishable from siblings like recipe_delete, recipe_get, and recipe_update by the create verb, though it does not explicitly name or differentiate from recipe_import, which could also be used to bring recipes in.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the many recipe-related siblings (recipe_validate, recipe_test, recipe_import, recipe_update). An agent gets no hints about workflow ordering, such as whether to validate operations before creating, or which sibling handles modifications to an existing recipe. Nothing in the description establishes selection criteria among alternatives.

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

cyberchef_recipe_deleteB
DestructiveIdempotent

Delete a recipe by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecipe UUID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the agent knows this operation mutates and can be repeated. The description adds no extra behavioral context beyond what the annotations provide, such as whether deletion is permanent, whether related data is affected, or whether authorization is required. Because the annotation already carries the core safety signal, the description is adequate but not enriched.

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 one short sentence that states the operation and parameter without waste. It is front-loaded and easily scanned. It could earn a 5 only by adding a bit more practical context, but for its brevity it is efficiently structured.

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 that there is no output schema and this is a destructive operation, the description could usefully mention what the response looks like (e.g., success confirmation or deleted recipe) or any non-obvious behavior such as idempotent deletion of an already-missing recipe. The annotations cover the destructive and idempotent nature partially, but the description itself is minimal. It is adequate for a simple one-parameter delete but leaves room for more complete 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?

The input schema covers the single parameter (id) with a format and pattern, and the schema description coverage is 100%, so the schema does the heavy lifting. The description only says 'by ID' and does not add anything concrete about the semantics of id beyond what the schema already states. Baseline 3 is appropriate.

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 'Delete a recipe by ID' uses a specific verb ('Delete') and names the resource ('recipe') and the identifying parameter ('ID'). It is clear at a glance which operation is performed and on what entity, and the presence of sibling tools like cyberchef_recipe_get, cyberchef_recipe_create, and cyberchef_recipe_update makes this description sufficiently distinct as the deletion counterpart.

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 use when a recipe should be removed by its UUID, but it does not explicitly state when to use it versus alternatives or mention any restrictions or side effects such as whether the deletion is permanent or cascades. There is no explicit when-not-to-use guidance, so an agent is left to infer the usage context from the verb and resource.

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

cyberchef_recipe_executeC
Destructive

Execute a saved recipe with input data.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecipe UUID
inputYesInput data to process

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true, readOnlyHint=false, and idempotentHint=false, and the description adds no behavioral context beyond them. It does not disclose side effects, whether input is irreversibly transformed, quota consumption, or what 'execute' entails — all relevant given the destructive flag. There is no contradiction with the annotations, but the description contributes no additional transparency.

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 eight-word sentence with the verb front-loaded and zero filler words. It is efficient and scannable, though slightly under-sized for a tool carrying a destructive flag and a near-identical sibling.

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?

There is no output schema, so the description should convey what the call returns on success, but it is silent on that. With destructiveHint=true and a large sibling set that includes cyberchef_bake and cyberchef_recipe_test, the description is too thin for an agent to invoke it confidently without external knowledge.

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%: the schema already documents 'id' as 'Recipe UUID' and 'input' as 'Input data to process'. The description's phrase 'with input data' merely restates the schema, so it adds no parameter-level meaning; the high-coverage baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb (Execute) and resource (a saved recipe) along with the input payload, making the core action unambiguous. The qualifier 'saved' distinguishes it from recipe-management siblings like cyberchef_recipe_create/get/delete, but it does not explicitly differentiate it from the close sibling cyberchef_bake, so the distinction is implied rather than stated.

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 gives no when-to-use guidance, exclusions, or mention of alternatives. An agent cannot tell from this text whether to choose cyberchef_recipe_execute or cyberchef_bake (or cyberchef_recipe_test), since the selection criteria between saved-recipe execution and inline baking are never stated.

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

cyberchef_recipe_exportA
Read-onlyIdempotent

Export a recipe to various formats (json, yaml, url, cyberchef).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecipe UUID
formatYesExport format

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds little beyond the format list and does not disclose what the export returns or whether it has side effects, though no contradiction exists.

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, direct sentence with no filler or redundancy. It immediately communicates the action, target, and supported formats.

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 read-only export operation, the description and schema cover the necessary inputs, and annotations cover the safety profile. However, there is no output schema and no note describing whether the export returns file contents, a URL, or another representation, which leaves a meaningful gap for agents using the result.

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 'id' described as 'Recipe UUID' and 'format' as 'Export format' with a full enum. The description's format list largely restates the enum, adding no significant new 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 states a specific verb ('Export'), a specific resource ('a recipe'), and enumerates the target formats (json, yaml, url, cyberchef). This clearly distinguishes the tool from siblings like cyberchef_recipe_import and cyberchef_recipe_get.

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 purpose is clear, but the description does not explicitly say when to use this tool versus alternatives such as recipe_get or recipe_import. The word 'Export' implies its niche, but no exclusions or alternative references are provided.

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

cyberchef_recipe_getA
Read-onlyIdempotent

Get a recipe by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecipe UUID

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds no further behavioral details such as not-found behavior, response shape, or permission requirements, but it does not contradict the annotations.

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

Conciseness5/5

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

The description is a single clear sentence with no filler or redundant wording. Every word contributes to the basic purpose of the tool.

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?

This is a simple one-parameter read-only getter, and the schema plus annotations cover most invocation needs. The absence of an output schema and any mention of what fields the returned recipe contains is a minor gap, but not enough to make the description inadequate.

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 single parameter 'id' is already described as 'Recipe UUID' with a UUID format and pattern. The description does not add meaningful parameter information beyond what the schema already provides.

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 ('Get'), the resource ('a recipe'), and the identifying mechanism ('by ID'). It is distinguishable from recipe_list and recipe_create, but it does not explicitly differentiate itself from recipe_export or recipe_execute.

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 phrase 'by ID' implies this tool should be used when the agent already has a recipe UUID and wants the stored recipe. However, no alternative tools are mentioned and no explicit when-to-use or when-not-to-use guidance is given.

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

cyberchef_recipe_importB

Import a recipe from various formats.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesRecipe data to import
formatYesImport format

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already communicate that this is a non-destructive, state-changing operation, so the description does not need to restate that. It adds the fact that the recipe can come from external formats, but it does not disclose whether the import creates a new recipe, overwrites an existing one, or validates input first.

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 front-loaded sentence with no filler, making it concise and easy to scan. It is slightly too terse to carry meaningful selection guidance, but structurally it 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 two-parameter tool with a fully descriptive schema and enum, the minimal description plus schema is enough for an agent to construct a valid call. However, the lack of mention of the import's effect or return value keeps it at only a minimum-viable level, especially with no output schema.

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 both parameters with descriptions and an enum for format, so the schema does the heavy lifting. The description's 'various formats' adds no 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.

Purpose4/5

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

The description clearly names the action ('Import') and the target resource ('a recipe'), and 'from various formats' conveys the operation's scope. It does not explicitly differentiate from sibling tools like recipe_create or recipe_export, so it is clear but not sharply distinguished.

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

Usage Guidelines2/5

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

There is no guidance about when to choose import over alternatives such as recipe_create, recipe_export, or recipe_validate. 'From various formats' implies existing serialized recipe data, but the description never states exclusions or when to use a different sibling tool.

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

cyberchef_recipe_listB
Read-onlyIdempotent

List all recipes with optional filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter by tag
limitNoMaximum results
offsetNoPagination offset
searchNoSearch in name/description
categoryNoFilter by category

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful scoping context by stating it lists all recipes with optional filtering, but it does not disclose pagination defaults, response shape, or ordering 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 a single concise sentence with no filler. The primary action, 'List all recipes', is front-loaded and the filtering detail is relevant.

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 schema documents all five optional parameters and the annotations cover read-only and non-destructive behavior. However, with no output schema, the description does not clarify what a returned recipe entry looks like, whether results are paginated by default, or what ordering is applied. This is minimally adequate but leaves some operational ambiguity.

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% description coverage, with parameters like 'Filter by tag', 'Maximum results', and 'Pagination offset' already self-explanatory. The tool description's mention of optional filtering adds no meaningful semantics beyond the schema, so the baseline score of 3 applies.

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

Purpose4/5

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

The description uses the concrete verb 'List' and identifies the resource 'recipes', while also noting optional filtering. It is clear, but it does not explicitly distinguish this tool from sibling tools like cyberchef_recipe_get or cyberchef_list_operations.

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 given about when to use this tool instead of alternatives such as cyberchef_search, cyberchef_recipe_get, or cyberchef_list_operations. The phrase 'optional filtering' implies some use cases, but the description lacks explicit when-to-use or when-not-to-use guidance.

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

cyberchef_recipe_testB
Read-onlyIdempotent

Test a recipe with sample inputs.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipeYesRecipe to test
testInputsYesArray of test inputs

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description is not required to restate those. The description adds the basic behavior that the tool runs a test with sample inputs, which is already clear from the name and schema. It does not disclose anything beyond that, such as what 'testing' does differently from executing, what the result payload contains, or side effects like caching. That is acceptable given annotations but not richly transparent.

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 short sentence: 'Test a recipe with sample inputs.' There is no wasted wording, and the core action and object are front-loaded. It could earn a 5 if it also gave a one-line usage hint, but as written it is concise and structured enough for quick parsing.

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 read-only, idempotent tool with full schema coverage and no output schema, the description is minimally sufficient. However, it lacks contextual completeness in one important respect: given sibling names like cyberchef_recipe_validate, cyberchef_bake, and cyberchef_recipe_execute, an agent might not understand what 'test' uniquely offers. The description does not clarify the expected outcome of a test or how it differs from validation/execution, so the tool's role in the larger toolkit is 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 the schema already documents recipe and testInputs as an object containing a name and operations array and an array of test values. The description adds minimal semantic value beyond 'sample inputs' as the purpose of testInputs. It does not explain the nested operation structure, the meaning of args, or constraints on test inputs, but the schema already carries that burden. Baseline 3 is appropriate.

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 'Test a recipe with sample inputs' states a specific verb ('test') and resource ('recipe'), and the parameter names (recipe, testInputs) reinforce that this tool validates a recipe against sample inputs. While it is reasonably clear, it does not explicitly contrast itself with sibling tools like cyberchef_validate or cyberchef_bake, so it gets a 4 rather than a 5.

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: use this tool when you have a recipe and sample inputs and want to test whether the recipe produces expected results. However, it does not explicitly say when to prefer this over cyberchef_recipe_validate (validation of recipe structure) or cyberchef_bake (executing a recipe against data). It gives no 'use X instead' guidance, so it is adequate but lacks explicit routing.

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

cyberchef_recipe_updateC
DestructiveIdempotent

Update an existing recipe.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecipe UUID
nameNoNew recipe name
tagsNoNew tags
metadataNo
operationsNoNew operations
descriptionNoNew description

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true, idempotentHint=true, and readOnlyHint=false, but the description adds no behavioral context beyond the generic word 'Update.' It does not disclose whether this is a partial update (only provided fields change) or a full replacement, what data may be overwritten, or any side effects. With a destructive tool and no additional behavioral disclosure, the description underperforms.

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

Conciseness3/5

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

The description is a single short sentence with no waste, but it is under-specified for a tool with six parameters and nested objects. It is concise without being informative. Other similarly short descriptions that listed updatable fields have been graded slightly higher because they front-load useful content.

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 six parameters, nested objects, a destructive annotation, and no output schema, the description is far too thin. It does not explain update semantics, which fields can change, whether partial updates are supported, or anything about expected behavior after invocation. An agent would need to rely entirely on the schema and annotations.

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 83%, and the schema already documents parameters such as id, name, tags, metadata, operations, and description. The description itself adds no parameter meaning, but the high schema coverage means the baseline applies. No compensation is needed, though the description could have noted that only supplied optional fields are updated.

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 uses a specific verb and resource: 'Update an existing recipe.' It clearly identifies the tool as a modification operation on a recipe, and 'existing' subtly distinguishes it from create and delete siblings. However, it does not explicitly name sibling tools or state the scope of what can be updated, so it falls short of full differentiation.

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 gives no indication of when to use this tool versus alternatives like cyberchef_recipe_create, cyberchef_recipe_delete, or cyberchef_recipe_get. There are no exclusions, prerequisites, or context about why an agent would choose this update tool over related recipe operations.

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

cyberchef_recipe_validateB
Read-onlyIdempotent

Validate a recipe without saving it.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipeYesRecipe to validate

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety burden is covered. The description adds the no-save behavior, which is useful, but says nothing about what 'validate' returns or how it signals failure, so some behavioral context is missing.

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

Conciseness5/5

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

A single sentence that front-loads the verb and resource, with no filler or duplicated schema information. Every phrase earns its place.

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?

For a validation tool with no output schema, the description does not explain validation behavior (syntax only vs. deep operation/arg validation), error signaling, or whether the recipe is normalized/reported. The nested recipe structure and many sibling tools increase the need for more 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?

The schema has 100% description coverage, including the recipe property marked as 'Recipe to validate', so the description doesn't need to restate parameter meaning. It adds no operational detail about the nested operations/args structure, but baseline 3 is appropriate since schema handles the heavy lifting.

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

Purpose4/5

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

Uses a specific verb ('validate') and resource ('recipe') and immediately qualifies that no save occurs, which separates it from create/update/execute siblings. It doesn't explicitly distinguish from recipe_test, so not a full 5.

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 phrase 'without saving it' implies use for non-persistent validation, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternative tools like recipe_test or recipe_execute. The usage context is only inferable.

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

cyberchef_rsa_attackA
Read-onlyIdempotent

Test an RSA public key for the generation flaws that make it breakable, and recover the private key when one applies: trial division, Fermat (primes too close), shared factors between two moduli, Wiener (private exponent too small), Pollard's rho (one prime too short), Pollard's p-1 (a prime whose predecessor is smooth) and unpadded small-e. None threatens a correctly generated key — a sound 2048-bit modulus defeats all of them — so a negative result is evidence the key is not weak in these specific ways, and not that it is strong. Decrypts a supplied ciphertext when the key is recovered.

ParametersJSON Schema
NameRequiredDescriptionDefault
attacksNoWhich attacks to try. All of them by default, which costs up to 35 seconds of wall clock on a key none of them breaks — the four time-budgeted searches run sequentially, and a soundly generated modulus is exactly the case that reaches all four. Name the ones you want if your client has a shorter per-call timeout. `small_factors` is trial division and costs nothing; `pollard_rho` finds a short prime; `pollard_pm1` finds a prime whose predecessor is smooth.
modulusYesThe modulus n, as decimal or hex.
pm1_boundNoSmoothness bound for pollard_pm1. Higher finds primes whose p-1 has a larger factor, and takes proportionally longer.
ciphertextNoOptional. Decrypted if the private key is recovered.
other_modulusNoA second modulus, to test for a shared prime factor. Breaks both keys if one exists.
public_exponentNoThe public exponent e.65537
fermat_iterationsNoBound on the Fermat search. Higher finds primes that are further apart, and takes longer.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the definition discloses real execution behavior: the attacks parameter warns that the full run 'costs up to 35 seconds of wall clock' because the four time-budgeted searches run sequentially on unbreakable keys. It also surfaces the outcome semantics — decrypting a supplied ciphertext when a key is recovered — and the epistemic limitation of negative results. The readOnlyHint is consistent since the tool only computes from its inputs and never mutates external state.

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?

Three sentences, with the core action and resource front-loaded and the negative-result caveat and decryption capability each earning their place. The first sentence is long because it enumerates all seven attacks with parenthetical explanations that partly duplicate the schema's attacks parameter, a minor redundancy that prevents a 5.

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 7-parameter crypto tool with no output schema, the definition covers inputs fully (rich schema), the attack space, wall-clock expectations, and outcome semantics (private key recovery, ciphertext decryption). The main gap is that no return-value shape is described, which the absence of an output schema leaves entirely to the agent to discover on first invocation.

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% with detailed per-parameter descriptions, so the baseline is 3. The main description adds semantics beyond the schema by glossing each attack's vulnerability — 'Fermat (primes too close)', 'Wiener (private exponent too small)', 'Pollard's p-1 (a prime whose predecessor is smooth)' — and the attacks parameter contributes operational meaning through sequential-timing and cost guidance. That genuine added value lifts it to a 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 states specific verbs — 'Test', 'recover', 'Decrypts' — against a concrete resource (an RSA public key) and enumerates the seven distinct attack modes (trial division, Fermat, shared factors, Wiener, Pollard's rho, Pollard's p-1, small-e). This makes the tool's scope unmistakable and distinguishes it from crypto-adjacent siblings like cyberchef_rsa_multi_key and cyberchef_hash_crack without needing to open their schemas.

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 gives clear when-to-use context: probe a key for generation flaws that make it breakable. It also frames the interpretive limits explicitly — a negative result is 'evidence the key is not weak in these specific ways, and not that it is strong' — and the attacks parameter advises naming specific attacks when the client has a shorter per-call timeout. It stops short of naming alternative tools or explicit when-not-to-use conditions, which keeps it at a 4.

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

cyberchef_rsa_multi_keyA
Read-onlyIdempotent

Attack a SET of RSA keys, or several ciphertexts under one key, for leaks no single key shows: shared primes across a corpus in near-linear time (batch GCD), one message sent twice under one modulus with two exponents (common modulus), one message broadcast under a small exponent (Håstad), and two ciphertexts related by a known linear relation (Franklin–Reiter). Three of the four recover the message without factoring anything. Use rsa_attack for a single key.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYesThe keys to attack together. Two suffice for common_modulus and franklin_reiter; Håstad needs at least e; batch_gcd wants as many as you have.
attacksNoWhich attacks to try. All of the applicable ones by default.
relation_aNoFor franklin_reiter: the multiplier in m1 = a*m2 + b. The relation must be KNOWN.1
relation_bNoFor franklin_reiter: the offset in m1 = a*m2 + b.1

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations, notably that three of the four attacks recover the message without factoring anything, which sets expectations for what the tool achieves.

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 dense but efficient, packing the purpose, all four attacks, and the sibling pointer into a compact form. It is slightly long as a single sentence but every clause adds useful 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?

For a complex multi-key cryptanalysis tool, the description covers the main use cases, attack conditions, and the single-key alternative. It does not describe output format, but given the absence of an output schema and the rich input schema, the description is sufficiently complete for an agent to invoke it correctly.

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%, but the description still adds meaning beyond the parameter names. It explains the franklin_reiter relation parameters as m1 = a*m2 + b and emphasizes that the relation must be known, which is crucial for correct use.

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 opens with a specific verb ('Attack a SET of RSA keys') and clearly defines the resource and scope. It distinguishes itself from its sibling by naming the single-key alternative, rsa_attack, and explaining that this tool handles multi-key scenarios.

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

Usage Guidelines5/5

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

It explicitly states when to use this tool: for a set of keys or multiple ciphertexts under one key, versus rsa_attack for a single key. It also lists the conditions for each attack type, making selection among the four attacks straightforward.

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

cyberchef_substitution_breakA
Read-only

Recover a monoalphabetic substitution mapping from ciphertext alone, by hill-climbing on English trigram fitness with random restarts. Substitute needs the mapping and no operation finds one. Also solves Caesar, ROT-N and Atbash. Measured on held-out prose: 83.6% of letters at 150, 91.2% at 250, 95.9% at 350 — so expect one or two letter pairs still swapped. Pin what you can read with known_mapping and run it again.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoMake the search reproducible. Unset is non-deterministic, which is the right default: a fixed seed that lands in a bad local optimum lands there every time.
inputYesThe ciphertext. Non-letters are ignored and restored in the output.
restartsNoIndependent hill climbs. More is better and slower; the measured figures used 120. Bounded by a 20-second wall clock.
known_mappingNoLetters you already know, as comma-separated `cipher:plain` pairs, e.g. "q:t,w:h". Held fixed and never swapped.
preview_lettersNoHow much decrypted text to return. 0 for none.

TDQS

A4.6/5.0
Behavior5/5

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

Discloses stochastic hill-climbing with random restarts, non-deterministic behavior, benchmark success rates (83.6/91.2/95.9%), and the practical failure mode that a few letter pairs may remain swapped. It also provides the remediation (pass `known_mapping` and rerun). These details go well beyond the readOnly/non-destructive annotations and reveal the search is not guaranteed-exact.

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?

Four sentences with no filler: purpose and method, alternative rationale, error-rate expectations, and a concrete follow-up instruction. The main action and scope are front-loaded, and each remaining sentence carries operational 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 non-deterministic cryptanalysis tool with five parameters and no output schema, the definition supplies the key behavioral context: domain (English prose), expected accuracy, and how to improve results. The only notable gap is that the return shape (what parts are the recovered mapping vs. the decrypted preview) is not stated explicitly, though `preview_letters`' schema hint partially covers it.

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?

All five parameters already have detailed schema descriptions (100% coverage), so the bar for description contributions is lower. The description still adds meaningful input-length/accuracy expectations via the benchmark figures and offers a concrete usage strategy for `known_mapping`. It appropriately relies on the schema for `seed`, `restarts`, and `preview_letters` rather than restating them.

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

Purpose5/5

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

States a specific action ('Recover a monoalphabetic substitution mapping') with the method (hill-climbing on English trigram fitness with random restarts), and scopes the cipher families covered ('Also solves Caesar, ROT-N and Atbash'). It also distinguishes itself from `Substitute` by noting that no operation finds a mapping. Readily distinguishable from siblings such as `vigenere_break`.

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?

Clearly tells the agent to use this when the mapping is unknown: 'Substitute needs the mapping and no operation finds one.' It also gives a repair workflow: pin known letters with `known_mapping` and run again. It stops short of explicitly routing away from the near-sibling `vigenere_break` for polyalphabetic ciphers, though 'monoalphabetic' implies the boundary.

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

cyberchef_telemetry_exportB
Read-onlyIdempotent

Export collected telemetry metrics. Returns anonymized usage statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoExport formatjson

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds one behavioral detail beyond that: the returned data is anonymized. This is useful context but not extensive; no rate limits, auth requirements, or output-shape caveats are mentioned.

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

Conciseness5/5

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

Two short sentences, both functional: the first states the operation, the second adds the anonymization detail. No fluff, no repetition of the schema, and the core action is 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?

For a tool with one optional parameter, complete schema coverage, and safety annotations, the description is nearly sufficient. It does not explain what the 'json' vs 'summary' formats return, but the schema defines those options. The only meaningful omission is lack of differentiation from sibling stats tools, which is more a usage-guidance gap.

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 the single 'format' parameter 100% with an enum, default, and description. The tool description adds nothing about the parameter, so the schema carries the full weight. This aligns with the baseline for high schema coverage.

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 uses a specific verb ('Export') and resource ('collected telemetry metrics'), and the second sentence clarifies what the result is ('anonymized usage statistics'). This clearly distinguishes it from the many baking/recipe tools in the sibling list, though it does not explicitly contrast with the other stats-like tools (e.g., cyberchef_worker_stats, cyberchef_cache_stats).

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 states only what the tool does and gives no guidance about when to use it versus alternatives. There is no mention of scenarios, exclusions, or a preferred sibling for similar telemetry/stats needs, leaving the agent to infer usage from the name alone.

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

cyberchef_timestamp_identifyA
Read-onlyIdempotent

Given a number that might be a time, rank every format it could plausibly be — the step before CyberChef's date operations, which all need you to know the format already. Covers Unix at four resolutions, FILETIME, Chrome/WebKit, .NET ticks, UUIDv1, OLE Automation and Delphi, HFS+, Cocoa and GPS, and takes a v1 UUID directly. Always a ranked list: one 64-bit integer is a valid FILETIME, Cocoa date and nanosecond count at once, so a single confident answer would be wrong by construction.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe number, as decimal, hex, or a version-1 UUID.
show_allNoInclude interpretations outside the window, when the window is what is wrong.
plausible_toNoLatest such date.2040-01-01
plausible_fromNoEarliest date a result may have and still be called plausible, as YYYY-MM-DD.1990-01-01

TDQS

A4.4/5.0
Behavior5/5

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

The description reveals a key behavioral trait beyond the read-only annotations: results are always a ranked list because a single 64-bit integer can validly represent multiple formats. It also enumerates the format coverage, giving the agent realistic expectations about scope and ambiguity.

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 compact and front-loaded: it states the core purpose in the first sentence, provides format scope in the second, and explains a non-obvious output guarantee in the third. Every sentence contributes useful information without 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 tool with no output schema, it explains the ranked-list output and why that design is necessary, which is valuable. It does not fully describe the exact shape of each ranked result or the role of the plausible_from/plausible_to window, but the schema covers those parameters and the overall behavior is sufficiently clear.

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 already documents all four parameters, so the baseline is 3. The description adds little parameter-level detail beyond restating that it accepts a decimal, hex, or v1 UUID, which duplicates the schema's 'value' description.

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 uses a specific verb ('rank') and identifies the resource ('every format it could plausibly be'), making the tool's purpose immediately clear. It also distinguishes itself from CyberChef's date operations by positioning itself as the prerequisite step, which sets it apart from sibling tools.

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?

It clearly states when to use this tool: before CyberChef's date operations, which require knowing the timestamp format in advance. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough for an agent to infer appropriate usage.

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

cyberchef_vigenere_breakA
Read-onlyIdempotent

Recover a Vigenere key from ciphertext alone. Vigenère Decode requires the key and no operation finds one. The index of coincidence per coset is used as a FILTER, not a judge — every multiple of the true length scores as well or better, which is the standard way this goes wrong — so a shortlist of lengths is solved in full and the plaintext's trigram score decides. Runners-up are reported per position, because a close second is where the answer is wrong. Exact key in 9 of 10 measured cases, and it reported its own failure on the tenth rather than a wrong key.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesThe ciphertext. Non-letters are ignored and restored in the output.
key_lengthNoSkip the search and use this length.
max_key_lengthNoLongest key length to consider.
preview_lettersNoHow much decrypted text to return. 0 for none.

TDQS

A4.7/5.0
Behavior5/5

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

The description goes far beyond the readOnly/idempotent annotations by revealing the algorithm's internal decision logic: the index of coincidence is a filter, not a judge; multiple key lengths are shortlisted; and trigram scoring makes the final decision. It also discloses failure behavior and measured accuracy ('Exact key in 9 of 10 measured cases, and it reported its own failure on the tenth'), which is valuable 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 front-loaded with the core purpose and then provides dense, useful technical detail without any filler. Every sentence earns its place: purpose, differentiation, algorithm rationale, failure behavior, and measured reliability. It is detailed but still appropriately sized for a complex cryptanalysis tool.

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 no output schema, the description compensates by describing key recovery, per-position runners-up, plaintext scoring, and failure signaling. The schema fully documents inputs and preview behavior. Together, they give an agent enough context to select the tool, set parameters, and interpret the result appropriately.

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 all four parameters already carry clear meanings. The description adds algorithm-level context about key-length search behavior, but it does not add new parameter-level semantics beyond what the schema provides. Baseline 3 is appropriate because the schema does the heavy lifting.

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 opens with a specific verb and resource: 'Recover a Vigenere key from ciphertext alone.' It immediately distinguishes this tool from `Vigenère Decode`, which requires the key, and states that no other operation finds one. This makes the tool's unique role clear even among many sibling tools.

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

Usage Guidelines5/5

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

The description explicitly identifies the condition for use — ciphertext-only Vigenere key recovery — and contrasts it with the alternative, `Vigenère Decode`, which cannot be used without a key. It also clarifies the algorithm's intent and what the tool is designed to avoid, giving an agent clear guidance on when this tool is appropriate.

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

cyberchef_worker_statsA
Read-onlyIdempotent

Get worker thread pool statistics including thread count, utilization, and completed tasks. Only available when ENABLE_WORKERS=true.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond annotations by specifying the availability condition (ENABLE_WORKERS=true) and detailing the statistics returned.

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, information-dense sentence. It front-loads the core purpose and then adds the key availability constraint without any redundant filler.

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

Completeness5/5

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

For a zero-parameter, read-only stats tool, the description is complete: it states what the tool does, what data it returns, and the environment flag required. No additional input or safety context is needed given the rich annotations.

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

Parameters4/5

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

The tool has zero parameters, so the description cannot add parameter meaning beyond the schema. With no parameters, the baseline is 4, and the description appropriately focuses on output scope rather than inputs.

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 uses a specific verb ('Get') and a precise resource ('worker thread pool statistics'), listing the exact data returned. This clearly distinguishes it from sibling stats tools like cache_stats and deprecation_stats.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when worker thread pool statistics are needed. It also provides a clear prerequisite and exclusion: the tool is only available when ENABLE_WORKERS=true, signaling not to use it otherwise.

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

cyberchef_xor_key_lengthA
Read-onlyIdempotent

Recover the key length of a repeating-key XOR by three independent statistics — index of coincidence, autocorrelation and Kasiski — then score every candidate key byte per column against English and decrypt. Reports what each method concluded, so a disagreement is visible rather than averaged away. CyberChef's XOR Brute Force stops at a two-byte key. Measured over 72 cases: the exact length in 60%, and the length or a multiple of it — which still decrypts — in 96%. Least reliable on short inputs and on plaintext with its own strong period.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesThe ciphertext. At most 1 MB.
candidatesNoHow many ranked candidates to report.
input_formatNoHow `input` is encoded. Raw treats it as latin1 bytes.Raw
preview_bytesNoHow much decrypted output to return. 0 for none.
max_key_lengthNoLongest key length to consider.
assumed_common_byteNoAssume this is the most common plaintext byte in every column (32 for text) and take each column's most common ciphertext byte to be it. Unset, every candidate key byte is scored against English instead, which needs no assumption.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly and idempotent annotations, the description discloses meaningful behavior: it uses three independent statistics, reports disagreements rather than averaging them away, and decrypts. It also provides measured success rates and known limitations, giving an agent realistic expectations about output quality.

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?

Four dense sentences cover function, methodology, output behavior, differentiation, and limitations without wasted words. The core purpose is front-loaded, and every sentence adds information useful for selecting and invoking the tool.

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 complex crypto-analysis tool with no output schema, the description covers method, output behavior, success rates, and limitations. It could be slightly more explicit about the exact shape of the returned candidates and decrypted preview, but the schema's preview_bytes and candidates parameters plus the description's 'reports what each method concluded' make the behavior sufficiently clear.

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 full, detailed descriptions for all six parameters, including encoding options, defaults, and ranges, so the description does not need to restate them. The description adds little parameter-specific meaning, but baseline 3 is appropriate because the schema already carries the documentation burden.

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 opens with a specific verb and resource: 'Recover the key length of a repeating-key XOR' and explains it also scores key bytes against English and decrypts. It clearly differentiates itself by noting CyberChef's XOR Brute Force stops at a two-byte key, positioning this tool for longer keys.

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 gives useful selection context: CyberChef's XOR Brute Force only handles two-byte keys, implying this tool is for longer repeating-key XOR. It also adds reliability guidance by warning that it is least reliable on short inputs and plaintext with strong periodicity, though it does not explicitly name sibling alternatives or provide a full when-not-to-use list.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev3.8.0
    • Addedcyberchef_cert_chain
  2. 41 tool updatesv3.6.0
    • First observedcyberchef_bake
    • First observedcyberchef_batch
    • First observedcyberchef_cache_clear
    • First observedcyberchef_cache_stats
    • First observedcyberchef_categories
    • First observedcyberchef_classical_cipher
    • First observedcyberchef_corpus_diff
    • First observedcyberchef_crib_drag
    • First observedcyberchef_cyclic_pattern
    • First observedcyberchef_deprecation_stats
    • First observedcyberchef_describe_operation
    • First observedcyberchef_ecdsa_recover
    • First observedcyberchef_entropy_scan
    • First observedcyberchef_hash_crack
    • First observedcyberchef_hash_identify
    • First observedcyberchef_hash_statistics
    • First observedcyberchef_jwt_weakness
    • First observedcyberchef_list_operations
    • First observedcyberchef_magic
    • First observedcyberchef_migration_preview
    • First observedcyberchef_plaintext_check
    • First observedcyberchef_quota_info
    • First observedcyberchef_recipe_create
    • First observedcyberchef_recipe_delete
    • First observedcyberchef_recipe_execute
    • First observedcyberchef_recipe_export
    • First observedcyberchef_recipe_get
    • First observedcyberchef_recipe_import
    • First observedcyberchef_recipe_list
    • First observedcyberchef_recipe_test
    • First observedcyberchef_recipe_update
    • First observedcyberchef_recipe_validate
    • First observedcyberchef_rsa_attack
    • First observedcyberchef_rsa_multi_key
    • First observedcyberchef_search
    • First observedcyberchef_substitution_break
    • First observedcyberchef_telemetry_export
    • First observedcyberchef_timestamp_identify
    • First observedcyberchef_vigenere_break
    • First observedcyberchef_worker_stats
    • First observedcyberchef_xor_key_length

TDQS

A3.5/5.0
Disambiguation4/5

Most tools target a distinct task and the descriptions are unusually specific, so bake/batch/recipe_execute and the operation-navigation tools can be told apart despite overlapping execution semantics. The main ambiguity is around the three execution entry points—bake, batch, and recipe_execute—which could lead an agent to pick the wrong one for a simple 'run a recipe' request.

Naming Consistency3/5

All names share the cyberchef_ prefix and use snake_case, and the recipe_* tools form a clear group, but the word order is inconsistent: some are verb_noun like list_operations and describe_operation, while others are noun_verb like recipe_create, cache_clear, and timestamp_identify. Bare names like bake, batch, search, and magic also break the pattern, making the set readable but not predictably consistent.

Tool Count2/5

At 41 tools, this is well above the range an agent can keep in mind, and many specialized cryptanalysis helpers could have been consolidated into fewer general analysis tools. Even though CyberChef is a broad domain, a 41-tool MCP surface feels heavy and harder to navigate.

Completeness5/5

The set covers the full recipe lifecycle—create, get, update, delete, list, validate, test, import, export, and execute—and provides complete operation discovery and execution via bake, batch, search, categories, list_operations, and describe_operation. It also includes infrastructure tools and a broad cryptanalysis suite, so there are no obvious dead ends for the stated CyberChef purpose.

Maintenance

ActivityActive
ResponsivenessSlow

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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to discover, execute, and validate CyberChef operations for data encoding, decoding, encryption, and transformation tasks. Provides structured access to CyberChef's extensive catalog of data manipulation tools through natural language interactions.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to autonomously execute over 200 open-source penetration testing tools via MCP, including reconnaissance, web exploitation, and brute-forcing, through a unified server architecture with Docker sandboxing for safe execution.
    52
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to perform defensive security tasks such as vulnerability detection, CVE lookup, phishing/link safety checks, and security report generation via MCP tools.
    23
    -

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/doublegate/CyberChef-MCP'

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