mcpField
O
oeis-mcp-server

oeis-mcp-server

リモート
github.com/cyanheads科学・教育11 週間前に更新
リポジトリ

oeis-mcp-server について

oeis-mcp-serverは、整数列の研究や探索をOn-Line Encyclopedia of Integer Sequences(OEIS)につなぎます。項からの整数列特定、OEIS構文での検索、項目情報や拡張項、相互参照の取得が可能です。

主な機能

  1. 01連続する項から整数列を特定
  2. 02OEIS検索構文で検索
  3. 03数式、プログラム、項目の各セクションを取得
  4. 04b-fileの項をページ単位で取得
  5. 05被参照・参照先の相互参照を確認

活用シーン

  1. 01観測値から整数列を特定
  2. 02著者、キーワード、数式で項目を検索
  3. 03整数列の数式やプログラムを確認
  4. 04OEIS項目間の参照をたどる

MCP 対応

MCPクライアントに6個のツールと1つの整数列JSONリソースを公開します。STDIOとStreamable HTTPに対応しています。

設定

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

エンドポイントhttps://oeis.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/oeis-mcp-server0.1.3

ツール

6
パラメーター型必須説明
startintegerいいえ結果のオフセット:0、10、…、100(OEIS はクエリごとに最大 110 件を表示します)。前のページの nextStart を渡してください。
termsstringはい連続する最大 60 項を、カンマまたは空白で区切って指定します(例:「1, 2, 5, 14, 42」)。角括弧付きのリストや末尾に ... を付けた形式も使用できます。各項は最大 200 桁の整数、または未知の 1 項を表す _ です。
matchSignsbooleanいいえfalse(デフォルト)は符号を無視して照合するため、符号の規約が異なっていても数列が見つかります。true は符号の一致を必須とします。

詳細

@cyanheads/oeis-mcp-server

項から整数列を特定し、OEIS を検索して、数式、プログラム、b-file、相互参照を MCP 経由で読み取れます。STDIO または Streamable HTTP に対応しています。

6 個のツール • 1 個のリソース

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

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


概要

整数列オンライン百科事典(OEIS)に収録された整数列を扱います。観測された少数の項から列を特定したり、OEIS 独自のクエリ構文で検索したり、エントリーの数式やプログラムを読んだり、b-file から拡張された項をページ単位で取得したり、相互参照をたどったりできます。すべての結果には oeis.org のページへのリンクが含まれます。API キーは不要です。

ツール
ツール説明
oeis_identify_sequence連続する項の並びを含む列を、OEIS の関連度順に、並びが始まるインデックスとともに特定します
oeis_search_sequencesOEIS のクエリ構文で検索します。単語、引用符で囲んだフレーズ、項のリスト、および keyword: や author: などのプレフィックスに対応しています
oeis_get_sequenceA 番号でエントリーを取得します。項、オフセット、キーワード、数式、プログラム、コメント、参考文献、リンク、相互参照を含みます
oeis_get_termsエントリーの b-file から a(n) の項をインデックス付きで一覧表示します。b-file がない場合は、データ行から取得します
oeis_get_cross_refsエントリーが相互参照している列、またはそのエントリーに言及しているエントリーを一覧表示します
oeis_list_reference上流への呼び出しを行わずに、キーワードフラグ、検索構文、識別子とオフセットの規則を説明します
リソース
リソース説明
oeis://sequence/{aNumber}A 番号による単一のエントリーを JSON で返します。常に全体を取得します

ツールのみを呼び出すクライアント向けに、同じレコードを oeis_get_sequence でも利用できます。

機能リファレンス

oeis_identify_sequence ツール
  • terms:カンマまたはスペースで区切った、最大60個の連続する項(角括弧で囲んだリスト、または末尾の ... も使用できます)。各項は最大200桁の整数、または不明な項を表す _ です。matchSigns(既定値は false)は、設定しない限り符号を無視します
  • 1ページあたり候補は最大10件です。start は0~100を10刻みで指定します。各行には oeis_search_sequences の行フィールドに加えて、該当する項列がそのエントリのデータ行内で始まる位置を示す n を表す matchStartIndex が含まれます(該当する項列がない場合は省略されます)
  • 一致なしと「結果が多すぎます」は、どちらも空のページを返します。notice にどちらなのかと再試行方法(先頭の項を削る、共通因数で割る、または項を追加する)が示されます。OEIS が項列との一致を調べるのは各エントリのデータ行内のみ(最大約270文字)で、b-file は対象外です。すべての非ゼロ項が10桁以上の場合、4桁以上の項が5個以上あり、それらの値が互いに10%以内に収まる場合、または項列が270文字を超える場合は、結果が0件であることを示す通知にこの制限が記載されます

