mcpField
W
wikipedia-mcp-server

wikipedia-mcp-server

リモート
github.com/cyanheads検索44 日前に更新
リポジトリ

wikipedia-mcp-server について

wikipedia-mcp-serverは、Wikipediaの検索や記事閲覧機能をMCPクライアントに提供します。多言語版、指定セクションの取得、近隣ページの検索に対応しています。

主な機能

  1. 01Wikipedia記事の検索
  2. 02要約と全文の取得
  3. 03指定セクションの取得
  4. 04位置情報付き近隣ページの検索
  5. 05記事の言語版一覧の取得

活用シーン

  1. 01トピックの資料や背景の調査
  2. 02記事から関連セクションだけを読む
  3. 03座標付近のページを調べる

MCP 対応

検索、記事・セクションの取得、近隣ページ検索、言語版の照会など、6種類のWikipediaツールをMCPクライアントに公開します。STDIOとStreamable HTTPに対応しています。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://wikipedia.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/wikipedia-mcp-server0.2.8

ツール

6
パラメーター型必須説明
limitintegerいいえページあたりの最大結果数(デフォルトは 10、最大は 50)。正の整数である必要があります。
querystringはい検索クエリ(例:"Python programming language")。空にすることはできません。
offsetintegerいいえページネーション用の結果オフセット(デフォルトは 0)。次のページを取得するには、前回のレスポンスの nextOffset を渡します。1 ページあたりの件数は引き続き limit で指定します。オフセットが一致件数の合計を超えると、エラーではなく空の結果配列が返されます。Wikipedia は 10,000 件を超える結果を提供しないため、オフセットがその値以上の場合は失敗します。代わりにクエリを絞り込んでください。
languagestringいいえWikipedia 言語版コード(デフォルトは "en")。例:"fr"、"de"、"ja"。

詳細

@cyanheads/wikipedia-mcp-server

MCP 経由で Wikipedia の記事を検索し、要約や全文を読み、セクションを指定し、近くのページを探し、言語版を一覧表示できます。STDIO または Streamable HTTP に対応しています。

6 個のツール

バージョン ライセンス Docker MCP SDK npm TypeScript Bun

Claude Desktop にインストール Cursor にインストール VS Code にインストール

フレームワーク

公開ホスト型サーバー: https://wikipedia.caseyjhand.com/mcp


概要

あらゆる言語版の Wikipedia を利用できます。記事を検索し、要約または必要なセクションだけを読み、座標の近くにあるジオタグ付きページを探し、記事の言語版を一覧表示できます。

ツール
ツール説明
wikipedia_search_articlesWikipedia 全体を全文検索し、短い説明、Wikidata QID、プレーンテキストの抜粋、ページ ID を含む関連度順の結果と、Wikipedia によるスペル候補を返します。
wikipedia_get_summary任意の記事の短い要約を取得します。プレーンテキスト、Wikidata QID、説明、サムネイル URL、ページ種別、正規 URL、改訂版、座標を返します。
wikipedia_get_article記事全体、または指定したセクションを、セクションマーカーを保持した整形済みプレーンテキストで取得します。正規 URL と読み取り元の改訂版も返します。
wikipedia_get_sectionsセクションを指定して読み取るための section_index 値を含む目次を取得します。
wikipedia_search_nearbyWGS 84 座標から指定半径内にあるジオタグ付き Wikipedia 記事を距離順に取得します。短い説明と Wikidata QID も含まれます。
wikipedia_get_languages記事で利用可能なすべての言語版について、タイトルと URL を取得します。または、指定した言語版だけを取得できます。

機能リファレンス

wikipedia_search_articles tool
  • フリーテキストの query(空の場合は empty_query で失敗します)、正の整数の limit(デフォルトは 10、上限は 50)、およびページネーション用の offset を受け取り、エンリッチメントとして nextOffset を返します。上限が適用された呼び出しでのみ、requestedLimit、appliedLimit、および上限に関する通知が含まれます。Wikipedia は 10,000 件目を超える結果を返さないため、offset がその値以上の場合は offset_too_large で失敗し、その範囲の最後で終わるページにはエンリッチメントとして truncated が含まれます
  • CirrusSearch の演算子には、incategory:"1648 treaties"、morelike:Peace of Westphalia、intitle:Python、hastemplate:Infobox、insource:Python などがあります(対応状況はインストール環境によって異なります)。sort のデフォルトは relevance です。代替値は last_edit_desc、create_timestamp_desc、incoming_links_desc、title_natural_asc です。エンリッチメントには sort がそのまま含まれます。ページネーション時は、sort と query を変更せずに使用してください
  • 各結果にはプレーンテキストの抜粋、ページ ID、単語数に加えて、記事にある場合は短い description と Wikidata QID(wikibase_item)が含まれます。エンリッチメントの suggestion には、Wikipedia によるスペル修正(einstien → einstein)が含まれます
  • 無効または複雑すぎる insource:/…/ および intitle:/…/ の正規表現は、invalid_query、upstreamCode、および正規表現を修正または簡略化するか、演算子を削除するよう促す案内を返して失敗します。正規表現検索が混雑している場合は、再試行できます

