diff --git a/src/git/README.md b/src/git/README.md index 30b7e2d8..a1294d8c 100644 --- a/src/git/README.md +++ b/src/git/README.md @@ -285,29 +285,13 @@ help you debug any issues. ## Development -### Building +If you are doing local development, there are two ways to test your changes: -[`uv`](https://docs.astral.sh/uv/) is used for development. +1. Run the MCP inspector to test your changes. See [Debugging](#debugging) for run instructions. -Start by creating a fresh virtual environment: +2. Test using the Claude desktop app. Add the following to your `claude_desktop_config.json`: -```bash -uv venv -source .venv/bin/activate -``` -To run the tests, type `uv run pytest`, to run the server from source use `uv run src/mcp_server_git/`. - -To build, type `uv build`. You can then now run `mcp-server-git` command directly. Open with the inspector using `npx @modelcontextprotocol/inspector@latest mcp-server-git`. - -To specify the Python version type `uv python pin ` (useful if you want to use a more recent version than the default). - -To create the Docker container use - -```bash -docker build -t mcp/git . -``` - -An example showing how to run via the Docker container is below: +### Docker ```json { @@ -328,6 +312,32 @@ An example showing how to run via the Docker container is below: } ``` +### UVX +```json +{ +"mcpServers": { + "git": { + "command": "uv", + "args": [ + "--directory", + "//mcp-servers/src/git", + "run", + "mcp-server-git" + ] + } + } +} +``` + +## Build + +Docker build: + +```bash +cd src/git +docker build -t mcp/git . +``` + ## License This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository. diff --git a/src/git/tests/test_server.py b/src/git/tests/test_server.py index ceeeab91..911a90cf 100644 --- a/src/git/tests/test_server.py +++ b/src/git/tests/test_server.py @@ -12,9 +12,6 @@ def test_repository(tmp_path: Path): Path(repo_path / "test.txt").write_text("test") test_repo.index.add(["test.txt"]) test_repo.index.commit("initial commit") - - # Store the default branch name on the repo object for tests to use - test_repo.default_branch = test_repo.active_branch.name yield test_repo @@ -54,11 +51,11 @@ def test_git_branch_contains(test_repository): Path(test_repository.working_dir / Path("feature.txt")).write_text("feature content") test_repository.index.add(["feature.txt"]) commit = test_repository.index.commit("feature commit") - test_repository.git.checkout(test_repository.default_branch) + test_repository.git.checkout("master") result = git_branch(test_repository, "local", contains=commit.hexsha) assert "feature-branch" in result - assert test_repository.default_branch not in result + assert "master" not in result def test_git_branch_not_contains(test_repository): # Create a new branch and commit to it @@ -66,8 +63,8 @@ def test_git_branch_not_contains(test_repository): Path(test_repository.working_dir / Path("another_feature.txt")).write_text("another feature content") test_repository.index.add(["another_feature.txt"]) commit = test_repository.index.commit("another feature commit") - test_repository.git.checkout(test_repository.default_branch) + test_repository.git.checkout("master") result = git_branch(test_repository, "local", not_contains=commit.hexsha) assert "another-feature-branch" not in result - assert test_repository.default_branch in result + assert "master" in result