oeis_search_sequences ツール
  • query(1~1,000文字)は入力どおりに送信されます。単語、"引用符で囲まれたフレーズ"、項のリスト、keyword:、author:、name:、formula:、xref:、id: などのプレフィックス、OR を表す |、および除外を表す先頭の - を使用できます
  • sort:relevance(既定値)、number、created、または modified。1ページあたり10件で、start は0~100を10刻みで指定します
  • 各行には oeis_get_sequence と同じ形式で、name、terms、offset / firstIndex、keywords、author、legacyIds、modified(最後の編集日時。オフセット付きの ISO 8601 形式)、url が含まれます。OEIS に情報がない場合、author と legacyIds は省略されます
  • totalCount と、OEIS が解析したクエリである effectiveQuery が報告されます。OEIS がクエリを項の列1つとして解析した場合(effectiveQuery に seq: または signed: と項が表示される場合。カンマ区切りの数字だけの場合と同様)、oeis_identify_sequence と同じく各エントリのデータ行内で一致を調べます。この場合に0件だったことを示す通知には、同じ条件のもとでその制限が記載されます
  • 数字をスペースだけで区切ると、OEIS は最初の項の後に負の項がある場合、その位置で新しい項列を開始し、3個未満の数字は結合しません。effectiveQuery にこの分割が表示されている場合、通知にはその旨と、1つの項列として検索するためにカンマで結合した項が示されます

oeis_get_sequence ツール
  • name、terms、offset / firstIndex、keywords、author、legacyIds、referenceCount、revision、created / modified、url、bFileUrl と、comments、formulas、examples、programs、references、links、crossReferences、extensions の8つのセクションを返します
  • セクションのシリアライズ済み JSON が24,000文字を超える場合、kind: "outline" はコアフィールドと、サイズを含む sections リストを返します。取得するセクションを指定するには、sections(例:["formulas", "programs"])を渡します
  • 選択した内容が100,000バイトを超える場合、項目の途中で分割されずに複数パートで返されます。次のパートを取得するには、各パートの nextFromItem を fromItem として渡し、同じ sections を指定します。sections に含まれないセクションを fromItem で指定すると、from_item_not_selected エラーになります
  • 不明な A 番号を指定すると sequence_not_found エラーになります。取り下げられた(dead)、予約済み、および再利用されたエントリは notice とともに返されます

oeis_get_terms tool
  • fromIndex(デフォルト:利用可能な最初のインデックス)と limit(デフォルト:100。1 回の呼び出しで返せるのは最大 1,000 項のため、1,000 を超える limit は 1,000 として処理されます)。スライスは約 100,000 バイトに達した時点、または b-file の 1 MiB パートの末尾で停止し、nextFromIndex で続きを取得できます
  • source: "bfile" はエントリの b-file を 1 MiB パート単位で読み取るため、最初の 1 MiB を超える fromIndex では、ペース制御されたリクエストが 1~2 回余分に必要です。bFileCut: true は、ファイルが lastAvailableIndex を超えて続いていることを示します。source: "data" は、エントリに b-file がなく、項がデータ行に記載されていることを示します
  • 項は { n, value } として返され、value は正確な 10 進文字列です。認識されない A 番号の場合は sequence_not_found エラーになります
  • 空行でも # コメントでも n a(n) のペアでもない b-file の行はスキップされ、その数は notice に記載されます。ペアが一つも含まれていない b-file は upstream_unparseable エラーになり、キャッシュされません

oeis_get_cross_refs tool
  • direction: "outgoing"(デフォルト)は、エントリの相互参照行に記載された A 番号を、それぞれの横に書かれた note と行の内容そのままの lines とともに一覧表示します。"incoming" は、その A 番号に言及しているエントリを一覧表示します
  • 1 ページあたり 10 行で、start は 0~100 の範囲を 10 刻みで指定します。各行には url が含まれ、解決済みの行には名前、項、オフセット、キーワード、著者、旧 ID、最終編集日時(modified)も含まれます
  • outgoing ページの名前検索がレート制限、利用不可、またはタイムアウトになった場合、エラーにする代わりに、再試行を促す通知とともに resolved: false の行を返します。sequence_not_found が適用されるのは outgoing のみです

oeis_list_reference tool
  • topic:keywords(nonn、core、tabl、cons などのフラグ)、search_syntax(接頭辞、演算子、ワイルドカード、並べ替え順、ページング)、または identifiers(A 番号、旧 M/N 番号、オフセット、b-file)
  • 静的テーブルから entries(name、description)と notes を返します

