github-mcp-agent 0.1.0__tar.gz → 0.2.1__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_agent-0.1.0 → github_mcp_agent-0.2.1}/.gitignore +2 -0
- github_mcp_agent-0.2.1/LICENSE +21 -0
- github_mcp_agent-0.2.1/PKG-INFO +147 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/README.md +11 -5
- github_mcp_agent-0.2.1/assets/demo1.png +0 -0
- github_mcp_agent-0.2.1/assets/demo2.png +0 -0
- github_mcp_agent-0.2.1/assets/demo3.png +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/providers/__init__.py +0 -1
- github_mcp_agent-0.2.1/github_mcp_agent/providers/copilot.py +117 -0
- github_mcp_agent-0.2.1/pyproject.toml +50 -0
- github_mcp_agent-0.1.0/PKG-INFO +0 -14
- github_mcp_agent-0.1.0/github_mcp_agent/providers/copilot.py +0 -32
- github_mcp_agent-0.1.0/pyproject.toml +0 -29
- github_mcp_agent-0.1.0/uv.lock +0 -2693
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/.claude/settings.json +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/.claude/settings.local.json +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/.env.example +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/__init__.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/agent.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/cli.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/providers/anthropic.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/providers/bedrock.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/providers/gemini.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/providers/ollama.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/providers/openai.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/setup_wizard.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/system_prompt.txt +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/github_mcp_agent/tools.py +0 -0
- {github_mcp_agent-0.1.0 → github_mcp_agent-0.2.1}/system_prompt.txt +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Omar Hany
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: github-mcp-agent
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
Summary: Talk to your GitHub repos, issues, and project boards in plain English from your terminal
|
|
5
|
+
Project-URL: Homepage, https://github.com/OmarCodes022/GitHub-MCP-Agent
|
|
6
|
+
Project-URL: Repository, https://github.com/OmarCodes022/GitHub-MCP-Agent
|
|
7
|
+
Project-URL: Issues, https://github.com/OmarCodes022/GitHub-MCP-Agent/issues
|
|
8
|
+
Author-email: Omar Hany <omarhanyabbas2004@gmail.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agent,ai,cli,copilot,github,mcp
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Software Development
|
|
21
|
+
Classifier: Topic :: Utilities
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Requires-Dist: anthropic
|
|
24
|
+
Requires-Dist: boto3
|
|
25
|
+
Requires-Dist: click
|
|
26
|
+
Requires-Dist: litellm
|
|
27
|
+
Requires-Dist: mcp
|
|
28
|
+
Requires-Dist: python-dotenv
|
|
29
|
+
Requires-Dist: questionary
|
|
30
|
+
Requires-Dist: rich
|
|
31
|
+
Requires-Dist: strands-agents
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# GitHub MCP Agent
|
|
35
|
+
|
|
36
|
+
Talk to your GitHub repos, issues, and project boards in plain English from your terminal.
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
You > list open issues in my raytracer repo
|
|
42
|
+
You > set priority of issue #42 to urgent
|
|
43
|
+
You > what's in progress on the project board?
|
|
44
|
+
You > which issues are assigned to maryam?
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Install
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
pip install github-mcp-agent
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Or with uv:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uv tool install github-mcp-agent
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Setup
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
github-agent setup
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Interactive wizard:
|
|
70
|
+
|
|
71
|
+
1. GitHub token (validated immediately)
|
|
72
|
+
2. AI provider — choose one:
|
|
73
|
+
- **AWS Bedrock** — existing profile, access keys, or SSO
|
|
74
|
+
- **Anthropic API** — API key from console.anthropic.com
|
|
75
|
+
- **OpenAI** — API key from platform.openai.com
|
|
76
|
+
- **Google Gemini** — API key from aistudio.google.com
|
|
77
|
+
- **GitHub Copilot** — browser OAuth flow, requires a Copilot subscription
|
|
78
|
+
- **Local (Ollama)** — picks from your installed models, no API key needed
|
|
79
|
+
3. Model selection (scrollable menu)
|
|
80
|
+
4. Pulls the GitHub MCP Docker image
|
|
81
|
+
|
|
82
|
+
Config saved to `~/.config/github-mcp-agent/.env`.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Usage
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
github-agent # start the agent
|
|
90
|
+
github-agent setup # full setup wizard
|
|
91
|
+
github-agent provider # switch AI provider and model
|
|
92
|
+
github-agent model # switch model within current provider
|
|
93
|
+
github-agent token # update GitHub token
|
|
94
|
+
github-agent config # edit config file in $EDITOR
|
|
95
|
+
github-agent prompt # customize the system prompt in $EDITOR
|
|
96
|
+
github-agent -v # start with verbose tool output
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Requirements
|
|
102
|
+
|
|
103
|
+
| Requirement | Notes |
|
|
104
|
+
|---|---|
|
|
105
|
+
| Python 3.10+ | |
|
|
106
|
+
| Docker | Must be running — used for the GitHub MCP server |
|
|
107
|
+
| GitHub token | Scopes: `repo`, `read:org`, `project` — [github.com/settings/tokens](https://github.com/settings/tokens) |
|
|
108
|
+
| Provider credentials | See setup wizard |
|
|
109
|
+
|
|
110
|
+
**For AWS Bedrock:** enable Claude model access in the [Bedrock console](https://console.aws.amazon.com/bedrock) under Model access.
|
|
111
|
+
|
|
112
|
+
**For Ollama:** install from [ollama.com](https://ollama.com), run `ollama serve`. Models with good tool-calling support: `qwen2.5`, `llama3.1`, `mistral`.
|
|
113
|
+
|
|
114
|
+
**For GitHub Copilot:** requires an active Copilot subscription (student pack, individual, or business).
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## How it works
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
You (terminal)
|
|
122
|
+
│
|
|
123
|
+
▼
|
|
124
|
+
github-agent (CLI)
|
|
125
|
+
│
|
|
126
|
+
├── AI model (Bedrock / Anthropic / OpenAI / Gemini / Copilot / Ollama)
|
|
127
|
+
│
|
|
128
|
+
└── GitHub MCP Server (Docker)
|
|
129
|
+
│
|
|
130
|
+
└── GitHub API
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Uses the [Strands Agents SDK](https://github.com/strands-agents/sdk-python) with the [GitHub MCP server](https://github.com/github/github-mcp-server).
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Troubleshooting
|
|
138
|
+
|
|
139
|
+
**`GITHUB_TOKEN` not set** — run `github-agent setup`
|
|
140
|
+
|
|
141
|
+
**Docker not running** — start Docker Desktop or `sudo systemctl start docker`
|
|
142
|
+
|
|
143
|
+
**Bedrock access denied** — check IAM permissions and model access in your region
|
|
144
|
+
|
|
145
|
+
**Ollama model not found** — run `ollama list` to confirm the model name, re-run `github-agent model`
|
|
146
|
+
|
|
147
|
+
**`No module named github_mcp_agent`** — reinstall with `pip install github-mcp-agent` or `uv tool install github-mcp-agent`
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Talk to your GitHub repos, issues, and project boards in plain English from your terminal.
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
5
7
|
```
|
|
6
8
|
You > list open issues in my raytracer repo
|
|
7
9
|
You > set priority of issue #42 to urgent
|
|
@@ -14,9 +16,13 @@ You > which issues are assigned to maryam?
|
|
|
14
16
|
## Install
|
|
15
17
|
|
|
16
18
|
```bash
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
pip install github-mcp-agent
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or with uv:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv tool install github-mcp-agent
|
|
20
26
|
```
|
|
21
27
|
|
|
22
28
|
---
|
|
@@ -35,7 +41,7 @@ Interactive wizard:
|
|
|
35
41
|
- **Anthropic API** — API key from console.anthropic.com
|
|
36
42
|
- **OpenAI** — API key from platform.openai.com
|
|
37
43
|
- **Google Gemini** — API key from aistudio.google.com
|
|
38
|
-
- **GitHub Copilot** —
|
|
44
|
+
- **GitHub Copilot** — browser OAuth flow, requires a Copilot subscription
|
|
39
45
|
- **Local (Ollama)** — picks from your installed models, no API key needed
|
|
40
46
|
3. Model selection (scrollable menu)
|
|
41
47
|
4. Pulls the GitHub MCP Docker image
|
|
@@ -105,4 +111,4 @@ Uses the [Strands Agents SDK](https://github.com/strands-agents/sdk-python) with
|
|
|
105
111
|
|
|
106
112
|
**Ollama model not found** — run `ollama list` to confirm the model name, re-run `github-agent model`
|
|
107
113
|
|
|
108
|
-
**`No module named github_mcp_agent`** — reinstall with `
|
|
114
|
+
**`No module named github_mcp_agent`** — reinstall with `pip install github-mcp-agent` or `uv tool install github-mcp-agent`
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -29,4 +29,3 @@ def setup(provider: str, _ask) -> dict:
|
|
|
29
29
|
if mod is None:
|
|
30
30
|
raise RuntimeError(f"Unknown provider: {provider}")
|
|
31
31
|
return mod.setup(_ask)
|
|
32
|
-
pypi-AgEIcHlwaS5vcmcCJGU0ZDI1YWQ5LTEyOGMtNDUyZi1iNmZkLTEzOWU0MmRkNDIzOAACKlszLCJjZTAzNzUyYy00ZjNhLTQ3MTYtYjM2ZS02YmY0ZGNhZjkyMDciXQAABiD04xa6bIcHRFlnmMHzKPunpg81Z6OhNO_P102kWxtY9g
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import time
|
|
3
|
+
import urllib.error
|
|
4
|
+
import urllib.parse
|
|
5
|
+
import urllib.request
|
|
6
|
+
|
|
7
|
+
import questionary
|
|
8
|
+
|
|
9
|
+
MODELS = [
|
|
10
|
+
("gpt-4o", "gpt-4o", "flagship"),
|
|
11
|
+
("gpt-4o-mini", "gpt-4o-mini", "fast, cheap"),
|
|
12
|
+
("claude-sonnet-4-5", "claude-sonnet-4-5", "Anthropic via Copilot"),
|
|
13
|
+
("o3-mini", "o3-mini", "reasoning"),
|
|
14
|
+
("gemini-1.5-pro", "gemini-1.5-pro", "Google via Copilot"),
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
_CLIENT_ID = "Iv1.b507a08c87ecfe98"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _device_flow() -> str:
|
|
21
|
+
"""Run GitHub device flow with the Copilot OAuth client, return an access token."""
|
|
22
|
+
from rich.console import Console
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
data = urllib.parse.urlencode({"client_id": _CLIENT_ID, "scope": "read:user"}).encode()
|
|
26
|
+
req = urllib.request.Request(
|
|
27
|
+
"https://github.com/login/device/code",
|
|
28
|
+
data=data,
|
|
29
|
+
headers={"Accept": "application/json"},
|
|
30
|
+
)
|
|
31
|
+
with urllib.request.urlopen(req) as r:
|
|
32
|
+
device = json.loads(r.read())
|
|
33
|
+
|
|
34
|
+
console.print(f"\n Open: [bold cyan]{device['verification_uri']}[/bold cyan]")
|
|
35
|
+
console.print(f" Code: [bold yellow]{device['user_code']}[/bold yellow]\n")
|
|
36
|
+
|
|
37
|
+
interval = device.get("interval", 5)
|
|
38
|
+
deadline = time.time() + device.get("expires_in", 900)
|
|
39
|
+
|
|
40
|
+
while time.time() < deadline:
|
|
41
|
+
time.sleep(interval)
|
|
42
|
+
poll_data = urllib.parse.urlencode({
|
|
43
|
+
"client_id": _CLIENT_ID,
|
|
44
|
+
"device_code": device["device_code"],
|
|
45
|
+
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
|
|
46
|
+
}).encode()
|
|
47
|
+
poll_req = urllib.request.Request(
|
|
48
|
+
"https://github.com/login/oauth/access_token",
|
|
49
|
+
data=poll_data,
|
|
50
|
+
headers={"Accept": "application/json"},
|
|
51
|
+
)
|
|
52
|
+
with urllib.request.urlopen(poll_req) as r:
|
|
53
|
+
result = json.loads(r.read())
|
|
54
|
+
|
|
55
|
+
if "access_token" in result:
|
|
56
|
+
return result["access_token"]
|
|
57
|
+
error = result.get("error", "")
|
|
58
|
+
if error == "slow_down":
|
|
59
|
+
interval += 5
|
|
60
|
+
elif error not in ("authorization_pending",):
|
|
61
|
+
raise RuntimeError(f"Auth failed: {result.get('error_description', error)}")
|
|
62
|
+
|
|
63
|
+
raise RuntimeError("Authentication timed out.")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _get_copilot_token(oauth_token: str) -> str:
|
|
67
|
+
"""Exchange a Copilot OAuth token for a short-lived Copilot API token."""
|
|
68
|
+
req = urllib.request.Request("https://api.github.com/copilot_internal/v2/token")
|
|
69
|
+
req.add_header("Authorization", f"token {oauth_token}")
|
|
70
|
+
req.add_header("Accept", "application/json")
|
|
71
|
+
req.add_header("Editor-Version", "vscode/1.85.0")
|
|
72
|
+
req.add_header("Editor-Plugin-Version", "copilot/1.138.0")
|
|
73
|
+
req.add_header("User-Agent", "GithubCopilot/1.138.0")
|
|
74
|
+
try:
|
|
75
|
+
with urllib.request.urlopen(req) as r:
|
|
76
|
+
return json.loads(r.read())["token"]
|
|
77
|
+
except urllib.error.HTTPError as e:
|
|
78
|
+
raise RuntimeError(
|
|
79
|
+
f"Failed to get Copilot token (HTTP {e.code}).\n"
|
|
80
|
+
"Make sure you have an active Copilot subscription."
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def build_model(model_id: str):
|
|
85
|
+
import os
|
|
86
|
+
from strands.models.litellm import LiteLLMModel
|
|
87
|
+
oauth_token = os.environ.get("COPILOT_OAUTH_TOKEN")
|
|
88
|
+
if not oauth_token:
|
|
89
|
+
raise RuntimeError("Copilot token not set. Run 'github-agent provider' and pick GitHub Copilot.")
|
|
90
|
+
token = _get_copilot_token(oauth_token)
|
|
91
|
+
return LiteLLMModel(
|
|
92
|
+
model_id=f"openai/{model_id}",
|
|
93
|
+
params={
|
|
94
|
+
"api_base": "https://api.githubcopilot.com",
|
|
95
|
+
"api_key": token,
|
|
96
|
+
"extra_headers": {
|
|
97
|
+
"Editor-Version": "vscode/1.85.0",
|
|
98
|
+
"Editor-Plugin-Version": "copilot/1.138.0",
|
|
99
|
+
"User-Agent": "GithubCopilot/1.138.0",
|
|
100
|
+
"Copilot-Integration-Id": "vscode-chat",
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def setup(_ask) -> dict:
|
|
107
|
+
from rich.console import Console
|
|
108
|
+
console = Console()
|
|
109
|
+
console.print(" [dim]Requires an active Copilot subscription (student pack, individual, or business).[/dim]")
|
|
110
|
+
console.print(" [dim]Opening browser to authenticate with GitHub Copilot...[/dim]\n")
|
|
111
|
+
|
|
112
|
+
oauth_token = _device_flow()
|
|
113
|
+
|
|
114
|
+
model_choices = [f"{name} ({desc})" for _, name, desc in MODELS]
|
|
115
|
+
model_display = _ask(questionary.select, "Model:", choices=model_choices)
|
|
116
|
+
model_id = MODELS[model_choices.index(model_display)][0]
|
|
117
|
+
return {"COPILOT_OAUTH_TOKEN": oauth_token, "MODEL_ID": model_id}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "github-mcp-agent"
|
|
3
|
+
version = "0.2.1"
|
|
4
|
+
description = "Talk to your GitHub repos, issues, and project boards in plain English from your terminal"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = { text = "MIT" }
|
|
7
|
+
requires-python = ">=3.10"
|
|
8
|
+
authors = [{ name = "Omar Hany", email = "omarhanyabbas2004@gmail.com" }]
|
|
9
|
+
keywords = ["github", "ai", "agent", "mcp", "cli", "copilot"]
|
|
10
|
+
classifiers = [
|
|
11
|
+
"Development Status :: 4 - Beta",
|
|
12
|
+
"Environment :: Console",
|
|
13
|
+
"Intended Audience :: Developers",
|
|
14
|
+
"License :: OSI Approved :: MIT License",
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"Programming Language :: Python :: 3.10",
|
|
17
|
+
"Programming Language :: Python :: 3.11",
|
|
18
|
+
"Programming Language :: Python :: 3.12",
|
|
19
|
+
"Topic :: Software Development",
|
|
20
|
+
"Topic :: Utilities",
|
|
21
|
+
]
|
|
22
|
+
dependencies = [
|
|
23
|
+
"boto3",
|
|
24
|
+
"strands-agents",
|
|
25
|
+
"mcp",
|
|
26
|
+
"rich",
|
|
27
|
+
"python-dotenv",
|
|
28
|
+
"questionary",
|
|
29
|
+
"anthropic",
|
|
30
|
+
"litellm",
|
|
31
|
+
"click",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
[project.urls]
|
|
35
|
+
Homepage = "https://github.com/OmarCodes022/GitHub-MCP-Agent"
|
|
36
|
+
Repository = "https://github.com/OmarCodes022/GitHub-MCP-Agent"
|
|
37
|
+
Issues = "https://github.com/OmarCodes022/GitHub-MCP-Agent/issues"
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
github-agent = "github_mcp_agent.cli:main"
|
|
41
|
+
|
|
42
|
+
[build-system]
|
|
43
|
+
requires = ["hatchling"]
|
|
44
|
+
build-backend = "hatchling.build"
|
|
45
|
+
|
|
46
|
+
[tool.hatch.build.targets.wheel]
|
|
47
|
+
packages = ["github_mcp_agent"]
|
|
48
|
+
|
|
49
|
+
[tool.hatch.build.targets.wheel.sources]
|
|
50
|
+
"github_mcp_agent" = "github_mcp_agent"
|
github_mcp_agent-0.1.0/PKG-INFO
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: github-mcp-agent
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: A GitHub AI agent powered by AWS Bedrock and MCP
|
|
5
|
-
Requires-Python: >=3.10
|
|
6
|
-
Requires-Dist: anthropic
|
|
7
|
-
Requires-Dist: boto3
|
|
8
|
-
Requires-Dist: click
|
|
9
|
-
Requires-Dist: litellm
|
|
10
|
-
Requires-Dist: mcp
|
|
11
|
-
Requires-Dist: python-dotenv
|
|
12
|
-
Requires-Dist: questionary
|
|
13
|
-
Requires-Dist: rich
|
|
14
|
-
Requires-Dist: strands-agents
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
import questionary
|
|
4
|
-
|
|
5
|
-
MODELS = [
|
|
6
|
-
("gpt-4o", "gpt-4o", "flagship"),
|
|
7
|
-
("gpt-4o-mini", "gpt-4o-mini", "fast, cheap"),
|
|
8
|
-
("claude-sonnet-4-5", "claude-sonnet-4-5", "Anthropic via Copilot"),
|
|
9
|
-
("o3-mini", "o3-mini", "reasoning"),
|
|
10
|
-
("gemini-1.5-pro", "gemini-1.5-pro", "Google via Copilot"),
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def build_model(model_id: str):
|
|
15
|
-
from strands.models.litellm import LiteLLMModel
|
|
16
|
-
token = os.environ.get("GITHUB_TOKEN")
|
|
17
|
-
if not token:
|
|
18
|
-
raise RuntimeError("GITHUB_TOKEN is not set. Run 'github-agent setup' to configure.")
|
|
19
|
-
return LiteLLMModel(
|
|
20
|
-
model_id=f"openai/{model_id}",
|
|
21
|
-
params={"api_base": "https://api.githubcopilot.com", "api_key": token},
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def setup(_ask) -> dict:
|
|
26
|
-
from rich.console import Console
|
|
27
|
-
console = Console()
|
|
28
|
-
console.print(" [dim]Uses your GitHub token - no extra API key needed.[/dim]")
|
|
29
|
-
console.print(" [dim]Requires an active Copilot subscription (student pack, individual, or business).[/dim]")
|
|
30
|
-
model_choices = [f"{name} ({desc})" for _, name, desc in MODELS]
|
|
31
|
-
model_display = _ask(questionary.select, "Model:", choices=model_choices)
|
|
32
|
-
return {"MODEL_ID": MODELS[model_choices.index(model_display)][0]}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "github-mcp-agent"
|
|
3
|
-
version = "0.1.0"
|
|
4
|
-
description = "A GitHub AI agent powered by AWS Bedrock and MCP"
|
|
5
|
-
requires-python = ">=3.10"
|
|
6
|
-
dependencies = [
|
|
7
|
-
"boto3",
|
|
8
|
-
"strands-agents",
|
|
9
|
-
"mcp",
|
|
10
|
-
"rich",
|
|
11
|
-
"python-dotenv",
|
|
12
|
-
"questionary",
|
|
13
|
-
"anthropic",
|
|
14
|
-
"litellm",
|
|
15
|
-
"click",
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
[project.scripts]
|
|
19
|
-
github-agent = "github_mcp_agent.cli:main"
|
|
20
|
-
|
|
21
|
-
[build-system]
|
|
22
|
-
requires = ["hatchling"]
|
|
23
|
-
build-backend = "hatchling.build"
|
|
24
|
-
|
|
25
|
-
[tool.hatch.build.targets.wheel]
|
|
26
|
-
packages = ["github_mcp_agent"]
|
|
27
|
-
|
|
28
|
-
[tool.hatch.build.targets.wheel.sources]
|
|
29
|
-
"github_mcp_agent" = "github_mcp_agent"
|