> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the GitHub MCP server

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.

**Authentication:** OAuth 2.1
**Categories:** Developer Tools, Collaboration
**Tools:** 44: 27 read, 16 write, 1 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own GitHub app
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=GITHUBMCP)

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

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".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](/agentkit/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](https://app.scalekit.com), 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`.

        > Image: Copy redirect URI from Scalekit dashboard

      - Go to [GitHub Developer Settings](https://github.com/settings/developers) and open your OAuth app.

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

        > Image: Add callback URL in GitHub OAuth app settings

   2. ### Get client credentials

      In [GitHub Developer Settings](https://github.com/settings/developers), 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](https://app.scalekit.com), 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)

        > Image: Add credentials for GitHub MCP in Scalekit dashboard

      - Click **Save**.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   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)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "githubmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize GitHub MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="githubmcp_get_me",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'githubmcp_get_commit',
  toolInput: {
    owner: '<owner>',
    repo: '<repo>',
    sha: '<sha>',
  },
  connector: 'githubmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="githubmcp_get_commit",
    tool_input={
        "owner": "<owner>",
        "repo": "<repo>",
        "sha": "<sha>",
    },
    connection_name="githubmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `githubmcp_get_commit`

Get Commit · Read-only

Get details for a specific commit from a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `sha` (`string`, required): The blob SHA of the file being replaced. Required when updating an existing file.
- `detail` (`string`, optional): 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: `none`, `stats`, `full_patch`. Default: `stats`.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).

Example input: `{"owner":"<owner>","repo":"<repo>","sha":"<sha>"}`

### `githubmcp_get_file_contents`

Get File Contents · Read-only

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

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `fields` (`array`, optional): 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'.
- `path` (`string`, optional): The file path within the repository. Default: `/`.
- `ref` (`string`, optional): The git ref (branch, tag, or commit SHA) to fetch the file from.
- `sha` (`string`, optional): The blob SHA of the file being replaced. Required when updating an existing file.

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_get_label`

Get Label · Read-only

Get a specific label from a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): The repository name.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.

Example input: `{"name":"<name>","owner":"<owner>","repo":"<repo>"}`

### `githubmcp_get_latest_release`

Get Latest Release · Read-only

Get the latest release in a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_get_me`

Get Me · Read-only

Get details of the authenticated GitHub user.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs: none.

Example input: `{}`

### `githubmcp_get_release_by_tag`

Get Release By Tag · Read-only

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

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `tag` (`string`, required): The tag name of the release.

Example input: `{"owner":"<owner>","repo":"<repo>","tag":"<tag>"}`

### `githubmcp_get_tag`

Get Tag · Read-only

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

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `tag` (`string`, required): The tag name of the release.

Example input: `{"owner":"<owner>","repo":"<repo>","tag":"<tag>"}`

### `githubmcp_get_team_members`

Get Team Members · Read-only

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

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `org` (`string`, required): The GitHub organization slug.
- `team_slug` (`string`, required): The team slug within the organization.

Example input: `{"org":"<org>","team_slug":"<team_slug>"}`

### `githubmcp_get_teams`

Get Teams · Read-only

Get details of the teams the authenticated user is a member of.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `user` (`string`, optional): The GitHub username to filter teams by.

Example input: `{}`

### `githubmcp_issue_read`

Issue Read · Read-only

Get information about a specific issue or its comments in a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `issue_number` (`number`, required): The issue number.
- `method` (`string`, required): The operation to perform. Check the tool description for available methods. One of: `get`, `get_comments`, `get_sub_issues`, `get_parent`, `get_labels`.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).

Example input: `{"issue_number":1,"method":"get","owner":"<owner>","repo":"<repo>"}`

### `githubmcp_list_branches`

List Branches · Read-only

List branches in a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_list_commits`

List Commits · Read-only

List commits on a branch in a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `author` (`string`, optional): Filter commits by author username or email.
- `fields` (`array`, optional): Subset of fields to return for each commit. If omitted, all fields are returned. Use this to reduce response size when you only need specific fields, e.g. just 'sha' and 'html_url'.
- `page` (`number`, optional): The page number for pagination.
- `path` (`string`, optional): The file path within the repository.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `sha` (`string`, optional): The blob SHA of the file being replaced. Required when updating an existing file.
- `since` (`string`, optional): Filter results created after this ISO 8601 timestamp.
- `until` (`string`, optional): Filter results created before this ISO 8601 timestamp.

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_list_issue_fields`

