🚀 Google Researcher MCP Server
AIアシスタント向けの専門的な調査ツールです。Google検索、ウェブスクレイピング、学術論文、特許などをサポートします。
🚀 クイックスタート
Claude Desktop (macOS)
~/Library/Application Support/Claude/claude_desktop_config.jsonに以下を追加します。
{
"mcpServers": {
"google-researcher": {
"command": "npx",
"args": ["-y", "google-researcher-mcp"],
"env": {
"GOOGLE_CUSTOM_SEARCH_API_KEY": "YOUR_API_KEY_HERE",
"GOOGLE_CUSTOM_SEARCH_ID": "YOUR_SEARCH_ID_HERE"
}
}
}
}
Claude Desktop (Windows)
%APPDATA%\Claude\claude_desktop_config.jsonに以下を追加します。
{
"mcpServers": {
"google-researcher": {
"command": "npx",
"args": ["-y", "google-researcher-mcp"],
"env": {
"GOOGLE_CUSTOM_SEARCH_API_KEY": "YOUR_API_KEY_HERE",
"GOOGLE_CUSTOM_SEARCH_ID": "YOUR_SEARCH_ID_HERE"
}
}
}
}
ワンクリックインストール (MCPB)
GitHub Releasesから最新の.mcpbバンドルをダウンロードし、Claude Desktopでダブルクリックしてインストールします。Google APIの資格情報の入力を求められます。
Claude Code
~/.claude.jsonに以下を追加します。
{
"mcpServers": {
"google-researcher": {
"command": "npx",
"args": ["-y", "google-researcher-mcp"],
"env": {
"GOOGLE_CUSTOM_SEARCH_API_KEY": "YOUR_API_KEY_HERE",
"GOOGLE_CUSTOM_SEARCH_ID": "YOUR_SEARCH_ID_HERE"
}
}
}
}
Cline / Roo Code
MCP設定で上記のJSON設定を使用します。
APIキーが必要ですか? APIセットアップガイドを参照して、Google APIの資格情報を取得する手順を確認してください。
ローカル開発
git clone https://github.com/zoharbabin/google-researcher-mcp.git && cd google-researcher-mcp
npm install && npx playwright install chromium
cp .env.example .env
npm run dev
注意: これはSTDIOモードでサーバーを起動します。ローカルのAIアシスタント統合にはこれで十分です。ウェブベースまたはマルチクライアントの設定では、OAuthを使用したHTTPトランスポートが必要です。トランスポートの選択を参照してください。
動作確認
設定が完了したら、AIアシスタントに以下のように問いかけます。
"AI規制に関する最新のニュースを検索して"
アシスタントはgoogle_news_searchツールを使用して、現在の記事を返します。検索結果が表示されれば、サーバーは正常に動作しています。
✨ 主な機能
コア機能
| 機能 |
説明 |
| ウェブスクレイピング |
高速な静的HTMLと、JavaScriptレンダリングページの自動Playwrightフォールバック |
| YouTubeトランスクリプト |
リトライロジックと10種類の分類されたエラータイプを持つ堅牢な抽出 |
| ドキュメント解析 |
PDF、DOCX、PPTXから自動的にテキストを検出して抽出 |
| 品質スコアリング |
関連性 (35%)、新鮮さ (20%)、信頼性 (25%)、コンテンツ品質 (20%) でソースをランク付け |
MCPプロトコルサポート
| 機能 |
説明 |
| ツール |
8つのツール: search_and_scrape、google_search、google_image_search、google_news_search、scrape_page、sequential_search、academic_search、patent_search |
| リソース |
サーバーの状態を公開: stats://tools (ツールごとのメトリクス)、stats://cache、search://recent、config://server |
| プロンプト |
事前構築されたテンプレート: comprehensive-research、fact-check、summarize-url、news-briefing |
| アノテーション |
コンテンツに対象者、優先度、タイムスタンプを付けてタグ付け |
本番環境対応
| 機能 |
説明 |
| キャッシュ |
ツールごとの名前空間を持つ2層 (メモリ + ディスク) キャッシュで、APIコストを削減 |
| デュアルトランスポート |
ローカルクライアント用のSTDIO、ウェブアプリ用のHTTP+SSE |
| セキュリティ |
OAuth 2.1、SSRF保護、細かいスコープ |
| レジリエンス |
サーキットブレーカー、タイムアウト、緩やかな劣化 |
| モニタリング |
キャッシュ統計、イベントストア、ヘルスチェック用の管理エンドポイント |
詳細なドキュメントはこちら: YouTubeトランスクリプト · アーキテクチャ · テスト
📦 インストール
前提条件
- Node.js 20.0.0以上
- Google APIキー:
- Chromium (JavaScriptレンダリング用):
npx playwright install chromium で自動的にインストールされます
- OAuth 2.1プロバイダー (HTTPトランスポートのみ): JWTを発行する外部認証サーバー (例: Auth0、Okta)。STDIOでは不要です。
インストールとセットアップ
- リポジトリをクローンします:
git clone https://github.com/zoharbabin/google-researcher-mcp.git
cd google-researcher-mcp
- 依存関係をインストールします:
npm install
npx playwright install chromium
- 環境変数を設定します:
cp .env.example .env
.env を開き、Google APIキーを追加します。他の変数はすべてオプションです。.env.example のコメントを参照して詳細な説明を確認してください。
サーバーの起動
- 開発環境 (ファイル変更時に自動リロード):
npm run dev
- 本番環境:
npm run build
npm start
Dockerでの実行
docker build -t google-researcher-mcp .
docker run -i --rm --env-file .env google-researcher-mcp
docker run -d --rm --env-file .env -e MCP_TEST_MODE= -p 3000:3000 google-researcher-mcp
Docker Compose (クイックなHTTPトランスポートセットアップ):
cp .env.example .env
docker compose up --build
curl http://localhost:3000/health
Claude CodeでのDocker使用 (~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"google-researcher": {
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", "/path/to/.env", "google-researcher-mcp"]
}
}
}
セキュリティに関する注意: シークレットをDockerイメージにベイクしないでください。常に --env-file または -e フラグを使用してランタイムで渡してください。
💻 使用例
トランスポートの選択
|
STDIO |
HTTP+SSE |
| 最適な用途 |
ローカルのMCPクライアント (Claude Code、Cline、Roo Code) |
ウェブアプリ、マルチクライアント設定、リモートアクセス |
| 認証 |
不要 (プロセスレベルの分離) |
OAuth 2.1ベアラートークンが必要 |
| セットアップ |
ゼロコンフィグ — APIキーを提供するだけ |
OAuthプロバイダー (Auth0、Oktaなど) が必要 |
| スケーリング |
クライアントプロセスごとに1つのサーバー |
1つのサーバーで多数の同時クライアント |
推奨事項: ローカルのAIアシスタント統合には STDIO を使用します。共有サービスまたはウェブアプリケーション統合が必要な場合は、HTTP+SSE を使用します。
クライアント統合
STDIOクライアント (ローカルプロセス)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const transport = new StdioClientTransport({
command: "node",
args: ["dist/server.js"]
});
const client = new Client({ name: "my-client" });
await client.connect(transport);
const searchResult = await client.callTool({
name: "google_search",
arguments: { query: "Model Context Protocol" }
});
console.log(searchResult.content[0].text);
const transcript = await client.callTool({
name: "scrape_page",
arguments: { url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }
});
console.log(transcript.content[0].text);
HTTP+SSEクライアント (ウェブアプリケーション)
構成された認証サーバーから有効なOAuth 2.1ベアラートークンが必要です。
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("http://localhost:3000/mcp"),
{
getAuthorization: async () => `Bearer YOUR_ACCESS_TOKEN`
}
);
const client = new Client({ name: "my-client" });
await client.connect(transport);
const result = await client.callTool({
name: "search_and_scrape",
arguments: { query: "Model Context Protocol", num_results: 3 }
});
console.log(result.content[0].text);
管理API
管理およびモニタリングエンドポイント (HTTPトランスポートのみ):
| メソッド |
エンドポイント |
説明 |
認証 |
GET |
/health |
サーバーのヘルスチェック (ステータス、バージョン、稼働時間) |
公開 |
GET |
/version |
サーバーのバージョンとランタイム情報 |
公開 |
GET |
/mcp/cache-stats |
キャッシュのパフォーマンス統計 |
mcp:admin:cache:read |
GET |
/mcp/event-store-stats |
イベントストアの使用統計 |
mcp:admin:event-store:read |
POST |
/mcp/cache-invalidate |
特定のキャッシュエントリをクリア |
mcp:admin:cache:invalidate |
POST |
/mcp/cache-persist |
キャッシュをディスクに強制的に保存 |
mcp:admin:cache:persist |
GET |
/mcp/oauth-config |
現在のOAuth設定 |
mcp:admin:config:read |
GET |
/mcp/oauth-scopes |
OAuthスコープのドキュメント |
公開 |
GET |
/mcp/oauth-token-info |
トークンの詳細 |
認証済み |
🔧 技術詳細
システムアーキテクチャ
graph TD
A[MCP Client] -->|local process| B[STDIO Transport]
A -->|network| C[HTTP+SSE Transport]
C --> L[OAuth 2.1 + Rate Limiter]
L --> D
C -.->|session replay| K[Event Store]
B --> D[McpServer<br>MCP SDK routing + dispatch]
D --> F[google_search]
D --> G[scrape_page]
D --> I[search_and_scrape]
D --> IMG[google_image_search]
D --> NEWS[google_news_search]
I -.->|delegates| F
I -.->|delegates| G
I --> Q[Quality Scoring]
G --> N[SSRF Validator]
N --> S1[CheerioCrawler<br>static HTML]
S1 -.->|insufficient content| S2[Playwright<br>JS rendering]
G --> YT[YouTube Transcript<br>Extractor]
F & G & IMG & NEWS --> J[Persistent Cache<br>memory + disk]
D -.-> R[MCP Resources]
D -.-> P[MCP Prompts]
style J fill:#f9f,stroke:#333,stroke-width:2px
style K fill:#ccf,stroke:#333,stroke-width:2px
style L fill:#f99,stroke:#333,stroke-width:2px
style N fill:#ff9,stroke:#333,stroke-width:2px
style Q fill:#9f9,stroke:#333,stroke-width:2px
詳細な説明は、アーキテクチャガイドを参照してください。
📚 詳細ドキュメント
AIアシスタント (LLM) 向け
このドキュメントを読んでいるAIアシスタントの方へ、このMCPサーバーの使用方法は以下の通りです。
推奨ツール選択
| タスク |
使用するツール |
| トピックを調査し、質問に答える |
search_and_scrape — 1回の呼び出しで検索とコンテンツ取得を行います (推奨) |
| 複雑な多段階調査 |
sequential_search — 3回以上の検索の進捗を追跡し、分岐をサポートします |
| 学術論文を検索する |
academic_search — arXiv、PubMed、IEEEなどの論文を引用付きで検索します (APA、MLA、BibTeX) |
| 特許を検索する |
patent_search — Google Patentsを使用して先行技術、FTO分析を行います |
| 最新のニュースを検索する |
google_news_search — 新鮮さのフィルタリングと日付のソートが可能です |
| 画像を検索する |
google_image_search — サイズ/タイプ/色のフィルタリングが可能です |
| URLのリストのみを取得する |
google_search — URLが必要で、ページを独自のロジックで処理する場合に使用します |
| 特定のURLの内容を読む |
scrape_page — YouTubeトランスクリプトの抽出やPDF/DOCX/PPTXの解析も行います |
ツール呼び出しの例
{ "name": "search_and_scrape", "arguments": { "query": "climate change effects 2024", "num_results": 5 } }
{ "name": "sequential_search", "arguments": { "searchStep": "Starting research on quantum computing", "stepNumber": 1, "totalStepsEstimate": 4, "nextStepNeeded": true } }
{ "name": "academic_search", "arguments": { "query": "transformer neural networks", "num_results": 5 } }
{ "name": "patent_search", "arguments": { "query": "machine learning optimization", "search_type": "prior_art" } }
{ "name": "google_news_search", "arguments": { "query": "AI regulations", "freshness": "week" } }
{ "name": "google_image_search", "arguments": { "query": "solar panel installation", "type": "photo" } }
{ "name": "scrape_page", "arguments": { "url": "https://example.com/article" } }
{ "name": "scrape_page", "arguments": { "url": "https://www.youtube.com/watch?v=VIDEO_ID" } }
主要な動作
- キャッシュ: 検索結果は30分、スクレイピング結果は1時間キャッシュされます。繰り返しのクエリは高速です。
- 品質スコアリング:
search_and_scrape はソースを関連性、新鮮さ、信頼性、コンテンツ品質でランク付けします。
- グレースフルフェイル: 一部のソースが失敗しても、成功したソースからの結果が返されます。
- ドキュメントサポート:
scrape_page はPDF、DOCX、PPTXを自動検出してテキストを抽出します。
利用可能なツール
各ツールの使用時期
| ツール |
最適な用途 |
使用する状況 |
search_and_scrape |
調査 (推奨) |
ウェブソースを使用して質問に答える必要がある場合。最も効率的で、1回の呼び出しで検索とコンテンツ取得を行います。ソースは品質スコア付けされます。 |
sequential_search |
複雑な調査 |
3回以上の検索が必要で、異なる角度からの調査や途中で中止する可能性のある調査の場合。進捗を追跡し、分岐をサポートします。あなたが推論し、ツールが状態を追跡します。 |
academic_search |
査読済み論文 |
信頼性の高い学術ソースが必要な調査の場合。引用付き (APA、MLA、BibTeX)、要約、PDFリンク付きの論文を返します。 |
patent_search |
特許調査 |
先行技術検索、実施権解析 (FTO)、特許ランドスケーピングの場合。特許番号、権利者、発明者、PDFリンク付きの特許を返します。 |
google_search |
URLのみを見つける |
URLのリストのみが必要な場合、または独自のロジックでページを処理したい場合に使用します。 |
google_image_search |
画像を見つける |
視覚的なコンテンツ (写真、イラスト、グラフィック) が必要な場合。テキスト調査には search_and_scrape を使用します。 |
google_news_search |
最新のニュース |
最新のニュース記事が必要な場合。結果に対して scrape_page を使用して全文を読むことができます。 |
scrape_page |
特定のURLの内容を読む |
URLがあり、そのコンテンツが必要な場合。YouTubeトランスクリプトやドキュメント (PDF、DOCX、PPTX) を自動的に処理します。 |
ツールリファレンス
search_and_scrape (調査に推奨)
Googleを検索し、トップの結果からコンテンツを1回の呼び出しで取得します。品質スコア付けされた重複排除されたテキストをソースの属性付きで返します。応答にサイズメタデータ (estimatedTokens、sizeCategory、truncated) が含まれます。
| パラメータ |
タイプ |
デフォルト |
説明 |
query |
文字列 |
必須 |
検索クエリ (1 - 500文字) |
num_results |
数値 |
3 |
結果の数 (1 - 10) |
include_sources |
ブール値 |
true |
ソースのURLを追加する |
deduplicate |
ブール値 |
true |
重複するコンテンツを削除する |
max_length_per_source |
数値 |
50KB |
ソースごとの最大コンテンツ長 (文字数) |
total_max_length |
数値 |
300KB |
合計の最大コンテンツ長 (文字数) |
filter_by_query |
ブール値 |
false |
クエリのキーワードを含む段落のみをフィルタリングする |
google_search
Googleからランク付けされたURLを返します。リンクのみが必要で、コンテンツは不要な場合に使用します。
| パラメータ |
タイプ |
デフォルト |
説明 |
query |
文字列 |
必須 |
検索クエリ (1 - 500文字) |
num_results |
数値 |
5 |
結果の数 (1 - 10) |
time_range |
文字列 |
- |
day、week、month、year |
site_search |
文字列 |
- |
ドメインに限定する |
exact_terms |
文字列 |
- |
必須のフレーズ |
exclude_terms |
文字列 |
- |
除外する単語 |
google_image_search
フィルタリングオプション付きでGoogle画像を検索します。
| パラメータ |
タイプ |
デフォルト |
説明 |
query |
文字列 |
必須 |
検索クエリ (1 - 500文字) |
num_results |
数値 |
5 |
結果の数 (1 - 10) |
size |
文字列 |
- |
huge、large、medium、small |
type |
文字列 |
- |
clipart、face、lineart、photo、animated |
color_type |
文字列 |
- |
color、gray、mono、trans |
file_type |
文字列 |
- |
jpg、gif、png、bmp、svg、webp |
google_news_search
新鮮さと日付のソート付きでGoogleニュースを検索します。
| パラメータ |
タイプ |
デフォルト |
説明 |
query |
文字列 |
必須 |
検索クエリ (1 - 500文字) |
num_results |
数値 |
5 |
結果の数 (1 - 10) |
freshness |
文字列 |
week |
hour、day、week、month、year |
sort_by |
文字列 |
relevance |
relevance、date |
news_source |
文字列 |
- |
特定のソースにフィルタリングする |
scrape_page
任意のURLからテキストを抽出します。ウェブページ (静的/JS)、YouTube (トランスクリプト)、ドキュメント (PDF/DOCX/PPTX) を自動検出します。
| パラメータ |
タイプ |
デフォルト |
説明 |
url |
文字列 |
必須 |
スクレイピングするURL (最大2048文字) |
max_length |
数値 |
50KB |
最大コンテンツ長 (文字数)。これを超えるコンテンツは自然な区切りで切り捨てられます。 |
mode |
文字列 |
full |
full はコンテンツを返し、preview はメタデータ + 構造のみを返します (取得前にサイズを確認するのに便利) |
sequential_search
多段階調査の状態を追跡します。sequential_thinking パターンに従います: あなたが推論し、ツールが状態を追跡します。
| パラメータ |
タイプ |
デフォルト |
説明 |
searchStep |
文字列 |
必須 |
現在のステップの説明 (1 - 2000文字) |
stepNumber |
数値 |
必須 |
現在のステップ番号 (1から始まる) |
totalStepsEstimate |
数値 |
5 |
推定総ステップ数 (1 - 50) |
nextStepNeeded |
ブール値 |
必須 |
さらにステップが必要な場合は true、完了した場合は false |
source |
オブジェクト |
- |
見つかったソース: { url, summary, qualityScore? } |
knowledgeGap |
文字列 |
- |
特定された知識のギャップ — まだ不足しているもの |
isRevision |
ブール値 |
- |
以前のステップを修正する場合は true |
revisesStep |
数値 |
- |
修正するステップ番号 |
branchId |
文字列 |
- |
分岐調査の識別子 |
academic_search
Googleカスタム検索APIを介して学術論文を検索し、学術ソース (arXiv、PubMed、IEEE、Nature、Springerなど) にフィルタリングします。事前にフォーマットされた引用付きの論文を返します。
| パラメータ |
タイプ |
デフォルト |
説明 |
query |
文字列 |
必須 |
検索クエリ (1 - 500文字) |
num_results |
数値 |
5 |
論文の数 (1 - 10) |
year_from |
数値 |
- |
最小出版年でフィルタリング |
year_to |
数値 |
- |
最大出版年でフィルタリング |
source |
文字列 |
all |
all、arxiv、pubmed、ieee、nature、springer |
pdf_only |
ブール値 |
false |
PDFリンク付きの結果のみを返す |
sort_by |
文字列 |
relevance |
relevance、date |
patent_search
Google Patentsを検索して、先行技術、実施権解析 (FTO)、特許ランドスケーピングを行います。特許番号、権利者、発明者、PDFリンク付きの特許を返します。
| パラメータ |
タイプ |
デフォルト |
説明 |
query |
文字列 |
必須 |
検索クエリ (1 - 500文字) |
num_results |
数値 |
5 |
結果の数 (1 - 10) |
search_type |
文字列 |
prior_art |
prior_art、specific、landscape |
patent_office |
文字列 |
all |
all、US、EP、WO、JP、CN、KR |
assignee |
文字列 |
- |
権利者/会社でフィルタリング |
inventor |
文字列 |
- |
発明者名でフィルタリング |
cpc_code |
文字列 |
- |
CPC分類コードでフィルタリング |
year_from |
数値 |
- |
最小年でフィルタリング |
year_to |
数値 |
- |
最大年でフィルタリング |
MCPリソース
サーバーは MCPリソースプロトコル を介して状態を公開します。resources/list を使用して利用可能なリソースを発見し、resources/read を使用してそれらを取得します。
| URI |
説明 |
search://recent |
タイムスタンプと結果数付きの直近20件の検索クエリ |
config://server |
サーバーの設定 (バージョン、開始時間、トランスポートモード) |
stats://cache |
キャッシュの統計情報 (ヒット率、エントリ数、メモリ使用量) |
stats://events |
イベントストアの統計情報 (イベント数、ストレージサイズ) |
例 (MCP SDKを使用):
const resources = await client.listResources();
const recentSearches = await client.readResource({ uri: "search://recent" });
MCPプロンプト
事前構築された調査ワークフローテンプレートは MCPプロンプトプロトコル を介して利用可能です。prompts/list を使用してプロンプトを発見し、prompts/get を使用して引数付きのプロンプトを取得します。
基本的な調査プロンプト
| プロンプト |
引数 |
説明 |
comprehensive-research |
topic、depth (quick/standard/deep) |
トピックに関する複数ソースの調査 |
fact-check |
claim、sources (数値) |
複数のソースに対して主張を検証する |
summarize-url |
url、format (brief/detailed/bullets) |
単一のURLのコンテンツを要約する |
news-briefing |
topic、timeRange (day/week/month) |
トピックに関する現在のニュースの要約を取得する |
高度な調査プロンプト
| プロンプト |
引数 |
説明 |
patent-portfolio-analysis |
company、includeSubsidiaries |
会社の特許保有状況を分析する |
competitive-analysis |
entities (カンマ区切り)、aspects |
会社/製品を比較する |
literature-review |
topic、yearFrom、sources |
学術文献の総説 |
technical-deep-dive |
technology、focusArea |
詳細な技術調査 |
technical-deep-dive の焦点領域: architecture、implementation、comparison、best-practices、troubleshooting
例 (MCP SDKを使用):
const prompts = await client.listPrompts();
const research = await client.getPrompt({
name: "comprehensive-research",
arguments: { topic: "quantum computing", depth: "standard" }
});
const patents = await client.getPrompt({
name: "patent-portfolio-analysis",
arguments: { company: "Kaltura", includeSubsidiaries: true }
});
const comparison = await client.getPrompt({
name: "competitive-analysis",
arguments: { entities: "React, Vue, Angular", aspects: "performance, learning curve, ecosystem" }
});
テスト
| スクリプト |
説明 |
npm test |
すべての単体/コンポーネントテストを実行 (Jest) |
npm run test:e2e |
完全なエンドツーエンドのテストスイート (STDIO + HTTP + YouTube) |
npm run test:coverage |
コードカバレッジレポートを生成 |
npm run test:e2e:stdio |
STDIOトランスポートのエンドツーエンドテストのみ |
npm run test:e2e:sse |
HTTPトランスポートのエンドツーエンドテストのみ |
npm run test:e2e:youtube |
YouTubeトランスクリプトのエンドツーエンドテストのみ |
すべてのNPMスクリプト:
| スクリプト |
説明 |
npm start |
ビルドされたサーバーを実行 (本番環境) |
npm run dev |
ライブリロードで起動 (開発環境) |
npm run build |
TypeScriptを dist/ にコンパイル |
npm run inspect |
MCPインスペクターを開いて対話的なデバッグを行う |
テストの哲学と構造については、テストガイド を参照してください。
開発ツール
MCPインスペクター
MCPインスペクター はMCPサーバーの視覚的なデバッグツールです。ツールを対話的にテストし、リソースを閲覧し、プロンプトを検証するために使用します。
インスペクターを実行する:
npm run inspect
これにより、http://localhost:5173 でブラウザインターフェースが開き、STDIOを介してサーバーに接続されます。
期待される内容:
| 要素 |
数 |
項目 |
| ツール |
8 |
google_search、google_image_search、google_news_search、scrape_page、search_and_scrape、sequential_search、academic_search、patent_search |
| リソース |
6 |
search://recent、config://server、stats://cache、stats://events、search://session/current、stats://resources |
| プロンプト |
8 |
comprehensive-research、fact-check、summarize-url、news-briefing、patent-portfolio-analysis、competitive-analysis、literature-review、technical-deep-dive |
インスペクターの問題のトラブルシューティング:
- "Cannot find module" エラー: まず
npm run build を実行してください。インスペクターはコンパイルされたJavaScriptを必要とします。
- ツール呼び出しがAPIエラーで失敗する:
.env ファイルに GOOGLE_CUSTOM_SEARCH_API_KEY と GOOGLE_CUSTOM_SEARCH_ID が設定されていることを確認してください。
- ポート5173が使用中: インスペクターUIはポート5173で実行されます。そのポートを使用している他のサービスを停止するか、別のインスペクターインスタンスが実行中でないか確認してください。
- サーバーが起動時にクラッシュする: すべての依存関係がインストールされていること (
npm install)、Playwrightが設定されていること (npx playwright install chromium) を確認してください。
トラブルシューティング
- サーバーが起動しない:
.env ファイルに GOOGLE_CUSTOM_SEARCH_API_KEY と GOOGLE_CUSTOM_SEARCH_ID が設定されていることを確認してください。どちらかが欠落している場合、サーバーは明確なエラーで終了します。
- スクレイピング結果が空の場合: 永続的なキャッシュに古いエントリが含まれている可能性があります。
storage/persistent_cache/namespaces/scrapePage/ を削除し、再起動して新しいスクレイピングを強制的に行います。
- Playwright/Chromiumエラー:
npx playwright install chromium を再実行してください。Linuxでは、システム依存関係のために npx playwright install-deps chromium も実行してください。Dockerでは、これらは事前にインストールされています。
- ポート3000が使用中: 他のプロセスを停止し (
lsof -ti:3000 | xargs kill)、または PORT=3001 npm start を設定してください。
- YouTubeトランスクリプトが失敗する: 一部のビデオでは所有者によってトランスクリプトが無効にされている場合があります。エラーメッセージには具体的な理由 (例:
TRANSCRIPT_DISABLED、VIDEO_UNAVAILABLE) が含まれています。すべてのエラーコードについては、YouTubeトランスクリプトドキュメント を参照してください。
- キャッシュの問題:
/mcp/cache-stats を使用してキャッシュの健全性を確認するか、/mcp/cache-persist を使用して強制的に保存します。管理API を参照してください。
- OAuthエラー:
.env ファイルの OAUTH_ISSUER_URL と OAUTH_AUDIENCE を確認してください。/mcp/oauth-config を使用して現在の設定を確認します。
- Dockerのヘルスチェックが失敗する: ヘルスチェックはポート3000の
/health にアクセスします。これはHTTPトランスポートを必要とします。STDIOモード (MCP_TEST_MODE=stdio) では、ヘルスチェックは失敗します。これは正常な動作です。
ロードマップ
機能リクエストと改善点は GitHub Issues として追跡されています。貢献を歓迎します。
コントリビュート
あらゆる種類の貢献を歓迎します!詳細については コントリビューションガイド を参照してください。
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。詳細については LICENSE ファイルを参照してください。