github-agent 1.0.2__tar.gz → 1.1.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_agent-1.0.2 → github_agent-1.1.0}/PKG-INFO +20 -6
- {github_agent-1.0.2 → github_agent-1.1.0}/README.md +19 -5
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/agent_server.py +1 -1
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_pulls.py +85 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_repos.py +12 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_workflows.py +36 -0
- github_agent-1.1.0/github_agent/connectors/mcp_source_presets.json +18 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/github_gql.py +40 -1
- github_agent-1.1.0/github_agent/kg_ingest.py +357 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_action.py +47 -0
- github_agent-1.1.0/github_agent/mcp/mcp_pull.py +278 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_repo.py +116 -4
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp_server.py +353 -9
- github_agent-1.1.0/github_agent/ontology/__init__.py +9 -0
- github_agent-1.1.0/github_agent/ontology/github.ttl +160 -0
- github_agent-1.1.0/github_agent/prompts/code_collaboration_specialist.json +43 -0
- github_agent-1.1.0/github_agent/skills/__init__.py +0 -0
- github_agent-1.1.0/github_agent/skills/github-actions-ci-review/SKILL.md +92 -0
- github_agent-1.1.0/github_agent/skills/github-issue-tracking/SKILL.md +94 -0
- github_agent-1.1.0/github_agent/skills/github-pull-request-create/SKILL.md +80 -0
- github_agent-1.1.0/github_agent/skills/github-pull-request-review/SKILL.md +133 -0
- github_agent-1.1.0/github_agent/skills/github-repository-management/SKILL.md +101 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent.egg-info/PKG-INFO +20 -6
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent.egg-info/SOURCES.txt +12 -1
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent.egg-info/entry_points.txt +6 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/pyproject.toml +8 -2
- github_agent-1.1.0/tests/test_kg_ingest.py +202 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_mcp_coverage.py +10 -1
- github_agent-1.0.2/github_agent/mcp/mcp_pull.py +0 -135
- github_agent-1.0.2/github_agent/skills/github-starter/SKILL.md +0 -19
- {github_agent-1.0.2 → github_agent-1.1.0}/LICENSE +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/__init__.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/__main__.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/__init__.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_base.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_branches.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_commits.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_contents.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_issues.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_orgs.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_pages.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_releases.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api/api_client_search.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/api_client.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/auth.py +0 -0
- {github_agent-1.0.2/github_agent/prompts → github_agent-1.1.0/github_agent/connectors}/__init__.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/github_input_models.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/github_response_models.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/__init__.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_branch.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_collaborator.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_commit.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_content.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_issue.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_org.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_release.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp/mcp_search.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/mcp_config.json +0 -0
- {github_agent-1.0.2/github_agent/skills → github_agent-1.1.0/github_agent/prompts}/__init__.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent/prompts/main_agent.json +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent.egg-info/dependency_links.txt +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent.egg-info/requires.txt +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/github_agent.egg-info/top_level.txt +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/scripts/security_sanitizer.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/scripts/validate_a2a_agent.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/scripts/verify_api_integration.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/setup.cfg +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/conftest.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_action_discovery.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_api_client_endpoints.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_api_validation.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_auth_client_edge_cases.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_concept_parity.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_github_agent_api_brute_force_coverage.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_github_agent_brute_force_coverage.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_github_gql.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_hardening.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_init_dynamics.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_model_fields.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_org_crud.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_pages.py +0 -0
- {github_agent-1.0.2 → github_agent-1.1.0}/tests/test_startup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: github-agent
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: GitHub Agent for MCP
|
|
5
5
|
Author-email: Audel Rouhi <knucklessg1@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -48,7 +48,7 @@ Dynamic: license-file
|
|
|
48
48
|

|
|
49
49
|

