> ## 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.

# Add skill and MCP repositories

> Sync a GitHub repository of skills or MCP servers into your catalog, and control who sees it.

A repository lets you bring a whole set of skills or MCP servers into the catalog at once, and re-sync when the repository changes.

Skills and MCP servers work the same way, with parallel commands.

<Steps>
  <Step title="Add the repository">
    ```bash theme={null}
    # Skills
    jstm skills repo add https://github.com/acme-corp/internal-skills --scope personal

    # MCP servers
    jstm mcp repo add https://github.com/acme-corp/internal-mcp-servers --scope personal
    ```

    Adding auto-imports the contents. Pass `--no-sync` to register without importing, which is useful in a scripted setup where you want to configure scope before the first import.

    Only GitHub URLs are accepted. A GitLab or Bitbucket link is rejected when you create the source, rather than accepted and failing later.
  </Step>

  <Step title="Choose who sees it">
    ```bash theme={null}
    # Everyone in the org
    jstm skills repo add https://github.com/acme-corp/internal-skills --scope all

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

    | Scope      | Visible to                                            |
    | ---------- | ----------------------------------------------------- |
    | `personal` | You                                                   |
    | `selected` | The workspaces you name with repeatable `--workspace` |
    | `all`      | Every workspace in the organization                   |

    To change it later:

    ```bash theme={null}
    jstm skills repo scope 9b74e2a1-… --scope all
    ```
  </Step>

  <Step title="Re-sync when the repository changes">
    ```bash theme={null}
    jstm skills repo list
    jstm skills repo sync 9b74e2a1-33cd-4f80-a5e6-1d20b8f7c4aa

    jstm mcp repo list
    jstm mcp repo sync 3f21b8c0-91ad-4f6e-89b2-77c0a4e1d9f3
    ```

    Syncing is manual. There is no scheduled auto-resync, so a repository's contents change in your catalog only when you ask.

    On success you see how many skills or servers were imported.
  </Step>

  <Step title="Confirm what resolved">
    ```bash theme={null}
    jstm skills list
    jstm registry list --kind skill --workspace acme-corp/finance
    jstm registry resolve skill reconcile-ledger
    ```

    `registry resolve` matters when the same name exists at more than one tier. It names the winner and the tier it came from.
  </Step>
</Steps>

## Private repositories

Private repositories work using your own connected GitHub credential, which needs the `repo` scope.

If you haven't connected one, a sync returns:

```text theme={null}
GitHub credential required.

Connect a GitHub token with 'repo' scope: /settings/connections
```

With `--json` that arrives as a parseable contract on stdout:

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

See [Connect GitHub for private repos](/guides/connect-github-private-repos).

<Note>
  There is no `--token` flag by design. The CLI always uses the credential you connected, so a token never ends up in your shell history.
</Note>

## Removing a repository

```bash theme={null}
jstm skills repo remove 9b74e2a1-33cd-4f80-a5e6-1d20b8f7c4aa
jstm mcp repo remove 3f21b8c0-91ad-4f6e-89b2-77c0a4e1d9f3
```

## See also

* [Skills and MCP servers](/concepts/skills-and-mcp)
* [`jstm skills`](/cli/skills) and [`jstm mcp`](/cli/mcp)
* [`jstm registry`](/cli/registry) — resolution and precedence.
