gemini-research-tools-mcp
by atakamizawa
README.md
# Gemini Research Tools MCP
Gemini API の各種リサーチ機能を統合し、MCP Server / Web UI / CLI / ADK Tool など複数のインターフェースから利用できるようにするツールキットです。Gemini API のリサーチ機能をラップして独自のアプリケーションに統合したい場合のサンプル・リファレンス実装として活用できます。
## 🎯 概要
このプロジェクトは、Google Gemini API の 3 つの強力なリサーチ機能を統合して提供します:
| 機能 | 説明 | レイテンシ | ユースケース |
| ----------------- | ----------------------------------------------- | ---------- | ------------------------------------------ |
| **Deep Research** | Interactions API を使用した包括的な Deep Research | 分単位 | 詳細レポート、市場分析、競合調査 |
| **Quick Search** | Google Search grounding による高速 Web 検索 | 秒単位 | 最新ニュース、ファクトチェック、簡単な質問 |
| **URL Analysis** | URL Context tool による特定 URL の分析・比較 | 秒単位 | 記事比較、ドキュメント要約、コード分析 |
### 提供インターフェース
- **MCP Server** - Cline 等の MCP クライアントからツールとして呼び出し
- **Web UI** - Streamlit ベースのシンプルなウェブインターフェース
- **ADK Tool** - Google ADK エージェントのツールとして利用
- **CLI** - コマンドラインからの実行
- **Dify Plugin** - Dify プラットフォームのプラグインとして利用
## 📋 前提条件
- Python 3.11+
- Gemini API Key ([Google AI Studio](https://aistudio.google.com/app/apikey) で取得)
## 🚀 インストール
```bash
# リポジトリをクローン
git clone https://github.com/atakamizawa/gemini-research-tools-mcp.git
cd gemini-research-tools-mcp
# 仮想環境を作成(推奨)
python -m venv venv
source venv/bin/activate # Linux/Mac
# または
.\venv\Scripts\activate # Windows
# 依存パッケージをインストール
pip install -e ".[all]"
# 環境変数を設定
cp .env.example .env
# .env ファイルを編集して GEMINI_API_KEY を設定
```
## 🔧 使用方法
### 1. MCP Server
MCP クライアント(VS Code GitHub Copilot、Cline 等)からツールとして呼び出せます。
#### 起動方法
| 方法 | コマンド | 用途 |
| ---------------------- | ------------------------------------------------------------------------- | -------------- |
| ローカルクローン | `grt-mcp` | 開発・カスタマイズ |
| GitHub から直接(uvx) | `uvx --from git+https://github.com/atakamizawa/gemini-research-tools-mcp grt-mcp` | クローン不要で即利用 |
#### クライアント設定
<details>
<summary><b>VS Code (GitHub Copilot Chat)</b></summary>
**設定ファイル:** コマンドパレット → `MCP: Open User Configuration` または `.vscode/mcp.json`
```json
{
"servers": {
"gemini-research-tools": {
"command": "grt-mcp",
"env": { "GEMINI_API_KEY": "your-api-key" }
}
}
}
```
uvx を使う場合は `"command": "uvx"` + `"args": ["--from", "git+https://github.com/atakamizawa/gemini-research-tools-mcp", "grt-mcp"]` に変更。
</details>
<details>
<summary><b>Cline</b></summary>
**設定ファイル:**
- Mac/Linux: `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
- Windows: `%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json`
```json
{
"mcpServers": {
"gemini-research-tools": {
"command": "grt-mcp",
"env": { "GEMINI_API_KEY": "your-api-key" }
}
}
}
```
uvx を使う場合は `"command": "uvx"` + `"args": ["--from", "git+https://github.com/atakamizawa/gemini-research-tools-mcp", "grt-mcp"]` に変更。
</details>
> **💡 Note:** `.env` ファイルに `GEMINI_API_KEY` を設定している場合、`env` セクションでの指定は不要です。
#### 利用可能なツール
##### 🔬 Deep Research ツール(分単位、包括的なレポート)
Interactions API を使用して、複雑なトピックについて自律的にリサーチを行い、引用付きの詳細レポートを生成します。
| ツール名 | 説明 | レイテンシ |
| ----------------------- | ---------------------------------- | ---------- |
| `deep_research` | トピックについて Deep Research を実行 | 分単位 |
| `get_research_status` | リサーチの状態を確認 | 秒単位 |
| `get_research_result` | 完了したリサーチの結果を取得 | 秒単位 |
| `ask_followup_question` | フォローアップ質問 | 秒単位 |
| `stream_research` | ストリーミングでリサーチを実行 | 分単位 |
##### 🔍 Quick Search ツール(秒単位、軽量検索)
Google Search grounding を使用して、リアルタイムの Web 情報を高速に取得します。
| ツール名 | 説明 | レイテンシ |
| -------------- | ----------------------------------- | ---------- |
| `quick_search` | Google Search を使った高速 Web 検索 | 秒単位 |
##### 🔗 URL Analysis ツール(秒単位、特定 URL の分析)
URL Context tool を使用して、特定の URL の内容を取得・分析します。
| ツール名 | 説明 | レイテンシ |
| -------------------- | --------------------------- | ---------- |
| `analyze_urls` | 特定 URL の内容を分析・比較 | 秒単位 |
| `search_and_analyze` | Web 検索 + URL 分析のコンボ | 秒単位 |
#### ツールの使い分けガイド
| 用途 | 推奨ツール | 理由 |
| ---------------------------- | -------------------- | ---------------------- |
| 最新ニュースの確認 | `quick_search` | 高速、リアルタイム情報 |
| 簡単な質問への回答 | `quick_search` | 秒単位で回答 |
| 特定記事の要約・比較 | `analyze_urls` | URL を直接分析 |
| 検索結果と特定 URL の比較 | `search_and_analyze` | 両方の機能を組み合わせ |
| 包括的な市場分析 | `deep_research` | 複数ソースを統合 |
| 詳細なレポート作成 | `deep_research` | 引用付きの長文レポート |
| 競合分析・デューデリジェンス | `deep_research` | 深い分析が必要 |
#### 使用例(Cline)
**Quick Search(高速):**
```
User: "今日のAI関連ニュースを教えて"
Cline: quick_search ツールを使用します...
[数秒後]
検索結果: 本日のAI関連ニュースをお伝えします...
```
**URL 分析:**
```
User: "この2つの記事を比較して: https://example.com/article1 https://example.com/article2"
Cline: analyze_urls ツールを使用します...
[数秒後]
分析結果: 2つの記事の主な違いは...
```
**Deep Research(包括的):**
```
User: "量子コンピュータの最新動向について詳しく調べて"
Cline: deep_research ツールを使用します...
[数分後]
リサーチ結果:
# 量子コンピュータの最新動向レポート
## エグゼクティブサマリー
...
## 主要な発見
...
## 引用
[1] https://...
[2] https://...
```
### 2. Web UI
```bash
# Streamlit UIを起動
streamlit run src/ui/app.py
```
ブラウザで `http://localhost:8501` を開きます。
**機能:**
- リサーチクエリの入力
- フォーマット指定
- リアルタイムストリーミング表示
- 状態確認
- フォローアップ質問
### 3. CLI
```bash
# Deep Research を実行
grt research "量子コンピュータの最新動向"
# ストリーミングで実行
grt research "AI trends in 2025" --stream
# フォーマット指定付き
grt research "EV batteries" -f "比較表を含めてください" -o report.md
# 状態確認
grt status <interaction_id>
# 結果取得
grt result <interaction_id>
# フォローアップ質問
grt followup <interaction_id> "主なリスクは何ですか?"
```
### 4. ADK Tool
```python
from google.adk.agents import Agent
from src.adk.tools import deep_research, get_research_status
agent = Agent(
name="research_assistant",
model="gemini-3-flash-preview",
tools=[deep_research, get_research_status],
instruction="You are a research assistant that can perform deep research."
)
```
### 5. Dify Plugin
[Dify](https://dify.ai/) プラットフォームのプラグインとして利用できます。
#### インストール
```bash
# プラグインをパッケージ化
cd src
dify plugin package ./dify
# 生成された gemini-research.difypkg を Dify にアップロード
```
#### 利用可能なツール
| ツール名 | 説明 | レイテンシ |
| --------------------- | ----------------------------------------------- | ---------- |
| `deep_research` | Gemini Deep Research Agent による包括的リサーチ | 分単位 |
| `get_research_status` | リサーチタスクの状態確認 | 秒単位 |
| `get_research_result` | 完了したリサーチの結果取得 | 秒単位 |
| `quick_search` | Google Search grounding による高速検索 | 秒単位 |
| `analyze_urls` | 特定 URL の内容分析 | 秒単位 |
| `search_and_analyze` | Web 検索 + URL 分析のコンボ | 秒単位 |
詳細は [src/dify/README.md](src/dify/README.md) を参照してください。
## 📁 プロジェクト構造
```
gemini-research-tools-mcp/
├── src/
│ ├── core/ # コアライブラリ
│ │ ├── client.py # DeepResearchClient, QuickSearchClient
│ │ └── models.py # Pydanticモデル
│ ├── mcp/ # MCPサーバー
│ │ └── server.py # FastMCP実装(8ツール提供)
│ ├── adk/ # ADKツール
│ │ └── tools.py # ADKカスタムツール
│ ├── cli/ # CLIツール
│ │ └── main.py # Typer CLI
│ ├── ui/ # Web UI
│ │ └── app.py # Streamlit
│ └── dify/ # Dify プラグイン
│ ├── main.py # プラグインエントリーポイント
│ ├── manifest.yaml
│ ├── provider/ # プロバイダー設定
│ └── tools/ # ツール実装
├── tests/ # テスト
├── pyproject.toml
├── requirements.txt
└── README.md
```
## ⚙️ 設定
### 環境変数
| 変数名 | 必須 | 説明 |
| ---------------- | ---- | --------------- |
| `GEMINI_API_KEY` | ✅ | Gemini API キー |
### モデル選択
| 機能 | モデル選択 | 使用可能なモデル |
| ---------------------- | ---------- | -------------------------------------------------------------- |
| **Deep Research** | ❌ 不可 | エージェント `deep-research-pro-preview-12-2025` 固定 |
| **Quick Search** | ✅ 可能 | `gemini-3-flash-preview`(デフォルト), `gemini-3-pro-preview` |
| **URL Analysis** | ✅ 可能 | `gemini-3-flash-preview`(デフォルト), `gemini-3-pro-preview` |
| **search_and_analyze** | ✅ 可能 | `gemini-3-flash-preview`(デフォルト), `gemini-3-pro-preview` |
## 📝 API リファレンス
### DeepResearchClient
Interactions API を使用した Deep Research 用クライアント。
```python
from src.core.client import DeepResearchClient
client = DeepResearchClient()
# リサーチを開始して完了まで待機
result = await client.research("Your query")
print(result.content)
# リサーチを開始(非同期)
interaction_id = await client.start_research("Your query")
# 状態確認
status = await client.get_status(interaction_id)
# 結果取得
result = await client.get_result(interaction_id)
# ストリーミング
async for event in client.stream_research("Your query"):
print(event.content)
# フォローアップ
answer = await client.ask_followup(interaction_id, "Your question")
```
### QuickSearchClient
Google Search grounding と URL Context を使用した高速検索用クライアント。
```python
from src.core.client import QuickSearchClient
client = QuickSearchClient()
# 高速Web検索(Google Search grounding)
result = await client.quick_search("最新のAIニュース")
print(result.content)
for citation in result.citations:
print(f"- {citation.title}: {citation.url}")
# URL分析(URL Context tool)
result = await client.analyze_urls(
urls=["https://example.com/article1", "https://example.com/article2"],
query="これらの記事の主な違いを比較してください"
)
print(result.content)
# 検索 + URL分析のコンボ
result = await client.search_and_analyze(
query="最新のEV市場動向と、この記事の内容を比較してください",
urls=["https://example.com/ev-report-2024"]
)
print(result.content)
```
## ⚠️ 注意事項
### Deep Research(Interactions API + Deep Research Agent)
- **実行時間**: 数分〜最大 60 分かかる場合があります
- **コスト**: 1 タスクあたり約$2〜$5(クエリの複雑さによる)
- **制限**: カスタム Function Calling や Remote MCP は非サポート
- **エージェント**: `deep-research-pro-preview-12-2025`(固定、モデル選択不可)
- **API**: `client.interactions.create(agent="deep-research-pro-preview-12-2025")`
### Quick Search(Google Search grounding)
- **実行時間**: 通常数秒で完了
- **コスト**: 標準の Gemini API 料金(トークンベース)
- **モデル**: `gemini-3-flash-preview`(デフォルト)または `gemini-3-pro-preview`
- **API**: `types.Tool(google_search=types.GoogleSearch())`
### URL Analysis(URL Context tool)
- **実行時間**: 通常数秒で完了
- **モデル**: `gemini-3-flash-preview`(デフォルト)または `gemini-3-pro-preview`
- **API**: `types.Tool(url_context=types.UrlContext())`
- **制限**:
- 最大 20 URL/リクエスト
- 最大 34MB/URL
- ペイウォール、YouTube 動画、Google Workspace ファイルは非対応
## 🔗 関連リンク
### Gemini API ドキュメント
- [Deep Research Agent](https://ai.google.dev/gemini-api/docs/deep-research) - Interactions API を使用した Deep Research
- [Interactions API](https://ai.google.dev/gemini-api/docs/interactions) - 長時間実行タスク用 API
- [Google Search Grounding](https://ai.google.dev/gemini-api/docs/grounding) - リアルタイム Web 検索
- [URL Context](https://ai.google.dev/gemini-api/docs/url-context) - 特定 URL の分析
### ツール
- [Google AI Studio](https://aistudio.google.com/) - API キー取得・テスト
- [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) - MCP の仕様
## 📄 ライセンス
MIT License
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues