Skip to main content
Glama

Hide a message in an image

crypto_stego_hide
Read-only

Hide a UTF-8 text message inside an image with LSB steganography, save it as a lossless PNG, and optionally encrypt it with a password for later reveal.

Instructions

Hide a text message inside an image (LSB steganography in R, G, B; the picture looks the same) and save it as a lossless PNG, optionally encrypted with a password (AES-256-GCM, PBKDF2-SHA256 600,000). Same bit layout as the website, so the PNG reveals at https://s3eidat.github.io/stego-image/ or with crypto_stego_reveal. Capacity ≈ width×height×3/8 − 10 bytes (−44 more when encrypted). Transparency is filled with white. The result is read back and checked before returning. Sending it through apps that recompress images (JPEG, chat apps) destroys the message. Web version: https://s3eidat.github.io/stego-image/

Input Schema

NameRequiredDescriptionDefault
imageYesThe cover image (PNG, JPEG, WebP…): a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI).
outputNoWhere to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set).
messageYesThe text to hide (UTF-8).
passwordNoOptional password to encrypt the message.
returnBase64NoAlso return the output as base64 in the result (only for small files). Default false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.9/5.0
Behavior2/5

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

The prose discloses a lot that annotations can't carry: capacity formula, AES-256-GCM / PBKDF2-SHA256 600,000 parameterization, white fill for transparency, and a self-verification read-back. But the annotations declare readOnlyHint=true while the description and the 'output' parameter make clear the tool writes a new PNG file, which is an environment modification – a genuine conflict an agent could stumble on.

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-loaded with the core action, then caveats, which is the right order; nearly every sentence carries operational weight (capacity, encryption overhead, recompression risk). The 'https://s3eidat.github.io/stego-image/' URL appears twice and 'Web version' restates the earlier reveal hint, which is wasted space.

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?

No output schema exists, and the description covers the important return aspects (verified before returning, optionally base64, PNG-only) but never says what the result actually contains (path? size? capacity remaining?). For a 5-parameter mutation-style tool that is a small but real gap; everything else an agent needs to call it correctly is present.

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 already 100%, but the description adds meaning the schema lacks: the capacity formula tying image dimensions to message size ('width×height×3/8 − 10 bytes', minus 44 when encrypted) and the constraint that the output must be lossless PNG. It doesn't clarify how 'output' folder vs. file paths or returnBase64 interact beyond what the schema says.

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?

Opens with a specific verb+resource ('Hide a text message inside an image') and immediately pins down the mechanism (LSB steganography in R, G, B) and output format (lossless PNG). The pairing with the named sibling crypto_stego_reveal and the website makes it unambiguous which tool does embedding vs. extraction.

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?

Names the concrete alternative for the inverse operation ('reveals ... or with crypto_stego_reveal') and states a hard usage constraint ('Sending it through apps that recompress images (JPEG, chat apps) destroys the message'). It doesn't contrast against crypto_file_encrypt / crypto_text_encrypt, which an agent might reasonably consider for 'hide a message', so the routing guidance is strong but not exhaustive.

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

Deploy Server

Other Tools