List Issue Fields · Read-only

List custom issue fields available for a GitHub repository or organization.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The account owner of the repository or organization. The name is not case sensitive.
- `repo` (`string`, optional): The name of the repository. When provided, returns fields for this specific repository (inherited from its organization). When omitted, returns org-level fields directly.

Example input: `{"owner":"<owner>"}`

### `githubmcp_list_issue_types`

List Issue Types · Read-only

List supported issue types for a GitHub organization.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, optional): The name of the repository. When provided, returns issue types for this specific repository. When omitted, returns org-level issue types directly.

Example input: `{"owner":"<owner>"}`

### `githubmcp_list_issues`

List Issues · Read-only

List issues in a GitHub repository with optional filters for state, labels, and date range.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `after` (`string`, optional): Pagination cursor from the previous response to fetch the next page.
- `direction` (`string`, optional): The sort direction: asc or desc. One of: `ASC`, `DESC`.
- `field_filters` (`array`, optional): Filter by custom issue field values. Each entry takes a field_name and a value; the server looks up the field and coerces the value to its type (single-select option name, text, number, or YYYY-MM-DD date).
- `fields` (`array`, optional): Subset of fields to return for each issue. If omitted, all fields are returned. Use this to reduce response size when you only need specific fields; omitting 'body' and 'field_values' in particular drops the largest per-result data.
- `labels` (`array`, optional): List of label names to apply to the issue.
- `orderBy` (`string`, optional): The field to order results by. One of: `CREATED_AT`, `UPDATED_AT`, `COMMENTS`.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `since` (`string`, optional): Filter results created after this ISO 8601 timestamp.
- `state` (`string`, optional): Filter by state: open, closed, or all. One of: `OPEN`, `CLOSED`.

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_list_pull_requests`

List Pull Requests · Read-only

List pull requests in a GitHub repository with optional filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `base` (`string`, optional): The name of the branch you want the changes merged into.
- `direction` (`string`, optional): The sort direction: asc or desc. One of: `asc`, `desc`.
- `fields` (`array`, optional): Subset of fields to return for each pull request. If omitted, all fields are returned. Use this to reduce response size when you only need specific fields; omitting 'body' in particular drops the largest per-result data.
- `head` (`string`, optional): The name of the branch where changes are implemented.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `sort` (`string`, optional): The field to sort results by. One of: `created`, `updated`, `popularity`, `long-running`.
- `state` (`string`, optional): Filter by state: open, closed, or all. One of: `open`, `closed`, `all`.

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_list_releases`

List Releases · Read-only

List releases in a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `fields` (`array`, optional): Subset of fields to return for each release. If omitted, all fields are returned. Use this to reduce response size when you only need specific fields; omitting 'body' in particular drops the largest per-release data.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_list_repository_collaborators`

List Repository Collaborators · Read-only

List collaborators of a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `affiliation` (`string`, optional): Filter collaborators by affiliation: direct, outside, or all. One of: `outside`, `direct`, `all`.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_list_tags`

List Tags · Read-only

