{"name":"chatmaxima-builder","description":"Build and inspect ChatMaxima conversational AI bots: create a bot, add and wire builder blocks, manage WhatsApp templates and flows, and run scripted tests against a workspace.","version":"0.1.0","serverUrl":"https://chatmaxima.com/mcp/","protocolVersion":"2025-06-18","transport":"streamable-http","documentation":"https://chatmaxima.com/studio.md","privacyPolicy":"https://chatmaxima.com/privacy-policy/","authentication":{"type":"oauth2","scopes_supported":["builder"],"protected_resource_metadata":"https://chatmaxima.com/.well-known/oauth-protected-resource","authorization_server_metadata":"https://chatmaxima.com/.well-known/oauth-authorization-server","api_key_alternative":"A ChatMaxima API key may be sent in the Authorization header instead of an OAuth token."},"tools":[{"name":"list_block_types","description":"List every block type the ChatMaxima builder supports, one line each with its category, description, outputs and required fields. Call this first to learn what blocks exist.","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"get_block_schema","description":"Get the exact field schema (types, required flags, enums, guidance) for one or more block types, so you can configure them correctly.","inputSchema":{"type":"object","properties":{"block_types":{"type":"array","items":{"type":"string"},"description":"Block type names from list_block_types, e.g. [\"text\", \"ai_prompt\"]."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["block_types"]}},{"name":"list_integrations","description":"List the third-party integrations connected in this workspace (Google Sheets, Google Calendar, Twilio, email, Telegram, etc.), one per row with its platform and stable integration_id. Use this to fill account / credential fields on integration blocks (e.g. google_sheet, email, twilio) with a REAL connected integration; never invent an integration id or account.","inputSchema":{"type":"object","properties":{"platform":{"type":"string","description":"Optional: only integrations on this platform id (the platform_id from a prior call), e.g. \"google_sheet\", \"twilio\"."},"status":{"type":"string","enum":["active","inactive","all"],"description":"Which integrations to return; defaults to active (connected)."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"list_accounts","description":"List the connected channel accounts in this workspace (WhatsApp, Instagram, Facebook, Telegram, Email, SMS, Web, etc.), one per row with its platform and stable account_id. Use this to fill the account field on channel/messaging blocks (e.g. email, twilio, whatsapp_messaging, telegram) with a REAL connected account; never invent an account id.","inputSchema":{"type":"object","properties":{"platform":{"type":"string","description":"Optional: only accounts on this platform (friendly name like \"WhatsApp\"/\"Telegram\"/\"Email\", or the raw platform_id from a prior call)."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"list_workspaces","description":"List the ChatMaxima workspaces this connection can access (the ones this account belongs to), each with its \"workspace\" id, name and whether it is the default. Pass a workspace id as the \"workspace\" argument on any other tool to act in that workspace; omit it to use the default. Use this when the user has more than one workspace.","inputSchema":{"type":"object","properties":{}}},{"name":"switch_workspace","description":"Set the active workspace for this connection so later tool calls that omit \"workspace\" act in it. Pass a workspace id from list_workspaces. Use this once when the user says which workspace to work in, instead of repeating \"workspace\" on every call.","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"The workspace (team_alias from list_workspaces) to make active."}},"required":["workspace"]}},{"name":"list_statuses","description":"List the conversation statuses configured in this workspace (Open, Pending, Resolved, etc.). Use this to fill status fields on blocks (e.g. the Starting Step inactivity timeout_status, \"set status on auto-close\") with a REAL status_id; never invent one.","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"list_bots","description":"List the chatbots in the authenticated ChatMaxima workspace (alias and name).","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"get_bot","description":"Inspect one bot in this workspace: returns its blocks as a list of {id, type, title}. Use the alias from list_bots.","inputSchema":{"type":"object","properties":{"bot_alias":{"type":"string","description":"The bot alias from list_bots."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["bot_alias"]}},{"name":"create_bot","description":"Create a new, empty chatbot in this workspace. It starts with a Starting Step (preconfigured with a default trigger: any of \"Hi, Hello, Hey\") and a Start Message block, ready to build on. Pass welcome_message to set the Start Message text in the same call. Returns the bot alias and a builder link. Use this before adding blocks; change the trigger with update_block on node \"7\" if the user wants different keywords or none.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"A short name for the bot, e.g. \"Real estate lead capture\"."},"welcome_message":{"type":"string","description":"Optional: the text of the bot's Start Message block (the first message sent to the user). Set it here instead of a separate update_block call."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["name"]}},{"name":"add_block","description":"Add one block to a bot and (by default) connect it after an existing block. Call get_block_schema first for the block type to supply correct data fields. Reference saved variables in message text with SINGLE braces, e.g. {customer_name} (never {{double braces}}). Returns the new block id. Build a bot by calling this repeatedly, threading after_node from the previous block.","inputSchema":{"type":"object","properties":{"bot_alias":{"type":"string","description":"Bot to add to (from create_bot / list_bots)."},"block_type":{"type":"string","description":"A type from list_block_types, e.g. \"text\", \"email\", \"ai_prompt\"."},"data":{"type":"object","description":"Field values per get_block_schema (e.g. {\"title\":\"welcome\",\"chatdata\":\"Hi!\"})."},"after_node":{"type":"string","description":"Existing block id to connect from (its output_1 -> the new block). The trigger's Start Message is usually id \"10\"."},"output_port":{"type":"string","description":"Output of after_node to connect from; default output_1. Use output_2..N for button/condition branches."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["bot_alias","block_type"]}},{"name":"connect_blocks","description":"Wire one block to another (from_node's output -> to_node). Use for branches (a button/condition output_2..N to its target) or to join flows where add_block's auto-connect was not enough.","inputSchema":{"type":"object","properties":{"bot_alias":{"type":"string","description":"The bot (from create_bot / list_bots)."},"from_node":{"type":"string","description":"Source block id."},"to_node":{"type":"string","description":"Target block id (connected into its input)."},"output_port":{"type":"string","description":"Which output of from_node; default output_1. Use output_2..N for a specific branch."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["bot_alias","from_node","to_node"]}},{"name":"update_block","description":"Edit an existing block's fields, e.g. rename it or change its content. Pass only the fields to change in \"data\". To rename a block, set its title field (call get_block_schema for the block type to see field names). Returns ok.","inputSchema":{"type":"object","properties":{"bot_alias":{"type":"string","description":"The bot (from create_bot / list_bots)."},"node_id":{"type":"string","description":"The block id to edit (from get_bot)."},"data":{"type":"object","description":"Fields to change, merged into the block, e.g. {\"title\":\"Ask email\"} to rename, or {\"chatdata\":\"Hi!\"} to change a text message."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["bot_alias","node_id","data"]}},{"name":"delete_block","description":"Delete a block from a bot by its id (from get_bot). Removes the block and its connections. This cannot be undone; the change auto-saves.","inputSchema":{"type":"object","properties":{"bot_alias":{"type":"string","description":"The bot (from create_bot / list_bots)."},"node_id":{"type":"string","description":"The block id to delete (from get_bot). Avoid deleting the trigger / Starting Step."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["bot_alias","node_id"]}},{"name":"organize_bot","description":"Tidy a bot's canvas: auto-arrange all blocks into a clean top-down flow and save. add_block and connect_blocks already auto-organize, so this is mainly a final clean-up pass after building or restructuring a bot.","inputSchema":{"type":"object","properties":{"bot_alias":{"type":"string","description":"The bot to organize (from create_bot / list_bots)."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["bot_alias"]}},{"name":"upload_media","description":"Upload a file (image, video, audio, document) into the workspace media storage so a block can use it. Pass either a public source_url (the server downloads it) or base64 content. Returns the stored url plus the exact data to set on each upload-type block: image {type:\"upload_image\", file:[url]}, video {type:\"file\", file:url}, audio {audio_type:false, file:url}, file_bubble {type:\"upload_file\", file:url, file_name}. Then call add_block / update_block with that data. Max 25 MB.","inputSchema":{"type":"object","properties":{"file_name":{"type":"string","description":"File name with extension, e.g. \"brochure.pdf\", \"logo.png\", \"intro.mp4\", \"greeting.mp3\". The extension decides the media type."},"source_url":{"type":"string","description":"Public http(s) URL to download the file from. Use this OR base64."},"base64":{"type":"string","description":"Base64-encoded file content (data: URI prefix allowed). Use this OR source_url."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["file_name"]}},{"name":"run_test","description":"Run a scripted test conversation against a bot on the real runtime (side effects like email/SMS are simulated). Returns the transcript so you can verify the bot behaves. The first message should match the trigger. Needs an active web widget on the workspace.","inputSchema":{"type":"object","properties":{"bot_alias":{"type":"string","description":"The bot to test."},"messages":{"type":"array","items":{"type":"string"},"description":"Visitor messages in order (max 10), e.g. [\"Hi\",\"John\",\"john@x.com\"]."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["bot_alias","messages"]}},{"name":"list_whatsapp_flows","description":"List the WhatsApp Flows in this workspace (alias, name, status, category, account). Flows are structured multi-screen forms shown inside WhatsApp or the web widget.","inputSchema":{"type":"object","properties":{"account_alias":{"type":"string","description":"Optional: only flows on this WhatsApp account (from list_whatsapp_accounts)."},"status":{"type":"string","description":"Optional status filter, e.g. WEB_ONLY, DRAFT, PUBLISHED."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"get_whatsapp_flow","description":"Inspect one WhatsApp Flow: returns its status, category, account, and step configuration (the screens and fields). Use the alias from list_whatsapp_flows.","inputSchema":{"type":"object","properties":{"flow_alias":{"type":"string","description":"The flow alias from list_whatsapp_flows / create_whatsapp_flow."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["flow_alias"]}},{"name":"list_whatsapp_accounts","description":"List the connected WhatsApp accounts in this workspace. A flow must be attached to one of these accounts. Returns each account alias, name and number.","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"get_flow_schema","description":"Get the exact schema for the steps_config used by create_whatsapp_flow: the supported step component types and their fields, with rules and examples. Call this before create_whatsapp_flow.","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"create_whatsapp_flow","description":"Create a WhatsApp Flow (a multi-screen form) from a steps_config. Creates a ready-to-use web-widget flow (no Meta publish); publish to WhatsApp from the dashboard when ready. Call get_flow_schema first to build a valid steps_config. Returns the flow alias and a link to review it.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"A short name for the flow, e.g. \"Demo booking form\"."},"account_alias":{"type":"string","description":"WhatsApp account to attach to (from list_whatsapp_accounts)."},"steps_config":{"type":"object","description":"The flow definition: {\"steps\":[ ... ]} per get_flow_schema."},"category":{"type":"string","description":"Optional Meta flow category (SIGN_UP, APPOINTMENT_BOOKING, LEAD_GENERATION, CONTACT_US, CUSTOMER_SUPPORT, SURVEY, OTHER). Default OTHER."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["name","account_alias","steps_config"]}},{"name":"update_whatsapp_flow","description":"Update a draft/web WhatsApp Flow: change its name and/or steps_config (rebuilds the flow). Use the alias from list_whatsapp_flows. Published flows should be edited in the dashboard.","inputSchema":{"type":"object","properties":{"flow_alias":{"type":"string","description":"The flow to update."},"name":{"type":"string","description":"Optional new name."},"steps_config":{"type":"object","description":"Optional new step definition {\"steps\":[ ... ]} per get_flow_schema."},"category":{"type":"string","description":"Optional new Meta flow category."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["flow_alias"]}},{"name":"list_whatsapp_templates","description":"List the WhatsApp message templates in this workspace (name, status, category, language, body). Status is APPROVED / PENDING / REJECTED / DRAFT from Meta.","inputSchema":{"type":"object","properties":{"account_alias":{"type":"string","description":"Optional: only templates on this WhatsApp account (from list_whatsapp_accounts)."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"get_whatsapp_template","description":"Inspect one WhatsApp template: returns its category, language, status, body and full component JSON. Use the template_alias from list_whatsapp_templates.","inputSchema":{"type":"object","properties":{"template_alias":{"type":"string","description":"The template alias from list_whatsapp_templates."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["template_alias"]}},{"name":"browse_template_library","description":"Browse the ChatMaxima WhatsApp template library: ready-made, pre-written templates you can adapt. Returns name, category, industry, language and body. Filter by search/category/industry.","inputSchema":{"type":"object","properties":{"search":{"type":"string","description":"Optional keyword (matches name, description, tags)."},"category":{"type":"string","description":"Optional category filter (e.g. MARKETING, UTILITY)."},"industry":{"type":"string","description":"Optional industry filter (e.g. real_estate, healthcare)."},"sort":{"type":"string","description":"Optional: popular | rating | newest | downloads."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"get_template_schema","description":"Get the schema for composing a WhatsApp template: the component structure (header, body, footer, buttons), variable rules, categories and languages. Call before compose_whatsapp_template.","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}}}},{"name":"compose_whatsapp_template","description":"Validate a WhatsApp template draft and return Meta-ready component JSON. Does NOT submit to Meta (no side effects); the user submits it from the dashboard. Use to design a compliant template from a friendly description.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Template name: lowercase letters, digits, underscores (immutable once submitted)."},"category":{"type":"string","description":"MARKETING, UTILITY, or AUTHENTICATION."},"language":{"type":"string","description":"Language code, default en_US (e.g. en, en_US, es)."},"header":{"type":"object","description":"Optional header: {\"format\":\"TEXT\",\"text\":\"...\"} (TEXT may have one {{1}}); media headers use format IMAGE/VIDEO/DOCUMENT."},"body":{"type":"string","description":"Body text. Use {{1}}, {{2}} for variables, numbered sequentially."},"footer":{"type":"string","description":"Optional footer text (max 60 chars, no variables)."},"buttons":{"type":"array","description":"Optional buttons: [{\"type\":\"QUICK_REPLY\",\"text\":\"...\"}] or {\"type\":\"URL\",\"text\":\"..\",\"url\":\"..\"} or {\"type\":\"PHONE_NUMBER\",\"text\":\"..\",\"phone_number\":\"..\"}."},"example":{"type":"object","description":"Sample values for variables, required if variables are used: {\"body\":[\"John\",\"2pm\"],\"header\":[\"...\"]}."},"workspace":{"type":"string","description":"Optional: the workspace (team_alias from list_workspaces) to act in. Omit to use the connection default."}},"required":["name","category","body"]}}]}