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: mcp-obsidian
Компоненты
Путь | Роль |
|
|
|
|
| Приложение 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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,8604MIT
- AlicenseNot gradedqualityBmaintenanceConnects AI assistants to Obsidian vaults via the Local REST API to search notes, retrieve content, and perform semantic searches. It features self-healing multi-URL connectivity and supports both stdio and HTTP transports for flexible deployment.23213MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Obsidian notes via local REST API, supporting file CRUD, search, commands, and periodic notes.2,4727Apache 2.0
- AlicenseBqualityDmaintenanceEnables AI assistants to search, create, and manage notes in an Obsidian vault via 40+ local tools.5222MIT
Related MCP Connectors
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jcrabapple/pebble-index-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server