The content tools, the per-collection llms shards, the sitemap, and the web pages are all projections of one declaration in the blocklet manifest. A collection appears on a surface when, and only when, the declaration names that surface.
This page covers the parts of that declaration an agent can observe. For the manifest as a whole, see Blocklets.
The shape
collections:
docs:
scope: /packages
indexable:
- "content/docs/**/content.md"
- "content/docs/**/content.zh.md"
readRole: guest
defaultLocale: en
fields:
nav-group: $.nav-group
summary:
- $.name
- $.summary
faces:
web: true
sitemap: true
llms: true
mcp: [search, list, get]| Key | Decides |
|---|---|
indexable | Which files belong to the collection |
readRole | Whether a caller without a credential can read it |
fields | Which front matter becomes a filter on the content tools |
summary | Which front matter appears in a result, and in what order |
faces | Which surfaces the collection reaches |
Faces are opt-in and fail-closed
Omitting faces closes every surface. Omitting readRole means the collection is not anonymous. Neither defaults to open, so a collection cannot reach an agent by accident.
faces.mcp takes the verbs to expose. [search, list, get] maps to search_content, list_content, and get_content for that collection.
Different collections can reach different surfaces
Faces are chosen per collection, so one blocklet can publish a collection to the web while keeping it off the agent surfaces entirely.
A worked example from a site with five collections:
| Collection | web | sitemap | llms | mcp |
|---|---|---|---|---|
docs, glossary, products | Yes | Yes | Yes | Yes |
articles | Yes | Yes | No | Yes |
events | Yes | Yes | No | No |
The reasoning behind that split is a judgement about what is worth an agent's tokens, not a technical limit: reference material earns a place in the text surfaces, a large archive of posts does not, and a list of past events serves neither.
The declaration is observable
You do not need the manifest to see the result. Two checks from outside:
The collection list appears in each content tool's description and in its collection parameter, so tools/list shows exactly which collections have an mcp face:
Search published content by free text and optional facets. Collections: articles; docs; glossary; productsA collection with no mcp face is absent from that list; in the example above, events.
The llms face is visible the same way. A collection with the face has a shard; one without it returns 404:
curl -s -o /dev/null -w '%{http_code}\n' https://<host>/llms-docs.txt # 200
curl -s -o /dev/null -w '%{http_code}\n' https://<host>/llms-articles.txt # 404Anonymous reads
readRole: guest is what lets a caller without a credential read the collection through the content tools. Without it the tools still register, but that collection is not available to an anonymous caller.
The tool names themselves are on the anonymous allowlist either way; see Tools.