Skip to content
Agentic Control Plane

ChatGPT GitHub connector: api_tool, list_resources, tools

David Crowe David Crowe · · Updated · 10 min read
chatgpt github mcp connectors reference
Share X HN LinkedIn

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 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, 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, records a discovery call against GitHub in ChatGPT Pro:
api_tool.list_resources({"paths":["GitHub"]})
  • A third-party MCP server issue, pblumer/atlas#198, quotes the error ChatGPT returns when its cached tool list is stale:
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 or the Responses API MCP guide.

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.

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 describes the shape of every ChatGPT tool: a name, a description, an input schema and an optional output schema. The Responses API guide 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:

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

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

As of 2026-11-06 that returns:

{
  "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. 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, 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:

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, app access requests are on by default. The switch is at:

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

Frequently asked questions

github connector api_tool list_resources github functions

api_tool.list_resources is the call ChatGPT makes to discover the tools behind a connected app, including GitHub. OpenAI does not publish a list of the GitHub connector’s functions. The only way to see the current set is to have ChatGPT call list_resources on GitHub in your own session, or for a workspace admin to open the app’s Action control.

github connector api_tool list_resources

When ChatGPT shows api_tool.list_resources in its activity, it is listing the tools a connected app exposes before calling one. Seeing it is normal. If it returns nothing for GitHub, the conversation cannot see the connector: check that GitHub is connected, that your plan supports GitHub in that mode, and that the GitHub App is installed on the account that owns the repository.

github connector api_tool list_resources actions

The GitHub actions available to ChatGPT depend on your plan, the product surface (chat, deep research, agent) and your workspace’s Action control settings. OpenAI’s help center describes the GitHub app in ChatGPT as read-only; generating and pushing code is routed to Codex.

github connector api_tool list_resources tool schema

OpenAI does not publish the GitHub connector’s tool schemas. ChatGPT tools follow the MCP shape: a name, a description, an input schema and an optional output schema. To read the live schema, ask ChatGPT to list the GitHub resources and print the tool definitions it receives.

Where to read more

Running coding agents? ACP records each tool call its hook sees and makes the dangerous shell commands (a force-push, destructive SQL, curl | sh) wait for you. One command, free up to 5 agents:

macOS · Linux · WSL
curl -fsSL https://agenticcontrolplane.com/install.sh | bash
Windows · PowerShell
irm https://agenticcontrolplane.com/install.ps1 | iex

What the installer writes  ·  Getting started

Share X HN LinkedIn
Get the next data drop
What agents actually cost, new tool-surface captures, and the occasional incident post-mortem — sent when we publish something worth your inbox, not on a schedule. Unsubscribe anytime.
Share: Twitter LinkedIn
Related posts

← back to blog