List git tags in a GitHub repository.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_pull_request_read`

Pull Request Read · Read-only

Get information about a specific pull request or its reviews, comments, or files.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `method` (`string`, required): Action to specify what pull request data needs to be retrieved from GitHub. 
Possible options: 
 1. get - Get details of a specific pull request.
 2. get_diff - Get the diff of a pull request.
 3. get_status - Get combined commit status of a head commit in a pull request.
 4. get_files - Get the list of files changed in a pull request. Use with pagination parameters to control the number of results returned.
 5. get_commits - Get the list of commits on a pull request. Use with pagination parameters to control the number of results returned.
 6. get_review_comments - Get review threads on a pull request. Each thread contains logically grouped review comments made on the same code location during pull request reviews. Returns threads with metadata (isResolved, isOutdated, isCollapsed) and their associated comments. Use cursor-based pagination (perPage, after) to control results.
 7. get_reviews - Get the reviews on a pull request. When asked for review comments, use get_review_comments method. Use with pagination parameters to control the number of results returned.
 8. get_comments - Get comments on a pull request. Use this if user doesn't specifically want review comments. Use with pagination parameters to control the number of results returned.
 9. get_check_runs - Get check runs for the head commit of a pull request. Check runs are the individual CI/CD jobs and checks that run on the PR. One of: `get`, `get_diff`, `get_status`, `get_files`, `get_commits`, `get_review_comments`, `get_reviews`, `get_comments`, `get_check_runs`.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `pullNumber` (`number`, required): The pull request number.
- `repo` (`string`, required): The GitHub repository name.
- `after` (`string`, optional): Cursor for pagination, used only by the get_review_comments method. Pass the endCursor from the previous page's PageInfo to fetch the next page.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).

Example input: `{"method":"get","owner":"<owner>","pullNumber":1,"repo":"<repo>"}`

### `githubmcp_run_secret_scanning`

Run Secret Scanning · Read-only

Scan files or content for exposed secrets such as API keys, passwords, and tokens.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `files` (`string`, required): List of files to push, each with a path and content.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.

Example input: `{"files":"<files>","owner":"<owner>","repo":"<repo>"}`

### `githubmcp_search_code`

Search Code · Read-only

Search for code across GitHub repositories using GitHub code search syntax.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `query` (`string`, required): The search query string.
- `fields` (`array`, optional): Subset of fields to return for each code search result. If omitted, all fields are returned. Use this to reduce response size when you only need specific fields; omitting 'repository' and 'text_matches' in particular drops the largest per-result data.
- `order` (`string`, optional): The sort order: asc or desc. One of: `asc`, `desc`.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `sort` (`string`, optional): The field to sort results by.

Example input: `{"query":"<query>"}`

### `githubmcp_search_commits`

Search Commits · Read-only

Search for GitHub commits by commit message and other metadata.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `query` (`string`, required): Commit search query (GitHub commit search REST). Searches commit messages on the default branch only. Scope the search with `repo:owner/repo`, `org:`, or `user:` (queries without a scope qualifier match across all of GitHub and are usually not what you want). Other qualifiers: `author:`, `committer:`, `author-name:`, `committer-name:`, `author-email:`, `committer-email:`, `author-date:`, `committer-date:` (supports `>`, `<`, `>=`, `<=`, and `YYYY-MM-DD..YYYY-MM-DD` ranges), `merge:true|false`, `hash:`, `tree:`, `parent:`, `is:public`.
- `order` (`string`, optional): The sort order: asc or desc. One of: `asc`, `desc`.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `sort` (`string`, optional): Sort by author or committer date (defaults to best match). One of: `author-date`, `committer-date`.

Example input: `{"query":"<query>"}`

### `githubmcp_search_issues`

Search Issues · Read-only

Search for issues across GitHub repositories using GitHub issues search syntax.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `query` (`string`, required): The search query string.
- `fields` (`array`, optional): Subset of fields to return for each issue result. If omitted, all fields are returned. Use this to reduce response size when you only need specific fields; omitting 'body', 'reactions', and 'labels' in particular drops the largest per-result data.
- `order` (`string`, optional): The sort order: asc or desc. One of: `asc`, `desc`.
- `owner` (`string`, optional): The GitHub repository owner (username or organization name).
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `repo` (`string`, optional): The GitHub repository name.
- `sort` (`string`, optional): The field to sort results by. One of: `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, `interactions`, `created`, `updated`.

Example input: `{"query":"<query>"}`

### `githubmcp_search_pull_requests`

Search Pull Requests · Read-only

Search for pull requests across GitHub repositories using GitHub search syntax.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `query` (`string`, required): The search query string.
- `fields` (`array`, optional): Subset of fields to return for each pull request result. If omitted, all fields are returned. Use this to reduce response size when you only need specific fields; omitting 'body', 'reactions', and 'labels' in particular drops the largest per-result data.
- `order` (`string`, optional): The sort order: asc or desc. One of: `asc`, `desc`.
- `owner` (`string`, optional): The GitHub repository owner (username or organization name).
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `repo` (`string`, optional): The GitHub repository name.
- `sort` (`string`, optional): The field to sort results by. One of: `comments`, `reactions`, `reactions-+1`, `reactions--1`, `reactions-smile`, `reactions-thinking_face`, `reactions-heart`, `reactions-tada`, `interactions`, `created`, `updated`.

