{"ok":true,"site":{"host":"app.netzo.io","url":"https://app.netzo.io/","type":"live","desc":"Sign In","tools":[{"name":"page_context","kind":"answer","impl":"imperative","description":"Returns the current route, module.scope, active view (filters, sort, search, selection with labels), open record, open overlays, and `available` (affordance names runnable now). Call this before navigate, set_view, or any table tool.","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"navigate","kind":"act","impl":"imperative","description":"Opens a Netzo app route by module/table/record ids (not a browser URL and not history back). Route shape follows module.scope.kind (see page_context.scope). scope.kind \"none\": /:moduleUid[/:tableUid][/:id]. scope.kind \"entity\": /:moduleUid/:entityId[/:tableUid][/:id]. entityId is the membership row for scope.tableUid, not the record id. Omit moduleUid to stay in the current module; omit tableUid for module home; omit id for table index. Call list_module_tables for tableUid values. After navigate, page RPC tools match the new tableUid.","annotations":{"readOnlyHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"moduleUid":{"description":"Destination module uid. Omit to stay in page_context.moduleUid.","type":"string"},"entityId":{"description":"Membership scope row id when page_context.scope.kind is \"entity\" (id of page_context.scope.tableUid; route param is page_context.scope.param). Not the table record id. Omit to keep the current entity when staying in the same module. Required when opening a different entity-scoped module. Omit when scope.kind is \"none\".","type":"string"},"tableUid":{"description":"Table uid to open. Omit to open the module home. Call list_module_tables for valid uids.","type":"string"},"id":{"description":"Record id for a table detail page. Requires tableUid. Omit to open the table index.","type":"string"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_view","kind":"act","impl":"imperative","description":"Updates the active table view (search, filters, sort, groupBy). Requires an open table view. Call page_context first.","annotations":{"readOnlyHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"search":{"description":"Search text for the active view.","type":"string"},"filters":{"description":"Filters for the active view, same shape as {tableUid}_find filters. Example: [[\"where\", \"status\", \"=\", \"active\"]]. Pass [] to clear.","anyOf":[{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","properties":{"AND":{"type":"array","items":{"$ref":"#/$defs/__schema0"}},"OR":{"type":"array","items":{"$ref":"#/$defs/__schema0"}},"NOT":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"additionalProperties":false}]},"sort":{"description":"Sort for the active view. Example: [{ id: \"createdAt\", desc: true }] for newest first.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Sort key: scalar column (e.g. \"sku\") or dotted json path (e.g. \"label.en\", \"product.label.es\")."},"desc":{"type":"boolean","description":"true = descending (highest/newest first), false = ascending (lowest/oldest first)"}},"required":["id","desc"],"additionalProperties":false}},"groupBy":{"description":"Group-by field uid, or null to clear.","type":["string","null"]}},"additionalProperties":false,"$defs":{"__schema0":{"anyOf":[{"type":"array","prefixItems":[{"type":"string","const":"where"},{"type":"string","description":"Column name or dotted json path, e.g. \"price\" or \"label.en\"."},{"type":"string","enum":["=","!=",">",">=","<","<=","LIKE","NOT LIKE","ILIKE","NOT ILIKE","IN","NOT IN","IS","IS NOT"]},{"description":"Comparison value; type depends on column and operator.","anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},{"type":"object","additionalProperties":true}]}],"items":false,"minItems":4,"maxItems":4},{"type":"array","prefixItems":[{"type":"string","const":"whereExists"},{"type":"string","description":"Related entity key for existence subquery."},{"anyOf":[{"type":"object","properties":{"filters":{"anyOf":[{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","properties":{"AND":{"type":"array","items":{"$ref":"#/$defs/__schema0"}},"OR":{"type":"array","items":{"$ref":"#/$defs/__schema0"}},"NOT":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"additionalProperties":false}]}},"required":["filters"],"additionalProperties":false},{"anyOf":[{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","properties":{"AND":{"type":"array","items":{"$ref":"#/$defs/__schema0"}},"OR":{"type":"array","items":{"$ref":"#/$defs/__schema0"}},"NOT":{"type":"array","items":{"$ref":"#/$defs/__schema0"}}},"additionalProperties":false}]}],"description":"Nested filter conditions applied to the related entity."}],"items":false,"minItems":3,"maxItems":3},{"type":"array","prefixItems":[{"type":"string","const":"or"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}}],"items":false,"minItems":2,"maxItems":2}]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"select_rows","kind":"act","impl":"imperative","description":"Sets the selected row ids on the active table view (max 50). Pass [] to clear. Used before bulk tools such as {tableUid}_archive_many.","annotations":{"readOnlyHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ids":{"maxItems":50,"type":"array","items":{"type":"string"},"description":"Record ids to select in the active view (max 50). Pass [] to clear."}},"required":["ids"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_selection","kind":"act","impl":"imperative","description":"Clears the selected rows on the active table view.","annotations":{"readOnlyHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_filters","kind":"act","impl":"imperative","description":"Clears the search text and filters on the active table view.","annotations":{"readOnlyHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"open_record","kind":"act","impl":"imperative","description":"Opens the detail page of one record in the current table by id. Requires an open table (page_context.tableUid). Look up ids with {tableUid}_find or {tableUid}_get. To open a record in another table, use navigate with tableUid and id.","annotations":{"readOnlyHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"Primary key of the record to open in the current table."}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"refetch","kind":"act","impl":"imperative","description":"Refetches the rows of the active table view.","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"skill_page","kind":"act","impl":"imperative","description":"Loads the page browsing protocol: call page_context first, then navigate with moduleUid/entityId/tableUid/id.","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"skill_current_table","kind":"act","impl":"imperative","description":"Loads the protocol for the open table find, get, and count tools, and how to switch tables with list_module_tables.","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"skill_write_safely","kind":"act","impl":"imperative","description":"Loads the write protocol: human confirmation, prefer archive over delete, and start_*_form fills without submit.","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"skill_http_mcp","kind":"act","impl":"imperative","description":"Loads when to leave the page and use HTTP MCP with an API key for bulk, headless, or multi-table work.","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_module_tables","kind":"answer","impl":"imperative","description":"Lists AI-enabled tables in the current module with tableUid, label, and allowed procedure names. Call this before navigate when the needed table is not the current page. Does not return rows. Pass tableUid to navigate (keep or set entityId when page_context.scope.kind is \"entity\").","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Productivity & Business","favicon":"/favicons/app.netzo.io.png","apiSurface":"spec","toolCount":13}}