Resumen
El servidor MCP de 2Mind es un servidor MCP remoto. Da a un asistente herramientas para buscar y leer tus notas, listar tus colecciones y tareas, y pedir cambios en ellas. Funciona con la misma cuenta y los mismos datos que las apps de 2Mind.
La lectura es inmediata. La escritura nunca es silenciosa: cada herramienta de escritura crea una solicitud de aprobación, y el cambio se aplica solo cuando tú lo apruebas, salvo que hayas permitido a esa conexión aplicar cambios reversibles por su cuenta.
El servidor usa el transporte Streamable HTTP en modo sin estado. Cada petición es un único POST con un token bearer de OAuth; no hay sesiones ni flujo de eventos que mantener abierto.
Conectar
Necesitas una cuenta de 2Mind y un asistente que pueda añadir un servidor MCP remoto. Usa esta URL del servidor:
https://api.use2mind.com/mcpClaude
Abre los ajustes de conectores, elige añadir un conector personalizado, ponle un nombre como 2Mind y pega la URL del servidor. En organizaciones, puede que un propietario tenga que añadirlo primero.
ChatGPT
Activa el modo desarrollador y crea un conector nuevo con la URL del servidor y autenticación OAuth. El modo desarrollador depende de tu plan de ChatGPT y de los ajustes del espacio de trabajo.
Otros clientes
Apunta el cliente a la URL del servidor. Encuentra por sí mismo el servidor de autorización a partir de los metadatos OAuth del servidor; no hay nada más que configurar.
Qué pasa al conectarlo
- Tu asistente abre la página de inicio de sesión de 2Mind en el navegador.
- Inicias sesión con Google, con correo y contraseña, o con Apple en dispositivos Apple.
- Revisas lo que pide la app y eliges un nivel de acceso.
- Vuelves a tu asistente y aparecen las herramientas de 2Mind.
Niveles de acceso
Cuando el asistente pide acceso de escritura, la pantalla de consentimiento te deja elegir. El nivel que elijas se comprueba en cada llamada, no solo al conectar.
- «Read only»: solo lectura (predeterminado)
- Buscar, leer y listar. Las herramientas de escritura ni siquiera aparecen para esta conexión.
- «Read and make changes»: lectura y cambios
- Añade las herramientas que piden cambios. Cada cambio sigue pasando por aprobación.
Autenticación y permisos
El servidor solo acepta tokens de acceso OAuth 2.0 enviados en la cabecera Authorization como token bearer. No hay claves de API, y ningún token se pasa nunca como argumento de una herramienta.
Una petición sin token válido recibe 401 con una cabecera WWW-Authenticate que apunta a los metadatos del recurso protegido. Desde ahí el cliente encuentra el servidor de autorización e inicia un flujo de código de autorización con PKCE.
POST https://api.use2mind.com/mcpGET https://api.use2mind.com/.well-known/oauth-protected-resourceissuer https://auth.use2mind.com
| Permiso | Permite | Herramientas |
|---|---|---|
notes:read | Buscar, listar y leer notas completas; listar etiquetas. | searchfetchlist_entrieslist_tags |
collections:read | Listar y leer colecciones; listar etiquetas. | list_collectionsget_collectionlist_tags |
todos:read | Listar tareas con filtros. | list_todos |
notes:write | Pedir crear, editar, etiquetar, mover y borrar notas. | create_entryupdate_entrymove_entrydelete_entryundo_command |
todos:write | Pedir crear, editar, reordenar y borrar tareas. | create_todoupdate_tododelete_todoreorder_todosundo_command |
collections:write | Pedir crear, editar, ordenar y archivar colecciones. | create_collectionupdate_collectionreorder_collectionsarchive_collectionunarchive_collectionundo_command |
Inicia sesión con el mismo método que usas en la app. Las cuentas no se unen entre proveedores de inicio de sesión; otro proveedor o una dirección de reenvío privado de Apple puede crear una cuenta de 2Mind aparte y vacía.
Cómo funcionan los cambios
Ninguna herramienta de escritura cambia tus datos por sí sola. Lee la versión actual de lo que modifica, prepara un plan exacto y crea una solicitud de aprobación. La respuesta es una operación que puedes seguir.
- El asistente crea una solicitudLlama a una herramienta de escritura con un requestId que él mismo genera. El servidor responde con una operación en pending_approval y un resumen de una línea del cambio.
- Recibes una notificaciónTe llega una notificación al teléfono. Ahí apruebas o rechazas el cambio; el asistente nunca aprueba en tu nombre.
- Se aplica el cambioAl aprobarlo, el cambio se aplica y queda registrado para poder deshacerlo más tarde. Las solicitudes sin respuesta caducan a las 24 horas.
- El asistente comprueba el resultadoLlama a get_operation con el operationId para ver si el cambio se aplicó, se rechazó, falló o caducó.
Ejemplo
Llamada a la herramienta
{
"name": "create_todo",
"arguments": {
"requestId": "3f6c2a9e-8b1d-4c7a-9e2f-5a1b7d4c8e60",
"collectionId": "b2e4d6f8-1a3c-4e5f-8a7b-9c0d1e2f3a4b",
"content": "Pedir cita con el dentista",
"dueDate": "2026-10-02T09:00:00+03:00"
}
}Resultado
{
"operationId": "c81f0e2a-6d4b-4a9e-b3c7-1f2e3d4c5b6a",
"action": "create_todo",
"status": "pending_approval",
"summary": "Añadir la tarea «Pedir cita con el dentista» a Recados",
"approvalUrl": "https://api.use2mind.com/connect/approvals/c81f0e2a-6d4b-4a9e-b3c7-1f2e3d4c5b6a",
"expiresAt": "2026-10-01T09:00:00.000Z"
}El objeto de operación
operationId | Identificador que se pasa a get_operation. |
|---|---|
action | La herramienta que creó la solicitud. |
status | En qué punto está la solicitud; consulta la tabla de abajo. |
summary | Una línea escrita por el servidor que describe exactamente qué cambiará. |
approvalUrl | Una página protegida con inicio de sesión donde también se puede revisar la solicitud. |
expiresAt | Cuándo caduca una solicitud sin respuesta. |
commandLogId | Se rellena al aplicarse. Úsalo con undo_command. |
result | El resultado de un cambio aplicado, como el id de una nota nueva. |
Valores de estado
pending_approval | Esperando a que la apruebes o la rechaces. |
|---|---|
applied | Aprobada y aplicada. |
failed | Aprobada, pero no se pudo aplicar, por ejemplo porque el elemento cambió entretanto. |
rejected | La rechazaste. |
expired | Sin respuesta en 24 horas. No cambió nada. |
Aplicar sin preguntar
En «Connected apps», cada conexión tiene un interruptor «Apply changes without asking», desactivado por defecto. Si está activado, los cambios reversibles de esa conexión se aplican al momento y se devuelven como applied. delete_entry y delete_todo siguen esperando tu aprobación. Cada cambio sigue registrándose y se puede deshacer.
Deshacer
El asistente puede deshacer un cambio aplicado con undo_command, usando commandLogId y version, o puedes hacerlo tú desde «Recent changes» con un toque. Si el elemento se editó después del cambio, se rechaza el deshacer, así que nunca sobrescribe tu trabajo más reciente.
Referencia de herramientas
Una conexión solo lista las herramientas que su nivel de acceso permite. Toda herramienta de escritura recibe un requestId: reintentar con el mismo requestId devuelve la misma operación en lugar de crear un segundo cambio.
Lectura
search
Busca en tus notas una palabra clave o un tema y devuelve hasta 20 resultados con su id, título y enlace.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
query | string | Sí | La palabra clave o el tema que se busca.1–2000 caracteres |
fetch
Lee una nota completa por su id. Una nota muy larga llega por partes; pasa el nextId devuelto para leer la siguiente.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | Sí | Un id de nota de search, o un nextId de un fetch anterior para continuar una nota larga.hasta 80 caracteres |
list_entries
Lista tus notas, las más recientes primero, con filtro opcional por colección, etiqueta, un texto contenido en el título o el cuerpo, o un rango de fechas de creación. Cada fila incluye un fragmento, todas las colecciones de la nota y sus etiquetas. Paginado.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
collectionId | uuid | No | Solo notas de esta colección. |
tag | string | No | Solo notas con esta etiqueta, sin distinguir mayúsculas.1–100 caracteres |
contains | string | No | Solo notas cuyo título o cuerpo contiene este texto, sin distinguir mayúsculas.1–200 caracteres |
createdAfter | string (date-time) | No | Solo notas creadas en este momento o después. ISO 8601 con desfase de zona horaria. |
createdBefore | string (date-time) | No | Solo notas creadas en este momento o antes. ISO 8601 con desfase de zona horaria. |
limit | integer | No | Cuántos elementos devolver por página.1–50 · predeterminado 20 |
cursor | string (date-time) | No | El valor nextCursor de la página anterior. |
list_collections
Lista tus colecciones en tu orden guardado, con tipo, colección superior, estado de archivo y si contiene tareas. Paginado.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
limit | integer | No | Cuántos elementos devolver por página.1–50 · predeterminado 20 |
cursor | string | No | El valor nextCursor de la página anterior.hasta 100 caracteres |
includeArchived | boolean | No | Devolver también las colecciones archivadas. Ocultas por defecto. |
get_collection
Lee una colección por su id: los mismos campos que list_collections, más su última modificación, cuántas notas contiene y cuántas de sus tareas siguen pendientes.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
collectionId | uuid | Sí | La colección que se lee. |
list_todos
Lista tus tareas, con filtro opcional por colección, estado o rango de fechas de vencimiento. Paginado.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
collectionId | uuid | No | Solo tareas de esta colección. |
completed | boolean | No | Solo tareas completadas (true) o pendientes (false). |
dueAfter | string (date-time) | No | Solo tareas que vencen en este momento o después. ISO 8601 con desfase de zona horaria. |
dueBefore | string (date-time) | No | Solo tareas que vencen en este momento o antes. ISO 8601 con desfase de zona horaria. |
limit | integer | No | Cuántos elementos devolver por página.1–50 · predeterminado 20 |
cursor | string | No | El valor nextCursor de la página anterior.hasta 100 caracteres |
list_tags
Lista tu vocabulario de etiquetas con cuántas notas y colecciones lleva cada una, las más usadas primero. Las notas y las colecciones comparten un solo vocabulario.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|
Notas
create_entry
Pide una nota nueva en una colección existente. La colección siempre se elige de forma explícita.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
collectionId | uuid | Sí | La colección donde se crea la nota. Se obtiene con list_collections. |
content | string | Sí | El cuerpo de la nota.1–20.000 caracteres |
title | string o null | No | El título de la nota. null lo elimina.hasta 500 caracteres |
tags | string[] | No | Etiquetas de la nota nueva, sin #. Reutiliza nombres de list_tags cuando puedas.hasta 10 elementos |
update_entry
Pide cambiar el título, el cuerpo o las etiquetas de una nota.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
entryId | uuid | Sí | La nota que se cambia. |
title | string o null | No | El título de la nota. null lo elimina.hasta 500 caracteres |
content | string o null | No | El cuerpo de la nota.hasta 20.000 caracteres |
tags | string[] | No | El conjunto completo y nuevo de etiquetas, sin #. Lo que no se incluya se elimina; [] las elimina todas. Omítelo para no tocar las etiquetas.hasta 10 elementos |
move_entry
Pide un nuevo conjunto de colecciones para una nota. La nota sale de cualquier colección no incluida, junto con las tareas que creó allí.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
entryId | uuid | Sí | La nota que se cambia. |
collectionIds | uuid[] | Sí | El conjunto completo y nuevo de colecciones de la nota.1–5 elementos |
primaryCollectionId | uuid | No | La colección principal. Debe estar en collectionIds; por defecto, la primera. |
delete_entry
Pide borrar una nota y las tareas vinculadas. Siempre requiere aprobación.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
entryId | uuid | Sí | La nota que se cambia. |
Tareas
create_todo
Pide una tarea nueva al final de una lista de tareas.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
collectionId | uuid | Sí | Una colección cuyo carriesTodos es true en list_collections. |
content | string | Sí | El texto de la tarea.1–2000 caracteres |
dueDate | string (date-time) o null | No | La fecha de vencimiento, ISO 8601 con desfase de zona horaria. null la borra. |
update_todo
Pide cambiar el texto, el estado o la fecha de vencimiento de una tarea.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
todoId | uuid | Sí | La tarea que se cambia. |
content | string o null | No | El texto de la tarea.hasta 20.000 caracteres |
isCompleted | boolean | No | Marcar la tarea como hecha (true) o pendiente (false). |
dueDate | string (date-time) o null | No | La fecha de vencimiento, ISO 8601 con desfase de zona horaria. null la borra. |
delete_todo
Pide borrar una tarea. Siempre requiere aprobación.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
todoId | uuid | Sí | La tarea que se cambia. |
reorder_todos
Pide un nuevo orden para las tareas de una colección, la más importante primero. Basta con nombrar las tareas que se mueven; el resto conserva su orden detrás de ellas.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
collectionId | uuid | Sí | La colección cuyas tareas se reordenan. Cada id debe pertenecer a ella. |
orderedIds | uuid[] | Sí | Ids de tareas en el nuevo orden, de list_todos. Las tareas no nombradas conservan su orden detrás de estas.1–100 elementos |
Colecciones
create_collection
Pide una colección nueva y vacía de un tipo dado, con etiquetas opcionales. El tipo no se puede cambiar después y los nombres son únicos dentro de la misma colección superior.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
name | string | Sí | El nombre de la colección, único dentro de la misma colección superior.1–200 caracteres |
type | stringnotetodo_listplanidearesearcheventgeneric | Sí | El tipo de colección. todo_list contiene tareas; las demás contienen notas. |
description | string o null | No | Una descripción breve. null la borra.hasta 2000 caracteres |
parentId | uuid o null | No | Crearla dentro de esta colección. Omítelo o usa null para el nivel superior. |
tags | string[] | No | Etiquetas de la colección nueva, sin #. Las colecciones que comparten etiqueta se muestran como relacionadas.hasta 5 elementos |
update_collection
Pide renombrar una colección, cambiar su descripción o sus etiquetas, o moverla dentro de otra colección. El tipo no se puede cambiar.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
collectionId | uuid | Sí | La colección que se cambia. |
name | string | No | El nombre de la colección, único dentro de la misma colección superior.1–200 caracteres |
description | string o null | No | Una descripción breve. null la borra.hasta 2000 caracteres |
parentId | uuid o null | No | Moverla dentro de esta colección. null la mueve al nivel superior. |
tags | string[] | No | El conjunto completo y nuevo de etiquetas, sin #. Lo que no se incluya se elimina; [] las elimina todas. Omítelo para no tocar las etiquetas.hasta 5 elementos |
reorder_collections
Pide un nuevo orden para tus colecciones, la más importante primero.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
orderedIds | uuid[] | Sí | Ids de colección en el nuevo orden, obtenidos de list_collections.1–50 elementos |
archive_collection
Pide archivar una colección. Se conserva intacta y se oculta de la lista predeterminada.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
collectionId | uuid | Sí | La colección que se cambia. |
unarchive_collection
Pide sacar una colección del archivo.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
collectionId | uuid | Sí | La colección que se cambia. |
Operaciones
undo_command
Pide deshacer un cambio que ya se aplicó.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
requestId | uuid | Sí | Un UUID que genera el asistente. Reutilizarlo devuelve la operación existente. |
commandLogId | uuid | Sí | El commandLogId de la operación aplicada. |
version | integer | Sí | La versión del cambio que se deshace.1 o más |
get_operation
Lee el estado y el resultado de una solicitud creada por una herramienta de escritura. Solo devuelve solicitudes de la misma conexión.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
operationId | uuid | Sí | El operationId que devolvió una herramienta de escritura. |
list_operations
Lista las solicitudes creadas por esta conexión, las más recientes primero, con filtro opcional por estado. Cada fila es la misma operación que devuelve get_operation. Paginado.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
status | stringpending_approvalappliedfailedrejectedexpired | No | Solo solicitudes en este estado. |
limit | integer | No | Cuántos elementos devolver por página.1–50 · predeterminado 20 |
cursor | string (date-time) | No | El valor nextCursor de la página anterior. |
Peticiones de ejemplo
No necesitas nombrar herramientas. Pregunta con naturalidad y el asistente las elige:
- ¿Qué guardé sobre la reforma de la cocina el mes pasado?
- Resume mis notas de la colección Investigación.
- ¿Qué tareas me vencen esta semana?
- Añade «renovar el pasaporte» a mi lista Recados, para el viernes.
- Crea una colección Ideas de viaje y mueve allí mis notas sobre Lisboa.
Límites y errores
Cada conexión puede hacer hasta 60 peticiones por minuto. Los errores de protocolo llegan como respuestas HTTP; los problemas de una llamada concreta llegan como errores de herramienta que el asistente puede leer.
| Respuesta | Significado | Qué hacer |
|---|---|---|
401 invalid_token | Falta el token, ha caducado o se revocó la conexión. | Vuelve a conectar 2Mind en tu asistente e inicia sesión de nuevo. |
403 invalid_origin | La petición vino de una página web que no puede llamar al servidor. | Usa un asistente o cliente compatible en lugar de una página web. |
429 rate_limited | La conexión superó las 60 peticiones en un minuto. | Espera el tiempo indicado en Retry-After, 60 segundos, y vuelve a intentarlo. |
isError: true | La llamada llegó al servidor pero no se pudo completar, por ejemplo por falta de permiso, datos no válidos o un elemento que cambió. | Lee el texto del error. El asistente suele poder corregir los datos o volver a leer el elemento y reintentar. |
Límites de tamaño
- search: consultas de hasta 2.000 caracteres, hasta 20 resultados.
- list_collections y list_todos: 20 elementos por página por defecto, 50 como máximo.
- Notas: cuerpo de hasta 20.000 caracteres, título de hasta 500.
- Una nota puede estar en hasta 5 colecciones a la vez.
- Etiquetas: hasta 10 por nota y 5 por colección, nombres de hasta 100 caracteres.
Planes
El servidor MCP está incluido en los planes Plus y Pro. Conectar un asistente no cambia lo que incluye tu plan en las apps.
Solución de problemas
Mi asistente puede leer pero no hacer cambios.
La conexión está en solo lectura. Cambiar el nivel requiere un nuevo consentimiento: revoca la conexión en «Connected apps», vuelve a conectar y elige «Read and make changes».
El asistente dijo que hizo un cambio, pero no pasó nada.
Probablemente el cambio espera tu aprobación. Revisa la notificación en tu teléfono. Las solicitudes sin respuesta caducan a las 24 horas.
Veo una cuenta vacía después de conectar.
Seguramente iniciaste sesión con un método distinto al de la app. Desconecta y vuelve a conectar con el mismo inicio de sesión que usas en 2Mind.
Mi asistente me pide iniciar sesión una y otra vez.
La conexión se revocó o su inicio de sesión caducó. Quita 2Mind del asistente y vuelve a añadirlo.
¿Puede un asistente borrar mis notas sin preguntar?
No. delete_entry y delete_todo siempre esperan tu aprobación, incluso con «Apply changes without asking» activado.
¿Cómo desconecto un asistente?
Revócalo en «Connected apps». El acceso se corta al instante. También puedes quitar el conector en los ajustes del propio asistente.