iana-registries-mcp-server
Server Details
Find IANA ports, MIME types, HTTP codes/fields, URI schemes, PENs, BCP 47 tags, RFCs, any registry.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/iana-registries-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/iana-registries-mcp-server
TDQS
Scored across 10 tools
Each tool targets a distinct IANA registry or resource, with clear parameter signatures and no overlaps. An agent can easily distinguish between unrelated lookups like http_field, http_status, port, and media_type.
All tool names follow a consistent snake_case pattern with the 'iana_' prefix and a clear verb_noun structure (get_, lookup_, search_), making the set predictable and easy to navigate.
With 10 tools, the set is well-scoped: it provides specific lookups for major IANA registries plus a general registry access and search tool, avoiding bloat while covering key use cases.
The toolset offers comprehensive read access to many IANA registries, including search and retrieval, but lacks tools for bulk operations or mutations (which are not applicable) and may miss some niche registries, though the generic get_registry_records covers those.
Available Tools
10 toolsiana_get_registry_recordsRead IANA registry recordsARead-onlyIdempotentInspect
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 (exact match on the key column, or on the column field names; digits compare by number with a cell of digits ("0443" finds "443") and one 0x token with a one-token 0x cell ("0x5" finds "0x05"), each also matching its own kind of range row ("105-199", "0x11-0xff"); other 0x forms compare their digits as written, in any comma, space, or brace spelling) and contains (words in any field; records with a field equal to the words 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 | Required | Description | Default |
|---|---|---|---|
| field | No | 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 value. | |
| limit | No | Maximum number of results to return, 1–100. Default 25. | |
| value | No | Exact match on the key column named by value_field (value, else number, else the first column), or on field when set; case and whitespace are ignored. A value of digits compares by number with a cell of digits, so "0443" finds "443", and also matches range rows such as "105-199"; it never matches a 0x cell. One 0x token compares by number with a one-token 0x cell, so "0x5" finds "0x05", and also matches range rows such as "0x11-0xff". Any other pair of 0x forms compares the digits as written: "0x1301", "{0x13,0x01}", and "0x13 0x01" all find "0x13,0x01", while "0x13" never finds "0x00,0x13". | |
| cursor | No | next_cursor from the previous page; reuse it only with the same registry, subregistry, value, field, and contains. | |
| contains | No | Words matched as whole tokens against every field and reference id, e.g. "chacha20". Records with a field equal to the words come first. | |
| registry | 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 | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| error | No | Present when the call failed. Absent on success. |
| notes | No | Notes of the table read (of the registry, when listing), first page only. With registry_notes: the first 25 and 4,000 characters at most, these first. |
| shown | No | Results returned. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| offset | No | Matching records before this page, on pages after the first. |
| source | No | Provenance and freshness of the answer. |
| columns | No | Field (XML element) names seen, first-seen order, the first 50. |
| records | No | Records in registry order (with contains, records with a field equal to the words first), up to limit and a 48,000-character page budget. |
| truncated | No | True when more matches exist than were returned. |
| references | No | The documents that define the table read, the first 25. |
| totalCount | No | Matches before the limit was applied. |
| description | No | Description of the table read, or of the registry when listing; a YANG module registry names its module file here. At most 2,000 characters. |
| next_cursor | No | Pass as cursor, with the same filters, for the next page. |
| registry_id | No | Registry id. |
| value_field | No | The table's key column: each record's value comes from it, and the value filter matches it unless field names another. |
| subregistries | No | Tables to read next, the first 250: 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. |
| registry_notes | No | The registry root's notes and footnotes, on the first page of a sub-registry read; records cite them by anchor. Shares the notes caps, after notes. |
| registry_title | No | Registry title. |
| subregistry_id | No | Id of the sub-registry the records come from. |
| notes_truncated | No | True when notes or registry_notes were cut at 4,000 characters. |
| subregistry_title | No | Title of that sub-registry. |
| registration_ranges | No | Allocation ranges, when the table defines them: the first 25, each text at most 2,000 characters. |
| registration_procedure | No | Registration rule of the table read, or of the registry when listing; at most 2,000 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe-read profile (readOnlyHint, idempotentHint, openWorldHint), but the description adds real behavior the annotations do not: sub-registry listing when none is specified, nested-table listing, field names being XML element names, and cursor-based paging for large registries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the body is a single dense paragraph carrying long parenthetical matching rules that duplicate the schema. Much of the middle is redundant with structured fields and could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape need not be explained. Given that, the description covers the remaining edge cases an agent needs: sub-registry listing, nested tables, pagination cursor reuse constraints, and the search sibling for id lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the value-matching prose in the description largely restates the schema's own text, including the digit/0x range semantics. The added value is mostly the worked examples, which do not go meaningfully beyond what the schema already documents, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Read records from any IANA XML registry by id") and grounds it with concrete examples (tls-parameters, protocol-numbers, http-methods, cbor-tags). It is clearly distinguishable from the narrow iana_lookup_* siblings and explicitly hands off id discovery to iana_search_registries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to iana_search_registries for finding ids and explains the fallback behavior when no subregistry is given. However, with nine siblings in the namespace, it never states when to prefer a specialized tool such as iana_lookup_port or iana_lookup_media_type over this generic reader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_get_rfc_statusGet RFC, Internet-Draft, and series statusARead-onlyIdempotentInspect
Get the current status of up to 10 RFCs, Internet-Drafts, or BCP/STD/FYI series in one call. 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 | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Up to 10 RFCs, Internet-Drafts, or series, e.g. ["RFC 9110", "BCP 14", "draft-ietf-httpbis-semantics-19"]. One comma-, semicolon-, or newline-separated string is also accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| failed | No | Ids whose lookup failed upstream or was cut by the call's request limit; the rest of the batch still answered. |
| notice | No | Set when ids were left unresolved at the call's Datatracker request limit, or when Datatracker fields (stream and group, or series membership) were unavailable for some RFCs. |
| documents | No | One entry per distinct requested id, in request order, excluding ids in failed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnly/idempotent/openWorld, so the description is freed to disclose what annotations cannot: per-call request budget (max 20 Datatracker requests), retry-inclusive accounting, exact per-id request costs, partial-failure semantics ('failed with reason request_limit'), and 'Unknown ids return found: false.' These are genuinely useful operational details. It stops short of 5 only because pagination/ordering of results across a batch isn't fully spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded correctly with the core purpose, but the middle sentence is a run-on enumeration of accepted formats that could be trimmed, and the final sentence on request accounting is dense. It earns its length given the tool's complexity, but structure is somewhat heavy for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, full schema coverage, and an output schema, the description supplies the operational context an agent needs: batch limit, accepted input forms, partial-failure behavior, and per-type return shapes. It's complete enough to invoke correctly, with only minor gaps in cross-batch result ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by enumerating accepted identifier forms (bare number, 'RFC 9110', 'rfc9110', draft with/without revision, 'BCP 14', file name, URLs on specific hosts) and the 10-item batch cap, but this largely duplicates the schema's own item description. Marginal lift above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource+scope: 'Get the current status of up to 10 RFCs, Internet-Drafts, or BCP/STD/FYI series in one call.' This cleanly distinguishes it from sibling tools like iana_lookup_pen or iana_search_registries, which target different IANA resources. An agent can tell immediately this is the RFC/draft/series status tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives rich input-format guidance (what strings are accepted) and explains the request-limit retry behavior ('failed with reason request_limit, to pass in another call'), which tells the agent when to re-invoke. It does not explicitly name sibling alternatives or state when NOT to use this tool, keeping it out of the 5 range.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_lookup_http_fieldLook up an HTTP field nameARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| name | No | Exact field name, case-insensitive, e.g. "Content-Type" (a trailing ":" is ignored). Pass this or keyword, not both. | |
| limit | No | Maximum number of results to return, 1–100. Default 25. | |
| offset | No | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. | |
| status | No | Keep only fields with this registration status. Applies to both modes. | |
| keyword | No | Words matched as whole tokens against field names and registry comments, e.g. "cache". Pass this or name, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| mode | No | Which lookup ran. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when a registered field matched. |
| shown | No | Results returned. |
| fields | No | Matching fields: exact name hits first, then registry order. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| truncated | No | True when more matches exist than were returned. |
| totalCount | No | Matches before the limit was applied. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds one genuinely useful behavioral note — that a miss means only that IANA has no entry, not that the header is invalid — but otherwise restates return content that the output schema already carries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose, then the argument constraint, then the caveat about misses. No filler and nothing that fails to earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not enumerate return fields, and the annotations cover safety. The mutual-exclusion constraint and the false-negative caveat are the two things an agent most needs, and both appear. Pagination mechanics are left entirely to the schema, which is acceptable but a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, keyword, status, limit, and offset are all documented in the schema, including the mutual-exclusion rule in each property. The description reinforces but does not extend that (case-insensitivity and keyword token matching are both already in the schema), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Look up a registered HTTP field (header or trailer) name") and names the exact identifier spaces it searches. It is clearly separable from siblings like iana_lookup_media_type or iana_lookup_http_status based on the resource alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the key operational rule — "Pass exactly one of name or keyword" — and explains when keyword mode applies ("words matched against field names and comments"). It also warns that many widely used headers are unregistered, which guides result interpretation. No explicit routing against siblings such as iana_search_registries, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_lookup_http_statusLook up an HTTP status codeARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| code | No | Status code to look up, 100–599 (a digit string such as "429" also works). Pass this or keyword, not both. | |
| limit | No | Maximum number of results to return, 1–100. Default 25. | |
| offset | No | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. | |
| keyword | No | Words matched as whole tokens against registered reason phrases, e.g. "too many" or "gateway". Pass this or code, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| mode | No | Which lookup ran. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when a registered status matched. |
| shown | No | Results returned. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| statuses | No | Matching status codes: exact phrase hits first, then registry order. |
| truncated | No | True when more matches exist than were returned. |
| totalCount | No | Matches before the limit was applied. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
| unassigned_range | No | For an unassigned code, the registry range it falls in, e.g. "432-450". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the bar is lower. The description still adds real behavior beyond them: the specific fields returned (phrase, class, reference with section, temporary/obsoleted/unused flags) and the important edge case that an unassigned code returns found: false with its unassigned range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences, front-loaded with the primary purpose, with zero filler. Every clause carries information: lookup mode, search mode, exclusivity constraint, and the return/edge-case behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not enumerate return values, yet it still adds the useful unassigned-code edge case. The only gap is that it doesn't position itself relative to the many sibling lookup tools, which matters in a family of nine similarly named tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented with ranges, defaults, and the mutual-exclusion note. The description restates the code/keyword exclusivity but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look up / search) and resource (HTTP status code in the IANA registry), plus the secondary mode of searching reason phrases. An agent can distinguish it from iana_lookup_http_field or iana_get_rfc_status purely from the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the code-vs-keyword selection rule ('Pass exactly one of'), which tells the agent how to invoke it correctly. It does not, however, contrast this tool against siblings like iana_search_registries or iana_lookup_http_field, so there is no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_lookup_language_tagValidate a BCP 47 language tagARead-onlyIdempotentInspect
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; each part is checked, deprecated subtags report their preferred value, and a canonical tag is returned when the tag is valid. A single subtag registered under several types (e.g. "TW") lists the other types.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | 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. | |
| limit | No | Maximum number of description matches to return, 1–100. Default 25. Tag mode always returns every part of the tag. | |
| offset | No | Number of description matches to skip; pass the next_offset of the previous response to get the next page. Default 0. | |
| description | No | Words matched as whole tokens against subtag descriptions, e.g. "Swiss German" or "Cyrillic". Pass this or tag, not both. | |
| subtag_type | No | Description mode only: return only records of this Type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| mode | No | Which lookup ran. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Results returned. |
| valid | No | Tag mode: true when well-formed, every subtag is registered and correctly placed, and no variant or singleton repeats. |
| issues | No | Tag mode: findings; empty for a clean tag. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| matches | No | Description mode: matching records, exact description matches first, then registry order. |
| subtags | No | Tag mode: the parts in order, after any whole-tag record; parsing stops at the first part the syntax cannot place. |
| tag_input | No | Tag mode: the tag as read, after underscores became hyphens. |
| truncated | No | True when more matches exist than were returned. |
| totalCount | No | Matches before the limit was applied. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
| well_formed | No | Tag mode: true when the tag follows RFC 5646 syntax or is grandfathered. |
| canonical_tag | No | Tag mode, valid tags only: canonical form (preferred values applied, extlang reduced, case normalized). |
| also_registered_as | No | Tag mode, single-subtag input: records of other types under the same subtag, e.g. region "TW" beside language "tw". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the burden is light, and the description still adds substantive behavior: the tag is decomposed into language/extlang/script/region/variant/extension/private-use, deprecated subtags report their preferred value, and a canonical tag is returned. That is meaningful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the core action front-loaded and supporting behavior (canonicalization, deprecation, multi-type subtags) following in logical order. No padding, though the final subtag-type sentence is a niche detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, yet the description still sketches the response (parts checked, preferred value for deprecated subtags, canonical tag, alternate types). Combined with a fully documented schema, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters (including the subtag_type enum and limit/offset pagination) are already documented in the schema. The description restates the mutually exclusive tag/description rule and gives examples, but adds little syntax or unit information the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb pair and resource: parse/validate a BCP 47 language tag against the IANA Language Subtag Registry, plus search subtags by description. This clearly separates it from the iana_lookup_http_field / lookup_media_type siblings, which address entirely different registries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the mode-selection rule explicitly — pass exactly one of `tag` or `description` — and illustrates each mode with examples. It does not name a sibling as an alternative or state when-not-to-use, but for a self-contained dual-mode lookup that guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_lookup_media_typeLook up a media typeARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| type | No | Full media type, case-insensitive, e.g. "application/json" ("; charset=utf-8" and other parameters are dropped). Pass this or keyword, not both. | |
| limit | No | Maximum number of results to return, 1–100. Default 25. | |
| offset | No | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. | |
| keyword | No | 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-extension statement, when the template has one. Pass this or type, not both. | |
| top_level | No | Keep only types under this top-level type, e.g. "image". Keyword mode only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| mode | No | Which lookup ran. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when a registered media type matched. |
| shown | No | Results returned. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| truncated | No | True when more matches exist than were returned. |
| totalCount | No | Matches before the limit was applied. |
| media_types | No | Matching media types: exact name hits first, then registry order. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
| normalized_type | No | Type mode: the type looked up, lowercased, parameters removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/openWorld/idempotent, yet the description adds meaningful behavior: exact `type` lookups read the registration template and surface file-extension, intended-usage, and deprecated-alias statements, the template.available:false case, and replacement reporting for deprecated/obsoleted types. This is real context beyond the safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then layers mode selection and return behavior in dense but purposeful sentences. No filler, though the paragraph grows long and could be broken for scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter read tool with an output schema and full annotations, the description covers input modes, matching semantics, and edge cases (no template, deprecated types, unregistered 'x-' types). An agent has enough to call it correctly; only sibling routing is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including the enum, bounds, and mutual-exclusion rule. The description reinforces the type-vs-keyword choice but adds no syntax or format detail the schema lacks, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Look up') and resource ('registered media (MIME) types'), so the agent immediately knows what the tool does. It does not, however, explicitly contrast itself with the sibling iana_lookup_* tools, relying on the resource noun alone for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly instructs to pass exactly one of `type` or `keyword`, explains keyword matching semantics (tokens against names/status annotations, never file extensions), and warns that unregistered 'x-' types are absent. It lacks explicit when-to-use-vs-sibling-alternative routing but covers the operational boundaries well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_lookup_penLook up a Private Enterprise NumberARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| pen | No | 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 and the iso.org.dod.internet.private.enterprise prefix are accepted). Pass this or organization, not both. | |
| limit | No | Maximum number of results to return, 1–100. Default 25. | |
| offset | No | Number of organization matches to skip; pass the next_offset of the previous response to get the next page. Default 0. | |
| organization | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| mode | No | Which lookup ran. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when a returned number is assigned to an organization. |
| shown | No | Results returned. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| sub_arcs | No | Arcs below the enterprise number, e.g. "1.2"; the enterprise assigns these. |
| truncated | No | True when more matches exist than were returned. |
| totalCount | No | Matches before the limit was applied. |
| enterprises | No | Matching entries: exact organization-name hits first, then number order. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
| requested_oid | No | The OID as requested, when it named arcs below the enterprise number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the bar is lower. The description adds genuinely useful context beyond them: that arcs below the enterprise number are assigned by the enterprise (not IANA) and that contact details are not returned, preventing false expectations about output completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose and the parameter-selection rule, then the return value and two caveats. No redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still succinctly notes what is returned and what is not (contact details). Combined with full schema coverage and clear annotations, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including the pen number/OID forms and the limit/offset pagination. The description reinforces the mutually exclusive pen/organization rule but adds little format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Look up') and resource ('Private Enterprise Number (PEN)'), and the name/title distinguish it cleanly from siblings like iana_lookup_port or iana_lookup_media_type. The description even clarifies the returned resource (organization and OID prefix).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to pass exactly one of `pen` or `organization`, which is the key usage constraint. It lacks an explicit 'when not to use' or a pointer to an alternative sibling, but the either/or selection rule is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_lookup_portLook up a port assignmentARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| port | No | 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. | |
| limit | No | Maximum number of results to return, 1–100. Default 25. | |
| offset | No | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. | |
| keyword | No | Words matched as whole tokens against service names and descriptions, e.g. "network time". Pass exactly one of port, service, or keyword. | |
| service | No | Exact service name, case-insensitive, up to 15 characters, e.g. "postgresql" or "whois++". Pass exactly one of port, service, or keyword. | |
| transport | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| mode | No | Which lookup ran. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when a returned row has a registered service name. |
| shown | No | Results returned. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| truncated | No | True when more matches exist than were returned. |
| port_class | No | Port mode: the requested port's class. |
| totalCount | No | Matches before the limit was applied. |
| assignments | No | Matching rows. Port mode: exact rows, then range rows containing the port. Other modes: ascending by port, port-less rows last. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description goes further by disclosing output behavior: per-transport rows, range rows for unassigned ports, System/User/Dynamic classification bands, and DNS-SD names appearing without a port. It adds real context, though some of it overlaps the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the mode-selection rule, then result semantics and an edge case. Every sentence carries information an agent would otherwise have to infer; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be re-explained, all six parameters are documented at 100% coverage, and the description supplies the one thing the schema cannot — how the three mutually exclusive modes behave and what the result set looks like. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the mutual-exclusivity rule and port bounds that each schema property already documents, adding little semantic meaning beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Look up IANA service name and transport protocol port assignments') and is instantly distinguishable from siblings covering other registries (HTTP status, media type, PEN, URI scheme, language tag). An agent can pick this tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection rules for the three lookup modes ('Pass exactly one of port, service, or keyword') and explains how keyword matches work. It does not, however, mention when to prefer this over the sibling iana_search_registries or state exclusions, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_lookup_uri_schemeLook up a URI schemeARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return, 1–100. Default 25. | |
| offset | No | Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0. | |
| scheme | No | Exact scheme name, case-insensitive, e.g. "https" (a trailing ":" or "://" is ignored). Pass this or keyword, not both. | |
| status | No | Keep only schemes with this registration status. Applies to both modes. | |
| keyword | No | Words matched as whole tokens against scheme names and descriptions, e.g. "websocket". Pass this or scheme, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| mode | No | Which lookup ran. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when a registered scheme matched. |
| shown | No | Results returned. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| schemes | No | Matching schemes: exact scheme hits first, then registry order. |
| truncated | No | True when more matches exist than were returned. |
| totalCount | No | Matches before the limit was applied. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety/idempotency profile is covered. The description adds little behavioral context beyond input normalization; it does not discuss pagination behavior or any other trait not already implied by the annotations and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact, front-loaded sentences: purpose, invocation constraint, and return contents. Zero waste overall, though the closing 'Returns…' sentence partially duplicates what the output schema already documents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, annotations, and an output schema, the description supplies enough to invoke the tool correctly (mode selection, normalization, return shape). Pagination via offset/next_offset is left entirely to the schema, a minor gap for a paginated lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are documented in the schema itself, including the ':'/'://' normalization and the scheme-or-keyword mutual exclusion. The description largely restates these facts and adds no meaning about limit, offset, or status beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (look up a registered URI scheme), and the resource is distinct from every sibling (http field, http status, language tag, media type, pen, port, registry records). An agent can identify the right tool from the description alone without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly specifies the two operating modes and the constraint 'Pass exactly one of `scheme` or `keyword`', with examples for each. It does not, however, contrast this tool with alternatives such as iana_search_registries, so no explicit when-not guidance is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iana_search_registriesSearch IANA registriesARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return, 1–50. Default 15. | |
| query | 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. | |
| offset | No | Number of matches to skip; pass the next_offset of the previous response to get the next page. Default 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit applied. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Results returned. |
| notice | No | Guidance on a miss, a cut list, or another condition. |
| source | No | Provenance and freshness of the answer. |
| truncated | No | True when more matches exist than were returned. |
| registries | No | Matching index entries: exact id hits first, then the closest titles. |
| totalCount | No | Matches before the limit was applied. |
| next_offset | No | Pass as offset for the next page; absent on the last. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is handled. The description adds that results include registration procedure and defining documents and that it covers the full IANA protocol registries index, which is useful behavioral context. However, it doesn't describe ranking beyond what the query schema already says, nor any limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences: purpose and examples first, then return values and registry coverage. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with annotations covering safety and an output schema (though not shown in detail), the description provides enough – what it searches, examples, return contents, and scope. It could mention pagination via offset/limit, but that is already in the schema. Minor gap in not stating result ordering beyond what the query parameter already describes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the query, limit, and offset parameters are fully documented in the schema. The description just restates that it searches titles and categories, adding no extra syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Find) and resource (IANA protocol registries and sub-registries) with matching scope (titles and protocol categories). It also names the downstream sibling iana_get_registry_records whose inputs it produces, clearly distinguishing it from the lookup_* tools that resolve specific values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (to discover registries by keyword) and examples like 'tls cipher' show how to query. It mentions the relationship with iana_get_registry_records but doesn't explicitly say when not to use it or describe cases where a direct lookup tool would be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
- First observed
iana_get_registry_records - First observed
iana_get_rfc_status - First observed
iana_lookup_http_field - First observed
iana_lookup_http_status - First observed
iana_lookup_language_tag - First observed
iana_lookup_media_type - First observed
iana_lookup_pen - First observed
iana_lookup_port - First observed
iana_lookup_uri_scheme - First observed
iana_search_registries
Related MCP Connectors
Find the organization behind a MAC address or OUI prefix in the IEEE registries. No auth, no key.
Free, keyless domain registration lookup via RDAP: registered, available, registrar, expiration.
Look up any domain, IP address or AS number: hosting, DNS, registration, email, TLS and headers.
Read the web (page text, DNS, WHOIS, TLS, uptime) + research (Wikipedia, arXiv, GitHub, packages).
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables coding agents to retrieve exact RFC section text, status and obsoleted-by chains, errata, and IANA registry values such as HTTP status codes, media types, and port numbers.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables retrieval of full RFC text, metadata, errata, and BCP/STD mappings from rfc-editor.org, plus substring search across the RFC index.185 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query registry RDAP services for domain, IP, ASN, entity, and nameserver registration records — including ccTLDs that IANA's bootstrap omits — with unregistered domains returned as answers rather than errors. Requires no authentication or API key.185 npmMIT
- AlicenseNot gradedqualityAmaintenanceLook up countries, timezones, periodic table elements, physical constants, units, HTTP status codes, and MIME types via MCP. STDIO or Streamable HTTP.200 npm1Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.