-
Notifications
You must be signed in to change notification settings - Fork 155
Description
Summary
In v0.16+, the mcp CLI command is hidden when cloud mode is enabled. This prevents using Basic-Memory across the full Anthropic ecosystem (Claude Code, Claude Desktop, claude.ai, Mobile) — each has different MCP capabilities. Request: restore v0.15 behavior where local MCP and cloud mode coexist.
Environment
- basic-memory versions tested: 0.17.7, 0.16.x
- Working version: 0.15.0 (both
mcpandcloudcommands available) - OS: macOS
- Python: 3.12 via pyenv
The Anthropic MCP Landscape
Through testing, I discovered that different Claude surfaces have different MCP connector capabilities:
| Claude Surface | Local MCP (stdio) | Remote MCP (cloud) | Config Source |
|---|---|---|---|
| Claude Code (terminal) | ✅ | ❌ | ~/.claude.json only |
| Claude Code (in Desktop) | ✅ | ❌ | ~/.claude.json only |
| Claude Desktop (chat) | ✅ | ✅ | JSON + account sync |
| Cowork (Desktop agentic) | ✅ | ✅ | JSON + account sync |
| claude.ai (web) | ❌ | ✅ | Account connectors only |
| Mobile (iOS/Android) | ❌ | ✅ | Inherited from account |
Key findings from Anthropic docs:
- Remote connectors (custom connectors) sync across account — add in claude.ai, appears in Desktop/Mobile
- Local connectors (JSON config) do NOT sync — per-installation only
- Claude Desktop will NOT connect to remote servers configured directly in
claude_desktop_config.json
The implication: To cover all Claude surfaces, you need BOTH local MCP (for Code terminal) AND cloud MCP (for web/mobile).
The Problem
Basic-Memory v0.16+ assumes these are mutually exclusive:
# From src/basic_memory/cli/commands/mcp.py
if not config.cloud_mode_enabled:
@app.command()
def mcp(...)This breaks my workflow:
| Surface | What I need | Status with v0.17 |
|---|---|---|
| Claude Code | Local stdio MCP (fast, offline) | ❌ mcp command hidden |
| Claude Desktop | Local stdio MCP (faster than cloud) | ❌ mcp command hidden |
| claude.ai | Cloud MCP (only option) | ✅ Works |
| Mobile | Cloud MCP (inherited) | ✅ Works |
Why mcp-remote doesn't help: Claude Desktop can use mcp-remote as a bridge to remote servers, but mcp-remote cannot handle OAuth authentication. Basic-Memory Cloud's endpoint returns 404 without OAuth.
My Desired Setup (local-first)
┌─────────────────────────────────────────────────────────────────────────┐
│ CORPUS (markdown files) │
│ ~/corpus/ (local, Git-versioned) │
└─────────────────────────────────────────────────────────────────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ │
┌───────────────┐ ┌───────────────┐ │
│ Claude Code │ │ Desktop/Cowork │ │
│ (terminal) │ │ │ │
│ │ │ │ │
│ Local MCP │ │ Local MCP │ │
│ (stdio) │ │ (stdio, fast) │ │
└───────┬───────┘ └───────┬───────┘ │
│ │ │
└───────────┬───────────┘ │
│ │
▼ │
bisync daily │
│ │
▼ │
┌───────────────────┐ │
│ Basic-Memory Cloud │◄────────────────────────┘
│ (backup + mobile │
│ access) │ ┌───────────────┐
│ │◄───────│ claude.ai/ │
└───────────────────┘ │ Mobile │
│ │
│ Cloud MCP │
│ (account) │
└───────────────┘
Benefits:
- Local MCP is faster (no network round-trip)
- Works offline
- Cloud is backup + enables web/mobile access
- Sync when convenient, not required for every query
Current Workaround
Pin to v0.15.0:
{
"mcpServers": {
"basic-memory": {
"command": "uvx",
"args": ["basic-memory@0.15.0", "mcp", "--project", "corpus"]
}
}
}And toggle cloud mode only when syncing:
uvx basic-memory@0.15.0 cloud login && \
uvx basic-memory@0.15.0 project bisync --name mikrub-corpus && \
uvx basic-memory@0.15.0 cloud logoutThis works but:
- Stuck on old version (missing fixes/features)
- Awkward login/logout dance for sync
- Easy to forget logout and break local MCP
Proposed Solutions
Option A: Always register mcp command (simplest)
Remove the conditional guard. Let users choose which transport they want.
# Always available, regardless of cloud mode
@app.command()
def mcp(...)Option B: Add --local flag
Keep the guard but provide escape hatch:
bm mcp --local --project corpus # Force local even with cloud modeOption C: Separate "cloud sync" from "cloud MCP"
The real need is:
- Cloud SYNC: bisync files to cloud for backup/multi-device
- Cloud MCP: route MCP queries through cloud
These don't have to be coupled. Could have:
bm cloud sync enable— just syncingbm cloud mcp enable— route MCP through cloud (disables local)
Why This Matters
The Anthropic ecosystem is fragmented — Claude Code, Desktop, web, and mobile all have different MCP capabilities. Users shouldn't have to choose between "cloud features" and "local MCP" when both are needed to cover all surfaces.
Basic-Memory is one of the few tools that can bridge this gap with both local and cloud MCP. v0.16+ accidentally breaks that capability.
Related
- The
toolsubcommand remains available in cloud mode, suggesting MCP protocol itself isn't the issue - This may be an oversight in the API v2 migration
For others hitting this: Pin to basic-memory@0.15.0 until resolved.