{"ok":true,"site":{"host":"webmcp-wdd8.onrender.com","url":"https://webmcp-wdd8.onrender.com/index.html","type":"live","desc":"Signal","tools":[{"name":"get_overdue_tasks","kind":"answer","impl":"imperative","description":"List all tasks that are past their due date and not marked done.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"get_task_activity","kind":"answer","impl":"imperative","description":"Get the activity log for a specific task by id, to check for completion signals.","inputSchema":{"type":"object","properties":{"taskId":{"type":"string","description":"The task id"}},"required":["taskId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"suggest_completions","kind":"act","impl":"imperative","description":"Scan overdue tasks for activity-log signals that suggest the task is actually complete, and return candidates with a reason for each.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"bulk_update_status","kind":"answer","impl":"imperative","description":"Update the status of one or more tasks. Requires confirmed=true, which must only be set after the user has explicitly approved the change in conversation. Calls without confirmed=true are rejected.","inputSchema":{"type":"object","properties":{"taskIds":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["todo","doing","done"]},"confirmed":{"type":"boolean","description":"Must be true; set only after explicit user approval"}},"required":["taskIds","status","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"search_tasks","kind":"answer","impl":"imperative","description":"Search tasks by free-text query, status, or tag.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"status":{"type":"string","enum":["todo","doing","done"]},"tag":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"add_task","kind":"act","impl":"imperative","description":"Create a new task.","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"tag":{"type":"string"},"dueDate":{"type":"string","description":"YYYY-MM-DD"}},"required":["title"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"propose_tool","kind":"act","impl":"imperative","description":"Propose a new tool composed from existing read primitives (get_overdue_tasks, search_tasks) plus a filter step. This does NOT register the tool. It surfaces a card in the UI for the user to Approve or Reject; the tool only becomes callable after a human clicks Approve. Example - a tool that finds overdue tasks tagged security: steps: [{\"type\":\"call\",\"action\":\"get_overdue_tasks\"},{\"type\":\"filter\",\"field\":\"tag\",\"op\":\"equals\",\"value\":\"security\"}]","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"lowercase_snake_case name for the new tool"},"description":{"type":"string"},"steps":{"type":"array","description":"Each item must be EXACTLY {\"type\":\"call\",\"action\":\"get_overdue_tasks\"|\"search_tasks\",\"params\":{...}} or {\"type\":\"filter\",\"field\":\"...\",\"op\":\"equals\"|\"includes\",\"value\":\"...\"}. No other field names (no \"tool\", no \"arg\", no \"kind\").","items":{"type":"object"}}},"required":["name","description","steps"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"list_tool_proposals","kind":"answer","impl":"imperative","description":"List all proposed tools and their status (pending, approved, rejected).","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"write_project_file","kind":"act","impl":"imperative","description":"Write or overwrite a file in the shared project workspace, e.g. app.py.","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"e.g. app.py or src/utils.js"},"content":{"type":"string"}},"required":["path","content"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"edit_project_file","kind":"act","impl":"imperative","description":"Edit part of an existing project file by exact string replacement, without rewriting the whole file. old_str must match the file's content in exactly one place; add surrounding context to make it unique.","inputSchema":{"type":"object","properties":{"path":{"type":"string"},"old_str":{"type":"string"},"new_str":{"type":"string"}},"required":["path","old_str","new_str"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"run_code","kind":"act","impl":"imperative","description":"Run the JavaScript in a project file inside an isolated, network-disabled sandbox with a 3s timeout. Captures console.log/console.error output. Runs entirely in the browser, never on the server.","inputSchema":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"read_project_file","kind":"answer","impl":"imperative","description":"Read a file's contents from the shared project workspace.","inputSchema":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"list_project_files","kind":"answer","impl":"imperative","description":"List all files currently in the shared project workspace.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"},{"name":"list_own_tools","kind":"answer","impl":"imperative","description":"List every tool currently registered on this page, with descriptions. Call this instead of guessing a tool name.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/index.html"}],"category":"Productivity & Business","apiSurface":"spec","toolCount":14}}