> ## Documentation index
> Fetch the complete documentation index at: https://tgcloud.docs7.io/llms.txt
> Ask it with GET https://tgcloud.docs7.io/ask?q=<keywords or question>. Short keywords rank best.
> Use these to discover all available pages before exploring further.

# Outils

> Les 16 outils de tgcloud-mcp

# Outils

Chaque outil reçoit `project_dir`, un chemin absolu vers un projet tgcloud (`create_project` reçoit `parent_dir` et `name` à la place).

<CardGroup cols={2}>
  <Card title="Cycle de vie" icon="hammer" href="#lifecycle">
    create, init, login, add, upgrade
  </Card>
  <Card title="Synchronisation" icon="refresh" href="#sync">
    status, diff, push, deploy, pull, fetch, reset
  </Card>
  <Card title="Données" icon="database" href="#data">
    lancer un handler ou un endpoint, migrate
  </Card>
  <Card title="Webhook" icon="link" href="#webhook">
    statut et sync, y compris un bot silencieux
  </Card>
</CardGroup>

## Cycle de vie {#lifecycle}

| Outil | CLI | Description |
|---|---|---|
| `create_project` | `npm create @tgcloud/bot` | Nouveau projet (`parent_dir`, `name`) |
| `init_project` | `tgcloud init` | Échafaudage dans un dossier existant, y compris une Mini App reconnue |
| `login_bot` | `tgcloud login` | Lie le bot avec le jeton d'accès CLI (`app<id>:<secret>`) ; jeton via stdin, masqué |
| `add_module` | `tgcloud add` | Nouveau module : `handlers/<type>`, `endpoints/<name>`, `lib/<path>` |
| `upgrade` | `tgcloud upgrade` | Déplace une disposition d'avant 0.2.0 dans `tgcloud/`. `dry_run: true` par défaut ; appliquer exige `confirm: true` |

## Synchronisation {#sync}

| Outil | CLI | Description |
|---|---|---|
| `status` | `tgcloud status` | Écarts locaux par rapport à l'instantané (hors ligne), y compris les fichiers statiques et le webhook |
| `diff` | `tgcloud diff` | Diff ligne à ligne (hors ligne) |
| `push` | `tgcloud push` | Déploiement atomique. Ne construit pas le front et ne migre pas. `force: true` exige `confirm: true` |
| `deploy` | `npm run build` + `tgcloud push` | Construit si `package.json` a un script build, puis push. `skip_build: true` ne fait que push |
| `pull` | `tgcloud pull` | Nuage → instantané et fichiers de travail. N'écrit pas le dossier de build de la Mini App |
| `fetch` | `tgcloud fetch` | Nuage → instantané seulement |
| `reset` | `tgcloud reset` | Abandonne les modifications locales des modules ; exige `confirm: true` |

## Données {#data}

| Outil | CLI | Description |
|---|---|---|
| `run_handler` | `tgcloud run` | Exécute un handler ou un endpoint sans déployer. `args` et `ctx` sont du JSON5. `args` est le premier argument (la charge utile : un `Message` pour un handler, l'entrée pour un endpoint) ; `ctx` le second (`ctx.update` est l'Update brut pour un handler, avec `update_id` ; `initData` pour un endpoint) |
| `migrate` | `tgcloud migrate` | `dry_run: true` (défaut) ne fait qu'un aperçu. Appliquer exige `dry_run: false` et `confirm: true`. `apply: "safe"` vaut `--safe` ; `apply: "yes"` (défaut à l'application) vaut `--yes`. `local: true` vaut `--local` |

## Webhook {#webhook}

| Outil | CLI | Description |
|---|---|---|
| `webhook_status` | `tgcloud webhook` | URL, allowed_updates, file d'attente, dernière erreur, synchronisé ou non |
| `webhook_sync` | `tgcloud webhook sync` | Réoriente le webhook. `drop_pending: true` exige `confirm: true` |

Ajouter ou retirer un handler peut désynchroniser le webhook. `push` ne garantit pas le rafraîchissement. Appelez `webhook_sync` après ce genre de déploiement.

## Parcours

- **Bot silencieux** : `webhook_status` → `status` / `diff` → `push` → `webhook_sync`
- **Logs déployés** : aucune commande ne les télécharge ; lisez la dernière erreur de livraison dans `webhook_status`, puis reproduisez avec `run_handler` (sa sortie `console.*` est locale, pas celle du bot déployé)
- **Conflit de révision au push** : `fetch` → `diff` → `push` (ou `force` avec `confirm`)
- **Schéma** : modifier `schema.js` → `push` → `migrate` (dry-run) → `migrate` avec `confirm`. Sans suppression, `apply: "safe"`
- **Front de Mini App** : `deploy`, pas un simple `push`
