> ## Documentation Index
> Fetch the complete documentation index at: https://docs.toolshed.philo.ventures/llms.txt
> Use this file to discover all available pages before exploring further.

# Connector Registry

> Server endpoint that reports which connectors have configured credentials.

## Get availability

```
GET /api/connectors/availability
```

Returns a boolean for each known tool id, indicating whether the server currently has the credentials needed to make that connector usable. The endpoint never returns or echoes secret values — booleans only.

The dashboard fetches this on every mount and filters PERSONAL\_TOOLS / TEAM\_TOOLS / BUILTIN\_TOOLS by the result, so users don't see tiles for connectors that would silently fail when clicked.

**Response:**

```json theme={null}
{
  "availability": {
    "github": true,
    "google": true,
    "slack": false,
    "linear": true,
    "quickbooks": false,
    "gcp": true,
    "docusign": false,
    "carta": false,
    "attio": true,
    "browserbase": true,
    "firecrawl": true,
    "perplexity": true,
    "granola-personal": true,
    "granola-enterprise": true,
    "edgar": true,
    "cloudflare": true
  }
}
```

## How each id is decided

| Category            | Tool ids                                                                        | Availability rule                                                                |
| ------------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| OAuth providers     | `github`, `google`, `slack`, `linear`, `quickbooks`, `gcp`, `docusign`, `carta` | `true` iff both `${UPPER}_CLIENT_ID` and `${UPPER}_CLIENT_SECRET` are set in env |
| Env-backed API keys | `attio`, `browserbase`, `firecrawl`, `perplexity`                               | `true` iff `${UPPER}_API_KEY` is set in env                                      |
| Always available    | `granola-personal`, `granola-enterprise`, `edgar`, `cloudflare`                 | Always `true` (user-supplied API keys handled at runtime, or no auth needed)     |

Any provider id not present in the response should be treated as `true` (don't filter out unknowns) — that way adding a new connector to the dashboard doesn't silently hide it before the registry list is updated.

## Auth

The endpoint sits behind the standard server auth middleware (Better Auth session cookie or `TOOLSHED_API_SECRET` Bearer token). The dashboard's session cookie is sufficient.

## Source

`apps/server/src/routes/connector-registry.ts`. The id lists are hard-coded in that file; update them when a new connector is added.
