内容工具、按集合切分的 llms 分片、sitemap 和网页,都是 blocklet manifest 里同一份声明的投影。一个集合出现在某个面上,当且仅当声明里点名了那个面。
本页只讲这份声明中 agent 可观察到的部分。manifest 整体见 Blocklets。
形状
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]| 键 | 决定什么 |
|---|---|
indexable | 哪些文件属于这个集合 |
readRole | 没有凭证的调用方能否读它 |
fields | 哪些 front matter 成为内容工具上的过滤条件 |
summary | 结果中出现哪些 front matter,以及顺序 |
faces | 这个集合抵达哪些面 |
face 是显式开启且 fail-closed 的
省略 faces 会关闭所有面。省略 readRole 意味着该集合不匿名开放。两者都不默认开放,因此一个集合不会意外地抵达 agent。
faces.mcp 接受要暴露的动词。[search, list, get] 对应该集合的 search_content、list_content 和 get_content。
不同集合可以抵达不同的面
face 按集合分别选择,因此同一个 blocklet 可以把某个集合发布到网页,同时完全不让它出现在 agent 面上。
一个有五个集合的站点的实例:
| 集合 | web | sitemap | llms | mcp |
|---|---|---|---|---|
docs、glossary、products | 是 | 是 | 是 | 是 |
articles | 是 | 是 | 否 | 是 |
events | 是 | 是 | 否 | 否 |
这样划分背后是「什么值得占用 agent 的 token」这一判断,不是技术限制:参考资料值得进入文本面,大量历史帖子不值得,而一份过往活动清单两者都不服务。
声明是可观察的
不需要拿到 manifest 也能看出结果。两个从外部做的检查:
集合列表会出现在每个内容工具的描述和它的 collection 参数里,所以 tools/list 直接显示哪些集合有 mcp face:
Search published content by free text and optional facets. Collections: articles; docs; glossary; products没有 mcp face 的集合不在这个列表里 —— 上表中就是 events。
llms face 同样可见。有这个 face 的集合有分片,没有的返回 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 # 404匿名读取
readRole: guest 才使得没有凭证的调用方能通过内容工具读取该集合。没有它,工具照样注册,但那个集合对匿名调用方不可用。
无论哪种情况,工具名本身都在匿名白名单上;见工具。