DEV Community

Cover image for Cómo dejar que un chat de Claude edite tus Notes de osFoundry sin sobrescribir a un compañero
BBT for BBT Español

Posted on

Cómo dejar que un chat de Claude edite tus Notes de osFoundry sin sobrescribir a un compañero

Al terminar, una conversación de Claude lee un rango de celdas de una pestaña Sheet en una de tus Notes de osFoundry, reescribe una pestaña de texto de esa misma Note y añade una pestaña Slides nueva, mientras una persona sigue escribiendo en esa Note. Cada escritura indica el ID exacto de la pestaña y la versión de la Note que Claude leyó por última vez. Si la persona guardó algo entretanto, osFoundry rechaza la escritura de Claude y Claude vuelve a leer antes de reintentar. No desaparece la edición de nadie.

Quién hace qué

Lado de Claude Lado de osFoundry
Inicio de sesión Tu cuenta de Claude, sin cambios La conexión que aprobaste para un workspace
Qué Note Claude la elige de lo que lista el servidor Solo Notes de proyectos a los que se añadió la conexión
Qué pestaña Claude debe enviar un tab_id exacto list_note_tabs devuelve cada instancia de pestaña, incluidas dos Sheets del mismo tipo
Conflictos Claude vuelve a leer y rehace su cambio Las escrituras llevan expected_version; una obsoleta se rechaza, no se fusiona
Reintentos Claude puede reenviar la misma llamada La misma idempotency_key devuelve el primer resultado en vez de escribir dos veces
Aprobaciones El propio aviso de permisos de herramientas de Claude antes de cada escritura Tus permisos de edición actuales sobre esa Note, comprobados en cada llamada

Configuración

