I vault e le credenziali sono primitive di autenticazione che ti consentono di registrare una sola volta le credenziali per servizi di terze parti e di referenziarle tramite ID al momento della creazione della sessione. Questo significa che non devi gestire un tuo archivio di segreti, trasmettere token a ogni chiamata o perdere traccia di quale utente finale l'agente stava rappresentando.
Il riferimento al vault è un parametro per sessione, quindi puoi gestire il tuo prodotto alla granularità della risorsa agent e i tuoi utenti alla granularità della risorsa session.
Un vault è la raccolta di credentials associate a un utente finale. Assegnagli un display_name e, facoltativamente, contrassegnalo con metadata in modo da poterlo ricollegare ai tuoi record utente.
VAULT_ID=$(ant beta:vaults create --transform id --raw-output < alice.vault.yaml)
echo "$VAULT_ID" # "vlt_01ABC..."display_name: Alice
metadata:
external_user_id: usr_abc123La risposta è il record completo del vault:
{
"type": "vault",
"id": "vlt_01ABC...",
"display_name": "Alice",
"metadata": { "external_user_id": "usr_abc123" },
"created_at": "2026-03-18T10:00:00Z",
"updated_at": "2026-03-18T10:00:00Z",
"archived_at": null
}Sono supportate due categorie di credenziali:
mcp_oauth, static_bearer): ogni credenziale è identificata da un mcp_server_url. Quando l'agente si connette a un server a quell'URL durante l'esecuzione della sessione, il token viene iniettato automaticamente.environment_variable): ogni credenziale è identificata da un secret_name (il nome della variabile d'ambiente) e memorizzata nella sandbox come segnaposto opaco. Quando l'agente avvia una richiesta in uscita, il segnaposto opaco viene sostituito con il segreto reale in fase di egress. L'agente non vede mai il valore del segreto. Usa questa opzione per qualsiasi servizio che si autentica tramite una variabile d'ambiente, come CLI, SDK o chiamate API dirette.I valori effettivi delle credenziali che fornisci (token, access_token, refresh_token, client_secret, secret_value) sono trattati come campi sensibili di sola scrittura e non vengono mai restituiti nelle risposte dell'API.
Usa mcp_oauth quando il server MCP utilizza OAuth 2.0. Se fornisci un blocco refresh, Anthropic aggiorna l'access token per tuo conto quando scade.
Il campo refresh.token_endpoint_auth.type indica come autenticare la chiamata di refresh:
none: client pubblicoclient_secret_basic: autenticazione HTTP Basic con il client secretclient_secret_post: client secret nel corpo della POSTCREDENTIAL_ID=$(ant beta:vaults:credentials create \
--vault-id "$VAULT_ID" \
--display-name "Alice's Slack" \
--transform id --raw-output <<'YAML'
auth:
type: mcp_oauth
mcp_server_url: https://mcp.slack.com/mcp
access_token: xoxp-...
expires_at: "2099-12-31T23:59:59Z"
refresh:
token_endpoint: https://slack.com/api/oauth.v2.access
client_id: "1234567890.0987654321"
scope: channels:read chat:write
refresh_token: xoxe-1-...
token_endpoint_auth:
type: client_secret_post
client_secret: abc123...
YAML
)Le credenziali vengono memorizzate così come fornite e non vengono convalidate fino all'esecuzione della sessione. Una credenziale non valida si manifesta come errore di autenticazione o errore downstream durante la sessione, che viene emesso ma non impedisce alla sessione di continuare.
Vincoli:
mcp_server_url (credenziali MCP) e secret_name (credenziali di tipo variabile d'ambiente) devono essere univoci tra le credenziali attive in un vault. La creazione di un duplicato restituisce un errore 409.mcp_server_url o secret_name, archivia la credenziale e creane una nuova.Passa vault_ids quando crei una sessione:
SESSION_ID=$(ant beta:sessions create \
--agent "$AGENT_ID" \
--environment-id "$ENVIRONMENT_ID" \
--vault-id "$VAULT_ID" \
--title "Alice's Slack digest" \
--transform id --raw-output)Comportamento a runtime:
mcp_server_url, la connessione viene tentata senza autenticazione e genererà un errore se il server richiede l'autenticazione.I valori dei segreti, display_name e (sulle credenziali di tipo variabile d'ambiente) injection_location possono essere aggiornati. Gli aggiornamenti di injection_location vengono uniti per campo, come descritto nella scheda Variabile d'ambiente di Aggiungi una credenziale. Per una sessione in esecuzione, un aggiornamento di injection_location si propaga allo stesso modo di una rotazione del segreto: le credenziali della sessione vengono risolte nuovamente senza riavvio, come descritto in Ciclo di vita delle credenziali, e le posizioni aggiornate si applicano alle successive richieste in uscita della sessione. I campi strutturali (mcp_server_url, secret_name, token_endpoint, client_id) sono bloccati dopo la creazione. Per modificarli, archivia la credenziale e creane una nuova.
ant beta:vaults:credentials update \
--vault-id "$VAULT_ID" \
--credential-id "$CREDENTIAL_ID" <<'YAML'
auth:
type: mcp_oauth
access_token: xoxp-new-...
expires_at: "2099-12-31T23:59:59Z"
refresh:
refresh_token: xoxe-1-new-...
YAMLLe credenziali vengono risolte nuovamente periodicamente, sia durante una sessione sia durante il ciclo di vita del vault. Questo garantisce che la rotazione, l'archiviazione o l'eliminazione delle credenziali si propaghi alle sessioni in esecuzione senza riavvio.
Per ricevere una notifica se una credenziale viene archiviata, eliminata o non riesce ad aggiornarsi, puoi iscriverti ai webhook di vault e credenziali associati a tali cambiamenti del ciclo di vita.
| Evento | Trigger |
|---|---|
vault.archived | Vault archiviato. Viene emesso anche un evento vault_credential.archived per ogni credenziale sottostante. |
vault.deleted | Vault eliminato. Viene emesso anche un evento vault_credential.deleted per ogni credenziale sottostante. |
vault_credential.archived | Credenziale archiviata, direttamente o come conseguenza dell'archiviazione del vault. |
vault_credential.deleted | Credenziale eliminata, direttamente o come conseguenza dell'eliminazione del vault. |
vault_credential.refresh_failed | Una credenziale mcp_oauth non può essere aggiornata (refresh token non valido o errore irrecuperabile dal server OAuth). |
Per le credenziali mcp_oauth, la nuova risoluzione aggiorna anche l'access token se è scaduto. Se il refresh fallisce, viene emesso un evento vault_credential.refresh_failed.
Per diagnosticare il motivo per cui un refresh è fallito, chiama POST /v1/vaults/{vault_id}/credentials/{credential_id}/mcp_oauth_validate (o client.beta.vaults.credentials.mcp_oauth_validate(...) nell'SDK). Questo ti consente di decidere come gestire l'errore; l'azione corretta dipende dal tipo di errore.
Il campo status di primo livello ti indica cosa fare:
valid: il token funziona; nessuna azione necessaria.invalid: il grant non esiste più o il server OAuth ha rifiutato il refresh con un errore 4xx. Chiedi all'utente finale di autorizzare nuovamente.unknown: un errore transitorio (5xx, 429 o errore di rete). Attendi e riprova.ant beta:vaults:credentials mcp-oauth-validate \
--vault-id "$VAULT_ID" \
--credential-id "$CREDENTIAL_ID" \
--transform status --raw-output # "valid", "invalid", or "unknown"La risposta è un oggetto vault_credential_validation. mcp_probe include il passaggio dell'handshake MCP fallito; refresh include l'esito del tentativo di refresh.
{
"type": "vault_credential_validation",
"credential_id": "vcrd_01ABC...",
"vault_id": "vlt_01XYZ...",
"validated_at": "2026-04-29T17:12:00Z",
"has_refresh_token": false,
"status": "invalid",
"mcp_probe": {
"method": "initialize",
"http_response": {
"status_code": 401,
"content_type": "application/json",
"body": "{\"error\":\"invalid_token\"}",
"body_truncated": false
}
},
"refresh": {
"status": "no_refresh_token",
"http_response": null
}
}include_archived=true per includerli).POST /v1/vaults/{id}/archive. Si propaga a cascata a tutte le credenziali. I segreti vengono eliminati; i record vengono conservati per l'auditing. Le sessioni future che referenziano questo vault falliscono; le sessioni in esecuzione continuano.POST /v1/vaults/{id}/credentials/{cred_id}/archive. Elimina il payload del segreto; la chiave della credenziale (mcp_server_url o secret_name) rimane visibile e viene liberata per una credenziale sostitutiva.Was this page helpful?