Skip to main content

ARC developer documentation

Declare what agents see

A blocklet declares its content collections once. The declaration decides which agent-facing surfaces each collection reaches, and whether an anonymous caller can read it.

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

yaml
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]

KeyDecides
indexableWhich files belong to the collection
readRoleWhether a caller without a credential can read it
fieldsWhich front matter becomes a filter on the content tools
summaryWhich front matter appears in a result, and in what order
facesWhich 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:

Collectionwebsitemapllmsmcp
docs, glossary, productsYesYesYesYes
articlesYesYesNoYes
eventsYesYesNoNo

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:

text
Search published content by free text and optional facets. Collections: articles; docs; glossary; products

A 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:

bash
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

Anonymous 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.