Acceso MCP (agentes de IA)
MCP ya está totalmente disponible en iPhone (además de la app web). La pantalla del iPhone refleja la de la web e incluye los mismos snippets de configuración para todos los clientes de IA compatibles.
El acceso MCP requiere un plan Pro o Ultra. Ambos planes tienen acceso completo de lectura + escritura (27 herramientas) y pueden cambiar al modo de solo lectura si lo prefieres.
MCP (Model Context Protocol) te permite conectar asistentes de IA y herramientas de automatización directamente a tus datos de TellDone. Una vez conectado, tu agente de IA puede leer tus notas, tareas, eventos, informes, etiquetas e historial de cambios, y crear, actualizar, eliminar y restaurar elementos. Hay 27 herramientas en total: 10 para lectura y 17 para escritura.
Disponible tanto en la app de iPhone (Ajustes → Integrations → AI Agents) como en la app web (Ajustes → AI Agents).
Dos formas de conectar
Hay dos formas de autenticar un cliente de IA, y ambas son totalmente compatibles:
- OAuth 2.1 (recomendado): el flujo estándar de consentimiento "Iniciar sesión con TellDone". Es lo que usan la interfaz de conectores de Claude Desktop y Claude.ai. Sin copiar tokens: inicias sesión con tu cuenta de TellDone y apruebas los permisos que pide el cliente.
- Token Bearer: copia tu token de acceso personal desde Ajustes y pégalo en la configuración de tu cliente. Es lo más sencillo para scripts, CLIs y clientes que no tienen un flujo OAuth integrado.
| Cliente | Recomendado |
|---|---|
| Claude Desktop / Cowork | OAuth: añade un conector personalizado con la URL de MCP y luego inicia sesión |
| Claude Code (CLI) | Cualquiera de las dos: claude mcp add te guía por OAuth en el navegador, o añade un encabezado Bearer para el método con token |
| Scripts o tu propio código | Token Bearer: lo más sencillo de automatizar |
| Un cliente que solo permite elegir de un directorio de conectores | Usa por ahora el token Bearer o el puente mcp-remote: TellDone aún no está en ningún directorio de conectores |
Requisitos de plan
| Plan | MCP |
|---|---|
| Free | Bloqueado |
| Basic | Bloqueado |
| Pro | Lectura + escritura (27 herramientas) - puede pasar al modo solo lectura |
| Ultra | Lectura + escritura (27 herramientas) - puede pasar al modo solo lectura |
La pantalla en la app
La pantalla AI Agents tiene tres estados según tu plan y si MCP está activado.
Bloqueado (Free y Basic)
Si estás en el plan Free o Basic, la pantalla explica qué hace MCP y muestra un botón Upgrade. Al pulsarlo se abre el paywall donde puedes pasar a Pro o Ultra.
Desactivado (Pro y Ultra, función apagada)
Si estás en Pro o Ultra pero aún no has activado MCP, la pantalla muestra un resumen breve de lo que tu plan permite (número de herramientas, modo de acceso, cuotas) y un botón Enable. Púlsalo para generar tu token de conexión y empezar la integración.
Activado
Una vez activado, la pantalla muestra todo lo necesario para conectar un cliente de IA:
- Selector de modo: en Ultra puedes alternar entre Solo lectura y Lectura + escritura. En Pro el modo es fijo en Lectura + escritura.
- Fila de Access Token con un botón de ojo para mostrar u ocultar el token y un botón para copiarlo.
- Selector de configuración con pestañas para Claude Code, Cursor, Windsurf y Other. El snippet correspondiente aparece bajo las pestañas, listo para copiar y pegar en tu cliente de IA.
- Botón Regenerate: rota el token al instante y desconecta cualquier sesión activa que lo estuviera usando.
- Botón Disable: apaga MCP y elimina el token. Puedes reactivarlo más tarde, pero se emitirá un token nuevo.
Mantén tu token de conexión en privado. Cualquiera que lo tenga puede acceder a tus datos de TellDone. Usa Regenerate si sospechas que el token se ha filtrado.
Cómo activar
Puedes configurar MCP desde cualquier plataforma:
- iPhone: Ajustes → Integrations → AI Agents (MCP)
- Web: app.telldone.app → Ajustes → AI Agents
Pasos:
- Pulsa Enable.
- Elige tu modo de acceso (solo en Ultra; en Pro siempre es Lectura + escritura).
- Muestra y copia tu token con los iconos de ojo y copiar.
- Elige tu herramienta en la sección Setup (Claude Code, Cursor, Windsurf u Other).
- Pega el snippet en la configuración de tu cliente de IA.
Conectar con OAuth
OAuth es la vía recomendada para Claude Desktop, Claude.ai, Cowork y Claude Code: inicias sesión con tu cuenta de TellDone en lugar de andar copiando un token.
URL de MCP para OAuth: https://api.telldone.app/mcp/user (sin /mcp al final: esa es otra URL, usada solo para la vía con token Bearer que se describe más abajo)
Claude Desktop / Cowork
- En el cliente, elige Add custom connector.
- Introduce la URL del servidor:
https://api.telldone.app/mcp/user - El cliente abre la página de consentimiento de TellDone en tu navegador. Verás qué app pide acceso, los permisos exactos que solicita y un formulario para iniciar sesión.
- Inicia sesión con el correo y la contraseña de tu cuenta de TellDone y pulsa Allow.
- El cliente recibe un token de acceso automáticamente y se conecta. No hay ningún token que copiar.
El inicio de sesión en la página de consentimiento usa el correo y la contraseña de tu cuenta de TellDone. Si tu cuenta solo tiene inicio de sesión con Apple o Google (sin contraseña definida), usa por ahora el método con token Bearer que se describe más abajo.
Claude Code
OAuth (abre el inicio de sesión en el navegador):
claude mcp add --transport http telldone https://api.telldone.app/mcp/user
Claude Code detecta el flujo de OAuth automáticamente, pero no inicia tu sesión en la primera llamada: ejecuta /mcp dentro de Claude Code y elige Authenticate para abrir el inicio de sesión en el navegador. A partir de ahí renueva tu token de acceso por ti, así que no tienes que mantener nada.
Token Bearer (sin navegador, ideal para entornos sin interfaz):
claude mcp add telldone --transport http \
https://api.telldone.app/mcp/user/mcp \
--header "Authorization: Bearer YOUR_TOKEN"
Consigue tu YOUR_TOKEN en la app: Ajustes → Integrations → AI Agents → Copy token (consulta Cómo activar más arriba).
Conectar con un token Bearer
Para clientes sin soporte de OAuth integrado (Cursor, Windsurf y otros), pega tu token de acceso personal directamente en la configuración del cliente. Sustituye YOUR_TOKEN por el token de tus ajustes en todos los ejemplos de abajo.
Cursor
Añade a .cursor/mcp.json:
{
"mcpServers": {
"telldone": {
"url": "https://api.telldone.app/mcp/user/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}
Windsurf
Añade a .codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"telldone": {
"serverUrl": "https://api.telldone.app/mcp/user/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}
Other
Usa estos snippets para los clientes que el selector dentro de la app agrupa bajo Other.
Codex
Añade a codex.json:
{
"mcpServers": {
"telldone": {
"type": "http",
"url": "https://api.telldone.app/mcp/user/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}
OpenClaw
Settings > MCP Servers > Add:
- Name:
TellDone - URL:
https://api.telldone.app/mcp/user/mcp - Auth:
Bearer YOUR_TOKEN
Otros clientes MCP
Cualquier herramienta que admita MCP sobre HTTP puede conectarse. Usa el endpoint https://api.telldone.app/mcp/user/mcp con un encabezado de autorización Bearer YOUR_TOKEN.
Si tu cliente o proxy reserva el encabezado Authorization (por ejemplo, algunas pasarelas tipo Smithery), envía el token en X-MCP-Token: YOUR_TOKEN en su lugar. Ambos encabezados funcionan; si ambos están presentes, gana Authorization.
Probar tu conexión
Puedes verificar que tu token funciona con un comando cURL:
curl -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Una respuesta exitosa lista todas las herramientas disponibles.
Permisos (scopes)
Las conexiones por OAuth tienen scopes: durante el inicio de sesión ves exactamente qué pide el cliente y lo apruebas de forma explícita.
| Scope | Permite a la app... |
|---|---|
notes:read | Leer tus notas, buscar y abrir el detalle completo de una nota |
notes:write | Crear, editar y eliminar notas (y ejecutar el flujo de notas de voz) |
tasks:read / tasks:write | Leer / crear, editar, completar y eliminar tareas |
events:read / events:write | Leer / crear, editar y eliminar eventos |
reports:read | Leer tus informes diarios, semanales, mensuales y anuales |
tags:read / tags:write | Listar tus etiquetas / crear y renombrar etiquetas |
profile:read | Leer la información de tu perfil y tu suscripción |
offline_access | Mantener la conexión cuando no estás (emite un token de actualización para que no tengas que iniciar sesión en cada sesión) |
Los scopes son un techo, no una garantía: una conexión que solo tiene notes:read no puede llamar a una herramienta de escritura por mucho que se lo pidas. Tu plan es un segundo filtro por encima de los scopes.
Las conexiones con token Bearer no tienen scopes individuales: se rigen únicamente por el modo de lectura/escritura de tu plan.
Qué puedes hacer
Herramientas de lectura (10): Pro y Ultra
| Herramienta | Qué hace |
|---|---|
| get_notes | Listar notas con filtros (etiquetas, rango de fechas, búsqueda de texto) |
| get_note | Ver una nota individual con sus tareas, eventos y transcripción completa |
| get_notes_full | Obtener varias notas con tareas y eventos incluidos en una sola llamada |
| get_tasks | Listar tareas filtradas por estado (pendientes, completadas, todas), etiquetas o fechas |
| get_events | Listar eventos del calendario, filtrar por rango de fechas |
| get_reports | Leer informes diarios, semanales, mensuales y anuales (markdown completo) |
| get_tags | Ver todas tus etiquetas ordenadas por uso |
| get_profile | Ver información de tu cuenta y estadísticas de uso |
| search | Buscar en notas, tareas y eventos (texto + búsqueda semántica para notas) |
| get_change_log | Ver el historial de ediciones de una nota, tarea o evento, y si cada edición se ha deshecho |
La herramienta search admite búsqueda semántica para notas: encuentra resultados por significado, no solo por palabras clave. Por ejemplo, buscar "reuniones sobre presupuesto" encontrará notas sobre discusiones financieras aunque no contengan la palabra "presupuesto".
Herramientas de escritura (17): Pro y Ultra
| Herramienta | Qué hace |
|---|---|
| process_note | Análisis completo con IA: envía texto o audio y obtienes una nota con tareas, eventos y etiquetas |
| create_note | Añadir una nota de texto plano (sin análisis de IA) |
| create_task | Añadir una tarea con prioridad, fecha límite, recordatorio y etiquetas |
| create_event | Añadir un evento de calendario con fecha, hora, ubicación, recordatorios, asistentes y recurrencia |
| update_note | Cambiar título, resumen, tipo, etiquetas, prioridad o estado de una nota |
| update_task | Cambiar título, descripción, prioridad, fecha límite, recordatorio, etiquetas o estado de una tarea |
| complete_task | Marcar una tarea como completada |
| update_event | Cambiar detalles, hora, ubicación, recordatorios, asistentes, recurrencia, etiquetas o estado de un evento |
| delete_note | Eliminar una nota y todas sus tareas y eventos vinculados |
| delete_task | Eliminar una tarea |
| delete_event | Eliminar un evento |
| undo_change_log_entry | Deshacer una sola edición registrada, hecha por la IA o por ti, restaurando el valor anterior del campo |
| restore_entity | Recuperar una nota, tarea o evento eliminado o archivado |
| create_tag | Crear una etiqueta nueva, o convertir una etiqueta sugerida automáticamente en una permanente |
| set_tag_pinned | Fijar o dejar de fijar una etiqueta para que se ordene arriba |
| delete_tag | Eliminar una etiqueta (se puede restaurar con restore_tag) |
| restore_tag | Recuperar una etiqueta eliminada |
Todas las operaciones de escritura y eliminación aparecen al instante en tus dispositivos conectados (teléfono, app web) por sincronización en tiempo real.
Referencia de herramientas
get_notes
Lista notas con filtrado opcional. Los filtros de fecha usan recorded_at (cuando grabaste la nota de voz), no created_at.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
limit | int | 20 | Número de notas a devolver (máx. 50) |
offset | int | 0 | Omitir este número de notas (para paginación, máx. 10000) |
tags | string | - | Filtrar por etiquetas, separadas por comas (coincide con cualquiera) |
search | string | - | Búsqueda de texto en título y resumen |
date_from | string | - | Fecha de inicio, YYYY-MM-DD (inclusiva) |
date_to | string | - | Fecha de fin, YYYY-MM-DD (exclusiva) |
standalone_only | bool | false | Cuando es true, oculta las notas de seguimiento (notas vinculadas a una nota, tarea o evento superior) y devuelve solo notas independientes |
Devuelve: lista de notas con id, title, summary, type, tags, priority, status, recorded_at, created_at.
get_note
Obtiene una nota individual con su transcripción completa y todas las tareas y eventos vinculados.
| Parámetro | Tipo | Descripción |
|---|---|---|
note_id | string | El UUID de la nota |
Devuelve: nota con title, summary, transcript, type, tags, priority, status, metadata, created_at, más los arrays tasks[] y events[].
También devuelve transcript_speakers (turnos de transcripción etiquetados por hablante, para reuniones con varios hablantes; null en caso contrario), speaker_count (null salvo que la grabación se haya dividido por hablante) y parent_note_id/parent_task_id/parent_event_id (se rellenan cuando esta nota es una edición de seguimiento de otro elemento). Cada entrada de tasks[]/events[] incluye además reminders_at/recurrence_rule (tareas) o reminder_minutes/attendees/recurrence_rule (eventos).
get_notes_full
Obtiene varias notas con sus tareas y eventos en una sola llamada. Mismos filtros que get_notes, pero cada nota incluye tasks[] y events[] incorporados.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
limit | int | 10 | Número de notas (máx. 20) |
offset | int | 0 | Omitir este número de notas |
tags | string | - | Filtrar por etiquetas |
date_from | string | - | Fecha de inicio, YYYY-MM-DD |
date_to | string | - | Fecha de fin, YYYY-MM-DD |
standalone_only | bool | false | Cuando es true, oculta las notas de seguimiento (notas vinculadas a una nota, tarea o evento superior) y devuelve solo notas independientes |
get_tasks
Lista tareas con filtrado.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
status | string | "todo" | Filtro: todo, done o all |
limit | int | 30 | Número de tareas (máx. 100) |
offset | int | 0 | Omitir este número de tareas |
tags | string | - | Filtrar por etiquetas, separadas por comas |
date_from | string | - | Fecha de inicio, YYYY-MM-DD (filtra por fecha límite; las tareas sin fecha límite se excluyen) |
date_to | string | - | Fecha de fin, YYYY-MM-DD (filtra por fecha límite; las tareas sin fecha límite se excluyen) |
Devuelve: lista de tareas con id, title, description, status, priority, tags, deadline, reminder_at, reminders_at, completed_at, completed_by, source, created_at. reminder_at refleja la primera entrada de reminders_at por compatibilidad - usa reminders_at para ver todos los recordatorios de una tarea.
get_events
Lista eventos del calendario con filtrado por rango de fechas.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
limit | int | 30 | Número de eventos (máx. 100) |
offset | int | 0 | Omitir este número de eventos |
date_from | string | - | Fecha de inicio, YYYY-MM-DD (filtra por hora de inicio del evento) |
date_to | string | - | Fecha de fin, YYYY-MM-DD |
Devuelve: lista de eventos con id, title, description, status, start_at, end_at, location, is_all_day, tags, note_id, reminder_minutes, attendees, recurrence_rule, created_at.
get_reports
Obtiene tus informes generados por IA con contenido completo en markdown.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
report_type | string | "daily" | Tipo: daily, weekly, monthly o yearly |
limit | int | 5 | Número de informes (máx. 10) |
Devuelve: lista de informes con id, type, period_start, period_end, content_md, created_at.
Los informes mensuales pueden tener entre 3.000 y 5.000 palabras. Usa limit=1 si tu herramienta de IA tiene una ventana de contexto limitada.
get_tags
Obtiene todas tus etiquetas, ordenadas primero las fijadas, luego por cantidad de uso.
Sin parámetros. Devuelve hasta 100 etiquetas, cada una con tag, usage_count, is_pinned, is_manual.
get_profile
Obtiene la información de tu cuenta y estadísticas de uso.
Sin parámetros. Devuelve email, display_name, locale, transcription_locale, timezone, subscription, mcp_mode, created_at y stats (conteos de notas/tareas/eventos).
search
Busca en notas, tareas y eventos a la vez. Para notas, soporta tanto búsqueda de texto como búsqueda semántica (encuentra resultados por significado usando embeddings de IA).
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
query | string | obligatorio | Texto de búsqueda (máx. 500 caracteres) |
limit | int | 20 | Máx. resultados por tipo (máx. 20) |
semantic | bool | true | Activar búsqueda semántica para notas |
Devuelve resultados agrupados por tipo: notes[], tasks[], events[]. Cada resultado tiene id, type, title, detail, created_at.
Usa semantic=false para una búsqueda solo de texto más rápida.
get_change_log
Ver el historial de ediciones de una nota, tarea o evento: cada edición de seguimiento hecha por la IA y cada edición manual que hiciste tú, de la más reciente a la más antigua.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
entity | string | obligatorio | notes, tasks o events |
entity_id | string | obligatorio | El UUID del elemento |
include_manual | bool | false | Incluir también tus propias ediciones manuales, no solo las hechas por la IA |
Devuelve: lista de entradas de cambios con id (úsalo como entry_id para deshacer), field_name, old_value, new_value, source (follow_up, smart_context o manual), origin_note_id, edited_at y reverted_at (se rellena una vez deshecha).
process_note (Pro y Ultra)
Análisis completo con IA: funciona igual que grabar en la app. Envía texto o audio y TellDone lo transcribirá, lo analizará con IA y creará una nota estructurada con tareas, eventos, etiquetas y embeddings extraídos.
Esta herramienta es asíncrona: devuelve al instante un audio_id y procesa en segundo plano. Los resultados llegan por sincronización en tiempo real a tus dispositivos conectados, o puedes consultarlos con get_notes().
| Parámetro | Tipo | Descripción |
|---|---|---|
text | string | Texto para analizar (omite la transcripción si no se proporciona audio) |
audio_base64 | string | Archivo de audio codificado en Base64 (hasta 50MB, activa la transcripción) |
audio_format | string | m4a, ogg, wav, mp3, aac o webm (por defecto: m4a) |
parent_task_id | string | UUID de una tarea a la que esto es un seguimiento |
parent_note_id | string | UUID de una nota a la que esto es un seguimiento |
parent_event_id | string | UUID de un evento al que esto es un seguimiento |
Tienes que proporcionar text o audio_base64 (o ambos: el audio tiene prioridad para la transcripción).
Devuelve: {"audio_id": "...", "status": "processing", "mode": "text-only"} o "mode": "audio+stt" si se proporcionó audio.
process_note está sujeto a las cuotas de tu plan (subidas por día, notas por mes, longitud máxima de texto). Usa get_profile para consultar tu uso actual.
create_note (Pro y Ultra)
Crea una nota de texto plano al instante. No activa el análisis de IA: no se extraen tareas ni eventos. Para análisis completo con IA y extracción de tareas/eventos, usa process_note en su lugar.
| Parámetro | Tipo | Límite | Descripción |
|---|---|---|---|
title | string | 200 caracteres | Obligatorio |
summary | string | 1000 caracteres | Opcional. Resumen corto (1-3 frases). Se incluye en los prompts de informes, mantenlo conciso |
transcript | string | según plan | Opcional. Cuerpo largo que se muestra en el detalle de la nota. No se incluye en informes. Límites: Free 2.000 / Basic 8.000 / Pro 20.000 / Ultra 50.000 caracteres |
type | string | - | Opcional. task, idea, info (por defecto), status, meeting, event o reflection |
tags | string | 20 etiquetas | Separadas por comas, opcional |
create_task (Pro y Ultra)
Crea una nueva tarea.
| Parámetro | Tipo | Límite | Descripción |
|---|---|---|---|
title | string | 200 caracteres | Obligatorio |
description | string | 2000 caracteres | Opcional |
priority | string | - | low, medium (por defecto) o high |
deadline | string | - | YYYY-MM-DD, opcional |
reminder_at | string | - | Fecha y hora ISO 8601 (ej. 2026-04-15T09:00:00Z), opcional |
tags | string | 20 etiquetas | Separadas por comas, opcional |
note_id | string | - | UUID para vincular la tarea a una nota padre, opcional |
create_event (Pro y Ultra)
Crea un evento de calendario.
| Parámetro | Tipo | Límite | Descripción |
|---|---|---|---|
title | string | 200 caracteres | Obligatorio |
start_at | string | - | Fecha y hora ISO 8601, obligatorio |
end_at | string | - | Fecha y hora ISO 8601 (por defecto: inicio + 1 hora) |
description | string | 2000 caracteres | Opcional |
location | string | 200 caracteres | Opcional |
is_all_day | bool | - | Por defecto: false |
tags | string | 20 etiquetas | Separadas por comas, opcional |
reminder_minutes | string | - | Minutos antes del evento, separados por comas (ej. 15,60), opcional |
attendees | string | - | Nombres o correos separados por comas, opcional |
recurrence_rule | string | - | Cadena RRULE (ej. FREQ=WEEKLY;BYDAY=MO,WE,FR), opcional |
note_id | string | - | UUID para vincular el evento a una nota padre, opcional |
update_note (Pro y Ultra)
Actualiza uno o más campos de una nota existente. Solo se modifican los campos que proporciones.
| Parámetro | Tipo | Descripción |
|---|---|---|
note_id | string | Obligatorio, el UUID de la nota |
title | string | Nuevo título (máx. 200 caracteres) |
summary | string | Nuevo resumen (máx. 1000 caracteres, envía un espacio " " para borrar) |
transcript | string | Nueva transcripción (límite según plan, envía un espacio " " para borrar) |
type | string | task, idea, info, status, meeting, event o reflection |
tags | string | Etiquetas separadas por comas (reemplaza todas las existentes, máx. 20) |
priority | string | low, medium o high |
status | string | active o archived |
Para notas creadas por el flujo de voz, transcript es la salida original del reconocimiento de voz. Sobrescribirla reemplaza la fuente canónica: si quieres conservar el original, plantéate añadir al final en lugar de reemplazar.
update_task (Pro y Ultra)
Actualiza uno o más campos de una tarea existente. Solo se modifican los campos que proporciones.
| Parámetro | Tipo | Descripción |
|---|---|---|
task_id | string | Obligatorio, el UUID de la tarea |
title | string | Nuevo título |
description | string | Nueva descripción (envía un espacio " " para borrar) |
priority | string | low, medium o high |
deadline | string | YYYY-MM-DD (envía un espacio para borrar) |
status | string | todo o done |
tags | string | Etiquetas separadas por comas (reemplaza todas las existentes, máx. 20) |
reminder_at | string | Fecha y hora ISO 8601 (envía un espacio para borrar) |
Cambiar status a done también registra cuándo y cómo se completó la tarea.
complete_task (Pro y Ultra)
Atajo para marcar una tarea como completada.
| Parámetro | Tipo | Descripción |
|---|---|---|
task_id | string | Obligatorio, el UUID de la tarea |
Devuelve un error si la tarea no existe o ya está completada.
update_event (Pro y Ultra)
Actualiza uno o más campos de un evento existente. Solo se modifican los campos que proporciones.
| Parámetro | Tipo | Descripción |
|---|---|---|
event_id | string | Obligatorio, el UUID del evento |
title | string | Nuevo título |
description | string | Nueva descripción (envía un espacio para borrar) |
start_at | string | Nueva hora de inicio (ISO 8601) |
end_at | string | Nueva hora de fin (ISO 8601) |
location | string | Nueva ubicación (envía un espacio para borrar) |
status | string | confirmed, tentative o cancelled |
tags | string | Etiquetas separadas por comas (reemplaza todas las existentes, máx. 20) |
is_all_day | string | "true" o "false" |
reminder_minutes | string | Minutos antes del evento, separados por comas (ej. 15,60) |
attendees | string | Nombres o correos separados por comas |
recurrence_rule | string | Cadena RRULE (envía un espacio para borrar) |
delete_note (Pro y Ultra)
Elimina una nota. También elimina todas las tareas y eventos creados a partir de esta nota.
| Parámetro | Tipo | Descripción |
|---|---|---|
note_id | string | Obligatorio, el UUID de la nota |
delete_task (Pro y Ultra)
Elimina una tarea.
| Parámetro | Tipo | Descripción |
|---|---|---|
task_id | string | Obligatorio, el UUID de la tarea |
delete_event (Pro y Ultra)
Elimina un evento.
| Parámetro | Tipo | Descripción |
|---|---|---|
event_id | string | Obligatorio, el UUID del evento |
undo_change_log_entry (Pro y Ultra)
Deshace una sola edición registrada: restaura el campo a su valor anterior a esa edición, tanto si la hizo la IA (desde una grabación de seguimiento) como si la hiciste tú directamente.
| Parámetro | Tipo | Descripción |
|---|---|---|
entity | string | Obligatorio, notes, tasks o events |
entity_id | string | Obligatorio, el UUID del elemento |
entry_id | string | Obligatorio, el id de la entrada de cambio de get_change_log |
Devuelve: {"entry_id", "entity_type", "entity_id", "field_name", "restored_value", "reverted_at"}. Deshacer la misma entrada dos veces devuelve un error: ya está deshecha.
restore_entity (Pro y Ultra)
Recupera una nota, tarea o evento eliminado o archivado.
| Parámetro | Tipo | Descripción |
|---|---|---|
entity | string | Obligatorio, notes, tasks o events |
entity_id | string | Obligatorio, el UUID del elemento |
Devuelve: el elemento restaurado en formato JSON.
create_tag (Pro y Ultra)
Crea una etiqueta nueva, o convierte una etiqueta sugerida automáticamente en una permanente.
| Parámetro | Tipo | Descripción |
|---|---|---|
tag | string | Obligatorio, 1-50 caracteres (se guarda en minúsculas) |
category | string | Opcional |
set_tag_pinned (Pro y Ultra)
Fija o deja de fijar una etiqueta para que se ordene al principio de tu lista de etiquetas.
| Parámetro | Tipo | Descripción |
|---|---|---|
tag | string | Obligatorio |
pinned | bool | Obligatorio |
Las etiquetas que contienen el carácter / no se pueden fijar.
delete_tag (Pro y Ultra)
Elimina una etiqueta. Se puede recuperar con restore_tag.
| Parámetro | Tipo | Descripción |
|---|---|---|
tag | string | Obligatorio |
restore_tag (Pro y Ultra)
Recupera una etiqueta eliminada.
| Parámetro | Tipo | Descripción |
|---|---|---|
tag | string | Obligatorio |
Límites de entrada
| Campo | Longitud máxima | Usado en |
|---|---|---|
| title | 200 caracteres | crear/actualizar nota, tarea, evento |
| description | 2.000 caracteres | crear/actualizar tarea, evento |
| summary | 1.000 caracteres (estricto) | crear/actualizar nota. Se incluye en los prompts de informes, se mantiene corto para controlar el coste de tokens |
| transcript | según plan: Free 2.000 / Basic 8.000 / Pro 20.000 / Ultra 50.000 | crear/actualizar nota. Cuerpo largo, no va en informes |
| location | 200 caracteres | crear/actualizar evento |
| tags | 20 etiquetas | crear/actualizar nota, tarea, evento |
| search query | 500 caracteres | search |
| audio_base64 (decodificado) | 50 MB | process_note |
Si excedes un límite, la herramienta devuelve un mensaje de error como "title too long (max 200 chars, got 250)".
Manejo de errores
Todas las herramientas devuelven JSON. Los errores usan este formato:
{"error": "description of what went wrong"}
Errores comunes:
| Error | Cuándo |
|---|---|
"MCP access is read-only..." | Se llamó a una herramienta de escritura con modo de solo lectura |
"Invalid note_id format" | Se pasó un string que no es UUID como ID |
"Note not found" | El ID no existe o pertenece a otro usuario |
"Task not found or already completed" | complete_task en una tarea inexistente o ya completada |
"title too long (max 200 chars, got N)" | Se excedió el límite de entrada |
"Too many tags (max 20)" | Se proporcionaron más de 20 etiquetas |
Errores HTTP:
| Código | Significado |
|---|---|
| 401 | Token Bearer inválido o faltante |
| 403 | MCP desactivado o el plan no permite MCP |
| 429 | Límite de velocidad excedido (5 req/s, ráfagas de hasta 20) |
Ejemplos de uso
Todos los ejemplos usan cURL con el protocolo MCP JSON-RPC. Sustituye YOUR_TOKEN por tu token de conexión.
Leer datos
# Get your profile and stats
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_profile"}}'
# List recent notes (limit 5, from April 2026)
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"get_notes","arguments":{"limit":5,"date_from":"2026-04-01"}}}'
# Search notes (hybrid text + semantic)
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"search","arguments":{"query":"project deadline","limit":5}}}'
Escribir datos (Pro y Ultra)
# Process a note through full AI pipeline (extracts tasks + events)
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":10,"method":"tools/call",
"params":{"name":"process_note","arguments":{"text":"Need to buy groceries tomorrow. Meeting with Katie at 3pm at the cafe to discuss the project."}}}'
# Create a task with deadline and reminder
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":11,"method":"tools/call",
"params":{"name":"create_task","arguments":{"title":"Review PR","priority":"high","deadline":"2026-04-15","reminder_at":"2026-04-15T09:00:00Z","tags":"dev"}}}'
# Create a recurring event with reminders and attendees
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":12,"method":"tools/call",
"params":{"name":"create_event","arguments":{"title":"Team standup","start_at":"2026-04-12T10:00:00Z","reminder_minutes":"15","attendees":"Katie,John","recurrence_rule":"FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR","tags":"meeting"}}}'
# Complete a task
curl -s -X POST https://api.telldone.app/mcp/user/mcp \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"jsonrpc":"2.0","id":13,"method":"tools/call",
"params":{"name":"complete_task","arguments":{"task_id":"<task-uuid>"}}}'
Una respuesta exitosa se ve así:
{
"jsonrpc": "2.0",
"id": 10,
"result": {
"content": [{"type": "text", "text": "{\"id\":\"...\",\"title\":\"Review PR\",\"status\":\"todo\"}"}]
}
}
Las herramientas de escritura y actualización devuelven respuestas mínimas con solo id, title y status. Para obtener todos los detalles (etiquetas, prioridad, fecha límite, etc.) después de escribir, haz una llamada de lectura adicional como get_tasks o get_note.
Gestión del token
| Acción | Cómo |
|---|---|
| Ver token | Ajustes del iPhone → Integrations → AI Agents (o Ajustes web → AI Agents), pulsa el icono de ojo |
| Copiar token | Pulsa el icono de copiar junto al token |
| Regenerar | Pulsa Regenerate y confirma. El token anterior deja de funcionar al instante y cualquier sesión activa se desconecta |
| Cambiar modo | Solo Ultra: alterna entre Solo lectura y Lectura + escritura. En Pro el modo es fijo en Lectura + escritura |
| Desactivar | Pulsa Disable y confirma. El token se elimina y todas las conexiones se detienen. Puedes reactivarlo más tarde (se emitirá un token nuevo) |
Qué puedes pedirle a tu agente de IA
Una vez conectado, pídele a tu herramienta de IA cosas como:
Revisar tu día:
- "¿Qué hice hoy?"
- "Muéstrame mis notas de esta semana"
- "¿Qué tareas están atrasadas?"
Gestionar tareas:
- "Crea una tarea: revisar informe trimestral, prioridad alta, fecha límite viernes"
- "Marca la tarea de Figma como completada"
- "¿En qué tareas estoy trabajando?"
Buscar y analizar:
- "Encuentra todas las notas sobre la estrategia de marketing"
- "¿Qué eventos tengo la próxima semana?"
- "Resume mis informes diarios de la semana pasada"
Planificar:
- "Crea un evento: standup del equipo mañana a las 10am"
- "¿Qué tengo en mi calendario esta semana?"
- "Muéstrame mis etiquetas principales: ¿en qué paso más tiempo?"
El agente de IA tiene acceso completo a tus notas, tareas, eventos e informes. Puede leer, crear, actualizar y eliminar datos, y responder preguntas complejas combinando información de múltiples herramientas.
Notas importantes
- Dos formas de crear notas:
create_notecrea una nota de texto plano al instante (sin análisis de IA).process_noteejecuta el análisis completo con IA (igual que grabar en la app): analiza el texto, extrae tareas y eventos, y genera etiquetas y embeddings. Usaprocess_notecuando quieras que TellDone piense por ti. - Sin sincronización de integraciones: los elementos creados o actualizados por MCP no disparan webhooks ni sincronización de integraciones (Todoist, Notion). Aparecerán en tus apps en la próxima sincronización.
- La búsqueda semántica depende de la herramienta: las notas creadas con
process_noteobtienen embeddings y aparecen en la búsqueda semántica. Las notas creadas concreate_noteno obtienen embeddings, así que solo aparecen en la búsqueda de texto. - Las respuestas de escritura son mínimas: las herramientas de creación y actualización devuelven solo
id,titleystatus. Para obtener todos los campos tras escribir, haz una llamada de lectura adicional. - Los filtros de fecha usan UTC: los parámetros
date_from/date_tose comparan como marcas de tiempo UTC. Para personas en zonas horarias no UTC, las fechas límite pueden incluir o excluir elementos de días adyacentes. - Límite de velocidad: 5 solicitudes por segundo, con ráfagas de hasta 20. Para operaciones masivas, espacia tus solicitudes.
Seguridad
- Cada usuario recibe un token de conexión único de 384 bits
- Tu token se revoca al instante al desactivar MCP o regenerarlo
- Todos los datos están aislados estrictamente a tu cuenta: tu agente solo puede acceder a tus propios datos
- Cada solicitud está vinculada a tu usuario: no hay forma de que un agente acceda a datos de otra persona
- La conexión usa HTTPS con límite de velocidad (5 req/s, ráfagas de hasta 20)
- Las conexiones por OAuth usan PKCE con códigos de autorización de un solo uso y tokens de acceso de corta duración: puedes revocar una conexión en cualquier momento desde la app
Para un análisis técnico a fondo (endpoints de descubrimiento, duración de los tokens, el flujo completo de OAuth) consulta nuestra referencia de conector de código abierto en github.com/exp78/telldone-mcp, o consulta directamente https://api.telldone.app/.well-known/oauth-protected-resource.
Privacidad y flujo de datos
Tus datos se transmiten a una herramienta de IA conectada solo cuando le pides explícitamente que haga algo, por ejemplo cuando le pides que lea o modifique tus notas. La herramienta solo recibe las respuestas a las llamadas concretas que hace, limitadas a los permisos que aprobaste. Tú tienes el control: cambia el modo de lectura/escritura de tu plan, reduce los scopes de OAuth que apruebas al iniciar sesión, o regenera y desactiva tu token Bearer, todo desde Ajustes. Consulta la Política de privacidad para ver todos los detalles, o escribe a support@telldone.app si tienes dudas.
Solución de problemas
| Síntoma | Causa / solución |
|---|---|
| La página de consentimiento de OAuth dice "Wrong email or password" | Usa el correo y la contraseña de tu cuenta de TellDone (los mismos con los que entras en la app). Si tu cuenta solo tiene inicio de sesión con Apple o Google y no tiene contraseña, usa el método con token Bearer. |
| Se conecta, pero la IA no puede crear ni editar nada | Tu plan o tu modo es de solo lectura, o la conexión no recibió scopes de escritura: vuelve a conectar y apruébalos, o revisa tu modo en Ajustes. |
| Una herramienta devuelve un error de "Insufficient scope" | La conexión por OAuth no recibió ese scope. Vuelve a conectar y aprueba el permiso que necesita la herramienta. |
| Las herramientas no aparecen | MCP no está activado en tu cuenta (Ajustes → AI Agents), o tu plan no incluye MCP. |
| Mi cliente solo me deja elegir de una lista de conectores y TellDone no está | TellDone aún no está en el directorio de conectores de ningún cliente: añádelo como conector personalizado con la URL de MCP, o usa el método con token Bearer. |
Ver también
- Automatizaciones con webhooks: enviar datos a servicios externos automáticamente
- Todoist: sincronización bidireccional dedicada de tareas
- Notion: integración dedicada con Notion