oeis-mcp-server について
oeis-mcp-serverは、整数列の研究や探索をOn-Line Encyclopedia of Integer Sequences(OEIS)につなぎます。項からの整数列特定、OEIS構文での検索、項目情報や拡張項、相互参照の取得が可能です。
主な機能
- 01連続する項から整数列を特定
- 02OEIS検索構文で検索
- 03数式、プログラム、項目の各セクションを取得
- 04b-fileの項をページ単位で取得
- 05被参照・参照先の相互参照を確認
活用シーン
- 01観測値から整数列を特定
- 02著者、キーワード、数式で項目を検索
- 03整数列の数式やプログラムを確認
- 04OEIS項目間の参照をたどる
MCP 対応
MCPクライアントに6個のツールと1つの整数列JSONリソースを公開します。STDIOとStreamable HTTPに対応しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://oeis.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-oeis https://oeis.caseyjhand.com/mcp{"mcpServers":{"cyanheads-oeis":{"type":"http","url":"https://oeis.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-oeis":{"type":"http","url":"https://oeis.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-oeis":{"type":"http","url":"https://oeis.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-oeis":{"serverUrl":"https://oeis.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
6| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| start | integer | いいえ | 結果のオフセット:0、10、…、100(OEIS はクエリごとに最大 110 件を表示します)。前のページの nextStart を渡してください。 |
| terms | string | はい | 連続する最大 60 項を、カンマまたは空白で区切って指定します(例:「1, 2, 5, 14, 42」)。角括弧付きのリストや末尾に ... を付けた形式も使用できます。各項は最大 200 桁の整数、または未知の 1 項を表す _ です。 |
| matchSigns | boolean | いいえ | false(デフォルト)は符号を無視して照合するため、符号の規約が異なっていても数列が見つかります。true は符号の一致を必須とします。 |
詳細
@cyanheads/oeis-mcp-server
項から整数列を特定し、OEIS を検索して、数式、プログラム、b-file、相互参照を MCP 経由で読み取れます。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://oeis.caseyjhand.com/mcp
概要
整数列オンライン百科事典(OEIS)に収録された整数列を扱います。観測された少数の項から列を特定したり、OEIS 独自のクエリ構文で検索したり、エントリーの数式やプログラムを読んだり、b-file から拡張された項をページ単位で取得したり、相互参照をたどったりできます。すべての結果には oeis.org のページへのリンクが含まれます。API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
oeis_identify_sequence | 連続する項の並びを含む列を、OEIS の関連度順に、並びが始まるインデックスとともに特定します |
oeis_search_sequences | OEIS のクエリ構文で検索します。単語、引用符で囲んだフレーズ、項のリスト、および keyword: や author: などのプレフィックスに対応しています |
oeis_get_sequence | A 番号でエントリーを取得します。項、オフセット、キーワード、数式、プログラム、コメント、参考文献、リンク、相互参照を含みます |
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 の公開データを読み取ります。
インストール
- リポジトリをクローンします。
git clone https://github.com/cyanheads/oeis-mcp-server.git
- ディレクトリに移動します。
cd oeis-mcp-server
- 依存関係をインストールします。
bun install
- 環境を設定します。
cp .env.example .env
# optional: adjust OEIS_QUEUE_MAX_WAIT_MS, the transport, or the log level
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
OEIS_QUEUE_MAX_WAIT_MS | pacer_shed と retryAfter を伴って失敗するまでに、oeis.org のリクエストキューで呼び出しが待機する最大時間(ミリ秒)です。各呼び出しの 50 秒の期限にはリクエスト自体の処理時間も含まれるため、設定値にかかわらず待機時間は約 35,000 ミリ秒で打ち切られます。 | 30000 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモード: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_ENABLED | OpenTelemetry を有効にします。 | 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.ts | createApp() のエントリーポイントです。ツールとリソースを登録し、サーバーの指示を設定して、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/oeis | oeis.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 ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。