Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12 without a key byte leaving

NPM · PKINATIVE-MCP

PKI MCP server: inspect, verify, issue, sign X.509, CSR, CRL, OCSP, CMS, TSP, PKCS#12. 34 tools

Available components

81 Trust /100

Last scanned (21 hours ago)

Scores higher than 65% of npm servers

Category Security

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 0 of 4 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Nizoka/pkinative-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 4 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability71
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 30550 tokens (~898/item across 34 items; 34 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 34 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 35 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 18 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 17 Oct 26 66

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 22 Oct 2026 · Analysed npm/pkinative-mcp@1.0.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo Nizoka/pkinative-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Nizoka/pkinative-mcp/.github/workflows/publish.yml@refs/tags/v1.0.0
Rekor log index 3294197838
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:f4bec47b060f38fe037879a574e80d6edc9dd643d53a2a8bbfc2065f9e32f608b1036b003f51eff124b244d0bb4fc607aaaae4086d078ec637792c2cf

Background: How many MCP packages publish verified provenance →

Dependencies 4 packages
Packages resolved 4
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 34 exposed · ~29,224 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
amend_cms ~934

The one edit a signed message legitimately receives afterwards, every signed octet unchanged: operation 'add-unsigned-attribute' appends `attribute` (one DER Attribute as hex) to signer `signerIndex`'s unsigned attributes; 'add-timestamp' appends `token` — a TimeStampToken, or the whole TimeStampResp a TSA returned (unwrapped; a declined response is refused) — as id-aa-signatureTimeStampToken (CAdES-T / PAdES B-T). A counter time-stamp stamps the signer's SIGNATURE VALUE, not the document: the token's imprint is checked against that value BEFORE anything is written and a token over anything else is refused with VALIDATION_ERROR (data.detail PKI_REASON_TSP_IMPRINT_MISMATCH, with the remedy: inspect_cms fields:['signerInfos.signature'] → hash → create_timestamp_request digestHex → POST to your TSA yourself → amend_cms). Trust is not judged here (verify_cms is). Deterministic for the same inputs. Refuses: NOT_FOUND for a signerIndex past the last signer, PKI_API_MISUSE for a signed-only attribute type, PKI_* for unreadable bytes. Output DER (default), PEM (CMS) or hex, inline or as a sandbox file (never overwritten).

NameTypeReqDescription
allowSha1boolean–Accept or produce SHA-1 signatures (legacy material you already trust). Default false: refused with PKI_CRYPTO_ALGORITHM_REFUSED on read, VALIDATION_ERROR on write.
attributestring–One DER Attribute (SEQUENCE { type, SET OF values }) for add-unsigned-attribute. A type RFC 5652 allows only signed is refused (PKI_API_MISUSE). Hexadecimal (an 0x prefix, colons and spaces are toler…
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'der'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
operationstringyes'add-unsigned-attribute' writes `attribute` verbatim; 'add-timestamp' writes `token` as id-aa-signatureTimeStampToken after checking its imprint.
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.p7s .p7m .p7b .cms .der for der; .pem for pem). Key-bearing extensions (.key .p8 .p12 .pfx) are…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
signedDataobjectyesThe CMS SignedData to amend (CMS / PKCS7 PEM, or DER: .p7s .p7m): exactly one of pem / derBase64 / path.
signerIndexinteger–Which signer receives the attribute (encoded order; NOT_FOUND past the last).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
tokenobject–The time-stamp for add-timestamp: a TimeStampToken (.tst) or the whole TimeStampResp (.tsr, unwrapped to its token; a declined response is refused): exactly one of pem / derBase64 / path.
NameTypeReqDescription
diagnosticCountsobjectyesOccurrences per diagnostic code.
diagnosticsarrayyesNon-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
encodingstringyes–
filePathstring–Sandboxed absolute path (when outputMode='file').
hexstring–The artefact as lowercase hex (when encoding='hex').
modestringyes–
sha256stringyesSHA-256 of the DER bytes (lowercase hex) — the reproducibility proof.
sizeBytesintegeryesSize of the DER artefact.
summaryobjectyes–

No examples provided.

build_certificate_path ~744

Path discovery only (RFC 5280 §6 path building): walks from `leaf` through the untrusted `candidates` to one of YOUR `trustAnchors` under the structural rules evaluated at `at` (validity, basic constraints, key usage, name constraints, the `policy` inputs; `purposes` steer discovery but the leaf's extended key usage is judged by verify_certificate_chain, not here) and reports the path it found, leaf first up to the anchor. NO signature is verified: the engine marks every link PKI_REASON_SIGNATURE_NOT_CHECKED, so `valid` is always false and the verdict of this tool is `found` (a path reached an anchor, `structuralReasons` empty); the leaf alone with PKI_REASON_NO_TRUST_ANCHOR when none did. Use it to learn which intermediates a chain needs, then validate_certificate_path (ordered path, signatures) or verify_certificate_chain (the full verdict with revocation). Never isError for a negative result. Pin `at` for a reproducible, cacheable result. Token-frugal: verbosity:'summary' (found, structuralReasonCodes, pathLength).

NameTypeReqDescription
atstring–The instant the verdict is evaluated at. An ISO 8601 date-time (UTC unless zoned; e.g. 2027-01-01T00:00:00Z), epoch milliseconds as digits, or 'now'. Omitted: PKINATIVE_MCP_AT when the operator pinne…
candidatesarray–Untrusted intermediate certificates the path may use (every PEM block of every item is taken). Optional; the certificates embedded in a CMS message are also candidates.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
leafobjectyesThe end-entity certificate to start from: exactly one of pem / derBase64 / path.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
policyobject–RFC 5280 §6.1.1 policy inputs.
purposesarray–Extended key usages the leaf must allow: serverAuth, clientAuth, codeSigning, emailProtection, timeStamping, ocspSigning, any, or a dotted OID.
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
trustAnchorsarrayyesTrust anchors (root certificates you trust) (every PEM block of every item is taken). At least one is required: a verdict is relative to the anchors you name.
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
evaluatedAtstring–The ISO instant used — re-pass it as `at` to reproduce the result.
evaluatedAtSourcestring––
exploredinteger–Candidate paths explored (bounded by limits.maxPathsExplored).
foundboolean–A path from the leaf to one of the trust anchors was found and passes the structural rules (structuralReasons empty). This is the verdict of THIS tool; the signatures are not checked.
patharray–The path found, leaf first, up to (and including) the trust anchor; the leaf alone (with the reason) when no anchor was reached.
pathLengthinteger––
reasonCodesarray––
reasonsarray–Why the verdict is negative (empty when valid): the engine PKI_REASON_* codes, each with the standard it cites and the path of the offending element. A reason is returned, never thrown.
signaturesCheckedboolean–Always false: run validate_certificate_path or verify_certificate_chain for the signatures.
structuralReasonCodesarray––
structuralReasonsarray–reasons[] without the PKI_REASON_SIGNATURE_NOT_CHECKED markers: what actually stopped the walk (empty when found).
validboolean–The engine verdict — always false here, because no signature was verified (PKI_REASON_SIGNATURE_NOT_CHECKED on every link). Read `found`.

No examples provided.

check_certificate_name ~758

The RFC 6125 identity verdict, two forms. Certificate form: `certificate` + exactly one of `host` (DNS name as it appeared in the URL) / `ip` — is the certificate valid for that identity (subjectAltName dNSName / iPAddress; wildcards under `allowWildcards`, default true; `allowCommonNameFallback`, default false, reads a CN-only certificate's commonName and then needs `chain` — the issuing CAs, leaf's issuer first — so the CN is held to their dNSName name constraints as a SAN would be). Match form: `presented` (the certificate's dNSName, possibly a wildcard) + `reference` — one RFC 6125 §6.4 name comparison, no certificate. A negative verdict is valid:false + reasons[] (PKI_REASON_NAME_MISMATCH, …) in structuredContent — never isError. The name only: it is not trust (verify_certificate_chain with serverName is the full verdict), not validity, not revocation. Token-frugal: verbosity:'summary'.

NameTypeReqDescription
allowCommonNameFallbackboolean–Fall back to the subject commonName when the certificate carries no dNSName and no iPAddress (CA/Browser Forum forbids CN-only certificates since 2017; needs chain). Default false.
allowWildcardsboolean–Accept a wildcard name (*.example.test) at all. Default true; false is right for an internal PKI that issues none.
certificateobject–The certificate to judge (certificate form): exactly one of pem / derBase64 / path. With exactly one of host / ip. Exclusive with presented / reference.
chainarray–The issuing certificates, leaf's issuer first (every PEM block of every item is taken). Optional; read only by the commonName fallback, which holds a CN read as a host name to the dNSName name constr…
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
hoststring–The reference DNS name as it appeared in the URL (one trailing dot is ignored). Exclusive with ip.
ipstring–The reference IPv4 or IPv6 address. Exclusive with host.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
presentedstring–Match form: the certificate's dNSName, possibly a wildcard. With reference; exclusive with certificate / host / ip / chain.
referencestring–Match form: the reference host name.
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
formstring––
matchboolean–Match form: whether presented matches reference.
presentedstring–Match form: the presented name.
reasonCodesarray––
reasonsarray–Why the verdict is negative (empty when valid): the engine PKI_REASON_* codes, each with the standard it cites and the path of the offending element. A reason is returned, never thrown.
referenceobject–The reference identity judged.
subjectstring–Certificate form: RFC 4514 subject of the certificate.
validboolean–The verdict (the match outcome in the match form). false is a negative verdict, never an error.

No examples provided.

check_certificate_purpose ~684

The RFC 5280 §4.2.1.12 purpose verdict: may `certificate` be used for `purpose` (serverAuth, clientAuth, codeSigning, emailProtection, timeStamping, ocspSigning, any, or a dotted KeyPurposeId OID)? The path judged is [certificate, ...chain] (issuers, leaf's issuer first): under `restrictIssuers` (default true, what every Web PKI validator does) a CA's own extKeyUsage restricts what it issued; `requireExplicitPurpose` (default false) refuses a certificate with no extKeyUsage instead of reading its absence as unrestricted. A negative verdict is valid:false + reasons[] (PKI_REASON_PURPOSE_NOT_PERMITTED with the path[i] element) in structuredContent — never isError; an unknown purpose name is VALIDATION_ERROR. The purpose only: not trust, validity, names or revocation (verify_certificate_chain with purposes is the full verdict). Token-frugal: verbosity:'summary'.

NameTypeReqDescription
certificateobjectyesThe end-entity certificate to judge: exactly one of pem / derBase64 / path.
chainarray–The issuing certificates, leaf's issuer first (the path is [certificate, ...chain]) (every PEM block of every item is taken). Optional; their extKeyUsage restricts the leaf under restrictIssuers.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
purposestringyesThe purpose needed: serverAuth, clientAuth, codeSigning, emailProtection, timeStamping, ocspSigning, any, or a dotted KeyPurposeId OID.
requireExplicitPurposeboolean–Require the certificate to carry extKeyUsage and name the purpose explicitly (the stricter Web PKI reading); default false = no extKeyUsage means unrestricted (RFC 5280 §4.2.1.12).
restrictIssuersboolean–Apply a CA's own extKeyUsage to what it issued (what every Web PKI validator does; no sentence of RFC 5280 requires it). Default true; false is the literal-RFC reading.
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
pathLengthinteger–1 + the chain certificates (reasons name path[i]).
purposestring–The purpose as given.
purposeNamestring|null–The registry name of that OID.
purposeOidstring–The KeyPurposeId OID judged.
reasonCodesarray––
reasonsarray–Why the verdict is negative (empty when valid): the engine PKI_REASON_* codes, each with the standard it cites and the path of the offending element. A reason is returned, never thrown.
subjectstring–RFC 4514 subject of the certificate.
validboolean–The verdict. false is a negative verdict (reasons[]), never an error.

No examples provided.

check_crl_revocation ~842

The RFC 5280 §6.3 revocation verdict of ONE `certificate` against ONE base `crl` you fetched (this server never fetches), evaluated at `at`: the list must be in scope for the certificate (issuer, issuing distribution point, reasons), fresh (nextUpdate, or `staleTolerance` ms past it), signature-verified, and the serial must not be listed (PKI_REASON_REVOKED with the reason otherwise). `delta` applies a delta CRL over the base (it must carry a deltaCRLIndicator — VALIDATION_ERROR otherwise — and name the base's number). `issuer` is the CRL issuer certificate: the base (and delta) signatures are verified against it and reported as signatureVerified / deltaSignatureVerified; without it the engine refuses the unverified list, so pass it for a real verdict. valid:false + reasons[] is a verdict, never isError. Pin `at` for a reproducible, cacheable verdict. SHA-1 signatures need allowSha1:true. Token-frugal: verbosity:'summary'. inspect_crl shows the list's facts; verify_certificate_chain with crls:[…] is the whole-chain form.

NameTypeReqDescription
allowSha1boolean–Accept or produce SHA-1 signatures (legacy material you already trust). Default false: refused with PKI_CRYPTO_ALGORITHM_REFUSED on read, VALIDATION_ERROR on write.
atstring–The instant the verdict is evaluated at. An ISO 8601 date-time (UTC unless zoned; e.g. 2027-01-01T00:00:00Z), epoch milliseconds as digits, or 'now'. Omitted: PKINATIVE_MCP_AT when the operator pinne…
certificateobjectyesThe certificate to check: exactly one of pem / derBase64 / path.
crlobjectyesThe base CRL (X509 CRL PEM or DER): exactly one of pem / derBase64 / path.
deltaobject–A delta CRL applied over the base: exactly one of pem / derBase64 / path. Must carry a deltaCRLIndicator (VALIDATION_ERROR otherwise); its base CRL number is checked against the base.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
issuerobject–The CRL issuer certificate: exactly one of pem / derBase64 / path. The base (and delta) signatures are verified against it and reported to the engine as signatureVerified. Omitted: the signatures are…
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
staleToleranceinteger–Milliseconds past nextUpdate the evidence is still accepted (default: the engine policy, none).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
crlNumberstring|null–The base CRL number (decimal), null when absent.
deltaCrlNumberstring|null–The delta CRL number (present only with `delta`).
deltaSignatureVerifiedboolean|null–The delta CRL signature against `issuer` (present only with `delta`).
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
evaluatedAtstring–The ISO instant used — re-pass it as `at` to reproduce the verdict.
evaluatedAtSourcestring––
isDeltaboolean–Whether the BASE list itself carries a deltaCRLIndicator (false for a proper base CRL).
reasonCodesarray––
reasonsarray–Why the verdict is negative (empty when valid): the engine PKI_REASON_* codes, each with the standard it cites and the path of the offending element. A reason is returned, never thrown.
signatureVerifiedboolean|null–The base CRL signature against `issuer`; null when no issuer was given (then the engine reports the list as unverified).
validboolean–true = the certificate is not revoked according to fresh, in-scope, signature-verified evidence. false is a negative verdict (reasons[]), never an error.

No examples provided.

check_ocsp_status ~1,023

The RFC 6960 verdict of ONE OCSP `response` you fetched (this server never queries a responder) for ONE `certificate`: the CertID is recomputed from `issuer` (with the hash the response used, or `hashAlgorithm`) and must be answered; the signature is verified with `responder`, else the certificates embedded in the response, else the issuer itself; the signer must be authorised (RFC 6960 §4.2.2.2: the CA, a delegate the CA issued carrying id-kp-OCSPSigning, or `responderTrusted:true` for a trust you hold out of band); then the engine judges the status (good; PKI_REASON_REVOKED / unknown otherwise), freshness at `at` (thisUpdate / nextUpdate / producedAt, `staleTolerance` and `futureTolerance` ms), and the nonce (`nonce` must be echoed; `requireNonce:true` refuses a response without one). A non-successful response status is a negative verdict with status null. valid:false + reasons[] is a verdict, never isError. Pin `at` for a reproducible, cacheable verdict. Token-frugal: verbosity:'summary' (valid, reasonCodes, status, signatureVerified, responderAuthorized, responder). create_ocsp_request builds the request you POST; inspect_ocsp_response shows the facts without a verdict.

NameTypeReqDescription
allowSha1boolean–Accept or produce SHA-1 signatures (legacy material you already trust). Default false: refused with PKI_CRYPTO_ALGORITHM_REFUSED on read, VALIDATION_ERROR on write.
atstring–The instant the verdict is evaluated at. An ISO 8601 date-time (UTC unless zoned; e.g. 2027-01-01T00:00:00Z), epoch milliseconds as digits, or 'now'. Omitted: PKINATIVE_MCP_AT when the operator pinne…
certificateobjectyesThe certificate whose status is asked: exactly one of pem / derBase64 / path.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
futureToleranceinteger–Milliseconds a thisUpdate / producedAt may lie after `at` (clock skew) and still be accepted (default: the engine policy).
hashAlgorithmstring–The CertID hash to recompute with. Default: the one the response used for this serial, else SHA-1.
issuerobjectyesThe CA certificate that issued it: exactly one of pem / derBase64 / path. Its name and key hashes form the CertID to match, and it is the authority a responder must be (or be delegated by).
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
noncestring–The nonce you put in the request (1–32 bytes; create_ocsp_request summary.nonceHex): the response must echo it. Hexadecimal (an 0x prefix, colons and spaces are tolerated).
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
requireNonceboolean–Refuse a response that carries no nonce (RFC 8954).
responderobject–The responder certificate to verify the signature with: exactly one of pem / derBase64 / path. Omitted: the certificates embedded in the response are tried, then the issuer itself.
responderTrustedboolean–State an out-of-band trust in the responder (RFC 6960 §4.2.2.2 third case): responderAuthorized is then true whatever its certificate says.
responseobjectyesThe OCSP response (DER, as the responder returned it): exactly one of pem / derBase64 / path.
staleToleranceinteger–Milliseconds past nextUpdate the evidence is still accepted (default: the engine policy, none).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
certIdHexstring–The recomputed DER CertID (hex).
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
evaluatedAtstring–The ISO instant used — re-pass it as `at` to reproduce the verdict.
evaluatedAtSourcestring––
hashAlgorithmstring–The hash the CertID was recomputed with.
reasonCodesarray––
reasonsarray–Why the verdict is negative (empty when valid): the engine PKI_REASON_* codes, each with the standard it cites and the path of the offending element. A reason is returned, never thrown.
responderstring|null–The subject of the certificate that verified the signature.
responderAuthorizedboolean–The signer is the CA itself, a delegate the CA issued with id-kp-OCSPSigning, or responderTrusted was set.
responderSourcestring|null–Where the signer came from: the `responder` input, the certificates embedded in the response, or the issuer itself.
signatureVerifiedboolean–A responder candidate verified the response signature.
statusstring|null–The status the response gives for this serial; null when the response holds no answer for it.
validboolean–true = a fresh, correctly signed, authorised answer says good. false is a negative verdict (reasons[]: revoked, unknown, stale, unauthorised, unverified, nonce …), never an error.

No examples provided.

compute_fingerprint ~812

Read-only digest of ONE object. mode:'fingerprint' (default) hashes the exact DER of the input (SHA-256 by default; SHA-1 / SHA-384 / SHA-512; webcrypto:true uses Web Crypto, same result) — what openssl x509 -fingerprint prints; mode:'key-id' computes the RFC 5280 §4.2.1.2 key identifier (SHA-1 by default, or SHA-256) of the public key found in a certificate, a CSR or a PUBLIC KEY, reporting where it came from; mode:'shake256' squeezes outputLength bytes (default 32, ≤ 1048576) of SHAKE256 — the digest of an Ed448 CMS signer. `hex` is lowercase without separators, `formatted` follows separator (':' default) and letterCase (upper default). Any PEM label or DER is accepted (a private key may be digested: the digest reveals nothing and no input byte is returned); a bundle of several blocks is refused (extract one with convert_pem). Refuses: an algorithm outside its mode, SHA-384/512 for a key identifier, outputLength or webcrypto outside their mode (VALIDATION_ERROR); key-id on an object that holds no public key (PKI_X509_* / PKI_ASN1_*). Token-frugal: verbosity:'summary', fields:[…].

NameTypeReqDescription
algorithmstring–fingerprint: SHA-1 | SHA-256 (default) | SHA-384 | SHA-512. key-id: SHA-1 (default, RFC 5280 method 1) | SHA-256. Not for shake256.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
inputobjectyesThe object to digest (any PEM label, or DER): exactly one of pem / derBase64 / path. A bundle of several blocks is refused: extract one with convert_pem.
letterCasestring–Hex case of `formatted` (`hex` is always lowercase).
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
modestring–'fingerprint' (default): the digest of the exact DER. 'key-id': the RFC 5280 §4.2.1.2 identifier of the public key of a certificate, a CSR or a PUBLIC KEY. 'shake256': SHAKE256 output of `outputLengt…
outputLengthinteger–shake256 only: output bytes (default 32, ≤ 1048576; 64 for an Ed448 CMS signer).
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
separatorstring–Placed between octets of `formatted` (default ':'; '' for none).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
verbositystring–'summary' keeps the scalar fields only (token-frugal).
webcryptoboolean–fingerprint only: digest through Web Crypto instead of the pure-TypeScript hashes (identical result).
NameTypeReqDescription
algorithmstring–SHA-1 | SHA-256 | SHA-384 | SHA-512, or 'SHAKE256'.
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
formattedstring–The digest with the separator and case asked for (AB:CD:… by default).
fromstring–key-id: where the public key came from.
hexstring–The digest as lowercase hex, no separator.
labelstring|null–The PEM label of the input, null for DER.
modestring––
outputLengthinteger–shake256: the output length in bytes.
sizeBytesinteger–Bytes digested: the DER of the input (fingerprint, shake256) or the public key bits (key-id).

No examples provided.

convert_pem ~982

The RFC 7468 layer. mode:'decode' lists every block of a PEM text (index, label, DER size, offset, RFC 1421 headers under pemMode:'lax', SHA-256 of the DER) — `label` keeps one kind, `extractIndex` also delivers that block as an artefact (encoding 'der' by default, 'pem' or 'hex'; inline as an embedded resource, or as a sandbox file with outputMode:'file' + outputPath, never overwritten). mode:'encode' wraps DER bytes (derBase64 or a DER file path) into one strict PEM block under `label` (required) and delivers it as the artefact (64-character lines, LF). A private-key block (PRIVATE KEY, ENCRYPTED PRIVATE KEY, RSA/EC/DSA PRIVATE KEY) is listed by label and size but never extracted, and never produced: SECURITY_VIOLATION (use inspect_private_key) — DER that parses as a PKCS#8 key or a PKCS#12 file is refused under ANY label. Refuses: derBase64 in decode, pem in encode, an encoding other than 'pem' in encode, a file output without extractIndex (VALIDATION_ERROR); an index past the last block (NOT_FOUND); a label absent from the text (PKI_PEM_UNEXPECTED_LABEL); a malformed text (PKI_PEM_* — pemMode:'lax' tolerates whitespace, line length and headers; a missing base64 padding is refused in both modes). Token-frugal: verbosity:'summary' (count + labels), fields:[…].

NameTypeReqDescription
encodingstring–Artefact encoding. decode + extractIndex: 'der' (default, raw bytes), 'pem' (the block re-emitted strictly) or 'hex' (inline only, ≤ 64 KiB). encode: always 'pem' (anything else is VALIDATION_ERROR).
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
extractIndexinteger–decode: also deliver the block with this index (its position in the text, as listed) as an artefact in `encoding`. A private-key block cannot be extracted (SECURITY_VIOLATION).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
inputobjectyesThe PEM text (decode: pem or a path to a PEM file) or the DER bytes (encode: derBase64 or a path to a DER file): exactly one of pem / derBase64 / path.
labelstring–decode: list only the blocks with this label. encode: the label of the block (required; e.g. 'CERTIFICATE'). Upper-case words and digits separated by single spaces; a private-key label is refused (SE…
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
modestringyes'decode' lists the blocks of a PEM text (and extracts one with extractIndex); 'encode' wraps DER bytes into one PEM block.
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.der .crt .cer .csr .crl .p7s .bin … for der; .pem for pem). Key-bearing extensions (.key .p8 .p…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
artefactobject–The artefact delivered alongside the report: its facts here, its bytes once as the embedded resource (or the resource_link in file mode).
blocksarray–decode: every block of the text (or those with `label`), in order. A private-key block is listed by label and size only.
countinteger–decode: number of blocks listed.
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
extractedobject–decode: the block delivered as the artefact.
labelstring–encode: the label written.
labelsarray–decode: the label of every block listed.
modestring––
sha256string–encode: SHA-256 of the DER wrapped (lowercase hex).
sizeBytesinteger–encode: the DER size wrapped.

No examples provided.

create_certificate ~954

Issue an X.509 v3 certificate from `spec` (subject, validity, extensions — basicConstraints, keyUsage, extendedKeyUsage, subjectAltName, issuerAltName, SKI / AKI, raw), signed through `signer` (a PKCS#8 key or a PKCS#12 file, imported as a NON-EXTRACTABLE Web Crypto key — nothing generates or exports a key here). Self-signed when no `issuerCertificate` is given (the subject key is derived from a plain signer.key, or taken from `subjectPublicKey`); issued when `issuerCertificate` is given (`subjectPublicKey` = a certificate, a CSR or a PUBLIC KEY is then required; the AKI is computed from the issuer). Serial 'random' by default (node:crypto, reported as summary.randomSerial), notBefore defaults to PKINATIVE_MCP_AT or now (whole seconds) — pin both for reproducible bytes. The new certificate is verified against the issuer (or itself) BEFORE it is returned (KEY_MISMATCH otherwise). RSA keys need signer.rsaScheme; SHA-1 needs allowSha1:true. Output PEM (default), DER or hex, inline or as a sandbox file (never overwritten).

NameTypeReqDescription
allowSha1boolean–Accept or produce SHA-1 signatures (legacy material you already trust). Default false: refused with PKI_CRYPTO_ALGORITHM_REFUSED on read, VALIDATION_ERROR on write.
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'pem'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
issuerCertificateobject–The issuing CA certificate: exactly one of pem / derBase64 / path. Omitted: the certificate is self-signed (issuer = subject, the signing key must be the subject's).
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.pem for pem; .crt .cer .der for der). Key-bearing extensions (.key .p8 .p12 .pfx) are refused:…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
signerobjectyesThe signing key: exactly one of `key` (a PKCS#8 private key, plain or PBES2-encrypted, PEM or DER) or `p12` (a PKCS#12 file, PBES2 + PBMAC1 only). The key is imported into a NON-EXTRACTABLE Web Crypt…
specobjectyesWhat to write into the certificate. Unknown members are refused.
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
subjectPublicKeyobject–The subject public key: a certificate, a CSR (CERTIFICATE REQUEST) or a PUBLIC KEY (SPKI): exactly one of pem / derBase64 / path. Omitted: derived from a PLAIN signer.key (self-signed only).
NameTypeReqDescription
diagnosticCountsobjectyesOccurrences per diagnostic code.
diagnosticsarrayyesNon-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
encodingstringyes–
filePathstring–Sandboxed absolute path (when outputMode='file').
hexstring–The artefact as lowercase hex (when encoding='hex').
modestringyes–
sha256stringyesSHA-256 of the DER bytes (lowercase hex) — the reproducibility proof.
sizeBytesintegeryesSize of the DER artefact.
summaryobjectyes–

No examples provided.

create_csr ~978

Build a PKCS#10 certification request (RFC 2986) from `spec` (subject; the extensions to request — subjectAltName, keyUsage, extendedKeyUsage, basicConstraints, subjectKeyIdentifier, raw — carried in extensionRequest; issuerAltName / authorityKeyIdentifier are refused as the issuer's), signed through `signer` (a PKCS#8 key or a PKCS#12 file imported as a NON-EXTRACTABLE Web Crypto key; nothing generates or exports a key here). The public key certified is the signing key's own: derived from a plain signer.key, taken from the PKCS#12 certificate, or given as `subjectPublicKey` (a certificate, a CSR or a PUBLIC KEY — required for an encrypted PKCS#8 key, whose type then comes from it). The proof of possession is verified BEFORE the request is returned: KEY_MISMATCH when the key and the public key differ. RSA keys need signer.rsaScheme; an encrypted key needs signer.password (or PKINATIVE_MCP_PASSWORD); SHA-1 needs allowSha1:true. ECDSA / RSA-PSS signatures are randomised (PRODUCES). Output PEM (default), DER or hex, inline or as a sandbox file (never overwritten). inspect_csr reads it back; create_certificate issues from it (subjectPublicKey = the request).

NameTypeReqDescription
allowSha1boolean–Accept or produce SHA-1 signatures (legacy material you already trust). Default false: refused with PKI_CRYPTO_ALGORITHM_REFUSED on read, VALIDATION_ERROR on write.
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'pem'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.pem for pem; .csr .p10 .der for der). Key-bearing extensions (.key .p8 .p12 .pfx) are refused:…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
signerobjectyesThe signing key: exactly one of `key` (a PKCS#8 private key, plain or PBES2-encrypted, PEM or DER) or `p12` (a PKCS#12 file, PBES2 + PBMAC1 only). The key is imported into a NON-EXTRACTABLE Web Crypt…
specobjectyesWhat to write into the request: the subject and the extensions to ask for. Unknown members are refused.
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
subjectPublicKeyobject–The public key to certify: a certificate, a CSR (CERTIFICATE REQUEST) or a PUBLIC KEY (SPKI): exactly one of pem / derBase64 / path. Omitted: derived from a PLAIN signer.key or taken from the PKCS#12…
NameTypeReqDescription
diagnosticCountsobjectyesOccurrences per diagnostic code.
diagnosticsarrayyesNon-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
encodingstringyes–
filePathstring–Sandboxed absolute path (when outputMode='file').
hexstring–The artefact as lowercase hex (when encoding='hex').
modestringyes–
sha256stringyesSHA-256 of the DER bytes (lowercase hex) — the reproducibility proof.
sizeBytesintegeryesSize of the DER artefact.
summaryobjectyes–

No examples provided.

create_ocsp_request ~882

Build the DER OCSPRequest (RFC 6960 §4.1) asking a responder for the status of `certificate`, identified by the CertID computed from `issuer` (the CA that issued it — its name and key hashes) and the serial. `hashAlgorithm` 'SHA-1' (default, the engine default and what every responder answers) or 'SHA-256' (recommended where the responder supports it). `nonce` adds the RFC 8954 nonce extension: 'random' (16 bytes from node:crypto, summary.randomNonce:true) or your own hex (1–32 bytes); keep summary.nonceHex to demand it back with check_ocsp_status. `certIdOnly:true` returns the bare CertID (der / hex). This server never sends anything: POST the bytes yourself (Content-Type application/ocsp-request) to the URL in the certificate's authorityInfoAccess (inspect_certificate), then judge the answer with check_ocsp_status { response, certificate, issuer, nonce }. summary.certIdHex is the CertID to match in the response. Output DER (default, .orq), PEM or hex, inline or as a sandbox file (never overwritten).

NameTypeReqDescription
certIdOnlyboolean–Return the bare DER CertID (RFC 6960 §4.1.1) instead of the request (der or hex only — a CertID has no PEM label).
certificateobjectyesThe certificate whose status to ask for: exactly one of pem / derBase64 / path.
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'der'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
hashAlgorithmstring–The CertID hash. 'SHA-1' (default — the engine default and what every responder answers; RFC 6960 §4.3) or 'SHA-256' (recommended, RFC 6960 §4.3 / RFC 5019 note: some responders still answer SHA-1 on…
issuerobjectyesThe CA certificate that issued it (its name and key are hashed into the CertID): exactly one of pem / derBase64 / path.
labelstring–The PEM label for encoding:'pem' (default OCSP REQUEST; upper-case words and digits). A private-key label is refused.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
nonce––The RFC 8954 nonce extension: 'random', or hex of 1–32 bytes. Omitted: no nonce. Keep summary.nonceHex to match the response (check_ocsp_status nonce).
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.orq .der .bin for der). Key-bearing extensions (.key .p8 .p12 .pfx) are refused: nothing here w…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
NameTypeReqDescription
diagnosticCountsobjectyesOccurrences per diagnostic code.
diagnosticsarrayyesNon-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
encodingstringyes–
filePathstring–Sandboxed absolute path (when outputMode='file').
hexstring–The artefact as lowercase hex (when encoding='hex').
modestringyes–
sha256stringyesSHA-256 of the DER bytes (lowercase hex) — the reproducibility proof.
sizeBytesintegeryesSize of the DER artefact.
summaryobjectyes–

No examples provided.

create_timestamp_request ~868

Build the RFC 3161 TimeStampReq you POST to a TSA yourself (Content-Type application/timestamp-query; this server never talks to a network): the message imprint is `hashAlgorithm` (SHA-256 default, SHA-384, SHA-512) over `data`, or `digestHex` already computed with it (wrong length → VALIDATION_ERROR). `nonce:'random'` draws 63 bits from node:crypto (summary.randomNonce:true; never cached) — without a nonce nothing ties the response to THIS request; a decimal or 0x-hex value pins it. `policy` names the TSA policy, `certReq` (default true) asks for the TSA certificate in the token. For a counter time-stamp over a CMS signature, the data is the signer's SIGNATURE VALUE (inspect_cms fields:['signerInfos.signature']), never the document. Keep the request bytes (or summary.imprintHex and nonce): verify_timestamp checks the response against them. Output DER (default; .tsq), PEM or hex, inline or as a sandbox file (never overwritten).

NameTypeReqDescription
certReqboolean–Ask the TSA to include its certificate in the token (what verify_timestamp needs unless you pass candidates).
dataobject–The data to time-stamp (hashed here with hashAlgorithm; for a counter time-stamp, the signer's signature value from inspect_cms): exactly one of text / base64 / path.
digestHexstring–The digest to stamp, already computed with hashAlgorithm (its length must match). Exclusive with data. Hexadecimal (an 0x prefix, colons and spaces are tolerated).
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'der'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
hashAlgorithmstring–The message imprint algorithm.
labelstring–The PEM label for encoding:'pem' (default TIMESTAMP REQUEST; upper-case words and digits). A private-key label is refused.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
noncestring–A nonce the TSA must echo (RFC 3161 §2.4.1): 'random' (63 bits from node:crypto — summary.randomNonce reports it; such a call is never cached), a decimal or an 0x-hex integer. Without one, nothing ti…
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.tsq .der .bin for der; .pem for pem). Key-bearing extensions (.key .p8 .p12 .pfx) are refused:…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
policystring–The TSA policy to issue under (dotted OID); the TSA's default when absent.
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
NameTypeReqDescription
diagnosticCountsobjectyesOccurrences per diagnostic code.
diagnosticsarrayyesNon-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
encodingstringyes–
filePathstring–Sandboxed absolute path (when outputMode='file').
hexstring–The artefact as lowercase hex (when encoding='hex').
modestringyes–
sha256stringyesSHA-256 of the DER bytes (lowercase hex) — the reproducibility proof.
sizeBytesintegeryesSize of the DER artefact.
summaryobjectyes–

No examples provided.

decode_asn1 ~1,269

Read-only X.690 view of any DER object (BER with encodingRules:'ber'): the node tree — offset, header and content lengths, tag class / number / name, constructed flag, child count, a hex preview of each primitive (maxPreviewBytes, default 32) and the dotted value + registered name of every OBJECT IDENTIFIER — depth-first, capped at 20000 nodes (truncated:true). `nodePath` ('0.2.1' = child indices from the root; each node's `path` is what to pass) narrows to a subtree; `read` applies a typed reader to the selected node (boolean, integer, small-integer, enumerated, null, bit-string, octet-string, oid, relative-oid, string with stringType for an IMPLICIT tag, time with timeType) and returns `value` in wire form (bigint as decimal string, bytes as hex, time as epoch ms + ISO); `reencode:true` re-encodes the selected node through the engine and delivers it as an artefact (der / hex / pem for a labelled whole input; inline or a sandbox file) with reencode.identical; `sequence:true` decodes several top-level values back to back; allowTrailingData:true tolerates bytes after a single value. Refuses a private key or a PKCS#12 file — by PEM label, or when the DER parses as PKCS#8 / PKCS#12 — with SECURITY_VIOLATION (inspect_private_key / inspect_pkcs12 report them safely); a missing nodePath step is NOT_FOUND naming the range; a wrong reader tag is PKI_ASN1_UNEXPECTED_TAG; an IMPLICIT string / time without stringType / timeType is PKI_API_MISUSE; X.690 violations are PKI_ASN1_* (BER forms: encodingRules:'ber'). Token-frugal: verbosity:'summary' (node count, root tag, value), fields:['nodes.path','nodes.tagName'].

NameTypeReqDescription
allowTrailingDataboolean–Accept bytes after the outermost value instead of PKI_ASN1_TRAILING_DATA (single value only; sequence:true decodes them instead).
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'der'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
inputobjectyesThe DER / BER object (any PEM label except a private key, or DER): exactly one of pem / derBase64 / path. A private key or a PKCS#12 file is refused (SECURITY_VIOLATION).
labelstring–reencode + encoding:'pem': the PEM label of the artefact (required when the input had no label or nodePath selects a sub-node; upper-case words and digits). A private-key label is refused.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
maxPreviewBytesinteger–Content bytes of a primitive shown in `preview` (hex; 0 hides previews; default 32).
nodePathstring–Child indices from the root, dot-separated ('0.2.1' = children[0].children[2].children[1]): the subtree listed, read or re-encoded. Omitted: the root. NOT_FOUND names the available range.
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.der .bin .asn1 for der; .pem for pem). Key-bearing extensions (.key .p8 .p12 .pfx) are refused:…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
readstring–Apply this typed reader to the selected node (the root without nodePath) and return `value`; a wrong tag is PKI_ASN1_UNEXPECTED_TAG.
reencodeboolean–Re-encode the selected node through the engine encoder and deliver it as an artefact (`encoding` der by default, hex, or pem under the input label or `label`); `reencode.identical` says whether the b…
sequenceboolean–The input is several top-level values back to back: decode each (exclusive with nodePath / read / reencode).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
stringTypestring–read:'string' on an IMPLICIT-tagged node: the charset to decode with (required then — PKI_API_MISUSE otherwise).
timeTypestring–read:'time' on an IMPLICIT-tagged node: the time type (required then).
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
artefactobject–The artefact delivered alongside the report: its facts here, its bytes once as the embedded resource (or the resource_link in file mode).
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
identicalboolean–reencode: the bytes are identical.
labelstring|null–The PEM label of the input, null for DER.
nodeCountinteger––
nodesarray–The selected subtree (or every top-level tree with sequence:true), depth-first in input order.
reencodeobject––
rootTagstring|null–tagName of the first node listed (null when nothing was listed).
sizeBytesinteger–Bytes of the input object.
truncatedboolean–true when the listing stopped at 20000 nodes (use nodePath to walk the rest).
valueobject–read: the typed value. boolean → boolean; integer / enumerated → decimal string; small-integer → number; null → null; bit-string → { hex, unusedBits }; octet-string → hex; oid / relative-oid → dotted…

No examples provided.

decode_extension ~647

Read-only decode of ONE X.509 extension value by its OID — the bytes INSIDE extnValue's OCTET STRING, as `valueHex` or `value` (DER by derBase64 / sandbox path) — exactly as inspect_certificate decodes a certificate's extensions: the 19 known kinds (basicConstraints, keyUsage, extendedKeyUsage, subjectAltName, nameConstraints, certificatePolicies, crlDistributionPoints, authorityInfoAccess, SCT list, …) come back with their members, any other OID as kind 'unknown' with its size; `critical` (default false) is reported and checked against the kind's RFC 5280 rule (a diagnostic, not a refusal). A value that is not well-formed for that OID is refused with PKI_X509_EXTENSION_MALFORMED (remedy: decode_asn1 for the plain tree). Token-frugal: verbosity:'summary', fields:[…]. The input is not a whole Extension SEQUENCE: pass the extnValue content, as inspect_certificate rawExtensions:true reports it in valueDer.

NameTypeReqDescription
criticalboolean–The criticality to report and to check against the kind (a kind RFC 5280 requires critical or non-critical gets a diagnostic).
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
oidstringyesThe extension OID (2.5.29.19 basicConstraints, 2.5.29.17 subjectAltName, …) — it selects the decoder.
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
valueobject–The extnValue content as DER bytes (derBase64, or a sandbox .der / .bin / .asn1 file): exactly one of pem / derBase64 / path. Exclusive with valueHex.
valueHexstring–The extnValue content (the DER inside the OCTET STRING) as hex. Exclusive with value. Hexadecimal (an 0x prefix, colons and spaces are tolerated).
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
criticalboolean––
decodedobject–The decoded members of the kind (cA / pathLenConstraint, usages, purposes, names, keyIdentifier, …); empty for an unknown OID.
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
kindstring–One of the 19 decoded kinds, or unknown.
namestring|null–The registry name of the OID.
oidstring––
sizeBytesinteger–Size of the value DER.

No examples provided.

describe_engine ~263

Offline preflight (no input needed): server / engine / tool-API versions, whether this host's Web Crypto can verify, sign and decrypt (canVerify / canSign / canDecrypt) and satisfies the engine's Node floor, where randomness comes from, the engine's 22 default limits, the operator ceilings (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MAX_KDF_ITERATIONS, PKINATIVE_MCP_MAX_PATHS_EXPLORED), every server cap, the sandbox / cache / PKINATIVE_MCP_AT state and the extension allow-lists, the 57 PKI_* error codes (with class), 43 PKI_REASON_* and 97 PKI_DIAG_* codes, the wrapper codes, the purposes and key-usage names, the doctrine refusals (what this server will NOT do and the remedy) and the engine surface deliberately not exposed as inputs. network is always 'none'. Call it first in a session, or whenever a cap / ceiling refusal needs interpreting.

NameTypeReqDescription
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
capabilitiesobject––
capsobject––
ceilingsobject––
defaultLimitsobject––
engineobject––
networkstring––
randomnessobject––
refusalsarray––
registriesobject––
sandboxobject––
serverobject––
unexposedarray––

No examples provided.

draft_governance_issue ~542

Produce a LOCAL GitHub issue draft + compliance report for pkinative / pkinative-cli / pkinative-mcp and NEVER submit it — the agent drafts, a human reviews and files it under their own identity (Human-In-The-Loop contract, .github/AGENT_RULES.md). No GitHub write path and no network path exist in this server. The draft is checked against the zero-dependency + reproduction + no-secret policy; a violation (new runtime dependency, an embedded private key or password, missing reproduction, duplicateSearchPerformed:false) throws GOVERNANCE_VIOLATION. targetRepo 'pkinative' for engine behaviour (parsing, verification, limits, refusals), 'pkinative-cli' for the CLI, 'pkinative-mcp' for wrapper behaviour (schemas, sandbox, transport). Returns markdown inline (outputMode:'file' also writes a .md inside the sandbox). Use it only after reproducing a defect with TEST material. Present the draft AND the report to the user, then STOP.

NameTypeReqDescription
actualBehaviorstring–What actually happened (defaults to the reproduction result when omitted).
affectedPackagesarray–Packages impacted by this issue (e.g. ["pkinative-mcp"], ["pkinative"]).
duplicateSearchPerformedbooleanyesMUST be true: confirms you searched open AND closed issues/PRs for duplicates before drafting.
expectedBehaviorstringyesWhat you expected to happen instead.
issueTypestringyesIssue category: 'bug' | 'feature' | 'security' | 'docs' | 'performance'.
outputModestring–'inline' (default) returns the draft markdown in the response. 'file' additionally writes it to the sandbox (requires PKINATIVE_MCP_OUTPUT_DIR); outputPath must be a relative .md path.
outputPathstring–Relative .md path inside the sandbox (only when outputMode='file').
reproductionobjectyesThe minimal, locally-executed reproduction that justifies this issue (test material only).
summarystringyesOne or two paragraphs describing the problem or proposal. Never a private key or a password.
targetRepostring–Destination repository label for the draft (documentation only — the server never contacts it). 'pkinative-mcp' (wrapper: schemas, sandbox, transport), 'pkinative' (engine: parsing, verification, lim…
titlestringyesConcise issue title (imperative, no trailing period).
NameTypeReqDescription
complianceobjectyes–
draftMarkdownstringyesThe full draft, ready for a human to review and submit.
filePathstring–Sandboxed absolute path (when outputMode='file').
issueTypestringyes–
outputModestringyes–
sizeBytesintegeryes–
targetRepostringyes–
titlestringyes–
warningsarrayyes–

No examples provided.

encode_asn1 ~978

Encode a JSON node spec into DER through the engine's own encoders: `spec` is one node { type, … } — boolean (value), integer / enumerated (value: integer, decimal or 0x-hex string, negative allowed), null, bit-string (hex, unusedBits), named-bits (bits[]), octet-string (hex), oid / relative-oid (value), string (stringType utf8|numeric|printable|teletex|ia5|visible|universal|bmp, value), time (value: ISO instant or epoch ms; timeType UTCTime|GeneralizedTime|rfc5280 — the RFC 5280 rule by default), sequence / set / set-of (children[]; set-of is sorted as DER requires), explicit / implicit (tag, class universal|application|context|private, inner), tlv (class, tag, constructed, hex) and der (hex of one pre-encoded value, checked). Nesting is bounded by limits.maxDepth (PKI_LIMIT_EXCEEDED). The bytes are decoded back for the summary (root tag, node count). Output DER (default), hex (inline, ≤ 64 KiB) or PEM under `label`, inline as an embedded resource or as a sandbox file (never overwritten). Refuses a malformed node naming its JSON path ($.children[1].value …), a PEM encoding without label, a private-key label, a value that parses as a PKCS#8 key or a PKCS#12 file (SECURITY_VIOLATION — nothing here produces key material); a value the engine cannot encode is PKI_ASN1_* / PKI_OID_INVALID. Deterministic: the same spec gives the same bytes. The inverse of decode_asn1 (its tree uses the same vocabulary).

NameTypeReqDescription
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'der'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
labelstring–The PEM label for encoding:'pem' (required then; upper-case words and digits). A private-key label is refused.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.der .bin .asn1 for der; .pem for pem). Key-bearing extensions (.key .p8 .p12 .pfx) are refused:…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
specobjectyesAn ASN.1 node spec: { type, … } with type one of boolean (value), integer / enumerated (value: integer or decimal / 0x-hex string), null, bit-string (hex, unusedBits), named-bits (bits[]), octet-stri…
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
NameTypeReqDescription
diagnosticCountsobjectyesOccurrences per diagnostic code.
diagnosticsarrayyesNon-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
encodingstringyes–
filePathstring–Sandboxed absolute path (when outputMode='file').
hexstring–The artefact as lowercase hex (when encoding='hex').
modestringyes–
sha256stringyesSHA-256 of the DER bytes (lowercase hex) — the reproducibility proof.
sizeBytesintegeryesSize of the DER artefact.
summaryobjectyes–

No examples provided.

encode_x509_structure ~1,456

Encode ONE X.509 building block to DER through pkinative's structural encoders, deterministically (the same spec gives the same bytes): `structure` is name, name-attribute, validity, spki, algorithm-identifier, attribute, extension, extensions, basic-constraints, key-usage, extended-key-usage, subject-alt-name, subject-key-identifier, authority-key-identifier or signature-algorithm; `spec` holds that structure's members (closed objects — an unknown or missing member is refused with VALIDATION_ERROR naming `spec <path>`; validity takes explicit notBefore AND notAfter, never an implicit now; a key identifier comes as hex or is computed from a certificate / CSR / PUBLIC KEY input). signature-algorithm takes `signer` instead of a spec (the key is imported NON-EXTRACTABLE and only its algorithm is read: ECDSA, Ed25519/Ed448, RSA with the REQUIRED rsaScheme — KEY_TYPE_REQUIRED for an encrypted key without keyType, SECRET_REQUIRED without a password). Output hex by default (structuredContent.hex, ≤ 64 KiB), or DER / PEM (PEM needs `label`), inline or as a sandbox file (never overwritten). The bytes are a fragment, not a signed object: nothing here signs. Use encode_asn1 for arbitrary ASN.1 and create_certificate / create_csr for whole objects.

NameTypeReqDescription
allowSha1boolean–Accept or produce SHA-1 signatures (legacy material you already trust). Default false: refused with PKI_CRYPTO_ALGORITHM_REFUSED on read, VALIDATION_ERROR on write.
encodingstring–Artefact encoding: 'pem' (RFC 7468 text), 'der' (raw bytes), 'hex' (lowercase hex in structuredContent, inline only, ≤ 64 KiB). Default 'hex'.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
labelstring–The RFC 7468 label for encoding:'pem' (required then, refused otherwise); a key-bearing label is refused.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
outputModestring–'base64' (default) returns the artefact inline as an embedded resource (≤ 50 MiB). 'file' writes it inside PKINATIVE_MCP_OUTPUT_DIR (never overwrites; ≤ 1 GiB) and returns a resource_link.
outputPathstring–Relative path inside the sandbox (only when outputMode='file'); the extension must match the encoding (.der .bin .asn1 for der; .pem for pem). Key-bearing extensions (.key .p8 .p12 .pfx) are refused:…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
signerobject–signature-algorithm only: The signing key: exactly one of `key` (a PKCS#8 private key, plain or PBES2-encrypted, PEM or DER) or `p12` (a PKCS#12 file, PBES2 + PBMAC1 only). The key is imported into a…
spec––The structure's members (a closed object; an unknown member is refused with VALIDATION_ERROR naming it). name: a distinguished name — { "C": "FR", "O": "Acme", "CN": "x" } or an array of RDNs [[{ "ty…
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
structurestringyesThe X.509 building block to encode.
NameTypeReqDescription
diagnosticCountsobjectyesOccurrences per diagnostic code.
diagnosticsarrayyesNon-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
encodingstringyes–
filePathstring–Sandboxed absolute path (when outputMode='file').
hexstring–The artefact as lowercase hex (when encoding='hex').
modestringyes–
sha256stringyesSHA-256 of the DER bytes (lowercase hex) — the reproducibility proof.
sizeBytesintegeryesSize of the DER artefact.
summaryobjectyes–

No examples provided.

explain_code ~273

Explain any code this server can emit, from the registries vendored at the pkinative v1.0.0 tag: the 57 PKI_* engine error codes (coarse class, PkiError subclass, when raised, CWE, the engine's remedy and the MCP input that lifts it), the 43 PKI_REASON_* codes a verdict returns, the 97 PKI_DIAG_* diagnostics (with severity) and the wrapper's own codes (VALIDATION_ERROR, SECURITY_VIOLATION, LIMIT_CEILING_EXCEEDED, SECRET_REQUIRED, …). list:true enumerates (kind filters one vocabulary). Branch on codes, never on message text.

NameTypeReqDescription
codestring–The code to explain (PKI_*, PKI_REASON_*, PKI_DIAG_* or a wrapper code such as SECURITY_VIOLATION). Omit with list:true to enumerate.
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
kindstring–Restrict a listing to one vocabulary.
listboolean–List the codes (optionally of one kind) instead of explaining one.
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
codestring––
codesarray––
countinteger––
cwestring––
engineClassstring–The PkiError subclass.
errorClassstring–The coarse class (usage, input, parse, security, limit, unsupported, crypto, password, check, internal).
kindstring––
remedyobject––
severitystring––
sincestring––
standardstring––
summarystring–When the code is raised / returned.

No examples provided.

inspect_certificate ~684

Read-only RFC 5280 report of ONE certificate in one call: version, serial, signature algorithm, issuer and subject (RFC 4514 + RDNs), validity (epoch ms + ISO), public key (kind, bits, curve / modulus / exponent), every extension decoded (the 19 kinds pkinative knows; rawExtensions:true keeps them undecoded), self-issued flag, fingerprints (SHA-256 by default), and every engine diagnostic. `extension:'subjectAltName'` returns that one extension. `issuer` or `checkSelfSignature:true` adds a signature check — ONE signature against ONE key, which is NOT trust: verify_certificate_chain is the RFC 5280 §6 verdict (anchors, validity at an instant, names, policies, revocation). Token-frugal: verbosity:'summary', fields:[…]. Input: pem / derBase64 / path.

NameTypeReqDescription
allowSha1boolean–Accept or produce SHA-1 signatures (legacy material you already trust). Default false: refused with PKI_CRYPTO_ALGORITHM_REFUSED on read, VALIDATION_ERROR on write.
certificateobjectyesThe certificate (CERTIFICATE PEM or DER): exactly one of pem / derBase64 / path.
checkSelfSignatureboolean–Check the certificate against its own key (a self-signed root). Exclusive with issuer.
encodingRulesstring–'der' (strict X.690 DER, default) or 'ber' (indefinite / non-minimal lengths and constructed strings, as legacy CMS producers write).
extensionstring–Return only this decoded extension (NOT_FOUND when absent). Exclusive with rawExtensions.
fieldsarray–Dot-paths to keep after verbosity (arrays map over elements); unmatched paths land in _meta.unmatchedFields.
fingerprintsarray–Digests of the DER to report.
issuerobject–The issuer certificate to check the signature against: exactly one of pem / derBase64 / path. Exclusive with checkSelfSignature. A valid signature is NOT trust: run verify_certificate_chain for that.
limitsobject–Raise pkinative's 22 named security bounds for this call (trusted input only; absent keys keep the engine defaults). A value above an operator ceiling (PKINATIVE_MCP_MAX_INPUT_BYTES, PKINATIVE_MCP_MA…
pemModestring–'strict' (RFC 7468 exactly, default) or 'lax' (tolerates whitespace, line length and RFC 1421 headers).
rawExtensionsboolean–Keep every extension undecoded (kind raw, valueDer as hex) — the way past PKI_X509_EXTENSION_MALFORMED.
requireAlgorithmMatchboolean–Require the outer signatureAlgorithm to equal the TBS signature algorithm (RFC 5280 §4.1.1.2).
strictboolean–Escalate the first engine warning to a PKI_STRICT_DIAGNOSTIC error instead of listing it in diagnostics[].
verbositystring–'summary' keeps the scalar fields only (token-frugal).
NameTypeReqDescription
diagnosticCountinteger––
diagnosticCountsobject–Occurrences per diagnostic code.
diagnosticsarray–Non-fatal concerns the engine raised (PKI_DIAG_*, de-duplicated, at most 200; explain_code explains one).
diagnosticsTruncatedboolean–true when distinct diagnostics beyond the 200 listed were dropped.
extensionobject–The one extension asked for with `extension`.
extensionKindsarray––
extensionsarray––
fingerprintsobject–Colon-separated uppercase hex digests of the DER, by algorithm.
issuerobject––
issuerStringstring–RFC 4514 issuer.
notAfterstring––
notBeforestring––
publicKeystring––
selfIssuedboolean–issuer DER equals subject DER (self-issued; a self-SIGNATURE is a separate check).
serialNumberobject––
serialNumberHexstring––
signatureobject–The signature check asked for (issuer or self). ONE signature against ONE key — not a trust verdict.
signatureAlgorithmobject––
signatureValidboolean––
sizeBytesinteger––
subjectobject––
subjectPublicKeyInfoobject––
subjectStringstring–RFC 4514 subject.
validityobject––
versioninteger––

No examples provided.

Install

How do I install the pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… server?

pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… runs locally as an npm package, launched with npx -y pkinative-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · pkinative-mcp

# add to Claude Code
claude mcp add nizoka-pkinative-mcp -- npx -y pkinative-mcp
Common questions

What is the pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… server?

pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… is listed in the public MCP registry as io.github.Nizoka/pkinative-mcp. PKI MCP server: inspect, verify, issue, sign X.509, CSR, CRL, OCSP, CMS, TSP, PKCS#12. 34 tools. This page covers its npm package (pkinative-mcp).

Is the pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… server safe to use?

pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 22 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… server expose?

pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… exposes 34 tools: convert_pem, resolve_oid, compute_fingerprint, decode_asn1, encode_asn1, and 29 more. Their descriptions and schemas cost roughly 29,224 tokens of context every time the server is loaded.

Is the pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… server still maintained?

pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… is still listed as active in the MCP registry. We last reached this channel on 22 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… server under?

pkinative MCP — X.509, CMS, OCSP, time-stamps and PKCS#12… declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.