Skip to main content
Glama
tanamurayuuki

Gemini URL Context & Search MCP Server

README.md
# Gemini URL Context & Search MCP Server

Google AI Studio の URL context 機能と Google Search を MCP (Model Context Protocol) サーバーとして実装し、Claude Code から**Webページのテキスト抽出と検索**を可能にします。

## 📁 プロジェクト構造
詳細なフォルダ・ファイル構成は [PROJECT_STRUCTURE.md](./PROJECT_STRUCTURE.md) をご覧ください。

## 🎯 機能

- **📄 URL Content Extract**: Webページのテキストと画像URLを全抽出
- **🔍 Google Search**: Webを検索して関連情報を取得
- **🏗️ 構造化出力**: JSON形式でページ情報を整理
- **🔗 複数URL対応**: 複数URLの一括処理
- **⚡ 高品質アーキテクチャ**: ドメイン駆動設計とTDD

## 📦 インストール

### npxで即座に使用(推奨)
```bash
# Claude Code で一発セットアップ
claude mcp add gemini-url-context -s user -e GEMINI_API_KEY="your-key" -- npx @yourcompany/gemini-url-context-mcp@latest
```

### 手動インストール
```bash
npm install -g @yourcompany/gemini-url-context-mcp
```

## 🔧 セットアップ

### 1. APIキー取得
1. [Google AI Studio](https://aistudio.google.com/) にアクセス
2. "Get API key" → "Create API key"
3. キーをコピー

### 2. 自動セットアップ(Claude Code)
```bash
# セットアップスクリプトを実行
export GEMINI_API_KEY="your-api-key"
./scripts/setup-claude-code.sh
```

### 3. 設定ファイル生成(他のクライアント)
```bash
# 各クライアント用設定ファイルを生成
node scripts/generate-configs.js
```

## 🚀 使用方法

### URL Content Extract
```
Claude Code で話しかけるだけ:
「https://example.com のテキストと画像を全部抽出して」
```

### Google Search
```
Claude Code で話しかけるだけ:
「最新のAI技術について検索して」
```

### 応用例
```
「以下のサイトを比較分析して:
- https://site1.com
- https://site2.com」

「Next.js 14の最新情報を検索して、
関連記事の内容も抽出して」
```

## 🛠️ 対応クライアント

- **Claude Code** (CLI) - ワンライナーセットアップ
- **Cursor** - `.cursor/mcp.json`
- **VS Code** - MCP拡張
- **Claude Desktop** - 標準設定
- **LM Studio** - MCP Server追加

## 🏗️ アーキテクチャ

### ドメイン駆動設計
- **Domain Layer**: Url, Page, ModelName 値オブジェクト
- **Use Case Layer**: ビジネスロジック分離
- **Adapter Layer**: 外部API統合
- **Infrastructure**: MCP プロトコル実装

### 品質保証
- **TDD**: テスト駆動開発
- **型安全**: TypeScript厳密モード
- **エラーハンドリング**: 分類された例外処理
- **Value Objects**: 不変性保証

## 🔍 API仕様

### url_context_extract
```json
{
  "urls": ["https://example.com"],
  "query": "要約して",
  "model": "gemini-2.0-flash-exp",
  "maxCharsPerPage": 8000
}
```

### google_search
```json
{
  "query": "検索キーワード",
  "instruction": "処理指示",
  "model": "gemini-2.0-flash-exp"
}
```

## 🎯 MCP作成のベストプラクティス

この実装から学べる要素:

### 🔥 必須要素
1. **npx対応**: `"bin"` でCLIツール化
2. **複数クライアント対応**: 設定ファイル自動生成
3. **ワンライナー セットアップ**: ユーザビリティ最優先
4. **エラーハンドリング**: 型付きエラーで安全性

### 🏗️ アーキテクチャ
1. **ドメイン駆動設計**: ビジネスロジック分離
2. **Value Object**: 型安全と不変性
3. **Adapter Pattern**: 外部依存の抽象化
4. **Factory Pattern**: 実装切り替え

### 🧪 品質管理
1. **TDD**: テスト先行開発
2. **統合テスト**: 実動作確認
3. **型安全**: TypeScript活用
4. **lint/format**: コード品質

### 📦 配布戦略
1. **npmパッケージ**: 即座にインストール可能
2. **設定自動化**: スクリプトで一発セットアップ
3. **ドキュメント**: 使用例とトラブルシューティング
4. **段階的ロールアウト**: パイロット→本格展開

## 🏆 他実装との差別化

| 項目 | この実装 | 一般的実装 |
|------|----------|-----------|
| **アーキテクチャ** | DDD + Clean Architecture | 手続き型 |
| **テスト** | TDD + 統合テスト | テストなし |
| **型安全** | Value Object | 文字列ベース |
| **エラー処理** | 型付きドメインエラー | try-catch |
| **ユーザビリティ** | ワンライナーセットアップ | 手動設定 |

---

**開発者**: あなた  
**アーキテクチャ**: Claude Code AI  
**品質**: エンタープライズ級  
**使いやすさ**: コンシューマー級  

🎉 **完璧なMCPサーバーの完成です!**

TDQS

B3.3/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one performs web searches, while the other extracts content from specific URLs. There is no overlap in functionality, making it easy for an agent to select the correct tool based on whether it needs general search results or URL-specific content extraction.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern: 'google_search' and 'url_context_extract'. The naming is clear, descriptive, and adheres to a uniform style, making the tools easily identifiable and predictable in their naming convention.

Tool Count2/5

With only two tools, the server feels thin for its purpose of 'Gemini URL Context & Search'. While the tools cover search and extraction, the scope suggests potential for more operations, such as managing search history or handling multiple URLs, making the tool count insufficient for comprehensive coverage.

Completeness3/5

The tools cover basic search and URL content extraction, but there are notable gaps. For example, there's no tool for saving or managing extracted data, refining searches, or handling batch URL processing. This limits the server's ability to support more advanced workflows within its domain.