wikipedia_get_summary tool
  • title を受け取り、REST の要約抜粋(リード冒頭の一部です。リード全体を読むには section_index: 0 を指定して wikipedia_get_article を使用します)に加えて、短い説明、サムネイル URL、Wikidata QID(wikibase_item)、およびジオタグ付き記事の場合は wikipedia_search_nearby にそのまま渡せる latitude / longitude を返します
  • page_type は standard / disambiguation / no-extract を区別します(disambiguation の場合は wikipedia_search_articles で再検索してください)。url、revision_id、last_modified は読み取った版を示し、?oldid=<revision_id> はその版への固定リンクです
  • 既存のページに要約抜粋がない場合も、メタデータと空の extract を返して成功し、正規 URL を開くか section_index: 0 を試すよう案内します。名前空間ページには記事本文ではなく、ドキュメントが含まれる場合があります。説明が空の場合は省略されます。タイトルが見つからない場合は、引き続き not_found で失敗します

wikipedia_get_article ツール
  • section_index を指定しない場合:== Section == マーカー付きの記事全文を返します。ただし、WIKIPEDIA_ARTICLE_OVERFLOW_BYTES(デフォルトは 80,000 bytes)を超える場合は、セクションの概要(truncated: true)を返します。wikipedia_get_sections の section_index を指定した場合(導入部は 0):そのセクションと入れ子になったサブセクションを返します
  • 概要の項目には、利用可能な場合、検証済みの section_index が含まれます。導入部は 0 です。曖昧な見出しやインデックスのない見出しには、セクション一覧へのフォールバックが使われます。目次の検証は短時間で 1 回だけ試行し、検証できない場合はその旨を示します
  • リダイレクトでは redirected_from と、セクションを対象とする場合は redirect_section が示されます。全文の読み取りは全文のまま返され、対象を絞った読み取り方法も案内されます。明示的に section_index を指定した場合は、0 を含め、そちらが優先されます
  • すべての読み取りで url と revision_id が返されます(?oldid=<revision_id> は読み取ったテキストへの恒久リンクです)。概要を含む全文の読み取りでは、last_modified も返されます。WIKIPEDIA_BASE_URL が設定されている場合、セクションの読み取りでは url が省略されます
  • セクションの読み取りでは、系統樹のクレードをインデント付きの分岐としてコードフェンス内に表示し、各行のラベルと葉を対応付け、名前のない分岐も保持します。解析できないツリーは [table omitted: unparseable clade] として残ります。ツリーには table_index がありません
  • セクションの読み取りでは、データテーブルはパイプ区切りの行として、インフォボックスは label: value の行として返されます。これらは記事全文の抽出では除外されます。レンダリング後のサイズが 40,000 bytes を超えるテーブルは、[table omitted: N rows (table T)] マーカーとして残ります。セクションとともに table_index: T を渡すと、そのテーブルを完全な行単位のページで読み取れます。続きは、同じ入力値で next_cursor を cursor として渡してください。続きの読み取りでは、1 ページ目のリビジョンが使われます。キャプションとヘッダーは 1 回だけ表示されます。各ページのテーブルテキストは、両方のサーフェスで 40,000 UTF-8 bytes 以内に収まります。ただし、分割できない大きな行、または 1 ページ目のキャプション/ヘッダーだけが返される場合は例外で、その場合は oversized_row: true が付きます

wikipedia_get_sections ツール
  • title を受け取り、セクションタイトル、見出しレベル、階層番号(例:"2.1")、および wikipedia_get_article に渡す section_index を返します。最初の項目は導入部です(index: 0、タイトルは Introduction)
  • 見出しタイトルには、記事レンダラーと同じスクリプト、数式、空白、および単一パスのエンティティ正規化が適用されます。そのため、セクション一覧、記事の読み取り、検証済みの概要項目で CO₂ は同じ表記になります
  • スタブ記事または非常に短い記事では no_sections で失敗します。その場合は代わりに wikipedia_get_article で読み取ってください
  • リダイレクトの別名では redirected_from と、省略可能な redirect_section が示されます。redirect_section_index は、一意のアンカーが実際の数値の目次インデックスに一致する場合にのみ表示されます

