はじめに
MCP (Model Context Protocol)は、AIアシスタントと外部ツールを接続するためのオープンプロトコルです。このプロトコルはAIがエージェントとして振る舞う上で中心的な役割を果たすことが期待されています。しかし、従来の標準入出力型のMCPサーバーには大きな課題がありました。それは、エンジニア以外のユーザーにとって技術的なハードルが非常に高いということです。
私は以前、mcp-server-redmineという標準入出力型のMCPサーバーを開発しました。このような従来型のMCPサーバーは、NPMやUVといったパッケージマネージャーの環境構築が必要で、コマンドラインに親しみのないユーザーには敷居の高いものでした。
このような経験から、より多くの人にMCPの恩恵を届けたいという想いが生まれ、GUIを持つデスクトップアプリケーションとして完全に作り直すことを決意しました。
🎨 GUIアプリとして生まれ変わったRedmine MCP Server
従来型のMCPサーバーを使用するには、まずNPMやUVといったパッケージマネージャーをインストールし、コマンドラインで各種操作を行い、JSON設定ファイルを手動で編集する必要がありました。エラーが発生してもログファイルを開かなければ状況が把握できず、結果として技術的な知識を持つエンジニアしか使用できないツールになっていました。
今回開発したGUIアプリケーションは、これらの課題を部分的に解決できていると思います。アプリケーションは完全にスタンドアロンで動作するため、追加の環境構築は一切必要ありません。Redmineの接続設定は直感的なフォームに入力するだけで完了し、サーバーの起動もボタンをクリックするだけです。接続状態やエラーメッセージは画面上にリアルタイムで表示され、Claude DesktopやClaude Codeへの接続に必要なコマンドも自動生成されてワンクリックでコピーできます。
さらに、従来のMCPサーバーにはない独自の機能も実装しました。まず、ツール選択機能により、ユーザーは必要な機能だけを有効化できるようになりました。これはセキュリティの観点から非常に重要で、例えば参照のみ必要なユーザーは更新や削除の機能を無効化することで、エージェントによる意図しない操作を防ぐことができます。
また、SQLiteデータベースを内蔵することで、Redmine APIが提供していない高度な検索機能も実現しました。全文検索により課題の内容から目的の情報を探し出すことができ、複数の条件を組み合わせた複雑なフィルタリングも可能です。さらに、一度取得したデータはローカルに保存されるため、ネットワークに接続していない環境でも過去のデータを参照することができます。
この再実装により、プロジェクトマネージャーがAIに進捗状況を聞いたり、営業チームが顧客案件の課題を自動集計したり、デザイナーがタスクの優先度を管理したりと、技術職以外のメンバーもAIエージェントを活用してRedmineを操作できるようになることを目指しています。
🎯 技術スタックと実装のポイント
このアプリケーションの開発には、Tauri v2をフレームワークとして採用しました。Tauriを選んだ理由は、Rustの安全性とパフォーマンスを活かしつつ、Electronと比較して10分の1程度のメモリ使用量で動作する軽量なデスクトップアプリケーションを作成できるからです。
バックエンドはRustで実装し、MCP Streamable HTTPサーバーにはAxumフレームワークを使用しています。Axumは非同期処理に優れており、複数のクライアントからの同時接続にも効率的に対応できます。Redmine APIとの通信にはReqwestクライアントを使用し、10秒のタイムアウトと5秒の接続タイムアウトを設定することで、ネットワークの問題による無限待機を防いでいます。
フロントエンドはReact 19とTypeScriptで構築し、スタイリングにはTailwind CSS v4を採用しました。これにより、モダンで直感的なユーザーインターフェースを効率的に開発することができました。特に、接続状態の視覚的なフィードバックや、ツール選択画面のインタラクティブな動作は、ユーザビリティの向上に大きく貢献しています。
データベースにはSQLiteを組み込み、Redmineから取得したデータをローカルにキャッシュする仕組みを実装しました。一度取得したデータは高速に検索でき、ネットワークが不安定な環境でも過去のデータを参照できる副次的な恩恵もあります。Redmine標準のAPIでは検索機能が提供されていないためMCPを使う積極的な理由になると思います。
また、国内ユーザーを意識し、日本語と英語の切り替えが可能です。
🏗️ アーキテクチャ概要
🚀 パフォーマンスとセキュリティへの取り組み
パフォーマンスの最適化は、ユーザー体験の向上に直結する重要な要素です。このアプリケーションでは、Tokioランタイムを活用して全ての重い処理を非同期化し、複数のRedmine APIコールを並列実行できるようにしています。
キャッシュ戦略も重要な最適化ポイントです。SQLiteデータベースに頻繁にアクセスするデータを保存し、Full-text searchインデックスを構築することで、数千件の課題データからでも瞬時に検索結果を返すことができます。また、大量データの取得時にはページネーションを活用し、トークン使用量を抑えながら効率的にデータを処理しています。
セキュリティ面では、API Keyの管理に配慮しています。設定ファイルはユーザーのホームディレクトリ(~/.redmine-mcp/)に保存され、他のユーザーからアクセスできない領域に配置されます。また、エラーメッセージにAPIキーが含まれないよう注意しています。ただし、現時点では暗号化は実装されておらず、今後の改善点として認識しています。
MCPサーバーは127.0.0.1(localhost)でのみリッスンするように設定し、外部からのアクセスをブロックしています。
さらに重要なのは、ツール権限管理機能です。デフォルトでは、Issueの作成や更新といった危険な操作は無効化されており、ユーザーが明示的に有効化した機能のみが使用可能になります。これは最小権限の原則に基づいた設計で、意図しない操作や誤操作によるデータの破損を防ぐことができます。
まとめ
MCP (Model Context Protocol) は、AIエージェントの可能性を大きく広げる重要なプロトコルです。その恩恵を技術者以外にも広めたいと考えています。今回のRedmine-MCPのGUIアプリケーションへの再実装は、MCPをより多くの人に届けるための第一歩です。
TauriとRustの組み合わせにより、高性能かつセキュアで、しかも軽量なデスクトップアプリケーションを実現できました。Rustのメモリ安全性とスレッド安全性は、エンタープライズ環境での利用に必要な堅牢性を提供し、TauriはElectronと比較して10分の1のメモリ使用量という驚異的な軽量性を実現しています。
MCPをもっと多くの人が身近に感じ、その恩恵に預かれるようなアプリを今後も開発していきたいと思います。
📚 参考リンク
この記事が役に立ったら、ぜひGitHubでスターをお願いします!質問やフィードバックもお待ちしています。