{"ok":true,"site":{"host":"loops-webmcp.vercel.app","url":"https://loops-webmcp.vercel.app/","type":"live","desc":"Loops","tools":[{"name":"list_loops","kind":"answer","impl":"imperative","description":"List open loops in compact form, plus folder counts. Optional status: owed, waiting, draft, done, or today (overdue + due today + drafts awaiting approval). Omit status for all open loops.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["owed","waiting","draft","done","today"],"description":"Folder to list. today = overdue + due today + drafts."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_loop","kind":"answer","impl":"imperative","description":"Get one loop in full: title, people, notes, pending draft, and the event timeline. Use before drafting or approving.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","description":"Loop id"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_loop","kind":"act","impl":"imperative","description":"Open a new loop. The agent files it; a human still owns sending. Default status is owed.","inputSchema":{"type":"object","additionalProperties":false,"required":["title"],"properties":{"title":{"type":"string"},"status":{"type":"string","enum":["owed","waiting","draft","done"]},"due":{"type":"string","description":"ISO date or relative (3d, 1w)"},"people":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_loop","kind":"act","impl":"imperative","description":"Patch a loop's title, status, due date, notes, or people. Does not send mail.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["owed","waiting","draft","done"]},"due":{"type":"string","description":"ISO, relative, or empty to clear"},"notes":{"type":"string"},"people":{"type":"array","items":{"type":"string"}}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"draft_message","kind":"act","impl":"imperative","description":"Write a pending draft on a loop. Does NOT send. Status becomes draft if it was not already done. A human must approve in the UI or call approve_draft.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","body"],"properties":{"id":{"type":"string"},"body":{"type":"string","description":"The unsent message. Keep it short and human."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"approve_draft","kind":"transact","impl":"imperative","description":"CONSEQUENTIAL. Marks the pending draft as sent: appends a sent event, clears the draft, then closes the loop (one-shot) or sets it to waiting if a reply is expected. This is the only send. Equivalent to the human Approve button. Do not call unless the human asked to send, or the draft is clearly ready and they delegated approval.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"snooze_loop","kind":"act","impl":"imperative","description":"Push a loop's due date. until is an ISO date or relative like 3d, 1w, 2m.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","until"],"properties":{"id":{"type":"string"},"until":{"type":"string","description":"ISO datetime or relative: 3d, 1w, 2m"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"close_loop","kind":"act","impl":"imperative","description":"Mark a loop done. Optional reason is stored on the timeline.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string"},"reason":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_loops","kind":"answer","impl":"imperative","description":"Search titles, people, notes, and drafts.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"plan_today","kind":"answer","impl":"imperative","description":"Return a prioritized plan of what to do now: overdue first, then drafts awaiting approval, then due today. Structured items an agent can act on with draft_message or get_loop.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Productivity & Business","favicon":"/favicons/loops-webmcp.vercel.app.svg","apiSurface":"spec","toolCount":10}}