ページの作成:「== 概要 == 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>
まず、Node.jsをインストールする。<br>
RHELおよびSUSEの場合、Node Version Manager (nvm) を使用することが推奨される。<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
source ~/.bashrc
   
   
  # Node.js LTS版のインストール
  # Node.js LTS版のインストール
99行目: 98行目:
  nvm use --lts
  nvm use --lts
<br>
<br>
Banana Pi F3 (RISC-V) の場合、パッケージ管理システムからインストールする。<br>
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>
もし、RISC-V向けの公式バイナリが存在しない場合は、ソースコードからビルドを行う。<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>
次に、プロジェクトディレクトリを作成して、MCPサーバのプロジェクトを初期化する。<br>
  mkdir ~/mcp-server
  mkdir <プロジェクトディレクトリ>
  cd ~/mcp-server
  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 ~/mcp-server-python
  mkdir -p <プロジェクトディレクトリ>
  cd ~/mcp-server-python
  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/activateスクリプトを~/.profileファイル等に設定することは非推奨である。</u><br>
<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>
<u>また、シェルのセッションごとに自動的にアクティベートすると、どの環境で作業しているのか理解し難い。</u>
<br>
<br>
代替案として、以下に示すような方法が推奨される。<br>
代替案として、以下に示すような方法が推奨される。<br>
以下に示すような方法ならば、必要な時のみ仮想環境をアクティベートすることが可能なため、柔軟な運用が可能になる。<br>
これは、必要な時のみ仮想環境をアクティベートすることが可能なため、柔軟な運用が可能になる。<br>
<br>
<br>
特に、複数のプロジェクトを扱う場合は、方法 2 や 方法 3 が便利である。<br>
特に、複数のプロジェクトを扱う場合は、"方法 2" "方法 3" が便利である。<br>
<br>
<br>
* エイリアスを設定する方法
*: ~/.profileファイル等に記述する。
  <syntaxhighlight lang="sh">
  <syntaxhighlight lang="sh">
  # 方法 1
  # 方法 1
# エイリアスを設定する方法 (~/.profileファイル等に記述)
   
   
  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
# プロジェクトディレクトリに入った時のみ自動的にアクティベートする方法 (~/.profileファイル等に記述)
   
   
  function cd()
  function check_venv()
  {
  {
    builtin cd "$@"
    # プロジェクトディレクトリに入った時のみ仮想環境をアクティベート
     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
# direnvのような専用ツールを使用する方法
# プロジェクトディレクトリの.envrcファイルに記述
   
   
  layout python3  # Pythonの仮想環境を自動的に管理
  layout python3  # Pythonの仮想環境を自動的に管理
215行目: 273行目:
<br><br>
<br><br>


== MCPサーバの基本的な実装 ==
== MCPサーバの構築 ==
==== Node.js + STDIOトランスポートを使用する場合 ====
==== Node.js + STDIOトランスポートを使用する場合 ====
STDIOトランスポートは、ローカル環境でのプロセス間通信に使用される。<br>
STDIOトランスポートは、ローカル環境でのプロセス間通信に使用される。<br>
477行目: 535行目:


== クライアント接続設定 ==
== クライアント接続設定 ==
==== Claude Desktopからの接続 (STDIO) ====
MCPサーバの設定ファイルの保存場所は、以下の通りである。<br>
Claude Desktopの設定ファイルを編集する。<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>
SSH鍵認証を設定しておくことが推奨される。<br>
また、以下に示すように、公開鍵認証を設定しておくことが推奨される。<br>
ssh-keygen -t ed25519 -C "mcp-client"
# まず、ローカルPC上でRSA形式のSSH鍵ペアを生成する。<br>現在推奨されるRSA鍵の長さは4096ビットである。
ssh-copy-id username@remote-server-ip
#: <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>