Team Relay MCP

Leer, buscar y escribir notas del vault de Obsidian a través del servidor colaborativo Team Relay. Admite carpetas compartidas y sincronización en tiempo real.

Documentación

EVC Team Relay - Servidor MCP

PyPI Docker Hub License: MIT MCP Install via Spark

Dale a tu agente de IA acceso de lectura/escritura a tu bóveda de Obsidian.

Tu agente lee tus notas, crea nuevas y se mantiene sincronizado, todo a través de la API de Team Relay.

Funciona con Claude Code, Codex CLI, OpenCode y cualquier cliente compatible con MCP.

evc-team-relay-mcp MCP server

Inicio rápido

1. Instalación

Opción A — desde PyPI (recomendado):

No se necesita instalación — uvx se descarga y ejecuta automáticamente. Ve al paso 2.

Opción B — desde el código fuente:

git clone https://github.com/entire-vc/evc-team-relay-mcp.git
cd evc-team-relay-mcp
uv sync   # or: pip install .

2. Configura tu herramienta de IA

Añade el servidor MCP a la configuración de tu herramienta. Elige un método de autenticación:

Clave de agente (recomendada) — crea una clave en el plugin de Obsidian → Configuración de Team Relay → Claves de agente. Admite lectura y escritura: list_files, read_file, tr_search y upsert_file funcionan con una sola clave. Inicio rápido →

Correo electrónico + contraseña — usa una cuenta de agente dedicada en tu instancia de Relay.

Claude Code — clave de agente

Añade a .mcp.json en la raíz de tu proyecto o a ~/.claude/.mcp.json:

