Skip to content

Manifest Reference

NimbleBrain reads host metadata from the _meta["ai.nimblebrain/host"] key on your server’s catalog entry — the upstream MCP registry ServerDetail record an operator adds to the connectors catalog. ai.nimblebrain/host is one extension with several capabilities. This page gives the shape of each field; the page linked from each row says what the host does with it. The counts your app shows on the workspace overview are not declared here: your server reports them over MCP with the facets extension.

The block has a published JSON Schema at schemas.nimblebrain.ai/v1/nimblebrain-host.schema.json — point your editor’s $schema at it for completion and validation while authoring.

catalog/my-app.yaml
servers:
- name: com.myorg/my-app
title: My App
description: My NimbleBrain app
version: "1.0.0"
remotes:
- type: streamable-http
url: https://my-app.myorg.com/mcp
_meta:
ai.nimblebrain/host:
host_version: "1.0"
placements:
- slot: sidebar.apps
resourceUri: ui://dashboard
priority: 50
label: My App
route: my-app
- slot: settings
resourceUri: ui://settings

Host metadata: _meta["ai.nimblebrain/host"]

Section titled “Host metadata: _meta["ai.nimblebrain/host"]”
Field Type Required Description
host_version string Yes Contract major version. Write "1.0". It changes only on a breaking change: every field in this table is part of 1.0, and a block is turned on by declaring it, not by the version. The host accepts any 1.x and skips a catalog connector that declares another major.
placements PlacementDeclaration[] No Shell layout placement declarations: sidebar items, main views, and the settings section. Shape below; behavior in Placements & navigation and Settings sections.
hooks HookDeclaration[] No Inbound event streams your server accepts from a vendor over plain HTTPS, one entry per vendor: { vendor, route, register_tool, description?, header_renames? }. Read from a catalog entry only. A route may not be your MCP endpoint’s path or a path under it. See Inbound webhooks.
notifications object No The outbox your server exposes, one resource the host polls for facts nobody asked for: { resource, description? }. See Notifications.
admin_tools string[] No Names of tools on your server that only a workspace admin may call, at most 64. Read from a catalog entry only. See Admin-only tools.

The block has no name, icon, category or primaryView; a block that still declares them loads, and the host ignores them like any unknown key. A connector’s display name is its catalog entry’s title (or name), and its icon the entry’s icons, the fields the MCP Registry ServerDetail already defines. A sidebar entry’s label is its placement’s own label.

Each entry in the placements array:

Field Type Required Default Description
slot string Yes — Shell slot to fill: "sidebar.apps" (or any "sidebar.<group>"), "sidebar", "sidebar.bottom", "main", or "settings". See Placements.
resourceUri string Yes — ui:// URI served by this MCP server.
priority number No 100 Sort order within the slot. Lower values appear first.
label string No — Human-readable label for sidebar items. Ignored for "settings".
icon string No — Lucide icon name (kebab-case), shown on a sidebar.bottom entry. Falls back to CircleDot if unset or unrecognized. A connector’s other sidebar entries show its catalog icons.
route string No — Route path. Registers as /w/<slug>/app/<route>. Ignored for "settings".
size "compact" | "full" | "auto" No — Size hint. The shell does not read it.

The smallest catalog entry that registers a UI view:

catalog/hello.yaml
servers:
- name: com.myorg/hello
title: Hello
description: Says hello
version: "0.1.0"
remotes:
- type: streamable-http
url: https://hello.myorg.com/mcp
_meta:
ai.nimblebrain/host:
host_version: "1.0"
placements:
- slot: sidebar.apps
resourceUri: ui://index
route: hello
label: Hello

No _meta needed for a tools-only server:

catalog/calculator.yaml
servers:
- name: com.myorg/calculator
description: Arithmetic
version: "1.0.0"
remotes:
- type: streamable-http
url: https://calculator.myorg.com/mcp