MCP (Model Context Protocol) — открытый протокол, через который AI-агенты подключаются к внешним сервисам. Думай про USB-C: один стандартный разъём, через который можно подключить что угодно — файлы, базы данных, API, инструменты.
Без MCP агент умеет только разговаривать. С MCP — он может читать твои заметки, искать по волту, создавать файлы и вообще делать полезную работу.
Пример из жизни: ты подключаешь свой Obsidian-волт как MCP-сервер → даёшь ссылку внешнему агенту (Claude, GPT, другому AI) → агент может читать и писать заметки в твой волт. Удалённо, безопасно, через интернет.
Вот что мы строим:
Obsidian Vault (твой компьютер)
→ Obsidian REST API плагин (localhost:27124)
→ MCP-сервер (localhost:8787)
→ Auth-прокси с OAuth (localhost:8788)
→ Cloudflare Tunnel
→ https://mcp.твой-домен.com
→ Внешний AI-агент
Каждый слой решает свою задачу:
brew install cloudflared)Установи плагин Local REST API в Obsidian:
Плагин запустит локальный сервер на https://localhost:27124. Проверь:
curl -sk https://localhost:27124/
Должен вернуть JSON со статусом OK.
Используем пакет obsidian-mcp-server — он оборачивает REST API в MCP-протокол и даёт полный набор инструментов: чтение, запись, поиск, теги, frontmatter.
Проверь что работает:
OBSIDIAN_API_KEY="твой-api-key" \
OBSIDIAN_BASE_URL="https://127.0.0.1:27124" \
MCP_TRANSPORT_TYPE="http" \
MCP_HTTP_PORT="8787" \
npx obsidian-mcp-server
Доступные инструменты MCP-сервера:
| Инструмент | Что делает |
|---|---|
obsidian_list_notes |
Список файлов в папке |
obsidian_read_note |
Чтение заметки |
obsidian_update_note |
Создание/обновление (append, prepend, overwrite) |
obsidian_delete_note |
Удаление |
obsidian_global_search |
Полнотекстовый поиск по волту |
obsidian_search_replace |
Найти и заменить в файле |
obsidian_manage_frontmatter |
Работа с YAML-метаданными |
obsidian_manage_tags |
Управление тегами |
MCP-сервер сам по себе не имеет авторизации. Любой, кто знает адрес — получит доступ. Нам нужен прокси, который проверяет токен.
Попроси своего coding-агента (Claude Code, Cursor) создать auth-прокси. Вот что он должен делать:
Обязательные endpoints:
/.well-known/oauth-protected-resource — описание ресурса (RFC 9728)/.well-known/oauth-authorization-server — OAuth discovery (RFC 8414)/authorize — Authorization Code flow с PKCE/register — динамическая регистрация клиента (RFC 7591)/token — обмен кода на access_token + refresh_tokenЧто сказать агенту:
Создай Node.js auth-прокси для MCP-сервера. Он должен:
- Слушать на порту 8788
- Проксировать запросы к upstream MCP-серверу на localhost:8787
- Реализовать полный OAuth 2.0 Authorization Code flow с PKCE
- Поддерживать grant_types: authorization_code, client_credentials, refresh_token
- Endpoint /authorize должен auto-approve и сразу редиректить с кодом
- Токены должны персистентно сохраняться в JSON-файл (чтобы переживать рестарты)
- Для POST /mcp — автоматически подставлять Accept: application/json, text/event-stream
- Логировать все запросы
Результат: файл ~/.claude/scripts/mcp-auth-proxy.mjs (или в любом удобном месте).
После создания — запомни свои Client ID и Client Secret. Они понадобятся для подключения внешних агентов.
По умолчанию MCP-сервер даёт доступ ко всему волту. Это опасно — внешний агент сможет читать дневник, финансы, личные заметки.
Попроси агента добавить в auth-прокси фильтр путей:
Добавь в прокси проверку путей. При каждом
tools/callзапросе проверяй аргументыnotePath,dirPath,pathFilter. Если путь не начинается с разрешённых директорий — возвращай MCP-ошибку "access denied". Разрешённые директории:540 Research,530 External Agents.
Теперь внешний агент может работать только с указанными папками. Попытка прочитать Daily/ или 200 Projects/ вернёт ошибку.
cloudflared tunnel --url http://localhost:8788
Даст временный URL вроде https://random-words.trycloudflare.com. Работает, но URL меняется при перезапуске.
cloudflared tunnel login
cloudflared tunnel create obsidian-mcp
cloudflared tunnel route dns obsidian-mcp mcp.твой-домен.com
~/.cloudflared/config.yml:tunnel: <tunnel-id>
credentials-file: ~/.cloudflared/<tunnel-id>.json
ingress:
- hostname: mcp.твой-домен.com
service: http://localhost:8788
- service: http_status:404
cloudflared tunnel run <tunnel-id>
Всё должно запускаться при загрузке Mac и перезапускаться при падении. Попроси агента:
Создай bash-скрипт, который запускает: 1) obsidian-mcp-server на порту 8787, 2) auth-proxy на порту 8788, 3) cloudflared tunnel run. Если любой процесс падает — скрипт завершается, а launchd перезапускает его. Создай launchd plist с KeepAlive: true и RunAtLoad: true.
Результат:
~/.claude/scripts/mcp-obsidian-tunnel.sh — скрипт запуска~/Library/LaunchAgents/com.claude.mcp-obsidian-tunnel.plist — launchd-сервисУправление:
# Загрузить (запустить)
launchctl load ~/Library/LaunchAgents/com.claude.mcp-obsidian-tunnel.plist
# Выгрузить (остановить)
launchctl unload ~/Library/LaunchAgents/com.claude.mcp-obsidian-tunnel.plist
# Проверить статус
launchctl list | grep mcp-obsidian
# Логи
tail -f ~/.claude/scripts/mcp-obsidian-tunnel.log
Когда всё запущено, подключай MCP-сервер в любом совместимом клиенте.
URL сервера:
https://mcp.твой-домен.com/mcp
Авторизация (OAuth client credentials):
твой-client-idтвой-client-secretВ Claude.ai (Projects → Integrations → Add MCP):
# Все процессы живы?
lsof -iTCP:8787 -sTCP:LISTEN -P
lsof -iTCP:8788 -sTCP:LISTEN -P
ps aux | grep cloudflared
# OAuth discovery работает?
curl -s https://mcp.твой-домен.com/.well-known/oauth-authorization-server
# MCP отвечает?
curl -s -X POST \
-H "Authorization: Bearer <твой-токен>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
https://mcp.твой-домен.com/mcp
# Ограничение папок работает?
# (попробуй обратиться к запрещённой папке — должен вернуть access denied)
Obsidian ← REST API ← MCP-сервер ← Auth-прокси ← Cloudflare ← Интернет
↑ ↑ ↑ ↑
Плагин 8 инструментов OAuth 2.0 Постоянный
в Obsidian read/write/ + PKCE домен
search/tags + фильтр
папок
Курс AI Obsidian — 3 недели, 9 встреч, максимум 20 человек
Записаться →