MCP Tools Reference

Every tool exposed by the SikkerKey MCP server, the actions each one supports, and the scopes they require.

The MCP server exposes 16 tools. Each tool is grouped by domain (secrets, machines, projects, etc.) and dispatches on an action parameter so the AI client picks the operation by name. This page is the authoritative reference for what's available.

For the call-time contract (auth, plaintext, audit) see the Security Model. For setup and registration see Setup.

Action dispatch

Every tool takes an action argument plus action-specific arguments. The tool's JSON schema uses a discriminated oneOf so each action declares its own required fields. AI clients see this and surface only the relevant fields per action.

Example call shape:

{
  "name": "manage_secrets",
  "arguments": {
    "action": "list",
    "projectId": "proj_abc123"
  }
}

The action is always required. Per-action requirements are listed in the tables below.

manage_secrets

Manage secrets within a project. The agent never sees plaintext secret values: rotate / create / update_value take inputs but don't echo them back, and reads return only metadata.

ActionRequiredScopeWhat it does
listprojectIdprojects.secrets.readList secrets in a project. Returns id, name, type, fieldNames, note, version, timestamps.
getprojectId, secretIdprojects.secrets.readSingle-secret metadata. Same shape as one list row.
createprojectId, name, valueprojects.secrets.writeCreate a new secret. Value is encrypted server-side. Optional fieldNames makes it structured.
update_valueprojectId, secretId, valueprojects.secrets.writeReplace plaintext. Bumps version. Refused on secrets with active rotation or canaries.
renameprojectId, secretId, nameprojects.secrets.writeChange display name. Per-machine grants are by id and unaffected.
update_noteprojectId, secretIdprojects.secrets.writeSet / clear the secret's description.
rotateprojectId, secretIdprojects.secrets.writeServer-generates a new value. Optional length / charset / fields.
rollbackprojectId, secretId, versionprojects.secrets.writeRestore an earlier version's encrypted value as the current one.
deleteprojectId, secretIdprojects.secrets.writeSoft-delete (recoverable from trash for 30 days).
versionsprojectId, secretIdprojects.secrets.readVersion numbers and timestamps. No values.
dynamic_list(none)projects.secrets.readList every secret with a server-side rotation schedule across allowed projects.
dynamic_getsecretIdprojects.secrets.readSchedule config + last/next rotation.
dynamic_createintervalSeconds plus either (projectId, name) or existingSecretIdprojects.secrets.writeCreate a new secret with rotation, or attach a schedule to an existing secret. Initial value is server-generated.
dynamic_updatesecretIdprojects.secrets.writeChange interval / length / charset / fields / enabled state.
dynamic_deletesecretIdprojects.secrets.writeRemove the rotation schedule. The secret itself is not deleted.

manage_temporary_secrets

One-shot self-destructing share links. Server-encrypts the value, hashes the passphrase with Argon2id, destroys on first reveal (right or wrong) or expiry.

ActionRequiredScopeWhat it does
listprojectIdprojects.secrets.readStatus (pending / viewed / destroyed / expired), expiry, creation time. No values, tokens, or passphrases.
createprojectId, name, expiresInSeconds (60 to 86400)projects.secrets.writeReturns { id, token, passphrase, expiresAt, url }. Either supply value or set generateRandom=true with length / charset.

manage_projects

ActionRequiredScopeWhat it does
list(none)projects.readList every project the agent can act on.
get_permissionsprojectIdprojects.readDashboard-style permissions summary for one project.
createnameprojects.writeCreate a new project. If the agent has a non-empty allowlist, the new project is auto-added.
updateprojectIdprojects.writeUpdate name / description.
deleteprojectId, confirmNameprojects.writeDelete a project. Cascades through secrets, machines, policies. The confirmName must match the project's current name.

manage_policies

Access policies are layered constraints (time window, IP allowlist, rate cap, co-sign, TTL, rotate-after-N) that apply on top of the base six-requirement gate.

