Skip to main content
Glama
express-reader-mcp

express-reader-mcp

by Eflarus

express_download_file

Downloads and decrypts an eXpress chat attachment to a local folder and returns its path for normal file access. Requires chatId and syncId.

Instructions

Download a document/file attachment: the app decrypts it and the file is saved to a local folder, then you can read it as a normal file (returns the path). Needs chatId + the message syncId (from read/open/thread output). Saves into ~/Downloads/express-reader by default; override with folder (relative = subfolder of ~/Downloads, absolute = used as-is) or the EXPRESS_DOWNLOAD_DIR env var. Max 25 MiB. SIDE EFFECT: opens the chat (marks read).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "chatId": "<chatId>",
      "syncId": "<syncId>"
    },
    "name": "express_download_file"
  }
}

Input Schema

NameRequiredDescriptionDefault
chatIdYes
folderNoSave folder; relative is placed under ~/Downloads, absolute is used directly
syncIdYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the whole burden and does so well: it discloses decryption, on-disk persistence, the default folder and env-var override, a 25 MiB size cap, the return value (a path), and a non-obvious SIDE EFFECT that the chat gets opened and marked read. That side effect is exactly the kind of behavior an agent could not infer elsewhere.

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?

Front-loaded with the action and outcome, then prerequisites, then storage configuration, then limits, then the side-effect warning in capitals. Dense but every clause carries information; the folder explanation partially duplicates the schema but is brief.

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?

Covers purpose, inputs, storage destination, size limit, and return value even though there is no output schema. Minor omissions remain, such as what happens on filename collisions or whether an over-limit file fails vs truncates, but an agent has enough to call 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 description coverage is only 33% (only `folder` is documented), but the description compensates by explaining that syncId comes from read/open/thread output and by restating folder semantics (relative = subfolder of ~/Downloads, absolute = used as-is). chatId is named but its format/source is not elaborated, leaving one gap.

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: 'Download a document/file attachment', and immediately explains what happens (decrypts, saves to local folder, returns path). It is clearly separable from siblings like express_get_image and express_open_link, which handle different resource types.

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?

States the prerequisite context explicitly: needs chatId plus the message syncId 'from read/open/thread output', which tells the agent to call a read tool first. It does not explicitly rule out alternative tools (e.g., when to prefer express_get_image instead), so it falls short of full when/when-not guidance.

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