Fula MCP Server
Let AI assistants read and write files in a folder you share with them, inside your own encrypted Fula storage
What It Is
The Fula MCP server lets AI assistants — like Claude, ChatGPT, Gemini, or Codex — read and write files in a collaboration folder you share with them, inside your Fula storage. Files the AI writes are encrypted in exactly the same end-to-end-encrypted format the FxFiles app uses, so they appear right alongside your own files in FxFiles.
The important part: the AI only ever gets access to the specific folder you share with it — the same way you would share a folder with another person. It never receives the key that decrypts your other files, and your master encryption key never leaves your device or is given to any AI or server.
MCP (Model Context Protocol) is the open standard AI assistants use to connect to external tools. The Fula MCP server is one such tool: it exposes a small set of "read / list / search / store / create-folder / remove" file operations, scoped to the one collaboration folder you shared.
🤖 For your AI assistant
Give an AI a shared folder to keep notes, documents, and results that persist across chats — encrypted, decentralized, and owned by you.
🔐 Same encryption as FxFiles
Every file the AI stores is individually encrypted in the FxFiles format. Open FxFiles and the AI's files are simply there in that folder, decryptable by you.
🔑 Your other files stay private
The AI can reach only the folder you explicitly shared with it — never your master key, and never any of your other files.
🧩 Built on an open standard
Works with any MCP-capable assistant. No proprietary plugin — just the standard Model Context Protocol.
Two Ways to Use It
There are two ways to connect an AI to a collaboration folder in your Fula storage. Pick the one that matches your AI assistant:
💻 Local binary
For desktop / terminal AI tools that run on your own computer — Claude Desktop, Claude Code, Codex CLI, Gemini CLI. The MCP server runs locally on your machine. No build step: it starts with a single npx command.
🌐 Hosted connector
For web AI assistants that can only reach a URL — Claude.ai, ChatGPT (web). You add the hosted connector URL https://mcp.cloud.fx.land/mcp as a custom connector and sign in with Google.
Not sure which? If your AI runs as an app or in a terminal on your computer, use the local binary. If you use the AI through a website, use the hosted connector.
Local Binary Setup
The local server is published as an npm package, @functionland/fula-mcp. You never build anything — npx downloads a verified, prebuilt binary for your platform the first time it runs and caches it. Your AI client launches it automatically.
npx @functionland/fula-mcp
In every client below you paste a connection bundle into the FULA_MCP_CAPABILITY environment variable. You get that bundle from FxFiles when you share a folder with the AI — open a Collaborate folder, tap Share with AI Agent, and copy the Desktop configuration (see How to Connect). It grants access to that one shared folder — not your master key.
Tip: Run npx -y @functionland/fula-mcp once in a terminal first. This warms the binary cache so your AI client does not time out waiting for the first download.
Click a client to expand its setup:
Claude Desktop
Edit claude_desktop_config.json (on Windows: %APPDATA%\Claude\claude_desktop_config.json; on macOS: ~/Library/Application Support/Claude/claude_desktop_config.json) and add a fula entry under mcpServers, then fully quit and reopen Claude Desktop:
{
"mcpServers": {
"fula": {
"command": "npx",
"args": ["-y", "@functionland/fula-mcp"],
"env": {
"FULA_MCP_CAPABILITY": "<paste your connection bundle from FxFiles>"
}
}
}
}
Claude Code
Claude Code stores MCP servers in the same mcpServers shape (in .mcp.json). The simplest way to add one with an environment variable is the add-json command:
claude mcp add-json fula '{
"type": "stdio",
"command": "npx",
"args": ["-y", "@functionland/fula-mcp"],
"env": { "FULA_MCP_CAPABILITY": "<paste your connection bundle from FxFiles>" }
}'
Use --scope user to make the server available across all your projects, or --scope project to share it with a repo via a checked-in .mcp.json.
Codex CLI
Codex reads MCP servers from ~/.codex/config.toml. Add a server section — note the table name is mcp_servers (with an underscore), and the environment variables go in a nested .env table:
[mcp_servers.fula] command = "npx" args = ["-y", "@functionland/fula-mcp"] [mcp_servers.fula.env] FULA_MCP_CAPABILITY = "<paste your connection bundle from FxFiles>"
Or add it from the command line:
codex mcp add fula --env FULA_MCP_CAPABILITY="<bundle>" -- npx -y @functionland/fula-mcp
Gemini CLI
Gemini CLI uses the same mcpServers object in its settings.json:
{
"mcpServers": {
"fula": {
"command": "npx",
"args": ["-y", "@functionland/fula-mcp"],
"env": { "FULA_MCP_CAPABILITY": "<paste your connection bundle from FxFiles>" }
}
}
}
Note: The @functionland/fula-mcp package and its config shape match the package's own README. MCP client configuration formats do change between releases — if an example does not match your installed version, check that client's current MCP documentation and use its mcpServers / mcp_servers equivalent with the same command, args, and FULA_MCP_CAPABILITY environment variable.
Hosted Connector Setup (Web AIs)
Web-based AI assistants (Claude.ai, ChatGPT on the web) cannot launch a local program — they can only reach a server over the internet. For those, add the hosted Fula MCP connector:
https://mcp.cloud.fx.land/mcp
You add that URL as a custom connector in your AI, sign in with Google (use the same Google account you use in FxFiles), and the sign-in confirmation page shows your AI's Fula ID to copy. You then share a Collaborate folder with that Fula ID in FxFiles (see How to Connect).
Click your web AI to expand its setup:
Claude.ai (web)
- In Claude.ai, open Settings → Connectors and choose Add custom connector.
- Paste the URL
https://mcp.cloud.fx.land/mcpand add it. - Sign in with Google when prompted — the same account you use in FxFiles.
- On the confirmation page, Copy your AI's Fula ID, then click Finish connecting to return to Claude. (Didn't copy it? Ask the AI later: "What is my Fula id?")
- In FxFiles, share a Collaborate folder with that Fula ID (see How to Connect).
Custom connectors are a paid-plan feature on Claude.ai (Pro / Max / Team / Enterprise). If you don't see "Add custom connector", that is usually why.
ChatGPT (web)
- In ChatGPT's Settings, add a custom connector (a remote MCP server).
- Add the URL
https://mcp.cloud.fx.land/mcp. - Sign in with Google when prompted — the same account you use in FxFiles.
- On the confirmation page, Copy your AI's Fula ID, then finish to return to ChatGPT. (Didn't copy it? Ask the AI later: "What is my Fula id?")
- In FxFiles, share a Collaborate folder with that Fula ID (see How to Connect).
Custom MCP connectors on ChatGPT require an eligible plan, and the exact menu labels vary by ChatGPT version — but the flow is the same: add the URL above, sign in with Google, copy the Fula ID. Each AI (Claude vs ChatGPT) gets its own distinct Fula ID, so share the folder with each one separately.
Self-hosting (advanced). The hosted connector is a Cloudflare Worker (an OAuth 2.1 server built on @cloudflare/workers-oauth-provider, running the same Fula crypto WASM as FxFiles, with per-connection custody). The key that wraps each connection's secrets is not held by the Worker — it lives in a self-hosted OpenBao (the open-source Vault fork) on your own server, a separate trust domain the Worker can call to wrap/unwrap but never export. To run your own instead of the default connector, the code lives in the cloudflare/ directory of the pinning-service repository (OpenBao installer under scripts/); deploy it with wrangler deploy and point your AI at your own Worker URL.
How to Connect
You grant an AI access from inside the FxFiles app (or the web app at files.fx.land) by sharing a Collaborate folder with it. You stay in control: you choose the folder, and you can revoke access at any time.
- Open FxFiles (app or web) and sign in as usual.
- Go to Shared → Collaborate and tap New Collaborate to create a shared folder (or open an existing one).
- Open that folder and tap the Share with AI Agent icon.
- Paste the AI's Fula ID in the box:
- Web AI (Claude.ai / ChatGPT): copy the Fula ID from the sign-in confirmation page — see Hosted Connector Setup.
- Desktop / terminal AI: the same dialog gives you the Desktop configuration (the
FULA_MCP_CAPABILITYvalue) to paste into your client — see Local Binary Setup.
That's it — the AI can now read and write files in that folder. Add files yourself and ask it to read them; ask it to write notes or results; or remove a file from the folder to revoke the AI's access to that file.
You choose the folder
The AI only ever sees the Collaborate folder(s) you shared with it — never your other files.
Each AI is separate
Every AI has its own Fula ID. Share a folder with one AI without giving any other AI access.
Revoke anytime
Stop sharing the folder (or disconnect the AI) to cut off future access — see how that takes effect in the security section.
The Desktop bundle is sensitive. For the local binary, the FULA_MCP_CAPABILITY bundle carries access to the shared folder. Treat it like a password: do not share it or commit it to a public repository. (It still cannot reach files outside the shared folder — but anyone holding it can use that folder until you revoke access.)
What the AI Can Do
The MCP server exposes a small, fixed set of file operations. The AI can only call these, and only within the collaboration folder you shared with it:
READ read a file
Read back a file from the shared folder (by file id or path). Anything outside the folder is refused before any network request is made.
LIST list files
Enumerate the files in the shared folder, optionally narrowed by category or sub-folder.
SEARCH search files
Find files in the shared folder by filename (case-insensitive substring match).
STORE store a file
Save a file into the shared folder. The file is individually encrypted and shows up in FxFiles alongside your own files in that folder.
CREATE FOLDER create a sub-folder
Create a sub-folder inside the shared folder to organize what it stores.
REMOVE remove a file
Remove a file from the shared folder's listing (a write-authorized session only; a read-only share cannot remove).
Scope is enforced, not advisory. Every operation is checked against the shared folder before any work happens — a request for anything outside it is denied outright. Whether a connection can write (store / create-folder / remove) or only read depends on how you shared the folder. (Tagging is not available in collaboration mode yet.)
Security, Privacy & Data Protection
This section states what is guaranteed and what the honest limits are. We do not claim more than the design delivers.
Guaranteed: the AI can never reach your other files on its own
This is the one absolute guarantee, and it holds for both the local binary and the hosted connector: the AI can never reach files you did not share with it on its own — without an explicit action by you. It rests on two independent mechanisms — either one alone would block access to your other files; both must be defeated for any leak, and the second does not depend on the cryptography of the first:
- 1. The master key is never shared. The AI never receives the master key that decrypts your files. When you share a Collaborate folder with the AI, it is given access to only that folder's contents — the same way you would share the folder with another person — and nothing else. Your master key never leaves your device and is never given to the AI or to any server, so the AI cannot reach any file outside the folders you shared.
- 2. The storage gateway independently enforces scope. The AI's access token is restricted by the storage gateway itself to the shared folder and the operations it is allowed. Even if the encryption were somehow bypassed, the gateway still refuses any request outside that scope. Crucially, isolation between different users comes from the gateway opening storage per account (keyed to your hashed user id and the token's subject) — not merely from a path prefix.
What "your other files" means: everything outside the Collaborate folders you shared — your main FxFiles library, encrypted under your master key — is never reachable by the AI on its own. The AI only ever sees the folders you explicitly shared with it, and nothing else. It can never reach your files unilaterally.
Your shared folder — local binary
With the local binary, the connection bundle lives in your AI client's configuration file on your own computer. The server is stateless: it loads the bundle into memory at startup, never writes secrets to disk, and never logs them.
Your responsibility: because the bundle sits in a config file on your machine, keep that file secure (do not paste it into shared chats or public repos). Anyone who obtains the bundle can use the shared folder until you revoke access — after which, with the gateway enforcing revocation (the standard deployment), their session is cut off within about 30 seconds; on a gateway without revocation enforcement it instead runs until its short-lived token expires (about an hour by default, up to 24). They still cannot reach your other files or your master key.
Your shared folder — hosted connector
The hosted connector — a Cloudflare Worker — is built so that a stolen database or disk reveals nothing useful: it stores each connection's secrets encrypted, with the encryption key held in a self-hosted OpenBao (a separate secrets vault on a server — a distinct trust domain from the Worker). The Worker must call OpenBao to decrypt in order to serve a request, and its OpenBao policy lets it only wrap/unwrap — never read or export the encryption key itself. (This holds as long as the OpenBao unseal/root keys are not kept on the same machine as the database.) For the default connector at mcp.cloud.fx.land this runs on Functionland's infrastructure; if you self-host the Worker, it runs entirely in your own trust domain.
Honest limit of any hosted server: a stolen database or disk alone reveals nothing (the secrets are encrypted, and the vault key is elsewhere). But a live, fully-compromised server — one an attacker actively controls while it is decrypting to serve requests — could read the shared folders of currently-active sessions. This is unavoidable for any server that decrypts data to hand it to an AI. Even then, it can never reach your master key, and never your files outside the folders you shared. Self-hosting the connector keeps that risk inside your own trust domain.
Connection model & revoking access
You connect once, and it keeps working until you disconnect. The AI carries a short-lived session token (about an hour by default, and at most 24 hours if a server is configured for a longer lifetime) and cannot renew it on its own.
When you Disconnect a connection in FxFiles, two things happen: the pairing is removed (so the AI gets no new access from that moment), and the connection is revoked on the server. With the storage gateway enforcing revocation — the recommended, standard deployment — the gateway refreshes its revocation deny-list on a short interval and cuts the AI off within about 30 seconds, well before the session token would have expired on its own.
Honest note: the near-instant (~30 second) cut-off depends on the gateway running with revocation enforcement enabled — the recommended, standard configuration. If a gateway is deployed without revocation enforcement, "Disconnect" still stops renewal, but a session already in progress then ends only when its short-lived token expires (default ~1 hour, at most 24). Either way, once cut off the AI is permanently locked out, and files it already stored remain in your library.
Encryption
- Every file is individually encrypted with its own random per-file key (a fresh data-encryption key per file), using authenticated encryption (AES-256-GCM by default; ChaCha20-Poly1305 is also supported).
- Per-file keys are wrapped to recipients, so a file the AI writes can be unwrapped by you (its owner) without exposing any other file's key.
- Metadata privacy. Filenames and paths are not stored in the clear: storage keys are obfuscated (hashed), and the index that maps your logical paths to stored objects is itself encrypted. An observer of raw storage does not learn your filenames or folder structure. (As with any storage service, the operator can still see coarse metadata such as file sizes and access timing — but not your content, filenames, or folder structure.)
In short: the guarantee that the AI cannot reach files you did not share on its own is absolute (two independent mechanisms, local and hosted alike); it only ever sees the Collaborate folders you shared with it. That sharing is strong but has the honest limits stated above — a stolen local bundle, or a live-compromised hosted server, can expose the shared folder (never your master key, never your other files). We deliberately do not claim "100% everything."