-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathinstall-git-mcp-go.sh
executable file
·133 lines (111 loc) · 4.29 KB
/
install-git-mcp-go.sh
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash
# This script installs the Git MCP server and registers it for use with the cline VSCode extension: https://github.com/cline/cline
#
# Usage:
# ./register-cline.sh <repository-path> [write-access] [mode]
#
# Parameters:
# repository-path: Required. Path to a Git repository to use.
# write-access: Optional. Set to "true" to enable write operations. Default is "false".
# mode: Optional. Git operation mode: 'shell' or 'go-git'. Default is "shell".
#
# Examples:
# ./register-cline.sh ~/my-repo # Install with read-only mode (default)
# ./register-cline.sh ~/my-repo true # Install with write operations enabled
# ./register-cline.sh ~/my-repo false go-git # Specify mode
# Get parameters with defaults
REPO_PATH=$1
WRITE_ACCESS=${2:-false}
MODE=${3:-shell}
# Check for required tools
if ! command -v jq &> /dev/null; then
echo "Error: jq is required but not installed. Please install jq first."
exit 1
fi
MCP_SERVERS_DIR="$HOME/mcp-servers"
mkdir -p "$MCP_SERVERS_DIR"
# Check if the Git MCP server binary is on the path already
GIT_MCP_BINARY="$(which git-mcp-go)"
if [ -z "$GIT_MCP_BINARY" ]; then
echo "Did not find git-mcp-go on the path, installing from latest GitHub release..."
# This fetches information about the latest release to determine the download URL
LATEST_RELEASE=$(curl -s https://api.github.com/repos/geropl/git-mcp-go/releases/latest)
# Determine platform for download
PLATFORM="linux"
if [[ "$OSTYPE" == "darwin"* ]]; then
PLATFORM="darwin"
elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
PLATFORM="windows"
fi
# Extract the download URL for the appropriate binary
DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r ".assets[] | select(.name | contains(\"$PLATFORM\")) | .browser_download_url")
if [ -z "$DOWNLOAD_URL" ]; then
echo "Error: Could not find appropriate binary in the latest release"
exit 1
fi
# Download the Git MCP server binary
echo "Downloading Git MCP server from $DOWNLOAD_URL..."
curl -L -o "$MCP_SERVERS_DIR/git-mcp-go" "$DOWNLOAD_URL"
# Make the binary executable
chmod +x "$MCP_SERVERS_DIR/git-mcp-go"
echo "Git MCP server installed successfully at $MCP_SERVERS_DIR/git-mcp-go"
GIT_MCP_BINARY="$MCP_SERVERS_DIR/git-mcp-go"
fi
# Configure cline to use the MCP server
# This is where Cline looks for MCP server configurations
CLINE_CONFIG_DIR="$HOME/.vscode-server/data/User/globalStorage/saoudrizwan.claude-dev/settings"
mkdir -p "$CLINE_CONFIG_DIR"
CLINE_MCP_SETTINGS="$CLINE_CONFIG_DIR/cline_mcp_settings.json"
# Build the args array based on parameters
SERVER_ARGS="["
# Add repository path if provided
if [ -n "$REPO_PATH" ]; then
# Expand the path to absolute path
REPO_PATH=$(realpath "$REPO_PATH")
SERVER_ARGS="$SERVER_ARGS\"--repository=$REPO_PATH\""
fi
# Add write-access flag if enabled
if [ "$WRITE_ACCESS" = "true" ]; then
if [ -n "$SERVER_ARGS" ] && [ "$SERVER_ARGS" != "[" ]; then
SERVER_ARGS="$SERVER_ARGS, "
fi
SERVER_ARGS="$SERVER_ARGS\"--write-access=true\""
fi
# Add mode if not the default
if [ -n "$MODE" ]; then
if [ -n "$SERVER_ARGS" ] && [ "$SERVER_ARGS" != "[" ]; then
SERVER_ARGS="$SERVER_ARGS, "
fi
SERVER_ARGS="$SERVER_ARGS\"--mode=$MODE\""
fi
SERVER_ARGS="$SERVER_ARGS]"
# Merge the existing settings with the new MCP server configuration
cat <<EOF > "$CLINE_MCP_SETTINGS.new"
{
"mcpServers": {
"git": {
"command": "$GIT_MCP_BINARY",
"args": $SERVER_ARGS,
"disabled": false,
"autoApprove": []
}
}
}
EOF
if [ -f "$CLINE_MCP_SETTINGS" ]; then
echo "Found existing Cline MCP settings at $CLINE_MCP_SETTINGS"
echo "Merging with new MCP server configuration..."
jq -s '.[0] * .[1]' "$CLINE_MCP_SETTINGS" "$CLINE_MCP_SETTINGS.new" > "$CLINE_MCP_SETTINGS.tmp"
mv "$CLINE_MCP_SETTINGS.tmp" "$CLINE_MCP_SETTINGS"
else
echo "Creating new Cline MCP settings at $CLINE_MCP_SETTINGS"
mv "$CLINE_MCP_SETTINGS.new" "$CLINE_MCP_SETTINGS"
fi
rm -f "$CLINE_MCP_SETTINGS.new"
echo "Cline MCP settings updated at $CLINE_MCP_SETTINGS"
echo "Git MCP server has been registered with the following configuration:"
echo " - Write Access: $WRITE_ACCESS"
if [ -n "$REPO_PATH" ]; then
echo " - Repository Path: $REPO_PATH"
fi
echo " - Mode: $MODE"