|
|
50
50
|
|
|
51
|
-
*Version: 1.0
|
|
51
|
+
*Version: 1.1.0*
|
|
52
52
|
|
|
53
53
|
> **Documentation** — Installation, deployment, and usage across the MCP, API, and
|
|
54
54
|
> CLI interfaces, including the integrated A2A agent server, are maintained in the
|
|
@@ -98,9 +98,12 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
98
98
|
| `github_collaborators` | `COLLABORATORTOOL` | Manage repository collaborators. |
|
|
99
99
|
| `github_commits` | `COMMITTOOL` | Manage GitHub commits. |
|
|
100
100
|
| `github_contents` | `CONTENTTOOL` | Manage GitHub contents. |
|
|
101
|
+
| `github_discover_graphql_schema` | `GRAPHQLTOOL` | Discover the live GitHub GraphQL schema (types, fields, and attributes) in real-time. |
|
|
102
|
+
| `github_graphql` | `GRAPHQLTOOL` | Execute raw GraphQL queries and mutations natively on GitHub. |
|
|
103
|
+
| `github_ingest_repos` | `INGESTTOOL` | Natively ingest GitHub repositories into epistemic-graph as typed :Repository nodes. |
|
|
101
104
|
| `github_issues` | `ISSUETOOL` | Manage GitHub issues. |
|
|
102
105
|
| `github_orgs` | `ORGTOOL` | Manage GitHub organizations. |
|
|
103
|
-
| `github_pulls` | `PULLTOOL` | Manage GitHub pull requests. |
|
|
106
|
+
| `github_pulls` | `PULLTOOL` | Manage GitHub pull requests and their review/merge lifecycle. |
|
|
104
107
|
| `github_releases` | `RELEASETOOL` | Manage repository releases. |
|
|
105
108
|
| `github_repos` | `REPOTOOL` | Manage GitHub repositories and their GitHub Pages sites. |
|
|
106
109
|
| `github_search` | `SEARCHTOOL` | Search GitHub repositories, issues, or code. |
|
|
@@ -108,7 +111,7 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
108
111
|
#### Verbose 1:1 API-mapped tools (`MCP_TOOL_MODE=verbose` or `both`)
|
|
109
112
|
|
|
110
113
|
<details>
|
|
111
|
-
<summary>
|
|
114
|
+
<summary>72 per-operation tools — one per public API method (click to expand)</summary>
|
|
112
115
|
|
|
113
116
|
| MCP Tool | Toggle Env Var | Description |
|
|
114
117
|
|----------|----------------|-------------|
|
|
@@ -122,6 +125,7 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
122
125
|
| `github_create_organization_repository` | `APITOOL` | Create a repository in an organization. |
|
|
123
126
|
| `github_create_pages` | `APITOOL` | Enable GitHub Pages for a repository (HTTP 201). |
|
|
124
127
|
| `github_create_pull_request` | `APITOOL` | Create a new pull request in a repository. |
|
|
128
|
+
| `github_create_pull_request_review` | `APITOOL` | Create a review on a pull request. |
|
|
125
129
|
| `github_create_release` | `APITOOL` | Create a new repository release. |
|
|
126
130
|
| `github_create_repository` | `APITOOL` | Create a new repository for the authenticated user. |
|
|
127
131
|
| `github_delete_branch` | `APITOOL` | Delete a branch in a repository. |
|
|
@@ -153,17 +157,22 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
153
157
|
| `github_get_pull_requests` | `APITOOL` | List pull requests for a repository. |
|
|
154
158
|
| `github_get_release` | `APITOOL` | Get a single repository release. |
|
|
155
159
|
| `github_get_releases` | `APITOOL` | List repository releases. |
|
|
160
|
+
| `github_get_repo_secret_public_key` | `APITOOL` | Get the public key for encrypting repository Actions secrets. |
|
|
156
161
|
| `github_get_repo_secrets` | `APITOOL` | List repository Actions secrets names. |
|
|
157
162
|
| `github_get_repositories` | `APITOOL` | List repositories for the authenticated user. |
|
|
158
163
|
| `github_get_repository` | `APITOOL` | Get a specific repository. |
|
|
164
|
+
| `github_get_workflow_job_logs` | `APITOOL` | Download the plaintext logs for a single workflow job. |
|
|
159
165
|
| `github_get_workflow_run` | `APITOOL` | Get a single workflow run. |
|
|
166
|
+
| `github_get_workflow_run_jobs` | `APITOOL` | List the jobs for a workflow run (optional ``filter``: latest/all). |
|
|
160
167
|
| `github_get_workflow_runs` | `APITOOL` | List workflow runs for a repository. |
|
|
161
168
|
| `github_get_workflows` | `APITOOL` | List workflows for a repository. |
|
|
162
169
|
| `github_list_organizations` | `APITOOL` | List organizations. |
|
|
163
170
|
| `github_list_pages_builds` | `APITOOL` | List GitHub Pages builds for a repository (newest first). |
|
|
171
|
+
| `github_merge_pull_request` | `APITOOL` | Merge a pull request (``merge_method`` is merge, squash, or rebase). |
|
|
164
172
|
| `github_remove_collaborator` | `APITOOL` | Remove a collaborator from a repository. |
|
|
165
173
|
| `github_remove_organization_member` | `APITOOL` | Remove a user from an organization (repositories access included). |
|
|
166
174
|
| `github_request_pages_build` | `APITOOL` | Request a fresh GitHub Pages build without pushing a commit. |
|
|
175
|
+
| `github_request_reviewers` | `APITOOL` | Request individual and/or team reviewers on a pull request. |
|
|
167
176
|
| `github_rerun_workflow_run` | `APITOOL` | Re-run a workflow run. |
|
|
168
177
|
| `github_search_code` | `APITOOL` | Search code using query keywords. |
|
|
169
178
|
| `github_search_issues` | `APITOOL` | Search issues using query keywords. |
|
|
@@ -181,7 +190,7 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
181
190
|
|
|
182
191
|
</details>
|
|
183
192
|
|
|
184
|
-
|
|
193
|
+
_14 action-routed tool(s) (default) · 72 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (`condensed` default · `verbose` 1:1 · `both`). Auto-generated — do not edit._
|
|
185
194
|
<!-- MCP-TOOLS-TABLE:END -->
|
|
186
195
|
|
|
187
196
|
Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/mcp.md](docs/mcp.md).
|
|
@@ -243,6 +252,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
243
252
|
"GITHUB_URL": "https://api.github.com",
|
|
244
253
|
"GITHUB_VERIFY": "True",
|
|
245
254
|
"GRAPHQLTOOL": "True",
|
|
255
|
+
"INGESTTOOL": "True",
|
|
246
256
|
"ISSUETOOL": "True",
|
|
247
257
|
"ORGTOOL": "True",
|
|
248
258
|
"PULLTOOL": "True",
|
|
@@ -288,6 +298,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
288
298
|
"GITHUB_URL": "https://api.github.com",
|
|
289
299
|
"GITHUB_VERIFY": "True",
|
|
290
300
|
"GRAPHQLTOOL": "True",
|
|
301
|
+
"INGESTTOOL": "True",
|
|
291
302
|
"ISSUETOOL": "True",
|
|
292
303
|
"ORGTOOL": "True",
|
|
293
304
|
"PULLTOOL": "True",
|
|
@@ -334,6 +345,7 @@ docker run -d \
|
|
|
334
345
|
-e GITHUB_URL=https://api.github.com \
|
|
335
346
|
-e GITHUB_VERIFY=True \
|
|
336
347
|
-e GRAPHQLTOOL=True \
|
|
348
|
+
-e INGESTTOOL=True \
|
|
337
349
|
-e ISSUETOOL=True \
|
|
338
350
|
-e ORGTOOL=True \
|
|
339
351
|
-e PULLTOOL=True \
|
|
@@ -397,6 +409,7 @@ consumed from a **remote deployment**. The
|
|
|
397
409
|
| `COMMITTOOL` | `True` | |
|
|
398
410
|
| `CONTENTTOOL` | `True` | |
|
|
399
411
|
| `GRAPHQLTOOL` | `True` | |
|
|
412
|
+
| `INGESTTOOL` | `True` | |
|
|
400
413
|
| `ISSUETOOL` | `True` | |
|
|
401
414
|
| `ORGTOOL` | `True` | |
|
|
402
415
|
| `PULLTOOL` | `True` | |
|
|
@@ -421,7 +434,7 @@ consumed from a **remote deployment**. The
|
|
|
421
434
|
| `MODEL_ID` | `gpt-4o` | Model id for the agent |
|
|
422
435
|
| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |
|
|
423
436
|
|
|
424
|
-
|
|
437
|
+
_33 package + 12 inherited variable(s). Auto-generated from `.env.example` + the shared agent-utilities set — do not edit._
|
|
425
438
|
<!-- ENV-VARS-TABLE:END -->
|
|
426
439
|
|
|
427
440
|
|
|
@@ -457,6 +470,7 @@ The full list is in the [Available MCP Tools](#available-mcp-tools) table above.
|
|
|
457
470
|
| `COLLABORATORTOOL` | `github_collaborators` — repository collaborators | `True` |
|
|
458
471
|
| `COMMITTOOL` | `github_commits` — commits | `True` |
|
|
459
472
|
| `CONTENTTOOL` | `github_contents` — file contents | `True` |
|
|
473
|
+
| `INGESTTOOL` | `github_ingest_repos` — KG repository ingestion | `True` |
|
|
460
474
|
| `ISSUETOOL` | `github_issues` — issues | `True` |
|
|
461
475
|
| `ORGTOOL` | `github_orgs` — organizations | `True` |
|
|
462
476
|
| `PULLTOOL` | `github_pulls` — pull requests | `True` |
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|

|
|
21
21
|

|
|
22
22
|
|
|
23
|
-
*Version: 1.0
|
|
23
|
+
*Version: 1.1.0*
|
|
24
24
|
|
|
25
25
|
> **Documentation** — Installation, deployment, and usage across the MCP, API, and
|
|
26
26
|
> CLI interfaces, including the integrated A2A agent server, are maintained in the
|
|
@@ -70,9 +70,12 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
70
70
|
| `github_collaborators` | `COLLABORATORTOOL` | Manage repository collaborators. |
|
|
71
71
|
| `github_commits` | `COMMITTOOL` | Manage GitHub commits. |
|
|
72
72
|
| `github_contents` | `CONTENTTOOL` | Manage GitHub contents. |
|
|
73
|
+
| `github_discover_graphql_schema` | `GRAPHQLTOOL` | Discover the live GitHub GraphQL schema (types, fields, and attributes) in real-time. |
|
|
74
|
+
| `github_graphql` | `GRAPHQLTOOL` | Execute raw GraphQL queries and mutations natively on GitHub. |
|
|
75
|
+
| `github_ingest_repos` | `INGESTTOOL` | Natively ingest GitHub repositories into epistemic-graph as typed :Repository nodes. |
|
|
73
76
|
| `github_issues` | `ISSUETOOL` | Manage GitHub issues. |
|
|
74
77
|
| `github_orgs` | `ORGTOOL` | Manage GitHub organizations. |
|
|
75
|
-
| `github_pulls` | `PULLTOOL` | Manage GitHub pull requests. |
|
|
78
|
+
| `github_pulls` | `PULLTOOL` | Manage GitHub pull requests and their review/merge lifecycle. |
|
|
76
79
|
| `github_releases` | `RELEASETOOL` | Manage repository releases. |
|
|
77
80
|
| `github_repos` | `REPOTOOL` | Manage GitHub repositories and their GitHub Pages sites. |
|
|
78
81
|
| `github_search` | `SEARCHTOOL` | Search GitHub repositories, issues, or code. |
|
|
@@ -80,7 +83,7 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
80
83
|
#### Verbose 1:1 API-mapped tools (`MCP_TOOL_MODE=verbose` or `both`)
|
|
81
84
|
|
|
82
85
|
<details>
|
|
83
|
-
<summary>
|
|
86
|
+
<summary>72 per-operation tools — one per public API method (click to expand)</summary>
|
|
84
87
|
|
|
85
88
|
| MCP Tool | Toggle Env Var | Description |
|
|
86
89
|
|----------|----------------|-------------|
|
|
@@ -94,6 +97,7 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
94
97
|
| `github_create_organization_repository` | `APITOOL` | Create a repository in an organization. |
|
|
95
98
|
| `github_create_pages` | `APITOOL` | Enable GitHub Pages for a repository (HTTP 201). |
|
|
96
99
|
| `github_create_pull_request` | `APITOOL` | Create a new pull request in a repository. |
|
|
100
|
+
| `github_create_pull_request_review` | `APITOOL` | Create a review on a pull request. |
|
|
97
101
|
| `github_create_release` | `APITOOL` | Create a new repository release. |
|
|
98
102
|
| `github_create_repository` | `APITOOL` | Create a new repository for the authenticated user. |
|
|
99
103
|
| `github_delete_branch` | `APITOOL` | Delete a branch in a repository. |
|
|
@@ -125,17 +129,22 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
125
129
|
| `github_get_pull_requests` | `APITOOL` | List pull requests for a repository. |
|
|
126
130
|
| `github_get_release` | `APITOOL` | Get a single repository release. |
|
|
127
131
|
| `github_get_releases` | `APITOOL` | List repository releases. |
|
|
132
|
+
| `github_get_repo_secret_public_key` | `APITOOL` | Get the public key for encrypting repository Actions secrets. |
|
|
128
133
|
| `github_get_repo_secrets` | `APITOOL` | List repository Actions secrets names. |
|
|
129
134
|
| `github_get_repositories` | `APITOOL` | List repositories for the authenticated user. |
|
|
130
135
|
| `github_get_repository` | `APITOOL` | Get a specific repository. |
|
|
136
|
+
| `github_get_workflow_job_logs` | `APITOOL` | Download the plaintext logs for a single workflow job. |
|
|
131
137
|
| `github_get_workflow_run` | `APITOOL` | Get a single workflow run. |
|
|
138
|
+
| `github_get_workflow_run_jobs` | `APITOOL` | List the jobs for a workflow run (optional ``filter``: latest/all). |
|
|
132
139
|
| `github_get_workflow_runs` | `APITOOL` | List workflow runs for a repository. |
|
|
133
140
|
| `github_get_workflows` | `APITOOL` | List workflows for a repository. |
|
|
134
141
|
| `github_list_organizations` | `APITOOL` | List organizations. |
|
|
135
142
|
| `github_list_pages_builds` | `APITOOL` | List GitHub Pages builds for a repository (newest first). |
|
|
143
|
+
| `github_merge_pull_request` | `APITOOL` | Merge a pull request (``merge_method`` is merge, squash, or rebase). |
|
|
136
144
|
| `github_remove_collaborator` | `APITOOL` | Remove a collaborator from a repository. |
|
|
137
145
|
| `github_remove_organization_member` | `APITOOL` | Remove a user from an organization (repositories access included). |
|
|
138
146
|
| `github_request_pages_build` | `APITOOL` | Request a fresh GitHub Pages build without pushing a commit. |
|
|
147
|
+
| `github_request_reviewers` | `APITOOL` | Request individual and/or team reviewers on a pull request. |
|
|
139
148
|
| `github_rerun_workflow_run` | `APITOOL` | Re-run a workflow run. |
|
|
140
149
|
| `github_search_code` | `APITOOL` | Search code using query keywords. |
|
|
141
150
|
| `github_search_issues` | `APITOOL` | Search issues using query keywords. |
|
|
@@ -153,7 +162,7 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
153
162
|
|
|
154
163
|
</details>
|
|
155
164
|
|
|
156
|
-
|
|
165
|
+
_14 action-routed tool(s) (default) · 72 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (`condensed` default · `verbose` 1:1 · `both`). Auto-generated — do not edit._
|
|
157
166
|
<!-- MCP-TOOLS-TABLE:END -->
|
|
158
167
|
|
|
159
168
|
Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/mcp.md](docs/mcp.md).
|
|
@@ -215,6 +224,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
215
224
|
"GITHUB_URL": "https://api.github.com",
|
|
216
225
|
"GITHUB_VERIFY": "True",
|
|
217
226
|
"GRAPHQLTOOL": "True",
|
|
227
|
+
"INGESTTOOL": "True",
|
|
218
228
|
"ISSUETOOL": "True",
|
|
219
229
|
"ORGTOOL": "True",
|
|
220
230
|
"PULLTOOL": "True",
|
|
@@ -260,6 +270,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
260
270
|
"GITHUB_URL": "https://api.github.com",
|
|
261
271
|
"GITHUB_VERIFY": "True",
|
|
262
272
|
"GRAPHQLTOOL": "True",
|
|
273
|
+
"INGESTTOOL": "True",
|
|
263
274
|
"ISSUETOOL": "True",
|
|
264
275
|
"ORGTOOL": "True",
|
|
265
276
|
"PULLTOOL": "True",
|
|
@@ -306,6 +317,7 @@ docker run -d \
|
|
|
306
317
|
-e GITHUB_URL=https://api.github.com \
|
|
307
318
|
-e GITHUB_VERIFY=True \
|
|
308
319
|
-e GRAPHQLTOOL=True \
|
|
320
|
+
-e INGESTTOOL=True \
|
|
309
321
|
-e ISSUETOOL=True \
|
|
310
322
|
-e ORGTOOL=True \
|
|
311
323
|
-e PULLTOOL=True \
|
|
@@ -369,6 +381,7 @@ consumed from a **remote deployment**. The
|
|
|
369
381
|
| `COMMITTOOL` | `True` | |
|
|
370
382
|
| `CONTENTTOOL` | `True` | |
|
|
371
383
|
| `GRAPHQLTOOL` | `True` | |
|
|
384
|
+
| `INGESTTOOL` | `True` | |
|
|
372
385
|
| `ISSUETOOL` | `True` | |
|
|
373
386
|
| `ORGTOOL` | `True` | |
|
|
374
387
|
| `PULLTOOL` | `True` | |
|
|
@@ -393,7 +406,7 @@ consumed from a **remote deployment**. The
|
|
|
393
406
|
| `MODEL_ID` | `gpt-4o` | Model id for the agent |
|
|
394
407
|
| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |
|
|
395
408
|
|
|
396
|
-
|
|
409
|
+
_33 package + 12 inherited variable(s). Auto-generated from `.env.example` + the shared agent-utilities set — do not edit._
|
|
397
410
|
<!-- ENV-VARS-TABLE:END -->
|
|
398
411
|
|
|
399
412
|
|
|
@@ -429,6 +442,7 @@ The full list is in the [Available MCP Tools](#available-mcp-tools) table above.
|
|
|
429
442
|
| `COLLABORATORTOOL` | `github_collaborators` — repository collaborators | `True` |
|
|
430
443
|
| `COMMITTOOL` | `github_commits` — commits | `True` |
|
|
431
444
|
| `CONTENTTOOL` | `github_contents` — file contents | `True` |
|
|
445
|
+
| `INGESTTOOL` | `github_ingest_repos` — KG repository ingestion | `True` |
|
|
432
446
|
| `ISSUETOOL` | `github_issues` — issues | `True` |
|
|
433
447
|
| `ORGTOOL` | `github_orgs` — organizations | `True` |
|
|
434
448
|
| `PULLTOOL` | `github_pulls` — pull requests | `True` |
|
|
@@ -86,3 +86,88 @@ class Api(BaseApiClient):
|
|
|
86
86
|
return Response(response=response, data=parsed_data)
|
|
87
87
|
except ValidationError as e:
|
|
88
88
|
raise ParameterError(f"Invalid parameters: {e.errors()}") from e
|
|
89
|
+
|
|
90
|
+
@require_auth
|
|
91
|
+
def create_pull_request_review(
|
|
92
|
+
self,
|
|
93
|
+
owner: str,
|
|
94
|
+
repo: str,
|
|
95
|
+
number: int,
|
|
96
|
+
event: str = "APPROVE",
|
|
97
|
+
body: str | None = None,
|
|
98
|
+
**kwargs,
|
|
99
|
+
) -> Response:
|
|
100
|
+
"""Create a review on a pull request.
|
|
101
|
+
|
|
102
|
+
``event`` is one of APPROVE, REQUEST_CHANGES, or COMMENT (GitHub requires
|
|
103
|
+
a ``body`` for REQUEST_CHANGES/COMMENT).
|
|
104
|
+
"""
|
|
105
|
+
payload = {"event": event, **kwargs}
|
|
106
|
+
if body is not None:
|
|
107
|
+
payload["body"] = body
|
|
108
|
+
response = self._session.post(
|
|
109
|
+
url=f"{self.url}/repos/{owner}/{repo}/pulls/{number}/reviews",
|
|
110
|
+
json=payload,
|
|
111
|
+
headers=self.headers,
|
|
112
|
+
verify=self.verify,
|
|
113
|
+
proxies=self.proxies,
|
|
114
|
+
)
|
|
115
|
+
response.raise_for_status()
|
|
116
|
+
return Response(response=response, data=response.json())
|
|
117
|
+
|
|
118
|
+
@require_auth
|
|
119
|
+
def merge_pull_request(
|
|
120
|
+
self,
|
|
121
|
+
owner: str,
|
|
122
|
+
repo: str,
|
|
123
|
+
number: int,
|
|
124
|
+
merge_method: str = "merge",
|
|
125
|
+
commit_title: str | None = None,
|
|
126
|
+
commit_message: str | None = None,
|
|
127
|
+
sha: str | None = None,
|
|
128
|
+
) -> Response:
|
|
129
|
+
"""Merge a pull request (``merge_method`` is merge, squash, or rebase)."""
|
|
130
|
+
payload: dict = {"merge_method": merge_method}
|
|
131
|
+
if commit_title is not None:
|
|
132
|
+
payload["commit_title"] = commit_title
|
|
133
|
+
if commit_message is not None:
|
|
134
|
+
payload["commit_message"] = commit_message
|
|
135
|
+
if sha is not None:
|
|
136
|
+
payload["sha"] = sha
|
|
137
|
+
response = self._session.put(
|
|
138
|
+
url=f"{self.url}/repos/{owner}/{repo}/pulls/{number}/merge",
|
|
139
|
+
json=payload,
|
|
140
|
+
headers=self.headers,
|
|
141
|
+
verify=self.verify,
|
|
142
|
+
proxies=self.proxies,
|
|
143
|
+
)
|
|
144
|
+
response.raise_for_status()
|
|
145
|
+
return Response(response=response, data=response.json())
|
|
146
|
+
|
|
147
|
+
@require_auth
|
|
148
|
+
def request_reviewers(
|
|
149
|
+
self,
|
|
150
|
+
owner: str,
|
|
151
|
+
repo: str,
|
|
152
|
+
number: int,
|
|
153
|
+
reviewers: list | None = None,
|
|
154
|
+
team_reviewers: list | None = None,
|
|
155
|
+
) -> Response:
|
|
156
|
+
"""Request individual and/or team reviewers on a pull request."""
|
|
157
|
+
payload: dict = {}
|
|
158
|
+
if reviewers is not None:
|
|
159
|
+
payload["reviewers"] = reviewers
|
|
160
|
+
if team_reviewers is not None:
|
|
161
|
+
payload["team_reviewers"] = team_reviewers
|
|
162
|
+
response = self._session.post(
|
|
163
|
+
url=f"{self.url}/repos/{owner}/{repo}/pulls/{number}/requested_reviewers",
|
|
164
|
+
json=payload,
|
|
165
|
+
headers=self.headers,
|
|
166
|
+
verify=self.verify,
|
|
167
|
+
proxies=self.proxies,
|
|
168
|
+
)
|
|
169
|
+
response.raise_for_status()
|
|
170
|
+
try:
|
|
171
|
+
return Response(response=response, data=PullRequest(**response.json()))
|
|
172
|
+
except ValidationError as e:
|
|
173
|
+
raise ParameterError(f"Invalid parameters: {e.errors()}") from e
|
|
@@ -157,6 +157,18 @@ class Api(BaseApiClient):
|
|
|
157
157
|
response.raise_for_status()
|
|
158
158
|
return Response(response=response, data={"status": "removed"})
|
|
159
159
|
|
|
160
|
+
@require_auth
|
|
161
|
+
def get_repo_secret_public_key(self, owner: str, repo: str) -> Response:
|
|
162
|
+
"""Get the public key for encrypting repository Actions secrets."""
|
|
163
|
+
response = self._session.get(
|
|
164
|
+
url=f"{self.url}/repos/{owner}/{repo}/actions/secrets/public-key",
|
|
165
|
+
headers=self.headers,
|
|
166
|
+
verify=self.verify,
|
|
167
|
+
proxies=self.proxies,
|
|
168
|
+
)
|
|
169
|
+
response.raise_for_status()
|
|
170
|
+
return Response(response=response, data=response.json())
|
|
171
|
+
|
|
160
172
|
@require_auth
|
|
161
173
|
def get_repo_secrets(self, owner: str, repo: str) -> Response:
|
|
162
174
|
"""List repository Actions secrets names."""
|
|
@@ -132,3 +132,39 @@ class Api(BaseApiClient):
|
|
|
132
132
|
)
|
|
133
133
|
response.raise_for_status()
|
|
134
134
|
return Response(response=response, data={"status": "deleted"})
|
|
135
|
+
|
|
136
|
+
@require_auth
|
|
137
|
+
def get_workflow_run_jobs(
|
|
138
|
+
self, owner: str, repo: str, run_id: int, **kwargs
|
|
139
|
+
) -> Response:
|
|
140
|
+
"""List the jobs for a workflow run (optional ``filter``: latest/all)."""
|
|
141
|
+
response = self._session.get(
|
|
142
|
+
url=f"{self.url}/repos/{owner}/{repo}/actions/runs/{run_id}/jobs",
|
|
143
|
+
params=kwargs or None,
|
|
144
|
+
headers=self.headers,
|
|
145
|
+
verify=self.verify,
|
|
146
|
+
proxies=self.proxies,
|
|
147
|
+
)
|
|
148
|
+
response.raise_for_status()
|
|
149
|
+
res_json = response.json()
|
|
150
|
+
jobs = res_json.get("jobs", []) if isinstance(res_json, dict) else res_json
|
|
151
|
+
return Response(response=response, data=jobs)
|
|
152
|
+
|
|
153
|
+
@require_auth
|
|
154
|
+
def get_workflow_job_logs(self, owner: str, repo: str, job_id: int) -> Response:
|
|
155
|
+
"""Download the plaintext logs for a single workflow job.
|
|
156
|
+
|
|
157
|
+
GitHub answers with a 302 redirect to a short-lived log URL; the session
|
|
158
|
+
follows it and returns the decoded text.
|
|
159
|
+
"""
|
|
160
|
+
response = self._session.get(
|
|
161
|
+
url=f"{self.url}/repos/{owner}/{repo}/actions/jobs/{job_id}/logs",
|
|
162
|
+
headers=self.headers,
|
|
163
|
+
verify=self.verify,
|
|
164
|
+
proxies=self.proxies,
|
|
165
|
+
allow_redirects=True,
|
|
166
|
+
)
|
|
167
|
+
response.raise_for_status()
|
|
168
|
+
return Response(
|
|
169
|
+
response=response, data={"job_id": job_id, "logs": response.text}
|
|
170
|
+
)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Tier-1 mcp_tool source presets for github-agent (AU-KG.ingest.mcp-tool-connector). Syncs GitHub repositories into the KG as repository documents via the github-agent MCP server. Contributed presets win over the central MCP_TOOL_PRESETS. Extend with pull-request / issue presets as needed.",
|
|
3
|
+
"github-repositories": {
|
|
4
|
+
"server": "github-agent",
|
|
5
|
+
"tool": "github_repos",
|
|
6
|
+
"action": "list",
|
|
7
|
+
"records_path": "data",
|
|
8
|
+
"id_field": "id",
|
|
9
|
+
"title_field": "full_name",
|
|
10
|
+
"text_field": "description",
|
|
11
|
+
"updated_field": "updated_at",
|
|
12
|
+
"pagination": "page",
|
|
13
|
+
"page_kind": "page",
|
|
14
|
+
"page_param": "page",
|
|
15
|
+
"page_size_param": "per_page",
|
|
16
|
+
"doc_type": "repository"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -50,7 +50,9 @@ class GraphQL:
|
|
|
50
50
|
verify=verify,
|
|
51
51
|
proxies=proxies,
|
|
52
52
|
)
|
|
53
|
-
self.client = Client(
|
|
53
|
+
self.client = Client(
|
|
54
|
+
transport=self.transport, fetch_schema_from_transport=False
|
|
55
|
+
)
|
|
54
56
|
|
|
55
57
|
@staticmethod
|
|
56
58
|
def _graphql_endpoint(url: str) -> str:
|
|
@@ -86,3 +88,40 @@ class GraphQL:
|
|
|
86
88
|
except Exception as e:
|
|
87
89
|
logging.error(f"GraphQL execution failed: {str(e)}")
|
|
88
90
|
raise ParameterError(f"Query execution failed: {str(e)}") from e
|
|
91
|
+
|
|
92
|
+
def enable_pull_request_auto_merge(
|
|
93
|
+
self, pull_request_id: str, merge_method: str = "MERGE"
|
|
94
|
+
) -> dict[str, Any]:
|
|
95
|
+
"""Enable auto-merge on a pull request (no REST equivalent exists).
|
|
96
|
+
|
|
97
|
+
``pull_request_id`` is the PR's GraphQL node id; ``merge_method`` is one
|
|
98
|
+
of MERGE, SQUASH, or REBASE. Auto-merge queues the PR to merge once its
|
|
99
|
+
required status checks pass and approvals are satisfied.
|
|
100
|
+
"""
|
|
101
|
+
mutation = """
|
|
102
|
+
mutation($pullRequestId: ID!, $mergeMethod: PullRequestMergeMethod!) {
|
|
103
|
+
enablePullRequestAutoMerge(
|
|
104
|
+
input: {pullRequestId: $pullRequestId, mergeMethod: $mergeMethod}
|
|
105
|
+
) {
|
|
106
|
+
pullRequest {
|
|
107
|
+
number
|
|
108
|
+
autoMergeRequest { enabledAt mergeMethod }
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
"""
|
|
113
|
+
return self.execute_gql(
|
|
114
|
+
mutation,
|
|
115
|
+
{"pullRequestId": pull_request_id, "mergeMethod": merge_method.upper()},
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
def disable_pull_request_auto_merge(self, pull_request_id: str) -> dict[str, Any]:
|
|
119
|
+
"""Disable a previously-enabled auto-merge on a pull request (GraphQL)."""
|
|
120
|
+
mutation = """
|
|
121
|
+
mutation($pullRequestId: ID!) {
|
|
122
|
+
disablePullRequestAutoMerge(input: {pullRequestId: $pullRequestId}) {
|
|
123
|
+
pullRequest { number }
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
"""
|
|
127
|
+
return self.execute_gql(mutation, {"pullRequestId": pull_request_id})
|