Skip to content

Commit

Permalink
[dev] Install git and linear MCP servers (#20647)
Browse files Browse the repository at this point in the history
Tool: gitpod/catfood.gitpod.cloud
  • Loading branch information
geropl authored Mar 4, 2025
1 parent 23c3e83 commit 61ecd26
Showing 3 changed files with 226 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .gitpod.yml
Original file line number Diff line number Diff line change
@@ -42,6 +42,13 @@ tasks:
gp env -u GCP_ADC_FILE
fi
exit 0
- name: MCP Servers Setup
init: |
# Run Git MCP install script with current workspace as repository
./scripts/install-git-mcp-go.sh /workspace/gitpod "$GIT_WRITE_ACCESS"
# Run Linear MCP install script
./scripts/install-linear-mcp-go.sh "$LINEAR_WRITE_ACCESS"
- name: Install `gitpod` CLI
command: |
leeway run components/local-app:install-cli
133 changes: 133 additions & 0 deletions scripts/install-git-mcp-go.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,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"
86 changes: 86 additions & 0 deletions scripts/install-linear-mcp-go.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/bin/bash

# This script installs the Linear MCP server and registers it for use with the cline VSCode extension: https://github.com/cline/cline
# Note: to use this, you need to have a) cline installed, and b) set LINEAR_API_KEY in your environment
#
# Usage:
# ./register-cline.sh [write-access]
#
# Parameters:
# write-access: Optional. Set to "true" to enable write operations. Default is "false".
#
# Examples:
# ./register-cline.sh # Install with read-only mode (default)
# ./register-cline.sh true # Install with write operations enabled

# Get the write-access parameter (default: false)
WRITE_ACCESS=${1:-false}

MCP_SERVERS_DIR="$HOME/mcp-servers"
mkdir -p "$MCP_SERVERS_DIR"

# Check if the Linear MCP server binary is on the path already
LINEAR_MCP_BINARY="$(which linear-mcp-go)"
if [ -z "$LINEAR_MCP_BINARY" ]; then
echo "Did not find linear-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/linear-mcp-go/releases/latest)
# Extract the download URL for the Linux binary
DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[] | select(.name | contains("linux")) | .browser_download_url')

if [ -z "$DOWNLOAD_URL" ]; then
echo "Error: Could not find Linux binary in the latest release"
exit 1
fi

# Download the Linear MCP server binary
echo "Downloading Linear MCP server from $DOWNLOAD_URL..."
curl -L -o "$MCP_SERVERS_DIR/linear-mcp-go" "$DOWNLOAD_URL"

# Make the binary executable
chmod +x "$MCP_SERVERS_DIR/linear-mcp-go"

echo "Linear MCP server installed successfully at $MCP_SERVERS_DIR/linear-mcp-go"
LINEAR_MCP_BINARY="$MCP_SERVERS_DIR/linear-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"

# Determine args based on write-access parameter
if [ "$WRITE_ACCESS" = "true" ]; then
SERVER_ARGS='["--write-access=true"]'
else
SERVER_ARGS='[]'
fi

# Merge the existing settings with the new MCP server configuration
cat <<EOF > "$CLINE_MCP_SETTINGS.new"
{
"mcpServers": {
"linear": {
"command": "$LINEAR_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
mv "$CLINE_MCP_SETTINGS.tmp" "$CLINE_MCP_SETTINGS"
fi
rm -f "$CLINE_MCP_SETTINGS.new"

echo "Cline MCP settings updated at $CLINE_MCP_SETTINGS"

0 comments on commit 61ecd26

Please sign in to comment.