Skip to main content
Glama

Storacha MCP Storage Server

Official
by storacha
integrations.md8.86 kB
# How to integrate with Storacha MCP Storage Server ## Start Your Server You can run the MCP server in multiple different modes: - **Local Communication** ```bash pnpm start:stdio ``` - **Remote Communication (SSE)** ```bash pnpm start:sse ``` - **Remote Communication (REST)** ```bash pnpm start:rest ``` ## Client Integrations You can integrate your client with Storacha MCP Storage Server with any of the following patterns. ### SDK (stdio mode) Uses standard I/O streams for local communication. ```typescript import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; // Create the transport for communication const transport = new StdioClientTransport({ command: 'node', args: ['dist/index.js'], env: { ...loadEnvVars(), MCP_TRANSPORT_MODE: 'stdio', }, }); // Instantiate the MCP client client = new Client( { name: 'test-client', version: '1.0.0', }, { capabilities: { tools: {}, }, } ); // Connect to the server await client.connect(transport); ``` ### SDK (sse mode) Uses Express with SSE for HTTP-based communication. ```typescript import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'; const transport = new SSEClientTransport(new URL(`http://${HOST}:${PORT}/sse`)); // Instantiate the MCP client client = new Client( { name: 'test-client', version: '1.0.0', }, { capabilities: { tools: {}, }, } ); // Connect to the server await client.connect(transport); ``` ### SDK (rest mode) Uses Express with REST for HTTP-based communication. This mode is compatible with MCP.so cloud hosting. ```typescript import { fetch } from 'node-fetch'; // Make direct JSON-RPC requests to the REST endpoint async function callTool(toolName, args) { const response = await fetch(`http://${HOST}:${PORT}/rest`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ jsonrpc: '2.0', id: 'client-request', method: 'tools/call', params: { name: toolName, arguments: args, }, }), }); return await response.json(); } // Example: Upload a file const fileContent = Buffer.from('test content').toString('base64'); const result = await callTool('upload', { file: fileContent, name: 'test-file.txt', }); ``` ### MCP Client Config Most MCP clients store the configuration as JSON in the following format: ```jsonc { "mcpServers": { "storacha-storage-server-stdio": { "command": "node", "args": ["./dist/index.js"], "env": { // The server supports `stdio`, `sse`, and `rest` modes, the default is `stdio`. "MCP_TRANSPORT_MODE": "stdio", // The Storacha Agent private key that is authorized to store data into the Space. "PRIVATE_KEY": "<agent_private_key>", // The base64 encoded delegation that proves the Agent is allowed to store data. If not set, MUST be provided for each upload request. "DELEGATION": "<base64_delegation>", }, "shell": true, "cwd": "./", }, }, } ``` Replace `<agent_private_key>` and `<base64_delegation>` with your actual values. ### Docker You can run the Storacha MCP Storage Server in a Docker container, which makes it easy to deploy across different environments without worrying about dependencies or configuration. It uses SSE mode by default but can be configured to use REST mode. ### Building the Docker Image ```bash docker build -t storacha-mcp-server . ``` ### Running the Server in SSE Mode ```bash docker run -p 3000:3000 \ -e PRIVATE_KEY="<agent_private_key>" \ -e DELEGATION="<base64_delegation>" \ -e MCP_TRANSPORT_MODE="sse" \ -e MCP_SERVER_PORT="3001" \ storacha-mcp-server ``` ### Running the Server in REST Mode ```bash docker run -p 3001:3001 \ -e PRIVATE_KEY="<agent_private_key>" \ -e DELEGATION="<base64_delegation>" \ -e MCP_TRANSPORT_MODE="rest" \ -e MCP_SERVER_PORT="3001" \ storacha-mcp-server ``` Replace `<agent_private_key>` and `<base64_delegation>` with your actual values. In case you want to keep the private key and delegation in a `.env` file, you can run the following: ```bash source .env && docker run -p 3001:3001 \ -e PRIVATE_KEY="$PRIVATE_KEY" \ -e DELEGATION="$DELEGATION" \ -e MCP_TRANSPORT_MODE=rest \ -e MCP_SERVER_PORT=3001 \ storacha-mcp-server ``` Test the REST connection: ```bash curl -X POST http://127.0.0.1:3001/rest -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":"2","method":"tools/list"}' | jq ``` ### Environment Variables | Variable | Description | Default | | -------------------- | ------------------------------------------ | --------- | | `MCP_TRANSPORT_MODE` | Transport mode (`stdio`, `sse`, or `rest`) | `stdio` | | `MCP_SERVER_PORT` | Port for SSE or REST mode | `3001` | | `MCP_SERVER_HOST` | Host for SSE or REST mode | `0.0.0.0` | | `PRIVATE_KEY` | The Storacha Agent private key | required | | `DELEGATION` | Base64 encoded delegation | optional | ### Docker Compose Example ```yaml version: '3' services: storacha-mcp: build: context: . ports: - '3001:3001' environment: - PRIVATE_KEY=<agent_private_key> - DELEGATION=<base64_delegation> - MCP_TRANSPORT_MODE=rest - MCP_SERVER_PORT=3001 ``` ### MCP Client Configuration for Docker SSE Mode When using the Docker container in SSE mode, configure your MCP client to connect to the SSE endpoint. For Cursor IDE or other MCP clients, you can use this configuration: ```jsonc { "mcpServers": { "storacha-storage-server-sse": { "url": "http://localhost:3000/sse", }, }, } ``` ### MCP.so Cloud Hosting The Storacha MCP Storage Server can be deployed to MCP.so cloud using the REST transport mode. This allows your server to be accessible from anywhere without having to manage your own infrastructure. Find the Storacha MCP Storage Server on the [MCP Playground](https://mcp.so/playground?server=storacha-storage), set the Private Key and the Delegation, and you are ready to go. For more details on hosting your MCP server on MCP.so, see the [official documentation](https://docs.mcp.so/server-hosting). ### Tools #### List Tools ```typescript const response = await client.listTools(); console.log(response.tools.map(tool => tool.name)); // output: ['identity', 'retrieve', 'upload'] ``` #### Identity: get the Agent's DID Key ```typescript // Get the agent's DID key const response = await client.callTool({ name: 'identity', arguments: {}, // Send an empty object }); console.log('Agent DID:', JSON.parse(response.content[0].text)); // output: {"id":"did:key:z6MkjiNpY1QhuULQUkF5thrDbVz2fZwg49zYMg4a7zY1KDr9"} ``` ##### Upload: store files ```typescript // Upload a file to the storage space defined in the delegation set in the MCP Server const fileBuffer = new Uint8Array([1, 2, 3]); const base64File = Buffer.from(fileBuffer).toString('base64'); const response = await client.callTool({ name: 'upload', arguments: { file: base64File, name: 'example.txt', }, }); console.log(response.content[0].text); // output: {"files":{"example.txt":{"/":"bafkreidr7okkzyl5ntqq6na4icgemmlhqpsznofxy6os4aokh3ut3fwwhy"}},"root":{"/":"bafybeie6poiv6nbaapjzvje2cqkm43j745446x4ghshnzvp6pdlbpmxc4e"},"url":"https://storacha.link/ipfs/bafybeie6poiv6nbaapjzvje2cqkm43j745446x4ghshnzvp6pdlbpmxc4e"} ``` ##### Upload: store files using a custom delegation ```typescript // Upload a file to the storage space defined in the delegation set in the upload request const response = await client.callTool({ name: 'upload', arguments: { file: base64File, name: 'example.txt', delegation: base64Delegation, }, }); console.log(response.content[0].text); // output: {"files":{"example.txt":{"/":"bafkreidr7okkzyl5ntqq6na4icgemmlhqpsznofxy6os4aokh3ut3fwwhy"}},"root":{"/":"bafybeie6poiv6nbaapjzvje2cqkm43j745446x4ghshnzvp6pdlbpmxc4e"},"url":"https://storacha.link/ipfs/bafybeie6poiv6nbaapjzvje2cqkm43j745446x4ghshnzvp6pdlbpmxc4e"} ``` _Read the [step-by-step guide](https://docs.storacha.network/concepts/ucan/#step-by-step-delegation-with-w3cli) to learn how to create a delegation using the CLI._ #### Retrieve: get a file by CID and filepath ```typescript const response = await client.callTool({ name: 'retrieve', arguments: { filepath: 'bafybeie6poiv6nbaapjzvje2cqkm43j745446x4ghshnzvp6pdlbpmxc4e/example.txt', }, }); console.log(response.content[0].text); // Base64 encoded data // output: {"data":"IyBDdX...3Agc2VydmVy"} ```

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/storacha/mcp-storage-server'

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