From 899bf201c7b1932e13d77423afbd39003d8c0ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Tr=C3=B6ger?= Date: Sun, 19 Apr 2026 13:53:29 +0200 Subject: [PATCH] bootstrap: Gitea-MCP und context7 automatisch einrichten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gitea-mcp Binary via go install installieren falls fehlend - gitea MCP-Server via `claude mcp add --scope user` registrieren - context7 Plugin-Aktivierung prüfen und bei Fehlen warnen - Wrapper-Skript löst GITEA_ACCESS_TOKEN zur Laufzeit via secret-tool auf - mcpServers-Block aus settings.json entfernt (wird von Claude Code ignoriert) Co-Authored-By: Claude Sonnet 4.6 --- bootstrap.sh | 28 +++++++++++ dotfiles/gitea-mcp-wrapper.sh | 3 ++ dotfiles/settings.json | 94 +++++++++++++++++------------------ 3 files changed, 78 insertions(+), 47 deletions(-) create mode 100755 dotfiles/gitea-mcp-wrapper.sh diff --git a/bootstrap.sh b/bootstrap.sh index 0d700f3..08149ed 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -24,6 +24,8 @@ echo "✓ Agents verlinkt" ln -sf "$REPO/dotfiles/CLAUDE.md" ~/.claude/CLAUDE.md ln -sf "$REPO/dotfiles/settings.json" ~/.claude/settings.json ln -sf "$REPO/dotfiles/statusline-command.sh" ~/.claude/statusline-command.sh +ln -sf "$REPO/dotfiles/gitea-mcp-wrapper.sh" ~/.claude/gitea-mcp-wrapper.sh +chmod +x "$REPO/dotfiles/gitea-mcp-wrapper.sh" echo "✓ Dotfiles verlinkt" # Hooks ausführbar machen @@ -55,6 +57,32 @@ else echo "✓ ruff installiert" fi +# --- gitea-mcp Binary --- +if [[ -x ~/go/bin/gitea-mcp ]]; then + echo "✓ gitea-mcp vorhanden" +else + echo " gitea-mcp fehlt – installiere via go install..." + go install gitea.com/gitea/gitea-mcp@latest + echo "✓ gitea-mcp installiert" +fi + +# --- context7 Plugin-Check --- +if claude mcp list 2>/dev/null | grep -q "context7"; then + echo "✓ context7 Plugin aktiv" +else + echo "⚠ context7 Plugin nicht aktiv – prüfe enabledPlugins in settings.json" + echo " Ggf. Claude Code neu starten oder Plugin manuell aktivieren." +fi + +# --- gitea-mcp in Claude Code registrieren --- +if claude mcp list 2>/dev/null | grep -q "^gitea:"; then + echo "✓ gitea MCP bereits registriert" +else + echo " Registriere gitea MCP..." + claude mcp add --scope user gitea -- bash ~/.claude/gitea-mcp-wrapper.sh + echo "✓ gitea MCP registriert" +fi + # --- secret-tool + Gitea-Token --- if ! command -v secret-tool &>/dev/null; then echo " secret-tool fehlt – installiere libsecret-tools..." diff --git a/dotfiles/gitea-mcp-wrapper.sh b/dotfiles/gitea-mcp-wrapper.sh new file mode 100755 index 0000000..a8f5e9a --- /dev/null +++ b/dotfiles/gitea-mcp-wrapper.sh @@ -0,0 +1,3 @@ +#!/bin/bash +exec env GITEA_ACCESS_TOKEN="$(secret-tool lookup user claude-code token gitea)" \ + ~/go/bin/gitea-mcp -host https://gitea.troeger-net.org diff --git a/dotfiles/settings.json b/dotfiles/settings.json index d68f633..1f6174e 100644 --- a/dotfiles/settings.json +++ b/dotfiles/settings.json @@ -1,50 +1,50 @@ { - "permissions": { - "allow": [ - "Bash(npm run build:*)", - "Bash(grep:*)", - "Bash(xargs:*)", - "WebSearch", - "Bash(npm install)", - "Bash(curl:*)", - "Bash(ls:*)", - "Bash(python3:*)" - ], - "defaultMode": "default" - }, - "statusLine": { - "type": "command", - "command": "bash ~/.claude/statusline-command.sh" - }, - "enabledPlugins": { - "typescript-lsp@claude-plugins-official": true, - "frontend-design@claude-plugins-official": true, - "context7@claude-plugins-official": true, - "code-review@claude-plugins-official": true, - "code-simplifier@claude-plugins-official": true - }, - "language": "German", - "hooks": { - "PostToolUse": [ - { - "matcher": "Edit|Write", - "hooks": [ - { - "type": "command", - "command": "bash /mnt/projekte/claude-workflow/hooks/auto-format.sh" - } - ] - } - ], - "Stop": [ - { - "hooks": [ - { - "type": "command", - "command": "bash /mnt/projekte/claude-workflow/hooks/verify-on-stop.sh" - } - ] - } + "permissions": { + "allow": [ + "Bash(npm run build:*)", + "Bash(grep:*)", + "Bash(xargs:*)", + "WebSearch", + "Bash(npm install)", + "Bash(curl:*)", + "Bash(ls:*)", + "Bash(python3:*)" + ], + "defaultMode": "default" + }, + "hooks": { + "PostToolUse": [ + { + "matcher": "Edit|Write", + "hooks": [ + { + "type": "command", + "command": "bash /mnt/projekte/claude-workflow/hooks/auto-format.sh" + } ] - } + } + ], + "Stop": [ + { + "hooks": [ + { + "type": "command", + "command": "bash /mnt/projekte/claude-workflow/hooks/verify-on-stop.sh" + } + ] + } + ] + }, + "statusLine": { + "type": "command", + "command": "bash ~/.claude/statusline-command.sh" + }, + "enabledPlugins": { + "typescript-lsp@claude-plugins-official": true, + "frontend-design@claude-plugins-official": true, + "context7@claude-plugins-official": true, + "code-review@claude-plugins-official": true, + "code-simplifier@claude-plugins-official": true + }, + "language": "German" }