Recordist Gateway

Lee las reuniones que grabaste con Recordist en tu propio ordenador: transcripciones, notas, elementos de acción y búsqueda. Solo se comunica con la aplicación en 127.0.0.1; nada sale de la máquina.

Documentación

@recordist/gateway

Servidor MCP + agente A2A para Recordist, el tomador de notas de reuniones que se ejecuta en tu propia computadora, sin bots en la llamada y sin subir archivos. Permite que Claude Desktop, Claude Code, Cursor y otros agentes lean y actúen sobre las reuniones grabadas en tu máquina.

Recordist se está abriendo en pequeñas oleadas: solicita un lugar en https://recordist.app/early-access (Mac hoy; Windows y Linux en acceso anticipado).

  • Lecturas (listar, obtener, transcripción, búsqueda, elementos de acción) funcionan esté o no la aplicación Recordist en ejecución: la puerta de enlace habla con la API local de la aplicación cuando está activa y, si no, recurre a abrir recordist.db en modo solo lectura.
  • Acciones (iniciar/detener grabación, agregar marcador, regenerar notas) requieren la aplicación. Cuando no está en ejecución, fallan con Recordist app is not running.
  • Todo es solo de bucle local. Nada sale de tu máquina.

Instalación

npx -y @recordist/gateway --doctor     # check data dir, DB, token, app

Requiere Node 20+. better-sqlite3 incluye binarios precompilados para plataformas comunes.

Conectar un asistente

Claude Desktop

claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "recordist": {
      "command": "npx",
      "args": ["-y", "@recordist/gateway"]
    }
  }
}

Claude Code

claude mcp add recordist -- npx -y @recordist/gateway

o, para el transporte HTTP mientras recordist-gateway --http esté en ejecución:

claude mcp add --transport http recordist http://127.0.0.1:47322/mcp

Cursor

.cursor/mcp.json (proyecto) o ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "recordist": {
      "command": "npx",
      "args": ["-y", "@recordist/gateway"]
    }
  }
}

Cualquier cliente Streamable HTTP

recordist-gateway --http          # http://127.0.0.1:47322/mcp

Lo que obtiene el asistente

Herramientas

HerramientaPropósito
list_meetingsReuniones recientes; opcional q, from/to, limit/offset
get_meetingUna reunión con notas, elementos de acción y marcadores
get_transcriptTranscripción como json | md | srt | vtt | txt
search_meetingsBúsqueda de texto completo en transcripciones y notas (FTS5)
get_action_itemsElementos de acción, filtrar por meeting_id / open_only
regenerate_notesVolver a ejecutar notas de IA (summary, action_items, decisions, …) — requiere la aplicación
start_recordingIniciar grabación — requiere la aplicación + el ajuste "permitir inicio remoto"
stop_recordingDetener la grabación actual — requiere la aplicación
add_markerMarcar el momento actual — requiere la aplicación

Recursos: recordist://meeting/{id} (JSON) y recordist://meeting/{id}/transcript (Markdown). La lista de recursos muestra las 50 reuniones más recientes.

Indicaciones: summarize_meeting, draft_followup_email, weekly_review.

Agente A2A

recordist-gateway --a2a           # http://127.0.0.1:47323/

Tarjeta de agente en http://127.0.0.1:47323/.well-known/agent.json; las habilidades reflejan las herramientas anteriores. JSON-RPC 2.0 en / con tasks/send, tasks/get, tasks/cancel y tasks/sendSubscribe (SSE).

Las tareas en lenguaje natural se enrutan a una habilidad con un pequeño enrutador de palabras clave; cada tarea completada devuelve una parte de texto y una parte de datos con el resultado estructurado. Para omitir el enrutador, envía una parte de datos {"skill": "...", "args": {...}}.

curl -s http://127.0.0.1:47323/ \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tasks/send",
    "params": {
      "id": "task-1",
      "message": { "role": "user", "parts": [
        { "type": "text", "text": "What are my open action items from this week?" }
      ]}
    }
  }' | jq .result.artifacts[0].parts

# explicit skill call
curl -s http://127.0.0.1:47323/ -H 'content-type: application/json' -d '{
  "jsonrpc":"2.0","id":2,"method":"tasks/send",
  "params":{"message":{"role":"user","parts":[
    {"type":"data","data":{"skill":"get_transcript","args":{"meeting_id":"01J…","format":"srt"}}}
  ]}}}'

# streaming
curl -N http://127.0.0.1:47323/ -H 'content-type: application/json' -d '{
  "jsonrpc":"2.0","id":3,"method":"tasks/sendSubscribe",
  "params":{"message":{"role":"user","parts":[{"type":"text","text":"list my meetings from today"}]}}}'

CLI

recordist-gateway                 MCP over stdio (default)
recordist-gateway --http          MCP over Streamable HTTP on 127.0.0.1:47322/mcp
recordist-gateway --a2a           A2A agent on 127.0.0.1:47323
recordist-gateway --all           stdio + --http + --a2a
recordist-gateway --doctor        diagnostics: data dir, DB, token, app reachability
recordist-gateway --version
  --http-port <n>  --a2a-port <n>  --host <addr>

Los registros van a stderr; stdout está reservado para el transporte MCP stdio.

Variables de entorno

VariablePredeterminadoPropósito
RECORDIST_DATA_DIRmacOS ~/Library/Application Support/app.recordist.desktop
Windows %APPDATA%\app.recordist.desktop
Linux ~/.local/share/app.recordist.desktop
Dónde viven recordist.db y api_token
RECORDIST_API_URLhttp://127.0.0.1:47321URL base de la API local
RECORDIST_API_TOKENcontenido de <data>/api_tokenToken Bearer para la API local

Cómo funciona la selección de backend

En cada llamada, la puerta de enlace sondea GET /v1/health (tiempo de espera de 800 ms, resultado en caché durante 5 s). Si la aplicación responde, la llamada va a la API. De lo contrario, las lecturas abren <data>/recordist.db con readonly: true (el WAL de la aplicación nunca se escribe) y las acciones devuelven Recordist app is not running. FTS5 (segments_fts) se usa para la búsqueda cuando está presente, con un respaldo de LIKE en caso contrario.

Notas de seguridad

  • La puerta de enlace solo se vincula a 127.0.0.1 (--host existe para contenedores; no lo expongas en una interfaz de red). El transporte HTTP Streamable habilita la protección contra el reenlace de DNS y solo acepta Host: 127.0.0.1 / localhost.
  • El token de API se lee de <data>/api_token, que la aplicación escribe con modo 0600. --doctor advierte si el archivo es legible por grupo o por todos. Nunca lo confirmes ni lo compartas; cualquiera con el token puede controlar la grabación en tu máquina.
  • La base de datos SQLite se abre en modo solo lectura; la puerta de enlace nunca la modifica.
  • Sin telemetría, sin llamadas de red salientes.

Desarrollo

npm install
npm run build      # tsc → dist/
npm test           # vitest
node dist/cli.js --doctor

Uso como biblioteca

import { createRecordistData, createMcpServer } from "@recordist/gateway";

const data = createRecordistData();          // API with SQLite fallback
const server = createMcpServer(data);        // McpServer — attach any transport

Acerca de

La puerta de enlace es el pequeño puente abierto entre tu asistente de IA y la copia de Recordist que se ejecuta en tu propia computadora. No contiene código de la aplicación ni claves; solo puede acceder a la API local en la máquina donde se ejecuta. Problemas y preguntas: support@recordist.app. Informes de seguridad: security@recordist.app (ver SECURITY.md). Hecho por Recordist, un pequeño estudio independiente en Ontario, Canadá.