iana-registries-mcp-server について
IANAのプロトコルレジストリを検索し、RFCやInternet-Draftの状態を確認するMCPサーバーです。ネットワーク識別子を調べる開発者やエージェント向けに、一般的な項目から任意のレジストリまで構造化して参照できます。
主な機能
- 01ポートとメディアタイプの検索
- 02HTTPコードとフィールドの検索
- 03URIスキームとPENの確認
- 04BCP 47言語タグの検証
- 05RFCとドラフトの状態確認
- 06レジストリ検索とレコード取得
活用シーン
- 01サービス設定時のポート割り当て確認
- 02HTTPフィールドやURIスキームの確認
- 03言語タグの正規化
- 04レジストリレコードやRFC更新の検索
MCP 対応
MCPクライアントに10種類のレジストリ検索・参照ツールを提供し、STDIOとStreamable HTTPに対応します。公開ホスト型エンドポイントも利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://iana-registries.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-iana-registries https://iana-registries.caseyjhand.com/mcp{"mcpServers":{"cyanheads-iana-registries":{"type":"http","url":"https://iana-registries.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-iana-registries":{"type":"http","url":"https://iana-registries.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-iana-registries":{"type":"http","url":"https://iana-registries.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-iana-registries":{"serverUrl":"https://iana-registries.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
10| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| port | integer | いいえ | ポート番号(0~65535)。"443"のような数字文字列も使用できます。そのポートのすべての行と、そのポートを含む範囲の行を返します。port、service、keywordのいずれか1つだけを指定してください。 |
| limit | integer | いいえ | 返す結果の最大数(1~100)。デフォルトは25です。 |
| offset | integer | いいえ | スキップするキーワード一致件数です。次のページを取得するには、前回の応答のnext_offsetを渡します。デフォルトは0です。 |
| keyword | string | いいえ | サービス名や説明に対して単語全体で照合する語句です。例:"network time"。port、service、keywordのいずれか1つだけを指定してください。 |
| service | string | いいえ | サービス名を完全一致で指定します。大文字と小文字は区別せず、最大 15 文字です(例:"postgresql" または "whois++")。port、service、keyword のいずれか 1 つだけを指定してください。 |
| transport | enum | いいえ | このトランスポートプロトコルの行だけを残します。トランスポートのない行(ほとんどの範囲行と、ポートのないすべてのサービス名)は常に残ります。すべてのモードに適用されます。tcp | udp | sctp | dccp |
詳細
@cyanheads/iana-registries-mcp-server
IANA のポート、メディアタイプ、HTTP ステータスコードとフィールド、URI スキーム、企業番号、BCP 47 言語タグを検索し、RFC のステータスを確認して、MCP 経由であらゆる IANA レジストリを検索・閲覧できます。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: 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_pen | 1.3.6.1.4.1配下の番号またはOID、あるいは組織名でPrivate Enterprise Numberを検索します |
iana_lookup_language_tag | BCP 47言語タグをサブタグごとに検証・正規化するか、説明でサブタグを検索します |
iana_get_rfc_status | 1回の呼び出しで、最大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 ツール
registryID またはiana.org/assignmentsURL、任意の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 はすべてキーなしで利用できます。
インストール
- リポジトリをクローンします。
git clone https://github.com/cyanheads/iana-registries-mcp-server.git
- ディレクトリに移動します。
cd iana-registries-mcp-server
- 依存関係をインストールします。
bun install
- 環境を設定します(任意)。
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_PORT | HTTP サーバーのポート。 | 3010 |
MCP_HTTP_HOST | HTTP サーバーのホスト。 | 127.0.0.1 |
MCP_HTTP_ENDPOINT_PATH | HTTP エンドポイントのパス。 | /mcp |
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() のエントリーポイントです。ツールを登録し、サービスを起動・停止します。 |
src/mcp-server/tools/definitions | ツールの定義(*.tool.ts)。10 個のツールがあります。 |
src/mcp-server/tools/shared | ツール間で共有するスキーマ、リストのページングと通知、Markdown ヘルパーです。 |
src/services/upstream | iana.org、rfc-editor.org、datatracker.ietf.org 用の、リクエスト間隔と予算を管理する HTTP クライアントです。 |
src/services/registry | レジストリのキャッシュとパーサーです。XML レジストリ、PEN リスト、言語サブタグおよび拡張レジストリ、プロトコルインデックスとそのランキング検索、BCP 47 タグ分析、個人データのスクラブ処理が含まれます。 |
src/services/media-template | メディアタイプ登録テンプレートの読み取り処理です。 |
src/services/ietf | RFC 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 とは独立しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。