io.github.cyanheads/iana-registries-mcp-server
REMOTE · IANA-REGISTRIES.CASEYJHAND.COM · 2 COMPONENTS
Find IANA ports, MIME types, HTTP codes/fields, URI schemes, PENs, BCP 47 tags, RFCs, any registry.
Available components
Last scanned (8 hours ago)
Scores higher than 97% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Code Search and Documentation
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability75
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4093 tokens (~372/item across 11 items; 10 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 1 Nov 26 +3
- Stability: 0.97 → pass security
- Tool “iana_get_registry_records” rewrote its description, which is the text the model reads security
- First check of Schema quality: 100 functional
- New resource “iana-registries-guide” functional
- Server version: 0.2.1 → 0.3.0 functional
- “iana_lookup_pen” reworded the description of “pen” cosmetic
- “iana_get_registry_records” reworded the description of “value” cosmetic
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “iana_get_rfc_status” rewrote its description, which is the text the model reads security
- Tool “iana_lookup_language_tag” rewrote its description, which is the text the model reads security
- Server version: 0.2.0 → 0.2.1 functional
- “iana_get_rfc_status” added an optional parameter “ids_offset” cosmetic
- “iana_get_registry_records” reworded the description of “limit” cosmetic
- “iana_get_registry_records” reworded the description of “value” cosmetic
- “iana_get_rfc_status” reworded the description of “ids” cosmetic
- “iana_lookup_http_field” reworded the description of “limit” cosmetic
- “iana_lookup_http_status” reworded the description of “limit” cosmetic
- “iana_lookup_language_tag” reworded the description of “limit” cosmetic
- “iana_lookup_media_type” reworded the description of “limit” cosmetic
- “iana_lookup_pen” reworded the description of “limit” cosmetic
- “iana_lookup_port” reworded the description of “limit” cosmetic
- “iana_lookup_uri_scheme” reworded the description of “limit” cosmetic
- “iana_search_registries” reworded the description of “limit” cosmetic
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://iana-registries.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 2 Nov 2026 | 31 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 995a30681ab772540e934241ca1d576c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of iana-registries.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| iana-registries.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://iana-registries.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://iana-registries.caseyjhand.com/mcp | HTTPS enforced | 301 | https://iana-registries.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
iana_get_registry_records Read IANA registry records ~756
Read records from any IANA XML registry by id, e.g. registry "tls-parameters" with subregistry "tls-parameters-4" (TLS Cipher Suites), "protocol-numbers", "http-methods", or "cbor-tags"; an iana.org/assignments URL also works. Filter with `value` on the key column or the column `field` names: signed decimal points match exact cells, inclusive ranges and strict open bounds; scalar 0x points also compare with decimal cells and established bare-hex columns. Two-byte 0x points match byte-pair ranges and wildcards with their width preserved. An implicit range-only key match yields a miss and a field pointer when another column holds the value exactly. Filter with `contains` for words in any field; records with an equal field come first. When a registry has several sub-registries and none is given, the response lists them instead of records; a table that nests tables lists them too. Field names are the registry's XML element names (e.g. "rec" is the Recommended column). Large registries page through `cursor`. Find ids with iana_search_registries.
| Name | Type | Req | Description |
|---|---|---|---|
| contains | string | – | Words matched as whole tokens against every field and reference id, e.g. "chacha20". Records with a field equal to the words come first. |
| cursor | string | – | next_cursor from the previous page; reuse it only with the same registry, subregistry, value, field, and contains. |
| field | string | – | Column for value to match instead of the key column, case-insensitive, one of the names in columns: e.g. "type" for a DNS RR type mnemonic, or "name" for every row of a service name. Ignored without… |
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 100 are clamped to 100 and disclosed as requested_limit and effective_limit. Default 25. |
| registry | string | yes | Registry id, e.g. "tls-parameters", or its https://www.iana.org/assignments/<id> URL (a #fragment selects the sub-registry when subregistry is unset). |
| subregistry | string | – | Sub-registry id, case-insensitive, e.g. "tls-parameters-4". Omit to read the only sub-registry, or to list them when there are several. |
| value | string | – | Match the key column named by value_field (value, else number, else first column), or field when set; case and whitespace are ignored. Signed decimal points compare without precision loss with exact… |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit applied. |
| columns | array | – | Field (XML element) names seen, in first-seen order. |
| description | string | – | Description of the table read, or of the registry when listing; a YANG module registry names its module file here. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| next_cursor | string | – | Pass as cursor, with the same filters, for the next page. |
| notes | array | – | Notes of the table read (of the registry, when listing), first page only. |
| notes_truncated | boolean | – | Indicates truncated notes when present; omitted for whole notes. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| offset | number | – | Matching records before this page, on pages after the first. |
| records | array | – | Whole records in registry order (with contains, records with a field equal to the words first), up to limit. |
| references | array | – | The documents that define the table read. |
| registration_procedure | string | – | Registration rule of the table read, or of the registry when listing. |
| registration_ranges | array | – | Allocation ranges, when the table defines them. |
| registry_id | string | – | Registry id. |
| registry_notes | array | – | The registry root's notes and footnotes, on the first page of a sub-registry read; records cite them by anchor. |
| registry_title | string | – | Registry title. |
| requested_limit | number | – | The requested limit, present when clamped. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| subregistries | array | – | Tables to read next: every sub-registry when one must be chosen (records is then empty), or the tables nested directly in the table read, on its first page. |
| subregistry_id | string | – | Id of the sub-registry the records come from. |
| subregistry_title | string | – | Title of that sub-registry. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
| value_field | string | – | The table's key column: each record's value comes from it, and the value filter matches it unless field names another. |
No examples provided.
iana_get_rfc_status Get RFC, Internet-Draft, and series status ~479
Get the current status of up to ten distinct RFCs, Internet-Drafts, or BCP/STD/FYI series per page from up to 1,000 input items. Canonical aliases resolve once. When more remain, deferred_ids previews the next ten, deferred_count counts the whole remainder, and next_ids_offset continues the same original ids. Retry failed ids separately. Accepts "RFC 9110", "rfc9110", "9110", draft names with or without a revision suffix ("draft-ietf-httpbis-semantics-19"), series numbers ("BCP 14"), RFC and draft file names ("rfc9110.txt"), the URL of an RFC or draft on datatracker.ietf.org, tools.ietf.org, or ietf.org or of an RFC on rfc-editor.org, and a series URL at rfc-editor.org/info/ or datatracker.ietf.org/doc/ ("https://datatracker.ietf.org/doc/bcp14/"). RFCs return current and as-published status, stream, working group, obsoletes/obsoleted-by and updates/updated-by relations, the series they belong to, and the errata page; drafts return their state, IESG state, intended status, expiry, the document that replaced them, and the RFC they became; a series returns its member RFCs. Unknown ids return found: false. A call makes at most 20 Datatracker requests, retries included (an RFC or a series needs one, plus one per call for the RFCs' series; a draft three, or four with a revision suffix): each id is taken in request order if its requests still fit, and the others come back in failed with reason request_limit, to pass in another call.
| Name | Type | Req | Description |
|---|---|---|---|
| ids | array | yes | Up to 1,000 normalized nonblank RFC, Internet-Draft, or series items; aliases are canonically deduplicated before selecting ten distinct ids. One comma-, semicolon-, or newline-separated string is al… |
| ids_offset | integer | – | Number of canonically distinct ids to skip, default 0. Pass next_ids_offset with the same original ids to continue; retry failed ids separately. |
| Name | Type | Req | Description |
|---|---|---|---|
| deferred_count | number | – | All distinct ids remaining after this selected batch, including ids beyond the preview. |
| deferred_guidance | string | – | How to continue the original id list and retry selected failed ids separately. |
| deferred_ids | array | – | Preview of the next at most ten canonical ids, not the entire remainder; no upstream work started for these ids. |
| deferred_reason | string | – | More distinct ids remain beyond the ten-id batch limit. |
| documents | array | – | One entry per distinct requested id, in request order, excluding ids in failed. |
| error | object | – | Present when the call failed. Absent on success. |
| failed | array | – | Ids whose lookup failed upstream or was cut by the call's request limit; the rest of the batch still answered. |
| next_ids_offset | number | – | Pass as ids_offset with the same original ids to resolve the next batch; absent at or past the end. |
| notice | string | – | Set when selected document citations carried ignored section qualifiers, ids were left unresolved at the call's Datatracker request limit, or Datatracker fields (stream and group, or series membershi… |
| total_ids | number | – | Total canonically distinct ids before ids_offset and the ten-id batch limit. |
No examples provided.
iana_lookup_http_field Look up an HTTP field name ~264
Look up a registered HTTP field (header or trailer) name. Pass exactly one of `name` (case-insensitive, e.g. "Cache-Status") or `keyword` (words matched against field names and comments). Returns the registration status — permanent, provisional, deprecated, or obsoleted — the Structured Field type when registered, and the defining reference. Many widely used headers are unregistered; a miss means only that IANA has no entry.
| Name | Type | Req | Description |
|---|---|---|---|
| keyword | string | – | Words matched as whole tokens against field names and registry comments, e.g. "cache". Pass this or name, not both. |
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 100 are clamped to 100 and disclosed as requested_limit and effective_limit. Default 25. |
| name | string | – | Exact field name, case-insensitive, e.g. "Content-Type" (a trailing ":" is ignored). Pass this or keyword, not both. |
| offset | integer | – | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| status | string | – | Keep only fields with this registration status. Applies to both modes. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| fields | array | – | Matching fields: exact name hits first, then registry order. |
| found | boolean | – | True when a registered field matched. |
| mode | string | – | Which lookup ran. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| requested_limit | number | – | The requested limit, present when clamped. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
No examples provided.
iana_lookup_http_status Look up an HTTP status code ~239
Look up an HTTP status code in the IANA registry, or search reason phrases. Pass exactly one of `code` (100–599) or `keyword` (e.g. "too many"). Returns the registered phrase, its class, defining reference with section, and whether it is temporary, obsoleted, or unused; an unassigned code returns found: false with the unassigned range it falls in.
| Name | Type | Req | Description |
|---|---|---|---|
| code | integer | – | Status code to look up, 100–599 (a digit string such as "429" also works). Pass this or keyword, not both. |
| keyword | string | – | Words matched as whole tokens against registered reason phrases, e.g. "too many" or "gateway". Pass this or code, not both. |
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 100 are clamped to 100 and disclosed as requested_limit and effective_limit. Default 25. |
| offset | integer | – | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| found | boolean | – | True when a registered status matched. |
| mode | string | – | Which lookup ran. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| requested_limit | number | – | The requested limit, present when clamped. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| statuses | array | – | Matching status codes: exact phrase hits first, then registry order. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
| unassigned_range | string | – | For an unassigned code, the registry range it falls in, e.g. "432-450". |
No examples provided.
iana_lookup_language_tag Validate a BCP 47 language tag ~356
Parse and validate a BCP 47 language tag against the IANA Language Subtag Registry, or search subtags by description. Pass exactly one of `tag` (e.g. "zh-Hant-TW", "sr-Latn", "en_US") or `description` (e.g. "Swiss German"). A tag is split into language, extlang, script, region, variant, extension, and private-use parts; deprecated subtags report their preferred value, and a canonical tag is returned when valid. Extension singleton allocation and defining RFCs are optional metadata; allocation never validates extension content or changes base validity. A single subtag registered under several types (e.g. "TW") lists the other types.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Words matched as whole tokens against subtag descriptions, e.g. "Swiss German" or "Cyrillic". Pass this or tag, not both. |
| limit | integer | – | Requested description matches, 1–1,000,000, clamped to 100 with requested_limit and effective_limit disclosed. Default 25. Tag mode always returns every part of the tag. |
| offset | integer | – | Number of description matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| subtag_type | string | – | Description mode only: return only records of this Type. |
| tag | string | – | A language tag to validate, e.g. "zh-Hant-TW", "sr-Latn", "i-klingon". Underscores are read as hyphens ("en_US" → "en-US"); matching ignores case. Pass this or description, not both. |
| Name | Type | Req | Description |
|---|---|---|---|
| also_registered_as | array | – | Tag mode, single-subtag input: records of other types under the same subtag, e.g. region "TW" beside language "tw". |
| canonical_tag | string | – | Tag mode, valid tags only: canonical form (preferred values applied, variant collisions deduplicated, registered heploc context normalized, extlang reduced, case normalized). |
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| extension_source | object | – | Provenance of the allocation registry copy; absent when unavailable or no extensions were read. |
| issues | array | – | Tag mode: findings; empty for a clean tag. |
| matches | array | – | Description mode: matching records, exact description matches first, then registry order. |
| mode | string | – | Which lookup ran. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| requested_limit | number | – | The requested limit, present when clamped. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| subtags | array | – | Tag mode: the parts in order, after any whole-tag record; parsing stops at the first part the syntax cannot place. |
| tag_input | string | – | Tag mode: the tag as read, after underscores became hyphens. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
| valid | boolean | – | Tag mode: true when well-formed, every subtag is registered and correctly placed, and no variant or singleton repeats. |
| well_formed | boolean | – | Tag mode: true when the tag follows RFC 5646 syntax or is grandfathered. |
No examples provided.
iana_lookup_media_type Look up a media type ~361
Look up registered media (MIME) types. Pass exactly one of `type` (a full name such as "application/json"; parameters after ";" are ignored) or `keyword` (words matched against registered type names and status annotations, e.g. "geo json"; never against file extensions). An exact `type` lookup also reads the registration template and returns its file-extension, intended-usage, and deprecated-alias statements as written, each only when the template has it. Some registered types have no registration template (`template.available: false`); their references are the defining documents. Deprecated and obsoleted types are reported with their replacement when the registry names one. Unregistered "x-" types are not in the registry.
| Name | Type | Req | Description |
|---|---|---|---|
| keyword | string | – | Words matched as whole tokens against registered type names and status annotations, e.g. "geo json". File extensions are not searched: look up the expected type with type to read its template's file-… |
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 100 are clamped to 100 and disclosed as requested_limit and effective_limit. Default 25. |
| offset | integer | – | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| top_level | string | – | Keep only types under this top-level type, e.g. "image". Keyword mode only. |
| type | string | – | Full media type, case-insensitive, e.g. "application/json" ("; charset=utf-8" and other parameters are dropped). Pass this or keyword, not both. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| found | boolean | – | True when a registered media type matched. |
| media_types | array | – | Matching media types: exact name hits first, then registry order. |
| mode | string | – | Which lookup ran. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| normalized_type | string | – | Type mode: the type looked up, lowercased, parameters removed. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| requested_limit | number | – | The requested limit, present when clamped. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
No examples provided.
iana_lookup_pen Look up a Private Enterprise Number ~350
Look up a Private Enterprise Number (PEN). Pass exactly one of `pen` (a number such as 32473, or an OID under 1.3.6.1.4.1 such as 1.3.6.1.4.1.32473.1.2) or `organization` (words matched against organization names). Returns the organization and its OID prefix. Arcs below the enterprise number are assigned by the enterprise, not IANA. Contact details are not returned.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 100 are clamped to 100 and disclosed as requested_limit and effective_limit. Default 25. |
| offset | integer | – | Number of organization matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| organization | string | – | Words matched as whole tokens against the names of assigned entries, e.g. "cisco systems"; look up a number with pen to see a reserved or unassigned one. Pass this or pen, not both. |
| pen | string | – | Enterprise number, e.g. "32473", or an OID under 1.3.6.1.4.1 naming it, e.g. "1.3.6.1.4.1.32473.1.2". A leading dot, case-insensitive iso.3.6.1.4.1, iso.org.dod.internet.private.enterprise(s), enterp… |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| enterprises | array | – | Matching entries: exact organization-name hits first, then number order. |
| error | object | – | Present when the call failed. Absent on success. |
| found | boolean | – | True when the number is assigned, or any assigned organization matches before paging. |
| mode | string | – | Which lookup ran. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| requested_limit | number | – | The requested limit, present when clamped. |
| requested_oid | string | – | The OID as requested, when it named arcs below the enterprise number. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| sub_arcs | string | – | Arcs below the enterprise number, e.g. "1.2"; the enterprise assigns these. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
No examples provided.
iana_lookup_port Look up a port assignment ~384
Look up IANA service name and transport protocol port assignments. Pass exactly one of `port` (a number, 0–65535), `service` (an exact service name such as "postgresql"), or `keyword` (words matched against service names and descriptions). Results list every transport (tcp, udp, sctp, dccp) separately, report the registry range row containing an unassigned port, and classify the port as System (0–1023), User (1024–49151), or Dynamic/Private (49152–65535). Service names registered without a port (DNS-SD names) appear with no port.
| Name | Type | Req | Description |
|---|---|---|---|
| keyword | string | – | Words matched as whole tokens against service names and descriptions, e.g. "network time". Pass exactly one of port, service, or keyword. |
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 100 are clamped to 100 and disclosed as requested_limit and effective_limit. Default 25. |
| offset | integer | – | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| port | integer | – | Port number, 0–65535 (a digit string such as "443" also works). Returns every row for that port plus the range row containing it. Pass exactly one of port, service, or keyword. |
| service | string | – | Exact service name, case-insensitive, up to 15 characters, e.g. "postgresql" or "whois++". Pass exactly one of port, service, or keyword. |
| transport | string | – | Keep only rows for this transport protocol. Rows without a transport (most range rows and every service name without a port) are always kept. Applies to every mode. |
| Name | Type | Req | Description |
|---|---|---|---|
| assignments | array | – | Matching rows. Port mode: exact rows, then range rows containing the port. Other modes: ascending by port, port-less rows last. |
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| found | boolean | – | True when a matching row after transport filtering has a registered service name; keyword mode checks all matches before paging. |
| mode | string | – | Which lookup ran. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| port_class | object | – | Port mode: the requested port's class. |
| requested_limit | number | – | The requested limit, present when clamped. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
No examples provided.
iana_lookup_uri_scheme Look up a URI scheme ~237
Look up a registered URI scheme. Pass exactly one of `scheme` (e.g. "mailto"; a trailing ":" or "://" is ignored) or `keyword` (words matched against scheme names and descriptions). Returns the status — permanent, provisional, or historical — description, references, and well-known URI support.
| Name | Type | Req | Description |
|---|---|---|---|
| keyword | string | – | Words matched as whole tokens against scheme names and descriptions, e.g. "websocket". Pass this or scheme, not both. |
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 100 are clamped to 100 and disclosed as requested_limit and effective_limit. Default 25. |
| offset | integer | – | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| scheme | string | – | Exact scheme name, case-insensitive, e.g. "https" (a trailing ":" or "://" is ignored). Pass this or keyword, not both. |
| status | string | – | Keep only schemes with this registration status. Applies to both modes. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| found | boolean | – | True when a registered scheme matched. |
| mode | string | – | Which lookup ran. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| requested_limit | number | – | The requested limit, present when clamped. |
| schemes | array | – | Matching schemes: exact scheme hits first, then registry order. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
No examples provided.
iana_search_registries Search IANA registries ~204
Find IANA protocol registries and sub-registries by keyword over their titles and protocol categories, e.g. "tls cipher", "dns resource record", "protocol numbers". Returns the registry and sub-registry ids that iana_get_registry_records reads, with registration procedure and defining documents. Covers every registry linked from the IANA protocol registries index.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Requested maximum results, 1–1,000,000; values above 50 are clamped to 50 and disclosed as requested_limit and effective_limit. Default 15. |
| offset | integer | – | Number of matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
| query | string | yes | Words matched as whole tokens, singular or plural, against registry titles, categories, and ids, e.g. "tls cipher". An exact registry or sub-registry id ranks first, then the closest titles. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | – | The limit applied. |
| effective_limit | number | – | The response limit after clamping, present when clamped. |
| error | object | – | Present when the call failed. Absent on success. |
| next_offset | number | – | Pass as offset for the next page; absent on the last. |
| notice | string | – | Guidance on a miss, a cut list, or another condition. |
| registries | array | – | Matching index entries: exact id hits first, then the closest titles. |
| requested_limit | number | – | The requested limit, present when clamped. |
| shown | number | – | Results returned. |
| source | object | – | Provenance and freshness of the answer. |
| totalCount | number | – | Matches before the limit was applied. |
| truncated | boolean | – | True when more matches exist than were returned. |
No examples provided.
How do I install the io.github.cyanheads/iana-registries-mcp-server server?
io.github.cyanheads/iana-registries-mcp-server is a hosted endpoint at https://iana-registries.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · iana-registries.caseyjhand.com
claude mcp add --transport http cyanheads-iana-registries-mcp-server 'https://iana-registries.caseyjhand.com/mcp'
What is the io.github.cyanheads/iana-registries-mcp-server server?
io.github.cyanheads/iana-registries-mcp-server is listed in the public MCP registry as io.github.cyanheads/iana-registries-mcp-server. Find IANA ports, MIME types, HTTP codes/fields, URI schemes, PENs, BCP 47 tags, RFCs, any registry. This page covers its hosted endpoint (https://iana-registries.caseyjhand.com/mcp).
Is the io.github.cyanheads/iana-registries-mcp-server server safe to use?
io.github.cyanheads/iana-registries-mcp-server scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.cyanheads/iana-registries-mcp-server server expose?
io.github.cyanheads/iana-registries-mcp-server exposes 10 tools: iana_lookup_port, iana_lookup_media_type, iana_lookup_http_status, iana_lookup_http_field, iana_lookup_uri_scheme, and 5 more. Their descriptions and schemas cost roughly 3,630 tokens of context every time the server is loaded.
Does the io.github.cyanheads/iana-registries-mcp-server server require authentication?
No. We connected to io.github.cyanheads/iana-registries-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.cyanheads/iana-registries-mcp-server server still maintained?
io.github.cyanheads/iana-registries-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.