Lotlsoft Labs
API
Read any of it over HTTP, or let an agent call it directly. No key, no signup, no rate card.
Everything is read-only. There is no writable surface at all, so nothing here is stored on your behalf and nothing can be made to ingest anything.
Published right now: bootstrapped-founders (dataset).
MCP
One endpoint for the whole site, over Streamable HTTP. POST only: it is stateless, so there is no session to resume, and a GET returns 405 rather than leaving a client waiting on a stream that will never open.
https://labs.lotlsoft.com/mcplabs_entries lists what is here, whatever kind each entry is. Everything else is namespaced by entry, so a second one adds its own tools rather than changing what the existing ones mean.
Entries
What bootstrapped founders actually said about AI, pricing and getting acquired
GET /api/bootstrapped-founders
Counts, the failure-mode breakdown, and the list of subjects. sourcesCited and corpusDocuments are separate fields because they are separate things: the URLs the surviving claims point at and the pages that were read.
GET /api/bootstrapped-founders/claims
All claims. ?status=held|refused to filter, ?predicate=revenue-at to narrow, ?q= to search the claim text. No pagination: the whole thing is small enough to hand to a model in one go.
GET /api/bootstrapped-founders/refusals
The refusals, with the reason each was refused and the breakdown by failure mode. This is the interesting one.
GET /api/bootstrapped-founders/subjects/:key
One subject, with every claim that held and every claim that did not.
curl https://labs.lotlsoft.com/api/bootstrapped-founders/refusalsMCP tools
| Tool | Does |
|---|---|
bootstrapped_founders_search | Search claims by text, with every quote behind each |
bootstrapped_founders_subjects | List subjects, or fetch one with all its claims |
bootstrapped_founders_refusals | Claims that failed the check, and why |
bootstrapped_founders_failure_modes | How the refusals break down by shape of mistake |
Coming soon
Bring your own sources. Point the same checking at your own research: create a directory, ingest the pages you fetched, and get back what held and what did not. That is the part we would actually build if someone asked for it, which is why it is the only thing listed here.
The caveat that matters
Where an entry carries checked claims, the check asks whether a claim follows from the evidence cited for it. That is all it asks.
A claim that held can still be false, because a quote can faithfully support something the speaker got wrong. A claim that was refused is unproven rather than false. And the sentences were written by research agents reading public statements, so a refusal is a mark against our sourcing and never against the person quoted.
Quotes come back as a list because most claims rest on more than one, and the sentence doing the work is often not the first. Read them all before deciding whether a claim earns its keep.
The method note goes through all of it, including why a pass rate should not be read as an error rate.
Using it
No authentication and no quota today, and a rate limit generous enough that you will not meet it by accident. Responses are CORS-open, so a browser can call this directly.
We do count MCP tool calls, and for searches we record the query text. That is the experiment: whether an agent calls a free evidence tool a second time is the only question this is trying to answer, and we would rather tell you we are counting than find out quietly. No addresses, headers or sessions are recorded, and there is nothing to tie one call to another.
If something here is useful to you, an email saying so is worth more to us than the traffic.
Licence: the claims and quotes are excerpts from public pages, cited in every response. Attribute the original source, not us.