# ChatGPT GitHub connector: api_tool, list_resources, tools

What api_tool.list_resources shows for the ChatGPT GitHub connector, which GitHub permissions it holds, where the function list lives, and how to scope it.

`api_tool.list_resources` is how ChatGPT finds out what a connected app can do. Before it uses GitHub, it lists the tools GitHub exposes, then calls one through `api_tool`. OpenAI has not published the GitHub connector's function list or its tool schemas. What you can check yourself is the GitHub App behind the connector, the permissions it holds, and the switches that limit it.

This page covers each of those, with sources.

## What the ChatGPT GitHub connector is

OpenAI's help article [Connecting GitHub to ChatGPT](https://help.openai.com/en/articles/11145903-connecting-github-to-chatgpt) describes it as a way to ask questions about your code. ChatGPT fetches permitted repository content when you ask: code, README files, other docs. Depending on plan, it shows up in standard chat, deep research or agent mode.

The connection flow, per the same article:

1. Open **Settings > Plugins** in ChatGPT and select GitHub.
2. GitHub asks you to install and authorize OpenAI's app.
3. You pick which repositories ChatGPT can access.

Two more details from the article:

- There is no GitHub sync and no per-repository index. Content is fetched when you ask.
- The repository picker searches repository names, not file contents. Inside a conversation you can ask ChatGPT to search an authorized repo by file name, function name or error message.

OpenAI's GitHub App is [ChatGPT Codex Connector](https://github.com/apps/chatgpt-codex-connector), owned by the `openai` account. It is a GitHub App, not an OAuth app, so it shows under **Installed GitHub Apps** and **Authorized GitHub Apps** in your GitHub settings.

## How api_tool and list_resources show up

ChatGPT routes connected-app tools through one tool named `api_tool`. In the activity trace you see `api_tool.list_resources` (what is available) and then a call to a specific tool under the app's name.

OpenAI does not document either name in its developer docs or help center. What is public comes from traces users posted. Two examples:

- A bug report, [openai/codex#50897](https://github.com/openai/codex/issues/50897), records a discovery call against GitHub in ChatGPT Pro:

```text
api_tool.list_resources({"paths":["GitHub"]})
```

- A third-party MCP server issue, [pblumer/atlas#198](https://github.com/pblumer/atlas/issues/198), quotes the error ChatGPT returns when its cached tool list is stale:

```text
Resource not found: Atlas_Workflow_Engine.atlas_info.
Call api_tool.list_resources again to rediscover the currently available tools.
```

So `list_resources` returns tools grouped under each app's name, and the list is cached per session. If a tool was renamed or added on the server, the model may be using an old list.

## Which functions the GitHub connector exposes

OpenAI does not publish this list. It is not in the help center, the [Apps SDK / plugin docs](https://developers.openai.com/plugins/build/mcp-server) or the [Responses API MCP guide](https://developers.openai.com/api/docs/guides/tools-connectors-mcp).

People search that last guide for GitHub, so a note. The Responses API ships built-in connectors with IDs such as `connector_dropbox`, `connector_gmail`, `connector_googledrive` and `connector_sharepoint`. GitHub is not one of them. For GitHub over the API, the guide points to GitHub's own remote MCP server at `https://api.githubcopilot.com/mcp/`. That is a different product with its own published tool list. We cover it in [GitHub MCP server permissions and controls](/mcp-controls/github).

The only record of the ChatGPT connector's tool count is the same user report, openai/codex#50897. It says unfiltered discovery returned 48 read-only tools in some turns and 89 tools including writes in others, in one conversation. That is one person's observation, not a spec. Treat any post that lists "the" ChatGPT GitHub functions by name as unverified.

## How to see the tool schema

OpenAI's [MCP server build guide](https://developers.openai.com/plugins/build/mcp-server) describes the shape of every ChatGPT tool: a name, a description, an input schema and an optional output schema. The [Responses API guide](https://developers.openai.com/api/docs/guides/tools-connectors-mcp) shows it on the wire. Each tool in an `mcp_list_tools` item carries `name`, `description`, optional `annotations` such as `readOnlyHint` and `destructiveHint`, and an `input_schema` in JSON Schema.

For the GitHub connector there are two ways to read the live schema.

**In a conversation.** Ask ChatGPT:

```text
Call api_tool.list_resources for GitHub and print every tool name,
its description, and its full input schema exactly as you received it.
```

The answer reflects your account, plan and workspace settings at that moment. It can differ between users and between turns.

**As a workspace admin.** OpenAI's [Admin controls, security, and compliance for plugins and apps](https://help.openai.com/en/articles/11509118-admin-controls-security-and-compliance-for-plugins-and-apps) describes **Workspace settings > Apps**, then the **•••** menu next to an app, then **Action control**. That screen lists the app's read and write actions so you can switch them on or off.

## What GitHub permissions it holds

GitHub's public apps API returns the permissions OpenAI's app requests:

```bash
gh api /apps/chatgpt-codex-connector --jq '{name, owner: .owner.login, permissions, events}'
```

As of 2026-11-06 that returns:

```json
{
  "name": "ChatGPT Codex Connector",
  "owner": "openai",
  "permissions": {
    "actions": "write",
    "checks": "read",
    "contents": "write",
    "emails": "read",
    "issues": "write",
    "metadata": "read",
    "pull_requests": "write",
    "statuses": "read",
    "workflows": "write"
  },
  "events": ["check_run", "check_suite", "commit_comment", "issues", "issue_comment",
             "pull_request", "pull_request_review", "pull_request_review_comment",
             "pull_request_review_thread", "repository", "status", "sub_issues"]
}
```

Two things follow.

First, the app asks for write access to contents, issues, pull requests, Actions and workflows. One app serves both ChatGPT and Codex, and Codex [posts reviews and can push fixes](https://learn.chatgpt.com/docs/third-party/github). OpenAI's help center says the GitHub app in ChatGPT itself only reads your repositories and sends code changes to Codex.

Second, GitHub caps what any token from this app can do. Per [GitHub's docs on acting for a user](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user), the app reaches only what the user can reach, only within the permissions it was granted, and only in accounts where it is installed. It cannot see a private repo you cannot see.

## What it cannot do

Per OpenAI's help center, as indexed on 2026-11-06:

- It does not push code, commit or open PRs from ChatGPT. That is Codex.
- It does not sync or index repositories ahead of time.
- It is not in every mode on every plan. Some plans get GitHub in deep research or agent mode but not in standard chat.
- It cannot reach repositories outside the GitHub App installation, or repos your GitHub account lacks access to.
- If your GitHub org uses an IP allow list, requests fail until OpenAI's egress IP ranges are added.

## How to limit what it can reach

There are three layers. Each narrows the one before it.

**1. GitHub App installation (repository scope).** This is the boundary that holds. Per GitHub's [guide to installed apps](https://docs.github.com/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps):

```text
GitHub > Settings (personal or org) > GitHub Apps
  > ChatGPT Codex Connector > Configure
  > Repository access: Only select repositories
  > Save
```

The same screen has **Suspend** and **Uninstall**. Uninstalling removes access in that account only. To cut every token issued on your behalf, also revoke it under **Authorized GitHub Apps**.

**2. Organization policy.** Org owners decide who can request unapproved apps. Per [GitHub's docs](https://docs.github.com/en/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests), app access requests are on by default. The switch is at:

```text
Org Settings > Access > Member privileges > App access requests
```

With requests restricted, a member who connects ChatGPT cannot get the app onto org repos until an owner installs it.

**3. ChatGPT workspace controls.** On Enterprise and Edu, apps start disabled and admins grant them by role. OpenAI's help center describes three settings: **Role access** (who can use the app), **Actions** (what it can do: all, read-only, or a custom set, plus how new actions are handled), and **Permissions** (when ChatGPT asks first: *Always ask*, *Allow read actions*, *Allow low-risk actions*). For a GitHub App you made yourself, the [GitHub Enterprise app template](https://help.openai.com/en/articles/20001248-set-up-the-github-enterprise-app-template-in-chatgpt) says to start with read-only Metadata, Contents, Issues, Pull requests and Actions, and add write only where needed.

## Limits

The function list. OpenAI has not published it, and it moves: the one public record shows it changing between turns. Any tool name you see in `list_resources` today is an observation, not a contract.

Repository selection controls which repos the app reaches. It does not control which tool the model calls on them, or with what arguments. ChatGPT's Action control and permission prompts do that inside ChatGPT. ACP's hooks sit in coding agents such as Claude Code and Codex, so they do not see calls ChatGPT itself makes. For allow, ask and deny rules on MCP tool calls from those agents, see [MCP server controls](/mcp-controls).

## Frequently asked questions



## Where to read more

- [Connecting GitHub to ChatGPT](https://help.openai.com/en/articles/11145903-connecting-github-to-chatgpt), OpenAI Help Center
- [Admin controls, security, and compliance for plugins and apps](https://help.openai.com/en/articles/11509118-admin-controls-security-and-compliance-for-plugins-and-apps), OpenAI Help Center
- [Set up the GitHub Enterprise app template in ChatGPT](https://help.openai.com/en/articles/20001248-set-up-the-github-enterprise-app-template-in-chatgpt), OpenAI Help Center
- [MCP servers in the Responses API](https://developers.openai.com/api/docs/guides/tools-connectors-mcp), OpenAI developer docs
- [ChatGPT Codex Connector](https://github.com/apps/chatgpt-codex-connector), GitHub App page
- [Reviewing and modifying installed GitHub Apps](https://docs.github.com/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps), GitHub Docs
- [Limiting OAuth app and GitHub App access requests](https://docs.github.com/en/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests), GitHub Docs
