> For the complete documentation index, see [llms.txt](https://docs.kinesis.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kinesis.network/mcp/tools/github.md).

# GitHub

Browse connected GitHub accounts, repositories, branches, commits and Dockerfiles.

Browse connected GitHub accounts, repositories, branches, commits and Dockerfiles.

These are action names. In default compact mode, call the indicated group tool with `{"action":"<action-name>","params":{...}}`; the arguments below go inside `params`. In `?mode=all`, call the action name directly with those arguments. `browse_github` and `read_docs` are direct tools in both modes. Expand each schema for nested fields, enum values and validation constraints. Successful results are JSON in both text content and `structuredContent`; failures use `isError` and `structuredContent.error`.

The [OpenAI profile](/mcp/openai-profile.md) calls individual actions, omits `get_byod_token`, and restricts credential inputs and environment outputs. The input schemas below describe the standard catalog; profile-specific schemas are included where they differ.

## `browse_github`

Browse what the user connected through the Kinesis GitHub App, for create\_app's source. kind=accounts: the connected accounts with their installationId (and a connectUrl to connect one); repos: what an installation can read; branches; commits: the newest, or one by sha; dockerfiles: the Dockerfiles and the ports the chosen one exposes; contents: a directory listing (the root when path is omitted) or a text file. No Dockerfile: read the files that say how the repository is built, write one and pass it to create\_app as source.dockerfileContent.

**Group:** `github` · **Behavior:** Read

**Compact tool:** `browse_github` (direct call)

**MCP annotations:** `readOnlyHint: true` · `destructiveHint: false` · `idempotentHint: true` · `openWorldHint: false`

### Permissions and REST equivalents

| Operation                | REST                          | Required scopes |
| ------------------------ | ----------------------------- | --------------- |
| `vcs.github.accounts`    | `GET /vcs/github/accounts`    | `vcs:read`      |
| `vcs.github.repos`       | `GET /vcs/github/repos`       | `vcs:read`      |
| `vcs.github.branches`    | `GET /vcs/github/branches`    | `vcs:read`      |
| `vcs.github.commits`     | `GET /vcs/github/commits`     | `vcs:read`      |
| `vcs.github.dockerfiles` | `GET /vcs/github/dockerfiles` | `vcs:read`      |
| `vcs.github.contents`    | `GET /vcs/github/contents`    | `vcs:read`      |

### Arguments

| Argument         | Type                                                                         | Required | Description                                                           |
| ---------------- | ---------------------------------------------------------------------------- | -------- | --------------------------------------------------------------------- |
| `kind`           | `"accounts" / "repos" / "branches" / "commits" / "dockerfiles" / "contents"` | Yes      | What to list                                                          |
| `installationId` | `integer`                                                                    | No       | Installation id; required for every kind but accounts                 |
| `repo`           | `string`                                                                     | No       | owner/name; required for every kind but accounts and repos            |
| `search`         | `string`                                                                     | No       | Case-insensitive substring of owner/name                              |
| `cursor`         | `string`                                                                     | No       | nextCursor from the previous page; omit for the first page            |
| `branch`         | `string`                                                                     | No       | Branch to list; default: the repository's default branch              |
| `sha`            | `string`                                                                     | No       | Look up this one commit instead of listing a branch                   |
| `limit`          | `integer`                                                                    | No       | Commits to return, 1 to 100 (default 20)                              |
| `contextDir`     | `string`                                                                     | No       | Build context directory (default /)                                   |
| `dockerfilePath` | `string`                                                                     | No       | Dockerfile path relative to contextDir (default Dockerfile)           |
| `path`           | `string`                                                                     | No       | File or directory, relative to the repository root; omit for the root |
| `maxBytes`       | `integer`                                                                    | No       | Bytes of a file to return, at most 262144 (default 65536)             |

<details>

<summary>Complete input schema</summary>

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "accounts",
        "repos",
        "branches",
        "commits",
        "dockerfiles",
        "contents"
      ],
      "description": "What to list"
    },
    "installationId": {
      "description": "Installation id; required for every kind but accounts",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "repo": {
      "description": "owner/name; required for every kind but accounts and repos",
      "type": "string",
      "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38})\\/[A-Za-z0-9._-]{1,100}$"
    },
    "search": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Case-insensitive substring of owner/name"
    },
    "cursor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512,
      "description": "nextCursor from the previous page; omit for the first page"
    },
    "branch": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Branch to list; default: the repository's default branch"
    },
    "sha": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{7,40}$",
      "description": "Look up this one commit instead of listing a branch"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Commits to return, 1 to 100 (default 20)"
    },
    "contextDir": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512,
      "description": "Build context directory (default /)"
    },
    "dockerfilePath": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512,
      "description": "Dockerfile path relative to contextDir (default Dockerfile)"
    },
    "path": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512,
      "description": "File or directory, relative to the repository root; omit for the root"
    },
    "maxBytes": {
      "type": "integer",
      "minimum": 1,
      "maximum": 262144,
      "description": "Bytes of a file to return, at most 262144 (default 65536)"
    }
  },
  "required": [
    "kind"
  ],
  "additionalProperties": false
}
```

</details>

### Result

**`vcs.github.accounts`**

* `enabled` (`boolean`): GitHub deployments are enabled on this server
* `accounts` (`array<object>`): See the complete response schema below.
* `connectUrl` (`string`): Dashboard page where the user connects a GitHub account

<details>

<summary>Response schema: vcs.github.accounts</summary>

```json
{
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean",
      "description": "GitHub deployments are enabled on this server"
    },
    "accounts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "installationId": {
            "type": "integer",
            "description": "Installation id to pass to the other GitHub operations"
          },
          "login": {
            "type": "string",
            "description": "GitHub user or organization name"
          },
          "type": {
            "type": "string",
            "enum": [
              "user",
              "organization"
            ]
          },
          "avatarUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "installationId",
          "login",
          "type",
          "avatarUrl"
        ],
        "additionalProperties": false
      }
    },
    "connectUrl": {
      "type": "string",
      "description": "Dashboard page where the user connects a GitHub account"
    }
  },
  "required": [
    "enabled",
    "accounts",
    "connectUrl"
  ],
  "additionalProperties": false
}
```

</details>

\*\*\`vcs.github.repos\`\*\*

* `repos` (`array<object>`): See the complete response schema below.
* `nextCursor` (`string or null`): Pass as cursor to fetch the next page; null on the last page

<details>

<summary>Response schema: vcs.github.repos</summary>

```json
{
  "type": "object",
  "properties": {
    "repos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "GitHub's numeric repository id"
          },
          "name": {
            "type": "string",
            "description": "owner/name"
          },
          "defaultBranch": {
            "type": "string"
          },
          "private": {
            "type": "boolean"
          },
          "url": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "updatedAt": {
            "type": "string",
            "description": "Last push or change, ISO 8601"
          }
        },
        "required": [
          "id",
          "name",
          "defaultBranch",
          "private",
          "url",
          "description",
          "language",
          "updatedAt"
        ],
        "additionalProperties": false
      }
    },
    "nextCursor": {
      "description": "Pass as cursor to fetch the next page; null on the last page",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "repos",
    "nextCursor"
  ],
  "additionalProperties": false
}
```

</details>

Operation-specific errors: `503 github_not_configured`, `404 github_installation_not_found`, `404 github_repo_not_found`, `502 upstream_github`. **`vcs.github.branches`**

* `defaultBranch` (`string`): See the complete response schema below.
* `branches` (`array<object>`): See the complete response schema below.

<details>

<summary>Response schema: vcs.github.branches</summary>

```json
{
  "type": "object",
  "properties": {
    "defaultBranch": {
      "type": "string"
    },
    "branches": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "sha": {
            "type": "string"
          },
          "protected": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "sha",
          "protected"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "defaultBranch",
    "branches"
  ],
  "additionalProperties": false
}
```

</details>

Operation-specific errors: `503 github_not_configured`, `404 github_installation_not_found`, `404 github_repo_not_found`, `502 upstream_github`. **`vcs.github.commits`**

* `branch` (`string or null`): Branch listed; null for a sha lookup
* `commits` (`array<object>`): Newest first

<details>

<summary>Response schema: vcs.github.commits</summary>

```json
{
  "type": "object",
  "properties": {
    "branch": {
      "description": "Branch listed; null for a sha lookup",
      "type": [
        "string",
        "null"
      ]
    },
    "commits": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "sha": {
            "type": "string"
          },
          "message": {
            "type": "string",
            "description": "First line of the commit message"
          },
          "author": {
            "type": "string",
            "description": "GitHub login of the author; empty when unknown"
          },
          "committedAt": {
            "type": "string",
            "description": "ISO 8601; empty when unknown"
          }
        },
        "required": [
          "sha",
          "message",
          "author",
          "committedAt"
        ],
        "additionalProperties": false
      },
      "description": "Newest first"
    }
  },
  "required": [
    "branch",
    "commits"
  ],
  "additionalProperties": false
}
```

</details>

Operation-specific errors: `503 github_not_configured`, `404 github_installation_not_found`, `404 github_repo_not_found`, `502 upstream_github`, `404 github_branch_not_found`, `404 github_commit_not_found`. **`vcs.github.dockerfiles`**

* `dockerfiles` (`array<string>`): Every Dockerfile path found, up to five directories deep; empty when there is none to build from
* `resolvedPathExists` (`boolean`): contextDir plus dockerfilePath names an existing file
* `truncated` (`boolean`): The repository tree was too large to list completely
* `exposedPorts` (`array<object>`): EXPOSE lines of the resolved Dockerfile
* `command` (`array<string> or null`): CMD of the resolved Dockerfile
* `entrypoint` (`array<string> or null`): ENTRYPOINT of the resolved Dockerfile

<details>

<summary>Response schema: vcs.github.dockerfiles</summary>

```json
{
  "type": "object",
  "properties": {
    "dockerfiles": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Every Dockerfile path found, up to five directories deep; empty when there is none to build from"
    },
    "resolvedPathExists": {
      "type": "boolean",
      "description": "contextDir plus dockerfilePath names an existing file"
    },
    "truncated": {
      "type": "boolean",
      "description": "The repository tree was too large to list completely"
    },
    "exposedPorts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "port": {
            "type": "integer"
          },
          "protocol": {
            "type": "string",
            "enum": [
              "tcp",
              "udp"
            ]
          }
        },
        "required": [
          "port",
          "protocol"
        ],
        "additionalProperties": false
      },
      "description": "EXPOSE lines of the resolved Dockerfile"
    },
    "command": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "CMD of the resolved Dockerfile"
    },
    "entrypoint": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "ENTRYPOINT of the resolved Dockerfile"
    }
  },
  "required": [
    "dockerfiles",
    "resolvedPathExists",
    "truncated",
    "exposedPorts",
    "command",
    "entrypoint"
  ],
  "additionalProperties": false
}
```

</details>

Operation-specific errors: `503 github_not_configured`, `404 github_installation_not_found`, `404 github_repo_not_found`, `502 upstream_github`, `404 github_branch_not_found`. **`vcs.github.contents`**

* `branch` (`string`): See the complete response schema below.
* `path` (`string`): Path read; empty for the root
* `type` (`"dir" / "file" / "symlink" / "submodule"`): See the complete response schema below.
* `entries` (`array<object> or null`): A directory's entries, directories first, then by name; null for anything else
* `content` (`string or null`): A text file's content (UTF-8); null for a directory, a binary file or a file over 1 MB
* `size` (`integer or null`): A file's size in bytes; null otherwise
* `truncated` (`boolean`): A listing stopped at GitHub's 1,000 entries, or content stops at maxBytes, or the file was over 1 MB
* `binary` (`boolean`): The file is not text, so content is null
* `target` (`string or null`): A symlink's target; null otherwise

<details>

<summary>Response schema: vcs.github.contents</summary>

```json
{
  "type": "object",
  "properties": {
    "branch": {
      "type": "string"
    },
    "path": {
      "type": "string",
      "description": "Path read; empty for the root"
    },
    "type": {
      "type": "string",
      "enum": [
        "dir",
        "file",
        "symlink",
        "submodule"
      ]
    },
    "entries": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "path": {
                "type": "string",
                "description": "Relative to the repository root"
              },
              "type": {
                "type": "string",
                "enum": [
                  "file",
                  "dir",
                  "symlink",
                  "submodule"
                ]
              },
              "size": {
                "type": "integer",
                "description": "Bytes; 0 for a directory"
              }
            },
            "required": [
              "name",
              "path",
              "type",
              "size"
            ],
            "additionalProperties": false
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "A directory's entries, directories first, then by name; null for anything else"
    },
    "content": {
      "description": "A text file's content (UTF-8); null for a directory, a binary file or a file over 1 MB",
      "type": [
        "string",
        "null"
      ]
    },
    "size": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "description": "A file's size in bytes; null otherwise"
    },
    "truncated": {
      "type": "boolean",
      "description": "A listing stopped at GitHub's 1,000 entries, or content stops at maxBytes, or the file was over 1 MB"
    },
    "binary": {
      "type": "boolean",
      "description": "The file is not text, so content is null"
    },
    "target": {
      "description": "A symlink's target; null otherwise",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "branch",
    "path",
    "type",
    "entries",
    "content",
    "size",
    "truncated",
    "binary",
    "target"
  ],
  "additionalProperties": false
}
```

</details>

Operation-specific errors: `503 github_not_configured`, `404 github_installation_not_found`, `404 github_repo_not_found`, `502 upstream_github`, `404 github_path_not_found`, `422 github_file_too_large`, `429 github_rate_limited`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.kinesis.network/mcp/tools/github.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