{
  "mcpServers": {
    "evc-relay": {
      "command": "uvx",
      "args": ["evc-team-relay-mcp"],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}
Claude Code — correo/contraseña
{
  "mcpServers": {
    "evc-relay": {
      "command": "uvx",
      "args": ["evc-team-relay-mcp"],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_EMAIL": "agent@yourdomain.com",
        "RELAY_PASSWORD": "your-password"
      }
    }
  }
}
Codex CLI

Añade a tu codex.json:

{
  "mcp_servers": {
    "evc-relay": {
      "type": "stdio",
      "command": "uvx",
      "args": ["evc-team-relay-mcp"],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}
OpenCode

Añade a opencode.json:

{
  "mcpServers": {
    "evc-relay": {
      "command": "uvx",
      "args": ["evc-team-relay-mcp"],
      "env": {
        "RELAY_CP_URL": "https://cp.yourdomain.com",
        "RELAY_AGENT_KEY": "tr_agent_your_key_here"
      }
    }
  }
}
Desde el código fuente (todas las herramientas)

Si instalaste desde el código fuente en lugar de PyPI, reemplaza "command": "uvx" / "args": ["evc-team-relay-mcp"] con:

"command": "uv",
"args": ["run", "--directory", "/path/to/evc-team-relay-mcp", "relay_mcp.py"]

Variables de entorno:

VariableRequeridaDescripción
RELAY_CP_URLURL base del plano de control
RELAY_AGENT_KEYUna deClave de agente desde la configuración del plugin — lectura + escritura (recomendada)
RELAY_EMAILUna deCorreo de la cuenta (modo correo/contraseña)
RELAY_PASSWORDUna deContraseña de la cuenta (modo correo/contraseña)

También hay plantillas de configuración listas para copiar en config/.

3. Úsalo

Tu agente de IA ahora tiene estas herramientas:

HerramientaDescripción
authenticateAutenticarse con credenciales (gestionado automáticamente)
list_sharesListar recursos compartidos accesibles (filtrar por tipo, propiedad)
list_filesListar archivos en un recurso compartido de carpeta
read_fileLeer un archivo por ruta desde un recurso compartido de carpeta
read_documentNo implementado — no hay ruta de backend en ningún modo de autenticación, siempre genera error
upsert_fileCrear o actualizar un archivo por ruta — solo en modo clave de agente; genera error en modo correo/contraseña (JWT)
write_documentNo implementado — no hay ruta de backend en ningún modo de autenticación, siempre genera error
delete_fileNo implementado — no hay ruta de backend en ningún modo de autenticación, siempre genera error

Flujo de trabajo típico: list_shares -> list_files -> read_file / upsert_file

La autenticación es automática — el servidor inicia sesión y renueva los tokens internamente.

Matriz de disponibilidad de herramientas

No todas las herramientas funcionan en todos los modos de autenticación, y un grupo no funciona en ninguno de los modos — son dos hechos no relacionados, así que no los confundas:

GrupoHerramientasEstado
Clave de agente, recursos compartidos de carpetalist_files, read_file, upsert_fileFuncionando — la única vía de escritura en este servidor MCP
JWT (correo/contraseña)list_files, tr_search, read_fileFuncionando, solo lectura por diseño
Sin ruta de backend en ningún modoread_document, write_document, delete_fileSiempre generan ValueError — no es una restricción de autenticación
  • El acceso de escritura es solo con clave de agente, por política sancionada (ver TR-05 (#0cdd5328)): upsert_file es la única herramienta de escritura con una ruta de backend funcional, y solo escribe cuando se configura una clave de agente (RELAY_AGENT_KEY / RELAY_AGENT_KEYS). El modo JWT al llamar a upsert_file genera un ValueError claro indicando el modo clave de agente como solución, en lugar de un 404 confuso.
  • read_document, write_document y delete_file son una brecha separada e independiente — el plano de control no tiene ruta de backend para ellos en absoluto, tampoco en modo clave de agente. Cambiar a una clave de agente no los hará funcionar: el contenido en vivo de recursos compartidos de documentos es solo CRDT/WebSocket (sin puente REST), y la eliminación por archivo no tiene ruta DELETE en el servidor todavía. Si alguna vez se añaden rutas para estos, seguirían la política de escritura solo con clave de agente anterior — JWT permanecería en solo lectura.

Implementación remota (transporte HTTP)

Para implementaciones compartidas o del lado del servidor, ejecuta como servidor HTTP:

# Direct
uv run relay_mcp.py --transport http --port 8888

# Docker (pulls from Docker Hub automatically)
RELAY_CP_URL=https://cp.yourdomain.com \
RELAY_EMAIL=agent@yourdomain.com \
RELAY_PASSWORD=your-password \
docker compose up -d

# Or pull explicitly
docker pull deadalusevc/evc-team-relay-mcp:latest

Por defecto, el servidor se vincula a 127.0.0.1 (solo localhost) — el endpoint no es alcanzable a través de la red incluso si el host tiene una IP pública. Esto coincide con el caso común de un solo cliente MCP en la misma máquina que el servidor.

Luego configura tu cliente MCP para conectarse vía HTTP:

{
  "mcpServers": {
    "evc-relay": {
      "type": "streamable-http",
      "url": "http://127.0.0.1:8888/mcp"
    }
  }
}

Acceso remoto mediante túnel SSH (recomendado)

Si tu cliente MCP se ejecuta en una máquina diferente al servidor, haz un túnel al puerto vinculado a localhost en lugar de exponerlo públicamente:

# From the client machine, forward local 8888 to the server's localhost:8888
ssh -N -L 8888:127.0.0.1:8888 user@your-server

Luego apunta la configuración del cliente a http://127.0.0.1:8888/mcp como arriba — el tráfico pasa por el túnel SSH, y la dirección de vinculación del servidor nunca necesita cambiar.

Vinculación pública / proxy inverso (opt-in)

Si realmente necesitas que el servidor acepte conexiones de otros hosts directamente (por ejemplo, si está detrás de un proxy inverso que termina TLS y maneja la autenticación), pasa --host explícitamente:

uv run relay_mcp.py --transport http --port 8888 --host 0.0.0.0

Haz esto solo detrás de un proxy inverso o cortafuegos — el endpoint HTTP de MCP no tiene autenticación integrada, así que vincularlo a 0.0.0.0 en una red abierta expone cada llamada de herramienta de relay a cualquiera que pueda alcanzar el puerto.


Seguridad

El servidor MCP proporciona ventajas de seguridad significativas sobre las integraciones basadas en shell:

  • Sin ejecución de shell — todas las operaciones son llamadas a funciones de Python vía JSON-RPC, eliminando riesgos de inyección de comandos
  • Sin argumentos de CLI — las credenciales y tokens nunca se pasan como argumentos de proceso (invisibles en la salida de ps)
  • Gestión automática de tokens — el servidor maneja el inicio de sesión, la renovación de JWT y el ciclo de vida de los tokens internamente; el agente nunca toca tokens en bruto
  • Entradas tipadas — todos los parámetros se validan contra JSON Schema antes de la ejecución
  • Proceso persistente único — sin generación de shell por llamada, sin fuga de entorno entre invocaciones

Nota: Si estás usando la habilidad OpenClaw (scripts bash), considera migrar a este servidor MCP para una integración más segura y mantenible.


Cómo funciona

┌─────────────┐      MCP        ┌──────────────┐     REST API     ┌──────────────┐     Yjs CRDT      ┌──────────────┐
│  AI Agent   │ ◄────────────► │  MCP Server  │ ◄─────────────► │  Team Relay  │ ◄──────────────► │   Obsidian   │
│ (any tool)  │  stdio / HTTP  │ (this repo)  │    read/write   │   Server     │    real-time     │    Client    │
└─────────────┘                └──────────────┘                 └──────────────┘      sync         └──────────────┘

El servidor MCP envuelve la API REST de Team Relay en herramientas MCP estándar. Team Relay almacena documentos como CRDT de Yjs y los sincroniza con los clientes de Obsidian en tiempo real. Los cambios realizados por el agente aparecen en Obsidian al instante — y viceversa.


Requisitos previos

  • Python 3.10+ con uv (recomendado) o pip
  • Una instancia de EVC Team Relay en ejecución (autohospedada o alojada)
  • Una cuenta de usuario en el plano de control de Relay

Parte de toda la caja de herramientas de VC

ProductoQué haceEnlace
Team RelayServidor de colaboración autohospedadorepositorio
Team Relay PluginPlugin de Obsidian para Team Relayrepositorio
Relay MCPServidor MCP para agentes de IAeste repositorio
OpenClaw SkillHabilidad de agente OpenClaw (bash)repositorio
Local SyncSincronización de bóveda <-> herramientas de desarrollo de IArepositorio
Spark MCPServidor MCP para catálogo de flujos de trabajo de IArepositorio

Comunidad

Licencia

MIT