ページの作成:「== 概要 == Model Context Protocol (MCP) は、Large Language Model (LLM) とツール、データソースを統一的に接続するための標準プロトコルである。<br> MCPサーバは、AIアシスタントがアクセス可能なツール、リソース、プロンプトを提供するインターフェースとして機能する。<br> <br> MCPサーバの実装において、Linuxディストリビューションに必要なプログラム言語とS…」 |
|||
| (同じ利用者による、間の5版が非表示) | |||
| 89行目: | 89行目: | ||
== 開発言語とフレームワークの選択 == | == 開発言語とフレームワークの選択 == | ||
==== Node.js + MCP SDKを使用する場合 ==== | ==== Node.js + MCP SDKを使用する場合 ==== | ||
まず、Node.jsをインストールする。<br> | |||
RHEL / SUSEの場合、Node Version Manager (nvm) を使用することを推奨する。<br> | |||
# nvmのインストール (全ディストリビューション共通) | # nvmのインストール (全ディストリビューション共通) | ||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v<バージョン 例 : 0.43.0>/install.sh | bash | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v<バージョン 例 : 0.43.0>/install.sh | bash | ||
# Node.js LTS版のインストール | # Node.js LTS版のインストール | ||
| 99行目: | 98行目: | ||
nvm use --lts | nvm use --lts | ||
<br> | <br> | ||
Banana Pi F3 (RISC-V) | Banana Pi F3 (RISC-V) の場合は、パッケージ管理システムからインストールする。<br> | ||
# Banana Pi F3 (Armbian) | # Banana Pi F3 (Armbian) | ||
sudo apt install nodejs npm | sudo apt install nodejs npm | ||
| 107行目: | 106行目: | ||
npm --version | npm --version | ||
<br> | <br> | ||
もし、公式バイナリが存在しない場合は、ソースコードからビルドを行う。<br> | |||
# ソースからのビルド (RISC-V環境で必要な場合) | # ソースからのビルド (RISC-V環境で必要な場合) | ||
git clone https://github.com/nodejs/node.git | git clone https://github.com/nodejs/node.git | ||
| 120行目: | 119行目: | ||
make install | make install | ||
<br> | <br> | ||
次に、プロジェクトディレクトリを作成して、MCPサーバのプロジェクトを初期化する。<br> | |||
mkdir | mkdir <プロジェクトディレクトリ> | ||
cd | cd <プロジェクトディレクトリ> | ||
npm init -y | npm init -y | ||
| 130行目: | 129行目: | ||
<br> | <br> | ||
package.jsonファイルを編集して、ES Modulesを有効化する。<br> | package.jsonファイルを編集して、ES Modulesを有効化する。<br> | ||
* typeキー | |||
*: typeキーを省略する場合は、commonjs (CommonJS形式) となる。 | |||
** moduleを指定する場合 | |||
*: ES Modules形式 (import/export構文) を使用する場合に設定する。 | |||
**: この場合、.jsファイルがESM形式として扱われ、importやexport文を使用できる。 | |||
** commonjsを指定する場合 | |||
**: CommonJS形式 (require() / module.exports構文) を使用する場合に設定する。 | |||
**: Node.jsの従来の方式である。 | |||
<br> | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
"name": "mcp-server", | "name": "<任意の名前 例 : mcp-server>", | ||
"version": "1.0.0", | "version": "<任意のバージョン 例 : 1.0.0>", | ||
"type": "module", | "type": "module", | ||
"scripts": { | "scripts": { | ||
| 146行目: | 154行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== Python + FastMCPを使用する場合 ==== | ==== Python + FastMCPを使用する場合 ==== | ||
Pythonと仮想環境をインストールする。<br> | Pythonと仮想環境をインストールする。<br> | ||
| 158行目: | 167行目: | ||
<br> | <br> | ||
プロジェクトディレクトリを作成して、Python仮想環境を設定する。<br> | プロジェクトディレクトリを作成して、Python仮想環境を設定する。<br> | ||
mkdir -p | mkdir -p <プロジェクトディレクトリ> | ||
cd | cd <プロジェクトディレクトリ> | ||
python3 -m venv venv | python3 -m venv venv | ||
<br> | <br> | ||
Pythonの仮想環境をアクティベートする。<br> | Pythonの仮想環境をアクティベートする。<br> | ||
# Bash / Zshの場合 | |||
source venv/bin/activate | source venv/bin/activate | ||
# Fishの場合 | |||
source venv/bin/activate.fish | |||
<br> | <br> | ||
必要なPythonライブラリをインストールする。<br> | 必要なPythonライブラリをインストールする。<br> | ||
| 170行目: | 183行目: | ||
<br> | <br> | ||
<u>※注意</u><br> | <u>※注意</u><br> | ||
<u>venv/bin/ | <u>venv/bin/activateスクリプトの設定を~/.profileファイル等に記述することは非推奨である。</u><br> | ||
<br> | |||
<u>activateスクリプトは相対パスで動作するため、フルパスで指定する必要がある。</u><br> | <u>activateスクリプトは相対パスで動作するため、フルパスで指定する必要がある。</u><br> | ||
<u>これは、常に特定の仮想環境がアクティブになってしまうため、他のプロジェクトで異なる仮想環境を使用する場合に問題が発生するためである。</u><br> | |||
<br> | <br> | ||
<u>また、シェルのセッションごとに自動的にアクティベートすると、どの環境で作業しているのか理解し難い。</u> | <u>また、シェルのセッションごとに自動的にアクティベートすると、どの環境で作業しているのか理解し難い。</u> | ||
<br> | <br> | ||
代替案として、以下に示すような方法が推奨される。<br> | 代替案として、以下に示すような方法が推奨される。<br> | ||
これは、必要な時のみ仮想環境をアクティベートすることが可能なため、柔軟な運用が可能になる。<br> | |||
<br> | <br> | ||
特に、複数のプロジェクトを扱う場合は、"方法 2" や "方法 3" が便利である。<br> | |||
<br> | <br> | ||
* エイリアスを設定する方法 | |||
*: ~/.profileファイル等に記述する。 | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
# 方法 1 | # 方法 1 | ||
alias activate-mcpserver="source <activateスクリプトのパス>" | alias activate-mcpserver="source <activateスクリプトのパス>" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
* プロジェクトディレクトリに入った時のみ自動的にアクティベートする方法 | |||
*: ~/.profileファイル または ~/.zprofileファイル等に記述する。 | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
# 方法 2 | # 方法 2 (a) : Bash / Zsh | ||
function | function check_venv() | ||
{ | { | ||
if [ -d "venv" ]; then | if [ -d "venv" ]; then | ||
if [ -z "$VIRTUAL_ENV" ]; then | if [ -z "$VIRTUAL_ENV" ]; then | ||
source venv/bin/activate | |||
elif [ "$VIRTUAL_ENV" != "$PWD/venv" ]; then | |||
deactivate | |||
source venv/bin/activate | source venv/bin/activate | ||
fi | fi | ||
elif [ -n "$VIRTUAL_ENV" ]; then | |||
deactivate | |||
fi | fi | ||
} | } | ||
function cd() | |||
{ | |||
builtin cd "$@" | |||
check_venv | |||
} | |||
# プロンプト表示前に毎回チェック | |||
PROMPT_COMMAND="check_venv${PROMPT_COMMAND:+;$PROMPT_COMMAND}" | |||
# シェル起動時にもチェック | |||
check_venv | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
* プロジェクトディレクトリに入った時のみ自動的にアクティベートする方法 | |||
*: Fishを使用している場合は、以下に示す2つのファイルに設定を追加する。 | |||
*: ~/.config/fish/config.fish | |||
*: ~/.config/fish/functions/check_venv.fish | |||
<syntaxhighlight lang="fish"> | |||
# 方法 2 (b) : Fish | |||
# ~/.config/fish/config.fishファイル | |||
check_venv | |||
# ~/.config/fish/functions/check_venv.fishファイル | |||
function check_venv --on-variable PWD --on-event fish_prompt | |||
if test -d "venv" | |||
if test -z "$VIRTUAL_ENV" | |||
source venv/bin/activate.fish | |||
else if test "$VIRTUAL_ENV" != "$PWD/venv" | |||
deactivate | |||
source venv/bin/activate.fish | |||
end | |||
else if test -n "$VIRTUAL_ENV" | |||
deactivate | |||
end | |||
end | |||
function cd | |||
builtin cd $argv | |||
end | |||
</syntaxhighlight> | |||
<br> | |||
* direnvのような専用ツールを使用する方法 | |||
*: プロジェクトディレクトリの.envrcファイルに記述する。 | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
# 方法 3 | # 方法 3 | ||
layout python3 # Pythonの仮想環境を自動的に管理 | layout python3 # Pythonの仮想環境を自動的に管理 | ||
| 215行目: | 273行目: | ||
<br><br> | <br><br> | ||
== | == MCPサーバの構築 == | ||
==== Node.js + STDIOトランスポートを使用する場合 ==== | ==== Node.js + STDIOトランスポートを使用する場合 ==== | ||
STDIOトランスポートは、ローカル環境でのプロセス間通信に使用される。<br> | STDIOトランスポートは、ローカル環境でのプロセス間通信に使用される。<br> | ||
| 477行目: | 535行目: | ||
== クライアント接続設定 == | == クライアント接続設定 == | ||
MCPサーバの設定ファイルの保存場所は、以下の通りである。<br> | |||
<br> | <br> | ||
* MacOS / Linuxの場合 | * MacOS / Linuxの場合 | ||
| 485行目: | 542行目: | ||
* Windowsの場合 | * Windowsの場合 | ||
*: %APPDATA%\Claude\claude_desktop_config.json | *: %APPDATA%\Claude\claude_desktop_config.json | ||
<br> | |||
==== Claude Desktopからの接続 (STDIO) ==== | |||
Claude Desktopの設定ファイルを編集する。<br> | |||
<br> | <br> | ||
設定ファイルの内容を編集する。<br> | 設定ファイルの内容を編集する。<br> | ||
| 542行目: | 602行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
また、以下に示すように、公開鍵認証を設定しておくことが推奨される。<br> | |||
# まず、ローカルPC上でRSA形式のSSH鍵ペアを生成する。<br>現在推奨されるRSA鍵の長さは4096ビットである。 | |||
#: <pre>ssh-keygen -t rsa -b 4096 -C "mcp-client"</pre> | |||
# 次に、公開鍵をリモートPCに転送する。<br><code>ssh-copy-id</code> コマンドを実行することにより、簡単に設定することができる。 | |||
#: このコマンドは、リモートPCのパスワード認証を使用して接続し、公開鍵を自動的に ~/.ssh/authorized_keys ファイルに追加するものである。 | |||
#: <pre>ssh-copy-id -i ~/.ssh/id_rsa_mcp.pub <ユーザ名>@<IPアドレス または ホスト名></pre> | |||
<br> | |||
環境によっては、<code>ssh-copy-id</code> コマンドが利用できない場合がある。<br> | |||
その場合は、以下に示すコマンドで手動で公開鍵を転送することができる。<br> | |||
cat ~/.ssh/id_rsa_mcp.pub | ssh <ユーザ名>@<IPアドレス または ホスト名> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" | |||
<br> | |||
更に、リモートPC側で権限を設定する必要がある。<br> | |||
ssh <ユーザ名>@<IPアドレス または ホスト名> "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" | |||
<br><br> | <br><br> | ||