Example input: `{"query":"<query>"}`

### `githubmcp_search_repositories`

Search Repositories · Read-only

Search for GitHub repositories by name, description, topics, or other metadata.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `query` (`string`, required): The search query string.
- `minimal_output` (`boolean`, optional): Whether to return minimal output to reduce response size. Default: `true`.
- `order` (`string`, optional): The sort order: asc or desc. One of: `asc`, `desc`.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `sort` (`string`, optional): The field to sort results by. One of: `stars`, `forks`, `help-wanted-issues`, `updated`.

Example input: `{"query":"<query>"}`

### `githubmcp_search_users`

Search Users · Read-only

Search for GitHub users by username, name, or other profile information.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `query` (`string`, required): The search query string.
- `order` (`string`, optional): The sort order: asc or desc. One of: `asc`, `desc`.
- `page` (`number`, optional): The page number for pagination.
- `perPage` (`number`, optional): The number of results per page (max 100).
- `sort` (`string`, optional): The field to sort results by. One of: `followers`, `repositories`, `joined`.

Example input: `{"query":"<query>"}`

### `githubmcp_add_comment_to_pending_review`

Add Comment To Pending Review · Write

Add a review comment to the requester's latest pending pull request review.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): The text content of the comment, review, or description.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `path` (`string`, required): The file path within the repository.
- `pullNumber` (`number`, required): The pull request number.
- `repo` (`string`, required): The GitHub repository name.
- `subjectType` (`string`, required): The subject type for the review comment: line or file. One of: `FILE`, `LINE`.
- `line` (`number`, optional): The line number in the file the comment applies to.
- `side` (`string`, optional): The side of the diff the comment applies to: LEFT or RIGHT. One of: `LEFT`, `RIGHT`.
- `startLine` (`number`, optional): The first line of a multi-line comment range.
- `startSide` (`string`, optional): The side of the diff for the start of a multi-line comment: LEFT or RIGHT. One of: `LEFT`, `RIGHT`.

Example input: `{"body":"<body>","owner":"<owner>","path":"<path>","pullNumber":1,"repo":"<repo>","subjectType":"FILE"}`

### `githubmcp_add_issue_comment`

Add Issue Comment · Write

Add a comment to a specific issue in a GitHub repository.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `issue_number` (`number`, required): The issue number.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `body` (`string`, optional): Comment content. Required unless reaction is provided.
- `comment_id` (`number`, optional): The numeric ID of the issue or pull request comment to react to. Use this for reactions to comments; omit it to react to the issue or pull request itself. Cannot be combined with body.
- `reaction` (`string`, optional): Emoji reaction to add. Required unless body is provided. One of: `+1`, `-1`, `laugh`, `confused`, `heart`, `hooray`, `rocket`, `eyes`.

Example input: `{"issue_number":1,"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_add_reply_to_pull_request_comment`

Add Reply To Pull Request Comment · Write

Add a reply to an existing pull request review comment.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `commentId` (`number`, required): The numeric ID of the comment to reply to.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `body` (`string`, optional): The text of the reply. Required unless reaction is provided.
- `pullNumber` (`number`, optional): Pull request number. Required when body is provided.
- `reaction` (`string`, optional): Emoji reaction to add. Required unless body is provided. One of: `+1`, `-1`, `laugh`, `confused`, `heart`, `hooray`, `rocket`, `eyes`.

Example input: `{"commentId":1,"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_create_branch`

Create Branch · Write

Create a new branch in a GitHub repository.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `branch` (`string`, required): The branch name.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `from_branch` (`string`, optional): The source branch to create the new branch from. Defaults to the default branch if omitted.

Example input: `{"branch":"<branch>","owner":"<owner>","repo":"<repo>"}`

### `githubmcp_create_or_update_file`

Create Or Update File · Write

Create or update a single file in a GitHub repository. Provide the file SHA when updating an existing file.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `branch` (`string`, required): The branch name.
- `content` (`string`, required): The base64-encoded file content.
- `message` (`string`, required): The commit message.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `path` (`string`, required): The file path within the repository.
- `repo` (`string`, required): The GitHub repository name.
- `sha` (`string`, optional): The blob SHA of the file being replaced. Required when updating an existing file.

