MCP server intelligence profile

Swarm MCP Server

MCP server for Ethereum Swarm decentralized storage. Provides 12 tools for uploading and downloading data and files, managing postage stamp batches, and working with Swarm feeds — all via the Bee API. Works with the public Swarm gateway or a local Bee node

Local OnlyOfficial distributionethersphere
Verified cleanNpm · 0.9.5

Our scanner tested version 0.9.5 without proving a finding in the methods exercised. This is not a guarantee that every deployment is secure.

1Distribution channel
12Independently observed tools
0Linked remote endpoints
AvailableVersion intelligence

Install and connect

Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.

Install swarm-mcp from npm

Install exact version 0.9.5. No verified executable entrypoint is available, so use the package documentation to launch it.

npm install --save-exact swarm-mcp@0.9.5

Identity

Canonical slugswarm-mcp-d0fea7b0DeploymentLocal Only
Canonical packagenpm:swarm-mcpRepositoryethersphere/swarm-mcp
First publishedDec 10, 2025Latest releaseDec 10, 2025
Last security verificationAug 21, 2026Classification confidence90%
PublicationPublishedOfficial distributionYes

Distributions

ChannelIdentifierCurrent versionVersionsSource
npmswarm-mcp0.9.52Repository

Current release

PackageVersionPublished / observedInventorySecurity scan
npmswarm-mcp0.9.5CurrentSep 5, 202612 toolsSucceeded · 0 resources · 12 promptsVerified clean
Enterprise protection

Continuously monitor this MCP for security risk

Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.

  • Independent exact-version security scans
  • Continuous release and vulnerability monitoring
  • Risk-change alerts with capability context
  • Historical evidence and API exports
Custom pricingContact salesTailored to your organization, integrations, data needs, and support requirements.

Current version evidence

Provenanceartifact_hash_verifiedSignature
MCP SDKArtifact SHA-256cdc10bdfd08a64965aa2f10ebc386b1b50745833bd7cba1b14d07d234ef610bf
Scannermcp-proof-engine 0.1.0Scan completedAug 21, 2026
Security ratingMethodology
0Proven
946Clean
0Inconclusive
0Flaky
0Errors

Current protocol inventory

2025-06-18Negotiated protocol
swarm-mcp-serverServer-reported name
4Capability groups
Aug 18, 2026Observed

Tools 12

