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

# jstm mcp

> Browse the MCP server catalog, register your own servers, and manage source repositories.

## Browsing the catalog

```bash theme={null}
jstm mcp list
jstm mcp list --category productivity --limit 50
jstm mcp search github
jstm mcp show 3f21b8c0-91ad-4f6e-89b2-77c0a4e1d9f3
jstm mcp stats
```

| Command            | Options                                            |
| ------------------ | -------------------------------------------------- |
| `list`             | `--category`, `-c`; `--limit`, `-l` (20); `--json` |
| `search <query>`   | `--json`                                           |
| `show <server-id>` | `--json`                                           |
| `stats`            | `--json`                                           |

## Registering your own server

### `mcp add-endpoint`

Register an MCP server you host or subscribe to. The server derives a qualified name of the form `endpoint/<workspace_id>/<slug-of-name>`.

```bash theme={null}
jstm mcp add-endpoint ledger-tools \
  --transport streamable-http \
  --url https://tools.acme.internal/mcp \
  --scope workspace
```

For a `stdio` server:

```bash theme={null}
jstm mcp add-endpoint local-indexer \
  --transport stdio \
  --command /usr/local/bin/indexer \
  --args --port --args 9001 \
  --env INDEX_ROOT=/data \
  --scope personal
```

| Option             | Description                                                      |
| ------------------ | ---------------------------------------------------------------- |
| `NAME` or `--name` | Server name. The qualified name is derived from it               |
| `--transport`      | `streamable-http`, `sse`, or `stdio`. Required unless `--update` |
| `--scope`          | `personal`, `workspace`, or `org`. Required unless `--update`    |
| `--url`            | Endpoint URL, for the HTTP transports                            |
| `--command`        | Executable to run, for `stdio`                                   |
| `--args`           | A command argument. Repeatable, `stdio` only                     |
| `--env`            | An environment variable as `KEY=VALUE`. Repeatable, `stdio` only |
| `--connector`      | Auth provider for an authenticated server                        |
| `--auth-scheme`    | How a key is applied: `bearer`, `header`, or `query`             |
| `--auth-name`      | Header or query parameter name, for `header` and `query` schemes |
| `--update`         | Re-validate and re-introspect an existing endpoint in place      |
| `--json`           | Emit as JSON                                                     |

Registering succeeds even if the server can't be reached yet — it registers with an empty tool list, and introspection fills it in once it can authenticate. Registering a duplicate name without `--update` is rejected.

### `mcp connect-key`

Attach a bring-your-own API key to a registered endpoint, then introspect it automatically.

```bash theme={null}
jstm mcp connect-key endpoint/acme-corp-finance/ledger-tools --api-key <key>
jstm mcp connect-key endpoint/acme-corp-finance/ledger-tools \
  --api-key <key> --auth-scheme header --auth-name X-API-Key
```

| Option          | Description                    |
| --------------- | ------------------------------ |
| `--api-key`     | Required. The key or secret    |
| `--auth-scheme` | `bearer`, `header`, or `query` |
| `--auth-name`   | Header or query parameter name |
| `--json`        | Emit as JSON                   |

This is an idempotent upsert — running it again replaces the key.

### `mcp introspect`

Re-list a registered server's tools.

```bash theme={null}
jstm mcp introspect endpoint/acme-corp-finance/ledger-tools
```

Run this after the server's tool set changes, or after fixing a credential.

### `mcp disconnect-key`

Remove the stored key from an endpoint server.

```bash theme={null}
jstm mcp disconnect-key endpoint/acme-corp-finance/ledger-tools
```

Idempotent — reports `removed=false` when there was nothing to remove.

### `mcp remove-endpoint`

Delete an endpoint server.

```bash theme={null}
jstm mcp remove-endpoint endpoint/acme-corp-finance/ledger-tools
```

All four of these commands accept the qualified name or the server's UUID.

## Repositories

Sync a GitHub repository of MCP servers into the catalog.

### `mcp repo add`

```bash theme={null}
jstm mcp repo add https://github.com/acme-corp/internal-mcp-servers --scope personal

jstm mcp repo add https://github.com/acme-corp/internal-mcp-servers \
  --scope selected --workspace acme-corp/finance --workspace acme-corp/revops
```

| Option         | Description                                           |
| -------------- | ----------------------------------------------------- |
| `--scope`      | Required. `all`, `selected`, or `personal`            |
| `--workspace`  | Workspace ids for `--scope selected`. Repeatable      |
| `--name`, `-n` | Display name. Defaults to the URL's last path segment |
| `--no-sync`    | Register without importing. For scripted flows        |
| `--json`       | Emit as JSON                                          |

Adding auto-imports the repository's servers unless you pass `--no-sync`.

Only GitHub URLs are accepted. Private repositories work using your own connected GitHub credential — see [Importing private GitHub repositories](/features/private-repos).

### The rest of the repo commands

```bash theme={null}
jstm mcp repo list
jstm mcp repo list --scope personal
jstm mcp repo sync 3f21b8c0-91ad-4f6e-89b2-77c0a4e1d9f3
jstm mcp repo scope 3f21b8c0-91ad-4f6e-89b2-77c0a4e1d9f3 --scope all
jstm mcp repo remove 3f21b8c0-91ad-4f6e-89b2-77c0a4e1d9f3
```

`repo scope` takes the same `--scope` and repeatable `--workspace` options as `repo add`.

## When a sync needs a credential

A private repository sync with no usable GitHub credential returns a typed error:

```json theme={null}
{
  "error": "credential_required",
  "provider": "github",
  "required_scope": "repo",
  "connect_url": "/settings/connections"
}
```

With `--json` this prints as pure JSON on stdout so a script can branch on it. See [Credential problems](/troubleshooting/credentials).

## See also

* [Skills and MCP servers](/concepts/skills-and-mcp) — the model.
* [Add your own MCP server](/guides/add-your-own-mcp-server) — walkthrough.
* [`jstm registry`](/cli/registry) — which entry wins when names collide.
