Skip to main content
Glama

Anam MCP Server

IMPORTANT

This server has moved. Anam now hosts its MCP server at https://lab.anam.ai/mcp. There's nothing to install: you sign in with your Anam account over OAuth instead of pasting an API key, and new tools arrive without an update.

This Python package (anam-mcp on PyPI) is no longer maintained. Switch to the hosted server using the steps below, or follow the setup guide and the docs.

Connect to the hosted server

Server URL:

https://lab.anam.ai/mcp

The first time you connect, your app opens Anam in a browser. Sign in, choose one organization, and choose Full access or Read only.

Claude (claude.ai and Claude Desktop)

  1. Open Settings, then Connectors, and choose Add custom connector.

  2. Name it Anam, paste https://lab.anam.ai/mcp and add it.

  3. Choose Connect and sign in to Anam.

On Team and Enterprise plans, an owner adds the connector in the organization's settings first.

ChatGPT

  1. Open Plugins, choose the plus button, then Add custom MCP server.

  2. Name it Anam, paste https://lab.anam.ai/mcp and choose OAuth.

  3. Accept the warning, choose Create as a plugin and sign in to Anam.

Claude Code

claude mcp add --transport http --scope user anam https://lab.anam.ai/mcp
claude mcp login anam

Cursor

Add Anam to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:

{
  "mcpServers": {
    "anam": {
      "url": "https://lab.anam.ai/mcp"
    }
  }
}

Cursor asks you to sign in to Anam when it first connects.

VS Code

code --add-mcp '{"name":"anam","type":"http","url":"https://lab.anam.ai/mcp"}'

Codex

codex mcp add anam --url https://lab.anam.ai/mcp
codex mcp login anam

Other clients

Add https://lab.anam.ai/mcp as a remote MCP server (Streamable HTTP). Sign-in is OAuth 2.1 with PKCE; clients register themselves. See the setup guide for details.

Agents without a browser: API keys

Your Anam API key still works. Send it as a Bearer token instead of signing in:

{
  "mcpServers": {
    "anam": {
      "url": "https://lab.anam.ai/mcp",
      "headers": {
        "Authorization": "Bearer <your Anam API key>"
      }
    }
  }
}
# Claude Code
claude mcp add --transport http anam https://lab.anam.ai/mcp \
  --header "Authorization: Bearer $ANAM_API_KEY"

# Codex
codex mcp add anam --url https://lab.anam.ai/mcp --bearer-token-env-var ANAM_API_KEY

Create and revoke keys on the API keys page.

Per-client paths

https://lab.anam.ai/mcp serves every tool, so use it everywhere unless a directory listing tells you otherwise. The paths /mcp/claude, /mcp/chatgpt, /mcp/copilot, /mcp/gemini, /mcp/agentforce and /mcp/muse serve the smaller tool sets made for those platforms' directory listings.

Related MCP server: Corebee MCP Server

What changes when you switch

  • Sign-in: OAuth with your Anam account replaces ANAM_API_KEY. API keys still work as a Bearer token.

  • No local install: you no longer need Python, uv or uvx.

  • Meetings: inviting a persona to Google Meet, Zoom or Microsoft Teams no longer needs a Recall AI key.

  • Tool names: every tool now starts with anam_. See the table below.

anam-mcp tool

Hosted server tool

list_personas, get_persona, create_persona, update_persona, delete_persona

anam_persona_list, anam_persona_get, anam_persona_create, anam_persona_update, anam_persona_delete

list_avatars, get_avatar, create_avatar, update_avatar, delete_avatar

anam_avatar_list, anam_avatar_get, anam_avatar_create, anam_avatar_update, anam_avatar_delete

search_avatars

anam_avatar_list with search

list_voices, get_voice, update_voice, delete_voice

anam_voice_list, anam_voice_get, anam_voice_update, anam_voice_delete

search_voices

anam_voice_list with search, gender or country

create_voice

anam_voice_import (a provider voice ID) or anam_voice_clone (a recording)

list_tools, get_tool, update_tool, delete_tool

anam_tool_list, anam_tool_get, anam_tool_update, anam_tool_delete

create_webhook_tool, create_knowledge_tool

anam_tool_create; for knowledge, anam_persona_knowledge_add

create_session_token

anam_session_token_create

list_sessions, get_session, get_session_recording

anam_session_list, anam_session_get, anam_session_recording_get

list_knowledge_folders, create_knowledge_folder

