0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MCPでSVNのリリースノート生成を自動化してみた

0
Posted at

MCPでSVNのリリースノート生成を自動化してみた

〜Clineと連携するMCPサーバーの設計と実装〜

はじめに

リリースノートを書くのは、地味に面倒な作業です。

  • SVNのコミットログを確認する
  • 不要なコミットを除外する
  • 変更内容を要約する
  • Markdown形式で整形する

これを毎回人手でやるのは非効率です。

そこで今回は、
MCP (Model Context Protocol) を使って、SVNのリリースノートを自動生成するサーバー
を実装してみました。
このMCPサーバーでは、SVNのログを取得し、それをユーザーが事前に定義したテンプレートフォーマットで要約します。
ユーザーが事前に定義したフォーマットを使える点は、それなりに便利かなと考えています。


MCPとは何か(簡単に)

MCPは、LLMが外部ツールやデータを安全に利用するためのプロトコルです。

従来のAIツールとの違いは、
「LLMが直接コマンドを実行する」のではなく、

  • Tool(操作)
  • Resource(データ)
  • Prompt(思考テンプレート)

を明確に分離できる点にあります。

今回の実装では、
「SVNログ取得 → LLM要約 → リリースノート生成」
という流れをMCPで構築しました。


システム構成

全体フロー

Cline (MCP Host)
    ↓
MCP Server (Python)
    ↓
SVN repository
    ↓
LLM (Cline or External API)
    ↓
Release Note (Markdown)

実装したMCP Tool一覧

今回実装したToolは以下の4つです。

1. get_svn_logs

指定したRevision範囲のSVNログを取得します。

@mcp.tool()
async def get_svn_logs(repository_path: str, revision_range: str) -> str:

特徴:

  • SVNがインストールされているかチェック
  • repository / working copy の両方に対応
  • svn log -r を安全に実行

2. summarize_logs_with_llm

SVNログをLLMで要約します。

@mcp.tool()
async def summarize_logs_with_llm(
    svn_logs: str, llm_provider: str = "", use_host_llm: bool = True
) -> str:

特徴:

  • デフォルトは「Cline側のLLM」を利用(MCP Prompt経由)
  • Claude / Gemini APIにも対応
  • Provider自動判定機能あり

3. generate_release_note

SVNログ取得 → LLM要約 → Markdown整形 を一括実行します。

@mcp.tool()
async def generate_release_note(
    repository_path: str,
    revision_range: str,
    output_file: str = "",
    append_mode: bool = False,
) -> str:

出力例:

# Release Note
Generated: 2026-02-01 18:30:00
Revision Range: 1200:1250

## New Features
- Added user authentication (r1210)

## Bug Fixes
- Fixed memory leak in parser (r1223)

---

4. append_to_release_note

既存のリリースノートに追記します。

@mcp.tool()
async def append_to_release_note(file_path: str, content: str) -> str:

MCP Promptの設計

今回の実装で特に重要なのはPromptです。

例えば、日本語のリリースノート用テンプレート:

@mcp.prompt()
def summarize_svn_logs_japanese_2_prompt(svn_logs: str) -> str:

テンプレート例:

  • 変更内容をカテゴリ分け
  • 不要なコミットは除外
  • 1行要約
  • Markdown形式

👉 MCPの強みは
「PromptをToolとは独立して管理できる」点にあります。
特に、SVNのログをとってくるだけなら汎用的なSVNのMCPを使えばいいのですが、リリースノートの形式は業界や会社、またはチームによって全く異なります。そのため、汎用的なSVNのMCPだけを使った場合、毎回「このテンプレートを使用して」とMCP Hostに指示を出す必要があります。
この手間を省きたいこと(とローカルで動かしたいこと)が、このMCPサーバーを開発した大きな理由です。


実際の使い方(Cline側)

Clineで以下のように指示するだけです。

このBranchのr1200からr1250までの変更を
箇条書きでリリースノートにまとめてください。

するとClineが:

  1. get_svn_logs を呼び出す
  2. MCP Promptを利用して要約
  3. Release Noteを生成

という流れを自動実行します。


このMCPサーバーの価値

1. リリースノート作成の工数削減

  • 手作業 → 自動化
  • 属人化 → 再現可能

2. MCPを勉強してみたかった

MCPの例はまだ少なく、

  • DB検索
  • ファイル操作
  • API呼び出し

が多いですが、

これからもっと多くの用途のMCPサーバーが登場すると思います。
また、ローカルで動くMCPサーバーは、社内で開発をする上ではそれなりに利便性が高い気がしています。


3. SVN環境でもLLM活用が可能になる

実は、SVNを使っている現場はまだ多いです。

  • 組み込み
  • レガシー企業
  • 社内システム

今後やりたいこと

構想中の拡張機能:

  • GitHub対応(PRベースの要約)
  • コミット分類の精度向上(embedding)
  • 差分コード解析(diffベース要約)
  • Jira / Redmine連携
  • リリースノートの自動カテゴリ分類
  • MCP Resourceとして履歴管理

ソースコード

GitHubに公開しています。


まとめ

MCPを使うと、

  • LLMを「便利ツール」から「開発フローの一部」にできる
  • 既存の開発プロセスに自然に組み込める

今回のSVNリリースノート自動生成は、
MCPの勉強をしつつ、それなりに使えるものができた気がします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?