`GET /api/mcp/agents/{agent_id}/connectors` — connectors + per-agent status.
Same relaxed gate as list_tool_rules below (and set_connector_access/
list_connector_tools, already relaxed by a9012ded/56e46b07): a caller
who can’t manage the whole agent still sees the connector(s) they
themselves can reach (narrowed, not blocked outright) — otherwise this
endpoint (the natural first call before agent-tools enable/set-rule)
would be the one sibling still hard-denying the exact caller those other
endpoints already permit, making them undiscoverable in practice. This
works with zero relationship to the agent itself, e.g. a connector owner
whose connector was granted to someone else’s agent.
If that per-connector filter finds nothing at all (no connector the
caller can manage happens to be attached here), it used to hard-403
unconditionally — but an empty result is also the normal, legitimate
state for a caller who has ordinary access to the agent
([can_access_agent] — owner, public, or a plain share) and simply
hasn’t attached any connector of their own yet (e.g. they’re about to
attach their first one). Only a caller with NEITHER a manageable
connector already here NOR any relationship to the agent at all still
gets the 403.
Path Parameters
Agent id
Response
Connectors + per-agent status — data.connectors is a list
Doc-only schema for the standard MCP ApiResponse envelope
({"data": …, "status_code": N, "message": "…"}). Most /api/mcp/*
payloads are service-layer serde_json::Value views, so data is
documented as a free-form object; each route's response description says
what it carries.