wikipedia_search_nearby ツール
  • latitude は −90…90、longitude は −180…180(WGS 84)、radius_meters は 10~10,000(デフォルトは 1000)、limit は正の整数(デフォルトは 10、上限は 500)です。limit を超えるページネーションはありません。補足情報の truncated フラグは、limit の上限によって一致結果がさらにあることを示します。Wikipedia の上限である 500 件の場合は、半径を狭めて再検索してください。上限が適用された呼び出しにのみ、requestedLimit、appliedLimit、上限適用の通知が含まれます
  • distance_meters の昇順で記事を返し、座標、短い description、Wikidata QID(wikibase_item)を含みます。各記事の位置は、その記事自体の GeoData 座標タグによって決まり、Wikidata 項目の座標では決まりません。そのため、誤ったタグが付いた記事は、そのタグが示す位置に表示されます

wikipedia_get_languages ツール
  • title を受け取り、各言語版の language_code、edition_code、記事タイトル、URLに加え、解決後のタイトルである source_title を返します。他のツールで language として渡すのは language_code ではなく edition_code です。この 2 つは異なる場合があります(gsw と als)
  • editions を指定すると、一覧を要求されたコードに絞り込みます。記事が存在しないコードは missing に返され、total_languages はフィルター適用前の件数のままです。記事に翻訳がない場合は no_other_languages で失敗します。フィルターに一致する項目がない場合は、失敗ではなく空のリストを返します

特長

@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、差し替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースを備えた構造化ログに対応しています。

Wikipedia 固有の機能:

  • 2 種類の API を統合しています。概要には MediaWiki REST API(/api/rest_v1/)、検索、全文、セクション、地理検索、言語リンクには Action API(/w/api.php)を使用します
  • 必須リクエストではすべてリトライとバックオフを行います。HTTP 200 の本文内で Action API が返す一時的な拒否(検索過多、レート制限、読み取り専用)も対象です。上流の Retry-After を尊重し、各リクエストのリトライは 30 s 以内に制限されます。検索結果の説明取得はベストエフォートで短時間の試行を 1 回だけ行います。Wikimedia API ポリシーに従い、User-Agent ヘッダーを設定します
  • すべての読み取り処理では、単一のレンダラーを通して HTML を同一形式のプレーンテキストに変換します。== Heading == マーカーを使用し、リスト項目は 1 行に 1 つ、上付き文字は保持し、コードはフェンスで囲みます。対象は、Action API の HTML 抽出による記事全文、パーサーが生成するセクションの HTML によるセクション、REST の extract_html による概要です。セクションの読み取りには、抽出データに含まれないデータテーブル、インフォボックス、レイアウトテーブル内のリストも含まれます
  • すべてのツールで呼び出しごとに language パラメーターを指定できます(デフォルトは en)。1 つのセッションですべての Wikipedia 言語版にアクセスできます。記事タイトルを読み取る際は、すべてリダイレクトに従います
  • MediaWiki の action=sitematrix エンドポイントから取得する、最新の言語版レジストリ(24 時間キャッシュ)で言語を検証します。これにより、形式上は有効でも実在しない言語版がタイムアウトを引き起こす前に検出できます

エージェントに適した出力:

  • 概要の page_type は standard / disambiguation / no-extract を区別するため、文字列の解析は不要です
  • 概要、検索結果、近隣検索結果の wikibase_item(Wikidata QID)により、wikidata-mcp-server と直接相互参照できます
  • 記事本文、抜粋、タイトルは、Markdown の content[] 表示に渡す際にバックスラッシュでエスケープされます。そのため、マークアップや Markdown 構文について記述した記事も、クライアントに解釈されずそのまま表示されます。structuredContent には同じテキストがエスケープされずに格納されます。フェンス付きコードブロックとテーブル行の区切りはエスケープされず、テーブルセルはエスケープされます
  • 目次項目の section_index は、wikipedia_get_article の対象読み取りパラメーターに直接対応します。インデックス 0 も含まれます
  • MediaWiki でページ名に使用できない文字(< > [ ] { }、複数タイトルの区切り文字 |、パーセントエスケープ、特殊なチルダ、相対パス)は、リクエスト前に拒否され、invalid_title が返されます。末尾の #fragment は受け付けられ、通常どおり解決されます
  • あらゆる種類のエラーに復旧のヒントを付けます。呼び出し元は実行可能な次の手順(例:「正しいタイトルを見つけるには wikipedia_search_articles を使用してください」)を確認できます

はじめに

