MCP
Conecta un cliente MCP: el endpoint, las doce herramientas, las sesiones, las anclas firmadas y los presupuestos.
Conectarse
https://mcp.fastpad.aiJSON-RPC sobre un único POST. Autentícate con Authorization: Bearer fpk_live_…. Una llamada sin credenciales responde 401 con un desafío WWW-Authenticate y un enlace a los metadatos del recurso protegido, de modo que un cliente puede descubrir cómo autenticarse sin que se lo digan.
fp login # device flow; approve in a browser
fp mcp --check # verifies the brokered credentialPara un cliente local por stdio, fp mcp es el comando que lanza el cliente: habla el transporte stdio y se niega a ejecutarse en una terminal interactiva. Configura el cliente con command: "fp" y args: ["mcp"].
Las herramientas
Doce herramientas compuestas en lugar de treinta estrechas, en un orden fijo y dimensionadas para caber en unos 5.000 tokens de esquema. Se ha medido que tres servidores MCP juntos consumen 143.000 tokens de una ventana de 200.000 antes de hacer ningún trabajo.
| Herramienta | Scope | Devuelve |
|---|---|---|
fastpad_capabilities | cualquiera | identidad, scopes, tu conjunto de notas escribibles, límites — y el token de sesión que necesita todo lo demás |
fastpad_search | search:read | ids, títulos, ruta, puntuación, anclas de bloque y un fragmento corto. Nunca cuerpos |
fastpad_fetch | notes:read | hasta 20 notas como Markdown, o un resumen estructural sin prosa |
fastpad_context | notes:read | un paquete de contexto: recuperar, expandir, deduplicar, reordenar y ajustar a un presupuesto |
fastpad_query | notes:read | consulta estructurada sobre propiedades tipadas |
fastpad_graph | graph:read | recorrido tipado de un salto, cada arista con su evidencia |
fastpad_propose | notes:propose | una propuesta duradera y su URL de revisión. La única escritura |
fastpad_turn | notes:read | estado, diferencia o abandono sobre tus propias propuestas; también aceptar, solo con turns:accept |
fastpad_changes | notes:read | el flujo de cambios desde un cursor |
fastpad_history | notes:read | un bloque tal como está, con autoría y estado de revisión. No es un registro de versiones |
fastpad_memory | notes:read | el índice de memoria, o un tema |
fastpad_calendar | notes:read | eventos en una ventana de tiempo; solo ocupado/libre para un token limitado a notas. Nunca escribe |
Llama primero a fastpad_capabilities. No es cortesía: MCP no tiene estado, así que la sesión que toman todas las demás herramientas se acuña ahí.
Anclas firmadas
Los cambios propuestos direccionan bloques por ancla, obtenida de fastpad_fetch con with_handles: true. Nunca por desplazamiento de texto: una edición humana concurrente reubica un ancla, mientras que un desplazamiento apunta en silencio al texto equivocado.
Un ancla es una capacidad firmada ligada a tu sesión, tu token, una nota, un bloque y el estado de la nota en el momento en que la leíste, válida durante cinco minutos. Así, un ancla filtrada en una transcripción compartida es inerte para cualquier otro; revocar el token invalida todas las anclas que emitió; un ancla solo puede direccionar la nota de la que vino; y si una persona editó la nota desde tu lectura, la escritura se rechaza en vez de aplicarse a ciegas.
Proponer un cambio
fastpad_capabilities— sesión, scopes, notas escribiblesfastpad_searchofastpad_context— encuentra la notafastpad_fetchconwith_handles: true— cuerpo, anclas, fronterafastpad_propose— ops,expected_frontier,idempotency_key- Entrega a una persona la URL de revisión que se devuelve
Siete tipos de operación: insert_after, insert_before, replace_block y delete para la prosa, add_edge para una conexión tipada, y add_event y move_event para el calendario. Los tres últimos siempre esperan a una persona, sea cual sea el permiso del token. dry_run valida y calcula la diferencia sin escribir nada. idempotency_key es obligatorio: no hay reanudación de flujo, así que una respuesta perdida debe reintentarse con la misma clave o una propuesta se convierte en dos colas de revisión.
Declara source_block_ids. Se convierten en citas reales cuando una persona acepta, y sin ellas una retractación posterior no puede alcanzar contenido aceptado a partir de una fuente que resultó ser incorrecta.
Presupuestos, límites y errores
Cada resultado está limitado a 25.000 tokens, cortado en el límite de un bloque, con un cursor y una instrucción de una línea sobre cómo acotar — porque truncar sin guía hace que un modelo alucine sobre el hueco o repita la misma llamada.
| Error | Qué hacer |
|---|---|
stale-frontier | vuelve a leer la nota, recalcula y propón de nuevo |
handle-expired | vuelve a leer con with_handles: true |
out-of-scope | pide un token nuevo. Etiquetar no amplía un alcance ya resuelto |
insufficient-scope | reautorízate una vez con el conjunto completo indicado en el desafío |
cross-note-copy-denied | estás proponiendo texto que leíste de otra nota |
approve-not-permitted | tu token no tiene turns:accept; entrega la URL de revisión a una persona |
rate-limited | respeta retry_after_ms |
Cada error es un documento de problema RFC 9457 cuyo type es una URL que puedes abrir. El catálogo completo está en fastpad.ai/errors.