MCP server for decentralized file storage on Filecoin Onchain Cloud
@fil-b/foc-storage-mcp lets AI agents store and retrieve files on Filecoin's decentralized network through the Model Context Protocol (MCP), with automatic payment handling, CDN support, and dataset management.
- π οΈ 11 MCP Tools - Upload, manage, price, and pay for storage operations
- π Dataset Organization - Group related files efficiently
- π³ Automatic Payments - Built-in USDFC handling with gasless permits
- β‘ CDN Support - Fast retrieval for frequently accessed files
- π° Cost Estimation - Calculate costs, explain pricing, convert units
- π€ AI-Ready - Designed for Claude, Cursor, and MCP clients
Requirements:
- Node.js >= 20.10.0 (Check version:
node --version) PRIVATE_KEY- Your Filecoin wallet private key (0x...)
Optional:
FILECOIN_NETWORK-mainnet(production) orcalibration(testing, default)TOTAL_STORAGE_NEEDED_GiB- Default storage capacity for calculations (default: 150 GiB)PERSISTENCE_PERIOD_DAYS- Data retention duration (default: 365 days)RUNOUT_NOTIFICATION_THRESHOLD_DAYS- Balance warning threshold (default: 45 days, recommended >30)SYNAPSE_SOURCE- Source tag identifying this client to Synapse (default:foc-storage-mcp)
Note: Filecoin warm storage requires 30 days paid upfront. Keep balance above 30 days to maintain service.
Jump to: Cursor | Claude Code | Claude Desktop | VS Code | Windsurf | Codex | Other
After installation, update PRIVATE_KEY in your config. Learn more
Add to .mcp.json:
{
"mcpServers": {
"foc-storage": {
"command": "npx",
"args": ["-y", "@fil-b/foc-storage-mcp"],
"env": {
"PRIVATE_KEY": "your_private_key_here",
"FILECOIN_NETWORK": "calibration"
}
}
}
}Add to claude_desktop_config.json:
{
"mcpServers": {
"foc-storage": {
"command": "npx",
"args": ["-y", "@fil-b/foc-storage-mcp"],
"env": {
"PRIVATE_KEY": "your_private_key_here",
"FILECOIN_NETWORK": "calibration"
}
}
}
}Create .vscode/mcp.json:
{
"servers": {
"foc-storage": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@fil-b/foc-storage-mcp"],
"env": {
"PRIVATE_KEY": "your_private_key_here",
"FILECOIN_NETWORK": "calibration"
}
}
}
}Enable: Settings β Chat β MCP. Click "start" in mcp.json (Agent mode only). Learn more
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"foc-storage": {
"command": "npx",
"args": ["-y", "@fil-b/foc-storage-mcp"],
"env": {
"PRIVATE_KEY": "your_private_key_here",
"FILECOIN_NETWORK": "calibration"
}
}
}
}Restart Windsurf. Learn more
codex mcp add foc-storage -- npx -y @fil-b/foc-storage-mcpEdit config to add environment variables. Verify: codex mcp list. Learn more
Most MCP tools support this format:
{
"mcpServers": {
"foc-storage": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@fil-b/foc-storage-mcp"],
"env": {
"PRIVATE_KEY": "your_private_key_here",
"FILECOIN_NETWORK": "calibration"
}
}
}
}Pricing is read from the live Synapse v1 price list. Storage is billed per epoch (30 seconds) using the per-TiB monthly rate plus a recurring per-dataset service fee for non-empty datasets. Uploads can also include one-time create-dataset and add-pieces fees, and CDN egress is usage-based.
π‘ Ask your agent: "How much to store 500 GiB for 6 months?"
npm test
npx tsc --noEmit
npm run build:mcp
npm run smoke:mcp:readonly
npm run buildsmoke:mcp:readonly starts the built stdio server and exercises read-only MCP
tools for pricing, providers, balances, and datasets. It deliberately skips
upload, payment, withdrawal, and dataset-creation transactions; run those only
with an intentionally funded Calibration wallet.
Ask naturally in Claude, Cursor, or any MCP client:
File Operations
uploadFile- Upload files with auto-paymentgetDatasets- List all stored datasetsgetDataset- Get dataset detailscreateDataset- Create new dataset container
Balance & Payments
getBalances- Check wallet and storage metricsprocessPayment- Deposit USDFC tokensprocessWithdrawal- Withdraw a specified USDFC amount to your wallet
Providers & Pricing
getProviders- List storage providersestimateStoragePricing- Calculate costsgetStoragePricingInfo- Explain pricing modelsconvertStorageSize- Convert units
"Check my storage balance"
"Upload presentation.pdf with CDN enabled"
"How much to store 2 TB for 1 year?"
"Create a dataset for Q4 reports"
"Show all my datasets"
Server not found: Verify npx --version, check JSON syntax, restart IDE
"PRIVATE_KEY is required": Add to env section, must start with 0x
Transaction fails: Check FIL for gas, verify network setting, confirm USDFC balance
"Invalid Version" or npm dependency errors:
- Clear npm cache:
npm cache clean --force - Clear npx cache:
npx clear-npx-cache - Update npm:
npm install -g npm@latest - As last resort, use older npm:
npm install -g npm@10
- Never commit private keys or
.envfiles - Test on Calibration network before mainnet
- Keep balance >30 days (Filecoin warm storage requirement)
- Monitor balance regularly with
getBalances - Use hardware wallets for production
Contributions welcome! Open an issue for major changes.
MIT Β© @nijoe1
Built with β€οΈ by @FILBuilders for the Filecoin ecosystem