#!/bin/sh # kg — ajoute le serveur MCP des graphes aux clients trouvés sur ce poste. # # curl -fsSL https://veille.casual-labs.ch/setup | sh # demande le jeton # curl -fsSL https://veille.casual-labs.ch/setup | sh -s -- # jeton donné en argument # # Il vérifie le jeton auprès du serveur, puis configure Claude Code, Cursor et # VS Code s'ils sont installés. Il n'installe rien et n'écrit que la configuration # MCP de ces clients. macOS et Linux ; sous Windows, suivre la page d'accueil. set -eu URL="https://veille.casual-labs.ch/mcp" JETON="${1:-${KG_JETON:-}}" if [ -z "$JETON" ]; then if [ -r /dev/tty ]; then printf 'Jeton veille : ' > /dev/tty stty -echo < /dev/tty 2>/dev/null || true read -r JETON < /dev/tty || true stty echo < /dev/tty 2>/dev/null || true printf '\n' > /dev/tty fi fi if [ -z "$JETON" ]; then echo "Jeton manquant : curl -fsSL https://veille.casual-labs.ch/setup | sh -s -- " >&2 exit 1 fi code=$(curl -s -o /dev/null -w '%{http_code}' -m 20 -X POST "$URL" \ -H "Authorization: Bearer $JETON" -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' || true) if [ "$code" != 200 ]; then echo "Le serveur refuse ce jeton (HTTP $code). Rien n'a été modifié." >&2 exit 1 fi echo "Jeton accepté par $URL" faits=0 if command -v claude >/dev/null 2>&1; then claude mcp remove kg --scope user >/dev/null 2>&1 || true # l'ancien nom du serveur, jusqu'au 03.10.2026 claude mcp remove veille --scope user >/dev/null 2>&1 || true if claude mcp add --scope user --transport http veille "$URL" --header "Authorization: Bearer $JETON" >/dev/null 2>&1; then echo " Claude Code : serveur « veille » ajouté (portée utilisateur)"; faits=$((faits + 1)) else echo " Claude Code : l'ajout a échoué, voir https://veille.casual-labs.ch/#installer" fi fi if [ -d "$HOME/.cursor" ]; then if command -v python3 >/dev/null 2>&1; then if KG_URL="$URL" KG_JETON="$JETON" python3 - "$HOME/.cursor/mcp.json" <<'PY' import json, os, sys chemin = sys.argv[1] try: conf = json.load(open(chemin, encoding="utf-8")) if os.path.exists(chemin) else {} if not isinstance(conf, dict): raise ValueError except ValueError: sys.exit(1) # fichier illisible : on n'y touche pas conf.setdefault("mcpServers", {}).pop("kg", None) # l'ancien nom du serveur conf["mcpServers"]["veille"] = { "url": os.environ["KG_URL"], "headers": {"Authorization": "Bearer " + os.environ["KG_JETON"]}} tmp = chemin + ".kg-tmp" with open(tmp, "w", encoding="utf-8") as f: json.dump(conf, f, indent=2); f.write("\n") os.chmod(tmp, 0o600) os.replace(tmp, chemin) PY then echo " Cursor : serveur « veille » ajouté à ~/.cursor/mcp.json"; faits=$((faits + 1)) else echo " Cursor : ~/.cursor/mcp.json est illisible, non modifié — voir https://veille.casual-labs.ch/#installer" fi else echo " Cursor : python3 absent, configuration à la main — voir https://veille.casual-labs.ch/#installer" fi fi if command -v code >/dev/null 2>&1; then if code --add-mcp "{\"name\":\"veille\",\"type\":\"http\",\"url\":\"$URL\",\"headers\":{\"Authorization\":\"Bearer $JETON\"}}" >/dev/null 2>&1; then echo " VS Code : serveur « veille » ajouté"; faits=$((faits + 1)) else echo " VS Code : l'ajout a échoué, voir https://veille.casual-labs.ch/#installer" fi fi if [ "$faits" -eq 0 ]; then echo "Aucun client MCP configuré sur ce poste. Configuration à la main : https://veille.casual-labs.ch/#installer" exit 1 fi echo "Terminé. Dans une nouvelle session : « liste les graphes de veille »."