Skip to main content
Glama

Manage attachments

manage_attachments
Destructive

List, read, add, or remove file attachments on any OmniFocus task or project. Attach generated content as base64 or an existing file, and retrieve small files inline or save larger ones locally.

Instructions

List, read, add, or remove file attachments on a task or project. 'read' returns small files inline as base64 and writes larger ones to an absolute savePath; 'add' takes either base64 content or an absolute filePath. 10MB limit either way.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
indexNoread/remove only: zero-based attachment index from 'list'. Indices shift after a removal, so re-list before removing a second attachment.
base64Noadd only: file contents as base64. Use this for content you generated. Max 10485760 bytes decoded. Mutually exclusive with filePath.
taskIdNoID of the task that owns the attachments.
filePathNoadd only: ABSOLUTE path to a file on disk to attach. Mutually exclusive with base64. Max 10485760 bytes.
filenameNoadd only: the filename to store the attachment under (e.g. 'receipt.pdf'). Include the extension — OmniFocus uses it to pick an icon and a handler app.
savePathNoread only: ABSOLUTE path to write the attachment to. Required for attachments of 262144 bytes or more. An existing file is never overwritten.
taskNameNoName of the task (alternative to taskId).
operationYes'list' shows every attachment with its index and size. 'read' returns one attachment (inline base64 when small, otherwise written to savePath). 'add' attaches a new file. 'remove' deletes an attachment by index.
projectIdNoID of the project that owns the attachments.
projectNameNoName of the project (alternative to projectId).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataNo
metaNo
toolYes
successYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.7.0

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint true, readOnlyHint false), the description discloses key runtime behaviors: 'read' returns small files inline as base64 and writes larger ones to an absolute savePath, 'add' accepts either base64 or filePath, and there is a 10MB limit. This adds practical detail about output and input handling that is not present in 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 exactly two sentences, front-loads the core purpose and operation list, and packs in the most relevant behavioral details (inline vs. file, base64 vs. path, 10MB limit) without redundancy. 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?

Given the presence of an output schema (which covers return values) and a fully documented input schema, the description covers the essential operational context: what operations exist, how input is provided, and size constraints. It does not mention edge cases like re-listing after removal, but that is already in the index parameter description, so the description is complete for an agent to call the tool 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?

The schema provides 100% coverage, so every parameter already has a meaningful description. The tool description adds a high-level summary of the operations and the 10MB limit, but it does not introduce semantics beyond what the schema already states (e.g., the 262144-byte threshold for savePath is in the schema). This matches the baseline for high schema coverage.

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 verb 'manage' and the resource 'file attachments on a task or project', then enumerates the four specific operations (list, read, add, remove). This distinguishes it from sibling tools that handle tasks, projects, or notes, and leaves no ambiguity about its scope.

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 implicitly defines when to use this tool—any time file attachments need to be handled on a task or project—and the operation field further clarifies the use case for each action. It does not explicitly name alternatives, but the sibling set contains no other attachment-specific tool, so the usage context is clear and unambiguous.

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