oeis://sequence/{aNumber} resource
  • 完全なエントリを application/json として返します。これは oeis_get_sequence が kind: "full" で返すレコードで、概要表示にはなりません
  • aNumber はツールと同じ形式を使用します(oeis://sequence/A108 は A000108 を読み取ります)。認識されない A 番号の場合は sequence_not_found エラーになります

Features

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

OEIS 固有の機能:

  • ペース制御とキャッシュを備えた oeis.org クライアントを 1 つ使用します(ペース制御とキャッシュを参照)。検索では「結果なし」と「結果が多すぎる」を区別し、一致件数も報告します
  • 柔軟な A 番号形式に対応しています。A000045、a000045、A45、45、oeis.org のシーケンス URL は、どのツールでも解決できます。旧形式の M/N 書籍番号は oeis_search_sequences を参照します
  • 項の正確性を保持します。すべての項と b-file の値は 10 進文字列のため、2^53 を超える値もすべての桁が保持されます
  • 貼り付けた項の並びは正規化されます。角括弧、末尾の ...、Unicode のマイナス記号、カンマとスペースの混在区切りに対応しています

エージェント向けの出力:

  • 各ページにページング情報(truncated、shown、cap。OEIS が報告する場合は totalCount と effectiveQuery も)と、絞り込み方法や続きを取得する方法を示す notice を含みます
  • 復旧のヒントを含む型付きエラー:sequence_not_found、from_item_not_selected、upstream_unparseable、pacer_shed、upstream_rate_limited。レート制限エラーには、判明している場合 retryAfter も含まれます
  • 識別可能な出力(kind、source、行ごとの resolved)により、呼び出し側は文字列を解析せずデータに基づいて分岐できます
  • すべてのレコードと行に https://oeis.org/A###### URL が含まれます。投稿者が記述したテキストはコードスパンとコードフェンスで表示されるため、Markdown クライアントでは数式や名前が記述どおりに表示されます。また、保持されるリンク URL は http と https のみです

ペーシングとキャッシュ

oeis.org は、自動化されたクライアントにリクエスト間で10秒待つよう求めています。サーバーは一度に1件ずつ上流へのリクエストを送信し、すべてのツールを通じて、各リクエストを前回から少なくとも10秒後に開始します。結果はメモリにキャッシュされるため、同じ検索を繰り返す場合は即座に返され、oeis.org への負荷もかかりません。レコードは24時間、または検索結果から後続の編集が判明するまでキャッシュされます(その場合は条件付きリクエストで再検証されます)。検索ページは1時間、b-file の一部は7日間キャッシュされます。取得したレコードに b-file が記載されていた場合、そのエントリの「b-file なし」というキャッシュ済みの回答は直ちに破棄されます。

キャッシュにないデータを求める呼び出しは、キューで順番を待ちます。待ち時間が OEIS_QUEUE_MAX_WAIT_MS(デフォルトでは30,000 ms)を超える場合、呼び出しは待ち続けず、retryAfter とともに pacer_shed で失敗します。oeis.org が429を返すと、サーバーは再試行する前にキュー内のすべての呼び出しを保留し、再試行を使い切ると upstream_rate_limited を報告します。ペーシングはサーバープロセスごとに適用されます。

既知の制限事項

  • 匿名でのページ取得は、クエリごとに上流側で110件までに制限されています(start ≤ 100)。たとえば、A000045 への参照6,161件は、最初の110件のみ取得できます。
  • OEIS が広すぎると判断したクエリは結果を返しません(「Too many results」)。単語1つ(prime)や2項の並びでは、よく発生します。サーバーはその旨を報告しますが、ページ分割はできません。
  • OEIS は未知のプレフィックスを拒否せず、通常の単語として検索します。該当なしの通知にはそのプレフィックスが示されます。
  • 項の照合(oeis_identify_sequence および、裸の数値または seq: / signed: の項を使う oeis_search_sequences クエリ)では、各エントリのデータ行のみを検索し、b-file は検索しません。データ行は短く、測定した105件(2026-10-01)では、符号を含めて最大269文字でした。データ行の範囲外から始まる並びや、約270文字を超える並びは見つかりません。
  • oeis_get_terms は1回の呼び出しで、b-file の先頭部分より後の1 MiBの部分を最大2つ読み取ります。それより深いインデックスを指定すると、再度呼び出すよう通知が返され、キャッシュ済みの部分から読み取りを続行します。バイト範囲リクエストまたは強い ETag に対応しない b-file は、最初の1 MiB までしか読み取られません。
  • oeis_get_cross_refs の出方向の参照も start ≤ 100 の上限が適用されるため、異なる A-number を110件超記載するエントリでは、最初の110件のみ一覧表示されます。lines には引き続きすべて記載されます。

データとライセンス

OEIS のコンテンツは、OEIS エンドユーザーライセンス契約に基づき、CC BY-SA 4.0 でライセンスされています。再利用する場合は、「The On-Line Encyclopedia of Integer Sequences」とクレジットを記載し、https://oeis.org/ または該当する数列のページへのリンクを付けてください。サーバーが返すすべてのレコードには、その目的のための https://oeis.org/A###### URL が含まれています。継承表示が適用されるため、OEIS コンテンツの改変物は同じライセンスで共有する必要があります。

このサーバーは独立したプロジェクトであり、OEIS Foundation との提携や、同団体からの推奨を受けていません。

はじめに

公開ホストインスタンス

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

{
  "mcpServers": {
    "oeis-mcp-server": {
      "type": "streamable-http",
      "url": "https://oeis.caseyjhand.com/mcp"
    }
  }
}

ホストインスタンスを利用するすべての呼び出し元は、10秒に1件という oeis.org へのリクエストペースを共有します。キャッシュ済みの検索結果は即座に返されます。継続的に利用する場合は、独自のインスタンスを実行してください。

セルフホスト/ローカル

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

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

または npx を使います(Bun は不要です)。

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

または Docker を使います。

{
  "mcpServers": {
    "oeis-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/oeis-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 キーやアカウントは不要です。サーバーは oeis.org の公開データを読み取ります。
インストール
  1. リポジトリをクローンします。
git clone https://github.com/cyanheads/oeis-mcp-server.git
  1. ディレクトリに移動します。
cd oeis-mcp-server
  1. 依存関係をインストールします。
bun install
  1. 環境を設定します。
cp .env.example .env
# optional: adjust OEIS_QUEUE_MAX_WAIT_MS, the transport, or the log level

設定

変数説明デフォルト
OEIS_QUEUE_MAX_WAIT_MSpacer_shed と retryAfter を伴って失敗するまでに、oeis.org のリクエストキューで呼び出しが待機する最大時間(ミリ秒)です。各呼び出しの 50 秒の期限にはリクエスト自体の処理時間も含まれるため、設定値にかかわらず待機時間は約 35,000 ミリ秒で打ち切られます。30000
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポート。3010
MCP_SESSION_MODEHTTP セッションモード:stateless、stateful、または auto。stateless
MCP_AUTH_MODE認証方式:none、jwt、または oauth。none
MCP_LOG_LEVELログレベル(debug、info、warning、error など)。info
LOGS_DIRログファイルのディレクトリ(Node.js のみ)。<app-root>/logs
STORAGE_PROVIDER_TYPEストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。in-memory
OTEL_ENABLEDOpenTelemetry を有効にします。false

すべてのサーバー設定と共通フレームワークのオーバーライドについては、.env.example を参照してください。

サーバーの実行

ローカル開発
  • 本番バージョンをビルドして実行する:

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

    bun run devcheck  # Lints, formats, type-checks, and more
    bun run test      # Runs the test suite
    

プロジェクト構成

ディレクトリ用途
src/index.tscreateApp() のエントリーポイントです。ツールとリソースを登録し、サーバーの指示を設定して、OEIS サービスを起動します。
src/configサーバー固有の環境変数を解析し、Zod で検証します。
src/mcp-server/toolsツールの定義(*.tool.ts)です。ツールは 6 つです。
src/mcp-server/resourcesリソースの定義です。oeis://sequence/{aNumber} リソースを定義します。
src/mcp-server/shared定義間で共有するスキーマ(A 番号の入力、ページング、概要行)、コントリビューターが記述するテキスト用の Markdown ヘルパー、データ行数の制限テスト、および用語の照合結果がゼロ件の場合に表示する通知で共有される文です。
src/services/oeisoeis.org クライアントです。ペーサー、再試行、フェッチ境界、LRU キャッシュ、レコードの正規化、内部形式のパーサーを扱います。
tests/src/ の構成に対応する単体テストです。上流からのレスポンスにはフィクスチャを使用し、ライブサイトにはアクセスしません。

開発ガイド

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

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジック内では try/catch を使用しません。
  • ログには ctx.log を、通知、合計、ページングのコンテキストには ctx.enrich を使用します。
  • 新しいツールとリソースは、src/mcp-server/*/definitions/index.ts のバレルファイルに登録します。
  • 外部 API 呼び出しはラップします。生データを検証し、ドメイン型に正規化してから、出力スキーマに沿って返します。不足しているフィールドを捏造してはいけません。

貢献

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

bun run devcheck
bun run test

ライセンス

このプロジェクトは Apache 2.0 ライセンスの下でライセンスされています。詳細は LICENSE ファイルを参照してください。

コメント

MCP は初めてですか?

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

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