FastMCP server for bidirectional sync between personal and team Obsidian vaults

io.github.adelaidasofiaPublished by GitHub account adelaidasofiav0.1.0Updated Oct 24, 2026

FastMCP server for bidirectional sync between personal and team Obsidian vaults.

The publisher's own server: Fastio

Overview

AI-generated overview

Local MCP server that syncs notes between a personal Obsidian vault and a shared team vault, with status checks, scoped push/pull and dry-run previews.

What you can do
  • Check sync status: list pending changes, stale files and the last sync time.
  • Push eligible files from the personal vault to the team vault.
  • Pull changes from the team vault back into the personal vault.
  • Check whether a specific file is eligible for sync under the configured rules.
  • Preview first: push and pull default to a dry run before anything is written.
When to use it
Useful when you keep a personal Obsidian vault and share selected notes with a team through a synced folder such as Google Drive or Dropbox, and want an assistant to report pending changes and move files according to path and frontmatter rules.
Requirements
Runs locally over stdio as a desktop-only plugin or a Python script. Needs the personal and team vault root paths, set either in config.yaml or via the VAULT_SYNC_PERSONAL and VAULT_SYNC_TEAM environment variables (the manifest declares PERSONAL_VAULT_PATH and TEAM_VAULT_PATH). The legacy install needs Python with fastmcp, python-frontmatter, pyyaml and xxhash.
Before you install
Push and pull write files into both vaults, so run the dry run first and keep the no_sync list and sync: false frontmatter current. Conflict handling is last-writer-wins with newer file winning, and conflicts are logged and skipped. The plugin sends a one-time anonymous install signal to an external site unless MYCELIUM_NO_PING=1 is set.

Installation

In SourceWeft

  1. Open FastMCP server for bidirectional sync between personal and team Obsidian vaults in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

vault-sync-mcp

[License] [GitHub stars] [Last commit] [Open issues] [PyPI version] [PyPI downloads] [Built by Mycelium AI]

A 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.).

Tools

ToolWhat it does
vault_sync_statusShow pending changes, stale files, and last sync time
vault_sync_pushPush eligible files from personal vault to team vault
vault_sync_pullPull changes from team vault back to personal vault
vault_scope_checkCheck if a specific file is eligible for sync

Both push and pull default to dry_run: true — you always preview before executing.

Install

Open Claude Code, paste:

/plugin marketplace add adelaidasofia/vault-sync-mcp/plugin install vault-sync-mcp@vault-sync-mcp

Then edit config.yaml to set your vault paths and sync rules:

yaml
personal_vault: ~/vault/team_vault: ~/team-vault/

Restart Claude Code. Then ask:

"Show me vault sync status" "Push changes to team vault (dry run first)"

Legacy install
bash
pip install fastmcp python-frontmatter pyyaml xxhash
  1. Clone:

    bash
    git clone https://github.com/adelaidasofia/vault-sync-mcp.gitcd vault-sync-mcp
  2. Edit config.yaml to set your vault paths and sync rules:

    yaml
    personal_vault: ~/vault/team_vault: ~/team-vault/
  3. Register with Claude Code:

    bash
    claude mcp add vault-sync -s user -- python3 /path/to/vault-sync-mcp/server.py
  4. Restart Claude Code. Then ask:

    "Show me vault sync status" "Push changes to team vault (dry run first)"

Configuration

Everything lives in config.yaml:

yaml
personal_vault: ~/vault/team_vault: ~/team-vault/
no_sync:  - "Journal/"  - "Personal/"
sync_rules:  - path: "Team/"    direction: bidirectional
  - path: "CRM/"    direction: personal_to_team    filter:      frontmatter_field: relationship      frontmatter_values: [client, team, advisor]

Sync rule directions

  • bidirectional — changes flow both ways
  • personal_to_team — personal is source of truth, team gets updates
  • team_to_personal — team is source of truth, personal gets updates (useful for shared docs)

Blocking sync on a file

Add sync: false to any file's frontmatter to exclude it from all sync operations.

Environment variables

VariableDefaultDescription
VAULT_SYNC_PERSONALfrom config.yamlPersonal vault root path
VAULT_SYNC_TEAMfrom config.yamlTeam vault root path

Notes

  • Uses os.walk(followlinks=True) instead of Path.rglob() to correctly handle macOS symlinks (Google Drive, iCloud shortcuts)
  • Wikilinks are automatically rewritten to bare filenames during push ([[folder/Note]] becomes [[Note]])
  • Content hashing via xxhash for fast change detection
  • Conflict resolution: newer file wins; conflicts are logged and skipped

Related MCPs

Same author, same architecture pattern (FastMCP, draft+confirm on writes where applicable, vault auto-export, MIT):

Telemetry

This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.

What is sent:

  • Plugin name (e.g. slack-mcp)
  • Plugin version (e.g. 0.1.0)

What is NOT sent:

  • No user identifiers, names, emails, tokens, or API keys
  • No file paths, message content, or anything from your work
  • No IP address is stored after dedup processing

Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.

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.

License

MIT


Built by Mycelium AI. Full install or team version at diazroa.com.

Source: README.md at commit f5169c6

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Fast integrations