{"serverInfo":{"name":"Focuh","version":"3.0.0","websiteUrl":"https://www.focuh.com/mcp"},"transport":{"type":"streamable-http","endpoint":"https://www.focuh.com/api/mcp"},"authentication":{"required":true,"schemes":["bearer","oauth2"]},"tools":[{"name":"get_tasks","description":"Today/tomorrow tasks with id, date and priority. Call first to get refs.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"create_tasks","description":"Create tasks, each with optional nested subtasks. Defaults: today, 30 min.","inputSchema":{"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"]}},{"name":"update_tasks","description":"Change tasks: date (moves the day), priority, title, estimate, done, time slot.","inputSchema":{"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"]}},{"name":"delete_tasks","description":"Delete tasks by ref, every task on a date, or all completed. Subtasks go too.","inputSchema":{"type":"object","properties":{"tasks":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":500}},"date":{"type":"string","maxLength":10},"filter":{"type":"string","enum":["completed"]}}}},{"name":"get_subtasks","description":"List subtasks of a parent. Returns ids usable as refs.","inputSchema":{"type":"object","properties":{"ref":{"type":"string","maxLength":500,"description":"Task id, #N, or title"}},"required":["ref"],"additionalProperties":false}},{"name":"reorder_subtasks","description":"Reorder a parent's subtasks. Pass the complete new order, every one once.","inputSchema":{"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"]}},{"name":"get_loops","description":"Loops — undated intentions in 4 buckets (pressing/important/backlog/waiting=parked). Call before pull_loops.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"pull_loops","description":"Copy loops onto a date as linked tasks — each loop stays in Loops. Idempotent per loop+date.","inputSchema":{"type":"object","properties":{"loops":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":500}},"date":{"type":"string","maxLength":10}},"required":["loops"]}},{"name":"get_calendar","description":"Events + scheduled/unscheduled tasks for a date. Check before scheduling.","inputSchema":{"type":"object","properties":{"date":{"type":"string","maxLength":10}},"additionalProperties":false}},{"name":"get_goals","description":"Goals by horizon (week/month/year/decade) — exactly what the app's Goals view shows.","inputSchema":{"type":"object","properties":{"horizon":{"type":"string","enum":["week","month","year","decade"]},"status":{"type":"string","enum":["active","completed","all"]}},"additionalProperties":false}},{"name":"create_goal","description":"Create a goal in a horizon, with optional bottleneck note and lever.","inputSchema":{"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"]}},{"name":"update_goal","description":"Update goal fields: title, horizon (moves section), status, bottleneckNote, lever.","inputSchema":{"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"]}},{"name":"delete_goal","description":"Delete a goal by id. Linked tasks are kept and unlinked, never deleted.","inputSchema":{"type":"object","properties":{"id":{"type":"string","maxLength":64}},"required":["id"],"additionalProperties":false}},{"name":"get_focus_stats","description":"Today/week focus minutes, streak, task completion rates.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"get_journal","description":"Read a daily journal and recent dates. Preserve ^task markers when writing back.","inputSchema":{"type":"object","properties":{"date":{"type":"string","maxLength":10}},"additionalProperties":false}},{"name":"write_journal","description":"Append or replace a journal. Read before replacing and preserve ^task markers.","inputSchema":{"type":"object","properties":{"content":{"type":"string","maxLength":100000},"date":{"type":"string","maxLength":10},"mode":{"type":"string","enum":["append","replace"]}},"required":["content"],"additionalProperties":false}}]}