#!/usr/bin/env bash #ddev-generated # Keeps Claude Code's MCP config in step with the opt-in headless browser. # # Enabled (.ddev/docker-compose.claude-browser.yaml exists): registers the # "playwright" MCP server at user scope, and refreshes an add-on-managed compose # copy from the template after an add-on upgrade. Disabled: removes the # registration, but only if it is still the one this script created. # # Called by install.sh with HOME already pointing at the persisted profile. Never # fatal: a browser problem must not fail "ddev start" or "ddev claude". set -uo pipefail DDEV_DIR="${DDEV_APPROOT}/.ddev" TEMPLATE="${DDEV_DIR}/claude-code/browser/docker-compose.claude-browser.yaml" ENABLED="${DDEV_DIR}/docker-compose.claude-browser.yaml" NAME="playwright" URL="http://claude-browser:8931/mcp" CLAUDE_JSON="${HOME}/.claude.json" if ! command -v jq >/dev/null 2>&1; then [ -f "${ENABLED}" ] && echo "claude-browser: jq missing, skipping MCP registration" >&2 exit 0 fi # Read ~/.claude.json directly: "claude mcp get" would try to connect. registered=0 jq -e --arg n "${NAME}" '.mcpServers[$n]' "${CLAUDE_JSON}" >/dev/null 2>&1 && registered=1 current_url="$(jq -r --arg n "${NAME}" '.mcpServers[$n].url // empty' "${CLAUDE_JSON}" 2>/dev/null)" if [ -f "${ENABLED}" ]; then if [ -f "${TEMPLATE}" ] && grep -q '#ddev-generated' "${ENABLED}" && ! cmp -s "${TEMPLATE}" "${ENABLED}"; then cat "${TEMPLATE}" >"${ENABLED}" echo "claude-browser: refreshed .ddev/docker-compose.claude-browser.yaml from the add-on; run 'ddev restart' to apply" >&2 fi if [ "${registered}" -eq 0 ]; then claude mcp add --transport http --scope user "${NAME}" "${URL}" >/dev/null \ && echo "claude-browser: registered MCP server '${NAME}' (${URL})" elif [ "${current_url}" != "${URL}" ]; then echo "claude-browser: an MCP server named '${NAME}' already exists and is not the add-on's; leaving it alone" >&2 fi elif [ "${registered}" -eq 1 ] && [ "${current_url}" = "${URL}" ]; then claude mcp remove "${NAME}" -s user >/dev/null \ && echo "claude-browser: unregistered MCP server '${NAME}'" fi exit 0