El conector es el mismo de la configuración del conector personalizado de Claude (icono de llave → Connected → Add assistant, y luego añadir https://api.osfoundry.io/api/v1/external-mcp en Claude). Los pasos siguientes suponen que esa conexión existe y está añadida a un proyecto.

1. Pon la Note en el proyecto conectado

Abre la Note, abre su panel derecho y ve a Config → Settings. El campo Project muestra "Add to project" (añadir al proyecto) cuando la Note no tiene ninguno. Elige el proyecto al que pertenece la conexión de Claude.

Una Note que solo existe en este dispositivo no tiene copia en la nube, así que la conexión no puede verla. La Note tiene que estar sincronizada con tu workspace.

2. Comprueba que las herramientas de Notes estén activas

En icono de llave → Connected, selecciona la conexión de Claude y mira Tools. Todas las herramientas compatibles vienen activadas por defecto. Para esta guía, estas tienen que seguir marcadas:

read   list_note_tabs   read_note_tab   read_sheet_range   list_note_attachments
write  edit_note_tab    create_note_tab add_note_source
Enter fullscreen mode Exit fullscreen mode

La lista de Tools de una conexión de Claude, todas activadas por defecto

Ejemplo: La lista de Tools de una conexión de Claude, todas activadas por defecto

Para dejar un chat en solo lectura durante un tiempo, desmarca las tres herramientas de escritura y haz clic en Save tools. La lectura sigue funcionando.

3. Revisa tus permisos de edición

Las escrituras de Claude se ejecutan con los permisos de la persona que aprobó la conexión, y se vuelven a comprobar en cada llamada. Si solo puedes ver la Note, edit_note_tab se rechaza aunque la herramienta esté activada. Abre la pestaña Access de la Note si tienes dudas.

4. Pide las cosas con nombres de pestaña

En un chat de Claude con el conector de osFoundry activado, nombra la Note y las pestañas. Claude convierte los nombres en IDs de pestaña por su cuenta, pero "la hoja Owners" es menos ambiguo que "la tabla".

En osFoundry, abre la Note "Q3 launch". Lee A1:D12 de la hoja Owners,
reescribe la pestaña Brief para que cada tarea abierta tenga un responsable de esa hoja
y luego añade una pestaña Slides "Launch status" con una diapositiva por responsable.
Enter fullscreen mode Exit fullscreen mode

Una ejecución real

El contenido de la Note y la respuesta de Claude son datos de ejemplo. Los nombres de herramientas y de argumentos son los que el servidor en producción lista en tools/list. En Claude Code, las mismas herramientas aparecen como mcp__osfoundry__list_note_tabs, etc.

Ejemplo

Claude → list_note_tabs {"note_id": "…"}
       ← version "…41.118Z"
         pestañas: Brief (note), Owners (sheet), Owners archive (sheet)
Claude → read_sheet_range {"note_id": "…", "tab_id": "<Owners>",
                           "start_row": 0, "start_col": 0,
                           "row_count": 12, "col_count": 4}
       ← 12 × 4 valores
Claude → read_note_tab {"note_id": "…", "tab_id": "<Brief>"}
       ← texto, version "…41.118Z"
Claude → edit_note_tab {"note_id": "…", "tab_id": "<Brief>",
                        "operation": "replace_text", "text": "…",
                        "expected_version": "…41.118Z",
                        "idempotency_key": "brief-owners-1"}
       [Claude te pide permitir esta llamada a la herramienta → Allow]
       ← rechazada: la Note cambió después de esa versión

         (mientras tanto, Mika añadió "press kit" a la pestaña Brief en osFoundry)

Claude → read_note_tab {"note_id": "…", "tab_id": "<Brief>"}
       ← el texto ya incluye "press kit", version "…07.502Z"
Claude → edit_note_tab {... "text": "… press kit — owner: Mika …",
                        "expected_version": "…07.502Z",
                        "idempotency_key": "brief-owners-2"}
       ← guardada, version "…19.044Z"
Claude → create_note_tab {"note_id": "…", "tab_type": "slides",
                          "label": "Launch status",
                          "slides": [{"title": "Aiko"}, {"title": "Mika"}, …],
                          "expected_version": "…19.044Z",
                          "idempotency_key": "launch-status-deck"}
       ← nuevo ID de pestaña "<Launch status>"

Claude: El Brief ya tiene un responsable para las 9 tareas abiertas, incluida
        "press kit", que Mika añadió mientras yo editaba. La nueva pestaña
        Launch status tiene una diapositiva por responsable.
Enter fullscreen mode Exit fullscreen mode

Pasaron tres cosas que no se ven en un chat normal. Claude leyó el rango de la Sheet y no todo el libro. read_sheet_range devuelve como máximo 100 por 100 celdas, así que una Sheet grande no inunda la conversación. La primera edición falló a propósito: la versión de Claude era anterior al guardado de Mika. Claude no reenvió su texto viejo con la versión nueva. Volvió a leer la pestaña y escribió un Brief que contiene tanto su cambio como la línea de Mika. La llamada de creación lleva su propia clave, así que si la respuesta se hubiera perdido y Claude hubiera llamado otra vez, osFoundry habría devuelto la misma pestaña Launch status en lugar de crear una segunda.

La pestaña Owners archive es la razón por la que importan los IDs de pestaña. Una Note puede tener varias pestañas Sheet o Slides, y ni un nombre ni un tipo identifican una sola. Cada llamada a edit_note_tab necesita el ID que devolvió list_note_tabs.

Dónde está el límite

Una escritura obsoleta se rechaza, nunca se fusiona. osFoundry no intenta combinar en el servidor el texto de Claude con el de la persona, porque un replace_text de texto completo no tiene una forma fiable de saber cuál de dos versiones de un párrafo querías. El agente es quien conoce la intención, así que el agente rehace el cambio sobre lo que hay ahora. Los guardados de la propia persona desde la app de escritorio se protegen de la misma forma. Un guardado lleva la revisión desde la que empezó y, si la Note cambió por debajo, la app conserva la edición de la persona como borrador local y marca un conflicto de sincronización en lugar de guardar encima del cambio de Claude.

La versión pertenece a la Note. La obtienes de list_note_tabs antes de crear una pestaña y de read_note_tab antes de editar una. Cuando la persona edita cualquier pestaña de la Note, la siguiente escritura de Claude tiene que volver a leer, aunque apunte a otra pestaña. La lectura extra es barata y garantiza que Claude nunca escriba a partir de una imagen desactualizada de la Note.

Crear una pestaña solo añade. create_note_tab crea pestañas Slides y Sheet y no puede reemplazar el contenido de una pestaña existente. Cada operación de edición corresponde a un tipo de pestaña: replace_text para pestañas Note y Markdown, slide_add y slides_add_outline para Slides, sheet_set_range para celdas exactas de una Sheet y replace_tab_data para otras pestañas de contenido compatibles.

Los archivos se quedan en metadatos. list_note_attachments lista los Files y Sources de una Note, pero no devuelve el contenido de los archivos ni enlaces de descarga. Un enlace pegado en un chat podría reenviarse a cualquier parte y seguiría funcionando después de revocar la conexión. Claude puede añadir una cita con add_note_source, que recibe una URL HTTP o HTTPS, la versión de la Note y una clave, igual que las demás escrituras.

Mover la Note corta el acceso en la siguiente llamada. Muévela a un proyecto que no esté en la conexión, quita el proyecto de la conexión o haz clic en Revoke connection, y la siguiente lectura de Claude se rechaza. Un token emitido antes no la mantiene abierta.

Siguiente paso

Pide a Claude que convierta el rango Owners en un briefing de cinco diapositivas en una pestaña Slides nueva y, mientras trabaja, edita tú mismo el título de una diapositiva. Verás la escritura rechazada y la nueva lectura en las llamadas a herramientas. Cómo encajan las pestañas Slides con el resto de una Note está en la página de Note Slides.

Top comments (0)