Attachments
FreeNot checkedOpen-source attachment transfer with local or private S3 storage, app-hosted share links, CLI, MCP, and REST API
About
Open-source attachment transfer with local or private S3 storage, app-hosted share links, CLI, MCP, and REST API
README
Open-source attachment transfer for agents and teams — local or private S3 storage, app-hosted share links, CLI + MCP + REST API.
Install
npm install -g @hasna/attachments
CLI Usage
attachments --help
attachments upload report.pdf
attachments upload report.pdf --expiry 24h --password "$ATTACHMENT_PASSWORD"
attachments upload archive.zip --encrypt --password "$ATTACHMENT_PASSWORD" --max-downloads 1
attachments serve --host 0.0.0.0 --port 3459
Fresh installs work without S3. Objects are stored under
~/.hasna/attachments/objects, metadata is stored in local SQLite, and share
links are app-hosted URLs such as http://localhost:3459/a/<token>.
For hosted deployments, keep the bucket private and let the app serve public
download pages and byte streams from /a/<token>. Direct presigned S3 links
remain available for explicit admin workflows, but server links are the default.
Storage
attachments config set --storage-backend local
attachments config set --storage-backend s3 --bucket my-bucket --region us-east-1
attachments config set --max-size 10737418240 # 10 GB
--storage-backend auto uses S3 when S3 credentials are configured and falls
back to local object storage otherwise.
Public Domains
Domain support is declarative and does not depend on @hasna/domains at
runtime. Configure a public base URL and export a DNS plan for manual,
Cloudflare, OpenDomains, or other automation.
attachments domain configure \
--hostname files.example.com \
--base-url https://files.example.com \
--path-prefix /a \
--provider cloudflare \
--attachments-origin https://attachments-origin.example.com \
--fallback-origin https://shortlinks-origin.example.com \
--zone example.com \
--record CNAME \
--name files \
--target attachments.example.net \
--proxied
attachments domain plan --format json
attachments domain plan --format opendomains
attachments domain plan --format cloudflare
attachments domain verify --format json
The generated plan contains no credentials and does not mutate DNS. For shared
domains, route the attachment prefix before any generic redirect/shortlink
route; for example, files.example.com/a/* should target the attachments app
and files.example.com/* can remain pointed at an existing shortlink service.
attachments domain verify probes the configured .../a/__attachments_probe__
URL and fails if the prefix is still handled by a shortlink route.
MCP Server
attachments-mcp
HTTP mode
Run a long-lived Streamable HTTP MCP server on 127.0.0.1 (default port 8800):
attachments-mcp --http
# or: MCP_HTTP=1 attachments-mcp
# port override: --port 8800 or MCP_HTTP_PORT=8800
- Health:
GET http://127.0.0.1:8800/health→{"status":"ok","name":"attachments"} - MCP:
http://127.0.0.1:8800/mcp
Stdio remains the default when no --http / MCP_HTTP=1 is set.
Storage Sync
This package supports optional remote storage sync directly against a Postgres/RDS database. Local SQLite remains the default.
export HASNA_ATTACHMENTS_DATABASE_URL=postgres://...
export HASNA_ATTACHMENTS_STORAGE_MODE=hybrid # local | remote | hybrid
attachments storage status
attachments storage push
attachments storage pull
attachments storage sync
MCP exposes the same flow through storage_status, storage_push,
storage_pull, and storage_sync.
Data Directory
Data is stored in ~/.hasna/attachments/. Local object storage defaults to
~/.hasna/attachments/objects.
License
Apache-2.0 -- see LICENSE
Install Attachments in Claude Desktop, Claude Code & Cursor
unyly install attachmentsInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add attachments -- npx -y @hasna/attachmentsFAQ
Is Attachments MCP free?
Yes, Attachments MCP is free — one-click install via Unyly at no cost.
Does Attachments need an API key?
No, Attachments runs without API keys or environment variables.
Is Attachments hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Attachments in Claude Desktop, Claude Code or Cursor?
Open Attachments on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzCompare Attachments with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