anam_knowledge_folder_list, anam_knowledge_folder_create

get_knowledge_group, update_knowledge_group, delete_knowledge_group, search_knowledge_group

anam_knowledge_folder_get, anam_knowledge_folder_update, anam_knowledge_folder_delete, anam_knowledge_folder_search

list_knowledge_documents, get_knowledge_document, update_knowledge_document, delete_knowledge_document

anam_knowledge_document_list, anam_knowledge_document_get, anam_knowledge_document_update, anam_knowledge_document_delete

get_knowledge_document_download

anam_knowledge_document_download

upload_knowledge_document

anam_knowledge_document_create_from_text or anam_knowledge_document_create_from_url

list_llms, get_llm, create_llm, update_llm, delete_llm

anam_llm_list, anam_llm_get, anam_llm_create, anam_llm_update, anam_llm_delete

list_share_links, get_share_link, create_share_link, update_share_link, delete_share_link

anam_share_link_list, anam_share_link_get, anam_share_link_create, anam_share_link_update, anam_share_link_delete

generate_avatar_video

anam_avatar_video_create, then anam_avatar_video_get until it's ready

add_avatar_to_meeting

anam_meeting_invite_create

get_meeting_bot_status, list_meeting_bots

anam_meeting_invite_get, anam_meeting_invite_list

remove_avatar_from_meeting

anam_meeting_invite_cancel (cancels an invite before the persona joins)

The hosted server also adds tools this package never had, such as anam_quickstart, anam_persona_from_brief, session transcripts and search, pronunciation dictionaries, integration guides and docs search. The docs list them all.

Legacy: running anam-mcp locally

This package gets no new tools or fixes. Its last release is 0.1.13.

It needs version 1 of the mcp Python package. A fresh install now picks up mcp 2.x, and the server then fails on startup with No module named 'mcp.server.fastmcp'. Pin mcp<2 to keep it running:

{
  "mcpServers": {
    "anam": {
      "command": "uvx",
      "args": ["--with", "mcp<2", "anam-mcp"],
      "env": {
        "ANAM_API_KEY": "<your-api-key>"
      }
    }
  }
}

Variable

Description

Default

ANAM_API_KEY

Your Anam API key (required)

-

ANAM_API_URL

API base URL

https://api.anam.ai

RECALL_API_KEY

Recall AI API key, for the meeting tools

-

MEET_PAGE_URL

Avatar meet page URL

https://meet.anam.ai

TEXT_TO_AVATAR_URL

Text-to-avatar service URL

https://anam-org--text-to-avatar-api.modal.run

The previous README, with the full list of this package's tools, is in this repository's history.

License

MIT License. See LICENSE.

Available Tools

54 tools
add_avatar_to_meetingA

Add an Anam avatar to a video meeting (Zoom, Google Meet, Teams).

Creates an ephemeral session and deploys a Recall bot that shows the avatar as its camera feed. The avatar can hear and respond to meeting participants.

Args: meeting_url: Video conference URL (e.g., https://meet.google.com/abc-defg-hij) avatar_id: Anam avatar ID. Use search_avatars to find one. voice_id: Anam voice ID. Use search_voices to find one. system_prompt: Instructions for the avatar's personality and behavior. bot_name: Name shown in the meeting participant list (default: "Anam Avatar") llm_id: Optional LLM ID. Defaults to GPT-4o-mini. avatar_model: Avatar model ("cara-2" or "cara-3", default: cara-3)

Returns: Bot ID and status information

Inputs: meeting_url (required), avatar_id (required), voice_id (required), system_prompt (required), +3 more. Returns: result

create_avatarA

Create a custom avatar from an image URL.

Note: This feature is only available for enterprise and pro plans.

Args: name: Display name for the avatar image_url: URL of the image to use

Inputs: name (required), image_url (required). Returns: result

create_knowledge_folderB

Create a new knowledge folder for documents.

After creating, upload documents via Anam Lab UI or API.

Args: name: Folder name (e.g., "Product Documentation") description: Optional description

Inputs: name (required), description. Returns: result

create_knowledge_toolA

Create a knowledge tool for RAG (document search).

Args: name: Tool name in snake_case (e.g., "search_product_docs") description: When the LLM should use this tool folder_ids: List of knowledge folder UUIDs to search

Inputs: name (required), description (required), folder_ids (required). Returns: result

create_llmB

Create a custom LLM configuration.

Args: name: Display name for the LLM provider: LLM provider (e.g., "openai", "anthropic") model: Model name (e.g., "gpt-4", "claude-3") api_key: API key for the provider base_url: Custom base URL (for self-hosted models) temperature: Sampling temperature max_tokens: Maximum output tokens

Inputs: name (required), provider (required), model (required), api_key, +3 more. Returns: result

create_personaA

Create a new Anam persona with specified avatar, voice, and personality.

Args: name: Display name for the persona (e.g., "Customer Support Agent") avatar_id: UUID of the avatar. Use list_avatars or search_avatars to find one. voice_id: UUID of the voice. Use list_voices or search_voices to find one. system_prompt: Instructions defining the persona's personality and behavior. llm_id: UUID of the LLM. Defaults to Anam's standard LLM.

Inputs: name (required), avatar_id (required), voice_id (required), system_prompt (required), +1 more. Returns: result

create_session_tokenA

Create a session token for the Anam client SDK.

Use EITHER persona_id (for saved personas) OR individual config fields (ephemeral).

Args: persona_id: UUID of a saved persona (recommended for production) name: Persona name (ephemeral mode) avatar_id: Avatar UUID (ephemeral). Use search_avatars to find one. voice_id: Voice UUID (ephemeral). Use search_voices to find one. system_prompt: Personality instructions (ephemeral) llm_id: LLM UUID (ephemeral, defaults to GPT-4o-mini) avatar_model: Avatar model ("cara-2" or "cara-3", default: cara-3) max_session_length_seconds: Session timeout skip_greeting: Skip the initial greeting (default: False)

Inputs: persona_id, name, avatar_id, voice_id, +5 more. Returns: result

create_voiceB

Create a custom voice configuration.

Args: display_name: Display name for the voice provider: Voice provider (e.g., "cartesia", "elevenlabs") provider_voice_id: The voice ID from the provider gender: Gender of the voice ("MALE" or "FEMALE") country: Country code (e.g., "US", "GB") description: Optional description

Inputs: display_name (required), provider (required), provider_voice_id (required), gender, +2 more. Returns: result

create_webhook_toolA

Create a webhook tool for personas to call external APIs.

Args: name: Tool name in snake_case (e.g., "check_order_status") description: When the LLM should call this tool. Be specific. url: The HTTP endpoint to call method: HTTP method (GET, POST, PUT, PATCH, DELETE) await_response: Wait for response (False for fire-and-forget)

Inputs: name (required), description (required), url (required), method, +1 more. Returns: result

delete_avatarA

Delete a custom avatar by ID. Cannot delete stock avatars.

Args: avatar_id: The UUID of the avatar to delete

Inputs: avatar_id (required). Returns: result

delete_knowledge_documentB

Delete a knowledge document by ID.

Args: document_id: The UUID of the document to delete

Inputs: document_id (required). Returns: result

delete_knowledge_groupA

Delete a knowledge group by ID. This will also delete all documents in the group.

Args: group_id: The UUID of the knowledge group to delete

Inputs: group_id (required). Returns: result

delete_llmB

Delete an LLM by ID.

Args: llm_id: The UUID of the LLM to delete

Inputs: llm_id (required). Returns: result

delete_personaA

Delete a persona by ID. This action cannot be undone.

Args: persona_id: The UUID of the persona to delete

Inputs: persona_id (required). Returns: result

delete_toolC

Delete a tool by ID.

Args: tool_id: The UUID of the tool to delete

Inputs: tool_id (required). Returns: result

delete_voiceB

Delete a voice by ID.

Args: voice_id: The UUID of the voice to delete

Inputs: voice_id (required). Returns: result

generate_avatar_videoA

Generate an avatar video from a text script.

INTERNAL TESTING ONLY - This feature is in early access. Contact support@anam.ai for access.

Creates an MP4 video of an avatar speaking the provided script. The video generation runs asynchronously and may take 30-120 seconds depending on script length.

Args: script: The text for the avatar to speak persona_id: Use a saved persona (provide this OR avatar_id + voice_id) avatar_id: Avatar ID for ephemeral session (requires voice_id) voice_id: Voice ID for ephemeral session (requires avatar_id) avatar_model: Avatar model to use (default: cara-3) poll_interval: Seconds between status checks (default: 3.0) max_wait: Maximum seconds to wait for completion (default: 600.0)

Stock Avatars (use with voice_id): Female: - Liv: 071b0286-4cce-4808-bee2-e642f1062de3 - Mia: edf6fdcb-acab-44b8-b974-ded72665ee26 - Sophie: 6dbc1e47-7768-403e-878a-94d7fcc3677b - Bella: dc9aa3e1-32f2-499e-9921-ecabac1076fc - Julia: edcb8f1a-334f-4cdb-871c-5c513db806a7 - Anne: 27e12daa-50fc-4384-93c2-ebca73f1f78d - Layla: ae2ea8c1-db28-47e3-b6ea-493e4ed3c554 Male: - Gabriel: 6cc28442-cccd-42a8-b6e4-24b7210a09c5 - Finn: 8a339c9f-0666-46bd-ab27-e90acd0409dc - Hunter: ecfb2ddb-80ec-4526-88a7-299a4738957c - Kevin: ccf00c0e-7302-455b-ace2-057e0cf58127 - Richard: 19d18eb0-5346-4d50-a77f-26b3723ed79d - William: 81b70170-2e80-4e4b-a6fb-e04ac110dc4b

Recommended Voices: Female: Jessica - b138c2a2-ba66-4887-95d5-1a57093fc92d Male: Adam - e54745c7-9439-44c3-b61a-193b42cce5bd

Returns: Download URL for the generated video, or error message

Inputs: script (required), persona_id, avatar_id, voice_id, +3 more. Returns: result

get_avatarB

Get details of a specific avatar by ID.

Args: avatar_id: The UUID of the avatar to retrieve

Inputs: avatar_id (required). Returns: result

get_knowledge_documentA

Get details of a specific knowledge document by ID.

Args: document_id: The UUID of the document to retrieve

Inputs: document_id (required). Returns: result

get_knowledge_document_downloadC

Get download URL for a knowledge document.

Args: document_id: The UUID of the document

Inputs: document_id (required). Returns: result

get_knowledge_groupA

Get details of a specific knowledge group by ID.

Args: group_id: The UUID of the knowledge group to retrieve

Inputs: group_id (required). Returns: result

get_llmB

Get details of a specific LLM by ID.

Args: llm_id: The UUID of the LLM to retrieve

Inputs: llm_id (required). Returns: result

get_meeting_bot_statusA

Check the status of a Recall meeting bot.

Args: bot_id: The Recall bot ID returned by add_avatar_to_meeting

Returns: Bot status including meeting URL, join status, etc.

Inputs: bot_id (required). Returns: result

get_personaA

Get details of a specific persona by ID.

Args: persona_id: The UUID of the persona to retrieve

Inputs: persona_id (required). Returns: result

get_sessionA

Get details of a specific session by ID.

Args: session_id: The UUID of the session to retrieve

Inputs: session_id (required). Returns: result

get_session_recordingB

Get recording information for a session.

Args: session_id: The UUID of the session

Inputs: session_id (required). Returns: result

get_toolA

Get details of a specific tool by ID.

Args: tool_id: The UUID of the tool to retrieve

Inputs: tool_id (required). Returns: result

get_voiceA

Get details of a specific voice by ID.

Args: voice_id: The UUID of the voice to retrieve

Inputs: voice_id (required). Returns: result

list_avatarsA

List all available avatars.

Returns a formatted summary of avatars with IDs, names, variants, and type (stock/custom).

Args: page: Page number (default: 1) per_page: Items per page (default: 100)

Inputs: page, per_page. Returns: result

list_knowledge_documentsA

List all documents in a knowledge group.

Args: group_id: The UUID of the knowledge group page: Page number (default: 1) per_page: Items per page (default: 100)

Inputs: group_id (required), page, per_page. Returns: result

list_knowledge_foldersA

List all knowledge folders in your organization.

Knowledge folders contain documents for RAG capabilities.

Inputs: no named parameters. Returns: result

list_llmsB

List all available LLMs.

Args: page: Page number (default: 1) per_page: Items per page (default: 100)

Inputs: page, per_page. Returns: result

list_meeting_botsB

List all Recall meeting bots.

Shows recent bots including their status and meeting URLs.

Args: limit: Maximum number of bots to return (default: 20)

Inputs: limit. Returns: result

list_personasA

List all personas in your Anam account.

Returns a formatted summary of personas with their IDs, names, and avatars.

Args: page: Page number (default: 1) per_page: Items per page (default: 100)

Inputs: page, per_page. Returns: result

list_sessionsA

List all sessions in your account.

Args: page: Page number (default: 1) per_page: Items per page (default: 100)

Inputs: page, per_page. Returns: result

list_toolsA

List all tools in your organization.

Returns webhook tools, knowledge tools, and client tools that can be attached to personas.

Args: page: Page number (default: 1) per_page: Items per page (default: 100)

Inputs: page, per_page. Returns: result

list_voicesB

List all available voices.

Returns a formatted summary of voices with IDs, names, and languages. Over 400 voices available in 50+ languages.

Args: page: Page number (default: 1) per_page: Items per page (default: 100)

Inputs: page, per_page. Returns: result

remove_avatar_from_meetingA

Remove an avatar from a video meeting.

Makes the Recall bot leave the meeting gracefully.

Args: bot_id: The Recall bot ID returned by add_avatar_to_meeting

Inputs: bot_id (required). Returns: result

search_avatarsA

Search avatars by name.

Fetches all avatars and filters by name match. Use this to find avatars like "Cara", "Mia", "Gabriel", etc.

Args: query: Name to search for (case-insensitive, partial match) stock_only: If True, only return stock avatars (not custom)

Inputs: query (required), stock_only. Returns: result

search_knowledge_groupC

Search within a knowledge group for relevant documents.

Args: group_id: The UUID of the knowledge group to search query: Search query limit: Maximum number of results

Inputs: group_id (required), query (required), limit. Returns: result

search_voicesA

Search voices by name, country, or gender.

Fetches all voices and filters by the specified criteria.

Args: query: Name to search for (case-insensitive, partial match) country: Country code to filter by (e.g., "US", "GB", "FR", "DE", "PT") gender: Gender to filter by ("MALE" or "FEMALE")

Inputs: query, country, gender. Returns: result

update_avatarA

Update a custom avatar. Only provide the fields you want to change.

Args: avatar_id: The UUID of the avatar to update name: New internal name display_name: New display name

Inputs: avatar_id (required), name, display_name. Returns: result

update_knowledge_documentB

Update a knowledge document.

Args: document_id: The UUID of the document to update name: New document name

Inputs: document_id (required), name. Returns: result

update_knowledge_groupB

Update a knowledge group. Only provide the fields you want to change.

Args: group_id: The UUID of the knowledge group to update name: New name description: New description

Inputs: group_id (required), name, description. Returns: result

update_llmA

Update an LLM configuration. Only provide the fields you want to change.

Args: llm_id: The UUID of the LLM to update name: New display name temperature: New sampling temperature max_tokens: New maximum output tokens

Inputs: llm_id (required), name, temperature, max_tokens. Returns: result

update_personaA

Update an existing persona. Only provide the fields you want to change.

Args: persona_id: The UUID of the persona to update name: New display name avatar_id: New avatar UUID voice_id: New voice UUID system_prompt: New personality instructions llm_id: New LLM UUID

Inputs: persona_id (required), name, avatar_id, voice_id, +2 more. Returns: result

update_toolA

Update a tool. Only provide the fields you want to change.

Args: tool_id: The UUID of the tool to update name: New tool name description: New description url: New webhook URL (for webhook tools) method: New HTTP method (for webhook tools) await_response: Whether to wait for response (for webhook tools)

Inputs: tool_id (required), name, description, url, +2 more. Returns: result

update_voiceA

Update a voice configuration. Only provide the fields you want to change.

Args: voice_id: The UUID of the voice to update display_name: New display name description: New description

Inputs: voice_id (required), display_name, description. Returns: result

upload_knowledge_documentB

Upload a document to a knowledge group.

Args: group_id: The UUID of the knowledge group name: Document name content: Document content (text) content_type: MIME type (default: text/plain)

Inputs: group_id (required), name (required), content (required), content_type. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 54 tools

    Disambiguation4/5

    Most tools target distinct resources and actions, but there is some overlap between search and list functions (e.g., search_avatars vs list_avatars) that could cause confusion for an agent. The boundaries are generally clear.

    Naming Consistency5/5

    All tools consistently follow the verb_noun pattern with underscores. Even tools like add_avatar_to_meeting and remove_avatar_from_meeting maintain a clear, predictable structure.

    Tool Count2/5

    With 54 tools, this server is over the threshold for 'too many' (25+). While the domain is broad, the tool count feels bloated and could be streamlined by consolidating some CRUD operations or reducing redundancy.

    Completeness3/5

    The server offers CRUD operations for most entity types, but there are notable gaps: no delete or update for knowledge folders, no delete for sessions, and inconsistencies between 'folder' and 'group' terminology. Overall, the coverage is reasonable but incomplete.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers