{
  "serverInfo": {
    "name": "agentsecrets",
    "title": "AgentSecrets Vault",
    "version": "0.3.0",
    "description": "Encrypted secrets and runtime state vault for autonomous AI agents. Use this server to: (1) store and retrieve API keys, tokens, passwords and credentials so they never enter your prompt or logs; (2) persist intermediate reasoning steps, checkpoints and resume context across container restarts with set_secret and get_secret; (3) hand a credential to another agent exactly once using burn_after_read, leaving no residue; (4) keep long-lived agent instructions and scratchpad notes in encrypted profile notes; (5) delegate time-bounded, least-privilege access to sub-agents, workers or human operators with mint_scoped_token (scope defaults to read_only; ttl_seconds is required and always applies, so delegated access ends by itself); and (6) maintain TTL heartbeats so a supervisor can detect a crashed worker. Zero-config: connecting without a token auto-provisions a dedicated vault; call get_my_credentials immediately and persist the returned token, because an unactivated vault is deleted after 1 hour. The service is 100% free with no paid tier.",
    "homepage": "https://agentsecrets.net",
    "iconUrl": "https://agentsecrets.net/static/favicon.svg",
    "license": "MIT"
  },
  "pricing": {
    "model": "free",
    "cost": "$0",
    "free_forever": true,
    "credit_card_required": false,
    "trial_period": false,
    "paid_tier": false,
    "fair_use_quotas": {
      "max_active_secrets_per_user": 100,
      "max_payload_bytes": 1048576,
      "requests_per_minute": 60
    },
    "note": "Fair-use quotas are anti-abuse limits, not billing limits. No payment is ever required."
  },
  "authentication": {
    "required": false,
    "schemes": ["bearer", "none"],
    "notes": "Supports zero-config autonomous agent auto-provisioning over SSE without pre-shared tokens. A vault provisioned this way must call at least one tool within 1 hour or it is deleted; initialize and tools/list do not count as activation."
  },
  "transport": {
    "sse": "https://agentsecrets.net/mcp/sse",
    "messages": "https://agentsecrets.net/mcp/messages?sessionId=<session_id>",
    "streamable_http": "https://agentsecrets.net/mcp"
  },
  "tools": [
    {
      "name": "get_secret",
      "description": "Retrieve and decrypt a secret value by key from the vault. A burn-after-read secret is destroyed by this call."
    },
    {
      "name": "set_secret",
      "description": "Encrypt and store a secret value (text or JSON) with optional TTL and burn-after-reading."
    },
    {
      "name": "list_secrets",
      "description": "List all active secret keys and metadata without exposing values."
    },
    {
      "name": "delete_secret",
      "description": "Permanently delete a secret from the vault."
    },
    {
      "name": "get_my_credentials",
      "description": "Retrieve this vault's credentials (token, agent_id, is_claimed, is_activated, instructions) to persist the token locally and reconnect across restarts. To hand this vault to a human operator in a browser, mint a single-use code with create_handoff; to let a sub-agent read it, delegate a time-bounded token with mint_scoped_token. Never share this principal token itself."
    },
    {
      "name": "get_agent_context",
      "description": "One-call session startup inspection: identity, token scope, quota, keys expiring soon, and prioritized next actions. Key-derived fields (recent_keys, expiring_soon, secrets_count, quota_remaining) are confined to the calling token's prefix: scope."
    },
    {
      "name": "get_secret_raw",
      "description": "Retrieve a secret as raw plaintext (text/plain), safe for direct capture into an environment variable."
    },
    {
      "name": "rollback_secret",
      "description": "Revert a secret to a previous version snapshot (three snapshots are kept per secret)."
    },
    {
      "name": "export_secrets_shell",
      "description": "Export active secrets as shell 'export KEY=VAL' lines, optionally filtered by environment."
    },
    {
      "name": "set_profile_notes",
      "description": "Save encrypted notes or a scratchpad for this account (up to 64 KB). Notes are per account, not per key, so a write-capable scope is required: read_only and prefix:ro: tokens are refused with 403."
    },
    {
      "name": "get_profile_notes",
      "description": "Retrieve the encrypted notes or scratchpad saved for this account."
    },
    {
      "name": "mint_scoped_token",
      "description": "Delegate time-bounded, least-privilege access to a sub-agent, worker or human operator. Requires ttl_seconds; scope defaults to 'read_only' ('prefix:<str>' and 'prefix:ro:<str>' are also accepted). The minted token records parent_token_id provenance; revoking the parent token does not cascade to tokens already minted."
    },
    {
      "name": "create_handoff",
      "description": "Mint a single-use handoff code (hs_...) that another entity, typically a human operator in a browser, redeems once to operate on this vault. The code expires in 10 minutes and is not a credential; redeeming it mints a delegated token with the chosen scope and ttl_seconds (default 86400, clamped 60..2592000) for the grantor's vault. Only a full-scope token may create a handoff."
    },
    {
      "name": "register_agent",
      "description": "Register a named agent account and receive a persistent token plus a 12-word recovery phrase."
    },
    {
      "name": "recover_account",
      "description": "Recover access to an account and set a new password using the 12-word recovery phrase."
    }
  ],
  "resources": [
    {
      "uri": "agentsecrets://vault/keys",
      "name": "Vault key catalog",
      "description": "Metadata for all active secrets in the current vault (no values).",
      "mimeType": "application/json"
    },
    {
      "uri": "agentsecrets://session/context",
      "name": "Session context",
      "description": "Identity, token scope, quota, and expiring keys for the current session.",
      "mimeType": "application/json"
    }
  ],
  "prompts": [
    {
      "name": "persist_identity",
      "description": "Persist this vault's credentials so the agent survives a restart. Connect without a token, read the assigned token, save it locally.",
      "arguments": [
        {
          "name": "credentials_path",
          "description": "Where to store the credentials file. Defaults to ~/.agentsecrets/credentials.json",
          "required": false
        }
      ]
    },
    {
      "name": "handoff_secret",
      "description": "Hand a credential to another agent exactly once using burn-after-reading, leaving no residue in the vault.",
      "arguments": [
        {
          "name": "key",
          "description": "Vault key that will hold the one-time credential, e.g. 'handoff/job_42/creds'.",
          "required": true
        },
        {
          "name": "ttl_seconds",
          "description": "Safety expiry if the receiver never reads it. Defaults to 300.",
          "required": false
        }
      ]
    },
    {
      "name": "checkpoint_and_resume",
      "description": "Save execution progress and resume from it after a container restart.",
      "arguments": [
        {
          "name": "checkpoint_key",
          "description": "Key used for the checkpoint, e.g. 'agents/w1/checkpoint'.",
          "required": false
        }
      ]
    },
    {
      "name": "scope_a_worker",
      "description": "Issue a least-privilege token for a worker sub-agent (read-only or prefix-restricted).",
      "arguments": [
        {
          "name": "scope",
          "description": "One of 'read_only', 'prefix:<str>', or 'prefix:ro:<str>'.",
          "required": true
        }
      ]
    },
    {
      "name": "agent_liveness",
      "description": "Maintain a TTL heartbeat so a supervisor can detect a crashed worker.",
      "arguments": [
        {
          "name": "agent_id",
          "description": "Identifier used in the heartbeat key, e.g. 'worker_bot_alpha'.",
          "required": false
        },
        {
          "name": "ttl_seconds",
          "description": "Heartbeat expiry. Defaults to 60.",
          "required": false
        }
      ]
    }
  ]
}
