{
  "$schema": "https://modelcontextprotocol.io/schemas/draft/server-card.json",
  "serverInfo": {
    "name": "animam-platform",
    "version": "2.2.0",
    "title": "Animam Agent Platform",
    "vendor": {
      "name": "Animam Technologies",
      "url": "https://animam.ai"
    }
  },
  "name": "Animam MCP Server",
  "description": "Model Context Protocol server for managing Animam.ai chatbot agents. Configure bot personas, knowledge bases, segments, and multi-bot deployments programmatically. OAuth 2.1 + PKCE supported for third-party clients.",
  "version": "2.2.0",
  "url": "https://mcp.animam.ai/mcp",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://mcp.animam.ai/mcp"
  },
  "fallbackTransport": {
    "type": "sse",
    "endpoint": "https://mcp.animam.ai/mcp/sse",
    "note": "Deprecated HTTP+SSE transport, still served for clients that cannot speak Streamable HTTP."
  },
  "authentication": {
    "type": "oauth2",
    "description": "OAuth 2.1 JWT access token (preferred) or static API token from the dashboard. OAuth clients discover the authorization server via /.well-known/oauth-protected-resource on mcp.animam.ai.",
    "header": "Authorization",
    "tokenPrefix": "Bearer",
    "discovery": "https://api.animam.ai/.well-known/oauth-authorization-server",
    "resourceMetadata": "https://mcp.animam.ai/.well-known/oauth-protected-resource",
    "registration": "https://api.animam.ai/oauth/register",
    "pkce": "S256",
    "scopes": [
      "settings:read",
      "settings:write",
      "segments:read",
      "segments:write",
      "corpus:read",
      "corpus:write",
      "stats:read",
      "tools:read",
      "tools:write"
    ]
  },
  "publicSurface": {
    "endpoint": "https://mcp.animam.ai/public",
    "transport": { "type": "streamable-http", "endpoint": "https://mcp.animam.ai/public" },
    "authentication": "none",
    "why": "Selling starts before an account exists. An agent advising a site owner holds no credential — this surface lets it build a live demo on that owner's site, test it, and read our real pricing instead of guessing. Buying stays human: email verification and card checkout are never done by an agent.",
    "rateLimit": "Per caller IP: 3 demos/hour, 20 demo chats/hour, 60 pricing reads/minute.",
    "tools": [
      { "name": "try_on_site", "description": "Build a working AI agent on any public website in ~20s (no account, no card) and get a temporary key to enrich it and read its conversations", "readOnly": false },
      { "name": "chat_with_demo", "description": "Talk to a demo agent to verify it answers the owner's real questions before recommending it", "readOnly": true },
      { "name": "get_plans", "description": "Pricing, limits and what is NOT billed, derived from the server's source of truth", "readOnly": true }
    ]
  },
  "capabilities": {
    "tools": true,
    "resources": false,
    "prompts": false,
    "logging": true,
    "streaming": true
  },
  "documentation": {
    "url": "https://animam.ai/docs/mcp",
    "openapi": "https://animam.ai/openapi.json"
  },
  "contact": {
    "email": "support@animam.ai",
    "url": "https://animam.ai/contact"
  },
  "license": "https://animam.ai/legal/api-terms",
  "canonicalLocation": "https://animam.ai/.well-known/mcp/server-card.json",
  "tools": [
    { "name": "get_tenant", "description": "Get the current tenant configuration (bot persona, branding, limits)", "scope": "settings:read", "readOnly": true },
    { "name": "update_tenant", "description": "Update tenant settings (bot name, tone, colors, etc.)", "scope": "settings:write", "readOnly": false },
    { "name": "get_mcp_tools", "description": "Get the current external MCP server configuration (URL, max tools)", "scope": "settings:read", "readOnly": true },
    { "name": "update_mcp_tools", "description": "Configure an external MCP server whose tools are auto-discovered and available in chat", "scope": "settings:write", "readOnly": false },
    { "name": "list_segments", "description": "List all segments (contexts) for the tenant", "scope": "segments:read", "readOnly": true },
    { "name": "get_segment", "description": "Get details of a specific segment by slug", "scope": "segments:read", "readOnly": true },
    { "name": "create_segment", "description": "Create a new segment with slug, name, and system prompt", "scope": "segments:write", "readOnly": false },
    { "name": "update_segment", "description": "Update a segment prompt, welcome message, or form config", "scope": "segments:write", "readOnly": false },
    { "name": "list_corpus", "description": "List knowledge base entries, optionally filtered by segment", "scope": "corpus:read", "readOnly": true },
    { "name": "get_corpus", "description": "Get full content of a corpus entry by ID", "scope": "corpus:read", "readOnly": true },
    { "name": "create_corpus", "description": "Add a new knowledge base entry (title + markdown content)", "scope": "corpus:write", "readOnly": false },
    { "name": "update_corpus", "description": "Update an existing corpus entry", "scope": "corpus:write", "readOnly": false },
    { "name": "delete_corpus", "description": "Delete a corpus entry by ID", "scope": "corpus:write", "readOnly": false },
    { "name": "list_bots", "description": "List all child chatbot projects with stats and pool usage (Builder/Agency plans)", "scope": "settings:read", "readOnly": true },
    { "name": "create_bot", "description": "Create a new chatbot project. Returns slug, API key, endpoints, and widget code.", "scope": "settings:write", "readOnly": false },
    { "name": "delete_bot", "description": "Delete a chatbot project (irreversible)", "scope": "settings:write", "readOnly": false },
    { "name": "list_conversations", "description": "Read the conversations the bot actually had: date, page, channel, status, and the tool calls it really made (lead captured, meeting booked, quote sent). Full transcripts on demand.", "scope": "conversations:read", "readOnly": true },
    { "name": "get_bot_stats", "description": "Get analytics overview for a specific bot (conversations, messages, satisfaction, timeline)", "scope": "stats:read", "readOnly": true },
    { "name": "run_digest", "description": "Run an on-demand Conversation Digest for a bot: stats + a skeptical AI analysis, emailed to configured recipients. Counts against the plan's monthly quota.", "scope": "stats:read", "readOnly": false },
    { "name": "list_notable_conversations", "description": "List the persisted notable conversations (golden examples) surfaced by past digests", "scope": "stats:read", "readOnly": true },
    { "name": "list_tools", "description": "List the bot's configured action tools (secrets masked)", "scope": "tools:read", "readOnly": true },
    { "name": "create_tool", "description": "Create a configurable action tool (SUBMIT_FORM, GENERATE_QUOTE, RECOMMEND_PRODUCT, BOOK_MEETING, etc.). Per-type JSON config; secret-bearing types excluded.", "scope": "tools:write", "readOnly": false },
    { "name": "update_tool", "description": "Update an existing action tool by id (name, description, config, isActive)", "scope": "tools:write", "readOnly": false },
    { "name": "delete_tool", "description": "Delete an action tool by id", "scope": "tools:write", "readOnly": false },
    { "name": "deploy_corpus", "description": "Push a knowledge base entry to a child bot. Markdown content accepted.", "scope": "corpus:write", "readOnly": false },
    { "name": "chat_test", "description": "Send a test message to a bot and get the AI response (non-streaming, test mode)", "scope": "settings:read", "readOnly": true }
  ],
  "clientConfig": {
    "claude_desktop": {
      "mcpServers": {
        "animam": { "url": "https://mcp.animam.ai/mcp" }
      },
      "note": "Claude Desktop supports OAuth 2.1 auto-discovery — no manual token needed. Add the URL and approve the consent screen."
    },
    "legacy": {
      "mcpServers": {
        "animam": {
          "url": "https://mcp.animam.ai/mcp",
          "headers": { "Authorization": "Bearer YOUR_API_TOKEN" }
        }
      },
      "note": "For MCP clients that don't support OAuth, use a static API token from the dashboard. Clients that cannot speak Streamable HTTP can still use https://mcp.animam.ai/mcp/sse."
    }
  },
  "provider": {
    "name": "Animam.ai",
    "url": "https://animam.ai",
    "documentation": "https://animam.ai/llms-full.txt",
    "support": "support@animam.ai"
  }
}
