Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the GitHub MCP server

Vendor MCP
Open markdown

The GitHub MCP connector routes your AI agent's tool calls to GitHub's own MCP server through Scalekit. Each user signs in to GitHub once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 44 tools.

Tools
44
What they doRead · write · destructive
27 · 16 · 127 read16 write1 destructive
Users sign in with
OAuth app
Your own GitHub app

What you can do

  • Manage issues: create, update, comment on, and search issues, including sub-issues
  • Work with pull requests: open, update, review, merge, and search pull requests and their comments
  • Edit repository files: read, create, update, and delete files, and push multiple files in one commit
  • Manage repositories and branches: create or fork repositories, create branches, and list commits, tags, and releases
  • Search code and people: search code, commits, repositories, and users across GitHub
  • Scan for secrets: check files or content for exposed API keys, passwords, and tokens

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the GitHub MCP connection

    In AgentKit > Connections, create a GitHub MCP connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    GitHub connections use your own OAuth app. Register one with GitHub and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the GitHub MCP connection.

    Console steps with screenshots

    Register your GitHub credentials with Scalekit so it handles the token lifecycle. You do this once per environment.

    1. Set up auth redirects

      • In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find GitHub MCP and click Create.

      • Click Use your own credentials and copy the redirect URI. It looks like https://<SCALEKIT_ENVIRONMENT_URL>/sso/v1/oauth/<CONNECTION_ID>/callback.

        Copy redirect URI from Scalekit dashboard

      • Go to GitHub Developer Settings and open your OAuth app.

      • Under General, paste the copied URI into the Authorization callback URL field and click Save application.

        Add callback URL in GitHub OAuth app settings

    2. Get client credentials

      In GitHub Developer Settings, open your OAuth app:

      • Client ID — listed on the app’s main settings page
      • Client Secret — click Generate a new client secret if you don’t have one
    3. Add credentials in Scalekit

      • In Scalekit dashboard, go to AgentKit > Connections and open the connection you created.

      • Enter your credentials:

        • Client ID (from your GitHub OAuth app)
        • Client Secret (from your GitHub OAuth app)

        Add credentials for GitHub MCP in Scalekit dashboard

      • Click Save.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'githubmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize GitHub MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'githubmcp_get_me',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • githubmcp_get_commitGet details for a specific commit from a GitHub repository.Read-only

    Get Commit

    Get details for a specific commit from a GitHub repository.

    Inputs

    ownerstringrequired
    The GitHub repository owner (username or organization name).
    repostringrequired
    The GitHub repository name.
    shastringrequired
    The blob SHA of the file being replaced. Required when updating an existing file.
    detailstring
    Level of detail to include for changed files. "none" omits stats and files entirely. "stats" (default) includes per-file metadata: filename, status, and lines-of-code counts (additions, deletions, changes), with no patch content. "full_patch" additionally includes the unified diff content for each file and can be very large.one of nonestatsfull_patchdefault stats
    pagenumber
    The page number for pagination.
    perPagenumber
    The number of results per page (max 100).
  • githubmcp_get_file_contentsGet the contents of a file or directory from a GitHub repository.Read-only

    Get File Contents

    Get the contents of a file or directory from a GitHub repository.

    Inputs

    ownerstringrequired
    The GitHub repository owner (username or organization name).
    repostringrequired
    The GitHub repository name.
    fieldsarray
    Subset of fields to return for each entry when the path is a directory. If omitted, all fields are returned. Ignored when the path is a single file. Use this to reduce response size when listing directories and you only need specific fields, e.g. just 'name' and 'type'.
    pathstring
    The file path within the repository.default /
    refstring
    The git ref (branch, tag, or commit SHA) to fetch the file from.
    shastring
    The blob SHA of the file being replaced. Required when updating an existing file.
  • githubmcp_get_labelGet a specific label from a GitHub repository.Read-only

    Get Label

    Get a specific label from a GitHub repository.

    Inputs

    namestringrequired
    The repository name.
    ownerstringrequired
    The GitHub repository owner (username or organization name).
    repostringrequired
    The GitHub repository name.
  • githubmcp_get_latest_releaseGet the latest release in a GitHub repository.Read-only

    Get Latest Release

    Get the latest release in a GitHub repository.

    Inputs

    ownerstringrequired
    The GitHub repository owner (username or organization name).
    repostringrequired
    The GitHub repository name.
  • githubmcp_get_meGet details of the authenticated GitHub user.Read-only

    Get Me

    Get details of the authenticated GitHub user.

    Inputs

    This tool takes no inputs.

  • githubmcp_get_release_by_tagGet a specific release by its tag name in a GitHub repository.Read-only

    Get Release By Tag

    Get a specific release by its tag name in a GitHub repository.

    Inputs

    ownerstringrequired
    The GitHub repository owner (username or organization name).
    repostringrequired
    The GitHub repository name.
    tagstringrequired
    The tag name of the release.
  • githubmcp_get_tagGet details about a specific git tag in a GitHub repository.Read-only

    Get Tag

    Get details about a specific git tag in a GitHub repository.

    Inputs

    ownerstringrequired
    The GitHub repository owner (username or organization name).
    repostringrequired
    The GitHub repository name.
    tagstringrequired
    The tag name of the release.
  • githubmcp_get_team_membersGet the member usernames of a specific team in a GitHub organization.Read-only

    Get Team Members

    Get the member usernames of a specific team in a GitHub organization.

    Inputs

    orgstringrequired
    The GitHub organization slug.
    team_slugstringrequired
    The team slug within the organization.