Focuh

ADHD system of record for agents: tasks, goals, loops, calendar, focus stats.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
98%
Integridad del esquema
73%
Calidad de los nombres
98%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'reorder_subtasks' description lacks action verben reorder_subtasks

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~1,965Tokens (definiciones de herramientas)
~804 BTamaño de respuesta típico
Impacto moderado en la atención (1.54% del contexto de 128k)

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-http

Qué puede hacer

Inventario de herramientas

Herramientas (16)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada16 herramientas
verificadoversión no registrada16 herramientas