Search / io.github.anima-labs-ai/anima
anima
R2 · OAuth, onceGive your AI agent an identity it owns: email inbox, US phone number, SMS, voice, and a vault.
v1.0.1 · active · repository · website · descriptor JSON · versions
Search / io.github.anima-labs-ai/anima
Give your AI agent an identity it owns: email inbox, US phone number, SMS, voice, and a vault.
v1.0.1 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"anima": {
"type": "http",
"url": "https://mcp.useanima.sh/mcp"
}
}
}claude mcp add --transport http anima https://mcp.useanima.sh/mcp[mcp_servers.anima]
url = "https://mcp.useanima.sh/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"anima": {
"type": "remote",
"url": "https://mcp.useanima.sh/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"anima": {
"type": "http",
"url": "https://mcp.useanima.sh/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=anima&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLnVzZWFuaW1hLnNoL21jcCJ9"
}{
"servers": {
"anima": {
"type": "http",
"url": "https://mcp.useanima.sh/mcp"
}
}
}{
"mcpServers": {
"anima": {
"httpUrl": "https://mcp.useanima.sh/mcp"
}
}
}extensions:
"anima":
enabled: true
name: "anima"
type: streamable_http
uri: "https://mcp.useanima.sh/mcp"
timeout: 300
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prmProtected Resource Metadata (RFC 9728) publishedauth.as_metadataauthorization server metadata reachableauth.cimdonly Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMDauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotations67 of 67 tools declare readOnlyHint or destructiveHinttools.directory_hints60 of 67 tools declare all four hints; missing: account_overview (idempotentHint); usage_overview (idempotentHint); webhook_list (idempotentHint); …tools.token_costabout 18,933 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes, stability.rug_pulltool history not recorded yetdeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website -unreachable(2 failures) ~updated-35d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://mcp.useanima.sh/mcp streamable-http | oauth2 AS: https://connect.useanima.sh | no (2 failures) | 97% | 280 ms | – | 2026-10-08 |
account_overviewread-only | Single-call workspace snapshot: organization context, credential identity, send-capability flags (canSendEmail / canSendSms), inventory counts (agents, domains, phones), active blockers (each carrying the canonical MCP tool that resolves it), and the running MCP server's deploy identity (commitSha, revision, buildId, startedAt). Strict superset of the legacy whoami + workspace_health pair. Use before any non-trivial workflow to answer 'who am I, can I do X right now, and which deploy is serving me?' in one round-trip — no real send needed to find out. |
agent_create | Create a new agent with optional metadata, and optionally attach an initial address. Use this when provisioning a new sending identity or automation actor. To add more addresses later, use agent_update. Pass idempotencyKey to make retries safe — same key + same body returns the original response, same key + different body returns IDEMPOTENCY_BODY_MISMATCH 409. |
agent_deletedestructive | Delete an agent by ID. Use this to remove deprecated or compromised agents that should no longer send messages. Cascades to attached addresses, email identities, and phone identities. |
agent_getread-only | Fetch full detail for a single agent by ID: settings, metadata, status, and the full addresses[] / emailIdentities[] / phoneIdentities[] lists. Use agent_list to browse multiple agents. |
agent_listread-only | List agents in the current account context with cursor pagination. Returns a lightweight per-agent record (addresses are NOT included to avoid N+1 round-trips). Use agent_get for full single-agent detail. |
agent_update | Update an agent's name or metadata, and/or add/update/delete an address. Use addAddress to attach a new address, updateAddress to change fields on an existing one (by addressId), deleteAddressId to remove one. Multiple field-level changes can be combined in a single call. |
domain_create | Register a custom sending domain in the workspace so it can be configured for email traffic. Use this before DNS setup and verification. |
domain_deletedestructive | Delete a domain from the workspace when it is no longer needed. Use this to remove old or incorrect domain configurations. |
domain_getread-only | Fetch full detail for a single domain by ID, including verification and configuration state. Use domain_list to browse all domains. |
domain_listread-only | List all domains connected to the current workspace. Use this to audit configured sender domains and choose one for follow-up actions. |
domain_update | Update mutable configuration on a domain. Currently the only updatable field is `feedbackEnabled` — toggle SES bounce and complaint feedback processing on or off without re-verifying the domain. |
domain_verify | Trigger a verification check for a domain after DNS records are configured. Use this to re-run DNS validation and update verification status. |
domain_zone_fileread-only | Get the full DNS zone file for a domain. Use this for complete DNS export or to verify all records are correctly configured. |
email_attachment_getread-only | Get a temporary download URL for an email attachment. Use this when you need direct file access for preview or download. |
email_draft_create | Create a new email draft (composed but not sent). Drafts can be incomplete — missing recipients, subject, or body. Use email_draft_send later to actually deliver, or email_draft_delete to discard. |
email_draft_deletedestructive | Discard a draft. Use this to remove drafts that are no longer needed. Use email_draft_send if you want to deliver instead. |
email_draft_getread-only | Fetch full detail for a single draft by ID. Use email_draft_list to browse drafts. |
email_draft_listread-only | List email drafts with optional filters. Returns lightweight draft records — use email_draft_get for full detail. |
email_draft_send | Send a draft. Atomically converts the draft to a delivered Message + deletes the draft row. The draft must have at least one recipient, a subject, and a body. Returns the newly-created Message. |
email_forward | Forward an existing email to another recipient by loading the original content first. Use this to share a prior message while preserving context. |
email_getread-only | Fetch full detail for a single email by ID, including metadata and body. Use email_list to browse emails in a folder. |
email_label | Add and/or remove labels on one message — the agent's workflow state. Use this to mark mail read/unread (`read`/`unread`), archive it (`archived`), or apply your own tags, then filter with email_list's `labels`. Supply at least one of addLabels/removeLabels. One message per call: there is no batch form. |
email_listread-only | List emails with cursor pagination. Returns lightweight per-email records plus a `pagination` object — pass `pagination.nextCursor` back as `cursor` for the next page. Use email_get for the full body, email_search to find specific messages. |
email_reply | Reply to an existing email thread by first loading the original message and setting threading headers. Use this when you need a proper in-thread response. |
email_searchread-only | Search messages by content. Fulltext mode (default) substring-matches subject/body/addresses of EMAIL messages and returns `{items, pagination}` with cursor paging. Semantic mode ranks by vector-embedding similarity and returns `{results}` scored 0-1 — each result spans ANY channel (check the `channel` field) and includes the message id for email_get / email_thread_get follow-ups. |
email_send | Send a new outbound email from the agent mailbox. Use this when you need to compose and deliver a message with optional CC, threading headers. |
email_thread_getread-only | Fetch all email messages in one or more threads. Pass `id` for a single thread or `ids` for multiple. Returns messages ordered within each thread. Uses the messages endpoint filtered by threadId + channel=EMAIL under the hood. |
extension_connect | Create a short-lived, single-use connect URL that links a browser extension (or a headless Puppeteer worker) to an Anima agent. Returns `connectUrl` — hand it to the extension to complete the handshake before `exchangeExpiresAt`. The response carries no token or secret. Auth: with a master key you MUST pass `agentId`; with an agent key OMIT `agentId` (the server resolves it from the key). `ttl` is optional; a value above the org's maximum is rejected. |
inbox_create | Create a new email inbox (mailbox) that can receive mail immediately at its address. Choose a username and domain or let the platform generate them. Requires master key access. |
inbox_deletedestructive | Permanently delete an inbox and its mailbox. Mail sent to the address after deletion bounces. This cannot be undone. Requires master key access. |
inbox_getread-only | Fetch full detail for a single inbox by ID, including its email address, display name, and associated agent. Use inbox_list to browse all inboxes. |
inbox_listread-only | List inboxes in the workspace with cursor pagination and optional free-text search. Returns the address, display name, and agent association for each inbox. |
inbox_update | Update the display name or agent association of an inbox. Pass null for a field to clear it (unlink the agent / remove the display name); omitted fields are left unchanged. The email address itself cannot be changed. Requires master key access. |
phone_call_create | Place a live phone call and have a real conversation. The tool stays open for the entire call duration. As the caller speaks, you receive live transcript chunks via progress notifications; when the caller finishes a turn (server emits isFinal: true), an elicitation prompt asks you what the agent should say next. You respond with `say` (the exact text to speak) and optional `endCallAfterSpoken: true` to hang up after the line. Returns the full transcript when the call ends. Requires the connecting MCP client to support elicitation — without it, the tool errors out immediately. |
phone_call_getread-only | Get full detail for a single phone call: status, duration, participants, AI-generated summary (one-liner, topics, action items, decisions, open questions, next steps), and quality score. The summary is generated once on first read after post-call processing and cached. |
phone_call_listread-only | List phone calls with optional filters. Returns lightweight call records — for full call detail including summary and score, use phone_call_get. |
phone_call_recording_getread-only | Get a time-limited download URL for a call recording (WAV format). The URL expires after 1 hour. Recording must have been enabled during the call. |
phone_call_transcript_getread-only | Get the full transcript of a phone call with speaker labels, timestamps, and confidence scores. Available after the call ends and transcription completes. |
phone_number_listread-only | List phone numbers assigned to an agent. Each result includes status and capability flags (sms/mms/voice). |
phone_number_provision | Provision a new phone number from the carrier pool and assign it to an agent. Note: provisioning a number costs money on the underlying carrier; do not call speculatively. Use countryCode / areaCode / capabilities to constrain selection. |
phone_number_releasedestructive | Release a previously provisioned phone number back to the carrier pool. Use this when cleaning up unused numbers. Released numbers cannot be recovered. |
sms_getread-only | Fetch full detail for a single SMS by ID (includes its `threadId` for joining the conversation). Use sms_list to browse multiple SMS messages. |
sms_listread-only | List SMS messages with optional filters. Each result includes its `threadId` for joining the conversation. Use sms_get for full single-message detail. |
sms_send | Send an SMS to a phone number, or an MMS by passing `mediaUrls`. The agent must have a provisioned phone number. Use this for transactional texts or conversational messaging. |
sms_thread_getread-only | Get one SMS/MMS conversation with its message history, oldest first. Use sms_thread_list to find thread IDs (or take `threadId` off any SMS). For a conversation longer than `limit`, returns its most recent messages; page deeper history with sms_list. |
sms_thread_listread-only | List SMS/MMS conversations, most recently active first. A conversation is one agent number talking to one external contact. Returns summaries (participant, last message snippet, message count) — use sms_thread_get for the full history. Optionally filter by agentId. |
usage_overviewread-only | Usage rollup for a billing period. Returns counters keyed by usage type (e.g. 'email_sent', 'sms_sent', 'voice_call_minutes') plus the latest update timestamp. Defaults to the current calendar month in UTC when `period` is omitted. Read-only, callable by any authenticated credential — scoped to the caller's org. Use to answer 'where am I against my tier limits?' without paying for per-event detail (UsageEvent is operator-tier). |
vault_credential_create | Create a new credential in an agent vault. Pass `type` plus the matching payload block (login / card / identity / oauthToken / apiKey / certificate / notes). For login credentials, prefer `generatePassword` over supplying `login.password` — the vault generates and stores the password server-side and returns only the credential reference, so the secret never enters the conversation. For api_key/oauth_token credentials, set `allowedHosts` so the credential can be exercised through vault_credential_use. |
vault_credential_deletedestructive | Delete a credential from vault storage by ID. Use to remove obsolete or compromised secrets. |
vault_credential_getread-only | Get a single vault credential by ID. Sensitive fields (passwords, tokens, SSNs, CVV) are masked. To use the plaintext for autofill or as an upstream credential, mint a vault token at the credential broker — the LLM never sees the secret directly. |
vault_credential_get_totpread-only | Get the current TOTP code for a credential that has a TOTP secret configured. Returns the live 6-digit code derived from the stored secret — the secret itself is never disclosed. |
vault_credential_listread-only | List credentials in an agent vault with optional type filter. Use to browse stored secrets before reading, updating, or deleting entries. Sensitive fields are masked. |
vault_credential_request_canceldestructive | Cancel a pending credential request by ID. Invalidates the single-use fill link so the human can no longer submit a value. Use when the request is no longer needed or was created in error. |
vault_credential_request_create | Request a credential from a HUMAN without the agent or LLM ever seeing the secret. When the connecting MCP client supports inline elicitation, the human is shown a form to type the secret directly — the tool returns `status: FULFILLED` with the `credentialId` in one call, no link needed. Otherwise it returns a single-use fill link (`fillUrl`, emailed to the org owner); poll vault_credential_request_status until `status` is FULFILLED, then use the returned `credentialId` as a normal vault credential. Use this when a flow needs a secret the agent doesn't hold and can't safely be given (passwords, API keys, card numbers). |
vault_credential_request_fill | Internal: submit a credential-request secret from the Anima UI widget. Not for direct agent use. |
vault_credential_request_statusread-only | Get the status of a pending credential request by ID. Poll this after vault_credential_request_create until `status` is FULFILLED, then use `credentialId` as a normal vault credential. `maskedPreview` shows a redacted hint of the filled value once available — the plaintext is never returned. |
vault_credential_searchread-only | Search vault credentials by keyword across names and content. Use when you know part of the name, URL, or username but not the exact credential ID. Different access pattern from vault_credential_list — list is paginated browsing, search is text-query lookup. |
vault_credential_update | Update an existing vault credential by ID, including optional structured sections and metadata flags. Use to rotate passwords or revise stored details. |
vault_credential_use | Make an outbound HTTPS call with a stored credential attached SERVER-SIDE, and get the upstream response. Use this to act with a secret (call an API, hit an authed endpoint) WITHOUT ever seeing the plaintext — the platform injects the credential on the wire. The target host must be on the credential's allowlist. Works even for `brokered` credentials that can never be revealed. Prefer this over trying to read a secret: you can use it, you cannot see it. |
vault_exchange_token_for_injection | Exchange a vtk_ vault token for the PLAINTEXT credential, to inject into a trusted client process (a CLI, the browser extension) — NOT to read it yourself. The API gates this to injector credentials: it only succeeds for a master key or a key carrying the `vault:inject` scope; a plain agent key gets 403. If you are an agent that needs to USE a secret, do NOT use this — use vault_credential_use (the server-side broker), which never reveals the secret. |
vault_provision | Provision a credential vault for an agent. Required before vault_credential_create can be called against a freshly-created agent — without a vault, credentials have nowhere to live. Idempotent: returns the existing vault if one already exists. Master-key only. |
voice_listread-only | List available AI voices for placing phone calls. The catalog is multilingual — filter by language or gender. Each voice includes descriptive metadata and a vendor-neutral audio preview URL (sampleUrl), plus the voice ID needed for phone_call_create. |
webhook_deletedestructive | Delete a webhook subscription by ID. Permanently removes the configuration and stops future deliveries. To temporarily pause without deleting, use webhook_set with { id, active: false }. |
webhook_getread-only | Get a webhook subscription by ID. Returns the full configuration (URL, subscribed events, active state, description). |
webhook_listread-only | List webhook subscriptions for the calling org with cursor pagination. Use to enumerate existing webhooks before set/delete operations. |
webhook_set | Create or update a webhook subscription (upsert). If `id` is provided the call updates that webhook (PUT). If omitted it creates a new one (POST) — `url` and `events` are then required. Use this for declarative 'ensure webhook X exists' workflows. |
webhook_test | Send a test event payload to a webhook to verify the endpoint is reachable and signature verification works. Returns a deliveryId you can correlate with your endpoint's logs. |
Schemas: list_tools.
{
"name": "io.github.anima-labs-ai/anima",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://mcp.useanima.sh/mcp",
"type": "streamable-http"
}
],
"version": "1.0.1",
"repository": {
"url": "https://github.com/anima-labs-ai/mcp-server",
"source": "github"
},
"websiteUrl": "https://useanima.sh",
"description": "Give your AI agent an identity it owns: email inbox, US phone number, SMS, voice, and a vault."
}