Registry¶
The registry is the single list of published FreeDocStore knowledge bases. It lives at site/registry.json in the platform repo and is served at:
The product site renders it, the MCP server reads it (list_knowledge_bases, knowledge_base_info), and MCP tools accept a registry id anywhere they accept a repo name.
Shape¶
{
"knowledge_bases": [
{
"id": "true-non-profit",
"title": "True Non-Profit",
"description": "A first-principles knowledge base about non-profits...",
"engine": "zensical",
"source": {
"repo": "FreeDocStore/true-non-profit",
"branch": "main",
"docs_dir": "docs",
"config": "zensical.toml"
},
"cloudflare": {
"pages_project": "true-non-profit",
"production_url": "https://true-non-profit.pages.dev/",
"custom_domains": []
},
"status": "published"
}
]
}
Fields¶
| Field | Meaning |
|---|---|
id |
KB slug. Doubles as the Cloudflare Pages project name and default subdomain. |
title, description |
Display metadata for the product site and agents. |
engine |
Always "zensical" for now. |
source.repo |
GitHub repo as owner/name. |
source.branch |
Publishing branch, default main. |
source.docs_dir |
Markdown source directory, default docs. |
source.config |
Zensical config path, default zensical.toml. |
cloudflare.pages_project |
Cloudflare Pages project name. |
cloudflare.production_url |
Canonical production URL. |
cloudflare.custom_domains |
Custom domains attached to the Pages project. |
status |
Lifecycle marker, e.g. draft-0.1, published. |
Invariants¶
- A repo without a registry entry is drift: it may build and deploy, but the platform, site, and agents will not see it.
- A registry entry without a working Pages deployment is a broken listing —
deploy_statuson the repo shows why. - The platform repo holds this metadata only; it never embeds KB content.