forked from cardosofelipe/fast-next-template
Implements the Git Operations MCP server (Issue #58) providing: Core features: - GitPython wrapper for local repository operations (clone, commit, push, pull, diff, log) - Branch management (create, delete, list, checkout) - Workspace isolation per project with file-based locking - Gitea provider for remote PR operations MCP Tools (17 registered): - clone_repository, git_status, create_branch, list_branches - checkout, commit, push, pull, diff, log - create_pull_request, get_pull_request, list_pull_requests - merge_pull_request, get_workspace, lock_workspace, unlock_workspace Technical details: - FastMCP + FastAPI with JSON-RPC 2.0 protocol - pydantic-settings for configuration (env prefix: GIT_OPS_) - Comprehensive error hierarchy with structured codes - 131 tests passing with 67% coverage - Async operations via ThreadPoolExecutor Closes: #105, #106, #107, #108, #109 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
180 lines
3.5 KiB
Python
180 lines
3.5 KiB
Python
"""
|
|
Git Operations MCP Server.
|
|
|
|
Provides git repository management, branching, commits, and PR workflows
|
|
for Syndarix AI agents.
|
|
"""
|
|
|
|
__version__ = "0.1.0"
|
|
|
|
from config import Settings, get_settings, is_test_mode, reset_settings
|
|
from exceptions import (
|
|
APIError,
|
|
AuthenticationError,
|
|
BranchExistsError,
|
|
BranchNotFoundError,
|
|
CheckoutError,
|
|
CloneError,
|
|
CommitError,
|
|
CredentialError,
|
|
CredentialNotFoundError,
|
|
DirtyWorkspaceError,
|
|
ErrorCode,
|
|
GitError,
|
|
GitOpsError,
|
|
InvalidRefError,
|
|
MergeConflictError,
|
|
PRError,
|
|
PRNotFoundError,
|
|
ProviderError,
|
|
ProviderNotFoundError,
|
|
PullError,
|
|
PushError,
|
|
WorkspaceError,
|
|
WorkspaceLockedError,
|
|
WorkspaceNotFoundError,
|
|
WorkspaceSizeExceededError,
|
|
)
|
|
from models import (
|
|
BranchInfo,
|
|
BranchRequest,
|
|
BranchResult,
|
|
CheckoutRequest,
|
|
CheckoutResult,
|
|
CloneRequest,
|
|
CloneResult,
|
|
CommitInfo,
|
|
CommitRequest,
|
|
CommitResult,
|
|
CreatePRRequest,
|
|
CreatePRResult,
|
|
DiffHunk,
|
|
DiffRequest,
|
|
DiffResult,
|
|
FileChange,
|
|
FileChangeType,
|
|
FileDiff,
|
|
GetPRRequest,
|
|
GetPRResult,
|
|
GetWorkspaceRequest,
|
|
GetWorkspaceResult,
|
|
HealthStatus,
|
|
ListBranchesRequest,
|
|
ListBranchesResult,
|
|
ListPRsRequest,
|
|
ListPRsResult,
|
|
LockWorkspaceRequest,
|
|
LockWorkspaceResult,
|
|
LogRequest,
|
|
LogResult,
|
|
MergePRRequest,
|
|
MergePRResult,
|
|
MergeStrategy,
|
|
PRInfo,
|
|
ProviderStatus,
|
|
ProviderType,
|
|
PRState,
|
|
PullRequest,
|
|
PullResult,
|
|
PushRequest,
|
|
PushResult,
|
|
StatusRequest,
|
|
StatusResult,
|
|
UnlockWorkspaceRequest,
|
|
UnlockWorkspaceResult,
|
|
UpdatePRRequest,
|
|
UpdatePRResult,
|
|
WorkspaceInfo,
|
|
WorkspaceState,
|
|
)
|
|
|
|
__all__ = [
|
|
# Version
|
|
"__version__",
|
|
# Config
|
|
"Settings",
|
|
"get_settings",
|
|
"reset_settings",
|
|
"is_test_mode",
|
|
# Error codes
|
|
"ErrorCode",
|
|
# Exceptions
|
|
"GitOpsError",
|
|
"WorkspaceError",
|
|
"WorkspaceNotFoundError",
|
|
"WorkspaceLockedError",
|
|
"WorkspaceSizeExceededError",
|
|
"GitError",
|
|
"CloneError",
|
|
"CheckoutError",
|
|
"CommitError",
|
|
"PushError",
|
|
"PullError",
|
|
"MergeConflictError",
|
|
"BranchExistsError",
|
|
"BranchNotFoundError",
|
|
"InvalidRefError",
|
|
"DirtyWorkspaceError",
|
|
"ProviderError",
|
|
"AuthenticationError",
|
|
"ProviderNotFoundError",
|
|
"PRError",
|
|
"PRNotFoundError",
|
|
"APIError",
|
|
"CredentialError",
|
|
"CredentialNotFoundError",
|
|
# Enums
|
|
"FileChangeType",
|
|
"MergeStrategy",
|
|
"PRState",
|
|
"ProviderType",
|
|
"WorkspaceState",
|
|
# Dataclasses
|
|
"FileChange",
|
|
"BranchInfo",
|
|
"CommitInfo",
|
|
"DiffHunk",
|
|
"FileDiff",
|
|
"PRInfo",
|
|
"WorkspaceInfo",
|
|
# Request/Response models
|
|
"CloneRequest",
|
|
"CloneResult",
|
|
"StatusRequest",
|
|
"StatusResult",
|
|
"BranchRequest",
|
|
"BranchResult",
|
|
"ListBranchesRequest",
|
|
"ListBranchesResult",
|
|
"CheckoutRequest",
|
|
"CheckoutResult",
|
|
"CommitRequest",
|
|
"CommitResult",
|
|
"PushRequest",
|
|
"PushResult",
|
|
"PullRequest",
|
|
"PullResult",
|
|
"DiffRequest",
|
|
"DiffResult",
|
|
"LogRequest",
|
|
"LogResult",
|
|
"CreatePRRequest",
|
|
"CreatePRResult",
|
|
"GetPRRequest",
|
|
"GetPRResult",
|
|
"ListPRsRequest",
|
|
"ListPRsResult",
|
|
"MergePRRequest",
|
|
"MergePRResult",
|
|
"UpdatePRRequest",
|
|
"UpdatePRResult",
|
|
"GetWorkspaceRequest",
|
|
"GetWorkspaceResult",
|
|
"LockWorkspaceRequest",
|
|
"LockWorkspaceResult",
|
|
"UnlockWorkspaceRequest",
|
|
"UnlockWorkspaceResult",
|
|
"HealthStatus",
|
|
"ProviderStatus",
|
|
]
|