CPP MCP-SERVER について
CPP MCP-SERVER は、プラグインを動的に読み込むモジュール構成を持つ C++ 実装の MCP サーバーです。C++ で MCP サーバーを構築または拡張したい開発者向けです。
主な機能
- 01ディレクトリからのプラグイン動的読み込み
- 02Stdio、SSE、HttpStream のトランスポート対応
- 03Prompts と Tools の機能対応
- 04名前・プラグイン・ログ先のコマンドライン指定
活用シーン
- 01C++ プロジェクトへの MCP サーバーの組み込み
- 02プラグインによるカスタムツールの追加
- 03Claude Code や Claude Desktop からのローカルサービスへの接続
MCP 対応
本サーバーは MCP サーバーとして、Resources、Prompts、Tools を MCP クライアントに提供します。リソーステンプレートは未対応です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
CPP MCP-SERVER
プラグイン可能なモジュールアーキテクチャを備えた、Model Context Protocol サーバーの C++ 実装です。
| サーバー | リソース | プロンプト | ツール | サンプリング | 通知 | ルート | エリシテーション |
|---|---|---|---|---|---|---|---|
| MCP-SERVER | ✅* | ✅ | ✅ | ❌ | ✅** | ❌ | ❌ |
* リソーステンプレートはまだサポートされていません
** 一部サポートされています
Claude Code の設定
claude mcp add --transport http cpp_mcp_server http://localhost:8080/mcp
セットアップログディレクトリ
デフォルトでは、MCP サーバーは ./logs ディレクトリにログを記録します(事前に作成しておく必要があります)。
-l コマンドラインオプションを使用すると、任意のディレクトリにログをリダイレクトできます。
サポートされているトランスポート
| トランスポート | サポート状況 | 認証 |
|---|---|---|
| Stdio | ✅ | ❌ |
| SSE | ✅ | ❌ |
| HttpStream | ✅ | ❌ |
サポートされているプラットフォーム
| プラットフォーム | サポート状況 | コンパイラー |
|---|---|---|
| Windows | ✅ | MINGW64 |
| Ubuntu Linux | ✅ | GCC |
| Mac OS | ✅ | GCC |
コンパイル方法
ローカルマシンにリポジトリをクローンします。
git clone https://github.com/peppemas/mcp_server.git
コンパイルします。
cd mcp_server
mkdir build
cd build
cmake ..
make
MCP サーバーのアーキテクチャ
MCP サーバーは Model Context Protocol を実装するように設計されており、モジュール式で拡張可能なアーキテクチャを実現します。以下に、プロジェクトのアーキテクチャの概要を示します。
コアコンポーネント
-
サーバーコア:
サーバーの中心となるコンポーネントです。クライアントとの通信、ロギング、プラグイン管理など、主要な機能すべての初期化と管理を担います。 -
コマンドラインインターフェース:
設定用のコマンドライン引数を提供します。-n:クライアントに公開するサーバー名を指定します。(任意)-p:プラグインを検索するプラグインディレクトリのパスを設定します(サブディレクトリも検索します)。-l:ログディレクトリのパスを設定します。
-
プラグインシステム:
サーバーは、指定されたディレクトリ(-p引数)からプラグインを動的に読み込むように設計されています。各プラグインはサーバーの機能を拡張するため、コアコードベースを変更せずに将来的な拡張が可能です。 -
ロギングモジュール:
ロギングは一元管理され、ログは-lパラメーターで指定したディレクトリに保存されます。これにより、サーバーの動作のデバッグと監視が容易になります。
実行フロー
-
初期化:
- サーバーはコマンドライン引数を解析し、サーバー名、プラグインディレクトリ、ログディレクトリを設定して起動します。
- ログが初期化され、プラグインシステムが準備されます。
-
プラグインの読み込み:
- 指定されたディレクトリ内のプラグインが検出され、動的に読み込まれます。
- 各プラグインが初期化され、サーバーに登録されます。
-
クライアントリクエストの処理:
- サーバーはクライアントからの接続を待ち受けます。
- 登録されたプラグインを利用して拡張機能を提供する、実装済みの Model Context Protocol に基づいてリクエストを処理します。
-
エラー処理:
- 起動中または実行中に発生したエラーはログディレクトリに記録され、サーバーの動作への影響を最小限に抑えます。
プラグインによる拡張
MCP サーバーの拡張性はプラグインシステムによって実現されており、開発者はコアロジックを変更せずにサーバーの機能を拡張できます。プラグインは動的に読み込まれるライブラリであり、オペレーティングシステムに応じてさまざまな形式で実装できます。
- Windows の場合:プラグインは
.dllファイルとしてコンパイルされます。 - Linux/MacOS の場合:プラグインは
.soまたは.dylib(共有オブジェクト)ファイルとしてコンパイルされます。
プラグインの例
-
天気プラグイン:
天気プラグインを使うと、サーバーに天気関連の機能を提供できます。このプラグインは、現在の気温や予報などの気象情報を含む、天気データに関するリクエストを処理できます。プラグインはサードパーティの API からデータを取得し、最新かつ正確な情報を提供します。外部データとの連携が必要なサービスを提供するために、MCP サーバーを拡張する方法を示しています。 -
スリーププラグイン:
スリーププラグインは、サーバーの処理パイプラインに遅延、つまり「スリープ」機能を導入します。これは、応答の遅延をシミュレートしたり、プロトコル内の時間指定操作を管理したりする場合に便利です。開発者はこのプラグインを活用して、サーバーのコア動作を変更せずに、時間に基づく操作に関連する機能を構築およびテストできます。カスタムプラグインで特定のニッチなユースケースに対応できることを示しています。 -
コードレビュープラグイン:
コードレビュープラグインは、開発者によるコードレビューの自動化を支援するよう設計されています。このプラグインはサーバーに送信されたコードを分析し、潜在的なバグやコードの不吉な臭い、最適化の機会など、有用なフィードバックを提供します。標準的なコーディング慣行に従い、特定のスタイルガイド(例:Google C++ Style Guide)を適用するよう設定できます。さらに、複数の言語の検査にも対応しており、さまざまなプログラミング言語との互換性を確保します。バージョン管理システムと連携して、評価対象のコード変更を直接取得できるため、共同開発のワークフローに役立つツールです。
Claude Desktop の設定
{
"mcpServers": {
"mcp-server": {
"command": "C:\\mcp-server\\mcp_server.exe",
"args": [
"-n","developer-server",
"-l","C:\\mcp-server\\logs",
"-p","C:\\mcp-server\\plugins"
],
"env": {
"CUSTOM_API_KEY_1": "your-api-key-here",
"CUSTOM_API_KEY_2": "your-api-key-here",
"SAVE_DIR": "/path/to/save/directory"
}
}
}
}
注:「env」ブロックでは、プラグインにパラメーターを渡せます e
TODO リスト
- ログレベルの実装を確認する
- json schema validator を追加する (https://github.com/pboettch/json-schema-validator)
- さまざまな mcp-client でテストする(実際にテストしたのは Claude Desktop のみ)
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。