mcpField
I
iana-registries-mcp-server

iana-registries-mcp-server

リモート
github.com/cyanheads開発ツール12 週間前に更新
リポジトリ

iana-registries-mcp-server について

IANAのプロトコルレジストリを検索し、RFCやInternet-Draftの状態を確認するMCPサーバーです。ネットワーク識別子を調べる開発者やエージェント向けに、一般的な項目から任意のレジストリまで構造化して参照できます。

主な機能

  1. 01ポートとメディアタイプの検索
  2. 02HTTPコードとフィールドの検索
  3. 03URIスキームとPENの確認
  4. 04BCP 47言語タグの検証
  5. 05RFCとドラフトの状態確認
  6. 06レジストリ検索とレコード取得

活用シーン

  1. 01サービス設定時のポート割り当て確認
  2. 02HTTPフィールドやURIスキームの確認
  3. 03言語タグの正規化
  4. 04レジストリレコードやRFC更新の検索

MCP 対応

MCPクライアントに10種類のレジストリ検索・参照ツールを提供し、STDIOとStreamable HTTPに対応します。公開ホスト型エンドポイントも利用できます。

設定

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

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

ツール

10
パラメーター型必須説明
portintegerいいえポート番号(0~65535)。"443"のような数字文字列も使用できます。そのポートのすべての行と、そのポートを含む範囲の行を返します。port、service、keywordのいずれか1つだけを指定してください。
limitintegerいいえ返す結果の最大数(1~100)。デフォルトは25です。
offsetintegerいいえスキップするキーワード一致件数です。次のページを取得するには、前回の応答のnext_offsetを渡します。デフォルトは0です。
keywordstringいいえサービス名や説明に対して単語全体で照合する語句です。例:"network time"。port、service、keywordのいずれか1つだけを指定してください。
servicestringいいえサービス名を完全一致で指定します。大文字と小文字は区別せず、最大 15 文字です(例:"postgresql" または "whois++")。port、service、keyword のいずれか 1 つだけを指定してください。
transportenumいいえこのトランスポートプロトコルの行だけを残します。トランスポートのない行(ほとんどの範囲行と、ポートのないすべてのサービス名)は常に残ります。すべてのモードに適用されます。tcp | udp | sctp | dccp

詳細

@cyanheads/iana-registries-mcp-server

IANA のポート、メディアタイプ、HTTP ステータスコードとフィールド、URI スキーム、企業番号、BCP 47 言語タグを検索し、RFC のステータスを確認して、MCP 経由であらゆる IANA レジストリを検索・閲覧できます。STDIO または Streamable HTTP に対応しています。

10 個のツール

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

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


概要

公式の IANA プロトコルレジストリに加え、RFC と Internet-Draft のステータスを確認できます。ポート、メディアタイプ、HTTP ステータスコードとヘッダー、URI スキーム、企業番号、言語タグを検索できるほか、その他の任意のレジストリを検索し、RFC が現行、有効期限切れ、または更新済みかどうかを確認できます。API キーは不要です。

ツール
ツール説明
iana_lookup_portポート番号、サービス名、またはキーワードで、トランスポートごとのサービス名とポートの割り当てを検索します。ポートのRFC 6335クラスも確認できます
iana_lookup_media_type正確なタイプ名またはキーワードで、登録済みメディア(MIME)タイプを検索します。ステータス、置き換え先、登録テンプレートの記述も確認できます
iana_lookup_http_status番号でHTTPステータスコードを検索するか、キーワードで理由フレーズを検索します。未割り当てのコードの場合は、その範囲を報告します
iana_lookup_http_field登録済みHTTPフィールド(ヘッダーおよびトレーラー)名を、ステータスとStructured Fieldの型とともに検索します
iana_lookup_uri_scheme登録済みURIスキームを、ステータス、説明、Well-Known URIのサポート状況とともに検索します
iana_lookup_pen1.3.6.1.4.1配下の番号またはOID、あるいは組織名でPrivate Enterprise Numberを検索します
iana_lookup_language_tagBCP 47言語タグをサブタグごとに検証・正規化するか、説明でサブタグを検索します
iana_get_rfc_status1回の呼び出しで、最大10件のRFC、Internet-Draft、またはBCP/STD/FYIシリーズの現在のステータスと関連情報を取得します
iana_search_registriesキーワードでIANAプロトコルインデックス内の任意のレジストリまたはサブレジストリを検索します
iana_get_registry_records任意のIANA XMLレジストリのレコードを読み込み、絞り込みます

機能リファレンス

iana_lookup_port tool
  • port(0~65535)、service(完全一致する名前)、keywordのいずれか1つを指定します。transport(tcp、udp、sctp、dccp)を指定すると、すべてのモードで絞り込めます
  • 各行にはstate(assigned、reserved、unassigned、unnamed)とトランスポートが含まれます。ポートモードでは、port_class(system、user、dynamic)と、そのポートを含む範囲の行も追加されます

iana_lookup_media_type tool
  • type(例:application/json。;以降のパラメーターは削除されます)またはkeywordのいずれか1つを指定します。top_levelを指定すると、キーワードモードを絞り込めます
  • keywordは、登録済みのタイプ名とステータス注記に一致します。ファイル拡張子には一致しません。拡張子のような形式の1語のキーワード(jpg、.mp3、*.jpg)を指定すると、その旨の通知が表示されます。ただし、その語と同じ名前の登録済みトップレベルタイプまたはサブタイプがある場合は除きます(image/pngが存在するため、pngでは通知されません)
  • statusはcurrent、deprecated、obsoletedのいずれかで、レジストリに置き換え先が記載されている場合はreplaced_byも返されます
  • typeモードでは登録テンプレートも読み込み、テンプレートに記載があれば、ファイル拡張子、想定用途、非推奨の別名に関する記述をtemplateの下に返します。テンプレートを読み取れない場合、template.fetchedはfalseになります。IANAがそのタイプのテンプレートを公開していない場合(image/gif、text/plain)、template.availableはfalseになります

iana_lookup_http_status tool
  • code(100~599)または、登録済みの理由フレーズを対象とするkeywordのいずれか1つを指定します
  • 定義元の参照先とセクションとともに、classとstate(assigned、temporary、obsoleted、unused)を返します。未割り当てのコードの場合は、found: falseとそのunassigned_rangeを返します

iana_lookup_http_field tool
  • 名前とコメントを対象に、name(大文字と小文字を区別しません)またはkeywordのいずれか1つを指定します。statusでどちらのモードも絞り込めます
  • status(permanent、provisional、deprecated、obsoleted)、登録されている場合はstructured_type、コメント、定義元の参照先を返します

iana_lookup_uri_scheme tool
  • scheme(末尾の:または://は無視されます)またはkeywordのいずれか1つを指定します。status(permanent、provisional、historical)でどちらのモードも絞り込めます
  • 説明、参照先、well_known_uri_support、登録テンプレートが公開されている場合はtemplate_urlを返します

iana_lookup_pen tool
  • pen(番号、または1.3.6.1.4.1配下のOID)またはorganization(組織名の単語)のいずれか1つを指定します
  • 各エントリにはoidプレフィックスとstate(assigned、reserved、unassigned)が含まれます。連絡先情報が含まれるため組織名の行が非公開になっている場合は、organization_withheld: trueで示されます
  • エンタープライズ番号より下のアークを含むOIDの場合は、requested_oidとsub_arcsが返されます。これらのアークはIANAではなく、エンタープライズによって割り当てられます

iana_lookup_language_tag ツール
  • tag(アンダースコアはハイフンとして扱われます)または description のいずれかを指定します。subtag_type を指定すると、説明検索の対象を絞り込めます。
  • タグモードでは、well_formed、valid、(有効なタグのみ)canonical_tag、subtags[] 内の各パーツ、issues[] が返されます。kind が unknown または wrong_position の場合、タグは無効です。一方、deprecated、variant_prefix_mismatch、suppress_script_redundant、extension_not_validated は参考情報です。
  • 単一サブタグを入力すると、同じサブタグに登録された他の種類のレコードが also_registered_as に一覧表示されます。
  • 正規化ではバリアントの順序を維持しながら、優先値が重複する項目を除去します。登録済みの ja-Latn-hepburn-heploc は ja-Latn-alalc97 になり、関連しないパーツはそのまま維持されます。
  • 拡張パーツには、extension の割り当て状況(allocated、unallocated、unavailable のいずれか)、説明、定義する RFC、管理組織が追加されます。extension_source には、使用したコピーが記録されます。割り当て状況は基本的な有効性を変えず、拡張の内容を検証するものでもありません。割り当て情報の任意取得は3秒以内に停止します。失敗した場合は、再試行の案内とともに基本解析結果が返されるか、その旨を示す古い割り当て情報のコピーが返されます。

iana_get_rfc_status ツール
  • 正規化後の空でない ids を最大1,000件指定できます。各呼び出しで10件を選ぶ前に、正規化されたIDの重複が除去されます。RFC番号(一般的な表記形式はすべて可)、BCP、STD、FYI番号(BCP 14)、リビジョン接尾辞の有無を問わないドラフト名、RFCとドラフトのファイル名(rfc2616.txt、draft-ietf-httpbis-semantics-19.txt)、datatracker.ietf.org、tools.ietf.org、ietf.org 上のRFCまたはドラフトのURL、または rfc-editor.org 上のRFCのURL(https://tools.ietf.org/html/rfc7231)、さらに rfc-editor.org/info/ または datatracker.ietf.org/doc/ 上のシリーズURL(https://datatracker.ietf.org/doc/bcp14/)を指定できます。URLのクエリとフラグメントは削除されます。
  • total_ids は重複を除いたID数を示します。deferred_ids は次の10件のプレビューを、deferred_count は残り全件数を示します。続きは、元と同じ ids を指定し、next_ids_offset を ids_offset として再送信してください。deferred_reason: "batch_limit" と deferred_guidance に、処理が打ち切られた理由が示されます。末尾以降のオフセットを指定した場合は、上流へのリクエストなしで空のページが返されます。
  • documents[] では、RFCについて現在のステータスと公開時のステータス、ストリーム、グループ、廃止・更新関係、所属するシリーズ(is_also)、正誤表ページが返されます。ドラフトについては状態、IESGの状態、置き換え先、became_rfc が返されます。シリーズについては、所属するRFC(kind: "series")が返されます。不明なIDは found: false と guidance を伴って返されます。最新のリビジョンを超えるドラフトのリビジョンも見つかったものとして扱われ、最新のリビジョンを示す guidance が付与されます。
  • IDの検索に失敗した場合、そのIDは failed[] に入り、ほかのIDの結果は引き続き返されます。失敗の reason と、失敗情報に含まれる場合は retryable(再度呼び出して同じ方法で失敗する場合は false)も返されます。すべてのIDが失敗した場合にのみ、呼び出し全体が失敗します。1回の呼び出しでDatatrackerへのリクエストは最大20件です(RFCまたはシリーズは1件に加え、RFCのシリーズ取得に呼び出しごとに1件、ドラフトは3件、リビジョン接尾辞がある場合は4件)。上限を超えたIDは、再送信用に reason が request_limit の failed[] として返されます。

iana_search_registries ツール
  • query の単語をレジストリのタイトル、カテゴリ、IDと照合します。単数形と複数形のどちらにも一致します(ethertype で「Ethertypes」が見つかります)。for や the を含め、すべての単語が一致する必要があります。limit は1~1,000,000を受け付け、上限は50です。デフォルトは15で、offset でページ分割できます。
  • レジストリまたはサブレジストリのIDを完全一致で指定すると、最上位に表示されます。単語で指定したレジストリIDも同様です(protocol numbers → protocol-numbers)。次に、タイトルが最も近いものが続きます。
  • 複数のプロトコルカテゴリに掲載されているレジストリも、結果には1回だけ表示されます。カテゴリは ; で連結されます。
  • 各エントリには、iana_get_registry_records が読み取る registry_id と subregistry_id に加えて、登録手順、定義文書、ページURLとXML URLが含まれます。
iana_get_registry_records ツール
  • registry ID または iana.org/assignments URL、任意の subregistry、およびフィルター value(キー列、または列 field の名前との完全一致)と contains(任意のフィールドに含まれる語句。フィールド値が一致するレコードを優先)
  • 数字の value は、数字のみのセル(0443 は 443 に一致)または64ビットの端点を含む10進数範囲と正確に比較します。0x トークンが1つの場合は、1つの 0x トークンを持つセル(0x5 は 0x05 に一致)または16進数範囲と数値で比較します。それ以外の 0x 形式は、カンマ、空白、波括弧のどの表記でも、記載されたとおりの数字で比較します
  • value が見つからない場合は、その値を含む他の列と各列の行数が示されるため、field を使ってニーモニックまたはサービス名で検索できます。一致した場合は、キーセルのない行にもその値が含まれているかどうかが示されます
  • cursor / next_cursor でページ分割します(最初のページ以降では offset を引き継ぎます)。有効な limit(最大100、既定値25)の範囲内で、レコード全体の文字数上限は48,000文字です。2,000文字を超えるフィールドは切り詰められ、1レコードあたり最大16フィールドまで保持されます。切り詰められた項目は cut_fields に示されます
  • 複数のサブレジストリがあり、どれも選択されていないレジストリは、レコードの代わりに subregistries[] を返します。テーブル内にネストされたテーブルがある場合は、最初のページの subregistries[] に一覧表示されます。サブレジストリの読み取りでは、レジストリ独自の注記と脚注が registry_notes[] に含まれます
  • エラーには unknown_registry、unknown_subregistry、unknown_field、non_xml_registry、invalid_cursor、または cursor_mismatch が含まれます

機能

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

IANA 固有の機能:

  • IANA レジストリファイル、RFC Editor の各 RFC の JSON、IETF Datatracker を、認証情報なしでリアルタイムに読み取ります
  • レジストリは初回使用時に読み込まれ、再検証まで24時間キャッシュされます。更新に失敗した場合は、最長7日前のキャッシュコピーを返し、source.stale: true を設定します
  • ホストごとのリクエスト間隔制御(iana.org、rfc-editor.org、datatracker.ietf.org)と、すべての再試行およびキュー待機を含む、各ツール呼び出しあたり45秒の予算
  • 汎用レコードでは、レジストリの XML 要素名をフィールド名として使用します(rec は Recommended 列です)
  • 連絡先、指名専門家、登録者個人のフィールドは除外し、自由記述内のメールアドレスは [email removed] に置き換えます

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

  • 見つからない場合もエラーではなく結果として扱います。該当するものがない検索は、次の手順を示す notice と found: false を返します。不明な RFC またはドラフトは guidance と found: false を返し、無効な言語タグは issues[] と valid: false を返します。見つからないという結果は、IANA に登録がないことを意味するものであり、実際にその値が使われていないことを意味するものではありません
  • 一貫した検索仕様:各検索ではモードキーをちょうど1つ指定する必要があり、指定しない場合は mode_required で失敗します。正の安全な整数である limit が1,000,000以下の場合、上限は100に制限されます(既定値25。iana_search_registries では上限50、既定値15)。上限が適用された呼び出しでは、完全一致モードと空のモードを含む、どちらのインターフェースでも requested_limit と effective_limit が示されます。リストモード(keyword、organization、description)は offset でページ分割され、next_offset、totalCount、shown、truncated を返します
  • すべてのレジストリ応答に出所情報を付与します。source にはレジストリファイル、registry_updated、fetched_at、stale が含まれます
  • 復旧のヒントを含む型付きエラー:すべてのツールで upstream_unreadable を宣言します(検索では index_unreadable)。また、サーバー独自のリクエストキューが満杯の場合に retryAfter を含む pacer_shed も宣言します

はじめに

公開ホストインスタンス

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

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

以下を MCP クライアントの設定ファイルに追加します。

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

または、npx を使用します(Bun は不要です)。

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

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

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

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

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bunx @cyanheads/iana-registries-mcp-server@latest
# Server listens at http://localhost:3010/mcp
前提条件
  • Bun v1.4.0 以降(または Node.js v24 以降)。
  • API キーやアカウントは不要です。IANA、RFC Editor、IETF Datatracker はすべてキーなしで利用できます。
インストール
  1. リポジトリをクローンします。
git clone https://github.com/cyanheads/iana-registries-mcp-server.git
  1. ディレクトリに移動します。
cd iana-registries-mcp-server
  1. 依存関係をインストールします。
bun install
  1. 環境を設定します(任意)。
cp .env.example .env
# the server needs no variables of its own; edit framework overrides as needed

設定

サーバーは独自の環境変数を読み取りません。以下のフレームワーク設定が適用されます。

変数説明デフォルト
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポート。3010
MCP_HTTP_HOSTHTTP サーバーのホスト。127.0.0.1
MCP_HTTP_ENDPOINT_PATHHTTP エンドポイントのパス。/mcp
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() のエントリーポイントです。ツールを登録し、サービスを起動・停止します。
src/mcp-server/tools/definitionsツールの定義(*.tool.ts)。10 個のツールがあります。
src/mcp-server/tools/sharedツール間で共有するスキーマ、リストのページングと通知、Markdown ヘルパーです。
src/services/upstreamiana.org、rfc-editor.org、datatracker.ietf.org 用の、リクエスト間隔と予算を管理する HTTP クライアントです。
src/services/registryレジストリのキャッシュとパーサーです。XML レジストリ、PEN リスト、言語サブタグおよび拡張レジストリ、プロトコルインデックスとそのランキング検索、BCP 47 タグ分析、個人データのスクラブ処理が含まれます。
src/services/media-templateメディアタイプ登録テンプレートの読み取り処理です。
src/services/ietfRFC Editor と Datatracker のドキュメントステータスです。
tests/src/ の構成に対応するユニットテストとツールテストです。

開発ガイド

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

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックに try/catch は使用しません。
  • ログには ctx.log を使用します。レジストリのテキストはサードパーティーのデータであるため、format() は quote() および inline() ヘルパーを通じてレンダリングします。
  • 新しいツールは src/mcp-server/tools/definitions/index.ts のバレルに登録します。
  • 外部 API 呼び出しは、未加工データの検証 → ドメイン型への正規化 → 出力スキーマに従った返却、の順で処理します。不足しているフィールドを捏造してはいけません。

貢献

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

bun run devcheck
bun run test

ライセンス

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

IANA と IETF Trust は、プロトコルレジストリを CC0 1.0 の下でパブリックドメインに提供しています(ライセンス条件、2021 年 11 月 10 日の共同声明)。RFC 文書はこの声明の対象外です。このサーバーが返すのは RFC のメタデータのみであり、RFC の本文は返しません。このプロジェクトは IANA、IETF、RFC Editor とは独立しています。

コメント

MCP は初めてですか?

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

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