MindSync MCP
Local-first MCP server for multi-agent memory sync and focus conflict detection, enabling multiple coding agents to share a session registry and receive conflict warnings when focuses overlap.
README
MindSync AI
One Python MCP server for multi-agent teams: shared memory, focus conflict detection, an in-process event bus, and CLI agent dispatch (Codex, Claude, Gemini, Cursor, Aider, Grok).
| Layer | What it does |
|---|---|
| Core | Local-first focus registry + optional durable facts over SSH |
| Bus | Typed events (job.*, focus.changed, memory.updated, …) with monotonic seq |
| Dispatch | Spawn headless CLI agents, track jobs, cancel process trees |
No cloud account required. Remote sync is opt-in. Zero hard-coded hosts or personal paths.
Rename (v1.1.0): PyPI package and GitHub repo are now
mindsync-ai
(older installs usedmindsync-mcp). Import path and CLI stay the same:
import mindsync·mindsync.
Install
pip install mindsync-ai
Requires Python 3.10+.
From source:
git clone https://github.com/adityarya24/mindsync-ai.git
cd mindsync-ai
python -m pip install -e ".[dev]"
MCP client config
{
"mcpServers": {
"mindsync": {
"command": "mindsync"
}
}
}
Or:
{
"mcpServers": {
"mindsync": {
"command": "python",
"args": ["-m", "mindsync.server"]
}
}
}
(Windows: point at your venv’s python.exe if agents don’t share PATH.)
Tools (13)
Core memory / focus
| Tool | Purpose |
|---|---|
get_sync_context |
Local state + compiled truth (optional remote pull) |
update_focus |
Per-agent focus/project/branch/paths; conflict warnings → emits focus.changed |
queue_durable_fact |
Remote write or offline queue → emits memory.updated |
sync_offline_facts |
Flush offline queue; consolidate + pull truth |
pull_truth |
Windows-safe SCP pull of compiled-truth markdown |
health |
Paths, queue depth, remote reachability |
Event bus
| Tool | Purpose |
|---|---|
publish_event |
Publish a typed event with payload |
poll_events |
Poll events since a sequence number |
subscribe_events |
Subscribe an agent to event types |
Agent dispatch
| Tool | Purpose |
|---|---|
delegate_task |
Run a CLI agent (foreground or background) |
job_status |
Job status + PID reconciliation |
job_result |
Read job result file |
job_cancel |
Cancel running job and kill its process tree |
Dispatch also auto-emits job.started, job.completed, and job.failed on the bus.
CLI (dispatch)
mindsync-dispatch agents
mindsync-dispatch run codex "summarize README" --background
mindsync-dispatch status
mindsync-dispatch result <job-id>
mindsync-dispatch cancel <job-id>
Jobs live under ~/.claude/agent-dispatch/jobs/ (override with AGENT_DISPATCH_HOME).
Custom agents: ~/.claude/agent-dispatch/agents.json.
Built-in presets: codex, claude, gemini, cursor, aider, grok.
Quick start (local only)
No env vars required for core + bus + dispatch. State lives under ~/.mindsync.
- Start:
get_sync_context(agent_name) - Work:
update_focus(agent_name, project, branch, focus, paths=[...]) - Milestone:
queue_durable_fact(agent_name, entity, attribute, text) - Delegate:
delegate_task(agent="codex", prompt="...", background=True) - Reconnect:
sync_offline_facts(agent_name)when remote is configured
Optional remote sync
Remote stays disabled until both are set:
export MINDSYNC_SSH_HOST=my-server # SSH config Host or user@host
export MINDSYNC_REMOTE_ROOT=/opt/mindsync # directory on that host
See .env.example and examples/remote/.
| Env var | Default | Meaning |
|---|---|---|
MINDSYNC_HOME |
~/.mindsync |
Local data root |
MINDSYNC_SSH_HOST |
(empty) | SSH host; empty disables remote |
MINDSYNC_REMOTE_ROOT |
(empty) | Remote project root |
MINDSYNC_REMOTE_ENV_FILE |
config/mindsync.env |
Sourced on remote before commands |
MINDSYNC_REMOTE_WRITE_SCRIPT |
tools/mindsync_fact.py |
Relative to remote root |
MINDSYNC_REMOTE_CONSOLIDATE_SCRIPT |
tools/mindsync_consolidate.py |
Relative to remote root |
MINDSYNC_REMOTE_TRUTH_SUBDIR |
compiled-truth |
Markdown summaries directory |
MINDSYNC_SSH_TIMEOUT |
3 |
SSH connect timeout (seconds) |
MINDSYNC_FOCUS_STALE_SECS |
7200 |
Ignore older focus entries |
MINDSYNC_REMOTE_CACHE_TTL |
30 |
Cache TTL for online probe |
MINDSYNC_LOCK_TIMEOUT |
5 |
Local lock wait (seconds) |
MINDSYNC_LOCK_STALE_SECS |
60 |
Steal lock after holder stops renewing |
SSH must be key-based / BatchMode-friendly.
Two machines (VPS + laptop)
Run MindSync AI on each machine for local focus/state. Share durable facts via one always-on host:
- VPS: deploy
examples/remote/scripts under e.g./opt/mindsync. - Laptop: set
MINDSYNC_SSH_HOST+MINDSYNC_REMOTE_ROOTto that VPS. - VPS itself: leave remote vars empty — it is the store.
Local data layout
Under MINDSYNC_HOME (default ~/.mindsync):
local-state.json— active project + per-agent focus maplocal-audit.jsonl— append-only action logoffline_queue.jsonl— durable facts waiting for remoteevents.jsonl— event bus logsubscriptions.json— event subscriptionscompiled-truth/*.md— pulled remote summaries.locks/— exclusive lockfiles
Layout
mindsync-ai/ # GitHub repo
├── mindsync/
│ ├── server.py # FastMCP tools (core + bus + dispatch)
│ ├── storage.py # JSON/JSONL + locks
│ ├── bridge.py # optional SSH/SCP
│ ├── conflict.py # focus overlap
│ ├── config.py # env-based settings
│ ├── bus/ # Event bus engine
│ └── dispatch/ # Agent dispatch (presets, runner, CLI)
├── examples/remote/
├── tests/
└── pyproject.toml # PyPI: mindsync-ai
Develop / test
python -m pip install -e ".[dev]"
python -m pytest -q
python scripts/smoke_test.py
CI runs on every push/PR to master (Python 3.10 / 3.12 / 3.13 × Ubuntu + Windows).
Design principles
- Offline-first — local tools always work; remote is opt-in.
- Locked local state — exclusive locks around state/queue/events.
- Safe remote writes — identifier allowlists + base64 text over SSH.
- No false-positive conflicts — same project alone is not a conflict.
- Generic by default — zero personal paths in code.
- Safe dispatch — model tokens validated; Windows
.cmd/.batarg-mode prompts blocked.
Security notes
- Runs with the privileges of the executing user. Wire only into trusted local agents.
- Pulled remote truth is treated as untrusted (filename/UTF-8 validation, atomic swap).
- Local store defaults to Unix
0700dirs /0600files where the OS allows. - SSH errors are scrubbed before return to clients.
Full details: SECURITY.md.
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.