pebble-index-mcp
pebble-index-mcp
MCP-мост, который открывает локальное хранилище Obsidian и экземпляр Hermes Agent для MCP-песочницы двойного нажатия умного кольца Pebble Index 01. Голосовые записи с кольца маршрутизируются облачным агентом приложения Pebble в инструменты этого сервера, а ответ возвращается в виде уведомления на телефоне.
Архитектура
[Index ring] → [Pebble app] → [Pebble cloud agent] → [this MCP server]
├─ vault tools (local files)
└─ ask_hermes → Hermes API serverСервер говорит по MCP через Streamable HTTP (официальный SDK
mcp, FastMCP).Каждый запрос должен содержать bearer-токен; всё остальное получает 401.
Защита FastMCP от DNS-rebinding включена: разрешённые хосты — loopback плюс всё, что указано в
MCP_ALLOWED_HOSTS.Публичный доступ — это туннель cloudflared к порту loopback; никакой облачной инфраструктуры, кроме этого, не требуется.
Related MCP server: Obsidian MCP Server
Компоненты
Путь | Роль |
|
|
|
|
| Приложение FastMCP: регистрирует четыре инструмента и промпт |
Инструменты
vault_search(query, max_results=5)— текстовый поиск без учёта регистра; возвращает строкиpath: excerpt.vault_read(note_path, max_chars=1500)— читает начало заметки.vault_append(note_path, text)— добавляет строку с меткой времени- HH:MM text, создавая заметку при необходимости.ask_hermes(question)— пересылает на API-сервер Hermes; таймаут 60 секунд с честным подтверждением при промахе.
Безопасность
Аутентификация: статический bearer-токен (
MCP_BEARER_TOKEN), сравнение за постоянное время, требуется для каждого запроса. Пустой токен закрывает доступ (все запросы 401) и логирует предупреждение при запуске.Транспорт: TLS завершается на границе туннеля; источник слушает только loopback.
Проверка хоста: защита от DNS-rebinding отклоняет запросы, у которых заголовок Host не является loopback или не входит в
MCP_ALLOWED_HOSTS.Песочница путей: инструменты хранилища разрешают все пути и требуют, чтобы они оставались внутри корня хранилища; побег через симлинки отклоняется, а при открытии файлов используется
O_NOFOLLOWдля последнего компонента. Песочница защищает от случайного и удалённого неправильного использования; враждебный локальный процесс, который гоняется за подменой родительского каталога, всё ещё может выиграть (документированная граница TOCTOU — предполагается, что хранилище является доверенным однопользовательским каталогом).Конфигурация читается один раз при импорте: ротация bearer-токена или изменение разрешённых хостов требует перезапуска службы.
Секреты: ключ API Hermes и MCP-токен хранятся в env-файле с правами 0600 вне этого репозитория, никогда в коде, логах или коммитах.
Примечание о конфиденциальности: записи, маршрутизируемые через песочницу двойного нажатия, проходят через облачный агент приложения Pebble. Записи одиночного нажатия остаются на устройстве. Чувствительные мысли принадлежат одиночному нажатию.
Конфигурация (env)
Переменная | По умолчанию | Назначение |
| — | Обязательно. Корень хранилища для файловых инструментов |
|
| Адрес прослушивания |
| — | Обязательно; токен аутентификации запросов |
| — | Дополнительные разрешённые значения Host через запятую (сюда входит публичное имя хоста туннеля) |
|
| Цель для ask_hermes |
| — | Bearer-ключ API-сервера |
|
| Псевдоним модели, отправляемый вышестоящему серверу (сопоставьте его с дешёвой моделью через |
| — | Необязательный путь к текстовому файлу, заменяющему общую персону облачного агента |
HERMES_API_URL принимает любую OpenAI-совместимую конечную точку chat completions, поэтому ask_hermes работает напрямую с OpenRouter, Ollama или любым другим совместимым API — Hermes — это просто значение по умолчанию.
Разработка
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest -vЛокальный запуск: задайте переменные окружения выше и выполните python -m pebble_index_mcp.server.
Развёртывание
deploy/ содержит шаблон пользовательского юнита systemd и шаблон туннеля cloudflared (имя хоста и учётные данные заполняются на хосте, а не в этом репозитории). См. docs/ring-checklist.md для настройки на стороне телефона и матрицы тестов.
Лицензия
MIT — см. LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Voice notes that organize themselves. Capture by Siri, AI auto-tags, semantic search retrieves.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Notes and actions in one app. Let Claude or ChatGPT read and update them.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Obsidian vaults for creating, reading, searching, and managing notes, daily notes, TODOs, session reports, and backlinks through both stdio and HTTP/SSE transports.103,254 npm4MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Obsidian notes via local REST API, supporting file CRUD, search, commands, and periodic notes.3,187 npm7Apache 2.0
- AlicenseBqualityDmaintenanceEnables AI assistants to search, create, and manage notes in an Obsidian vault via 40+ local tools.5212 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage and search Obsidian notes, folders, metadata, and links directly.-