一个完整的MCP(模型上下文协议)服务器,用于与Subversion(SVN)集成,旨在使AI代理能够高效地管理SVN仓库。
# 基本命令验证SVN
svn --version
# 验证可执行文件的完整路径
where svn # Windows
which svn # Linux/Mac
# 验证完整的SVN客户端
svn --version --verbose
svn, version 1.14.x (r1876290)
compiled Apr 13 2023, 17:22:07 on x86_64-pc-mingw32
Copyright (C) 2023 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
# Windows
'svn' 不是内部或外部命令
# Linux/Mac
svn: 命令未找到
bash: svn: 命令未找到
# 验证系统PATH
echo $PATH # Linux/Mac
echo %PATH% # Windows CMD
$env:PATH # Windows PowerShell
# 在系统中查找SVN可执行文件
find / -name "svn" 2>/dev/null # Linux
Get-ChildItem -Path C:\ -Name "svn.exe" -Recurse -ErrorAction SilentlyContinue # Windows PowerShell
# 验证客户端的具体版本
svn --version | head -1 # 只获取第一行版本信息
# 使用Chocolatey(推荐)
choco install subversion
# 使用winget
winget install CollabNet.Subversion
# 使用Scoop
scoop install subversion
TortoiseSVN(包括命令行客户端):
https://tortoisesvn.net/downloads.html
✅ 包括GUI和CLI客户端
✅ 与Windows资源管理器集成
SlikSVN(仅命令行):
https://sliksvn.com/download/
✅ 轻量级(仅CLI)
✅ 适合自动化
CollabNet Subversion:
https://www.collab.net/downloads/subversion
✅ 企业版
✅ 提供商业支持
# 如果已安装Git for Windows,可能包含SVN
git svn --version
# Visual Studio也可能包含SVN
# 前往:Visual Studio Installer > 修改 > 单个组件 > Subversion
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install subversion
# CentOS/RHEL/Fedora
sudo yum install subversion # CentOS 7
sudo dnf install subversion # CentOS 8/Fedora
# Arch Linux
sudo pacman -S subversion
# Alpine Linux
sudo apk add subversion
# Homebrew(推荐)
brew install subversion
# MacPorts
sudo port install subversion
# 从Xcode Command Line Tools(可能已包含)
xcode-select --install
# 查看当前配置
svn config --list
# 设置全局用户
svn config --global auth:username 你的用户名
# 设置默认编辑器
svn config --global editor "code --wait" # VS Code
svn config --global editor "notepad" # Windows记事本
svn config --global editor "nano" # Linux/Mac nano
# 测试连接到仓库(不进行检出)
svn list https://svn.ejemplo.com/repo/trunk
# 使用特定凭据测试
svn list https://svn.ejemplo.com/repo/trunk --username 用户名 --password 密码
npm install -g @grec0/mcp-svn
git clone https://github.com/gcorroto/mcp-svn.git
cd mcp-svn
npm install
npm run build
| 变量 | 描述 | 默认值 |
|---|---|---|
SVN_PATH | SVN可执行文件路径 | svn |
SVN_WORKING_DIRECTORY | 工作目录 | process.cwd() |
SVN_USERNAME | 认证用户 | - |
SVN_PASSWORD | 认证密码 | - |
SVN_TIMEOUT | 超时时间(毫秒) | 30000 |
{
"mcpServers": {
"svn": {
"command": "npx",
"args": ["@grec0/mcp-svn"],
"env": {
"SVN_PATH": "svn",
"SVN_WORKING_DIRECTORY": "/path/to/working/copy",
"SVN_USERNAME": "你的用户名",
"SVN_PASSWORD": "你的密码"
}
}
}
}
svn_health_check检查SVN系统和工作副本的健康状况。
svn_health_check()
svn_info从工作副本或特定文件获取详细信息。
svn_info(路径?: 字符串)
svn_status查看工作副本中文件的状态。
svn_status(路径?: 字符串, 显示所有?: 布尔值)
svn_log查看仓库的提交历史。
svn_log(路径?: 字符串, 限制?: 数字, 版本?: 字符串)
svn_diff比较文件版本之间的差异。
svn_diff(路径?: 字符串, 旧版本?: 字符串, 新版本?: 字符串)
svn_checkout检出SVN仓库。
svn_checkout(
地址: 字符串,
路径?: 字符串,
版本?: 数字 | "HEAD",
深度?: "empty" | "files" | "immediates" | "infinity",
强制?: 布尔值,
忽略外部?: 布尔值
)
svn_update从仓库更新工作副本。
svn_update(
路径?: 字符串,
版本?: 数字 | "HEAD" | "BASE" | "COMMITTED" | "PREV",
强制?: 布尔值,
忽略外部?: 布尔值,
接受冲突?: "postpone" | "base" | "mine-conflict" | "theirs-conflict" | "mine-full" | "theirs-full"
)
svn_add将文件添加到版本控制。
svn_add(
路径: 字符串 | 字符串[],
强制?: 布尔值,
不忽略?: 布尔值,
父级?: 布尔值,
自动属性?: 布尔值,
不自动属性?: 布尔值
)
svn_commit确认对仓库的更改。
svn_commit(
消息: 字符串,
路径?: 字符串[],
文件?: 字符串,
强制?: 布尔值,
保持锁定?: 布尔值,
不解锁?: 布尔值
)
svn_delete删除版本控制文件。
svn_delete(
路径: 字符串 | 字符串[],
消息?: 字符串,
强制?: 布尔值,
保留本地?: 布尔值
)
svn_revert撤销文件的本地更改。
svn_revert(路径: 字符串 | 字符串[])
svn_cleanup清理工作副本中的中断操作。
svn_cleanup(路径?: 字符串)
// 验证SVN可用且工作副本有效
const healthCheck = await svn_health_check();
// 工作副本的总体信息
const info = await svn_info();
// 特定文件的信息
const fileInfo = await svn_info("src/main.js");
// 所有文件的状态
const status = await svn_status();
// 包含远程信息的状态
const fullStatus = await svn_status(null, true);
const checkout = await svn_checkout(
"https://svn.example.com/repo/trunk",
"local-copy",
"HEAD",
"infinity",
false,
false
);
// 添加文件
await svn_add(["src/new-file.js", "docs/readme.md"], { 父级: true });
// 提交
await svn_commit(
"添加新功能和文档",
["src/new-file.js", "docs/readme.md"]
);
# 运行测试
npm test
# 带覆盖率的测试
npm run test -- --coverage
# 监视模式下的测试
npm run test -- --watch
# 编译TypeScript
npm run build
# 开发模式
npm run dev
# 监视模式
npm run watch
# MCP调试器
npm run inspector
# 测试
npm test
# 发布新版本
npm run release:patch
npm run release:minor
npm run release:major
svn-mcp/
├── package.json
├── tsconfig.json
├── jest.config.js
├── index.ts
├── common/
│ ├── types.ts # TypeScript类型
│ ├── utils.ts # SVN实用工具
│ └── version.ts # 包版本
├── tools/
│ └── svn-service.ts # 主要SVN服务
├── tests/
│ └── integration.test.ts # 集成测试
└── README.md
查看文件基于上述信息,执行以下指令:您是一位专业的翻译人员,负责将英文内容翻译成英文内容。请帮我翻译原始内容。以获取完整的实现清单。
当前进度: 第一阶段完成(基本操作)✅
下一步:
错误:系统PATH中未找到SVN
解决方案: 安装SVN并确保它在系统PATH中。
错误:无法获取SVN信息:svn:警告:W155007:'.'不是工作副本
解决方案: 导航到SVN的工作副本目录或先执行检出。
错误:svn: E170001:认证失败
解决方案: 配置环境变量SVN_USERNAME和SVN_PASSWORD。
错误:命令超时30000毫秒
解决方案: 增加SVN_TIMEOUT的值。
MIT许可证 - 详情见LICENSE。
git checkout -b feature/nueva-caracteristica)git commit -am '添加新特性')git push origin feature/nueva-caracteristica)