MCP Git 安装
一个模型上下文协议(MCP)服务器,帮助读取GitHub存储库结构和重要文件。
灵感来自 吉廷斯特.
配置
JSON``` 1 2 3 4 5 6 7 8{ “mcpServers”: { “mcp-git-ingest”: { “command”: “uvx”, “args”: [“—from”, “git+https://github.com/adhikasp/mcp-git-ingest”, “mcp-git-ingest”], } } }
## 用法
使用 [mcp客户端cli](https://github.com/adhikasp/mcp-client-cli):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63$ llm read https://github.com/adhikasp/mcp-git-ingest and determine how the code technically works I’ll help you understand the technical details of the mcp-git-ingest repository. I’ll first fetch the directory structure and then read the important files to analyze how the code works. Tool Calls: github_directory_structure Args: repo_url: https://github.com/adhikasp/mcp-git-ingest Now, I’ll read the important files to understand the technical implementation: Tool Calls: github_read_important_files Args: repo_url: https://github.com/adhikasp/mcp-git-ingest file_paths: [‘README.md’, ‘src/mcp_git_ingest/main.py’, ‘pyproject.toml’] Let me break down how this code technically works:
- Purpose:
The
mcp-git-ingestis a Model Context Protocol (MCP) server designed to help read GitHub repository structures and important files. It provides two main tools:
github_directory_structure: Returns a tree-like representation of a repository’s directory structuregithub_read_important_files: Reads and returns the contents of specified files in a repository
- Technical Implementation: a. Dependencies:
- Uses
fastmcpfor creating an MCP server - Uses
gitpythonfor Git repository operations - Requires Python 3.8+
b. Key Functions:
clone_repo(repo_url: str) -> str: - Creates a deterministic temporary directory based on the repository URL’s hash
- Checks if the repository is already cloned
- If not, clones the repository
- Handles error cases and cleanup
- Returns the path to the cloned repository
get_directory_tree(path: str, prefix: str = "") -> str: - Recursively generates a tree-like directory structure
- Skips
.gitdirectories - Uses Unicode box-drawing characters to create a visual tree representation
- Handles sorting of entries
github_directory_structure(repo_url: str) -> str: - Clones the repository
- Generates directory tree
- Cleans up the temporary repository after processing
- Returns the tree structure or an error message
github_read_important_files(repo_url: str, file_paths: List[str]) -> dict[str, str]: - Clones the repository
- Reads specified files
- Returns a dictionary mapping file paths to their contents
- Handles file reading errors
- Cleans up the temporary repository
- Error Handling:
- Uses try-except blocks to handle repository cloning, file reading errors
- Ensures temporary directories are always cleaned up using
finallyblocks - Returns descriptive error messages
- Performance Optimizations:
- Uses a hash-based temporary directory naming to potentially reuse cloned repositories
- Checks for existing repositories before cloning
- Implements cleanup to prevent accumulation of temporary files
- Unique Features:
- Deterministic temporary directory creation
- Unicode tree representation
- Flexible file reading with error handling
- Execution:
- Can be run as a CLI tool via
mcp-git-ingest - Configured through
pyproject.toml - Depends on
fastmcpfor MCP server functionality The code is a robust, flexible tool for programmatically exploring and reading GitHub repositories, with a focus on error handling and clean implementation. Would you like me to elaborate on any specific aspect of the implementation?