MCP server for reading and exploring Git repositories with workspace management, file search, and memo features
This MCP server demonstrates solid definition quality with comprehensive tool coverage (20 tools), well-structured schemas, and clear descriptions. All tools have explicit descriptions (194-320 chars typical), proper input schemas with typed parameters, and parameter annotations. However, output schemas are not explicitly documented in the source code, only inferred from implementation context. Tool names follow verb_noun conventions (get_*, list_*, search_*, etc.) and descriptions include clear usage guidance. The session and batch tools demonstrate advanced patterns. Minor gaps: no explicit output schema documentation, sparse actionable error guidance in some tool descriptions, and no tool annotations (readOnlyHint/destructiveHint/idempotentHint) in the schema definitions despite risk classification being present in the metadata.
Create a persistent memo. title is required; repository (optional) associates the memo with a workspace repo so it shows up in get_repository_info. Returns the generated UUID, which other memo tools use to address it.
Run the same operation across multiple repos in one call. operation="clone" with urls=[...] clones each URL; "pull" updates listed repos (or all workspace repos when repositories is empty); "status" reports current branch and dirty flag.
Clone a Git repository into the workspace. The name is derived from the URL if omitted. If the repo already exists, runs git pull instead. include_info=true to attach get_repository_info output; include_branches=true to attach the branch list.
Delete one memo by ID. Destructive: there is no undo. Use list_memos to confirm the ID first.
Show the diff for a single commit in a workspace repo. commit_hash accepts the full SHA or any prefix git recognizes. Pair with list_commits to discover hashes.
Output schemas not explicitly documented in tool definitions. While implementations return structured objects (BatchResult, SessionParams visible in code), the JSON Schema for tool outputs is not visible in the provided source.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are missing from schema definitions despite risk classification being assigned (READ_ONLY, WRITE, DESTRUCTIVE). These should be encoded as tool annotations in the MCP tool registration.
Error handling descriptions are minimal. Tools like remove_repository and delete_memo describe destructive operations but provide no recovery guidance ('there is no undo' alone does not guide LLM recovery). Should include: what to try if the operation fails, alternative approaches, or confirmation patterns.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | A | 81 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 23 | - | v1 |
Read one file (file_path) or several files (file_paths) from a workspace repo. Line numbers are always emitted. start_line is 1-based; end_line is inclusive (defaults to start_line + line_limit - 1, where line_limit comes from the session default, falling back to 100).
Read one memo by ID. Use list_memos to discover IDs.
Find README files in a workspace repo. By default checks the repo root only; recursive=true scans all subdirectories. Matches README, README.md, readme.rst, etc.
Summarize a workspace repo: current branch, last update, remote URL, license, file/dir counts, top file extensions, and README content. Set include_memos=true to also list associated memos (memo_limit caps the count). Use this first when exploring an unfamiliar repo.
List local and remote-tracking branches of a workspace repo. Use before switch_branch to discover available targets.
List the most recent commits on the current branch of a workspace repo. limit caps the number returned (default 20).
List files in a workspace repo with size, line count, and modification time. directory="subdir" scopes the listing; recursive=true descends. include_patterns/exclude_patterns filter by glob (directory excludes like "vendor/" prune entire subtrees).
Search and list memos. query searches title and content (case-insensitive); repository filters to one repo; tags filters by tag (any match). limit caps results (default 50).
List all repositories in the workspace. include_status=true adds git status (branch, dirty flag) per repo; include_commits=true adds recent commits per repo, capped at commit_limit (default 5).
Run git pull on a workspace repo. Use after clone_repository when the remote has new commits. Returns the git output verbatim.
Delete a workspace repo from disk. Destructive: there is no undo. The on-disk clone is removed, but associated memos are preserved.
Search file contents (and optionally filenames) by keywords across one or more workspace repos. Set repositories=[...] for cross-repo search, or repository=name for one. search_mode="and"|"or" (default and); context_lines>0 includes surrounding lines; include_patterns/exclude_patterns filter by glob ("*.go", "vendor/**").
Manage server-side session defaults to reduce per-call parameter repetition. action="set" stores defaults (default_repository, default_include_patterns, default_exclude_patterns, default_search_limit, default_list_files_limit, default_line_limit, default_commit_limit); action="get" returns the current state; action="clear" resets everything.
Check out a branch in a workspace repo. The branch must already exist (use list_branches to verify). This is a read-only inspection switch; do not use to create branches.
Modify an existing memo by ID. Only non-empty fields are applied; omitted fields are left unchanged. UpdatedAt is refreshed automatically.
session tool name is generic and potentially ambiguous. 'session' alone does not convey that it manages server-side defaults (set/get/clear operations). Consider rename to 'manage_session_defaults' or 'configure_defaults' to clarify intent.
batch tool name lacks action verb clarity. 'batch' is a noun; consider 'batch_clone', 'batch_repositories', or 'execute_batch_operation' to immediately convey what the tool does (clone, pull, or status across multiple repos).
Parameter constraints documented inconsistently. search_files describes search_mode as '"and"|"or"' (enum), but remove_repository and delete_memo omit any constraint examples. Descriptions for limit/limit parameters vary in detail (some specify ranges, others do not). Should enforce consistent constraint documentation (min/max, enum values, pattern) across all tools.
Response field naming inconsistency. BatchResult defines fields like 'Name', 'Success', 'Message', 'Error', but tool descriptions do not specify whether responses follow this structure or a different schema per operation (clone vs pull vs status). LLMs need explicit output schema to plan downstream tool chaining.