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

# /v1/mcp-catalog

> Curated list of vendor-hosted MCP servers — Linear, GitHub, Stripe, Atlassian, Sentry, Notion. One-click connect, no URL hunting.

A curated catalog of well-known MCP servers we've vetted. Pick from
the list, paste your provider API key, done — qlaud handles the rest.
Same UX as the [built-in tool catalog](/api-reference/builtins), but
backed by vendor-hosted MCP servers instead of in-process handlers.

For long-tail or unsupported vendors, use the raw-URL flow at
[/api-reference/mcp](/api-reference/mcp). For vendors that publish
an MCP server we'll happily add to the catalog — file an issue.

## GET /v1/mcp-catalog — Catalog

```bash theme={null}
curl https://api.qlaud.ai/v1/mcp-catalog
```

Public — no auth required. Returns the same content for every caller.

### Response

```json theme={null}
{
  "object": "list",
  "data": [
    {
      "catalog_slug": "qlaud-mcp/linear",
      "display_name": "Linear",
      "description": "Issues, projects, cycles, comments, teams — full Linear surface…",
      "provider_brand": "linear",
      "server_url": "https://mcp.linear.app/sse",
      "auth_mode": "either",
      "config_schema": {
        "type": "object",
        "properties": {
          "api_key": {
            "type": "string",
            "format": "password",
            "description": "Linear API key (lin_api_…) or org-wide OAuth token."
          }
        },
        "required": ["api_key"]
      },
      "approx_tool_count": 30,
      "last_verified": "2026-04-25"
    },
    { "catalog_slug": "qlaud-mcp/github", "...": "..." }
  ]
}
```

`config_schema` describes what the customer needs to supply at
registration (for tenant mode) or what each end-user supplies via the
hosted connect URL (for per-user mode). Fields with `format: password`
get rendered as secret inputs in the dashboard form.

## POST /v1/mcp-servers — Register from catalog

```bash theme={null}
curl https://api.qlaud.ai/v1/mcp-servers \
  -H "x-api-key: $QLAUD_MASTER_KEY" \
  -d '{
    "name": "linear",
    "catalog_slug": "qlaud-mcp/linear",
    "config": { "api_key": "lin_api_…" }
  }'
```

Two registration shapes share the same endpoint:

* **Curated** (this page): `catalog_slug` + `config` (matches the
  catalog's `config_schema`). qlaud applies the entry's
  `buildAuthHeaders` template to convert the config into the actual
  HTTP headers the server expects (e.g. `{api_key: 'lin_…'}` →
  `{Authorization: 'lin_…'}` for Linear; Notion adds the
  `Notion-Version` header automatically).
* **Raw URL** (see [/api-reference/mcp](/api-reference/mcp)): for
  vendors not in the catalog or for your own internal MCP servers.

You can't pass both `catalog_slug` and `server_url` — pick one.

### Body fields

| Field          | Type   | Required      | Description                                                                                                                                                                                                    |
| -------------- | ------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`         | string | yes           | Per-account unique label, lowercase alnum + `-`/`_`, ≤31 chars. Becomes the prefix on every tool from this server.                                                                                             |
| `catalog_slug` | string | yes (curated) | A slug from `/v1/mcp-catalog`.                                                                                                                                                                                 |
| `auth_mode`    | string | no            | `tenant` (default) or `per_user`. See [auth modes](/api-reference/tools-mode-dynamic).                                                                                                                         |
| `config`       | object | conditional   | Required when `auth_mode='tenant'`; matches the catalog entry's `config_schema`. **Omit when `auth_mode='per_user'`** — credentials come from each end-user inline at runtime via the hosted connect URL flow. |

### Per-user mode + curated catalog

When you register a curated MCP server with `auth_mode: 'per_user'`,
each end-user supplies the same fields the catalog's `config_schema`
declares — but inline in chat, via the [hosted connect URL flow](/api-reference/tools-mode-dynamic#qlaud_manage_connections):

```
end-user: "What's the status of LIN-42?"

→ qlaud_manage_connections({action: "connect", tool: "linear/get_issue"})
← { connect_url: "https://qlaud.ai/connect/9f8e…", ... }

# end-user clicks the URL, sees a Linear-branded form asking for
# api_key (rendered from the catalog's config_schema), pastes it,
# qlaud encrypts + stores in tool_connections, applies Linear's
# auth template at dispatch time.

end-user: "done"

→ qlaud_get_tool_schemas / qlaud_multi_execute → tool runs
```

The end-user never sees the actual `Authorization` header value
they're constructing — they fill in the friendly `api_key` field;
qlaud's per-catalog template handles vendor-specific quirks (Linear's
missing Bearer prefix, Notion's `Notion-Version` header, Atlassian's
HTTP Basic encoding).

## Current catalog (35 entries)

**Productivity & ticketing:** linear, asana, clickup, monday, airtable,
trello, hubspot, intercom, salesforce, pipedrive, zendesk, atlassian,
notion.

**Dev / infra:** github, gitlab, bitbucket, vercel, netlify, neon,
supabase, cloudflare, sentry.

**Comms / scheduling:** slack, cal, zoom, twilio.

**Analytics / observability:** datadog, pagerduty, mixpanel.

**Payments:** stripe, paypal, square, plaid.

**E-commerce / marketing:** shopify, mailchimp.

Hit `GET /v1/mcp-catalog` for the live list with `auth_mode`,
`config_schema`, and `approx_tool_count` per entry. More vendors land
monthly — file an issue for any vendor publishing an MCP server we
should add.

## Errors

| Status | Meaning                                                                                                                                                         |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 400    | Body malformed: `name` invalid, both `catalog_slug` AND `server_url` set, unknown `catalog_slug`, missing required `config` field for the chosen catalog entry. |
| 401    | Bad / revoked qlk key.                                                                                                                                          |
| 403    | Caller used a per-user (standard-scope) key. `/v1/mcp-servers` requires master scope.                                                                           |
| 409    | An MCP server with the same `name` already exists for this account.                                                                                             |