Example input: `{"branch":"<branch>","content":"<content>","message":"<message>","owner":"<owner>","path":"<path>","repo":"<repo>"}`

### `githubmcp_create_pull_request`

Create Pull Request · Write

Create a new pull request in a GitHub repository.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `base` (`string`, required): The name of the branch you want the changes merged into.
- `head` (`string`, required): The name of the branch where changes are implemented.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `title` (`string`, required): The title of the issue or pull request.
- `body` (`string`, optional): The text content of the comment, review, or description.
- `draft` (`boolean`, optional): Whether to create the pull request as a draft.
- `maintainer_can_modify` (`boolean`, optional): Whether maintainers can modify the pull request.
- `reviewers` (`array`, optional): GitHub usernames or ORG/team-slug team reviewers to request reviews from

Example input: `{"base":"<base>","head":"<head>","owner":"<owner>","repo":"<repo>","title":"<title>"}`

### `githubmcp_create_repository`

Create Repository · Write

Create a new GitHub repository in your account or a specified organization.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): The repository name.
- `autoInit` (`boolean`, optional): Whether to initialize the repository with a README.
- `description` (`string`, optional): Repository description
- `organization` (`string`, optional): The GitHub organization to create the repository in. Defaults to your personal account.
- `private` (`boolean`, optional): Whether to make the repository private.

Example input: `{"name":"<name>"}`

### `githubmcp_fork_repository`

Fork Repository · Write

Fork a GitHub repository to your account or a specified organization.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `organization` (`string`, optional): The GitHub organization to create the repository in. Defaults to your personal account.

Example input: `{"owner":"<owner>","repo":"<repo>"}`

### `githubmcp_issue_write`

Issue Write · Write

Create a new issue or update an existing issue in a GitHub repository.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `method` (`string`, required): The operation to perform. Check the tool description for available methods. One of: `create`, `update`.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `assignees` (`array`, optional): List of GitHub usernames to assign to the issue.
- `body` (`string`, optional): The text content of the comment, review, or description.
- `duplicate_of` (`number`, optional): The issue number this issue is a duplicate of.
- `issue_fields` (`array`, optional): Issue field values to set or clear. Each item requires 'field_name' and exactly one of 'value', 'field_option_name', or 'delete: true'.
- `issue_number` (`number`, optional): The issue number.
- `labels` (`array`, optional): List of label names to apply to the issue.
- `milestone` (`number`, optional): The milestone number to associate with the issue.
- `state` (`string`, optional): Filter by state: open, closed, or all. One of: `open`, `closed`.
- `state_reason` (`string`, optional): The reason for closing: completed, not_planned, or reopened. One of: `completed`, `not_planned`, `duplicate`.
- `title` (`string`, optional): The title of the issue or pull request.
- `type` (`string`, optional): The issue type name to assign.

Example input: `{"method":"create","owner":"<owner>","repo":"<repo>"}`

### `githubmcp_merge_pull_request`

Merge Pull Request · Write

Merge a pull request in a GitHub repository.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `pullNumber` (`number`, required): The pull request number.
- `repo` (`string`, required): The GitHub repository name.
- `commit_message` (`string`, optional): An optional longer message to accompany the commit title.
- `commit_title` (`string`, optional): The title for the merge commit.
- `merge_method` (`string`, optional): The merge method: merge, squash, or rebase. One of: `merge`, `squash`, `rebase`.

Example input: `{"owner":"<owner>","pullNumber":1,"repo":"<repo>"}`

### `githubmcp_pull_request_review_write`

Pull Request Review Write · Write

Create, submit, or delete a pull request review. Supported methods: create, submit, delete, resolve_thread, unresolve_thread.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `method` (`string`, required): The operation to perform. Check the tool description for available methods. One of: `create`, `submit_pending`, `delete_pending`, `resolve_thread`, `unresolve_thread`.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `pullNumber` (`number`, required): The pull request number.
- `repo` (`string`, required): The GitHub repository name.
- `body` (`string`, optional): The text content of the comment, review, or description.
- `commitID` (`string`, optional): The SHA of the commit to associate with the review.
- `event` (`string`, optional): The review action: APPROVE, REQUEST_CHANGES, or COMMENT. One of: `APPROVE`, `REQUEST_CHANGES`, `COMMENT`.
- `threadId` (`string`, optional): The ID of the review thread to resolve or unresolve.

