Mcp Ipfs — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Ipfs (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<p align="center"> <img src="https://raw.githubusercontent.com/ipfs/logo/master/ipfs-logo.svg" alt="IPFS Logo" width="120" /> </p>
<h1 align="center">MCP-IPFS</h1>
<p align="center"> <strong>A Model Context Protocol server for IPFS operations</strong> </p>
<p align="center"> Give Claude full control over the InterPlanetary File System </p>
<p align="center"> <a href="#-quick-start">Quick Start</a> • <a href="#-features">Features</a> • <a href="#-tools">Tools</a> • <a href="#%EF%B8%8F-configuration">Configuration</a> • <a href="#-architecture">Architecture</a> • <a href="#-contributing">Contributing</a> </p>
<p align="center"> <img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT" /> <img src="https://img.shields.io/badge/MCP-compatible-brightgreen.svg" alt="MCP Compatible" /> <img src="https://img.shields.io/badge/IPFS-Helia-blue.svg" alt="IPFS: Helia" /> <img src="https://img.shields.io/badge/TypeScript-5.0+-3178c6.svg" alt="TypeScript 5.0+" /> <img src="https://img.shields.io/badge/tools-34-orange.svg" alt="Tools: 34" /> </p>
MCP-IPFS is a Model Context Protocol (MCP) server that enables Claude and other AI assistants to interact directly with IPFS (InterPlanetary File System). It provides a comprehensive suite of tools for content-addressed storage, peer-to-peer networking, and decentralized data management.
Built on Helia (the modern JavaScript IPFS implementation), with a pluggable architecture ready for Kubo and remote pinning services.
| Without MCP-IPFS | With MCP-IPFS |
|---|---|
| Manual IPFS CLI commands | Claude handles IPFS operations directly |
| Copy-paste CIDs between tools | Seamless content-addressed workflows |
| No visibility into node status | Full observability of peers, bandwidth, DHT |
| Long operations block interaction | Background jobs with progress tracking |
| Single IPFS backend | Pluggable: Helia, Kubo, pinning services |
# Clone the repository
git clone https://github.com/EricGrill/mcp-ipfs.git
cd mcp-ipfs
# Install dependencies
npm install
# Build
npm run buildAdd to your ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"ipfs": {
"command": "node",
"args": ["/path/to/mcp-ipfs/dist/index.js"]
}
}
}You: What's the IPFS node status?
Claude: [Uses node_status tool]
Node is running with peer ID QmXxx...
Connected to 12 peers
Repository size: 45.2 MB<table> <tr> <td width="50%">
</td> <td width="50%">
</td> </tr> <tr> <td>
</td> <td>
</td> </tr> </table>
| Tool | Description |
|---|---|
ipfs_add | Add text, JSON, or file to IPFS. Returns CID. |
ipfs_get | Retrieve content by CID |
ipfs_pin | Pin content to prevent garbage collection |
ipfs_unpin | Unpin content |
ipfs_pins_list | List all pinned CIDs |
ipfs_add_directory | Add entire directory, returns root CID |
ipfs_ls | List contents of directory CID |
ipfs_get_file | Get specific file from directory by path |
| Tool | Description |
|---|---|
ipns_publish | Publish CID to IPNS name |
ipns_resolve | Resolve IPNS name to current CID |
ipns_keys_list | List available IPNS keys |
| Tool | Description |
|---|---|
mfs_write | Write content to mutable path |
mfs_read | Read content from MFS path |
mfs_ls | List directory contents |
mfs_mkdir | Create directory |
mfs_rm | Remove file or directory |
mfs_mv | Move/rename file or directory |
mfs_flush | Flush MFS to get root CID |
| Tool | Description |
|---|---|
dag_put | Store IPLD data, returns CID |
dag_get | Retrieve IPLD node, optionally traverse path |
| Tool | Description |
|---|---|
node_id | Get peer ID, public key, versions |
node_status | Quick health check |
node_version | Detailed version info |
peers_list | Connected peers with details |
peers_count | Simple peer count |
bandwidth_stats | Network bandwidth metrics |
swarm_connect | Connect to peer by multiaddr |
swarm_disconnect | Disconnect from peer |
repo_stats | Repository statistics |
repo_gc | Trigger garbage collection |
| Tool | Description |
|---|---|
dht_find_peer | Find addresses for peer ID via DHT |
dht_find_providers | Find peers providing a CID (configurable limit) |
dht_provide | Announce content availability to the network |
| Tool | Description |
|---|---|
job_status | Get status of background job |
jobs_list | List all jobs |
job_cancel | Cancel running job |
Create mcp-ipfs.config.json in the project root:
{
"backend": "helia",
"persistence": {
"enabled": true,
"path": "./ipfs-data"
},
"helia": {
"libp2p": {
"addresses": ["/ip4/0.0.0.0/tcp/4002"],
"bootstrap": true
}
},
"jobs": {
"maxConcurrent": 3,
"defaultTimeout": 300000
}
}Environment variables override config file settings:
| Variable | Description | Default |
|---|---|---|
MCP_IPFS_BACKEND | Backend to use | helia |
MCP_IPFS_PERSISTENCE_ENABLED | Enable persistent storage | true |
MCP_IPFS_DATA_PATH | Data directory path | ./ipfs-data |
MCP_IPFS_BOOTSTRAP | Connect to bootstrap nodes | true |
MCP_IPFS_JOBS_MAX_CONCURRENT | Max concurrent jobs | 3 |
MCP_IPFS_JOBS_TIMEOUT | Default job timeout (ms) | 300000 |
Persistent (default):
In-memory:
persistence.enabled: false┌─────────────────────────────────────────────────┐
│ Claude │
└─────────────────────┬───────────────────────────┘
│ MCP Protocol (JSON-RPC)
┌─────────────────────▼───────────────────────────┐
│ MCP-IPFS Server │
│ │
│ ┌───────────┐ ┌───────────┐ ┌─────────────┐ │
│ │ Content │ │ Node │ │ Job │ │
│ │ Tools │ │ Tools │ │ Manager │ │
│ └─────┬─────┘ └─────┬─────┘ └──────┬──────┘ │
│ │ │ │ │
│ └──────────────┼───────────────┘ │
│ │ │
│ ┌───────────▼───────────┐ │
│ │ Backend Layer │ │
│ │ (IPFSBackend) │ │
│ └───────────┬───────────┘ │
└───────────────────────┼─────────────────────────┘
│
┌─────────────┼─────────────┐
┌─────▼────┐ ┌─────▼────┐ ┌─────▼────┐
│ Helia │ │ Kubo │ │ Pinning │
│(embedded)│ │ API │ │ Services │
└──────────┘ └──────────┘ └──────────┘
✓ planned planned| Component | Responsibility |
|---|---|
| Content Tools | IPFS add/get/pin, IPNS, MFS, DAG operations |
| Node Tools | Status, peers, bandwidth, repo, DHT, config |
| Job Manager | Queue long operations, track progress, enable polling |
| Backend Layer | Abstract IPFS implementation details |
interface IPFSBackend {
// Lifecycle
start(): Promise<void>;
stop(): Promise<void>;
// Content
add(content: Uint8Array, options?: AddOptions): Promise<CID>;
get(cid: CID): Promise<Uint8Array>;
pin(cid: CID): Promise<void>;
unpin(cid: CID): Promise<void>;
// Node info
id(): Promise<PeerInfo>;
peers(): Promise<PeerConnection[]>;
// ... etc
}mcp-ipfs/
├── src/
│ ├── index.ts # Entry point
│ ├── server.ts # MCP server setup
│ ├── tools/
│ │ ├── content.ts # Content operations
│ │ ├── node.ts # Node monitoring
│ │ └── jobs.ts # Job management
│ ├── backends/
│ │ ├── interface.ts # Backend abstraction
│ │ └── helia.ts # Helia implementation
│ ├── jobs/
│ │ └── manager.ts # Job queue
│ └── config.ts # Configuration
├── test/
│ ├── content.test.ts
│ ├── node.test.ts
│ └── jobs.test.ts
├── docs/
│ └── plans/ # Design documents
├── package.json
├── tsconfig.json
└── mcp-ipfs.config.json# Install dependencies
npm install
# Run in development mode
npm run dev
# Run tests
npm test
# Build for production
npm run build
# Lint
npm run lintContributions are welcome! Please read our contributing guidelines before submitting PRs.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)MIT License - see LICENSE for details.
<p align="center"> Built with ❤️ for the decentralized web </p>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.