Symbol Bridge
Install Symbol Bridge to attach local files to capsules and read end-to-end encrypted capsules in Claude Desktop.
Do I Need This?
Most users don't need Symbol Bridge. The standard Symbol MCP handles everything: saving capsules, loading context, searching, and more.
You need Symbol Bridge if you want either of these:
- Local file attachments — attach files stored on your computer to a capsule (logs, screenshots, config files, etc.)
- End-to-end encrypted capsules — read and decrypt encrypted capsules locally, so plaintext never leaves your machine
If you're saving text-based context and don't use encryption, skip this page.
Attaching a file from the web? You don't need Symbol Bridge for that.
Any Symbol MCP — including hosted claude.ai Symbol — can attach a public
https:// image or file: just give the AI the URL and it's fetched
server-side. Symbol Bridge is for files that live on your own computer.
What is Symbol Bridge?
Symbol Bridge is a small companion tool that runs locally on your computer. It runs alongside the main Symbol MCP; you keep both connected at the same time.
It adds the following tools to your AI assistant:
File attachments:
- Create a capsule with attachments: save a capsule and attach files from your computer in one step
- Update a capsule with attachments: add files to an existing capsule
End-to-end encryption (E2EE):
- Read and decrypt encrypted capsules locally using your encryption keys
- Plaintext is never sent to Symbol's servers or your AI provider
Installation
Symbol Bridge ships as a Claude Desktop extension bundle (.mcpb). There is no
API key to paste — you approve the connection with your existing Symbol
sign-in.
Connect the hosted Symbol MCP first
Symbol Bridge is a companion, not a replacement. Follow Connect to Claude or Other AI Tools if you haven't already. You keep both connected.
Download the extension
Download Symbol Bridge — a stable URL that always serves the current release:
https://symbol.chat/download/symbol-desktop.mcpbYou can also get it from Settings → Connected Apps in Symbol.
Open it with Claude Desktop
Claude Desktop asks you to confirm the install, then to approve the connection to Symbol. Once approved, Symbol appears under Connected Apps in your settings.
Restart Claude Desktop
Quit and reopen the app. You'll now have the attachment tools alongside your existing Symbol tools.
Prefer automatic setup? The Symbol app's getting-started wizard installs the same bundle for you, reusing your existing sign-in. It's the identical artifact — pick whichever route you like.
Also use Claude Code?
Claude Desktop and Claude Code are separate apps with separate settings, so an extension installed in one doesn't show up in the other. Adding it to Claude Code is a single command:
unzip ~/Downloads/symbol-desktop.mcpb -d ~/symbol-bridge
claude mcp add symbol-bridge -s user -- node ~/symbol-bridge/server/server.mjs-s user makes it available in every project rather than just the current
one. Your sign-in carries over — Bridge stores credentials per machine, not
per app, so there's nothing to authorize again.
The same applies to Cursor, Windsurf, and anything else that speaks MCP; see Manual Install below.
Manual Install (Cursor, Windsurf, Claude Code, and others)
The .mcpb above is Claude Desktop's extension format. Every other MCP client
starts a local server itself, so you point it at the Bridge with a normal
stdio config instead.
The .mcpb is a zip. Unpack it and you have a self-contained server file that
any MCP client can run.
Unpack the bundle
curl -L -o symbol-bridge.mcpb https://symbol.chat/download/symbol-desktop.mcpb
unzip symbol-bridge.mcpb -d ~/symbol-bridgeThat gives you ~/symbol-bridge/server/server.mjs. Note the absolute
path — MCP clients do not resolve relative paths. Node.js 18+ is required.
Get an API key
- Sign in to symbol.chat
- Go to Settings → API Keys
- Click Create API key and copy it (it starts with
sym_)
Add it to your client's MCP config
The shape is the same everywhere — only the file location differs:
{
"mcpServers": {
"symbol-bridge": {
"command": "node",
"args": ["/absolute/path/to/symbol-bridge/server/server.mjs"],
"env": {
"SYMBOL_API_KEY": "sym_your_key_here"
}
}
}
}-
Cursor: Settings → MCP → Add new MCP server
-
Windsurf: Settings → AI → MCP Servers
-
Claude Code: skip the JSON entirely —
claude mcp add symbol-bridge -s user \ -e SYMBOL_API_KEY=sym_your_key_here \ -- node /absolute/path/to/symbol-bridge/server/server.mjs-s userregisters it for every project; the default (local) applies to the current directory only, which is the usual reason it "works in one project but not another". Drop-eif you have already signed in withsymbol-bridge-login.
Restart the client
Ask it "What Symbol tools do you have?" — you should see
create_capsule_with_attachments and update_capsule_with_attachments.
Claude Desktop by hand
If you would rather edit JSON than open the .mcpb, Claude Desktop uses the
same format. Settings → Developer → Edit Config opens the file, or edit it
directly:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Installing the .mcpb is still the better route on Claude Desktop: it signs
you in over OAuth, so no API key is written to a config file in plain text.
Use the manual path when you need a specific Node version or a checked-out
build.
Turning on encryption
Encrypted-capsule reading is off unless you ask for it. Add to the same env
block:
"env": {
"SYMBOL_API_KEY": "sym_your_key_here",
"SYMBOL_ENCRYPTION": "true",
"SYMBOL_RECOVERY_KEY": "your-recovery-key"
}SYMBOL_ENCRYPTION exposes the encrypted read tools. SYMBOL_RECOVERY_KEY
(Settings → Encryption → Recovery Key in the Symbol app) is a break-glass
path that lets the Bridge decrypt without the device-link flow — it derives your
E2EE master key directly, so the Bridge warns loudly at startup when it is set
and it is not part of the extension's default configuration. Prefer leaving
it out and linking a device instead (you'll be prompted). See
End-to-End Encryption.
Your recovery key decrypts every encrypted capsule you own, and this config
file stores it in plain text. Never commit it to a repository, paste it into a
chat, or share the file. Prefer device linking — leave SYMBOL_RECOVERY_KEY
out and approve the link from the Symbol app, so the key is derived on demand
and cached in your OS keychain rather than written to disk.
If you have previously signed in with the OAuth flow, ~/.symbol/config.json
may set auth.method to oauth, which takes precedence and makes
SYMBOL_API_KEY look ignored. Set it to apikey, or remove it to let the
Bridge choose.
Using File Attachments
Once connected, you can ask your AI:
"Save this as a Solution and attach the file at
/Users/me/logs/error.log"
The AI will use Symbol Bridge to read the file from your computer and attach it to the new capsule.
Symbol Bridge can only access files on your local machine. Files must exist on the computer where your AI client is running.
File access is deny-by-default. The Bridge reads files only from directories
you explicitly allow. List them in ~/.symbol/config.json under
"attachmentDirs" (or the SYMBOL_ATTACHMENT_DIRS env var):
{ "attachmentDirs": ["/Users/me/Downloads", "/Users/me/Desktop"] }With none configured, every disk read is refused. Paths outside those
directories, symlinks that escape them, and sensitive files are refused even
inside them — SSH/GPG keys, .env, keychains, browser profiles, cloud and
cluster credential stores (.aws, .kube, .docker, .azure, .gcloud),
and registry/VCS credential files (.npmrc, .pypirc, .git-credentials).
So listing your home directory as a root still does not expose your secrets.
This protects you from a prompt injection trying to make the assistant read
secrets off your machine.
Where configuration comes from, and which source wins. The API key can
live in the SYMBOL_API_KEY environment variable (your MCP client config) or
in an "apiKey" field in ~/.symbol/config.json. When both are set, the
environment variable wins. Attachment directories come from either the
SYMBOL_ATTACHMENT_DIRS env var or "attachmentDirs" in the config file, and
the same rule applies — by the variable's presence, not its contents. If
SYMBOL_ATTACHMENT_DIRS is set at all, it decides, and the config file's list
is ignored. A value that names no directory (SYMBOL_ATTACHMENT_DIRS=, blank,
or a bare :) therefore grants access to no directories. That is the
supported way to switch local file reads off from the environment without
editing the config file.
One practical difference: environment variables are read once, when the
server process starts. If you add or change SYMBOL_API_KEY in your client
config, the running Bridge won't see it until you reconnect/restart the server.
A key added to ~/.symbol/config.json, by contrast, is picked up on the next
tool call — no restart needed. Run the bridge_status tool any time to see
exactly what the Bridge resolved (key source, config-file state, attachment
directories, and API host) without touching a shell.
Attachments are not end-to-end encrypted, even on an encrypted capsule. The bytes are stored and served unencrypted, and anyone holding an attachment's URL can fetch them. Don't attach anything you wouldn't store in plaintext. See What E2EE covers. Large raster images are also resized and re-encoded on the server, so the stored bytes and size can differ from the file you sent and the original is not preserved.
Troubleshooting
The extension installed but no attachment tools appear
Restart Claude Desktop, then check that you approved the connection prompt. If you dismissed it, remove the extension and open the .mcpb again.
The tool appears but can't read my files
First check that the file's directory is listed in attachmentDirs
(~/.symbol/config.json) or SYMBOL_ATTACHMENT_DIRS — file access is
deny-by-default, so with none configured every read is refused. Then check the
path is correct and the file exists. On Mac, right-click a file and choose
Copy as Pathname to get the exact path.
I only see the attachment tools, not the main Symbol tools
Symbol Bridge doesn't include the full set of Symbol tools — it only adds file attachments and local decryption. Connect the hosted Symbol MCP alongside it.
Manual install: the server never starts
Almost always the path. MCP clients require an absolute path to
server/server.mjs — ~ and relative paths are not expanded. Check it runs
on its own first:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
| node /absolute/path/to/server/server.mjsYou should get a JSON list of tools. On Claude Desktop, the server's own error
output is logged to ~/Library/Logs/Claude/mcp-server-symbol-bridge.log
(macOS) or %APPDATA%\Claude\logs\ (Windows).
Manual install: my API key seems to be ignored
Run the bridge_status tool first — it reports whether a key is held, its
source, and the config-file state, so you don't have to guess.
If you just added SYMBOL_API_KEY to your client config and the next call still
fails with MISSING_KEY, the running server hasn't picked it up: environment
variables are read once at startup, so reconnect/restart the Bridge (or add
the key to ~/.symbol/config.json instead, which is re-read on the next call
without a restart).
If the key is set but still ignored, check ~/.symbol/config.json. If
auth.method is oauth, that wins over SYMBOL_API_KEY and the Bridge will
look for OAuth tokens instead. Set it to apikey, or remove the field.