关于 munin
Munin 是以 MCP 为核心的客户运营平台,将知识库、对话、CRM、CMS、外联和分析整合在一个基于 Postgres 的系统中。它内置 Agent 运行器,并为提案和外发消息提供人工审核流程。
主要功能
- 01六个客户运营模块
- 02223 个 MCP 工具与 58 个技能
- 03内置对话与内容整理 Agent
- 04提案人工审核队列
- 05支持自托管或云端运行
适用场景
- 01依据知识库文章回复客户对话
- 02统一管理 CRM、CMS 内容与分析
- 03发送前审核外联草稿
- 04通过 Agent 技能执行跨模块工作流
MCP 相关
Munin 将模块和平台功能作为 MCP 工具提供给兼容客户端,并采用统一权限和审计日志。也可连接外部 MCP 服务作为数据连接器,并为每个连接设置工具允许列表。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.getmunin.com/mcpclaude mcp add --transport http com-getmunin-munin https://mcp.getmunin.com/mcp{"mcpServers":{"com-getmunin-munin":{"type":"http","url":"https://mcp.getmunin.com/mcp"}}}在 Cursor 中打开{"servers":{"com-getmunin-munin":{"type":"http","url":"https://mcp.getmunin.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"com-getmunin-munin":{"type":"http","url":"https://mcp.getmunin.com/mcp"}}}{"mcpServers":{"com-getmunin-munin":{"serverUrl":"https://mcp.getmunin.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Munin
通过一个 MCP 端点,管理你的整个客户运营。
CRM、对话、外联、CMS、知识库和分析功能共用一个 Postgres 架构,并以 MCP 工具的形式开放,供 Agent 操作,而非通过屏幕点击。它像无头 CMS 一样无头:控制台负责设置、身份验证以及需要人参与的工作——例如由人工接手对话的收件箱,以及由人工审核 Agent 提案的审核队列——但没有可供你逐步点击操作数据的管理界面。所有操作都通过 MCP 工具执行,可由任何兼容 MCP 的客户端(Claude、Cursor、ChatGPT、自定义运行器)调用;无论由人工还是 Agent 操作,使用的都是同一套工具、相同权限和相同审计日志。Munin 甚至自带一个按组织运行的进程内 Agent 运行器,可在你配置的大模型提供商支持下处理实时对话和审核队列,因此平台开箱即用,无需外部 MCP 客户端。

控制台——设置、身份验证、收件箱和审核队列。它使用的正是 Agent 调用的 MCP 工具。

审核队列——外发内容不会自动发送。Agent 起草内容、附上草稿的依据,然后等待;按下批准键的是人工。