ToolCategoryAnnotationsRisk
create_postage_stampBuy 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.
Input schema
{
  "type": "object",
  "properties": {
    "size": {
      "type": "string",
      "description": "Storage capacity exactly as stated by the user, e.g. 1GB, 500MB, 1KB. Do not guess, default, or invent a value. If the user did not state a size, ask them."
    },
    "duration": {
      "type": "string",
      "description": "Time to live of the postage stamp exactly as stated by the user, e.g. 1d - 1 day, 1w - 1 week, 1month - 1 month. Do not guess, default, or invent a value. If the user did not state a duration, ask them."
    },
    "label": {
      "type": "string",
      "maxLength": 100,
      "description": "Sets label for the postage batch (omit if the user didn't ask for one). Do not set a label with with specific capacity values because they can get misleading."
    }
  },
  "required": [
    "size",
    "duration"
  ]
}
download_dataDownload 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.
Input schema
{
  "type": "object",
  "properties": {
    "reference": {
      "type": "string",
      "description": "Swarm reference hash."
    }
  },
  "required": [
    "reference"
  ]
}
Output schema
{
  "type": "object",
  "properties": {
    "textData": {
      "type": "string",
      "description": "The downloaded data for the given reference."
    }
  },
  "required": [
    "textData"
  ]
}
download_filesDownload 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.
Input schema
{
  "type": "object",
  "properties": {
    "reference": {
      "type": "string",
      "description": "Swarm reference hash"
    },
    "filePath": {
      "type": "string",
      "description": "Optional destination FOLDER (not a filename) to save the downloaded content into (only available in stdio mode). Files from the manifest are written inside this folder using their original names. Absolute paths are recommended; relative paths resolve against the server's current working directory. If omitted, files are saved into the server's current working directory."
    }
  },
  "required": [
    "reference"
  ]
}
extend_postage_stampIncrease 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.
Input schema
{
  "type": "object",
  "properties": {
    "postageBatchId": {
      "type": "string",
      "description": "The id of the batch for which extend is performed."
    },
    "size": {
      "type": "string",
      "description": "Additional storage capacity exactly as stated by the user, e.g. 1GB, 500MB, 1KB. Do not guess, default, or invent a value. Omit this field if the user did not state a size."
    },
    "duration": {
      "type": "string",
      "description": "Additional time to live exactly as stated by the user, e.g. 1d - 1 day, 1w - 1 week, 1month - 1 month. Do not guess, default, or invent a value. Omit this field if the user did not state a duration."
    }
  },
  "required": [
    "postageBatchId"
  ]
}
get_postage_stampGet a specific postage stamp based on postageBatchId.
Input schema
{
  "type": "object",
  "properties": {
    "postageBatchId": {
      "type": "string",
      "description": "The id of the stamp which is requested."
    }
  },
  "required": [
    "postageBatchId"
  ]
}
Output schema
{
  "type": "object",
  "properties": {
    "raw": {
      "type": "object",
      "properties": {
        "batchID": {
          "type": "string",
          "description": "The ID of the batch."
        },
        "usable": {
          "type": "boolean",
          "description": "Tells if the batch is usable."
        },
        "label": {
          "type": "string",
          "description": "The label of the batch."
        },
        "depth": {
          "type": "number",
          "description": "The depth of the batch, depth determines how much data can be stored by a batch."
        },
        "amount": {
          "type": "string",
          "description": "The amount parameter is the quantity of xBZZ in PLUR that is assigned per chunk in the batch."
        },
        "bucketDepth": {
          "type": "number",
          "description": "Bucket depth determines how the address space is partitioned, with each bucket storing chunks that share a common address prefix. Together with batch depth, bucket depth determines how many chunks are allowed in each bucket."
        },
        "blockNumber": {
          "type": "number",
          "description": "The block number."
        },
        "immutableFlag": {
          "type": "boolean",
          "description": "Flag telling if the batch is immutable."
        },
        "duration": {
          "type": "object",
          "description": "Estimated time until the batch expires.",
          "properties": {
            "seconds": {
              "type": "number",
              "description": "The estimated number of seconds until the batch expires."
            }
          }
        },
        "usage": {
          "type": "number",
          "description": "A floating point number from 0 to 1, where 0 is no usage, 1 is full usage."
        },
        "usageText": {
          "type": "string",
          "description": "Human readable usage text, like 50% or 100%, no fractions."
        },
        "size": {
          "type": "object",
          "description": "Effective size.",
          "properties": {
            "bytes": {
              "type": "number",
              "description": "Effective size number of bytes."
            }
          }
        },
        "remainingSize": {
          "type": "object",
          "description": "Estimated remaining size.",
          "properties": {
            "bytes": {
              "type": "number",
              "description": "Estimated remaining size number of bytes."
            }
          }
        },
        "theoreticalSize": {
          "type": "object",
          "description": "Theoretical size in bytes.",
          "properties": {
            "bytes": {
              "type": "number",
              "description": "Theoretical size number of bytes."
            }
          }
        }
      }
    },
    "summary": {
      "type": "object",
      "properties": {
        "stampID": {
          "type": "string",
          "description": "The ID of the stamp."
        },
        "usage": {
          "type": "string",
          "description": "The percentage of storage used."
        },
        "capacity": {
          "type": "string",
          "description": "The storage remaining from the total."
        },
        "ttl": {
          "type": "string",
          "description": "Time remaining until stamp batch expires."
        },
        "immutable": {
          "type": "boolean",
          "description": "Flag telling if the batch is immutable."
        }
      }
    }
  },
  "required": [
    "summary"
  ]
}
list_postage_stampsList the available postage stamps. Optional options (ignore if they are not requested): leastUsed, limit, minUsage(%), maxUsage(%).
Input schema
{
  "type": "object",
  "properties": {
    "leastUsed": {
      "type": "boolean",
      "description": "A boolean value that tells if stamps are sorted so least used comes first. true - means that stamps should be sorted. false - means that stamps should not be sorted. Default is false.",
      "default": false
    },
    "limit": {
      "type": "number",
      "description": "Limit is the maximum number of returned stamps."
    },
    "minUsage": {
      "type": "number",
      "description": "Only list stamps with at least this usage percentage"
    },
    "maxUsage": {
      "type": "number",
      "description": "Only list stamps with at most this usage percentage."
    }
  }
}
Output schema
{
  "type": "object",
  "properties": {
    "raw": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "description": "The ID of the batch."
          },
          "usable": {
            "type": "boolean",
            "description": "Tells if the batch is usable."
          },
          "label": {
            "type": "string",
            "description": "The label of the batch."
          },
          "depth": {
            "type": "number",
            "description": "The depth of the batch, depth determines how much data can be stored by a batch."
          },
          "amount": {
            "type": "string",
            "description": "The amount parameter is the quantity of xBZZ in PLUR that is assigned per chunk in the batch."
          },
          "bucketDepth": {
            "type": "number",
            "description": "Bucket depth determines how the address space is partitioned, with each bucket storing chunks that share a common address prefix. Together with batch depth, bucket depth determines how many chunks are allowed in each bucket."
          },
          "blockNumber": {
            "type": "number",
            "description": "The block number."
          },
          "immutableFlag": {
            "type": "boolean",
            "description": "Flag telling if the batch is immutable."
          },
          "duration": {
            "type": "object",
            "description": "Estimated time until the batch expires.",
            "properties": {
              "seconds": {
                "type": "number",
                "description": "The estimated number of seconds until the batch expires."
              }
            }
          },
          "usage": {
            "type": "number",
            "description": "A floating point number from 0 to 1, where 0 is no usage, 1 is full usage."
          },
          "usageText": {
            "type": "string",
            "description": "Human readable usage text, like 50% or 100%, no fractions."
          },
          "size": {
            "type": "object",
            "description": "Effective size.",
            "properties": {
              "bytes": {
                "type": "number",
                "description": "Effective size number of bytes."
              }
            }
          },
          "remainingSize": {
            "type": "object",
            "description": "Estimated remaining size.",
            "properties": {
              "bytes": {
                "type": "number",
                "description": "Estimated remaining size number of bytes."
              }
            }
          },
          "theoreticalSize": {
            "type": "object",
            "description": "Theoretical size in bytes.",
            "properties": {
              "bytes": {
                "type": "number",
                "description": "Theoretical size number of bytes."
              }
            }
          }
        }
      }
    },
    "summary": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "stampID": {
            "type": "string",
            "description": "The ID of the stamp."
          },
          "usage": {
            "type": "string",
            "description": "The percentage of storage used."
          },
          "capacity": {
            "type": "string",
            "description": "The storage remaining from the total."
          },
          "ttl": {
            "type": "string",
            "description": "Time remaining until stamp batch expires."
          },
          "immutable": {
            "type": "boolean",
            "description": "Flag telling if the batch is immutable."
          }
        }
      }
    }
  },
  "required": [
    "summary"
  ]
}
query_upload_progressQuery 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.
Input schema
{
  "type": "object",
  "properties": {
    "tagId": {
      "type": "string",
      "description": "Tag ID returned by upload_file and upload_folder tools to track upload progress"
    }
  },
  "required": [
    "tagId"
  ]
}
Output schema
{
  "type": "object",
  "properties": {
    "processedPercentage": {
      "type": "number",
      "description": "The deferred upload processed percentage."
    },
    "message": {
      "type": "string",
      "description": "Query upload response message."
    },
    "startedAt": {
      "type": "string",
      "description": "When it started."
    },
    "reference": {
      "type": "string",
      "description": "The Swarm reference hash of the uploaded content (the root manifest reference for folder uploads). Meaningful once processedPercentage is 100; may be absent or zero while the upload is still in progress."
    }
  },
  "required": [
    "processedPercentage",
    "reference"
  ]
}
read_feedRetrieve the latest data from the feed of a given topic.
Input schema
{
  "type": "object",
  "properties": {
    "memoryTopic": {
      "type": "string",
      "description": "Feed topic."
    },
    "owner": {
      "type": "string",
      "description": "when accessing external memory or feed, ethereum address of the owner must be set"
    }
  },
  "required": [
    "memoryTopic"
  ]
}
Output schema
{
  "type": "object",
  "properties": {
    "textData": {
      "type": "string",
      "description": "The downloaded data for the given topic."
    }
  },
  "required": [
    "textData"
  ]
}
update_feedUpdate 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.
Input schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "string",
      "description": "The literal string content to write to the feed, taken verbatim from the user's message. Pass the exact text the user provided (typically the text after phrases like \"with:\", \"update with:\", \"set to:\", or similar), even if the value looks like a short identifier, a placeholder name (e.g. 'Message1', 'foo'), or otherwise seems like a variable — it is the content itself. Do not ask the user to clarify or expand the content; do not substitute your own text."
    },
    "memoryTopic": {
      "type": "string",
      "description": "Required. Must be supplied by the user. If missing, ask the user — never invent, hash, or derive from the data. The feed topic. Pass exactly whatever the user names it as a plain string (e.g. 'notes', 'Topic1', 'game-state') -- the server hashes non-hex strings into a topic automatically. Do NOT derive it from the data. Only ask the user if they gave no topic at all."
    },
    "postageBatchId": {
      "type": "string",
      "description": "The id of the batch which will be used to perform the upload."
    }
  },
  "required": [
    "data",
    "memoryTopic"
  ]
}
Output schema
{
  "type": "object",
  "properties": {
    "reference": {
      "type": "string",
      "description": "Swarm reference hash for feed update."
    },
    "topicString": {
      "type": "string",
      "description": "The topic string."
    },
    "topic": {
      "type": "string",
      "description": "The topic."
    },
    "feedUrl": {
      "type": "string",
      "description": "The feed URL."
    },
    "message": {
      "type": "string",
      "description": "Update feed response message."
    }
  },
  "required": [
    "reference",
    "topic",
    "feedUrl"
  ]
}
upload_dataUpload 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.
Input schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "string",
      "description": "The literal string content to upload, taken verbatim from the user's message. Pass the exact text the user provided (typically the text after phrases like \"upload data:\", \"upload:\", \"store:\", or similar), even if the value looks like a short identifier, a placeholder name (e.g. 'Text1', 'Message1', 'foo'), or otherwise seems like a variable — it is the content itself. Do not ask the user to clarify or expand the content; do not substitute your own text."
    },
    "redundancyLevel": {
      "type": "number",
      "description": "Optional redundancy level for fault tolerance (higher values provide better fault tolerance but increase storage overhead): 0 - none, 1 - medium, 2 - strong, 3 - insane, 4 - paranoid. Default is 0. Do not ask the user for this value; only set it if the user explicitly requests a redundancy level.",
      "default": 0
    },
    "postageBatchId": {
      "type": "string",
      "description": "Optional. The id of the batch which will be used to perform the upload. Do not ask the user for this value; only set it if the user explicitly provides a batch id."
    }
  },
  "required": [
    "data"
  ]
}
Output schema
{
  "type": "object",
  "properties": {
    "reference": {
      "type": "string",
      "description": "Swarm reference hash for uploaded data."
    },
    "url": {
      "type": "string",
      "description": "URL to access uploaded data."
    },
    "message": {
      "type": "string",
      "description": "Upload response message."
    }
  },
  "required": [
    "reference",
    "url"
  ]
}
upload_fileUpload 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.
Input schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "string",
      "description": "File content or file path."
    },
    "redundancyLevel": {
      "type": "number",
      "description": "redundancy level for fault tolerance (higher values provide better fault tolerance but increase storage overhead) 0 - none, 1 - medium, 2 - strong, 3 - insane, 4 - paranoid",
      "default": 0
    },
    "postageBatchId": {
      "type": "string",
      "description": "The id of the batch which will be used to perform the upload."
    }
  },
  "required": [
    "data"
  ]
}
upload_folderUpload 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.
Input schema
{
  "type": "object",
  "properties": {
    "folderPath": {
      "type": "string",
      "description": "Required. Path to the local folder to upload, taken verbatim from the user's message. Do not ask the user to confirm or re-enter the path when one was already given."
    },
    "redundancyLevel": {
      "type": "number",
      "description": "redundancy level for fault tolerance (higher values provide better fault tolerance but increase storage overhead) 0 - none, 1 - medium, 2 - strong, 3 - insane, 4 - paranoid",
      "default": 0
    },
    "postageBatchId": {
      "type": "string",
      "description": "The id of the batch which will be used to perform the upload."
    }
  },
  "required": [
    "folderPath"
  ]
}

