{"id":50529703,"url":"https://github.com/dimer47/tailscale-cli","last_synced_at":"2026-06-03T12:01:25.736Z","repository":{"id":354917603,"uuid":"1226000465","full_name":"dimer47/tailscale-cli","owner":"dimer47","description":"CLI for the Tailscale API v2 — manage devices, ACLs, DNS, keys, users, webhooks \u0026 more from the terminal. Includes MCP server (39 tools) for Claude Code / AI assistants.","archived":false,"fork":false,"pushed_at":"2026-04-30T22:16:22.000Z","size":152,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-30T23:19:07.169Z","etag":null,"topics":["claude-code","cli","devops","golang","mcp","model-context-protocol","network","tailscale","tailscale-api","vpn"],"latest_commit_sha":null,"homepage":"https://tailscale.com/api","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dimer47.png","metadata":{"files":{"readme":"README.fr.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-30T21:44:33.000Z","updated_at":"2026-04-30T22:17:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dimer47/tailscale-cli","commit_stats":null,"previous_names":["dimer47/tailscale-cli"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/dimer47/tailscale-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Ftailscale-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Ftailscale-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Ftailscale-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Ftailscale-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimer47","download_url":"https://codeload.github.com/dimer47/tailscale-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimer47%2Ftailscale-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33863264,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","cli","devops","golang","mcp","model-context-protocol","network","tailscale","tailscale-api","vpn"],"created_at":"2026-06-03T12:01:25.003Z","updated_at":"2026-06-03T12:01:25.731Z","avatar_url":"https://github.com/dimer47.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tailscale-cli\n\nCLI pour l'API Tailscale v2 — gérez votre tailnet depuis le terminal.\n\n## Fonctionnalités\n\n- **85 endpoints** couverts : devices, ACL, DNS, clés, utilisateurs, webhooks, services, etc.\n- **Token sécurisé** : stocké dans le trousseau système (macOS Keychain, Windows Credential Manager, Linux Secret Service)\n- **Multi-contextes** : gérez plusieurs comptes Tailscale\n- **Sortie flexible** : table, JSON, YAML, CSV\n- **Multi-plateforme** : macOS, Linux, Windows (amd64 et arm64)\n\n## Prérequis\n\n- Un compte [Tailscale](https://tailscale.com) avec un accès à la console admin\n- Un **token API** Tailscale (créé depuis [Settings \u003e Keys](https://login.tailscale.com/admin/settings/keys))\n\n## Installation\n\n### Méthode 1 : Télécharger le binaire (recommandé)\n\nRendez-vous sur la page [Releases](https://github.com/dimer47/tailscale-cli/releases/latest) et téléchargez l'archive correspondant à votre plateforme.\n\nOu en une commande :\n\n**macOS (Apple Silicon — M1/M2/M3/M4) :**\n\n```bash\ncurl -sL https://github.com/dimer47/tailscale-cli/releases/latest/download/tailscale-cli_darwin_arm64.tar.gz | tar xz\nsudo mv tailscale-cli /usr/local/bin/\n```\n\n**macOS (Intel) :**\n\n```bash\ncurl -sL https://github.com/dimer47/tailscale-cli/releases/latest/download/tailscale-cli_darwin_amd64.tar.gz | tar xz\nsudo mv tailscale-cli /usr/local/bin/\n```\n\n**Linux (amd64) :**\n\n```bash\ncurl -sL https://github.com/dimer47/tailscale-cli/releases/latest/download/tailscale-cli_linux_amd64.tar.gz | tar xz\nsudo mv tailscale-cli /usr/local/bin/\n```\n\n**Linux (arm64 — Raspberry Pi, etc.) :**\n\n```bash\ncurl -sL https://github.com/dimer47/tailscale-cli/releases/latest/download/tailscale-cli_linux_arm64.tar.gz | tar xz\nsudo mv tailscale-cli /usr/local/bin/\n```\n\n**Windows :**\n\nTéléchargez `tailscale-cli_windows_amd64.zip` depuis les [Releases](https://github.com/dimer47/tailscale-cli/releases/latest), décompressez et ajoutez le dossier au `PATH`.\n\n### Méthode 2 : Depuis les sources (nécessite Go 1.21+)\n\n```bash\ngo install github.com/dimer47/tailscale-cli@latest\n```\n\nLe binaire sera installé dans `$GOPATH/bin/` (généralement `~/go/bin/`). Assurez-vous que ce répertoire est dans votre `PATH`.\n\n### Méthode 3 : Compiler localement\n\n```bash\ngit clone https://github.com/dimer47/tailscale-cli.git\ncd tailscale-cli\ngo build -o tailscale-cli .\n./tailscale-cli version\n```\n\n### Vérifier l'installation\n\n```bash\ntailscale-cli version\n# tailscale-cli version 0.1.0 (commit: abc1234, built: 2026-04-30T21:46:43Z)\n```\n\n## Mise à jour\n\nLa CLI vérifie automatiquement les nouvelles versions au démarrage et vous notifie quand une mise à jour est disponible.\n\n```bash\n# Mettre à jour vers la dernière version\ntailscale-cli self-update\n\n# Vérifier les mises à jour sans installer\ntailscale-cli self-update --check\n```\n\nLa mise à jour est téléchargée depuis GitHub Releases et remplace le binaire actuel. Si le binaire est dans un répertoire protégé (ex : `/usr/local/bin/`), `sudo` sera demandé automatiquement.\n\n## Démarrage rapide\n\n### 1. Obtenir un token API Tailscale\n\n1. Connectez-vous à la [console admin Tailscale](https://login.tailscale.com/admin/settings/keys)\n2. Allez dans **Settings \u003e Keys**\n3. Cliquez **Generate API access token**\n4. Choisissez la durée d'expiration (1 à 90 jours)\n5. Copiez le token (`tskey-api-xxxxx...`)\n\n### 2. Configurer la CLI\n\n```bash\ntailscale-cli auth login\n```\n\nRépondez aux 3 questions :\n```\nNom du contexte (default) : ↵          # Appuyez Entrée pour \"default\"\nToken API Tailscale : tskey-api-xxxxx   # Collez votre token\nTailnet (- pour le tailnet par défaut) : ↵   # Appuyez Entrée\n```\n\nLe token est stocké dans le **trousseau système** (macOS Keychain, Windows Credential Manager, ou Linux Secret Service) — chiffré, jamais en clair sur le disque.\n\n### 3. Tester\n\n```bash\n# Lister vos devices\ntailscale-cli device list\n\n# En JSON\ntailscale-cli device list --json\n\n# Voir les paramètres de votre tailnet\ntailscale-cli settings get\n```\n\n## Configuration\n\n### Priorité de résolution du token\n\n| Priorité | Source | Usage |\n|----------|--------|-------|\n| 1 | Flag `--api-token` | Tests ponctuels |\n| 2 | Variable `TSCLI_API_TOKEN` | CI/CD, scripts |\n| 3 | Trousseau système | Usage quotidien (via `auth login`) |\n| 4 | Fichier config (legacy) | Migration depuis anciennes versions |\n\n### Multi-contextes (plusieurs comptes Tailscale)\n\n```bash\n# Configurer un contexte \"work\"\ntailscale-cli auth login\n# → Entrez \"work\" comme nom de contexte\n\n# Configurer un contexte \"personal\"\ntailscale-cli auth login\n# → Entrez \"personal\" comme nom de contexte\n\n# Voir tous les contextes (* = actif)\ntailscale-cli auth list\n# * work     (tailnet: mycompany.com, token dans trousseau)\n#   personal (tailnet: -, token dans trousseau)\n\n# Changer de contexte\ntailscale-cli auth switch personal\n\n# Utiliser un contexte ponctuellement\ntailscale-cli device list --context work\n\n# Vérifier le statut (token valide ?)\ntailscale-cli auth status\n```\n\n### Renouveler un token expiré\n\nLes tokens Tailscale expirent après 1 à 90 jours. Quand un token expire :\n\n```bash\ntailscale-cli auth status\n# Token : ****abcd1234 (source: trousseau système)\n# Statut : invalide ou expiré\n\n# Créez un nouveau token sur https://login.tailscale.com/admin/settings/keys\n# Puis relancez auth login (l'ancien token est remplacé automatiquement) :\ntailscale-cli auth login\n```\n\n## Utilisation\n\n### Devices\n\n```bash\ntailscale-cli device list                              # Lister tous les devices\ntailscale-cli device list --json                       # Sortie JSON\ntailscale-cli device list --filter isEphemeral=true    # Filtrer\ntailscale-cli device get \u003cnodeId\u003e                      # Détails d'un device\ntailscale-cli device get \u003cnodeId\u003e --fields all         # Tous les champs\ntailscale-cli device authorize \u003cnodeId\u003e                # Autoriser un device\ntailscale-cli device deauthorize \u003cnodeId\u003e              # Désautoriser\ntailscale-cli device expire \u003cnodeId\u003e                   # Expirer la clé\ntailscale-cli device set-name \u003cnodeId\u003e mon-serveur     # Renommer\ntailscale-cli device set-tags \u003cnodeId\u003e --tags tag:prod # Définir les tags\ntailscale-cli device set-ip \u003cnodeId\u003e 100.80.0.1        # Changer l'IP\ntailscale-cli device delete \u003cnodeId\u003e --confirm         # Supprimer\n```\n\n### Routes\n\n```bash\ntailscale-cli device routes list \u003cnodeId\u003e\ntailscale-cli device routes set \u003cnodeId\u003e --routes 10.0.0.0/16,192.168.1.0/24\n```\n\n### ACL / Policy File\n\n```bash\ntailscale-cli acl get                                  # Récupérer l'ACL\ntailscale-cli acl get --format json --details          # Avec détails\ntailscale-cli acl set --file policy.hujson             # Appliquer un ACL\ntailscale-cli acl validate --file policy.hujson        # Valider sans appliquer\ntailscale-cli acl preview --type user --preview-for admin@company.com --file policy.hujson\n```\n\n### DNS\n\n```bash\ntailscale-cli dns config get                           # Config DNS complète\ntailscale-cli dns preferences set --magic-dns true     # Activer MagicDNS\ntailscale-cli dns nameservers list                     # Lister les nameservers\ntailscale-cli dns nameservers set --nameservers 8.8.8.8,1.1.1.1\ntailscale-cli dns searchpaths set --search-paths corp.internal\ntailscale-cli dns split update --domain corp.internal --servers 10.0.0.53\n```\n\n### Clés (auth keys, API tokens, OAuth)\n\n```bash\ntailscale-cli key list --all                           # Lister toutes les clés\ntailscale-cli key create --type auth --reusable --preauthorized --tags tag:ci --expiry 86400\ntailscale-cli key get \u003ckeyId\u003e                          # Détails d'une clé\ntailscale-cli key delete \u003ckeyId\u003e --confirm             # Supprimer\n```\n\n### Utilisateurs\n\n```bash\ntailscale-cli user list                                # Lister les utilisateurs\ntailscale-cli user list --type all --role admin         # Filtrer\ntailscale-cli user get \u003cuserId\u003e                        # Détails\ntailscale-cli user set-role \u003cuserId\u003e admin              # Changer le rôle\ntailscale-cli user approve \u003cuserId\u003e                    # Approuver\ntailscale-cli user suspend \u003cuserId\u003e                    # Suspendre\ntailscale-cli user restore \u003cuserId\u003e                    # Restaurer\n```\n\n### Webhooks\n\n```bash\ntailscale-cli webhook list\ntailscale-cli webhook create --url https://hooks.slack.com/xxx --provider slack --events nodeCreated,nodeDeleted\ntailscale-cli webhook test \u003cid\u003e\ntailscale-cli webhook rotate-secret \u003cid\u003e\ntailscale-cli webhook delete \u003cid\u003e --confirm\n```\n\n### Paramètres du tailnet\n\n```bash\ntailscale-cli settings get\ntailscale-cli settings update --devices-approval true\ntailscale-cli settings update --devices-key-duration 90\ntailscale-cli settings update --https true\n```\n\n### Services (VIP)\n\n```bash\ntailscale-cli service list\ntailscale-cli service create svc:web --ports tcp:80,tcp:443 --tags tag:prod\ntailscale-cli service hosts svc:web\ntailscale-cli service approve svc:web \u003cnodeId\u003e --approved true\ntailscale-cli service delete svc:web --confirm\n```\n\n### Invitations\n\n```bash\ntailscale-cli invite user list\ntailscale-cli invite user create --email dev@company.com --role member\ntailscale-cli invite device list \u003cnodeId\u003e\ntailscale-cli invite device create \u003cnodeId\u003e --email partner@ext.com\n```\n\n### Logs\n\n```bash\ntailscale-cli log audit list --start 2026-04-29T00:00:00Z --end 2026-04-30T00:00:00Z\ntailscale-cli log audit list --start ... --end ... --event NODE.CREATE,USER.CREATE\ntailscale-cli log network list --start ... --end ...\ntailscale-cli log stream status configuration\n```\n\n## Variables d'environnement\n\n| Variable | Description | Défaut |\n|----------|-------------|--------|\n| `TSCLI_API_TOKEN` | Token API Tailscale | — |\n| `TSCLI_TAILNET` | Tailnet cible | `-` (défaut du token) |\n| `TSCLI_OUTPUT` | Format de sortie : `table`, `json`, `yaml` | `table` |\n| `TSCLI_DEBUG` | Mode debug (`true`/`false`) | `false` |\n| `TSCLI_CONFIG` | Chemin du fichier de config | `~/.tailscale-cli/config.json` |\n| `TSCLI_CONTEXT` | Contexte actif | `default` |\n| `NO_COLOR` | Désactiver les couleurs | — |\n\n## Autocomplétion shell\n\n```bash\n# Bash\ntailscale-cli completion bash \u003e /etc/bash_completion.d/tailscale-cli\n\n# Zsh (ajoutez à votre .zshrc)\ntailscale-cli completion zsh \u003e \"${fpath[1]}/_tailscale-cli\"\n\n# Fish\ntailscale-cli completion fish \u003e ~/.config/fish/completions/tailscale-cli.fish\n\n# PowerShell\ntailscale-cli completion powershell \u003e tailscale-cli.ps1\n```\n\n## Intégration MCP (Claude Code, VS Code, JetBrains)\n\nLa CLI intègre un serveur [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) qui expose **39 tools** directement utilisables par les assistants IA.\n\n### Configuration\n\nAjoutez dans vos settings Claude Code (ou VS Code / JetBrains avec l'extension Claude) :\n\n```json\n{\n  \"mcpServers\": {\n    \"tailscale\": {\n      \"command\": \"tailscale-cli\",\n      \"args\": [\"mcp-serve\"],\n      \"env\": {\n        \"TSCLI_API_TOKEN\": \"tskey-api-xxxxx\"\n      }\n    }\n  }\n}\n```\n\n\u003e Si vous avez déjà configuré le token via `tailscale-cli auth login`, le serveur MCP utilisera automatiquement le trousseau système — pas besoin de la variable `TSCLI_API_TOKEN`.\n\n### Tools MCP disponibles\n\n| Tool | Description |\n|------|-------------|\n| `device-list` | Liste tous les devices du tailnet |\n| `device-get` | Détails d'un device |\n| `device-authorize` | Autoriser/désautoriser un device |\n| `device-set-tags` | Définir les tags d'un device |\n| `device-set-name` | Renommer un device |\n| `device-expire` | Expirer la clé d'un device |\n| `device-delete` | Supprimer un device |\n| `device-routes-list` | Lister les routes d'un device |\n| `device-routes-set` | Définir les routes d'un device |\n| `acl-get` | Récupérer le policy file (ACL) |\n| `acl-set` | Définir le policy file |\n| `acl-validate` | Valider un policy file |\n| `dns-config-get` | Configuration DNS complète |\n| `dns-nameservers-list/set` | Gérer les nameservers |\n| `dns-preferences-get/set` | MagicDNS on/off |\n| `dns-split-get` | Configuration split DNS |\n| `key-list` | Lister les clés |\n| `key-create` | Créer une auth key |\n| `key-get` / `key-delete` | Détails / suppression d'une clé |\n| `user-list` | Lister les utilisateurs |\n| `user-get` / `user-set-role` | Détails / changer le rôle |\n| `user-approve/suspend/restore` | Gestion du statut utilisateur |\n| `settings-get` / `settings-update` | Paramètres du tailnet |\n| `webhook-list/create/test/delete` | Gestion des webhooks |\n| `service-list/get/hosts` | Gestion des Services |\n| `contact-get` | Contacts du tailnet |\n| `log-audit-list` | Logs d'audit |\n\n### Exemple d'utilisation dans Claude Code\n\nUne fois configuré, vous pouvez simplement dire :\n\n- *\"Liste mes devices Tailscale\"*\n- *\"Quels tags sont définis dans mes ACL ?\"*\n- *\"Crée une auth key réutilisable avec le tag tag:ci\"*\n- *\"Active MagicDNS sur mon tailnet\"*\n\nClaude appellera automatiquement les bons tools MCP.\n\n## Développement\n\n```bash\n# Cloner\ngit clone https://github.com/dimer47/tailscale-cli.git\ncd tailscale-cli\n\n# Compiler\ngo build -o tailscale-cli .\n\n# Lancer les tests\ngo test ./...\n\n# Linter\ngo vet ./...\n```\n\n### Créer une nouvelle release\n\n```bash\ngit tag v0.2.0\ngit push origin v0.2.0\n# GitHub Actions compile et publie automatiquement\n```\n\n## Licence\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimer47%2Ftailscale-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimer47%2Ftailscale-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimer47%2Ftailscale-cli/lists"}