はじめに
Model Context Protocol (MCP) は、大規模言語モデル(LLM)が外部ツールやデータソースにアクセスするための統一的なプロトコルです。その中でも「Reference Servers」は、MCPの機能を示すデモンストレーション用サーバーとして重要な役割を果たしています。この記事では、開発者が実際のプロジェクトで活用できる「Reference Servers」に関して、自分の実装上調べたことを記事に残しています。
Reference Serversとは
Reference Serversは、LLMが様々なツールやデータソースにアクセスする方法を示すためのデモンストレーション・リファレンス実装です。これらは開発者が独自のMCPサーバーを実装する際の参考となるだけでなく、すぐに利用できる実用的なツールとしても機能します。
カテゴリー別Reference Servers
データストレージと検索
1. PostgreSQL
PostgreSQLサーバーは、リレーショナルデータベースへのアクセスを提供します。
【主な機能】
- スキーマ検査機能を持つ読み取り専用データベースアクセス
- SQLクエリの実行とデータ取得
- テーブル間の関係性分析
- セキュリティを考慮した読み取り専用操作
2. Redis
高速なキー値ストアであるRedisとの連携を可能にします。
【主な機能】
- キーと値の保存・取得
- リスト、セット、ハッシュなどの複合データ型操作
- 有効期限設定と管理
- パブサブ機能とトランザクション処理
3. SQLite
軽量データベースであるSQLiteを操作するためのインターフェースを提供します。
【主な機能】
- データベース接続と基本操作
- クエリ実行とデータ取得
- スキーマ情報の参照
- データ分析とビジネスインテリジェンスレポート生成
4. Memory
長期記憶を管理するためのナレッジグラフベースのメモリシステムを提供します。
【主な機能】
- エンティティ(名前・タイプ・情報を持つノード)の管理
- エンティティ間の関係定義と検索
- ナレッジグラフの操作と複雑なパターン検出
- 永続的なメモリストレージ
Web検索とコンテンツ取得
5. Brave Search
Braveの検索エンジンAPIを活用した検索機能を提供します。
【主な機能】
- Web Search: 一般クエリ、ニュース、記事の検索(最大20結果/リクエスト)
- Local Search: ビジネス、場所、サービスの検索と詳細情報
- フィルタリングとページネーション機能
- 結果がない場合の自動フォールバック
6. Fetch
ウェブコンテンツを取得し、LLMが処理しやすい形式に変換します。
【主な機能】
- ウェブページコンテンツの取得
- HTML/テキストのクリーニングと整形
- メタデータ抽出
- LLM向け最適化フォーマット変換
7. EverArt
AIを使った画像生成サービスとの連携を提供します。
【主な機能】
- テキストプロンプトからの画像生成
- 複数AIモデルのサポート
- 生成パラメータのカスタマイズ
- 画像の管理と取得
8. Puppeteer
ブラウザ操作の自動化とウェブスクレイピングを可能にします。
【主な機能】
- ウェブページのレンダリングと操作
- フォーム入力と送信の自動化
- JavaScriptの実行とDOM操作
- コンテンツ抽出とスクリーンショット取得
リポジトリとコード管理
9. Git
Gitリポジトリの操作と管理のためのインターフェースを提供します。
【主な機能】
- リポジトリのクローンと更新
- ブランチの管理
- コミット履歴の表示と検索
- ファイルの変更履歴追跡
10. GitHub
GitHub特有のリポジトリ管理と連携機能を提供します。
【主な機能】
- ファイル操作(作成・更新・読み取り)
- リポジトリの検索と作成
- イシューとプルリクエストの管理
- コード検索とメタデータ取得
11. GitLab
GitLabプラットフォームとの連携機能を提供します。
【主な機能】
- プロジェクト管理
- イシューとマージリクエスト処理
- CIパイプライン監視
- ファイル操作と設定管理
クラウドサービスと生産性ツール
12. Google Drive
Google Driveとの連携によるファイル管理機能を提供します。
【主な機能】
- ファイルとフォルダの検索
- メタデータ取得とファイル内容の読み取り
- ファイル作成と更新
- 共有設定の管理
13. Google Maps
位置情報サービスと地図関連機能を提供します。
【主な機能】
- 場所の検索と詳細情報取得
- 経路計算と移動時間推定
- 座標⇔住所変換
- 周辺施設検索
14. Slack
Slackとの連携によるコミュニケーション機能を提供します。
【主な機能】
- メッセージの送受信
- チャンネル管理と検索
- ユーザー情報取得
- スレッド処理とリアクション管理
ユーティリティと特殊機能
15. Filesystem
ファイルシステム操作のためのセキュアなインターフェースを提供します。
【主な機能】
- ファイルの読み書き
- ディレクトリ管理
- ファイル検索
- アクセス制御と安全な操作
16. Time
時間関連の操作と変換機能を提供します。
【主な機能】
- 現在時刻の取得
- タイムゾーン変換
- 日付計算と比較
- 時間フォーマット変換
17. Sentry
エラー監視プラットフォームSentryとの連携機能を提供します。
【主な機能】
- エラーと例外の取得
- イシュー管理
- パフォーマンス分析
- 問題の優先順位付け
18. Sequential Thinking
複雑な問題解決のための思考プロセス管理を提供します。
【主な機能】
- 段階的な問題解決アプローチ
- 中間思考過程の記録
- フィードバックループによる改善
- 複数アプローチの並行検討
19. AWS KB Retrieval
AWSのナレッジベースから情報を検索する機能を提供します。
【主な機能】
- Bedrock Agent Runtimeとの統合
- ナレッジベースへのクエリ実行
- 関連情報の抽出と最適化
20. Everything
MCPプロトコルをテストするための総合的なリファレンス実装です。
【主な機能】
- MCPの機能テスト用ツール集
- 様々なタイプのツール実装例
- 非同期処理のテスト
- LLMサンプリング機能
実装例と活用方法
基本的な使用パターン
MCPのReference Serverを活用する基本的なパターンを示します:
// MCP Reference Serverの利用例
import { MCPClient } from 'mcp-client';
async function main() {
// クライアントの初期化
const client = new MCPClient();
// サーバーの登録
client.registerServer('brave-search', 'https://mcp.brave.com');
client.registerServer('github', 'https://mcp.github.com');
client.registerServer('memory', 'https://mcp.memory.com');
// AIエージェントにツールを提供
const agent = new AIAgent({
tools: client.getTools(),
model: 'gpt-4' // または他のLLM
});
// エージェントの実行
const result = await agent.run('GitHubからコードを検索し、その情報をメモリに保存した後、関連する技術情報をウェブで調査してください');
console.log(result);
}
main().catch(console.error);
実践的なユースケース
1. 知識ベースと検索連携
Brave SearchとMemoryを組み合わせることで、検索結果を永続的に記憶するエージェントを構築できます:
// 検索結果を永続的に記憶するエージェント
async function researchAgent(query) {
// 検索の実行
const searchResults = await braveSearch.search(query);
// 重要な情報を抽出
const importantInfo = extractKeyInformation(searchResults);
// メモリに保存
await memory.createEntity({
name: query,
type: 'research',
observations: importantInfo
});
// 関連エンティティとの関係を作成
const relatedEntities = findRelatedEntities(query);
for (const entity of relatedEntities) {
await memory.createRelation({
from: query,
to: entity.name,
type: 'related-to'
});
}
return {
searchResults,
savedMemory: true,
relatedEntities: relatedEntities.map(e => e.name)
};
}
2. コード分析と開発支援
GitHub、Git、PostgreSQLを組み合わせたコード分析ツール:
// コードベースの分析と提案を行うエージェント
async function codeAnalysisAgent(repoUrl) {
// リポジトリのクローン
const repo = await git.clone(repoUrl);
// コードの読み取りと分析
const files = await github.listFiles(repo.owner, repo.name);
const codebase = await github.getMultipleFiles(repo.owner, repo.name, files);
// データベースにコード情報を保存
await postgresql.execute(`
CREATE TABLE IF NOT EXISTS code_analysis (
repo TEXT,
file TEXT,
complexity INT,
issues JSONB
)
`);
// 各ファイルの分析
for (const file of codebase) {
const analysis = analyzeCode(file.content);
await postgresql.execute(`
INSERT INTO code_analysis (repo, file, complexity, issues)
VALUES ($1, $2, $3, $4)
`, [repoUrl, file.path, analysis.complexity, JSON.stringify(analysis.issues)]);
}
// 分析結果の取得
return postgresql.query(`
SELECT file, complexity, issues
FROM code_analysis
WHERE repo = $1
ORDER BY complexity DESC
`, [repoUrl]);
}
3. マルチモーダルコンテンツ生成
Fetch、EverArt、Filesystemを組み合わせたコンテンツ生成システム:
// ウェブ情報を元に画像とレポートを生成するエージェント
async function contentGenerationAgent(topic) {
// ウェブからの情報収集
const webpages = await fetch.getMultiplePages([
`https://en.wikipedia.org/wiki/${encodeURIComponent(topic)}`,
`https://news.google.com/search?q=${encodeURIComponent(topic)}`
]);
// 情報の抽出と要約
const summary = summarizeContent(webpages);
// 画像生成
const image = await everart.generateImage({
prompt: `${topic} in a detailed and informative style`,
model: 'stable-diffusion'
});
// レポート作成
const report = createReport(topic, summary, image.url);
// ファイルシステムに保存
await filesystem.writeFile(`reports/${topic}.md`, report);
await filesystem.writeFile(`reports/images/${topic}.png`, image.data);
return {
reportPath: `reports/${topic}.md`,
imagePath: `reports/images/${topic}.png`,
summary: summary.substring(0, 200) + '...'
};
}
Reference Serversの拡張と連携
これらのReference Serversは単独でも強力ですが、組み合わせることでさらに高度な機能を実現できます。例えば:
- リサーチと知識管理: Brave Search + Fetch + Memory
- 開発ワークフロー: GitHub + GitLab + Slack + Sentry
- データ分析パイプライン: PostgreSQL + Redis + SQLite
- コンテンツ管理: Google Drive + Filesystem + EverArt
- 自動化と監視: Puppeteer + Sentry + Time
独自のMCPサーバー開発のヒント
Reference Serversをモデルに独自のMCPサーバーを開発する際のポイント:
- 統一インターフェース: MCPの標準に従った一貫したAPIデザイン
- エラーハンドリング: 堅牢なエラー処理と適切なフィードバック
- 認証とセキュリティ: 適切なアクセス制御と認証メカニズム
- ドキュメント: 詳細なAPI仕様と使用例の提供
- スケーラビリティ: 負荷に応じた適切なリソース管理