I Built an Open-Source Studio for Building, Testing, and Deploying AI Agents A developer has released Chatbot Studio, an MIT-licensed, self-hostable open-source platform for building, testing, evaluating, and deploying AI agents as website chatbots or channel integrations such as WhatsApp. The project separates the agent (model, knowledge, tools, memory, guardrails) from its presentation layer, so a single agent remains the source of truth across multiple published chatbots, and it supports Model Context Protocol (MCP) servers, reusable knowledge bases, and multiple model providers. Building an AI chatbot is easy. Shipping one that has tools, knowledge, memory, observability, evaluations, human handoff, multiple model providers, workflows, and an actual interface your users can interact with is a different problem. That gap is what led me to build Chatbot Studio . It's an open-source platform for building AI agents and then publishing those agents as website chatbots or connecting them to channels such as WhatsApp. This isn't a SaaS announcement or a sales pitch. The project is MIT licensed, self-hostable, and available on GitHub: GitHub: https://github.com/judejulius/ChatbotStudio https://github.com/judejulius/ChatbotStudio A lot of AI projects begin with something like this: response = client.chat.completions.create model="...", messages= ... Then reality arrives. You need tools. Then retrieval. Then credentials. Then streaming. Then conversation state. Then rate limits. Then evaluations. Then traces because something went wrong in production. Then a UI. Then somebody asks: "Can we put this on the website?" And someone else asks: "Can customers talk to a human if the AI gets stuck?" At that point you're no longer building a prompt around an LLM. You're building an agent platform . That is the problem Chatbot Studio is trying to explore. One architectural decision became especially important while building this. An agent should not be the same object as its presentation layer. The agent owns things such as: A published chatbot owns the things that belong to the channel: In other words: Model + Knowledge + Tools | v Agent | test / evaluate | v Published Chatbot | Website / Channel The chatbot isn't a duplicated agent configuration. It's a channel sitting on top of the agent. That means I can improve an agent's instructions, knowledge, model, or tools without recreating every chatbot using it. The agent remains the source of truth. The main Agent Studio lets you configure and test an agent before publishing it. Currently the platform supports provider families including: An agent can then be connected to knowledge bases, tools, MCP servers, memory, skills, guardrails, and other runtime controls. The test chat runs against the saved agent configuration. That part matters. I didn't want a playground where the test environment was secretly different from the thing that eventually gets deployed. The goal is: php configure - test - evaluate - publish rather than: php prototype - rewrite everything - deploy something different One part I've been particularly interested in is Model Context Protocol support. Chatbot Studio can connect agents to MCP servers using: This makes external capabilities much easier to attach to an agent without baking every integration directly into the application. The broader architecture becomes something like: +----------------+ | Knowledge Base | +-------+--------+ | +----------+ +------v------+ | MCP Tool +----- + | +----------+ | Agent | | | +----------+ +------+------+ | API Tool +------------+ +----------+ | v Conversation For me, MCP is interesting because it moves agent tooling toward a more interoperable ecosystem instead of every project inventing its own tool interface. Agents can also be connected to reusable knowledge bases. The backend currently handles sources including: Documents are processed into chunks and embeddings that can be retrieved during conversations. The important idea here was making knowledge a reusable platform resource rather than stuffing documents directly into one chatbot implementation. One knowledge base can therefore become part of a broader agent configuration. For deployment on websites, I wanted the exported chatbot to be as framework-independent as possible. So the primary integration is a browser-native custom element: