claude.ai
Pro · Team · Max · Enterprise
- 1. Settings → Connectors → Add custom
- 2. Paste the URL above. Auth: none.
- 3. Save and start asking.
"What does CCS think about MSP?" — Claude composes read_index → search → fetch.
For Agents · For LLMs · For Researchers
Use Liberty Lighthouse from inside whichever AI tool you already have open. There's no signup or API key, and every answer carries a URL back to the page it cited.
https://liberty-lighthouse.vercel.app/api/v1/mcp Use it with
It's the same endpoint underneath. What changes is the setup.
Pro · Team · Max · Enterprise
"What does CCS think about MSP?" — Claude composes read_index → search → fetch.
Free · Pro · Any tier with web fetch
/SKILL.md to disk..claude/skills/.Wraps the same HTTP API. No connector, no MCP client, no setup beyond the upload.
JSON config
"liberty-lighthouse": {
"transport": "http",
"url": "https://liberty-lighthouse.vercel.app/api/v1/mcp"
} Add inside mcpServers. Restart the client. Five tools appear.
Quickest sanity check · 2 min
npx @modelcontextprotocol/inspector \
https://liberty-lighthouse.vercel.app/api/v1/mcp Browser UI lists all five tools. Click, fill, run. No setup needed.
Plus · Custom GPT (browsing-based)
Build a Custom GPT that fetches our .md URLs directly via ChatGPT's web browsing capability. Setup checklist in the repo.
An Action-based variant calling our BM25 endpoints is on the roadmap (Phase 4).
Setup checklist →curl · fetch · whatever
GET /api/v1/search?q=msp
GET /api/v1/fetch?url=…
GET /api/v1/index Anonymous, CORS-open, JSON, citation blocks on every response.
llms.txtCrawlers · Skills · Static fetchers
Every public page has a markdown sibling. Append .md to any URL. Howard-spec index at /llms.txt; full corpus dump at /llms-full.txt.
Schema and citation rules at /AGENTS.md.
The five tools
They're meant to compose. The agent picks the order; every result comes back with a citation block attached.
read_index Curated index, schema, and corpus summary. Always call first.
search BM25 over the full corpus. Returns ranked hits with snippets and citations.
fetch Markdown body of any page on the site, with frontmatter parsed into a citation.
list_glossary Enumerate terms with short definitions. Optional substring filter.
list_topics Top-level policy topics with FAQ + video counts.
Methodology
The setup is unfashionable. The corpus is plain markdown in a git repository. A build job tokenizes it into a BM25 index, which is a JSON blob the API loads into memory on cold start. There's no vector store and no retrieval pipeline. When a search call comes in, BM25 picks the candidates; the model that asked does the rest of the thinking.
That choice came from reading Karpathy on what he calls the LLM Wiki pattern.
"Treat the LLM as a compiler that reads raw source documents and produces a structured, interlinked wiki. Don't rely on complex RAG pipelines or vector databases."
His point: an embedding is opaque. You can't read it, and when retrieval surfaces the wrong page you can't really say why. A markdown file isn't opaque. If an answer cites /glossary/msp.md, you open the file and see exactly what the model was reading.
The scale rule he gives is roughly: under a few hundred pages, an llms.txt index by itself is enough. Past that, add BM25. Only reach for vectors when BM25 starts missing things. The corpus is around 1,150 documents, so I'm at the BM25 step, and I haven't hit a recall problem yet.
I built falsafa.ai (source) before this. Same setup, applied to classical and philosophical works: markdown as the source, three small read tools (search_corpus, read_chapter, get_passage), a synthesised wiki layer for navigation, and citation handles that take you back to the original passage. Liberty Lighthouse is that pattern run again on a different body of text.
Repeating the pattern is the point. The texts don't transfer. Philosophy and Indian policy aren't comparable subjects. But the shape of the work is the same: bounded bodies of text with internal references and contested readings, where an agent that wants to engage seriously has to cite a specific passage rather than gesture at the corpus.
A lot of what's here is salvaged from the falsafa.ai work: the citation block on every response, the rule that every page has a markdown sibling, the choice not to host any inference on the server. If you want to build something similar, the source is on GitHub and the schema is at /AGENTS.md.
Every response carries a citation block like this:
{
"canonical_url": "https://liberty-lighthouse.vercel.app/glossary/msp/",
"markdown_url": "https://liberty-lighthouse.vercel.app/glossary/msp.md",
"title": "MSP",
"kind": "glossary",
"last_modified": "2026-04-26"
}
An agent should quote the answer and cite canonical_url so the user lands on the human page. The markdown_url is for traversal to the next document, kind labels the shape (faq, glossary, video, topic, wiki, external_post, external_book_chapter), and last_modified exists so the agent can decide whether a cached answer is still current. Those five fields are the entire contract.
The corpus is openly classical-liberal. On contested policy questions, an agent summarising it should say so rather than present the position as neutral consensus. The citation block helps with that, since every paraphrase points at a specific file you can open and verify against.
Status
Phases 1–3 (the actual API surface) are running. The rest is queued in roughly this order.
1,148 docs indexed across topics, FAQs, videos, glossary, wiki, Spontaneous Order, CCS Books.
/api/v1/{index,search,fetch,glossary,topics} — anonymous, CORS-open, cited responses.
POST /api/v1/mcp — five tools, stateless serverless, ready for any MCP client.
A rolling test suite that asks the API canonical policy questions and checks the citations come back correct. Catches retrieval and citation regressions before they ship.
BM25-backed Custom GPT (the existing browsing-based GPT works today).
You are here.
Anonymous usage stats; submission to claude.com/connectors and the GPT Store.
Content edits ship through the regular site deploy, which also rebuilds the BM25 index. There's no cache for the agent to bust; the next call sees the new state.
Limits & privacy
There's no auth on the API. Query strings and IPs aren't logged. When the Phase 6 telemetry work ships, it'll record aggregate daily counters (how many invocations, how many sessions, how many distinct questions) and won't touch the content of those queries.
Build your own
Schema, citation rules, and frontmatter conventions live at /AGENTS.md. Source code, including the BM25 search library and MCP tool registry, is on GitHub. Operator notes for the API itself are at api/v1/README.md.