Skip to main content
Glama

What is MCP-IPFS?

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.

Why MCP-IPFS?

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


Related MCP server: Filesystem MCP Server

๐Ÿš€ Quick Start

Prerequisites

  • Node.js 18+

  • Claude Code CLI or any MCP-compatible client

Installation

# Clone the repository
git clone https://github.com/EricGrill/mcp-ipfs.git
cd mcp-ipfs

# Install dependencies
npm install

# Build
npm run build

Add to Claude Code

Add to your ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "ipfs": {
      "command": "node",
      "args": ["/path/to/mcp-ipfs/dist/index.js"]
    }
  }
}

Verify Installation

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

โœจ Features

๐Ÿ“ฆ Content Operations

  • Add & retrieve text, JSON, files, directories

  • Pin management to prevent garbage collection

  • IPNS publishing for mutable names

  • MFS (Mutable File System) for familiar file operations

  • DAG operations for advanced IPLD data structures

๐Ÿ”ญ Node Monitoring

  • Node identity and health status

  • Peer connections with latency and direction

  • Bandwidth statistics total and per-protocol

  • Repository stats and garbage collection

  • DHT operations for peer/content discovery

โšก Background Jobs

  • Async operations for large files and slow networks

  • Progress tracking with real-time updates

  • Job management - list, poll, cancel

  • Auto-detection - small ops return immediately

๐Ÿ”Œ Pluggable Backends

  • Helia (embedded) - zero external dependencies

  • Kubo (planned) - connect to existing go-ipfs nodes

  • Pinning Services (planned) - Pinata, Web3.Storage


๐Ÿ›  Tools

Content Tools

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

IPNS Tools

Tool

Description

ipns_publish

Publish CID to IPNS name

ipns_resolve

Resolve IPNS name to current CID

ipns_keys_list

List available IPNS keys

MFS Tools (Mutable File System)

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

DAG Tools

Tool

Description

dag_put

Store IPLD data, returns CID

dag_get

Retrieve IPLD node, optionally traverse path

Node Tools

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

DHT Tools

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

Job Tools

Tool

Description

job_status

Get status of background job

jobs_list

List all jobs

job_cancel

Cancel running job


โš™๏ธ Configuration

Configuration File

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

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

Persistence Modes

Persistent (default):

  • Content survives server restarts

  • Uses LevelDB blockstore

  • Recommended for production

In-memory:

  • Content lost on restart

  • Faster for testing

  • Set persistence.enabled: false


๐Ÿ— Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   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

Key Components

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

Backend Interface

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
}

๐Ÿ“ Project Structure

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

๐Ÿงช Development

# Install dependencies
npm install

# Run in development mode
npm run dev

# Run tests
npm test

# Build for production
npm run build

# Lint
npm run lint

๐Ÿค Contributing

Contributions are welcome! Please read our contributing guidelines before submitting PRs.

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request


Learn More

Community


๐Ÿ“œ License

MIT License - see LICENSE for details.


๐Ÿ™ Acknowledgments


A
license - permissive license
-
quality - not tested
F
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/EricGrill/mcp-ipfs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server