loading…
Search for a command to run...
loading…
A production-ready MCP server for macOS that provides async, cache-backed access and background queued writes to Apple Notes. It enables seamless integration fo
A production-ready MCP server for macOS that provides async, cache-backed access and background queued writes to Apple Notes. It enables seamless integration for reading, creating, and managing notes through standard tools like ScriptingBridge while supporting background service execution.
macnotes-mcp is a fork of RhetTbull/macnotesapp focused on running Apple Notes as a production-ready MCP server.
It provides:
mcporter and OpenClawThis project is forked from:
RhetTbull/macnotesappThe original Python/CLI Notes automation remains available, and this fork adds MCP-first architecture and service tooling.
uv (recommended) for env/dependency managementOptional:
mcporter for MCP client setup and testingClone and install:
git clone https://github.com/zorrobyte/macnotes-mcp.git
cd macnotes-mcp
uv sync
Run MCP over stdio:
uv run notes-mcp
Run MCP over local HTTP (streamable-http):
MACNOTES_MCP_TRANSPORT=streamable-http MACNOTES_MCP_HOST=127.0.0.1 MACNOTES_MCP_PORT=8765 uv run notes-mcp-daemon
Install as LaunchAgent:
./scripts/install_service.sh
Uninstall:
./scripts/uninstall_service.sh
Service details:
com.zorrobyte.macnotes-mcphttp://127.0.0.1:8765/mcp~/Library/Logs/macnotes-mcp/Check service:
launchctl print "gui/${UID}/com.zorrobyte.macnotes-mcp"
Tail logs:
tail -f ~/Library/Logs/macnotes-mcp/launchd.stderr.log
tail -f ~/Library/Logs/macnotes-mcp/service.log
Use the helper script:
./scripts/setup_mcporter.sh
This does two things:
macnotes-mcp in ~/.mcporter/mcporter.jsonapple-notes skill to avoid overlapCustom server name/url:
./scripts/setup_mcporter.sh my-notes http://127.0.0.1:8765/mcp
mcporter config add macnotes-mcp --url http://127.0.0.1:8765/mcp --transport http --scope home
mcporter call macnotes-mcp.notes_health --json
The server exposes:
notes_healthnotes_accountsnotes_sync_fullnotes_sync_incrementalnotes_sync_statusnotes_queue_statusnotes_job_statusnotes_job_waitnotes_listnotes_readnotes_createnotes_updatenotes_deletenotes_moveConfig source priority:
~/.config/macnotes-mcp/service.tomlExample config template:
deploy/config/service.example.tomlMain environment variables:
MACNOTES_MCP_TRANSPORT = stdio | sse | streamable-httpMACNOTES_MCP_HOST (default 127.0.0.1)MACNOTES_MCP_PORT (default 8000)MACNOTES_MCP_MOUNT_PATH (default /)MACNOTES_MCP_BOOTSTRAP_SYNC (default true)MACNOTES_MCP_POLL_INTERVAL_SECONDS (default 120)MACNOTES_MCP_CACHE_DB_PATH (optional override)MACNOTES_MCP_LOG_LEVEL (default INFO)MACNOTES_MCP_LOG_DIR (optional override)MACNOTES_MCP_LOCK_PATH (optional override)Important:
NoteStore.sqlite) are not used.On first run, macOS may prompt for Automation permissions (Terminal/Python controlling Notes).
If calls fail:
Health check:
mcporter call macnotes-mcp.notes_health --json
If endpoint is unreachable:
launchctl print ...8765 is openlaunchd.stderr.log and service.logIf sync is slow on first run:
notes_sync_status to track cache size and sync stateIf OpenClaw still uses old notes skill:
openclaw config set skills.entries.apple-notes.enabled false
This fork still includes upstream CLI entrypoints:
notesmacnotesapp Python API modulesThe main focus of this fork is MCP service usage.
Install dev environment:
uv sync
Run tests:
uv run pytest -v -s tests/
Run daemon locally:
uv run notes-mcp-daemon --transport streamable-http --host 127.0.0.1 --port 8765
MIT (same as upstream).
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"macnotes-mcp": {
"command": "npx",
"args": []
}
}
}PRs, issues, code search, CI status
Database, auth and storage
Reference / test server with prompts, resources, and tools.
Secure file operations with configurable access controls.