{"ok":true,"site":{"host":"cleansheet-brown.vercel.app","url":"https://cleansheet-brown.vercel.app/","type":"live","desc":"Cleansheet lets an agent clean a messy spreadsheet through typed WebMCP tools while you approve every change.","tools":[{"name":"get_sheet_summary","kind":"answer","impl":"imperative","description":"Read the sheet's shape in one call: row count, column count, how many defect classes were found, how many cells they affect, what is staged, and the list of tools currently registered. Call this first.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/sheet","/review","/activity"]},{"name":"profile_column","kind":"answer","impl":"imperative","description":"Profile a single column: how many rows, how many blank, how many carry stray whitespace, how many distinct values ignoring case, and up to eight sample values. Use this to decide which transform a column needs.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"column":{"type":"string","description":"Column key, such as email or signedUp."}},"required":["column"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/sheet","/review","/activity"]},{"name":"detect_issues","kind":"act","impl":"imperative","description":"Scan the whole sheet and return every defect class found: stray whitespace, blanks, mixed case, mixed date formats, currency held as text, inconsistent country spellings and duplicate rows. Each entry gives the column, how many cells it affects, an example, and the transform that would fix it. One call replaces reading the file.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/sheet","/review","/activity"]},{"name":"preview_transform","kind":"act","impl":"imperative","description":"Run a transform against a column and return how many cells it would alter, how many it would leave alone, and five before-and-after examples. Nothing is written. Use this to check a transform before staging it.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"column":{"type":"string"},"op":{"type":"string","enum":["trim","lowercase","uppercase","titlecase","normalize_date","normalize_currency","normalize_country"]}},"required":["column","op"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/sheet","/review","/activity"]},{"name":"stage_transform","kind":"act","impl":"imperative","description":"Stage a transform on an entire column. This does not touch the sheet: it queues a diff the operator reads before anything is written. Staging a transform that would change nothing is refused.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"column":{"type":"string"},"op":{"type":"string","enum":["trim","lowercase","uppercase","titlecase","normalize_date","normalize_currency","normalize_country"]}},"required":["column","op"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/sheet","/review","/activity"]},{"name":"stage_dedupe","kind":"act","impl":"imperative","description":"Stage the removal of duplicate rows matched on the given columns, keeping the first of each group. Rows where any key column is blank are never treated as duplicates. This drops data, so like every other change it only queues a proposal.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"keyColumns":{"type":"array","items":{"type":"string"},"description":"Columns that identify a duplicate. Defaults to name and email."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/sheet","/review","/activity"]},{"name":"get_efficiency_report","kind":"answer","impl":"imperative","description":"Return how many tool calls and bytes this session has used, and what the same edits would have cost an agent driving the page by sight, under a stated model of five interactions per cell and one screenshot per twenty cells.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/sheet","/review","/activity"]}],"category":"Productivity & Business","favicon":"/favicons/cleansheet-brown.vercel.app.svg","apiSurface":"spec","toolCount":7}}