SVN MCP Server

เซิร์ฟเวอร์ MCP สำหรับการรวมและจัดการกับที่เก็บ Subversion (SVN) ช่วยให้เอเจนต์ AI สามารถทำงานควบคุมเวอร์ชันได้

เอกสาร

SVN MCP Server

A complete MCP (Model Context Protocol) server for Subversion (SVN) integration, designed to let AI agents manage SVN repositories efficiently.

🎯 Features

  • Basic repository operations: info, status, log, diff, checkout, update
  • File management: add, commit, delete, revert
  • Maintenance tools: cleanup
  • 🔄 Branch management: (In development)
  • 🔄 Advanced operations: merge, switch, properties (In development)
  • 🔄 Analysis tools: blame, conflict detection (In development)
  • 🔄 Batch operations: (In development)

📋 Requirements

  • Node.js >= 18.0.0
  • Subversion (SVN) installed and available on PATH
  • TypeScript (for development)

🔍 Detecting the SVN installation

Check whether SVN is installed

# Basic command to check SVN
svn --version

# Check the full path of the executable
where svn        # Windows
which svn        # Linux/Mac

# Check the full SVN client
svn --version --verbose

Expected output if SVN is correctly installed:

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/

❌ Common errors if SVN is NOT installed:

# Windows
'svn' is not recognized as an internal or external command

# Linux/Mac
svn: command not found
bash: svn: command not found

🛠️ Advanced diagnostics

# Check the system PATH
echo $PATH                    # Linux/Mac
echo %PATH%                   # Windows CMD
$env:PATH                     # Windows PowerShell

# Search for SVN executables on the system
find / -name "svn" 2>/dev/null           # Linux
Get-ChildItem -Path C:\ -Name "svn.exe" -Recurse -ErrorAction SilentlyContinue  # Windows PowerShell

# Check the specific client version
svn --version | head -1       # Get just the first line with the version

💾 Installing SVN on Windows

Option 1: Package managers

# Using Chocolatey (Recommended)
choco install subversion

# Using winget
winget install CollabNet.Subversion

# Using Scoop
scoop install subversion

Option 2: Official installers

  1. TortoiseSVN (includes the command-line client):

    https://tortoisesvn.net/downloads.html
    ✅ Includes GUI and CLI clients
    ✅ Windows Explorer integration
    
  2. SlikSVN (command line only):

    https://sliksvn.com/download/
    ✅ Lightweight (CLI only)
    ✅ Ideal for automation
    
  3. CollabNet Subversion:

    https://www.collab.net/downloads/subversion
    ✅ Enterprise version
    ✅ Commercial support available
    

Option 3: Visual Studio or Git for Windows

# If you have Git for Windows installed, it can include SVN
git svn --version

# Visual Studio can also include SVN
# Go to: Visual Studio Installer > Modify > Individual Components > Subversion

🐧 Installing SVN on Linux

# 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

🍎 Installing SVN on macOS

# Homebrew (Recommended)
brew install subversion

# MacPorts
sudo port install subversion

# From Xcode Command Line Tools (may already be included)
xcode-select --install

🔧 Configuring SVN after installation

Check the global configuration

# Show current configuration
svn config --list

# Configure the global user
svn config --global auth:username your_username

# Configure the default editor
svn config --global editor "code --wait"     # VS Code
svn config --global editor "notepad"         # Windows Notepad
svn config --global editor "nano"            # Linux/Mac nano

Check repository access

# Test connection to a repository (without checking out)
svn list https://svn.example.com/repo/trunk

# Test with specific credentials
svn list https://svn.example.com/repo/trunk --username user --password password

🚀 Installation

From NPM

npm install -g @grec0/mcp-svn

Local Development

git clone https://github.com/gcorroto/mcp-svn.git
cd mcp-svn
npm install
npm run build

⚙️ Configuration

Environment Variables

VariableDescriptionDefault
SVN_PATHPath to the SVN executablesvn
SVN_WORKING_DIRECTORYLocal working copy directoryprocess.cwd()
SVN_URL (alias: SVN_REPOSITORY_URL)Repository URL. Enables URL-only workflows and /trunk/... target resolution-
SVN_USERNAMEAuthentication user-
SVN_PASSWORDAuthentication password-
SVN_TIMEOUTTimeout in milliseconds30000

