{
  "markdown": "# vault-sync-mcp\n\n\n<!-- mycelium-badges:start -->\n\n<p>\n  <a href=\"https://github.com/adelaidasofia/vault-sync-mcp/blob/main/LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/github/license/adelaidasofia/vault-sync-mcp?color=blue\"></a>\n  <a href=\"https://github.com/adelaidasofia/vault-sync-mcp/stargazers\"><img alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/adelaidasofia/vault-sync-mcp?color=eab308\"></a>\n  <a href=\"https://github.com/adelaidasofia/vault-sync-mcp/commits/main\"><img alt=\"Last commit\" src=\"https://img.shields.io/github/last-commit/adelaidasofia/vault-sync-mcp\"></a>\n  <a href=\"https://github.com/adelaidasofia/vault-sync-mcp/issues\"><img alt=\"Open issues\" src=\"https://img.shields.io/github/issues/adelaidasofia/vault-sync-mcp\"></a>\n  <a href=\"https://pypi.org/project/adelaidasofia-vault-sync-mcp/\"><img alt=\"PyPI version\" src=\"https://img.shields.io/pypi/v/adelaidasofia-vault-sync-mcp?color=blue&label=pypi\"></a>\n  <a href=\"https://pypi.org/project/adelaidasofia-vault-sync-mcp/\"><img alt=\"PyPI downloads\" src=\"https://img.shields.io/pypi/dm/adelaidasofia-vault-sync-mcp?color=blue&label=downloads\"></a>\n  <a href=\"https://myceliumai.co\"><img alt=\"Built by Mycelium AI\" src=\"https://img.shields.io/badge/built_by-Mycelium_AI-15B89A\"></a>\n</p>\n\n<!-- mycelium-badges:end -->\n\nA FastMCP server for bidirectional sync between a personal Obsidian vault and a shared team vault. Designed for teams where one person (the vault owner) maintains the source of truth and shares selected content with collaborators via a shared folder (Google Drive, Dropbox, etc.).\n\n## Tools\n\n| Tool | What it does |\n|------|-------------|\n| `vault_sync_status` | Show pending changes, stale files, and last sync time |\n| `vault_sync_push` | Push eligible files from personal vault to team vault |\n| `vault_sync_pull` | Pull changes from team vault back to personal vault |\n| `vault_scope_check` | Check if a specific file is eligible for sync |\n\nBoth push and pull default to `dry_run: true` — you always preview before executing.\n\n## Install\n\nOpen Claude Code, paste:\n\n    /plugin marketplace add adelaidasofia/vault-sync-mcp\n    /plugin install vault-sync-mcp@vault-sync-mcp\n\nThen edit `config.yaml` to set your vault paths and sync rules:\n\n```yaml\npersonal_vault: ~/vault/\nteam_vault: ~/team-vault/\n```\n\nRestart Claude Code. Then ask:\n> \"Show me vault sync status\"\n> \"Push changes to team vault (dry run first)\"\n\n<details><summary>Legacy install</summary>\n\n```bash\npip install fastmcp python-frontmatter pyyaml xxhash\n```\n\n1. Clone:\n   ```bash\n   git clone https://github.com/adelaidasofia/vault-sync-mcp.git\n   cd vault-sync-mcp\n   ```\n\n2. Edit `config.yaml` to set your vault paths and sync rules:\n   ```yaml\n   personal_vault: ~/vault/\n   team_vault: ~/team-vault/\n   ```\n\n3. Register with Claude Code:\n   ```bash\n   claude mcp add vault-sync -s user -- python3 /path/to/vault-sync-mcp/server.py\n   ```\n\n4. Restart Claude Code. Then ask:\n   > \"Show me vault sync status\"\n   > \"Push changes to team vault (dry run first)\"\n\n</details>\n\n## Configuration\n\nEverything lives in `config.yaml`:\n\n```yaml\npersonal_vault: ~/vault/\nteam_vault: ~/team-vault/\n\nno_sync:\n  - \"Journal/\"\n  - \"Personal/\"\n\nsync_rules:\n  - path: \"Team/\"\n    direction: bidirectional\n\n  - path: \"CRM/\"\n    direction: personal_to_team\n    filter:\n      frontmatter_field: relationship\n      frontmatter_values: [client, team, advisor]\n```\n\n### Sync rule directions\n\n- `bidirectional` — changes flow both ways\n- `personal_to_team` — personal is source of truth, team gets updates\n- `team_to_personal` — team is source of truth, personal gets updates (useful for shared docs)\n\n### Blocking sync on a file\n\nAdd `sync: false` to any file's frontmatter to exclude it from all sync operations.\n\n## Environment variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `VAULT_SYNC_PERSONAL` | from config.yaml | Personal vault root path |\n| `VAULT_SYNC_TEAM` | from config.yaml | Team vault root path |\n\n## Notes\n\n- Uses `os.walk(followlinks=True)` instead of `Path.rglob()` to correctly handle macOS symlinks (Google Drive, iCloud shortcuts)\n- Wikilinks are automatically rewritten to bare filenames during push (`[[folder/Note]]` becomes `[[Note]]`)\n- Content hashing via xxhash for fast change detection\n- Conflict resolution: newer file wins; conflicts are logged and skipped\n\n## Related MCPs\n\nSame author, same architecture pattern (FastMCP, draft+confirm on writes where applicable, vault auto-export, MIT):\n\n- [slack-mcp](https://github.com/adelaidasofia/slack-mcp) - multi-workspace Slack\n- [imessage-mcp](https://github.com/adelaidasofia/imessage-mcp) - macOS iMessage\n- [whatsapp-mcp](https://github.com/adelaidasofia/whatsapp-mcp) - WhatsApp via whatsmeow\n- [google-workspace-mcp](https://github.com/adelaidasofia/google-workspace-mcp) - Gmail / Calendar / Drive / Docs / Sheets\n- [apollo-mcp](https://github.com/adelaidasofia/apollo-mcp) - Apollo.io CRM + sequences\n- [substack-mcp](https://github.com/adelaidasofia/substack-mcp) - Substack writing + analytics\n- [luma-mcp](https://github.com/adelaidasofia/luma-mcp) - lu.ma events\n- [parse-mcp](https://github.com/adelaidasofia/parse-mcp) - markitdown / Docling / LlamaParse router\n- [rescuetime-mcp](https://github.com/adelaidasofia/rescuetime-mcp) - RescueTime productivity data\n- [graph-query-mcp](https://github.com/adelaidasofia/graph-query-mcp) - vault knowledge graph queries\n- [graph-autotagger-mcp](https://github.com/adelaidasofia/graph-autotagger-mcp) - wikilink suggestions from the graph\n- [investor-relations-mcp](https://github.com/adelaidasofia/investor-relations-mcp) - seed-raise pipeline tracker\n\n\n## Telemetry\n\nThis plugin sends a single anonymous install signal to `myceliumai.co` the first time it loads in a Claude Code session on a given machine.\n\n**What is sent:**\n- Plugin name (e.g. `slack-mcp`)\n- Plugin version (e.g. `0.1.0`)\n\n**What is NOT sent:**\n- No user identifiers, names, emails, tokens, or API keys\n- No file paths, message content, or anything from your work\n- No IP address is stored after dedup processing\n\n**Why:** Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.\n\n**Opt out:** Set the environment variable `MYCELIUM_NO_PING=1` before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at `~/.mycelium/onboarded-<plugin>` — delete it if you want to reset state.\n\n## License\n\nMIT\n\n---\n\nBuilt by [Mycelium AI](https://myceliumai.co). Full install or team version at [diazroa.com](https://diazroa.com).\n",
  "bytes": 6629,
  "sha": "4a03d9201fcb319751a43d471b325f22a9623619048b216226f55717838f67a5",
  "repo_slug": "adelaidasofia/vault-sync-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_adelaidasofia_vault_sync_mcp_cf365cd1/readme"
}