はじめに
近年、ローカル環境で動作するLLM(大規模言語モデル)の人気が高まっています。その中でもOllamaは、Llama、Mistral、Gemmaなどの最新モデルを手軽にローカルで実行できるツールとして注目されています。一方、Model Context Protocol(MCP)は、AIモデルが外部ツールやデータと標準化された方法で対話するためのオープンプロトコルです。
この記事では、OllamaとMCPサーバーを組み合わせて、複数のAIモデルを連携させた強力なシステムを構築する方法を詳しく解説します。特に「マルチモデルアドバイザー」と呼ばれる、複数のモデルの視点を一度に得られるMCPサーバーの実装に焦点を当てます。
本記事で解説するマルチモデルアドバイザーMCPサーバーのソースコードは、こちらのGitHubリポジトリで公開されています:https://github.com/YuChenSSR/multi-ai-advisor-mcp
1. 前提条件
まずは必要な環境を整えましょう:
- Node.js (バージョン16以上)
- Ollama(最新版)
- Git(リポジトリのクローン用)
Node.jsのインストール
# バージョン確認(すでにインストールされている場合)
node -v
# インストールされていない場合は公式サイトからダウンロード
# https://nodejs.org/ja/download/
Ollamaのインストール
# macOSの場合
brew install ollama
# Linuxの場合
curl -fsSL https://ollama.com/install.sh | sh
# Windowsの場合は公式サイトからインストーラーをダウンロード
# https://ollama.com/download/windows
2. Ollamaの準備
Ollamaサーバーの起動
まずOllamaサーバーを起動します:
ollama serve
新しいターミナルを開き、以下のコマンドで必要なモデルをダウンロードします:
# 小~中規模のモデルを推奨(メモリ消費が少ない)
ollama pull gemma:2b
ollama pull llama3:1b
ollama pull mistral:7b-v0.3
利用可能なモデルを確認するには:
ollama list
3. MCPサーバーのインストール
マルチモデルアドバイザーMCPサーバーをインストールする方法は2つあります。
方法1:Smitheryを使用した自動インストール(推奨)
Smitheryは、MCPサーバーを簡単にインストールするためのツールです:
# Claude for Desktopユーザー向け
npx -y @smithery/cli install @YuChenSSR/multi-ai-advisor-mcp --client claude
# Anthropicのオンラインモデルユーザー向け
npx -y @smithery/cli install @YuChenSSR/multi-ai-advisor-mcp
方法2:手動インストール
リポジトリをクローンして手動でセットアップします:
# リポジトリのクローン
git clone https://github.com/YuChenSSR/multi-ai-advisor-mcp.git
cd multi-ai-advisor-mcp
# 依存関係のインストール
npm install
# プロジェクトのビルド
npm run build
4. MCPサーバーの設定
環境変数の設定
プロジェクトのルートディレクトリに .env
ファイルを作成し、以下の内容を追加します:
# サーバー設定
SERVER_NAME=multi-model-advisor
SERVER_VERSION=1.0.0
DEBUG=true
# Ollama設定
OLLAMA_API_URL=http://localhost:11434
DEFAULT_MODELS=gemma:2b,llama3:1b,mistral:7b-v0.3
# 各モデルのシステムプロンプト(日本語)
GEMMA_SYSTEM_PROMPT=あなたは創造的で革新的なAIアシスタントです。常識にとらわれず、斬新な視点を提供してください。
LLAMA_SYSTEM_PROMPT=あなたは思いやりがあり共感力の高いAIアシスタントです。人間の幸福に焦点を当て、バランスの取れたアドバイスを提供します。
MISTRAL_SYSTEM_PROMPT=あなたは論理的で分析的なAIアシスタントです。ステップバイステップで考え、推論プロセスを明確に説明してください。
各モデルに異なる「役割」を設定することで、多様な視点を得ることができます。
5. MCPサーバーの起動
ターミナルからの起動
# ビルド済みのサーバーを起動
node build/index.js
サーバーが正常に起動すると、以下のようなメッセージが表示されます:
Multi-Model Advisor MCP Server running on stdio
Using Ollama API URL: http://localhost:11434
Default models: gemma:2b,llama3:1b,mistral:7b-v0.3
Debug mode enabled
6. MCP対応クライアントとの連携
Claude for Desktopとの連携
Claude for Desktop(Anthropicのデスクトップアプリ)を使用している場合:
-
Claude for Desktopの設定ファイルを探します:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
ファイルを編集してMCPサーバーを追加します:
{
"mcpServers": {
"multi-model-advisor": {
"command": "node",
"args": ["/絶対パス/multi-ai-advisor-mcp/build/index.js"]
}
}
}
/絶対パス/
を実際のプロジェクトディレクトリへのパスに置き換えてください。例:/Users/username/projects/multi-ai-advisor-mcp/build/index.js
- Claude for Desktopを再起動します。
VSCodeとの連携
VSCodeでMCPサーバーを利用する場合:
- VSCodeのワークスペースに
.vscode/mcp.json
ファイルを作成します:
{
"servers": {
"multi-model-advisor": {
"type": "stdio",
"command": "node",
"args": ["/絶対パス/multi-ai-advisor-mcp/build/index.js"]
}
}
}
- VSCodeを再起動します。
7. マルチモデルアドバイザーの使い方
利用可能なモデルの確認
Claude(または他のMCP対応クライアント)に以下のように質問します:
Ollamaで利用可能なモデルを教えてください
Claudeは list-available-models
ツールを呼び出し、システムにインストールされているすべてのOllamaモデルとその詳細情報(パラメータサイズ、量子化レベルなど)を表示します。
複数モデルへのクエリ
以下のような形式でマルチモデルアドバイザーを利用します:
気候変動問題に対して個人ができることは何ですか?gemma:2b、llama3:1b、mistral:7b-v0.3を使用して回答してください。
すると、各モデルが異なる視点から回答し、Claudeがそれらを統合した包括的な回答を提供します。
カスタムモデルセットの指定
デフォルトモデル以外を使用したい場合は、明示的に指定できます:
人工知能の倫理的課題について、phi:3b、mistral:7b-v0.3の視点を教えてください。
実行例
以下は、実際の実行例です:
質問:
プログラミング初心者が最初に学ぶべき言語は何ですか?gemma:2b、llama3:1b、mistral:7b-v0.3の視点で教えてください。
回答:
# 複数モデルからの回答
## GEMMA:2B の回答:
初心者には間違いなくPythonがおすすめです!シンプルな構文で読みやすく、幅広い用途に使えます。データ分析、ウェブ開発、AI、ゲーム開発など多くの分野で活用できます。また、大きなコミュニティがあるため、質問への回答やチュートリアルが豊富です。
## LLAMA3:1B の回答:
プログラミング初心者にとって最適な言語はPythonです。理由は:
1. 読みやすく書きやすい構文
2. 広範なライブラリとフレームワーク
3. 活発なコミュニティと豊富な学習リソース
4. データ分析、ウェブ開発、AI/ML、自動化など多様な用途に対応
JavaScript(ウェブ開発)やScratch(視覚的プログラミング)も初心者に優しい選択肢です。あなたの目標や興味に合わせて選びましょう。
## MISTRAL:7B-V0.3 の回答:
プログラミング初心者には、以下の理由からPythonが最適です:
1. 読みやすい構文 - 英語に近い文法で、セミコロンや波括弧が不要
2. 幅広い応用範囲 - ウェブ開発、データ分析、AI、自動化など多くの分野で利用可能
3. 豊富な学習リソース - 無料のチュートリアル、コース、書籍が多数存在
4. 強力なコミュニティ - 質問への回答を得やすい
5. 即時フィードバック - インタラクティブシェルで結果をすぐに確認できる
他の選択肢としては:
- JavaScript(ウェブ開発志向の場合)
- Scratch(視覚的プログラミングを好む場合)
- Ruby(読みやすさと生産性重視)
最終的には、あなたの目標に最も適した言語を選ぶことが重要です。
8. MCPサーバーのカスタマイズ
独自のMCPサーバーを作成したい場合、以下の手順で実装できます:
基本的なプロジェクト構造の作成
# ディレクトリ作成
mkdir my-ollama-mcp
cd my-ollama-mcp
# npm初期化
npm init -y
# TypeScript設定
npm install --save-dev typescript @types/node
npx tsc --init
# MCPライブラリのインストール
npm install @modelcontextprotocol/server node-fetch dotenv zod
npm install --save-dev @types/node-fetch
基本的なMCPサーバーの実装
src/index.ts
ファイルを作成し、以下のコードを記述します:
import { McpServer } from "@modelcontextprotocol/server";
import { StdioServerTransport } from "@modelcontextprotocol/server";
import { z } from "zod";
import fetch from "node-fetch";
import * as dotenv from 'dotenv';
// 環境変数のロード
dotenv.config();
// Ollama API URL
const OLLAMA_API_URL = process.env.OLLAMA_API_URL || "http://localhost:11434";
// サーバーインスタンスの作成
const server = new McpServer({
name: "my-ollama-server",
version: "1.0.0",
});
// 利用可能なモデルを一覧表示するツール
server.tool(
"list-models",
"Ollamaで利用可能なモデル一覧を表示",
{},
async () => {
try {
const response = await fetch(`${OLLAMA_API_URL}/api/tags`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json() as { models: any[] };
const modelInfo = data.models.map(model => {
return `- ${model.name}`;
}).join("\n");
return {
content: [{
type: "text",
text: `# Ollamaで利用可能なモデル\n\n${modelInfo}`
}]
};
} catch (error) {
return {
isError: true,
content: [{
type: "text",
text: `エラー: ${error instanceof Error ? error.message : String(error)}`
}]
};
}
}
);
// モデルにクエリを送信するツール
server.tool(
"query-model",
"指定したモデルに質問を送信",
{
model: z.string().describe("使用するモデル名"),
prompt: z.string().describe("モデルへの質問"),
},
async ({ model, prompt }) => {
try {
const response = await fetch(`${OLLAMA_API_URL}/api/generate`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
model: model,
prompt: prompt,
stream: false,
}),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return {
content: [{
type: "text",
text: data.response
}]
};
} catch (error) {
return {
isError: true,
content: [{
type: "text",
text: `エラー: ${error instanceof Error ? error.message : String(error)}`
}]
};
}
}
);
// サーバー起動
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Ollama MCP サーバー起動中");
}
main().catch((error) => {
console.error("エラー:", error);
process.exit(1);
});
ビルドと実行
# TypeScriptのコンパイル設定
npx tsc --init
# コンパイル
npx tsc
# 実行
node build/index.js
9. トラブルシューティング
Ollamaの接続エラー
問題: Error: fetch failed
や接続エラーが発生する
解決策:
- Ollamaが起動しているか確認:
ollama serve
- APIのURLが正しいか確認:
http://localhost:11434
- ファイアウォールやネットワーク設定を確認
メモリ不足エラー
問題: 大きなモデルを使用時にメモリ不足エラーが発生
解決策:
- より小さなモデルを使用:
llama3:1b
など - メモリを増設
- 同時に実行するモデル数を減らす
モデルが見つからないエラー
問題: model 'xxx' not found
エラーが発生
解決策:
- 正しいモデル名でpull:
ollama pull xxx
-
ollama list
で利用可能なモデルを確認 - モデル名の大文字小文字やバージョンが正しいか確認
10. まとめ
OllamaとMCPを組み合わせることで、ローカル環境で動作する強力なAIシステムを構築できます。マルチモデルアドバイザーを使用することで、複数のAIモデルからの視点を一度に得ることができ、より包括的な回答や多様な観点を入手できます。
このアプローチにより、ローカルLLMの利点(プライバシー、コスト、カスタマイズ性)を活かしつつ、複数モデルの知見を組み合わせた高度なAI体験が実現できます。
MCPの標準化されたインターフェースは、AIモデル間の相互運用性を高め、複雑なAIアプリケーションの開発をシンプルにします。今後もOllamaやMCPエコシステムは進化を続けるでしょうから、最新の開発動向にも注目していきましょう。
OllamaとMCPサーバーを使った実験を通じて、AIの可能性をさらに広げてください。複数の視点からの回答を得ることで、より深い洞察と革新的なアイデアを発見できるかもしれません。
参考リンク: