Skip to content

Add presets

The CLI currently ships GitHub as its only provider preset. The same preset is available in the interactive setup wizard. It has two endpoint options:

Preset CLI option Endpoint Tools offered
GitHub Default https://api.githubcopilot.com/mcp/ GitHub's default toolset
GitHub, read-only --read-only https://api.githubcopilot.com/mcp/readonly Read-only tools from that toolset

The packaged preset supplies OAuth endpoints, scopes and both device-code and browser authorisation. GitHub documents the endpoint options in its remote MCP guide. Other providers can be configured with the built-in tentacles.

Add the GitHub preset

1. Register an OAuth app

Follow GitHub's OAuth app setup. Enable Device Flow, note the client id, and create a client secret. Register the browser callback as <your-octomate-origin>/oauth/github/callback. If you choose a different tentacle id below, replace github in that path too.

Use the same origin as oauth.callback_base_uri. Your browser must be able to reach it; keep Octomate behind your private connection. The OAuth app belongs to the deployment; each user authorises their own GitHub account later.

2. Write it to the config home

Run on the server host with the CLI installed:

export OCTOMATE_HOME="/absolute/path/to/your/config"
octomate mcp preset github --client-id '<your-oauth-app-client-id>'

This adds a github entry to $OCTOMATE_HOME/tentacles.yaml. If you omit --client-id, the CLI prompts for it. Existing settings are retained, but the file is rewritten as YAML, so comments and formatting are not preserved. An existing tentacle with the same id is refused rather than replaced.

To create a separately named read-only offering instead:

octomate mcp preset github --client-id '<your-oauth-app-client-id>' \
  --name github_readonly --read-only

Its secret variable becomes OCTOMATE__TENTACLES__GITHUB_READONLY__CLIENT_SECRET and its callback path is /oauth/github_readonly/callback. Keep the chosen id stable after users install it.

To review the generated configuration before merging it into your config home, add --output /path/to/review/tentacles.yaml. Octomate only loads it after you merge the entry into the active tentacles.yaml. Presets expand into ordinary tentacle settings; there is no preset: setting to add to YAML.

Read-only tools, unchanged OAuth scopes

--read-only selects GitHub's read-only MCP endpoint. It does not narrow the OAuth scopes requested by the preset, which still include write access. Review the app's consent screen before authorising it.

3. Supply the secret and OAuth settings

Set client_secret in the generated github YAML block, or supply OCTOMATE__TENTACLES__GITHUB__CLIENT_SECRET in the server environment. .env is optional; if using it, remove any matching YAML placeholder.

Configure oauth.callback_base_uri and oauth.encryption_key as described in Server settings. Both are needed for the preset's browser flow; the encryption key also protects device-flow credentials. Keep an existing encryption key unchanged. The settings guide also covers key format and preservation when upgrading older installations.

Equivalent YAML for the standard GitHub preset

You can add this entry under your existing tentacles: key instead of using the CLI. Replace the client id and provide the client secret through the environment or an additional client_secret field.

tentacles:
  github:
    type: oauth
    url: https://api.githubcopilot.com/mcp/
    client_id: your-oauth-app-client-id
    scopes:
      - repo
      - read:org
      - read:user
      - user:email
      - write:packages
      - project
      - gist
      - notifications
      - workflow
    scope_separator: ","
    invalid_credentials_errors: [invalid_grant, invalid_client, bad_refresh_token, incorrect_client_credentials]
    flows:
      - type: device
        device_authorization_endpoint: https://github.com/login/device/code
        token_endpoint: https://github.com/login/oauth/access_token
      - type: authorization_code
        authorization_endpoint: https://github.com/login/oauth/authorize
        token_endpoint: https://github.com/login/oauth/access_token
        token_endpoint_auth_method: client_secret_post

4. Enable the offering

The generated entry is enabled by default. If you previously set enabled: false, change it to true. Check the configuration and restart Octomate. It is now available for users to install; generating the configuration does not connect anyone's GitHub account.

Connect it to your account

Choose either route below. Use the configured offering so the installation picks up its app and endpoint settings. A personal namespace such as github_work identifies your installation; it does not change the server's tentacle id or registered callback URL.

Follow Install a configured offering, selecting github or the custom id chosen by the operator. Choose Device code or Browser when connecting your account.

Use a channel that can deliver private authorisation messages, with your profile linked to your Octomate account. Choose Inkling, Claude Code or Codex with Octomate tools available.

Ask:

Show the available MCP offerings. Install the GitHub offering for my account as github_work, then help me connect it using device authorisation.

The agent installs your connection and sends the authorisation link and code privately. Open the link, enter the code and approve access on GitHub. Then return to the conversation:

I've completed GitHub authorisation. Check that github_work is connected.

You can request browser authorisation instead of device authorisation. You complete the provider's sign-in yourself; do not paste credentials into chat. If the conversation cannot receive private authorisation messages, use the Trunkline MCP panel. A native MCP session alone has no channel for delivering that link.

Verify from either route with a small read-only request:

Use my github_work connection to list the open issues in the repository I specify.

Your installation appears as personal/github_work in tool results. Other users repeat the connection process for their own accounts. If an offering is missing, ask the operator to check its id, enabled state and server restart. If it is installed but not ready, finish or restart its authorisation before retrying.