Resources 0

  • None observed.

Resource templates 0

  • None observed.

Prompts 12

  • create_postage_stamp_promptcreate_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.

  • download_data_promptdownload_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.

  • download_files_promptdownload_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.

  • extend_postage_stamp_promptextend_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.

  • get_postage_stamp_promptget_postage_stamp_prompt

    Get a specific postage stamp based on postageBatchId.

  • list_postage_stamps_promptlist_postage_stamps_prompt

    List the available postage stamps. Optional options (ignore if they are not requested): leastUsed, limit, minUsage(%), maxUsage(%).

  • query_upload_progress_promptquery_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.

  • read_feed_promptread_feed_prompt

    Retrieve the latest data from the feed of a given topic.

  • update_feed_promptupdate_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.

  • upload_data_promptupload_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.

  • upload_file_promptupload_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_promptupload_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.

Remote endpoints

EndpointTransportAuthenticationHealthObserved
No verified remote endpoint is linked.

Swarm MCP Server questions

How do I install Swarm MCP Server?

Install the selected package version with: npm install --save-exact swarm-mcp@0.9.5

What tools does Swarm MCP Server provide?

Swarm MCP Server exposed 12 tools during independent protocol observation, including create_postage_stamp, download_data, download_files, extend_postage_stamp, get_postage_stamp, list_postage_stamps, query_upload_progress, read_feed, and others.

Is Swarm MCP Server secure?

Our scanner tested version 0.9.5 without proving a finding in the methods exercised. This is not a guarantee that every deployment is secure.

Explore related MCP server guides

Curated product and capability guides containing this catalog record.

Official vs Community MCP ServersMCP Servers With Completed Verification

Let’s talk about MCP security.

Share your details and our security team will contact you.