For Agents · For LLMs · For Researchers

The corpus,
readable by your AI.

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.

Live https://liberty-lighthouse.vercel.app/api/v1/mcp

Use it with

Pick whichever fits your tool.

It's the same endpoint underneath. What changes is the setup.

claude.ai

Pro · Team · Max · Enterprise

  1. 1. Settings → Connectors → Add custom
  2. 2. Paste the URL above. Auth: none.
  3. 3. Save and start asking.

"What does CCS think about MSP?" — Claude composes read_index → search → fetch.

Claude skill (no connector)

Free · Pro · Any tier with web fetch

  1. 1. Save /SKILL.md to disk.
  2. 2. Upload as a personal skill on claude.ai, or drop it in .claude/skills/.
  3. 3. Ask anything about Indian policy.

Wraps the same HTTP API. No connector, no MCP client, no setup beyond the upload.

Claude Desktop · Cursor · Cline · Continue

JSON config

"liberty-lighthouse": {
  "transport": "http",
  "url": "https://liberty-lighthouse.vercel.app/api/v1/mcp"
}

Add inside mcpServers. Restart the client. Five tools appear.

MCP Inspector

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.

ChatGPT

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 →

Raw HTTP

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.

Anything that reads llms.txt

Crawlers · 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

Five small 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

A markdown corpus and a BM25 index.
The model that calls the API does the rest.

by Adnan Abbasi · github.com/adoistic

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.

A pattern, applied twice: falsafa.ai

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.

What the agent gets back

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

Where things stand.

Phases 1–3 (the actual API surface) are running. The rest is queued in roughly this order.

  1. Phase 1 Live

    BM25 search core

    1,148 docs indexed across topics, FAQs, videos, glossary, wiki, Spontaneous Order, CCS Books.

  2. Phase 2 Live

    Public HTTP API

    /api/v1/{index,search,fetch,glossary,topics} — anonymous, CORS-open, cited responses.

  3. Phase 3 Live

    Streamable HTTP MCP

    POST /api/v1/mcp — five tools, stateless serverless, ready for any MCP client.

  4. Eval track In progress

    Answer-quality evals

    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.

  5. Phase 4 Next

    OpenAPI spec + ChatGPT Action

    BM25-backed Custom GPT (the existing browsing-based GPT works today).

  6. Phase 5 Live

    This /ai page

    You are here.

  7. Phase 6+ Planned

    Telemetry, admin dashboard, listings

    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

Anonymous, unauthenticated, no query logs.

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.

Privacy policy →

Build your own

Roll your own integration.

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.

View source →