Agent capabilities

Capability discovery

Ask the two authenticated discovery questions instead of reading a static catalog that cannot know who is calling.

Discovery is caller-specific in v0. There is no public catalog to read: the answer to "what is available" depends on which member of which organization is asking, so both discovery surfaces are authenticated.

QuestionSource of truth
Which connectors exist, and which accounts can this caller see?GET /connectors
Which tools can this caller see right now?MCP tools/list on POST /mcp

The two are not interchangeable. GET /connectors describes potential — what could be connected and what account state exists. tools/list describes visibility — the surface this caller is offered right now. It is not a guarantee of execution: see the caveats below before treating a listed tool as callable.

Full request and response contracts: GET /connectors and tools/list.

tools/list is the visibility authority

It already reflects connected accounts, hidden registrations, and organization plus member capability settings. So:

  • Do not build a static tool inventory in application code. Read the names and input schemas back from the response.
  • Absence is a decision, not a bug. If a tool is missing, this caller cannot invoke it — the capability is off, or the account is not connected.
  • Presence is not health. A connector account in needs_reauth still contributes tools; those calls fail until the account is reauthorized. Check account status in GET /connectors when a visible tool keeps failing.
  • Presence is not permission either. The session-gated manage__* tools (keys_*, whoami, accounts_*) are listed for an API-key caller but answer jwt_session_required until the request carries a user session. The four manage__remote_* tools are the exception — they accept API keys, subject to their own role and hold checks.

An authenticated GET /engines inventory does not exist yet. Do not infer a built-in tool list from the retired /catalog; only advertise or call a built-in when it appears in tools/list.

The index is the availability authority

A connector withheld from GET /connectors may still have a live implementation route while upstream OAuth approval is in progress. Reaching that route is not evidence that the connector is publicly available — the index is.

Nothing about the connector count or list belongs in a client. Both change without notice as approvals land.