Skip to main content
Glama

pebble-index-mcp

Puente MCP que expone una bóveda local de Obsidian y una instancia de Hermes Agent al sandbox MCP de doble clic del anillo inteligente Pebble Index 01. Las capturas de voz del anillo son enrutadas por el agente en la nube de la aplicación Pebble hacia las herramientas de este servidor, y la respuesta vuelve como notificación en el teléfono.

Arquitectura

[Index ring] → [Pebble app] → [Pebble cloud agent] → [this MCP server]
                                                        ├─ vault tools (local files)
                                                        └─ ask_hermes → Hermes API server
  • El servidor habla MCP sobre HTTP Streamable (SDK oficial mcp, FastMCP).

  • Cada solicitud debe llevar un token de portador; cualquier otra cosa recibe 401.

  • La protección contra reenlace de DNS de FastMCP está activada: los hosts permitidos son loopback más cualquier cosa listada en MCP_ALLOWED_HOSTS.

  • La exposición pública es un túnel cloudflared hacia el puerto loopback; no se requiere infraestructura en la nube más allá de eso.

Related MCP server: mcp-obsidian

Componentes

Ruta

Función

src/pebble_index_mcp/vault.py

Vault: lectura/append con sandbox de rutas + búsqueda ripgrep sobre la bóveda. Todas las rutas se resuelven dentro de la raíz de la bóveda; se rechazan rutas absolutas, traversal .. y escapes de symlink. Los appends son solo de añadido, con marca de tiempo, y nunca sobrescriben.

src/pebble_index_mcp/hermes.py

HermesClient: reenvía preguntas a un endpoint de chat completions compatible con OpenAI con una sugerencia de sistema de respuesta corta. Mapea timeouts/fallos de transporte/formas incorrectas a HermesTimeout/HermesError.

src/pebble_index_mcp/server.py

Aplicación FastMCP: registra las cuatro herramientas y el prompt ring_persona, envuelve la aplicación streamable-http en autenticación de portador (comparación en tiempo constante) y configura la lista de hosts permitidos.

Herramientas

  • vault_search(query, max_results=5) — búsqueda de texto sin distinción de mayúsculas; devuelve líneas path: excerpt.

  • vault_read(note_path, max_chars=1500) — lee el inicio de una nota.

  • vault_append(note_path, text) — añade una línea con marca de tiempo - HH:MM text, creando la nota si es necesario.

  • ask_hermes(question) — reenvía al servidor de API de Hermes; timeout de 60s con un reconocimiento honesto en caso de fallo.

Seguridad

  • Autenticación: token de portador estático (MCP_BEARER_TOKEN), comparado en tiempo constante, requerido en cada solicitud. Un token vacío falla cerrado (todas las solicitudes 401) y registra una advertencia al inicio.

  • Transporte: TLS termina en el borde del túnel; el origen escucha solo en loopback.

  • Validación de host: la protección contra reenlace de DNS rechaza solicitudes cuyo encabezado Host no sea loopback o esté en MCP_ALLOWED_HOSTS.

  • Sandbox de rutas: las herramientas de la bóveda resuelven todas las rutas y exigen que permanezcan dentro de la raíz de la bóveda; se rechazan escapes de symlink y las aperturas de archivos usan O_NOFOLLOW en el componente final. El sandbox protege contra uso accidental y remoto; un proceso local hostil que compita con un intercambio de directorio padre aún puede ganar (límite TOCTOU documentado — se asume que la bóveda es un directorio de un solo usuario de confianza).

  • La configuración se lee una vez al importar: rotar el token de portador o cambiar los hosts permitidos requiere reiniciar el servicio.

  • Secretos: la clave de API de Hermes y el token MCP viven en un archivo de entorno 0600 fuera de este repositorio, nunca en código, registros o commits.

  • Nota de privacidad: las grabaciones enrutadas a través del sandbox de doble clic transitan por el agente en la nube de la aplicación Pebble. Las capturas de un solo clic permanecen en el dispositivo. Los pensamientos sensibles pertenecen al clic único.

Configuración (env)

Variable

Por defecto

Propósito

VAULT_PATH

Requerido. Raíz de la bóveda para las herramientas de archivos

MCP_HOST / MCP_PORT

127.0.0.1 / 8765

Dirección de escucha

MCP_BEARER_TOKEN

Requerido; token de autenticación de solicitud

MCP_ALLOWED_HOSTS

Valores de Host permitidos adicionales separados por comas (el hostname público del túnel va aquí)

HERMES_API_URL

http://127.0.0.1:8642/v1/chat/completions

destino de ask_hermes

HERMES_API_KEY

clave de portador del servidor de API

RING_MODEL

pebble-ring

Alias de modelo enviado upstream (mapearlo a un modelo barato mediante model_routes del servidor de API)

RING_PERSONA_FILE

Ruta opcional a un archivo de texto que reemplaza la persona genérica del agente en la nube

HERMES_API_URL acepta cualquier endpoint de chat completions compatible con OpenAI, por lo que ask_hermes funciona directamente contra OpenRouter, Ollama, o cualquier otra API compatible — Hermes es solo el predeterminado.

Desarrollo

python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest -v

Ejecutar localmente: configura las variables de entorno anteriores y python -m pebble_index_mcp.server.

Despliegue

deploy/ contiene una plantilla de unidad de usuario de systemd y una plantilla de túnel cloudflared (hostname y credenciales completados en el host, no en este repositorio). Consulta docs/ring-checklist.md para la configuración del lado del teléfono y la matriz de pruebas.

Licencia

MIT — ver LICENSE.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    10
    3,860
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects 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.
    232
    13
    MIT

View all related MCP servers

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…

View all MCP Connectors

Latest Blog Posts

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