mcp-win-stdio-git 0.2.4__tar.gz → 0.2.5__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.
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/.gitignore +63 -60
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/PKG-INFO +2 -2
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/pyproject.toml +42 -42
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/src/mcp_win_stdio/git/__init__.py +5 -5
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/src/mcp_win_stdio/git/cli.py +27 -22
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/src/mcp_win_stdio/git/guide.py +9 -3
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/src/mcp_win_stdio/git/server.py +285 -366
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/README.md +0 -0
- {mcp_win_stdio_git-0.2.4 → mcp_win_stdio_git-0.2.5}/src/mcp_win_stdio/git/__main__.py +0 -0
|
@@ -1,60 +1,63 @@
|
|
|
1
|
-
__pycache__/
|
|
2
|
-
*.py[cod]
|
|
3
|
-
*$py.class
|
|
4
|
-
*.so
|
|
5
|
-
.Python
|
|
6
|
-
build/
|
|
7
|
-
develop-eggs/
|
|
8
|
-
dist/
|
|
9
|
-
downloads/
|
|
10
|
-
eggs/
|
|
11
|
-
.eggs/
|
|
12
|
-
lib/
|
|
13
|
-
lib64/
|
|
14
|
-
parts/
|
|
15
|
-
sdist/
|
|
16
|
-
var/
|
|
17
|
-
wheels/
|
|
18
|
-
share/python-wheels/
|
|
19
|
-
*.egg-info/
|
|
20
|
-
.installed.cfg
|
|
21
|
-
*.egg
|
|
22
|
-
MANIFEST
|
|
23
|
-
|
|
24
|
-
*.manifest
|
|
25
|
-
*.spec
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
|
|
37
|
-
coverage
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
.
|
|
41
|
-
|
|
42
|
-
cover
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
env
|
|
53
|
-
venv
|
|
54
|
-
|
|
55
|
-
.
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*.
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
*.so
|
|
5
|
+
.Python
|
|
6
|
+
build/
|
|
7
|
+
develop-eggs/
|
|
8
|
+
dist/
|
|
9
|
+
downloads/
|
|
10
|
+
eggs/
|
|
11
|
+
.eggs/
|
|
12
|
+
lib/
|
|
13
|
+
lib64/
|
|
14
|
+
parts/
|
|
15
|
+
sdist/
|
|
16
|
+
var/
|
|
17
|
+
wheels/
|
|
18
|
+
share/python-wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
MANIFEST
|
|
23
|
+
|
|
24
|
+
*.manifest
|
|
25
|
+
*.spec
|
|
26
|
+
api.txt
|
|
27
|
+
pypi-api.txt
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
pip-log.txt
|
|
31
|
+
pip-delete-this-directory.txt
|
|
32
|
+
pypi api.txt
|
|
33
|
+
htmlcov/
|
|
34
|
+
.tox/
|
|
35
|
+
.nox/
|
|
36
|
+
.coverage
|
|
37
|
+
.coverage.*
|
|
38
|
+
.cache
|
|
39
|
+
nosetests.xml
|
|
40
|
+
coverage.xml
|
|
41
|
+
*.cover
|
|
42
|
+
*.py,cover
|
|
43
|
+
.hypothesis/
|
|
44
|
+
.pytest_cache/
|
|
45
|
+
cover/
|
|
46
|
+
|
|
47
|
+
*.mo
|
|
48
|
+
*.pot
|
|
49
|
+
|
|
50
|
+
.env
|
|
51
|
+
.venv
|
|
52
|
+
env/
|
|
53
|
+
venv/
|
|
54
|
+
ENV/
|
|
55
|
+
env.bak/
|
|
56
|
+
venv.bak/
|
|
57
|
+
|
|
58
|
+
.idea/
|
|
59
|
+
.vscode/
|
|
60
|
+
*.swp
|
|
61
|
+
*.swo
|
|
62
|
+
|
|
63
|
+
*.log
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: mcp-win-stdio-git
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Unified Git & GitHub Model Context Protocol (MCP) server for Windows & Claude: 33 tools combining local Git repository management (init, remotes, restore, bookmarks, branching, commits, diffs) and remote GitHub CLI (gh) operations with hybrid synergy workflows.
|
|
5
5
|
Author: Mohan Kumar Indala
|
|
6
6
|
License-Expression: MIT
|
|
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.14
|
|
19
19
|
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
20
20
|
Requires-Python: >=3.10
|
|
21
|
-
Requires-Dist: mcp-win-stdio>=0.2.
|
|
21
|
+
Requires-Dist: mcp-win-stdio>=0.2.5
|
|
22
22
|
Requires-Dist: mcp>=1.2.0
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["hatchling"]
|
|
3
|
-
build-backend = "hatchling.build"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "mcp-win-stdio-git"
|
|
7
|
-
version = "0.2.
|
|
8
|
-
description = "Unified Git & GitHub Model Context Protocol (MCP) server for Windows & Claude: 33 tools combining local Git repository management (init, remotes, restore, bookmarks, branching, commits, diffs) and remote GitHub CLI (gh) operations with hybrid synergy workflows."
|
|
9
|
-
readme = "README.md"
|
|
10
|
-
|
|
11
|
-
requires-python = ">=3.10"
|
|
12
|
-
license = "MIT"
|
|
13
|
-
authors = [
|
|
14
|
-
{ name = "Mohan Kumar Indala" }
|
|
15
|
-
]
|
|
16
|
-
keywords = ["mcp", "claude", "git", "github", "gh", "version-control", "pull-requests", "issues", "actions", "ai", "llm"]
|
|
17
|
-
classifiers = [
|
|
18
|
-
"Development Status :: 4 - Beta",
|
|
19
|
-
"Environment :: Win32 (MS Windows)",
|
|
20
|
-
"Intended Audience :: Developers",
|
|
21
|
-
"License :: OSI Approved :: MIT License",
|
|
22
|
-
"Operating System :: Microsoft :: Windows",
|
|
23
|
-
"Programming Language :: Python :: 3",
|
|
24
|
-
"Programming Language :: Python :: 3.10",
|
|
25
|
-
"Programming Language :: Python :: 3.11",
|
|
26
|
-
"Programming Language :: Python :: 3.12",
|
|
27
|
-
"Programming Language :: Python :: 3.13",
|
|
28
|
-
"Programming Language :: Python :: 3.14",
|
|
29
|
-
"Topic :: Software Development :: Version Control :: Git",
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
dependencies = [
|
|
33
|
-
"mcp-win-stdio>=0.2.
|
|
34
|
-
"mcp>=1.2.0",
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
[project.scripts]
|
|
38
|
-
mcp-win-stdio-git = "mcp_win_stdio.git.cli:main"
|
|
39
|
-
mws-git = "mcp_win_stdio.git.cli:main"
|
|
40
|
-
|
|
41
|
-
[tool.hatch.build.targets.wheel]
|
|
42
|
-
packages = ["src/mcp_win_stdio"]
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "mcp-win-stdio-git"
|
|
7
|
+
version = "0.2.5"
|
|
8
|
+
description = "Unified Git & GitHub Model Context Protocol (MCP) server for Windows & Claude: 33 tools combining local Git repository management (init, remotes, restore, bookmarks, branching, commits, diffs) and remote GitHub CLI (gh) operations with hybrid synergy workflows."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
|
+
license = "MIT"
|
|
13
|
+
authors = [
|
|
14
|
+
{ name = "Mohan Kumar Indala" }
|
|
15
|
+
]
|
|
16
|
+
keywords = ["mcp", "claude", "git", "github", "gh", "version-control", "pull-requests", "issues", "actions", "ai", "llm"]
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Development Status :: 4 - Beta",
|
|
19
|
+
"Environment :: Win32 (MS Windows)",
|
|
20
|
+
"Intended Audience :: Developers",
|
|
21
|
+
"License :: OSI Approved :: MIT License",
|
|
22
|
+
"Operating System :: Microsoft :: Windows",
|
|
23
|
+
"Programming Language :: Python :: 3",
|
|
24
|
+
"Programming Language :: Python :: 3.10",
|
|
25
|
+
"Programming Language :: Python :: 3.11",
|
|
26
|
+
"Programming Language :: Python :: 3.12",
|
|
27
|
+
"Programming Language :: Python :: 3.13",
|
|
28
|
+
"Programming Language :: Python :: 3.14",
|
|
29
|
+
"Topic :: Software Development :: Version Control :: Git",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
dependencies = [
|
|
33
|
+
"mcp-win-stdio>=0.2.5",
|
|
34
|
+
"mcp>=1.2.0",
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
[project.scripts]
|
|
38
|
+
mcp-win-stdio-git = "mcp_win_stdio.git.cli:main"
|
|
39
|
+
mws-git = "mcp_win_stdio.git.cli:main"
|
|
40
|
+
|
|
41
|
+
[tool.hatch.build.targets.wheel]
|
|
42
|
+
packages = ["src/mcp_win_stdio"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Git & GitHub MCP Server for mcp-win-stdio.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
__version__ = "0.2.
|
|
1
|
+
"""
|
|
2
|
+
Git & GitHub MCP Server for mcp-win-stdio.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
__version__ = "0.2.5"
|
|
@@ -3,8 +3,6 @@ CLI entry point for mcp-win-stdio-git.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import argparse
|
|
6
|
-
import os
|
|
7
|
-
from pathlib import Path
|
|
8
6
|
import shutil
|
|
9
7
|
import subprocess
|
|
10
8
|
import sys
|
|
@@ -18,7 +16,7 @@ if sys.platform == "win32":
|
|
|
18
16
|
pass
|
|
19
17
|
|
|
20
18
|
from mcp_win_stdio.git import __version__
|
|
21
|
-
from mcp_win_stdio.git.server import mcp
|
|
19
|
+
from mcp_win_stdio.git.server import mcp
|
|
22
20
|
|
|
23
21
|
|
|
24
22
|
def cmd_run(args: argparse.Namespace) -> None:
|
|
@@ -46,12 +44,12 @@ def cmd_doctor(args: argparse.Namespace) -> None:
|
|
|
46
44
|
if name and email:
|
|
47
45
|
print(f"[OK] Git Identity: {name} <{email}>")
|
|
48
46
|
else:
|
|
49
|
-
print(
|
|
50
|
-
print(
|
|
51
|
-
print(
|
|
47
|
+
print("[WARN] Git Identity: Not configured (missing user.name or user.email)")
|
|
48
|
+
print(' -> Run: git config --global user.name "Your Name"')
|
|
49
|
+
print(' -> Run: git config --global user.email "you@example.com"')
|
|
52
50
|
else:
|
|
53
|
-
print(
|
|
54
|
-
print(
|
|
51
|
+
print("[FAIL] Git CLI: Not found on PATH")
|
|
52
|
+
print(" -> Install Git: winget install --id Git.Git -e")
|
|
55
53
|
if sys.stdin.isatty():
|
|
56
54
|
install = input(" Would you like to install Git now via winget? [Y/n]: ").strip().lower()
|
|
57
55
|
if install not in ("n", "no"):
|
|
@@ -61,13 +59,17 @@ def cmd_doctor(args: argparse.Namespace) -> None:
|
|
|
61
59
|
gh_bin = shutil.which("gh")
|
|
62
60
|
if gh_bin:
|
|
63
61
|
try:
|
|
64
|
-
ver_line = subprocess.run(
|
|
62
|
+
ver_line = subprocess.run(
|
|
63
|
+
["gh", "--version"], capture_output=True, text=True, check=True
|
|
64
|
+
).stdout.splitlines()[0]
|
|
65
65
|
print(f"[OK] GitHub CLI: {ver_line} ({gh_bin})")
|
|
66
66
|
except Exception:
|
|
67
67
|
print(f"[OK] GitHub CLI: Found at {gh_bin}")
|
|
68
68
|
|
|
69
69
|
# GitHub Auth status
|
|
70
|
-
auth_res = subprocess.run(
|
|
70
|
+
auth_res = subprocess.run(
|
|
71
|
+
["gh", "auth", "status"], capture_output=True, text=True, encoding="utf-8", errors="replace"
|
|
72
|
+
)
|
|
71
73
|
auth_out = auth_res.stderr or auth_res.stdout
|
|
72
74
|
if "Logged in to" in auth_out:
|
|
73
75
|
first_account = [ln.strip() for ln in auth_out.splitlines() if "Logged in to" in ln]
|
|
@@ -76,22 +78,24 @@ def cmd_doctor(args: argparse.Namespace) -> None:
|
|
|
76
78
|
print(f"[OK] GitHub Auth: Logged in ({account_str})")
|
|
77
79
|
|
|
78
80
|
# Check Git credential helper integration
|
|
79
|
-
helper_res = subprocess.run(
|
|
81
|
+
helper_res = subprocess.run(
|
|
82
|
+
["git", "config", "--get-all", "credential.helper"], capture_output=True, text=True
|
|
83
|
+
).stdout
|
|
80
84
|
if "gh" in helper_res:
|
|
81
|
-
print(
|
|
85
|
+
print("[OK] Git Credential Helper: Linked to gh (account switching active)")
|
|
82
86
|
else:
|
|
83
|
-
print(
|
|
84
|
-
print(
|
|
85
|
-
print(
|
|
87
|
+
print("[WARN] Git Credential Helper: Not linked to GitHub CLI.")
|
|
88
|
+
print(" -> Run: gh auth setup-git")
|
|
89
|
+
print(" (Required for git commands & account switching to use gh authentication)")
|
|
86
90
|
else:
|
|
87
|
-
print(
|
|
88
|
-
print(
|
|
89
|
-
print(
|
|
91
|
+
print("[INFO] GitHub Auth: Not logged in")
|
|
92
|
+
print(" -> Step 1: gh auth login")
|
|
93
|
+
print(" -> Step 2: gh auth setup-git (essential for git commands & account switching)")
|
|
90
94
|
else:
|
|
91
|
-
print(
|
|
92
|
-
print(
|
|
93
|
-
print(
|
|
94
|
-
print(
|
|
95
|
+
print("[INFO] GitHub CLI: Not found on PATH (enables PR, Issue, and Actions tools)")
|
|
96
|
+
print(" -> Step 1: winget install --id GitHub.cli -e")
|
|
97
|
+
print(" -> Step 2: gh auth login")
|
|
98
|
+
print(" -> Step 3: gh auth setup-git (essential for git commands & account switching)")
|
|
95
99
|
if sys.stdin.isatty():
|
|
96
100
|
install = input(" Would you like to install GitHub CLI now via winget? [y/N]: ").strip().lower()
|
|
97
101
|
if install in ("y", "yes"):
|
|
@@ -103,6 +107,7 @@ def cmd_doctor(args: argparse.Namespace) -> None:
|
|
|
103
107
|
def cmd_guide(args: argparse.Namespace) -> None:
|
|
104
108
|
"""Print Git MCP guide and prompt recipes."""
|
|
105
109
|
from mcp_win_stdio.git.guide import print_git_guide
|
|
110
|
+
|
|
106
111
|
print_git_guide()
|
|
107
112
|
|
|
108
113
|
|
|
@@ -25,7 +25,9 @@ def get_git_prerequisites_status() -> dict:
|
|
|
25
25
|
|
|
26
26
|
if gh_bin:
|
|
27
27
|
try:
|
|
28
|
-
res = subprocess.run(
|
|
28
|
+
res = subprocess.run(
|
|
29
|
+
["gh", "auth", "status"], capture_output=True, text=True, encoding="utf-8", errors="replace"
|
|
30
|
+
)
|
|
29
31
|
out = res.stderr or res.stdout
|
|
30
32
|
if "Logged in to" in out:
|
|
31
33
|
gh_logged_in = True
|
|
@@ -38,7 +40,9 @@ def get_git_prerequisites_status() -> dict:
|
|
|
38
40
|
|
|
39
41
|
if git_bin and gh_bin:
|
|
40
42
|
try:
|
|
41
|
-
helper_res = subprocess.run(
|
|
43
|
+
helper_res = subprocess.run(
|
|
44
|
+
["git", "config", "--get-all", "credential.helper"], capture_output=True, text=True
|
|
45
|
+
)
|
|
42
46
|
if "gh" in helper_res.stdout:
|
|
43
47
|
cred_helper_linked = True
|
|
44
48
|
except Exception:
|
|
@@ -141,7 +145,9 @@ def print_git_guide() -> None:
|
|
|
141
145
|
print("-" * 80)
|
|
142
146
|
print(" 1. 'Give me a 360-degree overview of the current repo, open PRs, and recent CI runs using repo_overview.'")
|
|
143
147
|
print(" 2. 'Pick up issue #12, check its details, and create a local branch using issue_start_work.'")
|
|
144
|
-
print(
|
|
148
|
+
print(
|
|
149
|
+
" 3. 'Stage all modified files, commit with message \"feat: new feature\", push, and open a PR with pr_quickstart.'"
|
|
150
|
+
)
|
|
145
151
|
print(" 4. 'Switch active GitHub account to my work account using gh_switch_account.'")
|
|
146
152
|
print("=" * 80 + "\n")
|
|
147
153
|
|