@@ -108,6 +108,95 @@ If you don't have Docker, you can use `go build` to build the binary in the
108108}
109109```
110110
111+ ## Tool Configuration
112+
113+ The GitHub MCP Server supports enabling or disabling specific groups of functionalities via the ` --toolsets ` flag. This allows you to control which GitHub API capabilities are available to your AI tools.
114+
115+ ### Available Toolsets
116+
117+ The following sets of tools are available (all are on by default):
118+
119+ | Toolset | Description |
120+ | ----------------------- | ------------------------------------------------------------- |
121+ | ` repos ` | Repository-related tools (file operations, branches, commits) |
122+ | ` issues ` | Issue-related tools (create, read, update, comment) |
123+ | ` users ` | Anything relating to GitHub Users |
124+ | ` pull_requests ` | Pull request operations (create, merge, review) |
125+ | ` code_security ` | Code scanning alerts and security features |
126+ | ` experiments ` | Experimental features (not considered stable) |
127+
128+ #### Specifying Toolsets
129+
130+ To reduce the available tools, you can pass an allow-list in two ways:
131+
132+ 1 . ** Using Command Line Argument** :
133+
134+ ``` bash
135+ github-mcp-server --toolsets repos,issues,pull_requests,code_security
136+ ```
137+
138+ 2 . ** Using Environment Variable** :
139+ ``` bash
140+ GITHUB_TOOLSETS=" repos,issues,pull_requests,code_security" ./github-mcp-server
141+ ```
142+
143+ The environment variable ` GITHUB_TOOLSETS ` takes precedence over the command line argument if both are provided.
144+
145+ Any toolsets you specify will be enabled from the start, including when ` --dynamic-toolsets ` is on.
146+
147+ You might want to do this if the model is confused about which tools to call and you only require a subset.
148+
149+
150+ ### Using Toolsets With Docker
151+
152+ When using Docker, you can pass the toolsets as environment variables:
153+
154+ ``` bash
155+ docker run -i --rm \
156+ -e GITHUB_PERSONAL_ACCESS_TOKEN=< your-token> \
157+ -e GITHUB_TOOLSETS=" repos,issues,pull_requests,code_security,experiments" \
158+ ghcr.io/github/github-mcp-server
159+ ```
160+
161+ ### The "all" Toolset
162+
163+ The special toolset ` all ` can be provided to enable all available toolsets regardless of any other configuration:
164+
165+ ``` bash
166+ ./github-mcp-server --toolsets all
167+ ```
168+
169+ Or using the environment variable:
170+
171+ ``` bash
172+ GITHUB_TOOLSETS=" all" ./github-mcp-server
173+ ```
174+
175+ ## Dynamic Tool Discovery
176+
177+ Instead of starting with all tools enabled, you can turn on Dynamic Toolset Discovery.
178+ This feature provides tools that help the MCP Host application to discover and enable sets of GitHub tools only when needed.
179+ This helps to avoid situations where models get confused by the shear number of tools available to them, which varies by model.
180+
181+ ### Using Dynamic Tool Discovery
182+
183+ When using the binary, you can pass the ` --dynamic-toolsets ` flag.
184+
185+ ``` bash
186+ ./github-mcp-server --dynamic-toolsets
187+ ```
188+
189+ When using Docker, you can pass the toolsets as environment variables:
190+
191+ ``` bash
192+ docker run -i --rm \
193+ -e GITHUB_PERSONAL_ACCESS_TOKEN=< your-token> \
194+ -e GITHUB_DYNAMIC_TOOLSETS=1 \
195+ ghcr.io/github/github-mcp-server
196+ ```
197+
198+
199+
111200## GitHub Enterprise Server
112201
113202The flag ` --gh-host ` and the environment variable ` GH_HOST ` can be used to set
@@ -329,7 +418,6 @@ export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description
329418### Repositories
330419
331420- ** create_or_update_file** - Create or update a single file in a repository
332-
333421 - ` owner ` : Repository owner (string, required)
334422 - ` repo ` : Repository name (string, required)
335423 - ` path ` : File path (string, required)
@@ -339,50 +427,43 @@ export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description
339427 - ` sha ` : File SHA if updating (string, optional)
340428
341429- ** list_branches** - List branches in a GitHub repository
342-
343430 - ` owner ` : Repository owner (string, required)
344431 - ` repo ` : Repository name (string, required)
345432 - ` page ` : Page number (number, optional)
346433 - ` perPage ` : Results per page (number, optional)
347434
348435- ** push_files** - Push multiple files in a single commit
349-
350436 - ` owner ` : Repository owner (string, required)
351437 - ` repo ` : Repository name (string, required)
352438 - ` branch ` : Branch to push to (string, required)
353439 - ` files ` : Files to push, each with path and content (array, required)
354440 - ` message ` : Commit message (string, required)
355441
356442- ** search_repositories** - Search for GitHub repositories
357-
358443 - ` query ` : Search query (string, required)
359444 - ` sort ` : Sort field (string, optional)
360445 - ` order ` : Sort order (string, optional)
361446 - ` page ` : Page number (number, optional)
362447 - ` perPage ` : Results per page (number, optional)
363448
364449- ** create_repository** - Create a new GitHub repository
365-
366450 - ` name ` : Repository name (string, required)
367451 - ` description ` : Repository description (string, optional)
368452 - ` private ` : Whether the repository is private (boolean, optional)
369453 - ` autoInit ` : Auto-initialize with README (boolean, optional)
370454
371455- ** get_file_contents** - Get contents of a file or directory
372-
373456 - ` owner ` : Repository owner (string, required)
374457 - ` repo ` : Repository name (string, required)
375458 - ` path ` : File path (string, required)
376459 - ` ref ` : Git reference (string, optional)
377460
378461- ** fork_repository** - Fork a repository
379-
380462 - ` owner ` : Repository owner (string, required)
381463 - ` repo ` : Repository name (string, required)
382464 - ` organization ` : Target organization name (string, optional)
383465
384466- ** create_branch** - Create a new branch
385-
386467 - ` owner ` : Repository owner (string, required)
387468 - ` repo ` : Repository name (string, required)
388469 - ` branch ` : New branch name (string, required)
@@ -403,16 +484,15 @@ export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description
403484 - ` page ` : Page number, for files in the commit (number, optional)
404485 - ` perPage ` : Results per page, for files in the commit (number, optional)
405486
406- ### Search
407-
408- - ** search_code** - Search for code across GitHub repositories
409-
487+ - ** search_code** - Search for code across GitHub repositories
410488 - ` query ` : Search query (string, required)
411489 - ` sort ` : Sort field (string, optional)
412490 - ` order ` : Sort order (string, optional)
413491 - ` page ` : Page number (number, optional)
414492 - ` perPage ` : Results per page (number, optional)
415493
494+ ### Users
495+
416496- ** search_users** - Search for GitHub users
417497 - ` query ` : Search query (string, required)
418498 - ` sort ` : Sort field (string, optional)
0 commit comments