Server definition
- Hash
- sha256:b44e972cc2b345bf1e6d775f00fb9aa5c6c88b0b7863be6bae42ed93b105ec5c
- What it is
- What a remote MCP server returned when asked what it offers: 16 tools
The blob, as servednamed by its sha256
{
"instructions": "Focuh — focus timer and task manager. 16 tools.\n\nTOOLS:\n- Tasks: get_tasks, create_tasks, update_tasks, delete_tasks\n- Subtasks: get_subtasks, reorder_subtasks, create_tasks (parent or subtasks)\n- Loops: get_loops, pull_loops\n- Calendar: get_calendar\n- Goals: get_goals, create_goal, update_goal, delete_goal\n- Stats: get_focus_stats\n- Journal: get_journal, write_journal\n\nWORKFLOW: Call get_tasks first — it prints the id and date of every task.\nMutations return per-task confirmations — do NOT call get_tasks after one.\n\nEVERY WRITE TOOL IS BULK. Pass every task in one call, never loop.\n- To move days or change priority: update_tasks {date, priority}.\n To change anything, never delete and recreate — deleting a task loses\n its subtasks, focus time, goal link and position.\n- Create a task with its subtasks in one create_tasks call.\n\nLOOPS: undated recurring intentions in four buckets (pressing/important/\nbacklog/waiting). pull_loops copies one onto a day as a linked task — the\nloop stays. Loops carry no priority and no date; buckets are the triage.\nwaiting = parked; pulling or dating a waiting loop unparks it to backlog.\n\nREFERENCES: 'ref' takes the id shown in the list, #N, or an exact title.\n\nROUTING: Use get_calendar (not get_tasks) for scheduling — it has events.\n\nPOLICY: Only create tasks for actionable work, not events (lunch, gym).\n\nCurrent date: 2026-10-04 (Sunday)",
"tools": [
{
"description": "Create a goal in a horizon, with optional bottleneck note and lever.",
"inputSchema": {
"properties": {
"bottleneckNote": {
"maxLength": 5000,
"type": "string"
},
"horizon": {
"enum": [
"week",
"month",
"year",
"decade"
],
"type": "string"
},
"lever": {
"maxLength": 5000,
"type": "string"
},
"title": {
"maxLength": 500,
"type": "string"
}
},
"required": [
"title",
"horizon"
],
"type": "object"
},
"name": "create_goal",
"outputSchema": null
},
{
"description": "Create tasks, each with optional nested subtasks. Defaults: today, 30 min.",
"inputSchema": {
"properties": {
"tasks": {
"description": "Tasks to create",
"items": {
"properties": {
"date": {
"description": "Date",
"maxLength": 10,
"type": "string"
},
"estimatedMinutes": {
"description": "Minutes",
"maximum": 1440,
"minimum": 0,
"type": "number"
},
"goalId": {
"description": "Goal",
"maxLength": 64,
"type": "string"
},
"loopBucket": {
"description": "Undated loop; excludes date/priority; waiting=parked",
"enum": [
"pressing",
"important",
"backlog",
"waiting"
],
"type": "string"
},
"parent": {
"description": "Parent",
"maxLength": 500,
"type": "string"
},
"priority": {
"description": "Priority",
"enum": [
"critical",
"important",
"nice-to-have"
],
"type": "string"
},
"subtasks": {
"items": {
"properties": {
"estimatedMinutes": {
"maximum": 1440,
"minimum": 0,
"type": "number"
},
"title": {
"maxLength": 500,
"type": "string"
}
},
"required": [
"title"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"title": {
"description": "Title",
"maxLength": 500,
"type": "string"
}
},
"required": [
"title"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"tasks"
],
"type": "object"
},
"name": "create_tasks",
"outputSchema": null
},
{
"description": "Delete a goal by id. Linked tasks are kept and unlinked, never deleted.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"maxLength": 64,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "delete_goal",
"outputSchema": null
},
{
"description": "Delete tasks by ref, every task on a date, or all completed. Subtasks go too.",
"inputSchema": {
"properties": {
"date": {
"maxLength": 10,
"type": "string"
},
"filter": {
"enum": [
"completed"
],
"type": "string"
},
"tasks": {
"items": {
"maxLength": 500,
"type": "string"
},
"maxItems": 100,
"type": "array"
}
},
"type": "object"
},
"name": "delete_tasks",
"outputSchema": null
},
{
"description": "Events + scheduled/unscheduled tasks for a date. Check before scheduling.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"date": {
"maxLength": 10,
"type": "string"
}
},
"type": "object"
},
"name": "get_calendar",
"outputSchema": null
},
{
"description": "Today/week focus minutes, streak, task completion rates.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_focus_stats",
"outputSchema": null
},
{
"description": "Goals by horizon (week/month/year/decade) — exactly what the app's Goals view shows.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"horizon": {
"enum": [
"week",
"month",
"year",
"decade"
],
"type": "string"
},
"status": {
"enum": [
"active",
"completed",
"all"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_goals",
"outputSchema": null
},
{
"description": "Read a daily journal and recent dates. Preserve ^task markers when writing back.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"date": {
"maxLength": 10,
"type": "string"
}
},
"type": "object"
},
"name": "get_journal",
"outputSchema": null
},
{
"description": "Loops — undated intentions in 4 buckets (pressing/important/backlog/waiting=parked). Call before pull_loops.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_loops",
"outputSchema": null
},
{
"description": "List subtasks of a parent. Returns ids usable as refs.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"ref": {
"description": "Task id, #N, or title",
"maxLength": 500,
"type": "string"
}
},
"required": [
"ref"
],
"type": "object"
},
"name": "get_subtasks",
"outputSchema": null
},
{
"description": "Today/tomorrow tasks with id, date and priority. Call first to get refs.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_tasks",
"outputSchema": null
},
{
"description": "Copy loops onto a date as linked tasks — each loop stays in Loops. Idempotent per loop+date.",
"inputSchema": {
"properties": {
"date": {
"maxLength": 10,
"type": "string"
},
"loops": {
"items": {
"maxLength": 500,
"type": "string"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"loops"
],
"type": "object"
},
"name": "pull_loops",
"outputSchema": null
},
{
"description": "Reorder a parent's subtasks. Pass the complete new order, every one once.",
"inputSchema": {
"properties": {
"order": {
"items": {
"maxLength": 64,
"type": [
"number",
"string"
]
},
"maxItems": 100,
"type": "array"
},
"ref": {
"description": "Task id, #N, or title",
"maxLength": 500,
"type": "string"
}
},
"required": [
"ref",
"order"
],
"type": "object"
},
"name": "reorder_subtasks",
"outputSchema": null
},
{
"description": "Update goal fields: title, horizon (moves section), status, bottleneckNote, lever.",
"inputSchema": {
"properties": {
"bottleneckNote": {
"maxLength": 5000,
"type": "string"
},
"horizon": {
"enum": [
"week",
"month",
"year",
"decade"
],
"type": "string"
},
"id": {
"maxLength": 64,
"type": "string"
},
"lever": {
"maxLength": 5000,
"type": "string"
},
"status": {
"enum": [
"active",
"completed",
"paused",
"dropped"
],
"type": "string"
},
"title": {
"maxLength": 500,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "update_goal",
"outputSchema": null
},
{
"description": "Change tasks: date (moves the day), priority, title, estimate, done, time slot.",
"inputSchema": {
"properties": {
"tasks": {
"description": "Changes to apply, one entry per task",
"items": {
"properties": {
"completed": {
"description": "Done",
"type": "boolean"
},
"date": {
"description": "Date",
"maxLength": 10,
"type": "string"
},
"endTime": {
"description": "End",
"maxLength": 5,
"type": "string"
},
"estimatedMinutes": {
"description": "Minutes",
"maximum": 1440,
"minimum": 0,
"type": "number"
},
"goalId": {
"maxLength": 64,
"type": "string"
},
"loopBucket": {
"description": "Into Loops or re-bucket; excl. date; waiting=parked",
"enum": [
"pressing",
"important",
"backlog",
"waiting"
],
"type": "string"
},
"priority": {
"description": "Priority",
"enum": [
"critical",
"important",
"nice-to-have"
],
"type": "string"
},
"ref": {
"description": "Task id, #N, or title",
"maxLength": 500,
"type": "string"
},
"startTime": {
"description": "Start",
"maxLength": 5,
"type": "string"
},
"title": {
"description": "Title",
"maxLength": 500,
"type": "string"
}
},
"required": [
"ref"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
}
},
"required": [
"tasks"
],
"type": "object"
},
"name": "update_tasks",
"outputSchema": null
},
{
"description": "Append or replace a journal. Read before replacing and preserve ^task markers.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"content": {
"maxLength": 100000,
"type": "string"
},
"date": {
"maxLength": 10,
"type": "string"
},
"mode": {
"enum": [
"append",
"replace"
],
"type": "string"
}
},
"required": [
"content"
],
"type": "object"
},
"name": "write_journal",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b44e972cc2b345bf1e6d775f00fb9aa5c6c88b0b7863be6bae42ed93b105ec5c | sha256sum