简体中文 / English / 日本語 / 한국어 / 繁體中文
If you have any issues, please open a new issue, or join the Telegram group for help: https://t.me/obsidian_users
For users in mainland China, we recommend using the Tencent cnb.cool mirror: https://cnb.cool/haierkeys/fast-note-sync-service
High-performance, low-latency note sync, online management, and remote REST API service platform
Built with Golang + WebSocket + React
Data sync requires the client plugin: Obsidian Fast Note Sync Plugin
🧰 Native MCP (Model Context Protocol) Support:
FNS can act as an MCP server and integrate with compatible AI clients such as Cherry Studio, Cursor, etc., enabling AI to read and write private notes and attachments, with all changes synced in real time across all devices.🚀 REST API Support:
💻 Web Management Panel:
🔄 Multi-device Note Sync:
🖼️ Attachment Sync Support:
⚙️ Config Sync:
.obsidian configuration files.PDF reading progress state.📝 Note History:
🗑️ Recycle Bin:
🚫 Offline Sync Strategy:
🔗 Sharing Feature:
📂 Directory Sync:
🌳 Git Automation:
☁️ Multi-Storage Backup & One-way Mirror Sync:
🗄️ Multi-Database Support:
If you find this project useful and want to support its continued development, please consider supporting me through:
| Ko-fi (outside mainland China) | WeChat Donation (mainland China) | |
|---|---|---|
![]() | or | ![]() |
Protobuf transport format support to enhance sync efficiency.We are continuously improving. Here are our future development plans:
If you have suggestions for improvement or new ideas, feel free to share them by submitting an issue — we will carefully evaluate and adopt suitable suggestions.
We provide multiple installation methods. One-click script or Docker is recommended.
Automatically detects the system environment and completes installation and service registration.
bash <(curl -fsSL https://raw.githubusercontent.com/haierkeys/fast-note-sync-service/master/scripts/quest_install.sh)
For users in mainland China, you can use the Tencent cnb.cool mirror:
bash <(curl -fsSL https://cnb.cool/haierkeys/fast-note-sync-service/-/git/raw/master/scripts/quest_install.sh) --cnb
Script main behaviors:
/opt/fast-note by default and creates a global shortcut command fns at /usr/local/bin/fns.fns [install|uninstall|start|stop|status|update|menu]fns directly to enter the interactive menu, which supports install/upgrade, service control, auto-start configuration, and switching between GitHub / CNB mirrors.# 1. Pull the image
docker pull haierkeys/fast-note-sync-service:latest
# 2. Start the container
docker run -tid --name fast-note-sync-service \
-p 9000:9000 \
-v /data/fast-note-sync/storage/:/fast-note-sync/storage/ \
-v /data/fast-note-sync/config/:/fast-note-sync/config/ \
haierkeys/fast-note-sync-service:latest
Create a docker-compose.yaml file:
version: '3'
services:
fast-note-sync-service:
image: haierkeys/fast-note-sync-service:latest
container_name: fast-note-sync-service
restart: always
ports:
- "9000:9000" # RESTful API & WebSocket port; /api/user/sync is the WebSocket endpoint
volumes:
- ./storage:/fast-note-sync/storage # Data storage
- ./config:/fast-note-sync/config # Config files
Start the service:
docker compose up -d
Download the latest release for your OS from Releases, extract, and run:
./fast-note-sync-service run -c config/config.yaml
http://{ServerIP}:9000 in your browser.user.register-is-enable: false in the config file)The default config file is config.yaml, which the program will automatically look for in the root directory or the config/ directory.
View the full configuration example: config/config.yaml
View the full configuration example: https-nginx-example.conf
FNS now natively supports MCP (Model Context Protocol) with both SSE and StreamableHTTP transport modes.
You can connect FNS as an MCP server directly to compatible AI clients such as Cherry Studio, Cursor, Claude Code, hermes-agent, etc. Once connected, the AI can read and write private notes and attachments. All MCP-generated changes are synced in real time to all your devices via WebSocket.
The following headers are supported regardless of transport mode:
Authorization: Bearer <your API Token> (obtained from the Copy API Config in WebGUI)X-Default-Vault-Name: <vault name> (specifies the default vault for MCP operations; used if the vault parameter is not specified in a tool call)X-Client: <client type> (client type connecting via MCP, e.g.: Cherry Studio / OpenClaw)X-Client-Version: <client version> (client version connecting via MCP, e.g.: 1.1)X-Client-Name: <client name> (client name connecting via MCP, e.g.: Mac)StreamableHTTP is the standard transport protocol in the MCP ecosystem. It uses a single endpoint for all requests, is more firewall-friendly, and is natively supported by newer MCP clients (e.g., Claude Code, hermes-agent).
http://<your server IP or domain>:<port>/api/mcpPOST (send request/notification), GET (listen for server-sent events), DELETE (terminate session)(Note: Replace <ServerIP>, <Port>, <Token>, and <VaultName> with your actual values)
{
"mcpServers": {
"fns": {
"url": "http://<ServerIP>:<Port>/api/mcp",
"type": "http",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer <Token>",
"X-Default-Vault-Name": "<VaultName>",
"X-Client": "<Client>",
"X-Client-Version": "<ClientVersion>",
"X-Client-Name": "<ClientName>"
}
}
}
}
SSE mode is the legacy transport protocol, fully retained for backward compatibility. Suitable for MCP clients that only support SSE (e.g., Cherry Studio).
http://<your server IP or domain>:<port>/api/mcp/sse(Note: Replace <ServerIP>, <Port>, <Token>, and <VaultName> with your actual values)
{
"mcpServers": {
"fns": {
"url": "http://<ServerIP>:<Port>/api/mcp/sse",
"type": "sse",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer <Token>",
"X-Default-Vault-Name": "<VaultName>",
"X-Client": "<Client>",
"X-Client-Version": "<ClientVersion>",
"X-Client-Name": "<ClientName>"
}
}
}
}