長期保存 (PDF/A)
シナリオ
10 年後にも「開ける・読める・検証できる」PDF を残します。電帳法(機械可読データの同梱)や 公文書の保存文脈で、作る側は PDF/A の器に載せて veraPDF で採点し、受け取る側は その文書が長期保存に耐える構造か(LTV データの実在)を確認します。
以下は 2026-09-04 の実測です(pdf-verify-mcp v0.26.0 / veraPDF 1.30.0。請求書デモ・インターネット官報・自作検体)。
登場 MCP / Skill
| 役者 | 役割 |
|---|---|
| pdf-writer | attach_file(機械可読データ同梱)→ ensure_pdfa(器付け・ラベルを書くだけ) |
| pdf-verify | validate_conformance(veraPDF 委譲)・detect_pades_level(LTV 構造の観測) |
| pdf-trust / pdf-publish | 受け取る側 / 納品する側の手順 |
シーケンス図
プロンプト例
- 「この請求書、CSV ごと電帳法対応の保存形式にして」(→ attach_file + ensure_pdfa(pdfa-3b))
- 「この契約書、10 年保存に耐える?署名は失効後も検証できる形?」(→ detect_pades_level + DSS 確認)
- 「PDF/A-4 で」(→ 添付があるなら
pdfa-4f。素のpdfa-4は添付自身が PDF/A であることを要求する)
実測例
作る側(publish-demo-invoice.pdf): catalog に Names / AF / OutputIntents あり。veraPDF 1.30.0 が PDF/A-3b COMPLIANT(146/146)と判定しました。同じファイルの PDF/UA-1 も 106/106 です。
受け取る側(detect_pades_level、3 検体):
| 検体 | 構造の観測 | 根拠 |
|---|---|---|
| 官報 2026-08-10 号 | B-B | 署名 TS なし・DSS なし・DocTS あり |
selfmade-pades-lta.pdf(CRL なし) | B-T | DSS はあるが revocationDataCoversSigner: false(dssCrlCount 0) |
selfmade-pades-crl.pdf(CRL を DSS に同梱) | B-LTA | revocationDataCoversSigner: true(dssCrlCount 1) |
detect_pades_level は DSS の失効データが署名者証明書を実際に覆っているかまで見ます。覆っていなければ B-T 止まりです。これは T3 の観測であって、「PAdES に準拠」ではありません。
呼び出し — validate_conformance と detect_pades_level
- 実測: pdf-verify-mcp v0.26.0、veraPDF 1.30.0
{
"file_path": "/absolute/path/to/docs/specimens/publish-demo-invoice.pdf",
"flavour": "pdfa-3b",
"response_format": "json"
}{
"engine": "verapdf",
"flavour": "PDF/A-3b",
"compliant": true,
"checkedRules": 146,
"passedRules": 146,
"failedRules": 0
}{
"file_path": "/absolute/path/to/docs/specimens/selfmade-pades-crl.pdf",
"response_format": "json"
}{
"levels": [
{
"fieldName": "Sig1",
"level": "B-LTA",
"normativeBasis": "T3",
"evidence": { "hasSignatureTimestamp": true, "hasDss": true, "hasDocumentTimestamp": true },
"ltv": { "dssCrlCount": 1, "revocationDataCoversSigner": true }
}
]
}実測例 — ラベルと採点が食い違うファイル(2026-09-15、別ホスト)
ensure_pdfa が書いたラベルを適合と読み違えないことを、意図的に非適合のファイルで確かめました (pdf-writer-mcp v0.21.0 / pdf-verify-mcp v0.26.0 / veraPDF 1.30.0。ホストは Grok Build 1.0.30)。
| ステップ | ツール | 実測 |
|---|---|---|
| 1 | create_text_pdf(英語、fontPath なし) | フォントは Helvetica(未埋め込み) |
| 2 | ensure_pdfa(pdfa-3b)だけ | declarationRisks: FONT_NOT_EMBEDDED (Helvetica)。warning: CLAIMS PDF/A-3b … conformance was NOT checked |
| 3 | identify_conformance | 宣言は pdfA: { part: "3", conformance: "B" }。notes: identifies declared conformance only |
| 4 | validate_conformance(pdfa-3b) | engine verapdf、compliant: false、145/146。違反は ISO 19005-3:2012 6.2.11.4.1-1(フォント未埋め込み) |
ステップ 3 の直後の要約は「ファイルの XMP には PDF/A-3b の宣言がある。ensure_pdfa は /ID・OutputIntent・XMP pdfaid を足しただけで、適合は見ていない」でした。 「PDF/A になった」とは書いていません。正しい報告文は 3 文です: XMP に宣言がある(identify)/ veraPDF の判定は非 COMPLIANT、145/146、6.2.11.4.1-1(validate)/ warning は CLAIMS … NOT checked(ensure_pdfa)。
報告書の全文: eval/hosts/grok-build/reports/UC09.md
結果の読み方
- PDF/A の判定者は veraPDFです(T2)。「veraPDF が COMPLIANT と判定(146/146)」と書き、 「ISO 19005 準拠」とは書きません
- PAdES レベルは構造の観測です(T3)。「構造が B-LTA に一致する」と書き、「B-LTA 準拠」とは書きません
ensure_pdfaはラベルを書く道具であって、規格どおりにさせる道具ではありません。フォント未埋め込み・暗号化・ JavaScript は直りません — 非適合の文書に掛ければ「自分について嘘をつくファイル」ができてしまいます- 暗号化 PDF は veraPDF が PDF/A を採点できないことがあります(官報で実測)。その検査は「未実施」と 記録されます — passed ではありません
別ホストでの再走(2026-09-15、Grok Build 1.0.30)
「PDF/A-4 で保存して。CSV は付けたまま」という依頼に対して flavour は pdfa-4f が選ばれ、veraPDF は 109/109 で COMPLIANT でした。detect_pades_level の 3 検体(官報 B-B / CRL なし B-T / CRL 同梱 B-LTA)は上の実測と同じ観測です。ラベルと採点が食い違う検体は上の節のとおりです。報告書: UC03.md