Jujutsu MCP服务器
用于Jujutsu(jj)版本控制系统的MCP(Model Context Protocol)服务器。该服务器提供了一套明确定义的工具,AI代理为Jujutsu强大的版本控制功能提供结构化访问。
机能
- 结构化版本访问:获取修订日志和详细信息作为JSON结构
- 智能操作:使用revset执行重基、挤压和其他操作
- 冲突检测:程序性地识别、分析冲突
- 安全的安东:使用完整的操作历史记录跟踪
- 状态监视:获取当前存储库状态,包括冲突和未提交更改
安装
前提条件
使用Nix时(推荐)
- 进入开发壳:
nix develop- 安装依赖关系:
uv sync手动安装
- 安装依赖关系:
uv sync- 激活虚拟环境:
source .venv/bin/activate使用方法
运行MCP服务器
python -m jujutsu_mcp或者,使用uv:
uv run python -m jujutsu_mcpMCP工具
服务器提供以下工具:
get_log
获取修订日志作为结构化图表。
参数:
limit(可选):要返回的最大修订版本数
返回值: 包含修订和当前修订的修订图表
describe_revision
获取特定修订版本的详细信息。
参数:
revision_id:版本标识(@,@-,main等的revset也可以)
返回值: 版本信息,包括说明、作者、父代和冲突状态
smart_rebase
使用revset执行重基操作。
参数:
source:源修订destination:目标修订
返回值: 成功消息
undo_last_op
安全释放最后一个操作。
返回值: 有关取消操作的信息
new_change
创建新更改(jj new 中所述修改相应参数的值。
参数:
parent(可选)父版本。默认值为当前工作副本。
返回值: 新版本标识
squash_changes
将一个修订的更改挤压到另一个修订。
参数:
revision:要挤压的修订into:目标修订
返回值: 成功消息
get_status
获取当前存储库状态。
返回值: 当前版本、未提交的更改状态、冲突
resolve_conflicts
发现并分析修订版中的冲突。
参数:
revision(可选):要检查的修订版,默认值为@)
返回值: 冲突信息列表
设定
自动启动Cursor MCP服务器设置
要在Cursor中自动启动该MCP服务器,必须在Cursor设置中进行设置。
选项1:项目级别设置(建议)
~/.cursor/mcp.json 在(或项目根目录)中创建以下文件:
{
"mcpServers": {
"jujutsu-mcp": {
"command": "/path/to/jujutsu-mcp/.venv/bin/python",
"args": [
"-m",
"jujutsu_mcp"
],
"cwd": "/path/to/jujutsu-mcp",
"env": {
"PYTHONPATH": "/path/to/jujutsu-mcp/src"
}
}
}
}重要:
/path/to/jujutsu-mcp将替换为此项目目录的实际绝对路径。- 首先,在jujutsu-mcp目录中
uv sync中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。 .venv缺少支持的问题uv sync中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
关于工作区路径检测:MCP服务器使用多种方法自动检测jj存储库根目录:
- 环境变数(
CURSOR_WORKSPACE_PATH,WORKSPACE_PATH,PWD) - 快速通道上下文元数据(如果可用)
- 从当前目录
jj root命令 .jj目录递归父目录搜索
从另一个存储库使用MCP服务器 Error: There is no jj repo in "." 在动态输入提示中单击env 您可以添加到节中以显式设置工作空间:
{
"mcpServers": {
"jujutsu-mcp": {
"command": "/path/to/jujutsu-mcp/.venv/bin/python",
"args": [
"-m",
"jujutsu_mcp"
],
"cwd": "/path/to/jujutsu-mcp",
"env": {
"PYTHONPATH": "/path/to/jujutsu-mcp/src",
"CURSOR_WORKSPACE_PATH": "${workspaceFolder}"
}
}
}
}注意: ${workspaceFolder} 是占位符。有时Cursor会自动展开,但如果它不工作,则必须手动设置实际路径或依赖于自动检测机制。
uv run 使用的替代方法 (上述不动作时):
{
"mcpServers": {
"jujutsu-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/jujutsu-mcp",
"python",
"-m",
"jujutsu_mcp"
],
"cwd": "/path/to/jujutsu-mcp",
"env": {
"PYTHONPATH": "/path/to/jujutsu-mcp/src",
"CURSOR_WORKSPACE_PATH": "${workspaceFolder}"
}
}
}
}选项2:全局设置
对于macOS,编辑或创建:
~/Library/Application Support/Code/User/globalStorage/tencent-cloud.coding-copilot/settings/Craft_mcp_settings.json对于Windows:
%APPDATA%\Code\User\globalStorage\tencent-cloud.coding-copilot\settings\Craft_mcp_settings.json对于Linux:
~/.config/Code/User/globalStorage/tencent-cloud.coding-copilot/settings/Craft_mcp_settings.json请添加与选项1相同的设置。
使用Nix环境时
如果使用Nix,则可以将其设置为使用Nix环境:
{
"mcpServers": {
"jujutsu-mcp": {
"command": "nix",
"args": [
"develop",
"--command",
"uv",
"run",
"python",
"-m",
"jujutsu_mcp"
],
"cwd": "/path/to/jujutsu-mcp"
}
}
}注意:设置后,Cursor将在启动时自动启动MCP服务器。你不需要每次都手动启动。
故障排除
错误:“There is no jj repo in”.“”
如果MCP服务器无法检测到jj存储库根目录,则会发生此错误。服务器使用多种发现方法:
- 环境变数:
CURSOR_WORKSPACE_PATH,WORKSPACE_PATH,PWD查看项目中可用的所有族 - 快速通道上下文:尝试从MCP请求上下文中提取工作空间
- jj root命令:从当前目录
jj root执行 - 再帰的検索:在父目录中
.jj搜索目录(最多20层)
解决方法:
- 在MCP设置中设置环境变量:单击功能区上
env在您查看完详细信息后,单击CURSOR_WORKSPACE_PATH添加(请参见上面的选项1)
- 确保在jj存储库中:MCP服务器
.jj必须找到目录。使用的工作空间jj init中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积
- 检查MCP服务器日志:启用调试日志以确定正在尝试哪种检测方法:
{
"mcpServers": {
"jujutsu-mcp": {
"command": "/path/to/jujutsu-mcp/.venv/bin/python",
"args": ["-m", "jujutsu_mcp"],
"env": {
"PYTHONPATH": "/path/to/jujutsu-mcp/src",
"PYTHONUNBUFFERED": "1"
}
}
}
}- 手动设置工作空间:如果自动检测失败,则可以手动将工作空间路径添加到MCP设置的环境变量中
Git认证设定
有关对GitHub的推送操作的Git认证设定的详细步骤Git认证设置指南来修改标记元素的显示属性。
本指南包括:
- SSH密钥认证(推荐)
- HTTPS用のPersonal Access Token(PAT)设定
- 验证问题故障排除
- 安全认证最佳实践
光标规则
该项目包括Cursor Rules(.cursor/rules/jujutsu-policy.mdc):
- 总是
git而不是直接使用jj使用命令 jj new中单独创建工作单位- 频繁提交有意义的说明
- 在进行更改之前了解修订图表
jj evolog使用了解冲突历史记录
开発
项目结构
jujutsu-mcp/
├── flake.nix # Nix環境定義
├── flake.lock # Nixロックファイル
├── pyproject.toml # Python依存関係
├── uv.lock # uvロックファイル
├── src/
│ └── jujutsu_mcp/
│ ├── __init__.py
│ ├── __main__.py # エントリーポイント
│ ├── server.py # MCPサーバー実装
│ ├── jj_commands.py # jjコマンド実行ロジック
│ └── models.py # データモデル
├── tests/ # テストファイル
└── .cursor/
└── rules/
└── jujutsu-policy.mdc # Cursor Rules运行测试
uv run pytest代码格式
uv run ruff check .
uv run ruff format .体系结构
此项目遵循四层体系结构:
- 基础架构层:可重复的开发环境
- 逻辑层(MCP服务器):对jj命令的结构化JSON访问
- 策略层(.mdc Rules):代理行为准则
- 実行层:高级工作流(冲突解决、时间旅行)
许可证
Apache许可证2.0
分发
该项目在版本控制中使用Jujutsu,在协作中使用GitHub。提供时:
- 开始新工作:
jj new -m "Feature: description"在中创建新更改 - 进行变更:根据需要编辑文件
- 频繁提交:
jj describe -m "明確なコミットメッセージ"添加有意义的提交消息 - 与远程同步:
jj git fetch中获取最新更改,并根据需要重新基于 - 推到GitHub:
jj git push --change @-使用推送更改 - 合并更改:推送前
jj squash对较大场景进行渲染期间已观察到该故障
开发工作流
# 新しい機能を開始
jj new -m "Feature: add new functionality"
# 変更を行い、頻繁にコミット
jj describe -m "Implement core logic"
jj describe -m "Add error handling"
# プッシュ前にリモートと同期
jj git fetch
jj rebase -o main@origin
# GitHubにプッシュ
jj git push --change @-GitHub同期
- 推送更改:
jj git push --change @-(推送当前更改) - 推送书签:
jj git push --bookmark(推送特定书签) - 获取更新:
jj git fetch(从远程获取) - 同步工作流:
jj git fetch && jj rebase -o main@origin(获取并重基)
有关详细的指导方针和最佳实践,请参见.cursor/rules/jujutsu-policy.mdc 来修改标记元素的显示属性。
