{"server":{"name":"io.github.maxxthedeveloper/focuh","title":"Focuh","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://www.focuh.com/api/mcp","type":"streamable-http","headers":[{"name":"Authorization","value":"Bearer {api_key}","isSecret":true,"variables":{"api_key":{"isSecret":true,"isRequired":true,"description":"API key from Focuh Settings > MCP"}},"isRequired":true,"description":"Bearer API key from Focuh Settings > MCP"}]}],"version":"3.0.0","repository":{"id":"1114508387","url":"https://github.com/maxxthedeveloper/focuh","source":"github"},"websiteUrl":"https://www.focuh.com/mcp","description":"ADHD system of record for agents: tasks, goals, loops, calendar, focus stats."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-09-03T22:01:19.237348Z","publishedAt":"2026-09-03T22:01:19.237348Z","statusChangedAt":"2026-09-03T22:01:19.237348Z"},"dev.protogrid/connectability":{"class":"R1","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://www.focuh.com/api/mcp","transport":"streamable-http","templated":false,"headers":[{"name":"Authorization","required":true,"secret":true,"value":"Bearer {api_key}","secret_names":["api_key"]}],"auth":{"type":"api_key","location":null,"secret_name":"api_key","oauth":null},"protocol":{"supported_versions":["2025-11-25"],"stateless":false},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":276,"consecutive_failures":0,"last_probe_at":"2026-10-19T18:29:07.348Z","last_ok_at":"2026-10-19T18:29:07.348Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"create_goal","title":"Create Goal","description":"Create a goal in a horizon, with optional bottleneck note and lever.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"create_tasks","title":"Create Tasks","description":"Create tasks, each with optional nested subtasks. Defaults: today, 30 min.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"delete_goal","title":"Delete Goal","description":"Delete a goal by id. Linked tasks are kept and unlinked, never deleted.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"delete_tasks","title":"Delete Tasks","description":"Delete tasks by ref, every task on a date, or all completed. Subtasks go too.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"get_calendar","title":"View Calendar","description":"Events + scheduled/unscheduled tasks for a date. Check before scheduling.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"get_focus_stats","title":"Focus Statistics","description":"Today/week focus minutes, streak, task completion rates.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"get_goals","title":"View Goals","description":"Goals by horizon (week/month/year/decade) — exactly what the app's Goals view shows.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"get_loops","title":"View Loops","description":"Loops — undated intentions in 4 buckets (pressing/important/backlog/waiting=parked). Call before pull_loops.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"get_notes","title":"Read Notes","description":"Read a day's note and recent dates. Preserve ^task markers when writing back.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"get_subtasks","title":"View Subtasks","description":"List subtasks of a parent. Returns ids usable as refs.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"get_tasks","title":"View Tasks","description":"Today/tomorrow tasks with id, date and priority. Call first to get refs.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"pull_loops","title":"Pull Loops","description":"Copy loops onto a date as linked tasks — each loop stays in Loops. Idempotent per loop+date.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"reorder_subtasks","title":"Reorder Subtasks","description":"Reorder a parent's subtasks. Pass the complete new order, every one once.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"update_goal","title":"Update Goal","description":"Update goal fields: title, horizon (moves section), status, bottleneckNote, lever.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"update_tasks","title":"Update Tasks","description":"Change tasks: date (moves the day), priority, title, estimate, done, time slot.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"},{"name":"write_notes","title":"Write Notes","description":"Append to or replace a day's note. Read before replacing and preserve ^task markers.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:29:07.348Z"}],"dev.protogrid/trust":{"score":94,"components":{"hygiene":100,"liveness":100,"freshness":85,"provenance":90},"drivers":["+repository","+namespace-matches-repo","+website","+reachable","+uptime-100%","~updated-46d-ago"],"flags":[],"blocked":false,"computed_at":"2026-10-19T22:06:09.911Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":91,"label":"strong","components":{"auth":null,"hygiene":100,"protocol":75,"stability":100,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28","status":"warn","category":"protocol"},{"id":"protocol.stateless","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"16 of 16 tools declare readOnlyHint or destructiveHint","status":"pass","category":"hygiene"},{"id":"tools.directory_hints","detail":"every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint","status":"pass","category":"hygiene"},{"id":"tools.token_cost","detail":"about 1,782 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"4 tool changes in 30 days","status":"pass","category":"stability"},{"id":"stability.rug_pull","detail":"no tool changed its meaning under the same name","status":"pass","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["~protocol.modern"],"flags":[],"tool_count":16,"token_estimate":1782,"tools_hash":"72a603e7840fc6058aa0e734ec775a90","tools_changed_at":"2026-10-04T17:27:05.286Z","computed_at":"2026-10-19T22:14:06.215Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"io.github.maxxthedeveloper/focuh","aliases":[],"alias_count":0,"repository_key":"github:maxxthedeveloper/focuh","owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/io.github.maxxthedeveloper%2Ffocuh/tools","arguments":{"name":"io.github.maxxthedeveloper/focuh"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/io.github.maxxthedeveloper%2Ffocuh/connection?target=mcpServers","arguments":{"name":"io.github.maxxthedeveloper/focuh","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}