Skip to main content
Glama

elaichi__connection__list

Read-onlyIdempotent

List the authenticated third-party accounts the caller can use — their own, plus anything explicitly shared with them or their teams. A connection with NO shares is private to its owner and is never listed for anyone else, whatever permission they hold — this cannot answer "what has Priya connected" and must not be reported as if it could; only its owner can. There is no org-wide listing: an org owner or admin sees exactly this same set, never every connection in the organization, whatever permission they hold. A connection is one account of one connector with a credential held in the vault; this is what "are we connected to Slack" means. Each row carries a conn_… id, name, connector_slug, owner_user_id with an owner: { id, name, email } beside it — say who owns a shared connection by name, never by id — and status: "active" is usable, "pending" means nobody ever finished the provider login, "needs_reauth" means it broke and connection.reconnect is the repair. Every row also carries access_summary, a BOUNDED who-else-can-reach-it rollup — { org_level, team_count, user_count, total, preview } — never a full grant list however many grants exist, so answer from its counts ("shared with 3 people and 1 team") and send the user to the connection’s Manage access tab when they need every name. There is no shares key on a row. Every row also carries access_via — how the CALLER reaches that connection: "owner", "direct" (shared with them by name), "team" (with access_via_team: { id, name } naming the team) or "org" (shared organization-wide). It is about the caller alone, never about anyone else, so it is present on every row including ones where access_summary is withheld — and it answers "why can I see this" without disclosing who else can. Credentials are never included. Narrow before paging rather than walking every page: connector_slug answers "do we have Slack" exactly (one slug, or several) and is the right choice when the caller names a provider, owner_user_id narrows to one owner within what the caller can already see (it never reaches a private connection, so it still cannot answer "what has Priya connected"), status takes one lifecycle value, and q is a case-insensitive substring match against the connection’s name, its account label, its connector slug, and the connector’s catalog label — so q: "slack" finds a Slack connection even if a person renamed it to something else, and q: "sheets" finds one on google-sheets even though the slug does not spell it that way. Unrelated to sso_connection.*, which is how people log IN to Elaichi. Returns { result: [...], nextCursor, prevCursor } — camelCase here, unlike the REST API’s next_cursor. Page by sending nextCursor back as cursor until it is null.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoCase-insensitive substring match on the connection’s name, its account label, its connector slug, and the connector’s catalog label, applied before paging. `connector_slug` below is still the right choice for an exact "only these connectors" filter.
limitNoRows per page, 1–200 (default 50). Larger values are clamped, not rejected.
cursorNoOpaque cursor taken verbatim from a previous call’s `nextCursor`. Omit for the first page.
statusNoNarrow to one lifecycle status, applied before paging.
owner_user_idNoNarrow to connections owned by one user, within what the caller can already see. It is a filter, not a way in: another member’s private connections stay invisible, so this cannot enumerate what someone has connected. An id nobody owns returns an empty page.
connector_slugNoOne or more connector slugs (e.g. ["slack"]) — take a slug from a row you have already seen or from connector.list, and do not invent one. This is the right way to ask "are we connected to X"; it matches exactly, applied before paging.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark read-only, idempotent, and non-destructive, and the description adds substantial behavioral context: private connections are never surfaced, access_summary is bounded, there is no shares key, credentials are never included, and pagination returns camelCase cursors. Nothing in the description contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long and occasionally repetitive ('whatever permission they hold' and 'never' are used multiple times), but it is front-loaded with the core scope and each paragraph covers a distinct concern: row shape, access semantics, filters, and pagination. For a tool with tricky access-control semantics, the density is justified, though it could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description fully explains return shape, row fields, status semantics, access_summary, access_via, credentials exclusion, and pagination behavior. The only minor omission is that the disconnected status value is not explained, but active/pending/needs_reauth are among the meaningful states and the overall coverage is enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all six parameters in detail, so the baseline is 3; the description earns extra credit by adding operational examples such as q: 'slack' finding renamed connections and q: 'sheets' matching google-sheets, plus lifecycle meanings for status. It clearly differentiates connector_slug from q and explains cursor round-tripping, though it largely restates what the schema descriptions already say.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'List the authenticated third-party accounts the caller can use' and immediately scopes it to the caller's own plus explicitly shared accounts. Later paragraphs clarify it is about connections, not org-wide inventory, and explicitly separate it from sso_connection.*, so an agent can distinguish it from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance per filter: connector_slug for exact provider checks, q for substring search, owner_user_id only within the caller's visible scope, and status for one lifecycle value. It also states when not to use the tool ('this cannot answer what has Priya connected', 'there is no org-wide listing') and names related tools like connection.reconnect and sso_connection.*.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources