github-mcp-connector 0.5.0__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (19) hide show
  1. {github_mcp_connector-0.5.0/src/github_mcp_connector.egg-info → github_mcp_connector-0.7.0}/PKG-INFO +42 -14
  2. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/README.md +41 -13
  3. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/pyproject.toml +1 -1
  4. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/client.py +7 -3
  5. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/server.py +649 -0
  6. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0/src/github_mcp_connector.egg-info}/PKG-INFO +42 -14
  7. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/tests/test_server.py +474 -0
  8. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/LICENSE +0 -0
  9. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/setup.cfg +0 -0
  10. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/__init__.py +0 -0
  11. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/__main__.py +0 -0
  12. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/config.py +0 -0
  13. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/SOURCES.txt +0 -0
  14. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/dependency_links.txt +0 -0
  15. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/entry_points.txt +0 -0
  16. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/requires.txt +0 -0
  17. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/top_level.txt +0 -0
  18. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/tests/test_client.py +0 -0
  19. {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/tests/test_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: github-mcp-connector
3
- Version: 0.5.0
3
+ Version: 0.7.0
4
4
  Summary: A Model Context Protocol (MCP) connector for GitHub, for use with Claude.
5
5
  Author: winnerlose2026
6
6
  License: MIT
@@ -31,10 +31,13 @@ Dynamic: license-file
31
31
  # GitHub MCP Connector
32
32
 
33
33
  A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that
34
- connects **Claude** to **GitHub**. It exposes a focused set of GitHub REST API
35
- operations as MCP tools, so Claude (Desktop, Code, or any MCP client) can read
36
- repositories, browse files and commit history, triage issues, review pull
37
- requests, and—optionally—open issues and post comments.
34
+ connects **Claude** to **GitHub**. It exposes 50+ GitHub REST API operations as
35
+ MCP tools, so Claude (Desktop, Code, or any MCP client) can search and read
36
+ repositories, files, and commit history; triage and comment on issues; review,
37
+ open, and merge pull requests; drive CI (read logs, re-run, dispatch); inspect
38
+ security alerts; and—optionally—make changes (open/merge PRs, submit reviews,
39
+ manage labels/assignees, commit files, cut releases). Every write is gated by a
40
+ single read-only switch.
38
41
 
39
42
  It's a small, dependency-light Python package (`mcp` + `httpx`) that you point
40
43
  at a GitHub token. It supports both stdio (the default for Claude Desktop/Code)
@@ -43,14 +46,15 @@ Enterprise Server.
43
46
 
44
47
  ## Features
45
48
 
46
- - 🔍 **Search** repositories, issues/PRs, and code with GitHub's query syntax
49
+ - 🔍 **Search & discover** repositories, issues/PRs, and code — plus find reusable repos (across everything your token can see, license/activity-aware) for what you're building
47
50
  - 📦 **Repositories** — metadata, branches, file contents, directory listings, your repo list
48
51
  - 🧾 **Commits** — history, single-commit detail, and diffs between refs
49
- - 🐛 **Issues** — list, read, create, comment, and edit/close
50
- - 🔀 **Pull requests** — list, read, fetch diffs/changed files, open new PRs, and merge
51
- - ⚙️ **Actions & releases** — list runs/jobs, read failed-job logs, re-run runs, list releases
52
- - 🔐 **Security** — list secret-scanning alerts; review PR reviews
53
- - ✍️ **Repo writes** — create branches and commit files (gated by read-only mode)
52
+ - 🐛 **Issues** — list, read, create, comment, read comments, edit/close, label, assign
53
+ - 🔀 **Pull requests** — list, read, diffs/files, comments, open, update, merge, and review
54
+ - ⚙️ **Actions & releases** — list runs/jobs, read failed-job logs, re-run/dispatch workflows, commit statuses & check runs, list/create releases
55
+ - 🔐 **Security** — secret-scanning, code-scanning, and Dependabot alerts
56
+ - 🔔 **Notifications** — list and mark read across all your repos
57
+ - ✍️ **Repo writes** — create branches, commit files, manage labels/assignees, create gists (gated by read-only mode)
54
58
  - 🔒 **Read-only mode** — flip one env var to disable every write tool
55
59
  - 🏢 **Enterprise-friendly** — set `GITHUB_API_URL` for GitHub Enterprise Server
56
60
 
@@ -62,34 +66,53 @@ Enterprise Server.
62
66
  | `list_my_repositories` | List repos the token can access | |
63
67
  | `search_repositories` | Search repositories by query | |
64
68
  | `get_repository` | Repository metadata | |
69
+ | `get_repository_tree` | Recursive file tree at a ref | |
65
70
  | `list_branches` | Branches with head commit SHAs | |
66
71
  | `get_file_contents` | Read a file (decoded) or list a directory | |
67
72
  | `list_commits` | Recent commits, optional branch/path filter | |
68
73
  | `get_commit` | A single commit with stats and changed files | |
69
74
  | `compare_commits` | Diff/ahead-behind between two refs | |
75
+ | `get_combined_status` | Combined commit status for a ref | |
76
+ | `list_check_runs` | Check runs for a ref | |
70
77
  | `list_issues` | Issues by state/labels | |
71
78
  | `get_issue` | A single issue with full body | |
79
+ | `list_issue_comments` | Conversation comments on an issue/PR | |
72
80
  | `list_pull_requests` | Pull requests by state | |
73
81
  | `get_pull_request` | A single PR with body and merge status | |
74
82
  | `get_pull_request_diff` | Unified diff for a PR (truncated) | |
75
83
  | `list_pull_request_files` | Files changed in a PR | |
76
84
  | `list_pull_request_reviews` | Reviews submitted on a PR | |
85
+ | `list_pull_request_review_comments` | Inline code-review comments on a PR | |
77
86
  | `list_workflow_runs` | Recent GitHub Actions runs | |
78
87
  | `list_workflow_run_jobs` | Jobs in a run (flags failed steps) | |
79
88
  | `get_job_logs` | Plain-text logs for a job (tail) | |
80
89
  | `list_releases` | Releases for a repository | |
90
+ | `list_notifications` | Your notifications across all repos | |
81
91
  | `list_secret_scanning_alerts` | Secret-scanning alerts (no secret values) | |
92
+ | `list_code_scanning_alerts` | Code-scanning (CodeQL) alerts | |
93
+ | `list_dependabot_alerts` | Dependabot vulnerability alerts | |
82
94
  | `search_issues` | Search issues and PRs across GitHub | |
83
95
  | `search_code` | Search code across GitHub | |
96
+ | `find_reusable_repositories` | Find reusable repos for what you're building (license/activity-aware; public + accessible private) | |
84
97
  | `create_pull_request` | Open a new pull request (supports draft) | ✅ |
98
+ | `update_pull_request` | Edit title/body/base, close/reopen a PR | ✅ |
85
99
  | `merge_pull_request` | Merge a PR (merge/squash/rebase) | ✅ |
100
+ | `submit_pull_request_review` | Approve / request changes / comment | ✅ |
101
+ | `add_pull_request_review_comment` | Inline comment on a PR diff line | ✅ |
86
102
  | `rerun_workflow_run` | Re-run a workflow run (or just failed jobs) | ✅ |
103
+ | `trigger_workflow` | Dispatch a workflow_dispatch run | ✅ |
104
+ | `create_release` | Create a release (and its tag) | ✅ |
87
105
  | `create_issue` | Open a new issue | ✅ |
88
106
  | `update_issue` | Edit/close/reopen an issue | ✅ |
89
107
  | `add_issue_comment` | Comment on an issue or PR | ✅ |
108
+ | `add_labels` | Add labels to an issue/PR | ✅ |
109
+ | `remove_label` | Remove a label from an issue/PR | ✅ |
110
+ | `add_assignees` | Assign users to an issue/PR | ✅ |
111
+ | `mark_notification_read` | Mark a notification thread read | ✅ |
90
112
  | `create_branch` | Create a branch from a ref | ✅ |
91
113
  | `delete_branch` | Delete a branch | ✅ |
92
114
  | `create_or_update_file` | Commit a file (create or update) | ✅ |
115
+ | `create_gist` | Create a (secret or public) gist | ✅ |
93
116
 
94
117
  Tools marked **Write** are disabled when `GITHUB_MCP_READ_ONLY` is set.
95
118
 
@@ -105,9 +128,14 @@ Tools marked **Write** are disabled when `GITHUB_MCP_READ_ONLY` is set.
105
128
  account can access (public and private).
106
129
  - **Only specific repositories:** use a fine-grained PAT and select just those
107
130
  repos under "Repository access".
108
- - **Permissions:** read access is enough for the read tools; to use the write
109
- tools (`create_issue`, `add_issue_comment`) the token also needs issue
110
- write access (classic: `repo`; fine-grained: *Issues → Read and write*).
131
+ - **Permissions:** read access is enough for the read tools. The write tools
132
+ need scopes matching what they touch — for a classic PAT the `repo` scope
133
+ covers most (issues, PRs, reviews, labels, assignees, branches, files,
134
+ releases, statuses), `workflow` is required for `trigger_workflow` /
135
+ `rerun_workflow_run`, and `gist` for `create_gist`. Fine-grained tokens need
136
+ the corresponding per-resource "Read and write" permissions (Contents,
137
+ Issues, Pull requests, Actions, etc.), and security-alert tools require the
138
+ relevant code-scanning/Dependabot/secret-scanning alert read permissions.
111
139
 
112
140
  ## Install from PyPI (recommended)
113
141
 
@@ -1,10 +1,13 @@
1
1
  # GitHub MCP Connector
2
2
 
3
3
  A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that
4
- connects **Claude** to **GitHub**. It exposes a focused set of GitHub REST API
5
- operations as MCP tools, so Claude (Desktop, Code, or any MCP client) can read
6
- repositories, browse files and commit history, triage issues, review pull
7
- requests, and—optionally—open issues and post comments.
4
+ connects **Claude** to **GitHub**. It exposes 50+ GitHub REST API operations as
5
+ MCP tools, so Claude (Desktop, Code, or any MCP client) can search and read
6
+ repositories, files, and commit history; triage and comment on issues; review,
7
+ open, and merge pull requests; drive CI (read logs, re-run, dispatch); inspect
8
+ security alerts; and—optionally—make changes (open/merge PRs, submit reviews,
9
+ manage labels/assignees, commit files, cut releases). Every write is gated by a
10
+ single read-only switch.
8
11
 
9
12
  It's a small, dependency-light Python package (`mcp` + `httpx`) that you point
10
13
  at a GitHub token. It supports both stdio (the default for Claude Desktop/Code)
@@ -13,14 +16,15 @@ Enterprise Server.
13
16
 
14
17
  ## Features
15
18
 
16
- - 🔍 **Search** repositories, issues/PRs, and code with GitHub's query syntax
19
+ - 🔍 **Search & discover** repositories, issues/PRs, and code — plus find reusable repos (across everything your token can see, license/activity-aware) for what you're building
17
20
  - 📦 **Repositories** — metadata, branches, file contents, directory listings, your repo list
18
21
  - 🧾 **Commits** — history, single-commit detail, and diffs between refs
19
- - 🐛 **Issues** — list, read, create, comment, and edit/close
20
- - 🔀 **Pull requests** — list, read, fetch diffs/changed files, open new PRs, and merge
21
- - ⚙️ **Actions & releases** — list runs/jobs, read failed-job logs, re-run runs, list releases
22
- - 🔐 **Security** — list secret-scanning alerts; review PR reviews
23
- - ✍️ **Repo writes** — create branches and commit files (gated by read-only mode)
22
+ - 🐛 **Issues** — list, read, create, comment, read comments, edit/close, label, assign
23
+ - 🔀 **Pull requests** — list, read, diffs/files, comments, open, update, merge, and review
24
+ - ⚙️ **Actions & releases** — list runs/jobs, read failed-job logs, re-run/dispatch workflows, commit statuses & check runs, list/create releases
25
+ - 🔐 **Security** — secret-scanning, code-scanning, and Dependabot alerts
26
+ - 🔔 **Notifications** — list and mark read across all your repos
27
+ - ✍️ **Repo writes** — create branches, commit files, manage labels/assignees, create gists (gated by read-only mode)
24
28
  - 🔒 **Read-only mode** — flip one env var to disable every write tool
25
29
  - 🏢 **Enterprise-friendly** — set `GITHUB_API_URL` for GitHub Enterprise Server
26
30
 
@@ -32,34 +36,53 @@ Enterprise Server.
32
36
  | `list_my_repositories` | List repos the token can access | |
33
37
  | `search_repositories` | Search repositories by query | |
34
38
  | `get_repository` | Repository metadata | |
39
+ | `get_repository_tree` | Recursive file tree at a ref | |
35
40
  | `list_branches` | Branches with head commit SHAs | |
36
41
  | `get_file_contents` | Read a file (decoded) or list a directory | |
37
42
  | `list_commits` | Recent commits, optional branch/path filter | |
38
43
  | `get_commit` | A single commit with stats and changed files | |
39
44
  | `compare_commits` | Diff/ahead-behind between two refs | |
45
+ | `get_combined_status` | Combined commit status for a ref | |
46
+ | `list_check_runs` | Check runs for a ref | |
40
47
  | `list_issues` | Issues by state/labels | |
41
48
  | `get_issue` | A single issue with full body | |
49
+ | `list_issue_comments` | Conversation comments on an issue/PR | |
42
50
  | `list_pull_requests` | Pull requests by state | |
43
51
  | `get_pull_request` | A single PR with body and merge status | |
44
52
  | `get_pull_request_diff` | Unified diff for a PR (truncated) | |
45
53
  | `list_pull_request_files` | Files changed in a PR | |
46
54
  | `list_pull_request_reviews` | Reviews submitted on a PR | |
55
+ | `list_pull_request_review_comments` | Inline code-review comments on a PR | |
47
56
  | `list_workflow_runs` | Recent GitHub Actions runs | |
48
57
  | `list_workflow_run_jobs` | Jobs in a run (flags failed steps) | |
49
58
  | `get_job_logs` | Plain-text logs for a job (tail) | |
50
59
  | `list_releases` | Releases for a repository | |
60
+ | `list_notifications` | Your notifications across all repos | |
51
61
  | `list_secret_scanning_alerts` | Secret-scanning alerts (no secret values) | |
62
+ | `list_code_scanning_alerts` | Code-scanning (CodeQL) alerts | |
63
+ | `list_dependabot_alerts` | Dependabot vulnerability alerts | |
52
64
  | `search_issues` | Search issues and PRs across GitHub | |
53
65
  | `search_code` | Search code across GitHub | |
66
+ | `find_reusable_repositories` | Find reusable repos for what you're building (license/activity-aware; public + accessible private) | |
54
67
  | `create_pull_request` | Open a new pull request (supports draft) | ✅ |
68
+ | `update_pull_request` | Edit title/body/base, close/reopen a PR | ✅ |
55
69
  | `merge_pull_request` | Merge a PR (merge/squash/rebase) | ✅ |
70
+ | `submit_pull_request_review` | Approve / request changes / comment | ✅ |
71
+ | `add_pull_request_review_comment` | Inline comment on a PR diff line | ✅ |
56
72
  | `rerun_workflow_run` | Re-run a workflow run (or just failed jobs) | ✅ |
73
+ | `trigger_workflow` | Dispatch a workflow_dispatch run | ✅ |
74
+ | `create_release` | Create a release (and its tag) | ✅ |
57
75
  | `create_issue` | Open a new issue | ✅ |
58
76
  | `update_issue` | Edit/close/reopen an issue | ✅ |
59
77
  | `add_issue_comment` | Comment on an issue or PR | ✅ |
78
+ | `add_labels` | Add labels to an issue/PR | ✅ |
79
+ | `remove_label` | Remove a label from an issue/PR | ✅ |
80
+ | `add_assignees` | Assign users to an issue/PR | ✅ |
81
+ | `mark_notification_read` | Mark a notification thread read | ✅ |
60
82
  | `create_branch` | Create a branch from a ref | ✅ |
61
83
  | `delete_branch` | Delete a branch | ✅ |
62
84
  | `create_or_update_file` | Commit a file (create or update) | ✅ |
85
+ | `create_gist` | Create a (secret or public) gist | ✅ |
63
86
 
64
87
  Tools marked **Write** are disabled when `GITHUB_MCP_READ_ONLY` is set.
65
88
 
@@ -75,9 +98,14 @@ Tools marked **Write** are disabled when `GITHUB_MCP_READ_ONLY` is set.
75
98
  account can access (public and private).
76
99
  - **Only specific repositories:** use a fine-grained PAT and select just those
77
100
  repos under "Repository access".
78
- - **Permissions:** read access is enough for the read tools; to use the write
79
- tools (`create_issue`, `add_issue_comment`) the token also needs issue
80
- write access (classic: `repo`; fine-grained: *Issues → Read and write*).
101
+ - **Permissions:** read access is enough for the read tools. The write tools
102
+ need scopes matching what they touch — for a classic PAT the `repo` scope
103
+ covers most (issues, PRs, reviews, labels, assignees, branches, files,
104
+ releases, statuses), `workflow` is required for `trigger_workflow` /
105
+ `rerun_workflow_run`, and `gist` for `create_gist`. Fine-grained tokens need
106
+ the corresponding per-resource "Read and write" permissions (Contents,
107
+ Issues, Pull requests, Actions, etc.), and security-alert tools require the
108
+ relevant code-scanning/Dependabot/secret-scanning alert read permissions.
81
109
 
82
110
  ## Install from PyPI (recommended)
83
111
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "github-mcp-connector"
7
- version = "0.5.0"
7
+ version = "0.7.0"
8
8
  description = "A Model Context Protocol (MCP) connector for GitHub, for use with Claude."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -136,9 +136,13 @@ class GitHubClient:
136
136
  return None
137
137
  return response.json()
138
138
 
139
- async def delete(self, path: str) -> None:
140
- # GitHub returns 204 No Content on a successful delete.
141
- await self._request("DELETE", path)
139
+ async def delete(self, path: str) -> Any:
140
+ # GitHub returns 204 No Content for some deletes, but a body for others
141
+ # (e.g. removing an issue label returns the remaining labels).
142
+ response = await self._request("DELETE", path)
143
+ if not response.content:
144
+ return None
145
+ return response.json()
142
146
 
143
147
 
144
148
  def _extract_error_detail(response: httpx.Response) -> str: