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.
- {github_mcp_connector-0.5.0/src/github_mcp_connector.egg-info → github_mcp_connector-0.7.0}/PKG-INFO +42 -14
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/README.md +41 -13
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/pyproject.toml +1 -1
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/client.py +7 -3
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/server.py +649 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0/src/github_mcp_connector.egg-info}/PKG-INFO +42 -14
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/tests/test_server.py +474 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/LICENSE +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/setup.cfg +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/__init__.py +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/__main__.py +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp/config.py +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/SOURCES.txt +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/dependency_links.txt +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/entry_points.txt +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/requires.txt +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/src/github_mcp_connector.egg-info/top_level.txt +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/tests/test_client.py +0 -0
- {github_mcp_connector-0.5.0 → github_mcp_connector-0.7.0}/tests/test_config.py +0 -0
{github_mcp_connector-0.5.0/src/github_mcp_connector.egg-info → github_mcp_connector-0.7.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: github-mcp-connector
|
|
3
|
-
Version: 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
|
|
35
|
-
|
|
36
|
-
repositories,
|
|
37
|
-
|
|
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
|
|
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,
|
|
50
|
-
- 🔀 **Pull requests** — list, read,
|
|
51
|
-
- ⚙️ **Actions & releases** — list runs/jobs, read failed-job logs, re-run runs, list releases
|
|
52
|
-
- 🔐 **Security** —
|
|
53
|
-
-
|
|
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
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
5
|
-
|
|
6
|
-
repositories,
|
|
7
|
-
|
|
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
|
|
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,
|
|
20
|
-
- 🔀 **Pull requests** — list, read,
|
|
21
|
-
- ⚙️ **Actions & releases** — list runs/jobs, read failed-job logs, re-run runs, list releases
|
|
22
|
-
- 🔐 **Security** —
|
|
23
|
-
-
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
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.
|
|
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) ->
|
|
140
|
-
# GitHub returns 204 No Content
|
|
141
|
-
|
|
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:
|