Skip to main content
Glama
Sealjay

mcp-signal

by Sealjay

decrypt_attachment

Decrypt a locally stored Signal attachment using its metadata key and return the absolute path to the decrypted file. Use after reading messages with attachments.

Instructions

Decrypt a locally stored Signal attachment and return the path to the decrypted file.

The encrypted_path and local_key values come from attachment metadata in read_messages or search_messages results. Read-only on Signal data; writes a decrypted copy to a temporary directory (the temp file is not auto-cleaned). Returns the absolute path to the decrypted file as a string on success, or a string starting with 'Error:' on failure (missing file, wrong key length, or HMAC mismatch). Use this after reading messages that contain attachments.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
local_keyYesBase64-encoded 64-byte key (32-byte AES-CBC + 32-byte HMAC-SHA256), from the 'local_key' field of attachment metadata.
encrypted_pathYesAbsolute filesystem path to the encrypted attachment file, as returned in the 'encrypted_path' field of message attachment metadata.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.1.3

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: it writes a decrypted copy to a temp directory that is NOT auto-cleaned, is read-only on Signal data, and returns either an absolute path or an 'Error:'-prefixed string for the three specific failure modes (missing file, wrong key length, HMAC mismatch). This is exactly the state-changing side effect the annotations (readOnlyHint=false) imply but do not explain.

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?

Front-loads what it does and how to use it, then covers side effects and error format. Five sentences with no filler, though the parameter-provenance sentence slightly overlaps the schema descriptions.

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 an output schema existing, the description still usefully documents the success/error string contract and the non-auto-cleaned temp file. Combined with full parameter coverage and clear invocation context, nothing an agent needs to call this safely 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% so the parameter formats are documented, but the description adds provenance — both values come from attachment metadata in read_messages or search_messages results — which tells the agent where to source valid inputs. That is marginal value beyond the schema, above the baseline 3.

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

Purpose5/5

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

States a specific verb (Decrypt) and resource (locally stored Signal attachment) plus the return value (path to the decrypted file). No sibling tool does anything similar, so the agent can distinguish it immediately.

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

Usage Guidelines4/5

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

Explicitly says 'Use this after reading messages that contain attachments' and identifies that encrypted_path and local_key come from read_messages or search_messages results, giving clear context. It does not, however, state any when-not condition or name alternatives for the case where decryption fails.

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