{"openapi":"3.1.0","info":{"title":"Focusblock API","version":"0.1.0","description":"Computed Pomodoro/deep-work/timebox schedule math, plus hand-curated explanations of established focus techniques (Pomodoro, timeboxing, deep work, 52/17, ultradian rhythm).\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://focusblock.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/focusblock/docs"},"termsOfService":"https://connectorbay.com/focusblock/terms"},"servers":[{"url":"https://focusblock.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/focusblock/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/pomodoro_schedule":{"post":{"operationId":"pomodoro_schedule","summary":"Compute a full Pomodoro work/break schedule for a total duration, with exact minute offsets (and clock","description":"Compute a full Pomodoro work/break schedule for a total duration, with exact minute offsets (and clock\n    times if you give a start_time). Use for \"give me a pomodoro schedule for 2 hours\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"total_minutes":{"description":"Total time available.","maximum":1440,"minimum":1,"title":"Total Minutes","type":"integer"},"work_minutes":{"default":25,"maximum":180,"minimum":1,"title":"Work Minutes","type":"integer"},"short_break":{"default":5,"maximum":60,"minimum":0,"title":"Short Break","type":"integer"},"long_break":{"default":15,"maximum":120,"minimum":0,"title":"Long Break","type":"integer"},"cycles_before_long_break":{"default":4,"maximum":12,"minimum":1,"title":"Cycles Before Long Break","type":"integer"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional 24h HH:MM to attach clock times.","examples":["09:00"],"title":"Start Time"}},"required":["total_minutes"],"title":"pomodoro_scheduleArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/timebox_schedule":{"post":{"operationId":"timebox_schedule","summary":"Sequence a list of named tasks with given minutes into a timeboxed schedule with offsets (and clock times","description":"Sequence a list of named tasks with given minutes into a timeboxed schedule with offsets (and clock times\n    if given). Use for \"timebox my morning: 15 min inbox, 45 min proposal, 30 min review\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tasks":{"description":"List of {name, minutes}.","examples":[[{"minutes":15,"name":"Inbox zero"},{"minutes":45,"name":"Draft proposal"}]],"items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Tasks","type":"array"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional 24h HH:MM to attach clock times.","title":"Start Time"}},"required":["tasks"],"title":"timebox_scheduleArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/deep_work_block_plan":{"post":{"operationId":"deep_work_block_plan","summary":"Compute large protected deep-work blocks with breaks for a total duration, flagging any trailing block too","description":"Compute large protected deep-work blocks with breaks for a total duration, flagging any trailing block too\n    short to be useful. Use for \"plan 3 deep work blocks this afternoon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"total_minutes":{"maximum":1440,"minimum":1,"title":"Total Minutes","type":"integer"},"block_length":{"default":90,"maximum":240,"minimum":1,"title":"Block Length","type":"integer"},"break_length":{"default":20,"maximum":120,"minimum":0,"title":"Break Length","type":"integer"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional 24h HH:MM.","title":"Start Time"}},"required":["total_minutes"],"title":"deep_work_block_planArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/technique_explainer":{"post":{"operationId":"technique_explainer","summary":"Explain one established focus technique, with appropriate hedging on which claims are well-established","description":"Explain one established focus technique, with appropriate hedging on which claims are well-established\n    versus informal. Use for \"explain the 52/17 rule\", \"what is timeboxing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"technique":{"description":"pomodoro | timeboxing | deep_work | 52_17 | ultradian_rhythm","title":"Technique","type":"string"}},"required":["technique"],"title":"technique_explainerArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/technique_list":{"post":{"operationId":"technique_list","summary":"List every supported focus technique. Use for \"what focus techniques do you know about\".","description":"List every supported focus technique. Use for \"what focus techniques do you know about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"technique_listArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/session_count_for_task":{"post":{"operationId":"session_count_for_task","summary":"Compute how many Pomodoro sessions a task needs and the total elapsed time including breaks. Use for \"how","description":"Compute how many Pomodoro sessions a task needs and the total elapsed time including breaks. Use for \"how\n    many pomodoros for a 90-minute task\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"estimated_minutes":{"description":"How long the task is estimated to take.","maximum":1440,"minimum":1,"title":"Estimated Minutes","type":"integer"},"work_minutes":{"default":25,"maximum":180,"minimum":1,"title":"Work Minutes","type":"integer"},"short_break":{"default":5,"maximum":60,"minimum":0,"title":"Short Break","type":"integer"},"long_break":{"default":15,"maximum":120,"minimum":0,"title":"Long Break","type":"integer"},"cycles_before_long_break":{"default":4,"maximum":12,"minimum":1,"title":"Cycles Before Long Break","type":"integer"}},"required":["estimated_minutes"],"title":"session_count_for_taskArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/break_activity_suggestion":{"post":{"operationId":"break_activity_suggestion","summary":"Short or long break activity ideas depending on how much time you have. Use for \"what should I do on a","description":"Short or long break activity ideas depending on how much time you have. Use for \"what should I do on a\n    5-minute break\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"break_length":{"description":"Break length in minutes.","maximum":180,"minimum":1,"title":"Break Length","type":"integer"}},"required":["break_length"],"title":"break_activity_suggestionArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/focus_environment_checklist":{"post":{"operationId":"focus_environment_checklist","summary":"A checklist for setting up a distraction-free focus session. Use for \"what should I do before I start a","description":"A checklist for setting up a distraction-free focus session. Use for \"what should I do before I start a\n    focus block\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"focus_environment_checklistArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/daily_focus_plan":{"post":{"operationId":"daily_focus_plan","summary":"Compute a full schedule for the time you have, using either the pomodoro or deep_work technique. Use for","description":"Compute a full schedule for the time you have, using either the pomodoro or deep_work technique. Use for\n    \"plan a deep work morning from 9am for 3 hours\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"available_minutes":{"maximum":1440,"minimum":1,"title":"Available Minutes","type":"integer"},"technique":{"default":"pomodoro","description":"pomodoro | deep_work","title":"Technique","type":"string"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional 24h HH:MM.","title":"Start Time"}},"required":["available_minutes"],"title":"daily_focus_planArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/procrastination_tip":{"post":{"operationId":"procrastination_tip","summary":"A well-known anti-procrastination heuristic (two-minute rule, eat the frog, ...), picking the most relevant","description":"A well-known anti-procrastination heuristic (two-minute rule, eat the frog, ...), picking the most relevant\n    one if you give context, or listing all of them. Use for \"I can't get started on this report\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"context":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What you're stuck on, in a sentence, to get the most relevant tip.","title":"Context"}},"title":"procrastination_tipArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}