Research reports built by Keenable SELECT, an supplier that searches the web successful SQL.
Every paper links the vanished study and the afloat trajectory down it: each query, instrumentality result, and consequence set.
You ask
“Which AI researchers moved betwixt frontier labs since 2025? For each move database the researcher, the laboratory they left, wherever they went and the month.”
→
Keenable SELECT runs SQL connected the web
SELECT SEM_EXTRACT(content, 'researcher'), SEM_EXTRACT(content, 'left lab'), SEM_EXTRACT(content, 'joined lab'), SEM_EXTRACT(content, 'move month') FROM WEB_SEARCH(8 divers queries) WHERE SEM_MATCH(content, 'named interrogator moving betwixt frontier labs, 2025+')→
You get a report
![]()
The strategy down the reports
Keenable SELECT is an MCP server pinch 1 main tool: select. The instrumentality runs one read-only DuckDB SELECT connection connected unrecorded web data. The server runs the web and semantic operators extracurricular DuckDB, puts their output backmost into the row set, and past runs the last SQL successful DuckDB.
A accepted web hunt gives an supplier 10 links. The supplier must past publication each page and build the reply from costly tokens. SELECT moves this activity into the query. One telephone tin hunt much than 1,000 pages, select them pinch an exact WHERE clause astatine nary LLM cost, extract fields pinch 1 mini LLM call per row, and group the rows.
MCP tools
- select takes DuckDB SELECT queries and returns the rows. The server saves each query consequence arsenic a consequence group pinch an id, and a later query tin publication from that id.
- generate_html_report takes a little and consequence group ids. A study exemplary on the server writes an HTML study from the rows and returns a shareable link.
Semantic operators
The operators unrecorded wrong normal SQL. The server finds them successful the parsed statement, runs them, and replaces them pinch plain columns. Exact SQL filters run first, truthful only the surviving rows spell to the LLM operators.
WEB_SEARCH and WEB_FETCH tin besides tally per row. Their arguments tin use row columns, for illustration WEB_SEARCH(name || ' founding year').
Main agent
Every study successful this assemblage comes from 2 agents: a investigation supplier that uses the MCP server to stitchery the data, and a study supplier that runs inside generate_html_report connected the server and writes the page.
The investigation supplier is simply a plain instrumentality loop: an LLM pinch the prime tool. It writes and runs its ain queries until it tin answer, and streams its tool calls, results, and reply arsenic events. A follow-up mobility continues the conversation connected apical of the stored transcript. Every tally successful this showcase asks for an HTML report, truthful the supplier ends each reply pinch the study link.
Report agent
A 2nd supplier writes each study connected the server. It gets the brief, the rows of the consequence sets, and an authoring guide. It builds the page successful a sandboxed Python convention that holds the consequence sets arsenic dataframes, truthful the information reaches the page without the exemplary retyping it. After each publish, the server renders the draught and returns screenshots and the page's JavaScript error count; the supplier fixes the archive and publishes again, nether a fixed budget. Only the last draught stays live, published arsenic a link.
English (US) ·
Indonesian (ID) ·