SpaceBrowser
Listing the places an installation could gate, so a creator picks a role, a channel or a room from a list instead of answering a prompt on the platform.
Subscriby\Connector\Contracts\Ports\SpaceBrowser. Bound by connectors that declare space_browsing, which in turn requires access_control.
Some platforms let an installation enumerate the places it administers: a server's roles and channels can be listed with one call. Where that is true, the dashboard, the REST API, the MCP server and the apps offer a picker built from your list, and the creator links a resource in one click. Where it is not (a bot that only learns of a chat when the creator tells it), the SpaceCatalog request stays the way. A connector may bind both: the catalogue's request serves its own in-platform surface, the browser serves everything else.
The method
public function browse(InstallationRef $installation, CredentialBag $credentials, string $kind): array; // list<SpaceSummary>kind is one of the kinds your manifest declares under resource_kinds. Answer every place of that kind the installation can see, in the platform's own order, as SpaceSummary objects (externalId, kind, title, an optional parentExternalId, meta). Leave out what cannot be gated: a server's @everyone role, a role the platform itself manages, a category channel.
What the core does around you
- The resource link dialog asks for the list when the creator picks your connector and a kind, and files the chosen place through
Core\Resources::create()after recording the space, exactly as a catalogue request's answer would be filed. GET /v1/projects/{project}/connectors/{key}/installation/spaces?kind=serves the same list to automations; the MCPlist_connector_spacestool and the Zapier and n8n dropdowns read it.- A list is read live and never cached by the core: a role created a moment ago appears on the next open of the picker.
How Discord does it
browse('role') is the server's roles below the application's own, browse('channel') its text, voice, stage and forum channels grouped by category, browse('server') the server itself. The bot reads them with its own token; nothing is asked of the creator on Discord.
What the kit checks
spaces.browse_answers_declared_kinds: for every kind the manifest declares, browse() answers a list of SpaceSummary objects whose kind is the one asked for.
Permission is still diagnosed
Listing a place does not mean the installation can grant in it. The core still runs your SpaceCatalog::diagnose() on the chosen place before it is sold, so a role above the bot's own is refused with the sentence the creator needs rather than at the first grant.
How is this guide?
Last updated on
RecoverySupport
What the Disaster Recovery Program needs a connector to witness and do — vocabulary, readiness, the three probes, standby installations, failover, mirroring and identity relinks, facet by facet.
Announcer
Carrying a broadcast as one post where the platform keeps a place for announcements, mentioning the audience in the platform's idiom, instead of a message to every member.