Esquie
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Esquiedecode hex 48656c6c6f to ASCII"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Esquie
MCP server providing computation, encoding, and note-taking tools for AI-assisted reverse engineering. Designed to complement disassembler-specific MCP servers (IDA Pro, Ghidra, Binary Ninja) by handling the ad-hoc computation side of RE work: struct unpacking, address math, crypto checks, encoding/decoding, and arbitrary Python scripting.
Renamed from
re-helper-toolsin 0.3.0. Existing users should remove the old image/container:docker rmi re-helper-sandbox:latest && docker rm -f re-helper-sandbox.
Prerequisites
Node.js 20 or later
npm (included with Node.js)
Docker Desktop or Docker Engine — must be running before using
python_eval
Verify your environment:
node --version # v20.x or later
docker info # should print server info without errorsRelated MCP server: re-mcp
Quick Start
# Clone and enter the project
git clone <repo-url> && cd esquie
# Install dependencies and compile TypeScript
npm install
npm run build
# Build the Python sandbox Docker image (~1-2 min on first run)
docker build -t esquie-sandbox:latest .The Docker image is also built automatically on the first
python_evalcall if it doesn't exist, but pre-building avoids a delay during your first session.
MCP Configuration
Claude Code
Add to your project's .mcp.json or ~/.claude.json under mcpServers:
{
"mcpServers": {
"esquie": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/absolute/path/to/esquie"
}
}
}cwd must point to the project root so the server can locate the Dockerfile for auto-building the sandbox image.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"esquie": {
"command": "node",
"args": ["/absolute/path/to/esquie/dist/index.js"],
"cwd": "/absolute/path/to/esquie"
}
}
}Tools Reference
python_eval
Execute arbitrary Python in a sandboxed Docker container. Session state (variables, imports, function definitions) persists across calls within the same server session.
Parameter | Type | Required | Description |
| string | yes | Python code to execute |
| number | no | Timeout in ms (default: 30000) |
Pre-installed packages: capstone, lief, pycryptodome, dill. To add packages, build a custom image extending esquie-sandbox:latest and point the server at it via ESQUIE_SANDBOX_IMAGE (see Extending the sandbox). Network is disabled inside the container by design, so pip install from python_eval is not possible.
Examples:
# Expression — result is returned automatically
0x401000 + 0x1a4
# → 4198564
# State persists across calls
from capstone import *
md = Cs(CS_ARCH_X86, CS_MODE_64)
# Subsequent call can use `md`
for insn in md.disasm(b"\x55\x48\x89\xe5", 0x1000):
print(f"0x{insn.address:x}: {insn.mnemonic} {insn.op_str}")
# → 0x1000: push rbp
# → 0x1001: mov rbp, rspHex/Binary Utilities
Native TypeScript tools — no Docker overhead, instant response.
Tool | Parameters | Description | Example |
|
| Hex to decimal (BigInt-safe) |
|
|
| Decimal to hex (BigInt-safe) |
|
|
| Hex bytes to UTF-8 text |
|
|
| UTF-8 text to hex bytes |
|
|
| XOR two buffers (shorter repeats) |
|
|
| MD5/SHA1/SHA256 digest |
|
|
| Find byte pattern offsets ( |
|
|
| Base64 encode (utf8 or hex input) |
|
|
| Base64 decode (utf8 or hex output) |
|
All hex parameters accept optional 0x prefix and ignore whitespace.
Sandbox Management
Tool | Parameters | Description |
| (none) | Destroy the container and clear all session state. Next |
|
| Upload a file (base64-encoded) into |
| (none) |
|
|
| Read |
Scratchpad
Key-value store for persisting analysis notes, renamed symbols, struct definitions, and other context. By default in-memory only (cleared on server restart). Set ESQUIE_NOTES_FILE to an absolute file path to persist notes to disk.
Tool | Parameters | Description |
|
| Store or overwrite a note |
|
| Retrieve a note by key |
| (none) | List all notes as JSON |
|
| Remove a note |
Notes are also exposed as MCP resources under note://{key} URIs, so MCP clients that support resources can browse and reference them directly.
Sandbox Security Model
The python_eval container runs with multiple layers of isolation:
Constraint | Effect |
| No network access — cannot exfiltrate data or download payloads |
| Hard memory limit prevents runaway allocations |
| Capped at 1 CPU core |
| Prevents fork bombs |
| All Linux capabilities dropped — zero effective/permitted/inheritable caps |
| Shared memory restricted from default 64MB |
| Filesystem is immutable — only |
| Ephemeral writable scratch space, capped at 100MB |
| Non-root user (uid 1000) inside the container |
| Prevents privilege escalation via setuid/setgid binaries |
Per-call timeout | Default 30s, configurable — kills exec on expiry |
Output truncation | stdout/stderr capped at 100KB to prevent context flooding |
Idle auto-expiry | Container destroyed after 30min of inactivity (configurable) |
Upload/download size cap | 10MB per call to bound exfil-via-roundtrip risk |
Read-only host mount | When |
Architecture
Claude Code / Claude Desktop
│
│ stdio (JSON-RPC)
▼
┌─────────────────────────┐
│ MCP Server (Node.js) │
│ │
│ ┌───────────────────┐ │
│ │ hex-utils.ts │──┼── hex_to_dec, xor_buffers, hash, ...
│ │ (native TS) │ │
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ scratchpad.ts │──┼── set_note, get_note, list_notes, ...
│ │ (Map + opt. JSON) │──┼── MCP resources: note://{key}
│ └───────────────────┘ │
│ ┌───────────────────┐ │
│ │ python-eval.ts │──┼── python_eval, reset_sandbox,
│ │ (5 MCP tools) │ │ upload/list/download_from_sandbox
│ └─────────┬─────────┘ │
│ │ calls │
│ ▼ │
│ ┌─────────┴─────────┐ │ ┌───────────────────────────────┐
│ │ sandbox.ts │──┼──────►│ Docker Container │
│ │ (Docker lifecycle)│ │ │ (esquie-sandbox:latest) │
│ └───────────────────┘ │ │ │
│ │ │ python3 /opt/runner.py │
│ │ │ ├─ loads session from pkl │
│ │ │ ├─ exec(code) in namespace │
│ │ │ └─ saves session to pkl │
└─────────────────────────┘ └───────────────────────────────┘Lazy init: Container is created on the first
python_evalcall and kept alive for the session.Session persistence: Python variables survive across calls via
dillserialization to/tmp/session.pklinside the container.Auto-expiry: Container is automatically destroyed after 30 minutes of idle time (configurable via
ESQUIE_SANDBOX_IDLE_TIMEOUT).Cleanup: Container is stopped and removed on server shutdown (SIGINT/SIGTERM).
Configuration
Resource limits and timeouts are configured via environment variables:
Variable | Default | Description |
|
| Memory limit in MB (64–8192) |
|
| CPU core count (1–16) |
|
| Default exec timeout in ms (1000–600000) |
|
| PID limit (8–1024) |
|
| Auto-expiry idle timeout in ms (60000–86400000, default 30 min) |
| (unset) | Absolute path to a JSON file. When set, scratchpad notes persist across server restarts. |
| (unset) | Absolute path to a host directory. When set, the directory is bind-mounted read-only at |
|
| Docker image tag the sandbox container is created from. Override to use a custom image (e.g. one that bundles extra Python packages). When set to anything other than the default, the image must already exist locally — the server will not auto-build it. See Extending the sandbox. |
Out-of-range values are clamped to the nearest bound and a warning is logged to stderr.
Set them in your MCP config's env block or export before starting the server:
{
"mcpServers": {
"esquie": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/absolute/path/to/esquie",
"env": {
"ESQUIE_SANDBOX_MEMORY": "1024",
"ESQUIE_SANDBOX_TIMEOUT": "60000",
"ESQUIE_NOTES_FILE": "/Users/me/.esquie/notes.json",
"ESQUIE_SANDBOX_MOUNT": "/Users/me/samples"
}
}
}
}Extending the sandbox
The default sandbox image is intentionally minimal: capstone, lief, pycryptodome, dill. The container has no network access by design, so packages cannot be installed at runtime via python_eval. To add tools (e.g. pwntools, unicorn, keystone-engine, yara-python, angr, custom wheels), bake them into a derived image and point Esquie at it.
Build the base image once:
docker build -t esquie-sandbox:latest .Write a custom Dockerfile that extends it:
FROM esquie-sandbox:latest USER root RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential cmake pkg-config libffi-dev \ && pip install --no-cache-dir --target=/opt/pylibs \ pwntools unicorn keystone-engine yara-python \ && apt-get purge -y build-essential cmake pkg-config \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* USER sandboxBuild it:
docker build -t my-esquie-sandbox:latest -f Dockerfile.custom .Set
ESQUIE_SANDBOX_IMAGEin your MCP config:"env": { "ESQUIE_SANDBOX_IMAGE": "my-esquie-sandbox:latest" }If a previous container exists, force a fresh one so the new image takes effect:
docker rm -f esquie-sandbox
When ESQUIE_SANDBOX_IMAGE is set to a tag other than the default, the server will not auto-build the image — it expects you to have built or pulled it. Missing custom image → first python_eval fails with an actionable error pointing at the build command.
Development
# Run in development mode (auto-compiles via tsx)
npm run dev
# Compile TypeScript to dist/
npm run build
# Rebuild the Docker image (required after changing runner.py or Dockerfile)
docker build -t esquie-sandbox:latest .
# Force-recreate the sandbox container (e.g. after image rebuild)
docker rm -f esquie-sandboxCI runs npm ci && npm run build on every push and PR to main (.github/workflows/build.yml).
Project Structure
esquie/
├── package.json
├── tsconfig.json
├── Dockerfile # Python sandbox image definition
├── .github/workflows/
│ └── build.yml # CI build check
├── src/
│ ├── index.ts # Entry point: server setup, tool/resource registration, shutdown
│ ├── docker/
│ │ ├── config.ts # Env var config parsing
│ │ ├── sandbox.ts # DockerSandbox class: container lifecycle + exec + file I/O
│ │ └── runner.py # Python runner baked into Docker image
│ └── tools/
│ ├── python-eval.ts # python_eval, reset_sandbox, upload/list/download
│ ├── hex-utils.ts # Native hex/binary/encoding tools
│ └── scratchpad.ts # Key-value notepad (in-memory + optional JSON persistence)
└── dist/ # Compiled output (git-ignored)Troubleshooting
python_eval fails with "Cannot connect to the Docker daemon"
Docker Desktop or Docker Engine is not running. Start it and try again.
python_eval hangs on first call
The sandbox Docker image is being built automatically. This takes 1-2 minutes on first run. Pre-build with docker build -t esquie-sandbox:latest . to avoid this.
"Conflict. The container name /esquie-sandbox is already in use" A leftover container from a previous session. Remove it:
docker rm -f esquie-sandboxSession state is lost
The container was destroyed (server restart, Docker restart, manual removal). State lives in /tmp inside the container and does not survive container removal. This is by design.
"Execution timed out"
The default timeout is 30 seconds. Pass a higher timeout value (in ms) for long-running computations. Maximum practical limit depends on the MCP client.
Docker image is stale after editing runner.py
Rebuild the image and remove the old container:
docker build -t esquie-sandbox:latest .
docker rm -f esquie-sandboxUpgrading from re-helper-tools
Remove the old image and container after upgrading:
docker rmi re-helper-sandbox:latest
docker rm -f re-helper-sandboxUpdate any RE_SANDBOX_* env vars in your MCP config to ESQUIE_SANDBOX_*.
Available Tools
18 toolsascii_to_hexA
Encode ASCII text as hex bytes
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to encode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the core conversion behavior, but does not disclose edge-case handling (e.g., non-ASCII characters), output formatting (case, spacing), or whether the result is a string. This is a basic but incomplete behavioral description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to the intended meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, this description is adequate for understanding its purpose. However, it leaves minor unanswered questions about exact output formatting, consistent with the minimalism of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'text' is fully described in the schema ('Text to encode'), and the description adds the 'ASCII' qualifier, aligning with the tool name. With 100% schema coverage, the parameter semantics are clear and require no additional explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Encode' and identifies both input ('ASCII text') and output ('hex bytes'), clearly distinguishing it from sibling tools like hex_to_ascii or base64_encode. It is concise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. While the intended use is implied by the name and description, there are no exclusions or comparisons with similar encoding tools such as base64_encode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base64_decodeB
Decode a base64 string
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Base64-encoded string | |
| output_encoding | No | Output encoding: utf8 (default) or hex | utf8 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden of behavioral disclosure. It only states the core function and provides no details about read-only behavior, error handling on invalid base64, return format, or the impact of the output_encoding parameter. This leaves the agent without crucial operational information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that efficiently communicates the tool's purpose. Every word is essential, and the format is appropriately front-loaded with the action and target.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is too sparse to be contextually complete. It does not mention the output encoding options, return value, or failure modes, which are important for an agent to use the tool correctly. For a simple utility, more context is needed to fill the gaps left by missing annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage with descriptions for both 'data' and 'output_encoding'. The description adds no extra meaning beyond the schema, but per rubric baseline 3 applies when schema coverage is high, so no penalty is incurred for the lack of parameter details in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Decode a base64 string' uses a specific verb ('decode') and clearly identifies the resource (base64 string). It unambiguously distinguishes itself from sibling tools such as base64_encode and hex_to_ascii, making the tool's purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not explain when to use this tool versus alternatives (e.g., hex_to_ascii for hex-to-ASCII conversion) and offers no context or exclusions. It lacks any explicit or implicit guidance for an agent deciding between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base64_encodeC
Base64-encode data
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Data to encode | |
| encoding | No | Input encoding: utf8 (default) or hex | utf8 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of disclosing behavior. It only says 'Base64-encode data' without specifying return format, how the 'encoding' parameter affects input interpretation (e.g., hex decoding), or any edge-case handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no wasted words. It is front-loaded and clearly communicates the core purpose without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity but the presence of an enum-based 'encoding' parameter and no output schema, the description is incomplete. It fails to explain how the encoding affects the operation or what the return value is, leaving an agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 is appropriate. The description adds no extra meaning beyond the schema's parameter descriptions; both 'data' and 'encoding' are already well-explained in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and object ('Base64-encode data') which differentiates it from sibling tools like base64_decode. However, it lacks additional scope details such as accepted input formats or the role of the 'encoding' parameter, which would make it a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like base64_decode or the hex conversion tools. There is no mention of prerequisites, limitations, or when the 'encoding' parameter should be set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
byte_pattern_searchA
Find all offsets of a byte pattern in hex data. Supports ?? as wildcard bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Hex pattern to find, e.g. '4d5a??90' | |
| hex_data | Yes | Hex string to search in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does mention wildcard support (??) which is useful, but it fails to describe the return format (e.g., whether offsets are decimal, 0-based), case sensitivity, or behavior when no matches are found. This is a significant gap for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the main purpose. Every sentence contributes essential information (what it does, wildcard support) with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two well-described parameters, but there is no output schema. The description does not explain the return format, which leaves ambiguity about what 'offsets' looks like (e.g., list of integers, array, etc.). It is adequate for the core functionality but not fully complete without output details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter descriptions, including an example pattern '4d5a??90'. The description adds explicit semantics by stating that '??' is a wildcard byte, which clarifies that the question marks are not just part of the example but a special syntax. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Find all offsets of a byte pattern in hex data.' It uses a specific verb ('Find') and a resource ('byte pattern in hex data'), and mentions wildcard support, which distinguishes it from sibling tools that are conversions and hashing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is evident: searching for byte patterns in hex data. The context is clear given the sibling tools are all conversions/hashes or note/sandbox helpers, and this is the only pattern search tool. It lacks explicit exclusions, but none are necessary given the tool's specificity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dec_to_hexB
Convert a decimal number to hex
| Name | Required | Description | Default |
|---|---|---|---|
| dec | Yes | Decimal value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits on its own. It only restates the conversion direction and gives no details about output format (e.g., '0x' prefix, case), input limitations (e.g., negative numbers, integers only), or error behavior. This is a minimal statement that adds little beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. Every word is necessary to convey the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is minimally viable but leaves gaps. It does not specify the format of the hex output (e.g., with or without '0x'), which is important since no output schema exists. However, for a basic conversion tool, the core purpose is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter 'dec' with description 'Decimal value'. The description adds general context ('decimal number') but no additional parameter semantics beyond what the schema already states. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Convert') and the resource ('a decimal number') with the target format ('hex'). It distinguishes from siblings like hex_to_dec and hex_to_ascii by naming the exact conversion direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over alternatives. It does not mention sibling tools like hex_to_dec or specify contexts where decimal-to-hex is appropriate. The usage is implied only by the tool name and description, but no explicit prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteA
Delete a note from the scratchpad
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Note key/name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Delete a note from the scratchpad' without mentioning that deletion is permanent, whether it is idempotent, what happens if the key does not exist, or what is returned. This is a destructive operation with minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the verb and resource, and contains no filler or redundant information. It is appropriately sized for such a simple operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one well-documented parameter, so the description is minimally adequate. However, the absence of annotations and an output schema, combined with the lack of any behavioral caveats (e.g., permanence, error behavior), leaves some uncertainty for the agent. More detail would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter `key` is fully documented in the schema ('Note key/name'), giving 100% schema description coverage. The description itself adds no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the target resource ('a note from the scratchpad'), distinguishing it from sibling note tools like set_note, get_note, and list_notes. It names the exact operation without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is implied by the verb and resource: use this when you need to delete a note. However, there is no explicit guidance about when to use it versus alternatives, nor any prerequisites or consequences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_from_sandboxA
Read a file from the sandbox container's /tmp directory and return its base64-encoded content. Maximum file size: 10MB.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Filename (no path separators) — read from /tmp/<filename> |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behaviors: file is read from /tmp, content returned as base64, and maximum file size of 10MB. It lacks details on error handling or explicit non-mutating nature, but 'Read' is a clear signal and the key constraints are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and resource, followed by the most critical constraint. Every word contributes; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no annotations and no output schema, the description covers purpose, location, encoding, and size limit. It does not specify behavior on missing files or exceed size, but these are not essential for basic selection and invocation. Adequate and complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'filename' parameter, which already explains the format and location. The description reinforces that the file is in /tmp and adds output details (base64, size limit), but does not significantly add meaning to the parameter itself beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a file from the sandbox container's /tmp directory and returns base64-encoded content. The verb 'Read' and specific resource location distinguish it from siblings like upload_to_sandbox and list_sandbox_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this tool is for reading files from the sandbox. However, it does not explicitly say when to use it over alternatives like upload_to_sandbox or list_sandbox_files, nor does it mention exclusions. Still, the purpose implies usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteB
Retrieve a note from the scratchpad
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Note key/name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It simply states 'Retrieve a note' without revealing what happens if the key is missing, the format of the returned note, or whether the operation is read-only. This lack of detail would leave an agent uncertain about error handling and return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is front-loaded with the action and object. It contains zero redundant words and efficiently conveys the core purpose without any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read operation), the minimal description might suffice, but it is not fully complete. It lacks mention of return value, error behavior, or connection to the scratchpad context. The absence of annotations and output schema means more detail would be helpful for an agent to invoke it correctly without assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the single parameter 'key' with the note's key/name. The description adds no extra meaning to the parameter, so it does not surpass the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Retrieve' and identifies the resource 'note' and its location 'scratchpad'. This clearly distinguishes it from sibling tools like set_note, list_notes, and delete_note by indicating a read operation on a specific note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives. It does not mention that this fetches a single note by key while list_notes would show all notes, nor does it state any prerequisites or conditions. Users must infer usage from the name and minimal description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashC
Compute a hash digest of the input data
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Data to hash | |
| encoding | No | Input encoding: utf8 (default) or hex | utf8 |
| algorithm | Yes | Hash algorithm |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does not disclose the output format (e.g., hex string), determinism, or any edge-case behavior. It merely restates the function name, making it nearly tautological.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff, achieving maximum conciseness. However, it lacks structure to convey additional context such as return values or examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description should explain what the function returns. It does not. The description is insufficient for an agent to know the output format or how to interpret the digest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema description coverage is 100%, so the baseline is 3. The description adds no parameter information beyond the schema, but this is acceptable given the schema thoroughly documents each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes a hash digest, which is a specific verb+resource. It does not explicitly distinguish from siblings, but the sibling tools are different operations (conversions, XOR, note storage), so confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool, how to choose an algorithm, or any context regarding input encoding. There are no exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hex_to_asciiA
Decode a hex string to ASCII text
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex-encoded bytes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior but only states the basic transformation. It does not mention input validation, handling of invalid hex characters, case sensitivity, odd-length strings, or how non-ASCII bytes are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. Every word contributes to conveying the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and no annotations, the description is minimally viable but leaves gaps. It does not explain edge cases like non-ASCII output, invalid hex input, or whether the input should be plain hex or may include spaces/prefixes, which an agent would need to know for robust invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage with the description 'Hex-encoded bytes', so the baseline is 3. The tool description adds the output context (ASCII text) but does not provide additional parameter format details such as allowed prefixes or separators.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Decode' with a clear resource: 'a hex string to ASCII text'. It clearly distinguishes from siblings like hex_to_dec and ascii_to_hex, which handle other conversions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a hex string needs to be converted to ASCII, but it does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives. No exclusions or preconditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hex_to_decA
Convert a hex string to decimal
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex value (with or without 0x prefix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It states the core conversion but does not mention return format, handling of invalid input, or edge cases. The schema does add the 0x-prefix behavior, which helps, but more detail on output could improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that conveys the essential purpose without any filler. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter conversion tool, the description and schema are mostly sufficient. The absence of an output schema is not a major issue since the return value is inferable, but explicitly stating the output type (e.g., decimal number string) would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides a full description of the single parameter 'hex', including format details (with or without 0x prefix). The tool description adds no extra parameter meaning beyond the schema, so a baseline score of 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: converting a hex string to decimal. It uses a specific verb and resource, and the name aligns with the function. It is easily distinguishable from sibling tools like dec_to_hex and hex_to_ascii.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is clear from the description and tool name; there are no explicit 'when to use' or alternatives, but the purpose is unambiguous relative to the sibling conversions. The description implies when to use it (when a decimal representation is needed from hex) without needing exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesA
List all notes in the scratchpad
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The verb 'List' implies a read-only operation, but the description does not disclose whether it returns note titles, contents, or metadata, nor does it mention any ordering or side effects. It is not misleading, but it lacks behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the action and target. Every word is necessary and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no annotations, no output schema), the description provides the essential action. While it lacks detail on the return value, for a straightforward list operation this is probably sufficient, though a bit more specificity would be ideal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is trivially 100%. Since there are no parameters to document, the description does not need to add parameter information, and the baseline of 4 for 0 params is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and a clear resource 'all notes in the scratchpad', which immediately distinguishes it from sibling tools like get_note, set_note, and delete_note. It is unambiguous and precisely describes the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention that get_note retrieves a specific note, nor does it reference list_sandbox_files for files, so the description provides no comparative usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sandbox_filesA
List files in the sandbox container's /tmp directory (output of ls -la /tmp).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the exact command executed, which indicates the read-only nature and the output format. It doesn't explicitly mention side effects, but for a list operation, this is reasonably transparent. The description adds value beyond the name by specifying the directory and command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and resource, followed by the exact command. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless tool, the description is complete. It explains what the tool does and the exact return format (output of `ls -la /tmp`), which satisfies the lack of an output schema. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and schema coverage at 100%, the baseline is 4. There is nothing to explain about parameters; the description correctly doesn't add unnecessary parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'List' and the resource 'files in the sandbox container's /tmp directory'. It also provides the exact command output (`ls -la /tmp`), making it unambiguous and distinguishable from sibling tools like upload/download/reset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: whenever you need to see the files in the sandbox's /tmp directory. Although it doesn't explicitly exclude alternatives or name them, the context is clear enough given the absence of any other listing tool among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
python_evalA
Execute Python code in a sandboxed Docker container. Pre-installed packages: pwntools, capstone, keystone, unicorn, lief, yara, pycryptodome. Session state (variables, imports) persists across calls.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python code to execute | |
| timeout | No | Timeout in milliseconds (default from ESQUIE_SANDBOX_TIMEOUT or 30000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and provides meaningful transparency: it discloses sandboxing, pre-installed packages, and persistent session state. It does not mention error handling or output format, but the disclosed traits are significant and beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise, front-loaded sentences: the core action, the package list, and the session persistence detail. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers execution context and pre-installed tools, it does not describe the return value (e.g., stdout/stderr) or how to reset persistent state, both useful given there is no output schema. The information provided is useful but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'code' and 'timeout' described. The description adds no additional parameter-level detail beyond what the schema already 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Execute Python code in a sandboxed Docker container' which is a specific verb+resource with clear scope. It distinguishes this tool from sibling utilities like hex conversion, hashing, and sandbox file management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by listing pre-installed packages (pwntools, capstone, etc.) and noting session persistence, which helps an agent decide if this is the right sandboxed execution environment. However, it does not explicitly exclude alternatives or mention when to use reset_sandbox.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_sandboxA
Destroy the Python sandbox container and clear all session state. The next python_eval call will create a fresh container.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavioral traits. It openly states the destructive action ('Destroy', 'clear all session state') and explains the consequence for future calls. This is transparent and leaves no ambiguity about the tool's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core action and then adds the forward-looking consequence. Every clause contributes meaning, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, destructive reset tool with no output schema, the description fully covers what happens, the effect on session state, and the behavior of the next python_eval call. There is no missing information that would hinder correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline of 4 applies. The description adds no parameter-related information because none exists, which is appropriate. The relationship between the tool and the python_eval call is clear without needing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Destroy', 'clear') and identifies the exact resource ('Python sandbox container', 'session state'), making the tool's purpose unambiguous. It clearly distinguishes reset_sandbox from sibling tools like python_eval or upload_to_sandbox, as it is the only one performing a reset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when a fresh sandbox environment is needed, since it states 'The next python_eval call will create a fresh container.' It does not explicitly mention alternatives or exclusions, but no clear alternative exists among the sibling tools, so the contextual guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_noteB
Store a note in the scratchpad
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Note key/name | |
| value | Yes | Note content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must convey behavioral traits. It simply says 'Store a note' without disclosing whether it overwrites existing notes, requires permissions, or has side effects. This is insufficient for a write operation, leaving key behaviors ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundancy, achieving high conciseness. However, it lacks any structural elements like examples or clarifications, which slightly reduces its effectiveness, though it remains appropriately brief for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotation context, the description should provide more operational details such as return value or overwrite behavior. It only states the basic action, which is incomplete for a note-storing tool, especially given the presence of related sibling tools that could be cross-referenced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, with both 'key' and 'value' clearly described. The description adds no additional meaning beyond the schema, but since the schema fully documents the parameters, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Store') and the object ('a note') in a specific location ('in the scratchpad'). This distinguishes it from sibling tools like get_note, list_notes, and delete_note, which perform different operations on notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for storing notes and provides the context of a scratchpad, but it does not explicitly mention when to use this tool versus alternatives like get_note or delete_note. The usage is clear but lacks any exclusionary or comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_to_sandboxA
Upload a file into the sandbox container's /tmp directory. Useful for dropping binaries or samples for Python analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Filename (no path separators) — file will be placed at /tmp/<filename> | |
| content_base64 | Yes | File content encoded as base64 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any behavioral details beyond the basic action. It does not mention whether existing files are overwritten, size limits, or any side effects. Since no annotations are provided, the description carries the full burden, and this gap is significant for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences with no redundant words. Every part adds value: the action, the destination, and the use case. This is exemplary conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two parameters, no output schema, no annotations), the description covers the core purpose and use case. It lacks details about return values or overwrite behavior, but those are likely minor for an upload operation. The description is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters, including that 'filename' will be placed at '/tmp/<filename>' and 'content_base64' is base64-encoded content. The description adds no additional parameter semantics, so it earns the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Upload a file'), the target destination ('sandbox container's /tmp directory'), and the intended purpose ('dropping binaries or samples for Python analysis'). It is specific and distinct from sibling tools like download_from_sandbox or list_sandbox_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for dropping binaries or samples for Python analysis' provides clear context for when the tool is appropriate. However, it does not explicitly mention alternatives or exclusions (e.g., when to use upload vs. base64_decode or python_eval).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xor_buffersA
XOR two hex buffers. Shorter buffer is repeated to match the longer one.
| Name | Required | Description | Default |
|---|---|---|---|
| hex_a | Yes | First hex buffer | |
| hex_b | Yes | Second hex buffer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add the key behavior of repeating the shorter buffer, which is beyond the schema. However, it does not disclose the return format (e.g., hex string), input validation rules, or error handling for invalid hex, leaving gaps for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the main action 'XOR two hex buffers'. Every word earns its place, with no redundancy or filler. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool without an output schema, the description covers the core operation and the repetition rule, which is the main non-obvious behavior. However, it omits the return value type and input validation expectations. Given the absence of annotations and output schema, the description could be more complete by stating the output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters as 'First hex buffer' and 'Second hex buffer', providing 100% coverage. The description adds the repetition semantics between the two buffers, which is useful, but does not elaborate on expected hex formats, case sensitivity, or other encoding details beyond what the schema implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('XOR two hex buffers') with a specific verb and resource. It distinguishes itself from sibling tools by naming the XOR operation and the repetition behavior for unequal buffer lengths, which is unique among conversion and utility tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for XORing two hex buffers, and the repetition note hints at handling unequal lengths. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. The usage context is inferred rather than explicit.
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.
18 tool updates
v0.4.0- First observed
ascii_to_hex - First observed
base64_decode - First observed
base64_encode - First observed
byte_pattern_search - First observed
dec_to_hex - First observed
delete_note - First observed
download_from_sandbox - First observed
get_note - First observed
hash - First observed
hex_to_ascii - First observed
hex_to_dec - First observed
list_notes - First observed
list_sandbox_files - First observed
python_eval - First observed
reset_sandbox - First observed
set_note - First observed
upload_to_sandbox - First observed
xor_buffers
TDQS
Scored across 18 tools
Each tool has a clearly distinct purpose: hex/dec/ascii conversions, XOR, hashing, pattern search, base64, notes CRUD, and sandbox operations (eval, reset, file transfer). No two tools overlap in function, and descriptions are sufficiently clear to avoid misselection.
Naming conventions are mixed: noun_to_noun for conversions (hex_to_dec, dec_to_hex), verb_noun for notes (set_note, get_note, delete_note), and a mix for sandbox tools (python_eval, reset_sandbox, upload_to_sandbox). While all use snake_case, the verb placement is inconsistent, making the set slightly less predictable.
18 tools is slightly high for a utility server, but each tool covers a distinct function across three clusters (conversion/encoding, notes, sandbox). The count is reasonable for the breadth of capabilities offered, though a few conversion tools could potentially be consolidated.
The tool surface is comprehensive for a hex/binary utility server with sandboxing. It covers conversion, encoding, hashing, pattern search, full note CRUD, and sandbox lifecycle including file upload/download/list. No obvious dead ends or missing core operations.
Maintenance
Related MCP Connectors
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
An MCP server for deep research or task groups
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Related MCP Servers
- AlicenseBqualityFmaintenanceMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.2446MIT
- AlicenseAqualityBmaintenanceA multi-backend MCP server that exposes binary analysis capabilities from IDA Pro and Ghidra, allowing LLMs to directly drive reverse-engineering tools via natural language.11158Apache 2.0
- AlicenseNot gradedqualityAmaintenanceAn enterprise-grade MCP server for AI-powered reverse engineering. Enables AI agents to perform comprehensive binary analysis through natural language commands.29 PyPI203MIT
- FlicenseNot gradedqualityDmaintenanceA PyGhidra-based MCP server that exposes Ghidra's reverse engineering capabilities to AI agents, enabling binary analysis via tools like overview, search, view, list, edit, script execution, and version control.1-