可嵌入的聊天小组件——根据知识库内容回答实时客户的问题,可随时转交人工处理,之后也能由 Agent 接手。
模块一览
| 模块 | 工具 | 功能 |
|---|---|---|
| 知识库 | kb_* | 文档、混合搜索、受众范围限定 |
| 对话 | conv_* | 渠道、消息、转交 |
| CRM | crm_* | 联系人、公司、交易 |
| CMS | cms_* | 集合、条目、资源 |
| 外联 | outreach_* | 活动、草稿、仅提案 |
| 分析 | analytics_* | 页面浏览和搜索事件 |
这六个模块并非彼此独立的产品——它们共用一个 Postgres 架构、一套权限模型和一份审计日志。加上集成和平台基础设施,总计提供 223 个 MCP 工具和 58 个技能。了解它们如何协同工作:
核心模块
知识库
- Markdown 文章按空间组织,每个空间仅面向获准查看的受众。
- 混合搜索,结合关键词匹配与基于语义的搜索结果。
- 网站导入 — 抓取公开网站,并在后台将每个页面转为一篇文章;当源页面消失时,自动移除对应文章。
- 完整的版本历史记录与还原功能,另有用于审核编辑提议的队列。
- Agent 可通过针对性的文本替换直接修改长篇文章,而不必重写全文来更改一句话。
对话
- 一个收件箱整合电子邮件、聊天小部件、语音(Threll.ai / Vapi)和短信(Twilio / MessageBird)。
- 支持入站和出站 — Agent 可回复对话,也可拨打外呼电话。
- 所有渠道均支持收发图片:客户可以发送截图,运营人员和 Agent 可以用图片回复,Agent 也能查看已发送的图片。
- 让电子邮件像电子邮件一样运作 — 只需转发到生成的地址即可开始;从 Gmail、Outlook 和 Apple Mail 的回复中还原引用历史记录;自动回复和退信会归档,而非进入队列;记住垃圾邮件发送者;显示并重试未送达的邮件。
- 按主题设置回复自动化:Agent 起初会针对某个主题起草回复以供审批;当你对它在该主题上的表现有信心后,可将其提升为自主发送。
- 可分配、按主题整理、可搜索所有消息,并可按状态、来源、渠道、主题和时间筛选。
- 内置移交给人工处理的功能;对话发生变化时,可向你自己的系统发送通知。
CRM
- 联系人、公司、交易、活动、销售流程和细分群组。
- AI 撰写的摘要和建议的后续行动,与人们手动编辑的内容分开保存。
- 同意跟踪 — 记录每位联系人的合法依据和来源;将联系人加入任何外联活动前必须具备这些信息。地址的可送达性单独跟踪,因此退信地址不会被误认为是已撤回同意。
- 自动检测重复记录并提出合并建议以供审核,另支持批量导入联系人。
CMS
- 内容集合包含结构化字段;条目可用多种语言发布,每个语言区域都有自己的 slug。
- 文章正文支持富内容块,包括提示框、引用、媒体等;内容块可按键寻址,因此 Agent 可以添加、替换、移除或重新排列单个内容块。
- 支持定时发布;媒体库会保留原始图像,并提供调整尺寸后的衍生图像。
- 完整的版本历史记录与还原功能、搜索,以及条目之间的交叉引用。
- 公共内容 API 可为你的网站或应用提供内容;自定义前端可使用草稿预览链接,每个条目还内置互动跟踪。
外联
- 仅提议、不自动发送的出站功能,涵盖电子邮件、短信和语音电话 — 支持营销活动、细分群组,以及首次联系和回复的草稿。
- 支持多步骤序列和发送节奏规则,一旦对方回复便立即停止。
- 每项提议都会报告审批后实际发送所用的确切地址或号码;获批的发送内容可以安排发送时间,而非立即发送。
- 从回复和已完成的通话中提取结果,并写回记录。
- 接收对象仅从已记录同意的联系人中选取(参见 CRM)。
- 每条消息都需等待人工审批;绝不会自动发送任何内容。
分析
- 记录你希望衡量的任何内容的页面浏览量和站内搜索;每次浏览一行,包含阅读深度,并按跟踪器分别报告。
- 自动跟踪 CMS 页面;其他页面只需添加一小段跟踪代码。
- 转化漏斗和逐访客历程 — 用户身份确认后,其访问记录会关联到 CRM 联系人,包括此前的匿名访问。身份识别时使用已验证的电子邮件,即可将网站和收件箱中的记录解析为同一个人。
- 按流量来源、引荐来源和国家/地区细分,并提供“下一步写什么”的信号(热门主题、互动情况,以及没有搜索结果的查询)。
集成
三种集成,各有归属。具体选择哪种,取决于另一个系统是什么。
消息渠道——客户联系你的地方
通过 IMAP/SMTP 收发电子邮件,或生成一个转发地址,供你转发到现有邮箱。可嵌入的聊天组件支持主题自定义和深色模式,支持 23 种语言。通过 Threll.ai 或 Vapi 提供语音服务,通过 Twilio 或 MessageBird 提供 SMS 服务。每种渠道都是同一组 conv_* 工具背后的渠道适配器。
操作桥接——团队日常工作的地方
Slack 会将每段对话同步到一个线程中:团队成员在该线程中回复,客户就会收到回复;外联提案会附带批准和驳回按钮;CMS 发布后会发送公告,并附上正式文章的链接。对话、审批和审计记录都与仪表板中显示的完全相同。
数据连接器——客户的权威数据源
通过供应商的 API 实时读取数据,绝不将数据复制到 Munin,因此无需同步,也不会过时。
| 领域 | 工具 | 供应商 |
|---|---|---|
| 电商 | commerce_* | Shopify、Magento 2 / Adobe Commerce |
| 预订 | bookings_* | Gastroplanner — 查询可用情况、创建、修改、取消 |
| 搜索控制台 | seo_* | Bing Webmaster Tools、Google Search Console |
| 任意专有系统 | 由你提供 | 你运行的任意 MCP 服务 |
电商和预订有一部分支持自助服务:聊天组件中的终端用户 Agent 可查询自己的订单或预订,并在服务端绑定到调用者的身份,而不是绑定到模型收到的任意电子邮件地址。搜索控制台仅供操作人员使用,且仅限管理员访问。连接信息经过加密存储;根据供应商的不同,通过 API 密钥或 OAuth 重定向授权;可在仪表板的“集成”页面进行管理。
如果你有某个系统没有供应商适配器支持,可以将 Munin 指向你运行的 MCP 服务,其工具便会成为连接器工具,并可为每个连接设置允许列表,控制 Agent 可以调用哪些工具。
自动化
对话循环
进程内的 Agent 运行器按组织运行,为各渠道(聊天组件、电子邮件、SMS、语音)上的实时对话提供应答,并使用你配置的大模型提供商——起草和发送回复,并在需要时转交给人工处理。
内容整理循环
进程内的 Agent 运行器还会处理持久化的后台作业队列:定期整理知识库、维护 CRM、提取联系人信息以及起草外联内容,并支持重试和死信处理。
审核
Agent 提出的所有内容和人员作出的所有决定都会进入同一个队列——知识库修订、外联提案、合并提案和起草的回复。每项决定都会保留下来,因此“已决定”动态流会持久记录谁批准了什么,而不是随着处理而清空的列表。
操作手册与技能
面向多步骤、跨模块工作流的打包 Markdown 流程(skill://module/<verb-object>),通过 MCP 提供——Munin 自己的运行器和任何在该平台上运行的外部 AI Agent 都可以使用。
平台
数据可移植性
每个模块都提供对称的 *_export / *_import MCP 工具(以及 /v1/<module>/export|import REST 端点),让 Agent 可以在任意方向上,将组织的数据在可自托管的服务和云端之间迁移。参见 skill://playbooks/data-migration。
身份
为对话另一端的人员提供统一的身份主线——聊天组件访客、来电者的电话号码、电子邮件地址以及你自有系统的用户 ID 都会解析为同一个人,并可通过 MCP 使用 identity_* 进行寻址。
审计与 Webhook
每项操作都会写入审计日志;Webhook 会将这些事件推送到你自己的端点,并提供带签名、可重放的投递。
告警与反馈
Agent 可以列出、确认和解决系统告警,以查看运行问题。产品内的反馈渠道支持提交功能请求,并为 Munin 的公开路线图投票。
身份验证与访问权限
登录和访问控制由 BetterAuth 处理,支持 OAuth 2.1 动态客户端注册和团队邀请。所有者和管理员可以访问整个控制台;成员只能访问收件箱。
实际演示
Lovable 构建前端,Munin 启动运营系统。一个提示词,一个 MCP 端点——剩下的交给 Agent。
观看 Lovable 如何根据单条提示词构建真实网站,同时 Munin 搭建背后的一切——博客读取内容的 CMS、预置的知识库、分析工具,以及一个已了解业务情况的聊天组件。无需点击操作,也无需手动配置各个界面;Agent 会通过单个 MCP 端点完成工作。随后,一段真实的客户对话展开:先从知识库中获取答案,在关键时刻转交给人工,再由 Agent 接手并完成对话。
两种运行方式
自托管(此仓库):单租户,仅限受邀用户。
git clone https://github.com/getmunin/munin.git
cd munin
cp .env.example .env
docker compose up
首次启动时,.env.example 中仍为占位值的密钥会自动生成,并持久化到 munin-data 卷中——适用于本地自托管。对于共享或生产部署,请改为在 .env 中设置强度足够的 MUNIN_AUTH_SECRET + MUNIN_KEY_PEPPER + MUNIN_ENCRYPTION_KEY 值(openssl rand -base64 48)。在 Docker 之外,以 NODE_ENV=production 启动的后端也会在任意一个值缺失、长度过短或仍为占位值时拒绝启动。请设置部署中已有的 pepper 和加密密钥,而不要换用新值:新的 pepper 会使所有 API 密钥和签名链接失效;新的加密密钥则会导致已存储的渠道和连接器密钥无法读取。
Postgres 仅发布到 127.0.0.1,因此其他机器无法访问。其默认密码(超级用户为 munin,应用角色为 munin_app)仍可被主机上的任何用户获知:在共享机器上,请在 .env 中设置 POSTGRES_PASSWORD 和 MUNIN_APP_PASSWORD。POSTGRES_PASSWORD 仅在首次创建 munin-pg 卷时生效;MUNIN_APP_PASSWORD 则会在每次启动时应用。
第一个注册的用户会成为组织管理员;后续用户需要邀请令牌,或使用域名包含在 MUNIN_ALLOWED_EMAIL_DOMAINS 中的邮箱。允许列表中的邮箱地址经验证邮件确认后即可加入;邀请只能由使用受邀邮箱地址登录的账号接受。
托管版(https://www.getmunin.com):多租户,每个组织注册一次。
本地试用
运行 docker compose up 后,后端会监听 :3001,仪表板会监听 :3000。
- 打开
http://localhost:3000,注册第一个用户——该用户会成为唯一的组织管理员。 - 在仪表板中前往 Settings → API keys,创建管理员密钥(
mn_admin_…)。该密钥仅显示一次;请像密码一样妥善保管。 - 调用 API 和工具进行试用:
# REST control plane — direct, no OAuth
curl -s http://localhost:3001/v1/kb/spaces \
-H "Authorization: Bearer mn_admin_..." | jq
# MCP tool browser (recommended for poking at tools/skills)
npx @modelcontextprotocol/inspector
# In its UI: URL = http://localhost:3001/mcp, Auth = Bearer mn_admin_...
# Raw curl over Streamable HTTP — useful for sanity-checking the transport
curl -N -X POST http://localhost:3001/mcp \
-H "Authorization: Bearer mn_admin_..." \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
REST 控制平面的 OpenAPI 规范位于 packages/backend-core/openapi.json。如需配置 Claude 或 Cursor 等 MCP 客户端,请参阅下方的连接你的 AI Agent。
连接你的 AI Agent
注册(托管版)或运行 docker compose up(自托管版)后,将 MCP 客户端指向相应 URL——自托管版使用 http://localhost:3001/mcp,托管版使用 https://mcp.getmunin.com。
Claude Code(CLI):
claude mcp add munin http://localhost:3001/mcp
Claude Desktop — 添加到你的 MCP 配置中:
{
"mcpServers": {
"munin": {
"url": "http://localhost:3001/mcp"
}
}
}
首次调用会在浏览器中触发 OAuth 授权界面,之后你的 Agent 即可使用完整的工具集——知识库、对话、CRM、CMS、拓展、分析,以及你接入的任何连接器。
你属于多个组织?每个组织还有自己的端点 /mcp/o/<orgId>。连接到该 URL 后,客户端就会固定使用该组织,不再跟随你上次设为活动状态的组织。
支持 MCP Apps 的宿主不仅能返回文本:提案、筛选候选项和连接器结果会以交互式面板的形式呈现,这些面板由 ui:// 资源提供,人类可以点击批准,而不必要求模型调用工具。
两种信任上下文,一个 MCP 端点
同一个 /mcp 端点会根据受众,为两种不同的调用方提供服务:
- 管理员 Agent(Claude Desktop、Cursor、内部自动化)——由你通过 OAuth 授权。可使用完整工具集,并按
kb:*、conv:*、crm:*、cms:*、outreach:*、analytics:*、commerce:read、bookings:*、seo:*、connectors:*、identity:read、slack:*、webhooks:*进行范围控制。 - 终端用户 Agent(你的语音 AI、网页聊天机器人、移动应用助手)——由你的后端在服务器端签发短期委托令牌,并限定为某个终端用户。只能使用自助服务工具:读取自己的联系人信息、在自己的对话中发送消息、查询自己的订单、创建自己的预订。
令牌签发 API 参见 packages/backend-core/src/control/delegated-token.controller.ts。@getmunin/sdk Node 客户端封装了该 API。
这些工具返回的大部分内容都是你所在组织中无人撰写的文本——传入消息、CRM 字段、导入的文章、客户商店中的实时记录。Munin 会将这些内容标记为仅供自身运行器使用的数据,并在服务器指令中告知外部宿主同样的要求;真正的隔离仍由 RLS、受众限制和按技能设置的工具允许列表保障。
技术栈
| 层 | 技术 |
|---|---|
| 语言与运行时 | TypeScript、Node 24 LTS |
| 单体仓库 | Turborepo、pnpm |
| 后端 | NestJS |
| 前端 | Next.js |
| 数据 | Postgres + pgvector、Drizzle |
| 协议与身份验证 | MCP Streamable HTTP、BetterAuth + OAuth 2.1 |
文档
开发者文档位于 getmunin.com/docs,包含指南、REST API 参考、完整 MCP 工具列表和技能库。
参与贡献
欢迎贡献代码。运行 pnpm install,然后运行 docker compose up(或 pnpm dev),即可在 :3001(后端)和 :3000(仪表板)启动完整技术栈。从 main 创建分支,命名格式为 <type>/<kebab-summary>(例如 feat/website-import-reconcile),让 PR 保持聚焦,并确保 CI(lint、typecheck、test、build)通过。
上方的截图是自动生成的,并非手动截取——UI 更改后,请参阅 apps/web/capture/README.md 重新生成截图。
设置、提交规范和 PR 指南请参阅 CONTRIBUTING.md。
安全
发现漏洞?请不要提交公开问题,请发送邮件至 [email protected]。范围和响应时间请参阅 SECURITY.md。
许可证
MIT。请参阅 LICENSE。
捆绑的第三方依赖保留其各自的许可证——请参阅 THIRD_PARTY_LICENSES.md(由 pnpm licenses:generate 生成,并在 CI 中验证)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。