SVN_WORKING_DIRECTORY and SVN_URL are independent — set either or both. With both configured, local operations (svn_status, svn_commit, ...) run in the working copy, and URL-capable tools (svn_cat, svn_list, svn_info, svn_log, svn_diff) can be called with:

  • a full URL (https://svn.example.com/repo/trunk/file.sql)
  • a repo-relative path starting with / (/trunk/file.sql) — joined with SVN_URL
  • a local path — resolved against the working copy

Example MCP Configuration

{
  "mcpServers": {
    "svn": {
      "command": "npx",
      "args": ["@grec0/mcp-svn"],
      "env": {
        "SVN_PATH": "svn",
        "SVN_WORKING_DIRECTORY": "C:/path/to/working/copy",
        "SVN_URL": "https://svn.example.com/repo",
        "SVN_USERNAME": "your_username",
        "SVN_PASSWORD": "your_password"
      }
    }
  }
}

🛠️ Available Tools

Basic Operations

svn_health_check

Check the health status of the SVN system and working copy.

svn_health_check()

svn_info

Get detailed information about the working copy or a specific file.

svn_info(path?: string)

svn_status

Show the status of files in the working copy.

svn_status(path?: string, showAll?: boolean)

svn_log

Show the commit history of the repository.

svn_log(path?: string, limit?: number, revision?: string)

svn_diff

Show differences between file revisions.

svn_diff(path?: string, oldRevision?: string, newRevision?: string)

Repository Operations

svn_checkout

Check out an SVN repository.

svn_checkout(
  url: string,
  path?: string,
  revision?: number | "HEAD",
  depth?: "empty" | "files" | "immediates" | "infinity",
  force?: boolean,
  ignoreExternals?: boolean
)

svn_update

Update the working copy from the repository.

svn_update(
  path?: string,
  revision?: number | "HEAD" | "BASE" | "COMMITTED" | "PREV",
  force?: boolean,
  ignoreExternals?: boolean,
  acceptConflicts?: "postpone" | "base" | "mine-conflict" | "theirs-conflict" | "mine-full" | "theirs-full"
)

File Management

svn_add

Add files to version control.

svn_add(
  paths: string | string[],
  force?: boolean,
  noIgnore?: boolean,
  parents?: boolean,
  autoProps?: boolean,
  noAutoProps?: boolean
)

svn_commit

Commit changes to the repository.

svn_commit(
  message: string,
  paths?: string[],
  file?: string,
  force?: boolean,
  keepLocks?: boolean,
  noUnlock?: boolean
)

svn_delete

Remove files from version control.

svn_delete(
  paths: string | string[],
  message?: string,
  force?: boolean,
  keepLocal?: boolean
)

svn_revert

Revert local changes on files.

svn_revert(paths: string | string[])

Maintenance Tools

svn_cleanup

Clean up the working copy from interrupted operations.

svn_cleanup(path?: string)

📖 Usage Examples

Check the system status

// Check that SVN is available and the working copy is valid
const healthCheck = await svn_health_check();

Get repository information

// General working copy information
const info = await svn_info();

// Information about a specific file
const fileInfo = await svn_info("src/main.js");

Show file status

// Status of all files
const status = await svn_status();

// Status including remote information
const fullStatus = await svn_status(null, true);

Check out a repository

const checkout = await svn_checkout(
  "https://svn.example.com/repo/trunk",
  "local-copy",
  "HEAD",
  "infinity",
  false,
  false
);

Commit changes

// Add files
await svn_add(["src/new-file.js", "docs/readme.md"], { parents: true });

// Commit
await svn_commit(
  "Add new feature and documentation",
  ["src/new-file.js", "docs/readme.md"]
);

🧪 Testing

# Run tests
npm test

# Tests with coverage
npm run test -- --coverage

# Tests in watch mode
npm run test -- --watch

🏗️ Development

Available scripts

# Build TypeScript
npm run build

# Development mode
npm run dev

# Watch mode
npm run watch

# MCP Inspector
npm run inspector

# Tests
npm test

# Publish a new version
npm run release:patch
npm run release:minor
npm run release:major

Project structure

svn-mcp/
├── package.json
├── tsconfig.json
├── jest.config.js
├── index.ts
├── common/
│   ├── types.ts      # TypeScript types
│   ├── utils.ts      # SVN utilities
│   └── version.ts    # Package version
├── tools/
│   └── svn-service.ts # Main SVN service
├── tests/
│   └── integration.test.ts # Integration tests
└── README.md

📊 Development Status

See the SVN_MCP_IMPLEMENTATION.md file for the full implementation checklist.

Current progress: Stage 1 complete (Basic Operations) ✅

Next stages:

  • Branch management (branching)
  • Advanced operations (merge, switch)
  • Analysis tools
  • Batch operations

🐛 Troubleshooting

SVN not found

Error: SVN is not available in the system PATH

Solution: Install SVN and make sure it is on the system PATH.

Not a working copy

Error: Failed to get SVN info: svn: warning: W155007: '.' is not a working copy

Solution: Navigate to a directory that is an SVN working copy or run checkout first.

Authentication issues

Error: svn: E170001: Authentication failed

Solution: Set the SVN_USERNAME and SVN_PASSWORD environment variables.

Timeouts on long operations

Error: Command timeout after 30000ms

Solution: Increase the value of SVN_TIMEOUT.

📄 License

MIT License - see LICENSE for more details.

🤝 Contributing

  1. Fork the project
  2. Create a feature branch (git checkout -b feature/new-feature)
  3. Commit your changes (git commit -am 'Add new feature')
  4. Push to the branch (git push origin feature/new-feature)
  5. Open a Pull Request

📞 Support