Focuh
ADHD system of record for agents: tasks, goals, loops, calendar, focus stats.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (1)
- LOWen reorder_subtasks
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"focuh": {
"url": "https://www.focuh.com/api/mcp"
}
}
}Puntos de conexión remotos
https://www.focuh.com/api/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (16)
🟢get_tasks
Today/tomorrow tasks with id, date and priority. Call first to get refs.
Esquema de entrada
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟡create_tasks(tasks)
Create tasks, each with optional nested subtasks. Defaults: today, 30 min.
Esquema de entrada
{
"type": "object",
"properties": {
"tasks": {
"type": "array",
"maxItems": 100,
"description": "Tasks to create",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 500,
"description": "Title"
},
"date": {
"type": "string",
"maxLength": 10,
"description": "Date"
},
"estimatedMinutes": {
"type": "number",
"minimum": 0,
"maximum": 1440,
"description": "Minutes"
},
"priority": {
"type": "string",
"enum": [
"critical",
"important",
"nice-to-have"
],
"description": "Priority"
},
"parent": {
"type": "string",
"maxLength": 500,
"description": "Parent"
},
"goalId": {
"type": "string",
"maxLength": 64,
"description": "Goal"
},
"loopBucket": {
"type": "string",
"enum": [
"pressing",
"important",
"backlog",
"waiting"
],
"description": "Undated loop; excludes date/priority; waiting=parked"
},
"subtasks": {
"type": "array",
"maxItems": 100,
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 500
},
"estimatedMinutes": {
"type": "number",
"minimum": 0,
"maximum": 1440
}
},
"required": [
"title"
]
}
}
},
"required": [
"title"
]
}
}
},
"required": [
"tasks"
]
}🟡update_tasks(tasks)
Change tasks: date (moves the day), priority, title, estimate, done, time slot.
Esquema de entrada
{
"type": "object",
"properties": {
"tasks": {
"type": "array",
"maxItems": 100,
"description": "Changes to apply, one entry per task",
"items": {
"type": "object",
"properties": {
"ref": {
"type": "string",
"maxLength": 500,
"description": "Task id, #N, or title"
},
"title": {
"type": "string",
"maxLength": 500,
"description": "Title"
},
"estimatedMinutes": {
"type": "number",
"minimum": 0,
"maximum": 1440,
"description": "Minutes"
},
"completed": {
"type": "boolean",
"description": "Done"
},
"date": {
"type": "string",
"maxLength": 10,
"description": "Date"
},
"priority": {
"type": "string",
"enum": [
"critical",
"important",
"nice-to-have"
],
"description": "Priority"
},
"startTime": {
"type": "string",
"maxLength": 5,
"description": "Start"
},
"endTime": {
"type": "string",
"maxLength": 5,
"description": "End"
},
"goalId": {
"type": "string",
"maxLength": 64
},
"loopBucket": {
"type": "string",
"enum": [
"pressing",
"important",
"backlog",
"waiting"
],
"description": "Into Loops or re-bucket; excl. date; waiting=parked"
}
},
"required": [
"ref"
]
}
}
},
"required": [
"tasks"
]
}🔴delete_tasks(tasks, date, filter)
Delete tasks by ref, every task on a date, or all completed. Subtasks go too.
Esquema de entrada
{
"type": "object",
"properties": {
"tasks": {
"type": "array",
"maxItems": 100,
"items": {
"type": "string",
"maxLength": 500
}
},
"date": {
"type": "string",
"maxLength": 10
},
"filter": {
"type": "string",
"enum": [
"completed"
]
}
}
}🟢get_subtasks(ref)
List subtasks of a parent. Returns ids usable as refs.
Esquema de entrada
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"maxLength": 500,
"description": "Task id, #N, or title"
}
},
"required": [
"ref"
],
"additionalProperties": false
}⚪reorder_subtasks(ref, order)
Reorder a parent's subtasks. Pass the complete new order, every one once.
Esquema de entrada
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"maxLength": 500,
"description": "Task id, #N, or title"
},
"order": {
"type": "array",
"maxItems": 100,
"items": {
"type": [
"number",
"string"
],
"maxLength": 64
}
}
},
"required": [
"ref",
"order"
]
}🟢get_loops
Loops — undated intentions in 4 buckets (pressing/important/backlog/waiting=parked). Call before pull_loops.
Esquema de entrada
{
"type": "object",
"properties": {},
"additionalProperties": false
}⚪pull_loops(loops, date)
Copy loops onto a date as linked tasks — each loop stays in Loops. Idempotent per loop+date.
Esquema de entrada
{
"type": "object",
"properties": {
"loops": {
"type": "array",
"maxItems": 100,
"items": {
"type": "string",
"maxLength": 500
}
},
"date": {
"type": "string",
"maxLength": 10
}
},
"required": [
"loops"
]
}🟢get_calendar(date)
Events + scheduled/unscheduled tasks for a date. Check before scheduling.
Esquema de entrada
{
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 10
}
},
"additionalProperties": false
}🟢get_goals(horizon, status)
Goals by horizon (week/month/year/decade) — exactly what the app's Goals view shows.
Esquema de entrada
{
"type": "object",
"properties": {
"horizon": {
"type": "string",
"enum": [
"week",
"month",
"year",
"decade"
]
},
"status": {
"type": "string",
"enum": [
"active",
"completed",
"all"
]
}
},
"additionalProperties": false
}🟡create_goal(title, horizon, bottleneckNote, lever)
Create a goal in a horizon, with optional bottleneck note and lever.
Esquema de entrada
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 500
},
"horizon": {
"type": "string",
"enum": [
"week",
"month",
"year",
"decade"
]
},
"bottleneckNote": {
"type": "string",
"maxLength": 5000
},
"lever": {
"type": "string",
"maxLength": 5000
}
},
"required": [
"title",
"horizon"
]
}🟡update_goal(id, title, horizon, status, bottleneckNote, ...)
Update goal fields: title, horizon (moves section), status, bottleneckNote, lever.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64
},
"title": {
"type": "string",
"maxLength": 500
},
"horizon": {
"type": "string",
"enum": [
"week",
"month",
"year",
"decade"
]
},
"status": {
"type": "string",
"enum": [
"active",
"completed",
"paused",
"dropped"
]
},
"bottleneckNote": {
"type": "string",
"maxLength": 5000
},
"lever": {
"type": "string",
"maxLength": 5000
}
},
"required": [
"id"
]
}🔴delete_goal(id)
Delete a goal by id. Linked tasks are kept and unlinked, never deleted.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢get_focus_stats
Today/week focus minutes, streak, task completion rates.
Esquema de entrada
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_journal(date)
Read a daily journal and recent dates. Preserve ^task markers when writing back.
Esquema de entrada
{
"type": "object",
"properties": {
"date": {
"type": "string",
"maxLength": 10
}
},
"additionalProperties": false
}🟡write_journal(content, date, mode)
Append or replace a journal. Read before replacing and preserve ^task markers.
Esquema de entrada
{
"type": "object",
"properties": {
"content": {
"type": "string",
"maxLength": 100000
},
"date": {
"type": "string",
"maxLength": 10
},
"mode": {
"type": "string",
"enum": [
"append",
"replace"
]
}
},
"required": [
"content"
],
"additionalProperties": false
}Comunidad
Evidencia