关于 Munim
Munim 是面向多客户业务运营者的本地 MCP 服务,可同时保持多个云服务商账户的会话。它隔离各客户凭据,并支持跨账户查询及按指定客户调用工具。
主要功能
- 01并行保持多个客户账户会话
- 02按命名空间提供服务商工具
- 03按客户凭据调用服务商 API
- 04确定性检查与审计日志
- 05可选的 AI 辅助分析
适用场景
- 01检查多个客户账户的域名
- 02为指定客户运行服务商工具
- 03调用服务商 MCP 未提供的 API 操作
MCP 相关
Munim 向客户端提供工具,用于列出和调用各已连接服务商的 MCP 工具,并为指定客户提供凭据。它还提供跨客户查询和直接调用服务商 API 的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
16收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| check | boolean | 否 | 询问每个提供方会话是否仍可打开。False 表示仅报告已存储的内容,响应即时返回。 |
详细介绍
Munim
一个 MCP 服务,同时与每个客户端的账户保持实时会话。
编码 Agent 可以登录一个 Cloudflare 账户、一个 Vercel 账户、一个 Resend 账户。连接第二个客户端,第一个客户端就会断开。因此,负责 十几家小型企业的人需要运行十几个 Agent 会话,而这些会话都无法 回答涉及多个客户端的问题。
Munim 将所有账户集中在一起。每个客户端在服务提供商处都有自己的 注册信息、自己的令牌,以及在工具列表中的独立命名空间,因此一个 Agent 可以读取所有客户端的信息,并在你指定的客户端中写入数据。
Kloudfirst -> [email protected]'s Account (3 tools)
Ivy & Fern -> [email protected]'s Account (3 tools)
both sessions opened concurrently, one process, no logout
这是对两个真实 Cloudflare 账户进行的真实运行,并非示意图。第二个账户属于一位客户,其地址在此处已替换:他们没有同意将信息公开在代码库中,而且此文件也会显示在 PyPI 页面上。
你可以用自己的两个账户复现:
scripts/cross_account_probe.py。
安装
需要 Python 3.10+。除此之外无需任何东西:不需要 Node、不需要构建步骤,也不需要预先创建账户。
uv tool install munim # or: pipx install munim, or: pip install munim
claude mcp add munim -- munim-mcp
如果由编码 Agent 帮你安装,请让它参考
llms-install.md。其中说明了无人看管终端时容易出错的环节,以及它必须停下来交还控制权的地方。
启动
munim clients # who you look after, and what is connected
munim clients add "Ivy & Fern" # write one down, connect nothing yet
munim connect "Ivy & Fern" cloudflare # a browser opens; that is the whole setup
顺序无所谓。先连接,登录的账户会成为客户端;也可以先记下客户端,再随时连接。两种方式最终都会到达同一个位置。
然后向你的编码 Agent 提出一个单个已登录会话无法回答的问题:
which of my clients has a domain expiring this quarter?
check ivyandfern.co.uk for Ivy & Fern Studio
做实际工作,而不只是诊断
Munim 不会用自己定义的动词封装每个提供方。这里的每个提供方都运行自己的 MCP 服务,并提供自己的工具,因此 Munim 会转发这些工具并提供凭据:
munim tools "Ivy & Fern" cloudflare # what that account can be asked to do
munim call "Ivy & Fern" cloudflare execute --args '{"code": "..."}'
你的编码 Agent 会通过 list_provider_tools 和 call_provider_tool 获得同样的两个工具。这条路径中没有模型,因此即使关闭 Agent 也能运行,而且每次调用都会连同工具及其参数一起写入运行日志。一次调用只会指定一个客户端,并且只解析该客户端的凭据。
当提供方自己的 MCP 服务没有发布你需要的功能时,call_provider_api 会深入一层,使用同一客户端的凭据向该提供方的 API 发起一次 HTTP 调用。Vercel 没有提供环境变量写入功能,也没有提供将域名关联到项目的方式,而这正是此工具的用途。它接受路径,不接受 URL,并会拒绝任何可能将凭据发送到其他主机的请求。
Munim 默认在本地运行。 检查、审计和邮件计划都是确定性的:它们从未需要模型,也不会调用模型,上述直通功能也一样。三个工具还可以对发现的内容进行推理(check、work_on_client、ask_across_clients),但除非你主动启用,否则这些功能会保持关闭状态。因此,手头有密钥并不等于同意使用它。
munim config ai key gemini # prompts, stored in ~/.munim/credentials.json
munim config ai on # takes effect on the next call, no reconnect
munim config ai # what is on, on what, and where each came from
支持的主机包括开箱即用的 Amazon Bedrock,以及作为 Strands 附加组件提供的 Google Gemini 和 Anthropic:pip install 'munim[gemini]'。
有一点不会因此改变:Munim 作为 MCP 服务运行,因此其工具返回的任何内容都会进入你的编码 Agent 上下文,进而传给该 Agent 使用的模型。关闭 Agent 可以阻止 Munim 调用自己的模型,但无法改变 MCP 的工作方式。隐私政策对此有明确说明。
munim doctor 会说明哪些内容已设置、哪些尚未设置,以及修复每个问题的确切命令。遇到不清楚的情况时,就从这里开始。
在哪里可以找到
| 演示视频 | https://youtu.be/-9xnJVLzO18 |
| 代码仓库 | https://github.com/vishalsg42/munim |
| 软件包 | https://pypi.org/project/munim/ |
| 项目页面 | https://glama.ai/mcp/servers/vishalsg42/munim |
| 收录于 | awesome-mcp-servers |
视频展示了针对真实客户端域名进行的一次实际运行:十五项确定性检查发现了两个问题,Strands Agent 用网站所有者的语言解释了这些问题;由于该客户端未连接到修复所需的提供方,修复流程在边界条件处停止。视频没有任何摆拍内容,这也是镜头中没有展示修复的原因。
如果不想安装任何内容,也可以自行运行:scripts/check_client.py 会对一个客户端运行检查目录并写入报告,scripts/fix_client.py 会运行修复图。两者使用的代码路径与 check 和 fix MCP 工具相同,且不会经过 Agent。
文档
| 命令 | 完整的 CLI |
| 工具 | 编码 Agent 可用的内容,以及它有意无法执行的操作 |
| 提供方 | 每个提供方各有一页:设置方法、连接后授予的权限、验证内容 |
| 架构 | 构建方式,以及塑造它的四项决策 |
| 决策 | 每项设计决策及其理由,包括错误的决策 |
| 路线图 | 尚未完成的内容及其原因 |
| 开发 | 运行测试,以及复现上文所述的验证结果 |
存在的原因
一个人负责维护十几家小型企业的网站和电子邮件配置。客户拥有这些账户;运营者获得委派访问权限并负责处理事务。每家服务提供商都只允许同时登录一个账户,因此只能为每位客户单独开一个 Agent 会话。
代价高的不是切换操作,而是邮件配置出错时,不会有任何明显的问题。A 记录填错,网站几分钟内就会宕机。SPF 记录填错,客户的发票邮件就会悄悄停止送达,而没人会注意到,直到几周后才发现。
munim 是企业主信任的管家,负责打理账目、处理事务,而无需每次都征求同意。
披露
借助 AI 完成。未使用任何现成代码;此代码库是在提交期间创建的。
许可证
MIT。参见 LICENSE。
贡献
CONTRIBUTING.md 说明了如何运行两套测试,以及在这里怎样才算优质的变更,而重点通常是写清楚原因。docs/DECISIONS.md 是记录这些原因的编号日志,其中有几条记录推翻了早先的决定。
**添加服务提供商无需使用 Python。**目前已内置 11 家,只有第一家需要编写代码:这里的服务提供商就是表格中的一行,而 munim servers add <name> <url> 会通过询问服务器来判断其身份验证方式。然后,munim servers export <name> 会打印出该行,供提交拉取请求使用。这种方式只需要提供该行、一份从 docs/providers/TEMPLATE.md 复制的页面,以及你进行的测量结果。无需提交失败测试,因为如果新增行却没有对应页面,tests/test_provider_docs.py 已经会失败。
安全问题请通过私密公告提交,而不要创建问题单。SECURITY.md 说明了受理范围,并列出已知且有意保留的问题,方便报告者略过这些内容。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。