ActionRequiredScopeWhat it does
listprojectIdprojects.policies.readList every policy in a project.
getprojectId, policyIdprojects.policies.readPolicy detail with bound-secrets list.
createprojectId, nameprojects.policies.writeCreate a new policy. Every enabled axis must be fully specified.
updateprojectId, policyIdprojects.policies.writeUpdate a policy. Bound secrets see new constraints on their next fetch.
deleteprojectId, policyIdprojects.policies.writeRefused if any secrets are still bound.
binding_getsecretIdprojects.policies.readCurrent policy bound to a secret (or unbound).
binding_bindsecretId, policyIdprojects.policies.writeBind a secret to a policy. Replaces any existing binding.
binding_unbindsecretIdprojects.policies.writeDetach. Reverts to base gate only.

manage_canaries

Defensive trip-wires. A canary is a secret whose unauthorized read freezes the project (and optionally related projects) so the attacker still gets a response but cannot take any further action.

ActionRequiredScopeWhat it does
listprojectIdprojects.policies.readEvery canary in a project: arming state, trigger config, last trip, fire count.
getcanaryIdprojects.policies.readOne canary's trigger configuration and trip history.
createprojectId, nameprojects.policies.writePlant a new canary. Server-generates a 64-char value. Optional triggerFreeze toggles.
configcanaryIdprojects.policies.writeUpdate trigger toggles. Use enable / disable for arming.
enable / disablecanaryIdprojects.policies.writeArm / disarm without deleting.
unfreeze_projectprojectIdprojects.policies.writeClear a canary-triggered freeze. Does not disarm; another read against the same trip-wire fires it again.

manage_machines

Machines are secret consumers (SDK / CLI). This tool manages the machine identities; per-project attachment and grants live in manage_project_machines.

ActionRequiredScopeWhat it does
list(none)machines.readEvery machine in the vault.
getmachineIdmachines.readDetail: list-row fields plus ephemeral lifecycle, project memberships, total secret-grant count.
name_historymachineIdmachines.readRename history.
approvemachineIdmachines.writeApprove a pending machine.
denymachineIdmachines.writeDeny and remove a pending machine.
renamemachineId, namemachines.writeChange name. Recorded in name history.
revokemachineIdmachines.writeRevoke an approved machine. Drops grants and project memberships.

manage_ai_agents

Lifecycle of AI agents on the vault. Scope-set and project-allowlist mutation are deliberately not exposed (privilege escalation), and remain dashboard-only.

ActionRequiredScopeWhat it does
list(none)aiagents.readEvery AI agent. Includes scope and allowlist counts.
getagentIdaiagents.readDetail with full scope set and project allowlist.
name_historyagentIdaiagents.readRename history.
approveagentIdaiagents.writeApprove a pending agent.
denyagentIdaiagents.writeDeny and remove. Refused on self.
disableagentIdaiagents.writeBlock requests. Scopes preserved. Refused on self.
enableagentIdaiagents.writeRe-enable a disabled agent.
renameagentId, nameaiagents.writeChange name. Recorded in name history.
revokeagentIdaiagents.writeHard-delete with cascade. Refused on self.

manage_project_machines

Per-project machine membership and per-secret grants.

ActionRequiredScopeWhat it does
queryprojectIdprojects.machines.readPaginated list of machines in a project, with per-machine grant count. Supports search and sort.
attachprojectId, machineIdprojects.machines.writeAttach a machine to a project. Machine must be owned by the same vault.
detachprojectId, machineIdprojects.machines.writeRemove a machine from a project. Cascades through grants.
grants_getprojectId, machineIdprojects.machines.readCurrent per-secret grants for a machine in this project.
grants_setprojectId, machineId, secretIdsprojects.machines.writeReplace per-secret grants. Pass the complete desired set.

manage_enrollment

Bootstrap tokens for ephemeral machines (CI/CD runners, auto-scaling workers).

ActionRequiredScopeWhat it does
list(none)enrollment.readAll issued tokens with usage and expiry.
gettokenIdenrollment.readOne token's detail.
createname, projectIds, secretIds, tokenLifetimeSeconds, machineLifetimeSeconds, maxUsesenrollment.writeIssue a token. Optional sourceCidr, hostnamePattern, namePattern constrain who can redeem it. Returns the token plaintext once.
revoketokenIdenrollment.writeRevoke. Already-redeemed machines keep working until their machineLifetimeSeconds expires.

