Back to browse
GitHub Repository

Mount MCP servers as a filesystem. Plan 9 for the agent era.

4 starsGo

Mcpfs – Mount MCP servers as FUSE filesystems

by evoleinik·Mar 4, 2026·2 points·0 comments

AI Analysis

●●●BangerBig BrainZero to OneSolve My Problem

Plan 9 abstraction for APIs—cat/jq replaces 20K token schemas and service-specific CLIs.

Strengths
  • Radically simpler UX: one unified interface (ls, cat, jq) across all MCP servers—no flag memorization.
  • Enables cross-service composition impossible with individual CLIs: comm -23 <(stripe) <(posthog) works natively.
  • Fills real gap for CLI-less services (PostHog, Linear, Notion) that only expose API.
Weaknesses
  • Linux/macOS only (FUSE requirement), no Windows story limits adoption.
  • Relies on MCP ecosystem maturity; if MCP servers are fragile/incomplete, filesystem abstraction fails gracefully.
Target Audience

Backend developers, DevOps engineers, agents/LLM workflows

Similar To

MCP protocol itself · kubectl -o json wrapper approaches · native service CLIs (gh, stripe)

Post Description

CLIs are programs. Files are data. When you run "stripe balance retrieve", you're executing a program to get data that already exists. That's the wrong abstraction.

I built mcpfs to treat API data as what it is — files:

cat /mnt/mcpfs/stripe/balance.json | jq cat /mnt/mcpfs/posthog/dashboards.json | jq '.[].name' cat /mnt/mcpfs/linear/issues.json | jq '.[].title'

Every service works the same way. No flags to remember — not "gh --json --jq", not "stripe --format json", not "kubectl -o json". Just cat | jq. Discovery is ls. You already know the entire interface.

You can compose native CLIs too — but you need to remember each one's JSON flags, and some services (PostHog, Linear, Notion) have no CLI at all. With mcpfs every service is the same syntax, so cross-service pipes just work:

# Paying customers with no analytics activity comm -23 \ <(cat /mnt/mcpfs/stripe/customers.json | jq -r '.[].email' | sort) \ <(cat /mnt/mcpfs/posthog/events.json | jq -r '.[].distinct_id' | sort)

For writes, where good CLIs exist (gh, stripe, kubectl), use them. For services with no CLI — PostHog, Linear, Notion — mcpfs proxies their upstream MCP tools into a CLI:

mcpfs-posthog create-feature-flag --key my-flag --active mcpfs-linear create_issue --teamId abc --title "Fix login bug"

Under the hood: each server is a Go binary (200–400 lines) that calls the service API and exposes data as MCP resources. mcpfs mounts them via FUSE. The MCP ecosystem has 18,000+ servers that all expose tools — mcpfs flips that: reads are resources (files), writes stay as tools (CLI).

git clone <https://github.com/airshelf/mcpfs> && cd mcpfs && go build ./...

<https://github.com/airshelf/mcpfs>

Similar Projects

Developer Tools●●Solid

Xlg – Jq for APIs

Browse Reddit and GitHub via Unix pipes plus MCP server for agents.

Solve My ProblemNiche Gem
alykirk
112mo ago