{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T15:59:49.100Z","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries","markdownUrl":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries.md","server":{"slug":"cyanheads-iana-registries-mcp-server","name":"io.github.cyanheads/iana-registries-mcp-server","registryName":"io.github.cyanheads/iana-registries-mcp-server","description":"Find IANA ports, MIME types, HTTP codes/fields, URI schemes, PENs, BCP 47 tags, RFCs, any registry.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"iana-registries","type":"remote","identifier":"https://iana-registries.caseyjhand.com/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries","version":"0.3.0","transport":null,"scoredAt":"2026-11-05T04:54:17.561Z"},"score":{"total":89,"tier":"high trust","status":"scored","weekDelta":4,"history":[{"date":"2026-11-05","total":89},{"date":"2026-11-04","total":89},{"date":"2026-11-03","total":89},{"date":"2026-11-02","total":89},{"date":"2026-11-01","total":89},{"date":"2026-10-31","total":86},{"date":"2026-10-30","total":85},{"date":"2026-10-29","total":85},{"date":"2026-10-28","total":85},{"date":"2026-10-27","total":84},{"date":"2026-10-26","total":84},{"date":"2026-10-25","total":83},{"date":"2026-10-24","total":83},{"date":"2026-10-23","total":82},{"date":"2026-10-22","total":82},{"date":"2026-10-21","total":81},{"date":"2026-10-20","total":81},{"date":"2026-10-19","total":80},{"date":"2026-10-18","total":80},{"date":"2026-10-17","total":80},{"date":"2026-10-16","total":79},{"date":"2026-10-15","total":79},{"date":"2026-10-14","total":78},{"date":"2026-10-13","total":78},{"date":"2026-10-12","total":77},{"date":"2026-10-10","total":77},{"date":"2026-10-07","total":75},{"date":"2026-10-05","total":74},{"date":"2026-10-04","total":74},{"date":"2026-10-03","total":73}]},"categories":[{"name":"Endpoint Security","score":83,"verdict":"partial","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation.","HTTPS is enforced; there's no plaintext access path.","The HSTS (Strict-Transport-Security) header is present.","DNSSEC is configured correctly; the domain's records validate against the full chain to the root."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.none_no_destructive","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.validated","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":75,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (excellent).","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.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"excellent"}},{"code":"schema.footprint_heavy","args":{"avg":"372","items":"11","tools":"10","tokens":"4093","resources":"1"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":100,"verdict":"pass","reasons":["No destabilizing schema changes in the last 30 days."],"codes":[{"code":"stability.stable","args":{}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","100% of tool parameters carry a description.","Structured output schemas are declared (100% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"10"}},{"code":"toolsafety.manipulation_clean","args":{"units":"12","judged":"12"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a current MCP spec version (2026-07-28)."],"codes":[{"code":"protocol.current","args":{"version":"2026-07-28"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"iana-registries","type":"remote","identifier":"https://iana-registries.caseyjhand.com/mcp","withdrawn":false,"score":89,"current":true,"url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries","markdownUrl":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries.md"},{"slug":"cyanheads-iana-registries-mcp-server","type":"npm","identifier":"@cyanheads/iana-registries-mcp-server","withdrawn":false,"score":39,"current":false,"url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/cyanheads-iana-registries-mcp-server","markdownUrl":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/cyanheads-iana-registries-mcp-server.md"}],"facts":[{"label":"Endpoint","value":"https://iana-registries.caseyjhand.com/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"0.3.0"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"iana_lookup_port","title":"Look up a port assignment","description":"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.","inputs":[{"name":"keyword","type":"string","required":false,"description":"Words matched as whole tokens against service names and descriptions, e.g. \"network time\". Pass exactly one of port, service, or keyword."},{"name":"limit","type":"integer","required":false,"description":"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":"offset","type":"integer","required":false,"description":"Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0."},{"name":"port","type":"integer","required":false,"description":"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."},{"name":"service","type":"string","required":false,"description":"Exact service name, case-insensitive, up to 15 characters, e.g. \"postgresql\" or \"whois++\". Pass exactly one of port, service, or keyword."},{"name":"transport","type":"string","required":false,"description":"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."}],"outputs":[{"name":"assignments","type":"array","required":false,"description":"Matching rows. Port mode: exact rows, then range rows containing the port. Other modes: ascending by port, port-less rows last."},{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"True when a matching row after transport filtering has a registered service name; keyword mode checks all matches before paging."},{"name":"mode","type":"string","required":false,"description":"Which lookup ran."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"port_class","type":"object","required":false,"description":"Port mode: the requested port's class."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":384},{"name":"iana_lookup_media_type","title":"Look up a media type","description":"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.","inputs":[{"name":"keyword","type":"string","required":false,"description":"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-…"},{"name":"limit","type":"integer","required":false,"description":"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":"offset","type":"integer","required":false,"description":"Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0."},{"name":"top_level","type":"string","required":false,"description":"Keep only types under this top-level type, e.g. \"image\". Keyword mode only."},{"name":"type","type":"string","required":false,"description":"Full media type, case-insensitive, e.g. \"application/json\" (\"; charset=utf-8\" and other parameters are dropped). Pass this or keyword, not both."}],"outputs":[{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"True when a registered media type matched."},{"name":"media_types","type":"array","required":false,"description":"Matching media types: exact name hits first, then registry order."},{"name":"mode","type":"string","required":false,"description":"Which lookup ran."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"normalized_type","type":"string","required":false,"description":"Type mode: the type looked up, lowercased, parameters removed."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":361},{"name":"iana_lookup_http_status","title":"Look up an HTTP status code","description":"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.","inputs":[{"name":"code","type":"integer","required":false,"description":"Status code to look up, 100–599 (a digit string such as \"429\" also works). Pass this or keyword, not both."},{"name":"keyword","type":"string","required":false,"description":"Words matched as whole tokens against registered reason phrases, e.g. \"too many\" or \"gateway\". Pass this or code, not both."},{"name":"limit","type":"integer","required":false,"description":"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":"offset","type":"integer","required":false,"description":"Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0."}],"outputs":[{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"True when a registered status matched."},{"name":"mode","type":"string","required":false,"description":"Which lookup ran."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"statuses","type":"array","required":false,"description":"Matching status codes: exact phrase hits first, then registry order."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."},{"name":"unassigned_range","type":"string","required":false,"description":"For an unassigned code, the registry range it falls in, e.g. \"432-450\"."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":239},{"name":"iana_lookup_http_field","title":"Look up an HTTP field name","description":"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.","inputs":[{"name":"keyword","type":"string","required":false,"description":"Words matched as whole tokens against field names and registry comments, e.g. \"cache\". Pass this or name, not both."},{"name":"limit","type":"integer","required":false,"description":"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":"name","type":"string","required":false,"description":"Exact field name, case-insensitive, e.g. \"Content-Type\" (a trailing \":\" is ignored). Pass this or keyword, not both."},{"name":"offset","type":"integer","required":false,"description":"Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0."},{"name":"status","type":"string","required":false,"description":"Keep only fields with this registration status. Applies to both modes."}],"outputs":[{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"fields","type":"array","required":false,"description":"Matching fields: exact name hits first, then registry order."},{"name":"found","type":"boolean","required":false,"description":"True when a registered field matched."},{"name":"mode","type":"string","required":false,"description":"Which lookup ran."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":264},{"name":"iana_lookup_uri_scheme","title":"Look up a URI scheme","description":"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.","inputs":[{"name":"keyword","type":"string","required":false,"description":"Words matched as whole tokens against scheme names and descriptions, e.g. \"websocket\". Pass this or scheme, not both."},{"name":"limit","type":"integer","required":false,"description":"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":"offset","type":"integer","required":false,"description":"Number of keyword matches to skip; pass the next_offset of the previous response to get the next page. Default 0."},{"name":"scheme","type":"string","required":false,"description":"Exact scheme name, case-insensitive, e.g. \"https\" (a trailing \":\" or \"://\" is ignored). Pass this or keyword, not both."},{"name":"status","type":"string","required":false,"description":"Keep only schemes with this registration status. Applies to both modes."}],"outputs":[{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"True when a registered scheme matched."},{"name":"mode","type":"string","required":false,"description":"Which lookup ran."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"schemes","type":"array","required":false,"description":"Matching schemes: exact scheme hits first, then registry order."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":237},{"name":"iana_lookup_pen","title":"Look up a Private Enterprise Number","description":"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.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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":"offset","type":"integer","required":false,"description":"Number of organization matches to skip; pass the next_offset of the previous response to get the next page. Default 0."},{"name":"organization","type":"string","required":false,"description":"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."},{"name":"pen","type":"string","required":false,"description":"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…"}],"outputs":[{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"enterprises","type":"array","required":false,"description":"Matching entries: exact organization-name hits first, then number order."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"found","type":"boolean","required":false,"description":"True when the number is assigned, or any assigned organization matches before paging."},{"name":"mode","type":"string","required":false,"description":"Which lookup ran."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"requested_oid","type":"string","required":false,"description":"The OID as requested, when it named arcs below the enterprise number."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"sub_arcs","type":"string","required":false,"description":"Arcs below the enterprise number, e.g. \"1.2\"; the enterprise assigns these."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":350},{"name":"iana_lookup_language_tag","title":"Validate a BCP 47 language tag","description":"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.","inputs":[{"name":"description","type":"string","required":false,"description":"Words matched as whole tokens against subtag descriptions, e.g. \"Swiss German\" or \"Cyrillic\". Pass this or tag, not both."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"offset","type":"integer","required":false,"description":"Number of description matches to skip; pass the next_offset of the previous response to get the next page. Default 0."},{"name":"subtag_type","type":"string","required":false,"description":"Description mode only: return only records of this Type."},{"name":"tag","type":"string","required":false,"description":"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."}],"outputs":[{"name":"also_registered_as","type":"array","required":false,"description":"Tag mode, single-subtag input: records of other types under the same subtag, e.g. region \"TW\" beside language \"tw\"."},{"name":"canonical_tag","type":"string","required":false,"description":"Tag mode, valid tags only: canonical form (preferred values applied, variant collisions deduplicated, registered heploc context normalized, extlang reduced, case normalized)."},{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"extension_source","type":"object","required":false,"description":"Provenance of the allocation registry copy; absent when unavailable or no extensions were read."},{"name":"issues","type":"array","required":false,"description":"Tag mode: findings; empty for a clean tag."},{"name":"matches","type":"array","required":false,"description":"Description mode: matching records, exact description matches first, then registry order."},{"name":"mode","type":"string","required":false,"description":"Which lookup ran."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"subtags","type":"array","required":false,"description":"Tag mode: the parts in order, after any whole-tag record; parsing stops at the first part the syntax cannot place."},{"name":"tag_input","type":"string","required":false,"description":"Tag mode: the tag as read, after underscores became hyphens."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."},{"name":"valid","type":"boolean","required":false,"description":"Tag mode: true when well-formed, every subtag is registered and correctly placed, and no variant or singleton repeats."},{"name":"well_formed","type":"boolean","required":false,"description":"Tag mode: true when the tag follows RFC 5646 syntax or is grandfathered."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":356},{"name":"iana_get_rfc_status","title":"Get RFC, Internet-Draft, and series status","description":"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.","inputs":[{"name":"ids","type":"array","required":true,"description":"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…"},{"name":"ids_offset","type":"integer","required":false,"description":"Number of canonically distinct ids to skip, default 0. Pass next_ids_offset with the same original ids to continue; retry failed ids separately."}],"outputs":[{"name":"deferred_count","type":"number","required":false,"description":"All distinct ids remaining after this selected batch, including ids beyond the preview."},{"name":"deferred_guidance","type":"string","required":false,"description":"How to continue the original id list and retry selected failed ids separately."},{"name":"deferred_ids","type":"array","required":false,"description":"Preview of the next at most ten canonical ids, not the entire remainder; no upstream work started for these ids."},{"name":"deferred_reason","type":"string","required":false,"description":"More distinct ids remain beyond the ten-id batch limit."},{"name":"documents","type":"array","required":false,"description":"One entry per distinct requested id, in request order, excluding ids in failed."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"failed","type":"array","required":false,"description":"Ids whose lookup failed upstream or was cut by the call's request limit; the rest of the batch still answered."},{"name":"next_ids_offset","type":"number","required":false,"description":"Pass as ids_offset with the same original ids to resolve the next batch; absent at or past the end."},{"name":"notice","type":"string","required":false,"description":"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…"},{"name":"total_ids","type":"number","required":false,"description":"Total canonically distinct ids before ids_offset and the ten-id batch limit."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":479},{"name":"iana_search_registries","title":"Search IANA registries","description":"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.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Requested maximum results, 1–1,000,000; values above 50 are clamped to 50 and disclosed as requested_limit and effective_limit. Default 15."},{"name":"offset","type":"integer","required":false,"description":"Number of matches to skip; pass the next_offset of the previous response to get the next page. Default 0."},{"name":"query","type":"string","required":true,"description":"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."}],"outputs":[{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"next_offset","type":"number","required":false,"description":"Pass as offset for the next page; absent on the last."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"registries","type":"array","required":false,"description":"Matching index entries: exact id hits first, then the closest titles."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":204},{"name":"iana_get_registry_records","title":"Read IANA registry records","description":"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.","inputs":[{"name":"contains","type":"string","required":false,"description":"Words matched as whole tokens against every field and reference id, e.g. \"chacha20\". Records with a field equal to the words come first."},{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous page; reuse it only with the same registry, subregistry, value, field, and contains."},{"name":"field","type":"string","required":false,"description":"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…"},{"name":"limit","type":"integer","required":false,"description":"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":"registry","type":"string","required":true,"description":"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)."},{"name":"subregistry","type":"string","required":false,"description":"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."},{"name":"value","type":"string","required":false,"description":"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…"}],"outputs":[{"name":"cap","type":"number","required":false,"description":"The limit applied."},{"name":"columns","type":"array","required":false,"description":"Field (XML element) names seen, in first-seen order."},{"name":"description","type":"string","required":false,"description":"Description of the table read, or of the registry when listing; a YANG module registry names its module file here."},{"name":"effective_limit","type":"number","required":false,"description":"The response limit after clamping, present when clamped."},{"name":"error","type":"object","required":false,"description":"Present when the call failed. Absent on success."},{"name":"next_cursor","type":"string","required":false,"description":"Pass as cursor, with the same filters, for the next page."},{"name":"notes","type":"array","required":false,"description":"Notes of the table read (of the registry, when listing), first page only."},{"name":"notes_truncated","type":"boolean","required":false,"description":"Indicates truncated notes when present; omitted for whole notes."},{"name":"notice","type":"string","required":false,"description":"Guidance on a miss, a cut list, or another condition."},{"name":"offset","type":"number","required":false,"description":"Matching records before this page, on pages after the first."},{"name":"records","type":"array","required":false,"description":"Whole records in registry order (with contains, records with a field equal to the words first), up to limit."},{"name":"references","type":"array","required":false,"description":"The documents that define the table read."},{"name":"registration_procedure","type":"string","required":false,"description":"Registration rule of the table read, or of the registry when listing."},{"name":"registration_ranges","type":"array","required":false,"description":"Allocation ranges, when the table defines them."},{"name":"registry_id","type":"string","required":false,"description":"Registry id."},{"name":"registry_notes","type":"array","required":false,"description":"The registry root's notes and footnotes, on the first page of a sub-registry read; records cite them by anchor."},{"name":"registry_title","type":"string","required":false,"description":"Registry title."},{"name":"requested_limit","type":"number","required":false,"description":"The requested limit, present when clamped."},{"name":"shown","type":"number","required":false,"description":"Results returned."},{"name":"source","type":"object","required":false,"description":"Provenance and freshness of the answer."},{"name":"subregistries","type":"array","required":false,"description":"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."},{"name":"subregistry_id","type":"string","required":false,"description":"Id of the sub-registry the records come from."},{"name":"subregistry_title","type":"string","required":false,"description":"Title of that sub-registry."},{"name":"totalCount","type":"number","required":false,"description":"Matches before the limit was applied."},{"name":"truncated","type":"boolean","required":false,"description":"True when more matches exist than were returned."},{"name":"value_field","type":"string","required":false,"description":"The table's key column: each record's value comes from it, and the value filter matches it unless field names another."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":756}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T04:54:17.000Z","track":"remote","endpoint":"https://iana-registries.caseyjhand.com/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=caseyjhand.com","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-11-02T21:39:32Z","notAfter":"2027-01-31T22:39:21Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"secure","label":"Secure","name":"iana-registries.caseyjhand.com.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"com.","outcome":"verified","label":"Verified"},{"zone":"caseyjhand.com.","outcome":"verified","label":"Verified"},{"zone":"iana-registries.caseyjhand.com.","outcome":"verified","label":"Verified"}]},"auth":{"outcome":"none","label":"No authorisation required","gate":null,"gateLabel":null,"status":200,"authorizationServers":[]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":301},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-02","recent":[{"id":"chg_01a195a2-74bd-7677-9590-30cf6b04011d","kind":"check.verdict","summary":"Stability (0.97 → pass)","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74bd-7677-9590-30cf6b04011d"},{"id":"chg_01a195a2-74c0-7bfd-94ba-2ec60081c138","kind":"score.total_changed","summary":"Trust score (86 → 89)","materiality":"functional","direction":"improvement","scoreDelta":3,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74c0-7bfd-94ba-2ec60081c138"},{"id":"chg_01a195a2-74c0-76ce-9d97-c184d6440493","kind":"server.version_changed","summary":"Server version (0.2.1 → 0.3.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74c0-76ce-9d97-c184d6440493"},{"id":"chg_01a195a2-74c0-7137-a9e8-1de37477e8f1","kind":"resource.added","summary":"New resource “iana-registries-guide”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74c0-7137-a9e8-1de37477e8f1"},{"id":"chg_01a195a2-74bf-7ae1-b304-7593061e6970","kind":"param.description_changed","summary":"“iana_lookup_pen” reworded the description of “pen”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74bf-7ae1-b304-7593061e6970"},{"id":"chg_01a195a2-74bf-7640-af2f-847759da111e","kind":"param.description_changed","summary":"“iana_get_registry_records” reworded the description of “value”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74bf-7640-af2f-847759da111e"},{"id":"chg_01a195a2-74bf-700e-814f-f565b32d20bc","kind":"tool.description_changed","summary":"Tool “iana_get_registry_records” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74bf-700e-814f-f565b32d20bc"},{"id":"chg_01a195a2-74be-79b0-8058-c5b8f6a95acd","kind":"check.appeared","summary":"First check of Schema quality (100)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a195a2-74be-79b0-8058-c5b8f6a95acd"},{"id":"chg_01a19041-fc59-7049-974b-e7dbe1267020","kind":"score.total_changed","summary":"Trust score (85 → 86)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a19041-fc59-7049-974b-e7dbe1267020"},{"id":"chg_01a180cd-8278-70fa-9927-b9dada4b2360","kind":"score.total_changed","summary":"Trust score (84 → 85)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a180cd-8278-70fa-9927-b9dada4b2360"},{"id":"chg_01a17681-ac0e-7498-98d7-f7f090179086","kind":"score.total_changed","summary":"Trust score (83 → 84)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a17681-ac0e-7498-98d7-f7f090179086"},{"id":"chg_01a16c30-92e0-7efe-86f8-23a83e6499dd","kind":"score.total_changed","summary":"Trust score (82 → 83)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a16c30-92e0-7efe-86f8-23a83e6499dd"},{"id":"chg_01a161e4-f0cd-743b-8f2b-12d851278e0d","kind":"score.total_changed","summary":"Trust score (81 → 82)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-22","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a161e4-f0cd-743b-8f2b-12d851278e0d"},{"id":"chg_01a15799-0491-7457-961b-ac735cbb0e95","kind":"score.total_changed","summary":"Trust score (80 → 81)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-20","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a15799-0491-7457-961b-ac735cbb0e95"},{"id":"chg_01a14c6c-bd1f-7ae3-b91c-a82d22db6f93","kind":"param.added_optional","summary":"“iana_get_rfc_status” added an optional parameter “ids_offset”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a14c6c-bd1f-7ae3-b91c-a82d22db6f93"},{"id":"chg_01a14c6c-bd2a-7976-8700-bbd35f34094b","kind":"server.instructions_changed","summary":"The server rewrote its instructions, which are the text every model session reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a14c6c-bd2a-7976-8700-bbd35f34094b"},{"id":"chg_01a14c6c-bd1d-7bbc-83c6-2e26acf964f3","kind":"param.description_changed","summary":"“iana_get_registry_records” reworded the description of “limit”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a14c6c-bd1d-7bbc-83c6-2e26acf964f3"},{"id":"chg_01a14c6c-bd1e-7916-ac24-a5c191de2a97","kind":"param.description_changed","summary":"“iana_get_registry_records” reworded the description of “value”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a14c6c-bd1e-7916-ac24-a5c191de2a97"},{"id":"chg_01a14c6c-bd1e-7d89-b951-b98fa37fcb69","kind":"tool.description_changed","summary":"Tool “iana_get_rfc_status” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a14c6c-bd1e-7d89-b951-b98fa37fcb69"},{"id":"chg_01a14c6c-bd1f-7691-841f-787d50669187","kind":"param.description_changed","summary":"“iana_get_rfc_status” reworded the description of “ids”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries#chg-chg_01a14c6c-bd1f-7691-841f-787d50669187"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries/changelog.json"},"links":{"html":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries","markdown":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries.md","changelogJson":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries/changelog.json","changelogRss":"https://verifymcp.io/servers/cyanheads-iana-registries-mcp-server/iana-registries.xml","external":[{"label":"Remote endpoint","href":"https://iana-registries.caseyjhand.com/mcp"},{"label":"Repository","href":"https://github.com/cyanheads/iana-registries-mcp-server"}]}}