manage_team

Team members on the vault. Does not expose external-vault membership (membership in someone else's vault).

ActionRequiredScopeWhat it does
list_members(none)team.readEvery team member with their per-project permission summary.
member_permissionsmemberIdteam.readDetailed per-project permission breakdown for one member.
invites_sent(none)team.readPending invitations sent from this vault.
inviteemailteam.writeInvite a user by email.
removememberIdteam.writeRemove a member. Cascades through their machines' project memberships and grants.
permissions_setmemberId, projectIdteam.writeReplace a member's permissions for one project. Pass the complete desired set; project_access is auto-added.
invite_revokeinviteIdteam.writeCancel a pending invite.

manage_alerts

Which audit actions trigger alert dispatch (email + webhook).

ActionRequiredScopeWhat it does
list(none)alerts.readCurrently enabled alert actions.
actions(none)alerts.readEvery action available to subscribe to, with severity.
setenabledActionsalerts.writeReplace the set wholesale. Empty array disables all.

manage_webhooks

Outbound delivery channels for alerts. Each webhook subscribes to a subset of audit actions; SikkerKey signs and POSTs the payload via HMAC-SHA256.

ActionRequiredScopeWhat it does
list(none)alerts.readAll webhooks with delivery health. Does not return signing secrets.
getwebhookIdalerts.readOne webhook's detail. Same fields as list.
createurl, actionsalerts.writeReturns the signing secret in plaintext once. URL must be HTTPS and pass SSRF guard.
updatewebhookIdalerts.writeChange url / actions / enabled. Re-enabling resets health.
deletewebhookIdalerts.writePermanently delete.
testwebhookIdalerts.writeSend a test payload to verify delivery and signature handling.

manage_ipallowlist

Machine-auth IP allowlist (gates the runtime SDK / CLI surface, not dashboard sessions).

ActionRequiredScopeWhat it does
list(none)ipallowlist.readAll entries plus the global enabled flag.
addcidripallowlist.writeAdd a CIDR with optional label.
updateentryId, labelipallowlist.writeUpdate label.
deleteentryIdipallowlist.writeRemove one entry.
bulk_deleteidsipallowlist.writeRemove many at once.
enable / disable(none)ipallowlist.writeToggle global enforcement.

manage_trash

Soft-deleted secrets sit in trash for 30 days before automatic hard-delete.

ActionRequiredScopeWhat it does
list(none)trash.readEvery soft-deleted secret.
restoresecretIdtrash.writeRestore to its previous project. Subject to plan limits.
purgesecretIdtrash.writeHard-delete now. Irreversible; version history goes too.

read_audit

Audit log, activity feed, and usage stats.

ActionRequiredScopeWhat it does
list(none)audit.readRecent entries, no filters. Honors page / pageSize (default 50, max 200).
query(none)audit.readFiltered query: actions, severities, sourceIp, search, from, to, sortBy, sortDir, page, pageSize.
actions(none)audit.readEvery audit action with its severity.
activity(none)audit.readLast 20 events, lightweight feed.
export(none)audit.readCSV export. Same filter shape as query. Capped at 10,000 rows.
stats(none)audit.readVault-level counters (machines, projects, secrets, reads).
reads_over_time(none)audit.readTime-bucketed secret-read counts.
usage(none)audit.readSubscription / plan-limit snapshot.

support

Support tickets. Read access is implicit with write — there's no flow where an agent can create tickets but not see the ticket it just opened.

ActionRequiredScopeWhat it does
categories(none)support.writeTicket categories visible on the vault owner's plan.
list(none)support.writeAll tickets.
getticketIdsupport.writeTicket detail with messages and attachments.
createcategoryId, priority, title, bodysupport.writeOpen a ticket.
replyticketId, bodysupport.writeAdd a message to a ticket.
rateticketId, ratingsupport.writeRate a resolved ticket.
attachmentattachmentIdsupport.writeDownload an attachment by id.