代码库问答工具

Steward MCP是一个运行Claude Code会话的MCP服务器,允许用户在目标代码库上提问而不占用主会话的上下文。

  • by cduerr
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 cduerr/stewardmcp

使用说明

管家MCP

一个MCP服务器,它对目标仓库运行Claude Code会话,并将其作为工具公开。其他Claude Code实例调用 ask 在不将文件转储到自己的上下文中的情况下,获取有关代码库的答案。

别再做你代理人的中间件了!

子代理共享其父代理的上下文预算,无法相互通信。Stewards在自己的会话中运行,具有自己的上下文,范围仅限于单个仓库。

将管理员绑定到您的仓库,可以轻松完成以下任务,而无需打开上下文窗口:

“与FE和内部应用程序协调,以识别任何端点 未使用。"

“我看到400在我们的身份验证端点上重新出现。与内部服务部门协调,确定原因并提供解决方案。”

“在structlog上整合我们所有的Python服务需要付出什么努力?”

默认情况下,管家是只读的,但可以获得与任何Claude Code会话相同的工具。

快速开始

cd /path/to/target-repo
npx stewardmcp@latest init
npx stewardmcp@latest install

然后在Claude.md中告诉克劳德:

使用 stewardmcp-<repo-name> MCP服务器询问有关<repo name>代码库的问题。比起重述背景,更喜欢后续问题。

运作原理

Steward生成了一个指向仓库的Claude Code Agent SDK会话。关于第一个问题,它通过阅读目录结构和CLAUDE.md来预热。后续问题重用相同的会话,因此管家会随着时间的推移建立上下文。如果会话处于空闲状态的时间超过配置的超时时间,则会在下次请求时自动重置。

通信通过stdio使用MCP协议进行。Claude Code将管家作为子进程生成——没有端口,实例之间没有冲突。

先决条件

设置

1.初始化目标仓库

cd /path/to/target-repo
npx stewardmcp@latest init

这创建了一个 .stewardmcp/ 目录包含:

  • config.json --实例名称、空闲超时、允许的工具、预热提示
  • ENGINEER.md --乘务员的角色指示

实例名称来源于目录名称(例如。 stewardmcp-billing-api 回购价格为 /projects/billing-api).如果 .gitignore 或 .dockerignore 存在, .stewardmcp/ 自动附加。

2.用克劳德代码注册

npx stewardmcp@latest install

这将管家注册为Claude Code中用户范围内的MCP服务器,因此它在所有项目中都可用。

3.管理实例

npx stewardmcp@latest list        # Show all registered steward instances
npx stewardmcp@latest uninstall   # Remove this repo's steward from Claude Code

用法

安装后,管家工具可供任何兼容MCP的客户端使用。克劳德不会自动给他们打电话——你需要告诉他们管家的存在。

克劳德代码 --在CLAUDE.md中添加以下内容:

使用 stewardmcp-billing-api MCP服务器提问(ask 工具)关于计费api代码库。比起重述背景,更喜欢后续问题。

其他MCP客户端 --在系统提示或对话中包含类似的说明。

替换 stewardmcp-billing-api 使用您的实例名称(在 init).

工具

问

向乘务员提问。返回文本答案。

参数 类型 说明
question string 要问的问题
caller string 询问者的标识符(例如,“fe”、“api”)

管家阅读代码,解释原因,并简洁地回应。如果调用者在请求之间更改,则会通知管家该切换。

请求会排队——如果管家很忙,呼叫会等待。

状态

返回当前会话状态。没有参数。

{
  "state": "idle",
  "currentCaller": "fe",
  "turnCount": 3,
  "idleSeconds": 45,
  "idleTimeoutMinutes": 60,
  "contextPercent": 32
}

清晰

重置管家会话。下一个 ask 将以新的热身重新开始。没有参数。

配置

编辑 .stewardmcp/config.json 在目标仓库中:

字段 默认值 描述
name (来源于目录) 用于MCP注册的实例名称
idle_timeout_minutes 480 会话重置前的不活动分钟数
allowed_tools ["Read", "Grep", "Glob", "LS"] 管家会议可以使用的工具
warmup_prompt (见默认值) 会话开始时发送提示以熟悉代码库
max_context_characters 200000 会话上下文的角色预算
context_warning_threshold 0.6 建议重置的上下文分数
log_enabled true 写问答对 .stewardmcp/log.json
max_log_entries 20 日志中保留的最大条目数(最旧的条目已修剪)

管家的Claude Code会话也会读取目标仓库的 CLAUDE.md 自动(标准克劳德代码行为)。 .stewardmcp/ENGINEER.md 通过以下方式对管家特定行为进行分层 appendSystemPrompt.

会话生命周期

  • 热身 在第一个请求时延迟发生,而不是在服务器启动时。
  • 多圈 --本次会议贯穿了多个问题。管家会记住会话中的先前上下文。
  • 配置重新加载 — config.json 和 ENGINEER.md 每次请求时都会从磁盘重新加载,因此更改会立即生效。目标仓库的更改 CLAUDE.md 在会话重置(空闲超时或手动清除)时被拾取。
  • 空闲超时 --如果没有请求到达 idle_timeout_minutes,下一个请求会触发完全重启(新会话、重新预热)。每次请求都会重置计时器。
  • 手动清除 --呼叫 clear 工具强制立即重置会话。
  • 日志记录 --何时 log_enabled 如果为真,则每个问答交换都会附加到 .stewardmcp/log.json.日志的上限为 max_log_entries 条目。

项目结构

stewardmcp/
├── src/
│   ├── index.ts      # Entry point — arg routing
│   ├── types.ts      # StewardConfig interface, constants, config loading
│   ├── session.ts    # SessionManager class
│   ├── server.ts     # createMcpServer()
│   ├── commands.ts   # init, install, uninstall, list, help
│   └── serve.ts      # serve command — wires session + server + transport
├── defaults/
│   ├── config.json    # Default configuration
│   └── ENGINEER.md    # Default steward persona
├── package.json
└── tsconfig.json

发展

npm install
npm run build       # Compile TypeScript
npm run dev         # Watch mode

许可证

麻省理工学院