Example input: `{"method":"create","owner":"<owner>","pullNumber":1,"repo":"<repo>"}`

### `githubmcp_push_files`

Push Files · Write

Push multiple files to a GitHub repository in a single commit.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `branch` (`string`, required): The branch name.
- `files` (`array`, required): List of files to push, each with a path and content.
- `message` (`string`, required): The commit message.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.

Example input: `{"branch":"<branch>","files":[],"message":"<message>","owner":"<owner>","repo":"<repo>"}`

### `githubmcp_request_copilot_review`

Request Copilot Review · Write

Request a GitHub Copilot automated code review for a pull request.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `pullNumber` (`number`, required): The pull request number.
- `repo` (`string`, required): The GitHub repository name.

Example input: `{"owner":"<owner>","pullNumber":1,"repo":"<repo>"}`

### `githubmcp_sub_issue_write`

Sub Issue Write · Write

Add, remove, or reorder a sub-issue under a parent issue in a GitHub repository.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `issue_number` (`number`, required): The issue number.
- `method` (`string`, required): The operation to perform. Check the tool description for available methods.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `repo` (`string`, required): The GitHub repository name.
- `sub_issue_id` (`number`, required): The issue number of the sub-issue.
- `after_id` (`number`, optional): Insert the sub-issue after this sub-issue ID.
- `before_id` (`number`, optional): Insert the sub-issue before this sub-issue ID.
- `replace_parent` (`boolean`, optional): Whether to replace the existing parent issue.

Example input: `{"issue_number":1,"method":"<method>","owner":"<owner>","repo":"<repo>","sub_issue_id":1}`

### `githubmcp_update_pull_request`

Update Pull Request · Write

Update the title, body, state, or other fields of an existing pull request.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `pullNumber` (`number`, required): The pull request number.
- `repo` (`string`, required): The GitHub repository name.
- `base` (`string`, optional): The name of the branch you want the changes merged into.
- `body` (`string`, optional): The text content of the comment, review, or description.
- `draft` (`boolean`, optional): Whether to create the pull request as a draft.
- `maintainer_can_modify` (`boolean`, optional): Whether maintainers can modify the pull request.
- `reviewers` (`array`, optional): List of GitHub usernames to request reviews from.
- `state` (`string`, optional): Filter by state: open, closed, or all. One of: `open`, `closed`.
- `title` (`string`, optional): The title of the issue or pull request.

Example input: `{"owner":"<owner>","pullNumber":1,"repo":"<repo>"}`

### `githubmcp_update_pull_request_branch`

Update Pull Request Branch · Write

Update a pull request branch with the latest changes from the base branch.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `pullNumber` (`number`, required): The pull request number.
- `repo` (`string`, required): The GitHub repository name.
- `expectedHeadSha` (`string`, optional): The expected SHA of the pull request HEAD ref for optimistic locking.

Example input: `{"owner":"<owner>","pullNumber":1,"repo":"<repo>"}`

### `githubmcp_delete_file`

Delete File · Destructive

Delete a file from a GitHub repository.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `branch` (`string`, required): The branch name.
- `message` (`string`, required): The commit message.
- `owner` (`string`, required): The GitHub repository owner (username or organization name).
- `path` (`string`, required): The file path within the repository.
- `repo` (`string`, required): The GitHub repository name.

Example input: `{"branch":"<branch>","message":"<message>","owner":"<owner>","path":"<path>","repo":"<repo>"}`

## Related

Other ways to connect GitHub:

- [OAuth](/agentkit/connectors/github/): Scalekit connector, OAuth, 217 tools
- [Personal access token](/agentkit/connectors/githubpat/): Scalekit connector, Access token, 217 tools

Other Developer Tools connectors ([all 94](/agentkit/connectors/?category=developer-tools)):

- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 tools
- [Linear](/agentkit/connectors/linear/): Scalekit connector, OAuth, 62 tools
- [Jira](/agentkit/connectors/jira/): Scalekit connector, OAuth, 374 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
