MCP Reference Serversの機能一覧についてまとめる

## はじめに

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を活用する基本的なパターンを示します：

```javascript
// 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を組み合わせることで、検索結果を永続的に記憶するエージェントを構築できます：

```javascript
// 検索結果を永続的に記憶するエージェント
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を組み合わせたコード分析ツール：

```javascript
// コードベースの分析と提案を行うエージェント
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を組み合わせたコンテンツ生成システム：

```javascript
// ウェブ情報を元に画像とレポートを生成するエージェント
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は単独でも強力ですが、組み合わせることでさらに高度な機能を実現できます。例えば：

1. **リサーチと知識管理**: Brave Search + Fetch + Memory
2. **開発ワークフロー**: GitHub + GitLab + Slack + Sentry
3. **データ分析パイプライン**: PostgreSQL + Redis + SQLite
4. **コンテンツ管理**: Google Drive + Filesystem + EverArt
5. **自動化と監視**: Puppeteer + Sentry + Time

## 独自のMCPサーバー開発のヒント

Reference Serversをモデルに独自のMCPサーバーを開発する際のポイント：

1. **統一インターフェース**: MCPの標準に従った一貫したAPIデザイン
2. **エラーハンドリング**: 堅牢なエラー処理と適切なフィードバック
3. **認証とセキュリティ**: 適切なアクセス制御と認証メカニズム
4. **ドキュメント**: 詳細なAPI仕様と使用例の提供
5. **スケーラビリティ**: 負荷に応じた適切なリソース管理


## 参考リンク

- [GitHub: modelcontextprotocol/servers](https://github.com/modelcontextprotocol/servers)
- [MCP公式ドキュメント](https://modelcontextprotocol.github.io/)
- [Anthropic Claude Developer Documentation](https://docs.anthropic.com/)

---