公開ホストインスタンス

公開インスタンスは https://wikipedia.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP 経由で任意の MCP クライアントから接続してください。

{
  "mcpServers": {
    "wikipedia-mcp-server": {
      "type": "streamable-http",
      "url": "https://wikipedia.caseyjhand.com/mcp"
    }
  }
}
セルフホスト/ローカル

以下を MCP クライアントの設定ファイルに追加してください。

{
  "mcpServers": {
    "wikipedia-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/wikipedia-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、npx を使用する場合(Bun は不要です):

{
  "mcpServers": {
    "wikipedia-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/wikipedia-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、Docker を使用します。

{
  "mcpServers": {
    "wikipedia-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "ghcr.io/cyanheads/wikipedia-mcp-server:latest"
      ]
    }
  }
}

Streamable HTTP を使用する場合は、トランスポートを設定してサーバーを起動します。

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
  • Bun v1.4.0 以降(または Node.js v24 以降)。
  • API キーは不要です。Wikipedia の API は公開されています。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/wikipedia-mcp-server.git
  1. ディレクトリに移動します:
cd wikipedia-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します(任意):
cp .env.example .env
# edit .env if you want to customize WIKIPEDIA_USER_AGENT or logging

設定

変数説明デフォルト
WIKIPEDIA_USER_AGENTWikimedia API リクエストごとに送信される User-Agent ヘッダーです。デプロイ環境に合わせてカスタマイズしてください。wikipedia-mcp-server/0.2.8 (https://github.com/cyanheads/wikipedia-mcp-server)
WIKIPEDIA_BASE_URL単一インスタンスを対象とする任意の上書き設定です。未設定(デフォルト)の場合、言語ごとのホストを組み立て、呼び出しごとに language でエディションを選択します。完全なベース URL(例:プライベートな MediaWiki ミラー)を設定すると、すべての呼び出しをその固定ホストにルーティングします。この場合、language でホストは切り替わりません。(未設定)
WIKIPEDIA_ARTICLE_OVERFLOW_BYTES全文記事の読み取り(section_index を指定しない wikipedia_get_article)でこのバイト数を超えると、全文の代わりにセクションの概要を返します。このドメインに合わせて調整されており、通常の記事は全文のままです。概要が返されるのは、実際に巨大な記事(第二次世界大戦:約86 KB、アメリカ合衆国:約94 KB)のみです。セクションを指定した読み取りには影響しません。80000
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポートです。3010
MCP_SESSION_MODEHTTP セッションモード:stateless、stateful、または auto(stateful に解決されます)。Docker イメージでは stateless が設定されています。auto
MCP_AUTH_MODE認証モード:none、jwt、または oauth。none
MCP_LOG_LEVELログレベル(RFC 5424)です。info
LOGS_DIRログファイルのディレクトリです(Node.js のみ)。<project-root>/logs
LOG_TOOL_FAILURE_PAYLOADS失敗した各ツール呼び出しの引数と結果を、キー名で機密情報を伏せ、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)を上限としてログに記録します。自由形式の値に含まれるシークレットは伏せられません。false
OTEL_ENABLEDOpenTelemetry の計装(スパン、メトリクス、完了ログ)を有効にします。false

任意の上書き設定の全一覧は .env.example を参照してください。

サーバーの実行

ローカル開発
  • ビルドして実行:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • チェックとテストを実行:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    
Docker
docker build -t wikipedia-mcp-server .
docker run --rm -p 3010:3010 wikipedia-mcp-server

Dockerfile では、デフォルトで HTTP トランスポート、ステートレスセッションモードを使用し、ログを /var/log/wikipedia-mcp-server に出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。

プロジェクト構成

ディレクトリ用途
src/index.tscreateApp() のエントリーポイントです。ツールを登録し、Wikipedia サービスを初期化します。
src/configZod を使用してサーバー固有の環境変数を解析・検証します。
src/mcp-server/toolsツール定義(*.tool.ts)です。ツールごとに1ファイルを使用します。
src/services/wikipediaWikipediaService です。リトライ/バックオフと言語検証に対応した REST API および Action API クライアントを提供します。
tests/src/ に対応する単体テストと統合テストです。

開発ガイド

開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで try/catch を使用しないでください
  • リクエストスコープのログには ctx.log、テナントスコープのストレージには ctx.state を使用してください
  • 新しいツールは src/mcp-server/tools/definitions/index.ts に登録してください
  • 外部 API 呼び出しはラップしてください。生データを検証し、ドメイン型に正規化してから出力スキーマを返します。不足しているフィールドを捏造しないでください

コントリビューション

Issue を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。