mtb(铺床)
mtb 是一个MCP服务器,旨在通过使用苏格拉底式方法帮助用户在构建软件时提出正确的问题,并促使他们使用现有的经过实战检验的解决方案,从而帮助代理和工程师在跳跃之前进行观察,以便将重点放在解决新问题上。
consult:在编写任何代码之前,用结构化问题推回新功能stats:使用嵌入式显示复杂性分数scc因此,用户可以权衡更改与未来的维护成本deps:在添加更多内容之前,先了解项目中已有的内容checklist:在宣布项目“完成”之前评估行动准备情况compare:在提交之前衡量变更的复杂性影响
在加尔文和霍布斯的漫画中,加尔文的妈妈告诉他铺床。他不只是做这件事,而是花了一整天的时间建造一个机器人来为他铺床。机器人不工作,床永远不会铺好,卡尔文比自己动手更累。
软件的大部分精力都花在调试和维护上。指标如 圈复杂度 和 可可莫 这是许多争论的主题,但它们确实让工程师大致了解了构建和维护他们正在使用的软件的成本。
当你的依赖项中已经有三个时,人工智能代理会很乐意从头开始生成一个充满错误的JSON解析器,或者当一个HTTP客户端库就在你的锁文件中时,添加一个新的HTTP客户端库。而且,如果你要求它在有一个完美的开源火箭飞船可供使用时建造一个火箭飞船,人工智能会很乐意帮助你建造一个新的火箭飞船。
希望是,与其在定制实现中修复错误或钻兔子洞, mtb 可以帮助代理和工程师专注于他们试图解决的实际问题:铺床,并将一些对软件来说可能巨大的维护成本外部化。
示范
没有 mtb,人工智能代理热情地说“好主意!”并立即开始脚手架项目——数据库模式、技术栈、时间表等等。随着 mtb,特工停下来,先问一些尖锐的问题。
下面的每个示例都显示了发送给Claude Opus 4.6的相同提示,有和没有 mtb:
| 提示 | 无mtb | 有mtb |
|---|---|---|
| “我们在Zendesk上花了太多钱……给我建一个简单的支持票系统” | 问什么技术栈,马上开始建设。 | 列出Zammad、osTicket、FreeScout、薄荷糖。问:构建自定义还是先尝试OSS? |
| “日历按座位收费…只需制作一些连接到谷歌日历的东西” | 问什么技术栈,开始规划架构。 | |
| “我想要一个仪表板……实时从我们的Postgres数据库中提取” | 问什么技术栈,马上开始建设。 | [表元数据库,Superset,Grafana,Redash,证据。运行时间\ 在我们编写任何代码之前,有一些问题需要解决: |
1. 你想解决的实际问题是什么? 想要在文件中递归计数单词的根本原因是什么?这是用于分析代码库、跟踪文档大小还是其他用途? 1. 你考虑过现有的工具吗? 已经有一些众所周知的替代方案: -wc -w--内置Unix工具;find . -type f -exec cat {} + | wc -w在一行中进行递归单词计数 -tokei/scc--如果你在计算代码度量(行数、复杂性等) -cloc--另一种代码计数工具 -fd+wc—fd -t f -x wc -w寻找更友好的替代品 为什么这些不适用于你的用例? 1. 你确定你的堆栈中没有可以扩展的现有工具吗? 项目目录当前为空——是否有一个更广泛的项目应该放入其中? 1. 维护成本 --构建自定义工具意味着您拥有维护权。一个带有wc无需维护。什么可以证明定制方法的合理性? 1. 当需求发生变化时,谁来维护它? 1. 你和另一位工程师讨论过这种方法吗? 让我知道你的想法——尤其是关于现有工具是否wc满足你的需求,或者如果你想填补一个特定的空白。
checklist
评估项目的运营准备情况。发送代码后,使用此功能检查CI、监控、随叫随到、安全、部署和文档问题是否已得到解决。
参数:
project-被评估项目的描述
检查表包括:
- 自动化测试/CI --回归预防与标准执行
- 监控 --健康检查、指标和警报
- 随叫随到的覆盖范围/SLA --响应时间预期和升级
- 安全审计/自动扫描 --漏洞检测和隔离
- 部署管道/CD --升级到测试和生产环境
- 文档/运行手册 --入职、延期和操作程序
compare
提示代理衡量代码更改的复杂性影响。代理人跑 stats 在更改前后,显示代码行、复杂性和估计成本的前后增量,并询问用户增加的复杂性是否合理。
参数:
project-被评估项目的描述
stats
使用以下命令分析目录中的代码 scc.返回每种语言的代码行、注释、空格、复杂性和COCOMO成本估算。
参数:
path-要分析的目录或文件cocomo-包括COCOMO成本估算(默认值:true)complexity-包括复杂性度量(默认值:true)exclude_dir-要从分析中排除的目录exclude_ext-要排除的文件扩展名(例如。min.js)include_ext-仅包含这些文件扩展名
deps
在建议新的依赖关系之前,提示代理识别现有的项目依赖关系。返回有关要检查哪些清单文件(go.mod、package.json、requirements.txt、Cargo.toml等)的指导,以及适用于生态系统的CLI工具,以进行更深入的分析。
参数:
path-要扫描的目录
安装
从以下网址下载适用于您平台的二进制文件 最新版本 把它放在你的某个地方 $PATH.
克劳德代码
增添 .claude/mcp.json 在您的项目中(或 ~/.claude/mcp.json 全球):
{
"mcpServers": {
"mtb": {
"type": "stdio",
"command": "mtb"
}
}
}光标
增添 ~/.cursor/mcp.json:
{
"mcpServers": {
"mtb": {
"command": "mtb"
}
}
}帆板运动
增添 ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"mtb": {
"command": "mtb"
}
}
}VS代码(副本)
增添 .vscode/mcp.json 在您的工作空间中:
{
"servers": {
"mtb": {
"type": "stdio",
"command": "mtb"
}
}
}克莱恩
在VS Code中打开临床设置,点击“MCP服务器”,然后点击“配置MCP服务器”并添加:
{
"mcpServers": {
"mtb": {
"command": "mtb"
}
}
}OpenAI Codex
增添 ~/.codex/config.toml (或 .codex/config.toml 在您的项目中):
[mcp_servers.mtb]
command = "mtb"Gemini CLI
增添 ~/.gemini/settings.json (或 .gemini/settings.json 在您的项目中):
{
"mcpServers": {
"mtb": {
"command": "mtb"
}
}
}从源代码构建
go install github.com/dbravender/mtb@latest吃自己的狗粮
自行运行mtb:
统计数据:
| 语言 | 文件 | 代码 | 复杂性 |
|---|---|---|---|
| 前进 | 13 | 630 | 134 |
| YAML | 3 | 83 | 0 |
| Markdown | 2 | 201 | 0 |
| 生成文件 | 1 | 14 | 0 |
| 许可证 | 1 | 17 | 0 |
估计费用:37395美元|人数:0.84 |日程安排:3.9个月
deps: 2个直接依赖关系,24个可传递模块-- mtb 通过将依赖性扫描委托给代理自己的工具,而不是捆绑一个繁重的SBOM库,来实践它所宣扬的。
检查表: 当自行运行时,mtb得分很高——CI强制执行 go vet, govulncheck对每次推送进行构建和测试;通过标签触发的交叉编译,发布完全自动化;文档涵盖了每个工具和7个编辑器集成。监控和随叫随到不适用于本地CLI工具。
比较: 在删除Syft依赖关系和转换时使用 deps/consult 基于指导的工具:
| 度量 | 之前 | 之后 | 增量 |
|---|---|---|---|
| 运行代码 | 836 | 630 | -206 |
| 复杂性 | 200 | 134 | -66 |
| 估计。成本 | 43351美元 | 37395美元 | -5956美元 |
-通过将依赖性扫描委托给代理而不是捆绑Syft,实现了206行和-66的复杂性。传递依赖从288下降到24。
许可证
麻省理工学院
