Swarm MCP
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BEE_API_URL | No | The URL of the Bee API endpoint. If omitted, the default Swarm Gateway will be used: https://api.gateway.ethswarm.org. Example: http://localhost:1633. | https://api.gateway.ethswarm.org |
| BEE_FEED_PK | No | The private key of the Swarm Feed to use. If not provided, Swarm Feed functionality will be disabled. | |
| AUTO_ASSIGN_STAMP | No | Whether to automatically assign a postage stamp if none is provided. Default value is: true. Set to false to disable automatic stamp assignment. | true |
| DEFERRED_UPLOAD_SIZE_THRESHOLD_MB | No | Size threshold in megabytes for deferred uploads. Files larger than this size will be uploaded asynchronously. Default value is: 5 (MB). | 5 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tasks | {
"list": {},
"requests": {
"tools": {
"call": {}
}
}
} |
| tools | {} |
| logging | {} |
| prompts | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| upload_dataA | Upload arbitrary text data to Swarm as an immutable, content-addressed blob. Returns a Swarm reference hash that permanently identifies the uploaded bytes. Use this tool whenever the user asks to "upload data", "upload text", "store data", or similar, without mentioning a feed, topic, or memory. This is NOT a feed operation — if the user wants mutable, topic-indexed storage (i.e. mentions a feed, topic, or memory name), use |
| update_feedA | Update a mutable, topic-indexed Swarm feed with new data. Requires a |
| download_dataA | Download raw text data from a Swarm reference and return it as a string. Use this tool ONLY when the user explicitly asks for the text content, string content, or raw data behind a reference, or when the reference is known to have been uploaded via |
| read_feedB | Retrieve the latest data from the feed of a given topic. |
| upload_fileA | Upload a SINGLE file to Swarm. To upload a local file, pass its filesystem path as |
| upload_folderA | Upload a folder (directory). Use this tool whenever the user mentions "folder", "directory", "the contents of", or asks to upload a path that refers to a directory rather than one file — including phrasings like "upload to Swarm folder ", where is the folder to upload, not a destination. Prefer this tool over |
| download_filesA | Download a file or folder from a Swarm reference. Handles both single files and folder manifests, saves them to disk (in stdio mode) or returns the file list. Use this tool whenever the user asks to "download" from a reference and mentions "file", "files", "folder", or does not specify the data type. Prefer this tool over |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| upload_data_prompt | Upload arbitrary text data to Swarm as an immutable, content-addressed blob. Returns a Swarm reference hash that permanently identifies the uploaded bytes. Use this tool whenever the user asks to "upload data", "upload text", "store data", or similar, without mentioning a feed, topic, or memory. This is NOT a feed operation — if the user wants mutable, topic-indexed storage (i.e. mentions a feed, topic, or memory name), use `update_feed` instead. Only `data` is required. `redundancyLevel` and `postageBatchId` are optional — use their defaults and do NOT ask the user for them unless the user explicitly brings them up. |
| update_feed_prompt | Update a mutable, topic-indexed Swarm feed with new data. Requires a `memoryTopic` supplied by the user. Use this tool ONLY when the user explicitly mentions a feed, topic, or memory name. If the user asks to upload data without mentioning a feed/topic/memory, use `upload_data` instead — do NOT prompt the user for a topic to route them here. `postageBatchId` is optional — do not ask the user for it unless they explicitly bring it up. |
| download_data_prompt | Download raw text data from a Swarm reference and return it as a string. Use this tool ONLY when the user explicitly asks for the text content, string content, or raw data behind a reference, or when the reference is known to have been uploaded via `upload_data`. If the user mentions "file", "files", "folder", or asks to "download" without specifying that they want the raw text content, use `download_files` instead. When in doubt about the reference type, prefer `download_files` — it handles both single files and folder manifests and can be saved to disk. |
| read_feed_prompt | Retrieve the latest data from the feed of a given topic. |
| upload_file_prompt | Upload a SINGLE file to Swarm. To upload a local file, pass its filesystem path as `data` — the server reads the file itself (stdio mode only). Alternatively, pass the raw text content directly as `data`. This tool handles one file only — if the path refers to a directory, or the user mentions "folder", "directory", "the contents of", or otherwise asks to upload more than one file, use `upload_folder` instead and pass the path as its `folderPath`. Never ask the user for the file content when a path is given, and never pass a Swarm reference — references are the OUTPUT of this tool, not an input. Small files upload synchronously and return a reference. Large files (over the server's deferred-upload threshold) upload in the background and immediately return the final reference (computed locally) plus a tagId for query_upload_progress; the content becomes retrievable at the reference once the upload completes. With redundancyLevel > 0 only the tagId is returned immediately. Optional options (ignore if they are not requested): redundancyLevel: redundancy level for fault tolerance. Optional, value is 0 if not requested. postageBatchId: The postage stamp batch ID which will be used to perform the upload, if it is provided. |
| upload_folder_prompt | Upload a folder (directory). Use this tool whenever the user mentions "folder", "directory", "the contents of", or asks to upload a path that refers to a directory rather than one file — including phrasings like "upload to Swarm folder <path>", where <path> is the folder to upload, not a destination. Prefer this tool over `upload_file` when it is unclear whether a given path is a file or a directory: `upload_file` cannot upload a directory. `folderPath` is REQUIRED — pass the folder path from the user's message verbatim. Small folders upload synchronously and return the manifest `reference`. Large folders (over the server's deferred-upload threshold) upload in the background and return only a `tagId`; unlike `upload_file`, a folder's reference cannot be computed up front, so retrieve it by polling `query_upload_progress` with that tagId until processedPercentage is 100. Optional options (ignore if they are not requested): redundancyLevel: redundancy level for fault tolerance. Optional, value is 0 if not requested. postageBatchId: The postage stamp batch ID which will be used to perform the upload, if it is provided. |
| download_files_prompt | Download a file or folder from a Swarm reference. Handles both single files and folder manifests, saves them to disk (in stdio mode) or returns the file list. Use this tool whenever the user asks to "download" from a reference and mentions "file", "files", "folder", or does not specify the data type. Prefer this tool over `download_data` unless the user explicitly asks for the raw text/string content behind a reference. This is the safe default for downloads when the reference type is unknown. |
| list_postage_stamps_prompt | List the available postage stamps. Optional options (ignore if they are not requested): leastUsed, limit, minUsage(%), maxUsage(%). |
| get_postage_stamp_prompt | Get a specific postage stamp based on postageBatchId. |
| create_postage_stamp_prompt | Buy a postage stamp based on size and duration. Buying a stamp spends BZZ and is not refundable. Both `size` and `duration` MUST be explicitly stated by the user. Do not infer, assume defaults, or synthesize plausible values for either. If the user has not stated a size, or has not stated a duration, STOP and ask the user for the missing value before calling this tool. |
| extend_postage_stamp_prompt | Increase the duration (relative to current duration) and/or size of an existing postage stamp. Extending a stamp spends BZZ and is not refundable. Both `size` and `duration` are optional, but at least one must be provided. Only pass values the user has explicitly stated — do not infer, assume defaults, or synthesize plausible values. If the user's request is ambiguous about which dimension to extend or by how much, STOP and ask the user before calling this tool. |
| query_upload_progress_prompt | Query upload progress for a specific upload session identified with the returned Tag ID. Also returns the final Swarm `reference` of the upload — use this to obtain the reference for a deferred upload (notably `upload_folder`, whose reference cannot be computed up front) once processedPercentage reaches 100. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
The upload family is mostly well-separated, but `upload_file` accepts raw text content in addition to paths, making it overlap with `upload_data` for text uploads. The download pair is better distinguished by explicit routing rules, though it still relies on subtle user phrasing.
All tools follow a readable `verb_noun` snake_case pattern (`upload_folder`, `read_feed`, etc.). Minor inconsistency: `upload_file` is singular while `download_files` is plural, and `upload_data`/`upload_file` are semantically close despite different nouns.
Seven tools is a reasonable scope for a storage-plus-feed MCP server. Each tool has a clear responsibility in the workflow, even if `upload_data` partially overlaps with `upload_file`.
The set covers upload/download and feed read/update, but both upload tools reference `query_upload_progress` for deferred uploads, and that tool is absent from the server. Large uploads therefore dead-end with only a tagId, which is a significant functional gap.