Version

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 MCP list_connector_spaces tool 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

Version

On this page

Subscriby is a product
designed by you — for you.
No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request

For AI agents: llms.txt · llms-full.txt