---
title: Connectors in packs
description: How a pack declares what it needs connected, the rules install checks, and the connector report a person gets.
sidebar:
  order: 3
---

> Since 0.6.0.

## What it is

A pack's `connectors` array (0 to 20 entries) declares every external thing the routine needs: a claude.ai connector, an MCP server, a built-in tool, or an HTTP host. Install never connects anything. It prints a report of what is required and how to connect it.

## Why it exists

A routine fails quietly when a connector is missing. Declaring each one, with which stage uses it and whether it writes, lets install tell the person exactly what to do, and lets validation refuse a writing connector with no gate.

## How it works

| Field | Required | Notes |
|---|---|---|
| `id` | yes | Slug |
| `label` | yes | Shown in the report |
| `kind` | yes | `connector`, `mcp`, `builtin` or `http` |
| `purpose` | yes | One plain sentence |
| `required` | yes | bool |
| `access` | yes | `read` or `write` |
| `stages` | yes | Stage ids that use it |
| `alternatives` | no | Up to 5 other options, as text |
| `connect` | yes | Plain words on how to connect it. Third-party claims carry "unverified" |

Rules:

- A `write` connector needs `routine.gate.enabled = true`.
- Every stage in `stages` must list the connector back in its own `connectors`.
- A required connector must be used by at least one stage.

### The report

```
Connectors for <title> (<routine>)

Required:
  - <label> [<kind>, <access>]: <purpose>
    used by stages: <stage ids>
    alternatives: <alternatives>
    how to connect: <connect>

Optional:
  none

Nothing was connected for you, and the pack holds no secret. Connect each one yourself.
```

`--json` gives the same report as `{routine, title, required, optional, note}`.

## Worked example

A Hiring Signals pack that reads a job board through an MCP server would declare:

```json
{
  "id": "jobs-board", "label": "Job board MCP", "kind": "mcp",
  "purpose": "Search postings by market and keyword.", "required": true, "access": "read",
  "stages": ["search"], "connect": "Add the board's MCP server as a connector on claude.ai (unverified)."
}
```

with the `search` stage listing `"connectors": ["jobs-board"]`. The `jobs-board` connector is illustrative.

## Common pitfalls

- **A stage that uses a connector but does not list it.** Refused.
- **A write connector on an ungated routine.** Refused.
- **Stating a third-party fact in `connect`.** Mark it unverified.

## Related

- [Connectors and MCP](/infrastructure/connectors-and-mcp)
- [Pack schema](/reference/pack-schema)
