{"ok":true,"site":{"host":"siftio.marouane-kouskous.workers.dev","url":"https://siftio.marouane-kouskous.workers.dev/","type":"live","desc":"A local-first data vault. Load your CSV and JSON exports into the browser and let an AI agent query them over WebMCP — without the data ever leaving your machine.","tools":[{"name":"list_datasets","kind":"answer","impl":"imperative","description":"List every dataset currently loaded in the user's local SiftIO vault, with row counts and column schemas. Call this first to discover what is available.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_samples","kind":"answer","impl":"imperative","description":"List the demo datasets bundled with SiftIO that can be loaded into the vault. Call this when list_datasets comes back empty — the vault starts empty in a fresh browser session, and these are the only datasets you can load yourself. Load them with load_sample and query them with the tools rather than fetching the files directly: querying runs in DuckDB over the whole vault, supports joins across datasets, and is recorded in the user's audit log.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"load_sample","kind":"act","impl":"imperative","description":"Load one bundled demo dataset into the local vault by file name, taken from list_samples. This registers query_<table> and describe_<table> tools for it. Only bundled samples can be loaded this way; the user adds their own files by dropping them on the page.","inputSchema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","description":"A file name from list_samples, e.g. \"transactions.csv\"."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_sql","kind":"answer","impl":"imperative","description":"Run a read-only SQL SELECT against the local DuckDB vault. Tables are named by the `table` field from list_datasets. Use this to join across datasets. At most 1000 rows are returned. The result echoes the `sql` that ran — quote it when you report a number, so the reader can see what was counted. Amounts may be negative where a dataset records refunds; excluding them is a different question, so say which you did.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","required":["sql"],"properties":{"sql":{"type":"string","description":"A single SELECT statement."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"render_chart","kind":"act","impl":"imperative","description":"Run a read-only SELECT and draw the result in the SiftIO viewport so the user can see it. Use after run_sql when a picture helps. The result echoes the `sql` that ran, alongside `columns` and `rows`.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","required":["sql","kind"],"properties":{"sql":{"type":"string"},"kind":{"type":"string","enum":["bar","line","scatter","table"]},"x":{"type":"string","description":"Column for the x axis."},"y":{"type":"string","description":"Column for the y axis."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_view","kind":"act","impl":"imperative","description":"Pin a named query and chart to the user's board so it survives after this conversation ends.","inputSchema":{"type":"object","required":["name","sql","kind"],"properties":{"name":{"type":"string"},"sql":{"type":"string"},"kind":{"type":"string","enum":["bar","line","scatter","table"]},"x":{"type":"string"},"y":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"eject_dataset","kind":"act","impl":"imperative","description":"Remove a dataset from the local vault. The user is asked to confirm first.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["table"],"properties":{"table":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Developer Tools","favicon":"/favicons/siftio.marouane-kouskous.workers.dev.svg","apiSurface":"spec","toolCount":7}}