FocusBox MCP — referencia de herramientas
URL del conector: https://focusbox.io/mcp/api. Consulta /mcp para la configuración.
list_today
Devuelve las tareas del usuario programadas para hoy (solo las incompletas).
Argumentos
Ninguno.
Devuelve
Array de { taskId, name, durationSeconds, projectId }.
Ejemplo de respuesta
[
{ "taskId": "abc", "name": "Write spec", "durationSeconds": 1500, "projectId": "mytasks" }
]
next_task
Devuelve una sola tarea por la que empezar, elegida según lo que cabe en el tiempo disponible antes del próximo evento del calendario, lo que ha quedado pendiente de días anteriores y lo que es lo bastante pequeño para empezar. Incluye el motivo, dos alternativas y un enlace para empezar.
Argumentos
availableMinutes (1-480, opcional).
Devuelve
{ task, alternatives, freeWindowMinutes, busyNow, message }.
Ejemplo de respuesta
{
"task": {
"taskId": "abc", "name": "Finish pricing page", "projectId": "work",
"estimateMinutes": 35, "source": "rollover",
"reason": "Carried over from 2 days ago; fits the 47 min you have before your next meeting.",
"startUrl": "https://focusbox.io/now?id=work&taskId=abc"
},
"alternatives": [],
"freeWindowMinutes": 47, "busyNow": false,
"message": "Start here: Finish pricing page (35 min)."
}
get_streams
Lista los proyectos de FocusBox del usuario (contenedores de tareas; llamados "streams" en la API por motivos históricos). Se excluyen los proyectos archivados y los buckets today/mytasks.
Argumentos
Ninguno.
Devuelve
Array de { streamId, name }.
add_task
Añade una nueva tarea a un proyecto o la programa para hoy. La duración por defecto es de 25 minutos.
Argumentos
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
streamId | string | obligatorio | Id del proyecto destino, obtenido con get_streams. Usa "today" (o "mytasks") para hoy. |
name | string | obligatorio | Título de la tarea (1-500 caracteres). |
durationSeconds | number | opcional | 60-14400 (1 min — 4 h). Por defecto 1500. |
dueDate | string | opcional | Marca de tiempo opcional en segundos Unix que indica cuándo está programada la tarea. La vista de hoy muestra las tareas cuya fecha de vencimiento cae dentro de la ventana de hoy en la zona horaria del usuario. |
clientRequestId | string | opcional | Clave de idempotencia. La misma clave en un intervalo de 5 minutos devuelve el resultado en caché. |
Devuelve
{ taskId, streamId, name, durationSeconds }.
update_task
Actualiza uno o varios campos de una tarea existente: name, durationSeconds o dueDate.
Argumentos
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
streamId | string | obligatorio | streamId obtenido de get_streams. Usa "today" o "mytasks" para la bandeja de entrada. |
taskId | string | obligatorio | taskId obtenido de list_today o get_streams. |
name | string | opcional | Nuevo título de la tarea (1-500 caracteres). |
durationSeconds | number | opcional | Nueva duración en segundos (60-14400). Restablece durSecInit al nuevo valor. |
dueDate | number | opcional | Nueva fecha de vencimiento como marca de tiempo en segundos Unix. |
clientRequestId | string | opcional | Clave de idempotencia. La misma clave en un intervalo de 5 minutos devuelve el resultado en caché. |
Devuelve
{ taskId, streamId, name, durationSeconds, dueDate }.
delete_task
Elimina una tarea de forma permanente. Es idempotente: borrar una tarea ya eliminada no se considera un error.
Argumentos
| Campo | Tipo | Obligatorio |
|---|---|---|
streamId | string | obligatorio |
taskId | string | obligatorio |
Devuelve
{ taskId, streamId, deleted, reason? }.
complete_task
Marca una tarea de FocusBox como completada.
Argumentos
| Campo | Tipo | Obligatorio |
|---|---|---|
streamId | string | obligatorio |
taskId | string | obligatorio |
Devuelve
{ taskId, streamId, completed: true }.
get_insights_30d
Resumen agregado de las tareas completadas por el usuario en los últimos 30 días.
Argumentos
Ninguno.
Devuelve
{ totalTasks, totalFocusMinutes, topStreams[{streamId, name, tasks}, days: 30 }].
Autenticación
OAuth (recomendado para Claude)
Claude Desktop y la web de claude.ai completan el flujo de OAuth automáticamente. No hace falta gestionar API keys.
Bearer (Cursor, Inspector, clientes personalizados)
Obtén tu API key en /account/api-keys (empieza por apikey_). Envíala como Authorization: Bearer apikey_xxx en cada petición.
Límites de uso
300 llamadas a herramientas cada 2 minutos por API key. 60 sondeos sin autenticar cada 2 minutos por IP.
Preguntas frecuentes
Autenticación: ¿OAuth o Bearer?
Ambas. Usa OAuth (gestionado automáticamente por Claude Desktop y la web de claude.ai) para la configuración más sencilla. Para Cursor, MCP Inspector o cualquier cliente personalizado, usa autenticación Bearer con apikey_<uuid> desde /account/api-keys.
¿Cuáles son los límites de uso?
300 llamadas a herramientas cada 2 minutos por API key. 60 sondeos sin autenticar cada 2 minutos por IP. Superar cualquiera de los dos devuelve HTTP 429 con una cabecera Retry-After.
¿Cuánto duran los tokens de OAuth?
30 días desde su emisión. Pasado ese tiempo, Claude lanza una reautorización automáticamente. El token es opaco (at_*) y se guarda en el servidor; no hace falta refresh token.
¿Por qué se reconecta mi sesión de Claude tras un despliegue?
El mapa de sesiones MCP vive en memoria de un único ECS task. Un rolling deploy lo reinicia. Claude se reconecta automáticamente y reanuda la sesión; no deberías notar más interrupción que una breve recarga.
¿Puedo usar respuestas en streaming (SSE)?
Sí. El transporte es la variante streamable HTTP de la especificación MCP, así que cada llamada a herramienta puede emitir eventos de progreso antes del resultado final. Las sesiones se mantienen vivas con frames de ping periódicos.
