Alchemy CLI
Utilisez la Alchemy CLI (@alchemy/cli) pour des requêtes blockchain en direct, des tâches d'administration et de l'automation locale depuis le terminal. La CLI mappe chaque produit Alchemy (Node JSON-RPC, Token, NFT, Transfers, Prices, Portfolio, Simulation, Solana, Webhooks, Apps) à des invocations alchemy <command> avec sortie JSON structurée.
Quand utiliser cette skill (scope_in)
Utilisez alchemy-cli quand tous les critères suivants sont vrais :
- L'utilisateur veut du travail agent en direct — requêtes en direct, analyse, tâches d'administration ou automation locale que l'agent exécute maintenant dans cette session
@alchemy/cliest installé localement, ou la CLI et un serveur MCP sont disponibles, ou aucun n'est disponible (auquel cas installez la CLI — voir Install)
La CLI est le chemin d'exécution local de secours préféré pour le travail agent en direct. En cas de doute entre CLI et MCP, préférez la CLI.
Quand NE PAS utiliser cette skill (scope_out, handoff)
| Situation | Utilisez cette skill à la place |
|---|---|
| Données NFT/token, recherche, statistiques de collection | opensea-api |
| Acheter/vendre NFTs, listes, offres, exécution Seaport | opensea-marketplace |
| Échanges de tokens ERC20 | opensea-swaps |
| Configuration de signature de portefeuille | opensea-wallet |
| Construire/enregistrer/gater des outils agent IA | opensea-tool-sdk |
| MCP est déjà intégré dans votre client et la CLI n'est pas installée localement | alchemy-mcp |
| Construire du code applicatif qui s'exécute en dehors de cette session agent, avec une clé API Alchemy | alchemy-api |
| Construire du code applicatif sans clé API, ou en tant qu'agent autonome qui doit se financer lui-même, ou vous voulez explicitement x402/MPP | alchemy-agentic-gateway |
Ne pas utiliser cette skill pour écrire du code applicatif de production — les commandes CLI sont pour le travail agent en direct, pas pour être embarquées dans un logiciel livré.
Install
npm i -g @alchemy/cli
Si la CLI n'est pas installée et que l'utilisateur veut du travail agent en direct, installez-la. Ne revenez pas à des appels curl/HTTP bruts — ce chemin est couvert par alchemy-api.
Bootstrap
Exécutez ceci au début de chaque session pour obtenir le contrat de commande complet (chaque commande, flag, méthode d'authentification, code d'erreur et exemple) :
alchemy --json --no-interactive agent-prompt
Règles d'exécution
- TOUJOURS passer
--json --no-interactivesur chaque commande - Parser stdout en JSON sur le code de sortie 0
- Parser stderr en JSON sur un code de sortie non zéro
- NE JAMAIS exécuter
alchemyseul sans--json --no-interactive - NE JAMAIS utiliser curl ou HTTP brut quand une commande
alchemyCLI existe pour la tâche — c'est le cheminalchemy-api(clé API), pas cette skill - NE JAMAIS utiliser la CLI pour générer du code applicatif de production ; handoff à
alchemy-apioualchemy-agentic-gatewaypour du code livré
Preflight
Avant la première commande, exécutez les deux vérifications :
alchemy --json --no-interactive setup status
alchemy --json --no-interactive gas
setup status retourne {"complete": true, "satisfiedBy": "<source>"} si une authentification est configurée. Ne vous fiez pas à complete: true seul — il existe un faux positif connu où setup status reporte complete: true avec satisfiedBy: "auth_token", mais les commandes RPC échouent toujours avec AUTH_REQUIRED car aucune clé API n'a été dérivée du token d'auth.
gas est un test de smoke RPC léger qui détecte ceci. S'il retourne {"gasPrice": "0x...", ...}, RPC est correctement configuré. S'il retourne {"error": {"code": "AUTH_REQUIRED", ...}}, exécutez alchemy auth login (qui récupère et enregistre la clé API) ou alchemy config set api-key <key>, puis relancez gas pour confirmer.
Si setup status reporte complete: false, suivez d'abord les nextCommands dans la réponse, puis exécutez gas pour vérifier.
Configuration de l'authentification
La façon la plus rapide de s'authentifier est via une connexion navigateur :
alchemy auth login
Ceci ouvre un navigateur pour s'authentifier avec votre compte Alchemy et configure automatiquement la CLI avec vos identifiants.
Pour vérifier le statut d'authentification : alchemy auth status
Pour se déconnecter : alchemy auth logout
Méthodes d'authentification alternatives
| Méthode | Commande config | Variable d'env | Utilisée par |
|---|---|---|---|
| Connexion navigateur | alchemy auth login |
-- | Toutes les commandes (dérive clé API + clé d'accès depuis votre compte) |
| Clé API | alchemy config set api-key <key> |
ALCHEMY_API_KEY |
balance, tx, receipt, block, gas, logs, rpc, trace, debug, tokens, nfts, transfers, prices, portfolio, simulate, bundler, gas-manager, solana |
| Clé d'accès | alchemy config set access-key <key> |
ALCHEMY_ACCESS_KEY |
apps (tous les sous-commandes incl. configured-networks) |
| Clé webhook | alchemy config set webhook-api-key <key> |
ALCHEMY_WEBHOOK_API_KEY |
webhooks |
| Portefeuille x402 | alchemy wallet generate puis alchemy config set x402 true |
ALCHEMY_WALLET_KEY |
balance, tx, block, rpc, trace, debug, tokens, nfts, transfers |
alchemy network list et alchemy version / update-check ne nécessitent pas d'authentification.
Sélectionner une app par défaut
De nombreux sous-commandes apps (et les flux contrôlés par clé d'accès) opèrent sur une « app par défaut ». Si vous voyez APP_REQUIRED dans une réponse d'erreur, définissez-en une :
alchemy --json --no-interactive apps select <id>
# ou de manière équivalente
alchemy --json --no-interactive config set app <id>
Obtenez les clés API/accès sur dashboard.alchemy.com.
Correspondance tâche-commande
Node (EVM)
| Tâche | Commande |
|---|---|
| Solde ETH | alchemy balance <address> |
| Détails de transaction | alchemy tx <hash> |
| Reçu de transaction | alchemy receipt <hash> |
| Détails du bloc | alchemy block <number\|latest> |
| Prix du gas | alchemy gas |
| Logs d'événements | alchemy logs --address <addr> --from-block <n> --to-block <n> |
| JSON-RPC brut | alchemy rpc <method> [params...] |
| Méthodes trace | alchemy trace <method> [params...] |
| Méthodes debug | alchemy debug <method> [params...] |
Données
| Tâche | Commande |
|---|---|
| Soldes ERC-20 | alchemy tokens balances <address> |
| Soldes ERC-20 (formatés) | alchemy tokens balances <address> --metadata |
| Métadonnées de token | alchemy tokens metadata <contract> |
| Tolérance de token | alchemy tokens allowance --owner <addr> --spender <addr> --contract <addr> |
| Lister les NFTs possédés | alchemy nfts <address> [--limit <n>] [--page-key <key>] |
| Métadonnées de NFT | alchemy nfts metadata --contract <addr> --token-id <id> |
| Métadonnées de contrat NFT | alchemy nfts contract <address> |
| Historique de transfert | alchemy transfers <address> --category erc20,erc721,erc1155,external,internal,specialnft [--from-block <n>] [--to-block <n>] [--max-count <n>] [--page-key <key>] |
| Prix spot par symbole | alchemy prices symbol ETH,USDC |
| Prix spot par adresse | alchemy prices address --addresses '<json>' |
| Prix historiques | alchemy prices historical --body '<json>' |
| Portfolio de tokens multi-réseaux | alchemy portfolio tokens --body '<json>' |
| Soldes de tokens par paires adresse/réseau | alchemy portfolio token-balances --body '<json>' |
| Portfolio de NFTs multi-réseaux | alchemy portfolio nfts --body '<json>' |
| Contrats de NFT par paires adresse/réseau | alchemy portfolio nft-contracts --body '<json>' |
| Simuler une seule tx (deltas d'actifs) | alchemy simulate asset-changes --tx '<json>' [--block-tag <tag>] |
| Simuler une seule tx (trace d'exécution) | alchemy simulate execution --tx '<json>' [--block-tag <tag>] |
| Simuler un bundle (deltas d'actifs) | alchemy simulate asset-changes-bundle --txs '<json-array>' [--block-tag <tag>] |
| Simuler un bundle (trace d'exécution) | alchemy simulate execution-bundle --txs '<json-array>' [--block-tag <tag>] |
Solana
| Tâche | Commande |
|---|---|
| JSON-RPC Solana | alchemy solana rpc <method> [params...] |
| Solana DAS (NFTs/actifs) | alchemy solana das <method> '<json>' |
Webhooks
| Tâche | Commande |
|---|---|
| Lister les webhooks | alchemy webhooks list |
| Créer un webhook | alchemy webhooks create --body '<json>' [--dry-run] |
| Mettre à jour un webhook | alchemy webhooks update --body '<json>' [--dry-run] |
| Supprimer un webhook | alchemy webhooks delete <id> [--yes] [--dry-run] |
| Obtenir les adresses du webhook d'activité d'adresse | alchemy webhooks addresses <id> |
| Obtenir les filtres du webhook d'activité NFT | alchemy webhooks nft-filters <id> |
Abstraction de compte (ERC-4337)
| Tâche | Commande |
|---|---|
| Envoyer une UserOperation | alchemy bundler send-user-operation --user-op '<json>' --entry-point <addr> |
| Estimer le gas UserOperation | alchemy bundler estimate-user-operation-gas --user-op '<json>' --entry-point <addr> [--state-override '<json>'] |
| Obtenir le reçu UserOperation | alchemy bundler get-user-operation-receipt --user-op-hash <hash> |
| Demander des données gas + paymaster | alchemy gas-manager request-gas-and-paymaster --body '<json>' |
| Demander un devis de token paymaster | alchemy gas-manager request-paymaster-token-quote --body '<json>' |
Portefeuille (x402)
| Tâche | Commande |
|---|---|
| Générer un nouveau portefeuille | alchemy wallet generate |
| Importer un portefeuille à partir d'un fichier clé | alchemy wallet import <path> |
| Afficher l'adresse du portefeuille localement configuré | alchemy wallet address |
Gestion d'app
| Tâche | Commande |
|---|---|
| Lister les apps | alchemy apps list [--cursor <c>] [--limit <n>] [--all] [--search <q>] [--id <appId>] |
| Obtenir les détails d'une app | alchemy apps get <id> |
| Créer une app | alchemy apps create --name "My App" --networks eth-mainnet [--description <desc>] [--products <ids>] [--dry-run] |
| Mettre à jour les métadonnées d'une app | alchemy apps update <id> --name "New Name" [--description <desc>] [--dry-run] |
| Mettre à jour la liste blanche de réseau d'une app | alchemy apps networks <id> --networks eth-mainnet,base-mainnet [--dry-run] |
| Mettre à jour la liste blanche d'adresse d'une app | alchemy apps address-allowlist <id> --addresses 0xAA,0xBB [--dry-run] |
| Mettre à jour la liste blanche d'origine d'une app | alchemy apps origin-allowlist <id> --origins https://a.com,https://b.com [--dry-run] |
| Mettre à jour la liste blanche IP d'une app | alchemy apps ip-allowlist <id> --ips 1.2.3.4,5.6.7.8 [--dry-run] |
| Supprimer une app | alchemy apps delete <id> [--yes] [--dry-run] |
| Sélectionner l'app par défaut | alchemy apps select <id> (équivalent à alchemy config set app <id>) |
| Lister les réseaux configurés pour une app | alchemy apps configured-networks [--app-id <id>] |
Lister les identifiants de chaîne Admin API (pour apps create/update) |
alchemy apps chains |
Lister tous les slugs de réseau RPC (pour --network) |
alchemy network list [--mainnet-only] [--testnet-only] [--search <term>] |
Administration CLI
| Tâche | Commande |
|---|---|
| Vérifier les mises à jour de CLI | alchemy update-check |
| Afficher la configuration | alchemy config list |
| Réinitialiser la configuration | alchemy config reset --yes |
| Version de la CLI | alchemy version |
Flags globaux
| Flag | Description |
|---|---|
--json |
Forcer la sortie JSON (activée automatiquement en pipe) |
--no-interactive |
Désactiver les prompts et REPL |
-n, --network <network> |
Cibler le réseau (défaut : eth-mainnet, env : ALCHEMY_NETWORK) |
--api-key <key> |
Remplacer la clé API par commande (env : ALCHEMY_API_KEY) |
--access-key <key> |
Remplacer la clé d'accès par commande (env : ALCHEMY_ACCESS_KEY) |
--x402 |
Utiliser l'authentification gateway basée sur portefeuille x402 pour cette commande |
--wallet-key-file <path> |
Chemin du fichier clé privée du portefeuille (pour x402) |
--timeout <ms> |
Timeout des requêtes en millisecondes |
-q, --quiet |
Supprimer la sortie non essentielle |
--verbose |
Enregistrer les détails requête/réponse sur stderr |
--debug |
Activer les diagnostics de debug |
--no-color |
Désactiver la sortie en couleur |
--reveal |
Afficher les secrets en texte brut (à utiliser avec prudence ; destiné aux flux de révélation explicite) |
Gestion des erreurs
Les erreurs retournent du JSON structuré sur stderr. Chaque erreur a un code, un exitCode (1–9), un booléen retryable, et un indice recovery. Codes clés (depuis agent-prompt) :
| Code | Exit | Retryable | Récupération |
|---|---|---|---|
AUTH_REQUIRED |
3 | Non | Exécutez alchemy auth login, ou définissez ALCHEMY_API_KEY / alchemy config set api-key <key> |
INVALID_API_KEY |
3 | Non | Vérifiez la clé API ; définissez-en une valide avec alchemy config set api-key <key> |
ACCESS_KEY_REQUIRED |
3 | Non | Définissez ALCHEMY_ACCESS_KEY ou exécutez alchemy config set access-key <key> |
INVALID_ACCESS_KEY |
3 | Non | Vérifiez la clé d'accès sur dashboard.alchemy.com |
APP_REQUIRED |
3 | Non | Sélectionnez une app par défaut : alchemy apps select <id> (ou alchemy config set app <id>) |
NETWORK_NOT_ENABLED |
3 | Non | Activez le réseau cible pour votre app sur dashboard.alchemy.com |
SETUP_REQUIRED |
3 | Non | Exécutez alchemy --json setup status et suivez nextCommands |
PAYMENT_REQUIRED |
9 | Non | Financez le portefeuille x402 ou basculez vers l'authentification par clé API |
RATE_LIMITED |
5 | Oui | Attendez et relancez avec backoff ; envisagez de mettre à niveau votre plan |
NETWORK_ERROR |
6 | Oui | Vérifiez la connexion et relancez |
RPC_ERROR |
7 | Non | Vérifiez la méthode, les paramètres et le réseau ; vérifiez que la clé API a accès |
ADMIN_API_ERROR |
8 | Non | Vérifiez le message d'erreur ; vérifiez les permissions de la clé d'accès |
NOT_FOUND |
4 | Non | Vérifiez que l'identifiant de ressource (adresse, hash, id) est correct |
INVALID_ARGS |
2 | Non | Vérifiez l'utilisation de la commande via alchemy --json help <command> |
INTERNAL_ERROR |
1 | Non | Erreur inattendue ; relancez ou signalez un bug |
Obtenez la liste canonique complète à tout moment avec alchemy --json --no-interactive agent-prompt.
Handoff vers d'autres skills
| L'utilisateur veut... | Handoff vers |
|---|---|
| Intégrer Alchemy dans du code applicatif qui se livre en production, avec une clé API | alchemy-api |
| Intégrer Alchemy dans du code applicatif sans clé API, ou pay-per-request en tant qu'agent autonome | alchemy-agentic-gateway |
| Exécuter du travail en direct mais la CLI n'est pas installée et il préfère ne pas l'installer (MCP est intégré) | alchemy-mcp |
Pontage vers le flux alchemy-api (extraire une clé API)
Si l'utilisateur commence un projet de code app et $ALCHEMY_API_KEY n'est pas défini dans son shell, utilisez la CLI pour récupérer une clé depuis son compte Alchemy, persistez-la au .env du projet pour qu'elle survive entre les sessions de terminal, et exportez-la pour le shell actuel pour que l'agent puisse l'utiliser immédiatement.
Sécurité : NE JAMAIS afficher, imprimer ou autrement présenter la valeur de clé API extraite dans la sortie de conversation. Référencez-la uniquement comme
$ALCHEMY_API_KEYaprès exportation. Traitez-la comme un mot de passe.
# 1. Essayez de lire une clé mise en cache depuis la configuration CLI (lecture seule, sûr non-interactif).
KEY="$(alchemy --no-interactive --json --reveal config get api-key 2>/dev/null | jq -r .value)"
# 2. Si vide/null, exécutez le flux interactif.
# Note : auth login ouvre un navigateur et apps select affiche un sélecteur, donc NE PASSEZ PAS
# --no-interactive ici. Si vous connaissez déjà l'id d'app, passez-le
# explicitement pour ignorer le sélecteur : `alchemy --no-interactive --json apps select <id>`.
if [ -z "$KEY" ] || [ "$KEY" = "null" ]; then
alchemy auth login # ouvre le navigateur ; configure les identifiants du compte
alchemy --json apps select # sélecteur interactif (omettez --no-interactive pour qu'il se rende)
KEY="$(alchemy --no-interactive --json --reveal config get api-key | jq -r .value)"
fi
# 3. Persistez au .env du projet (pratique standard — survit aux redémarrages de terminal
# et est chargé par dotenv / les chargeurs d'env du framework au runtime).
# Utilisez .env.local si le framework du projet l'attend (ex Next.js).
ENV_FILE=".env"
touch "$ENV_FILE"
if grep -q '^ALCHEMY_API_KEY=' "$ENV_FILE"; then
sed -i.bak "s|^ALCHEMY_API_KEY=.*|ALCHEMY_API_KEY=$KEY|" "$ENV_FILE" && rm "$ENV_FILE.bak"
else
echo "ALCHEMY_API_KEY=$KEY" >> "$ENV_FILE"
fi
grep -qxF "$ENV_FILE" .gitignore 2>/dev/null || echo "$ENV_FILE" >> .gitignore
# 4. Exportez vers le shell actuel pour que l'agent puisse appeler l'API immédiatement.
export ALCHEMY_API_KEY="$KEY"
Handoff vers la skill alchemy-api une fois que .env a la clé et que ALCHEMY_API_KEY est exportée.