Files
dap-was-dapms/docs/sbom/AXHUB_MCP_Tool_Service_SBOM_CycloneDX1.5.json
koseokmin ad7fccbed1 Tool inputSchema에 참조·정규식 정책을 적용한다
매니페스트가 선언한 inputSchema는 외부가 정하는 입력이다. JSON Schema
검증기는 문서 밖 $ref를 만나면 그 주소로 직접 조회하므로 매니페스트가
서버의 outbound 호출 대상을 정하는 통로가 된다. pattern은 joni와
graal-js가 없어 java.util.regex의 백트래킹 경로로 처리되고, 인증이 없는
경계(ADR-0006)라 호출 빈도를 줄여 주는 계층도 없다.

ToolSchemaReferencePolicy가 문서 밖 참조와 미지원 dialect를 막고,
ToolSchemaPatternPolicy가 정규식 길이·무한 수량자 개수·중첩 반복을
검사하며 pattern을 쓰는 필드에 maxLength를 요구한다. 길이를 묶을 수
없는 patternProperties는 거부한다.

검사는 ToolMetadata의 표준 생성자 한 곳에서만 한다. Portal 매니페스트
파싱, local 파일 로딩, Redis snapshot 역직렬화가 모두 이 생성자를
지나므로 조회 경로가 늘어도 검사 지점은 하나로 남는다. 위반은
IllegalStateException이라 기존 매니페스트 형식 오류와 같게 다뤄지고
bundle 단위 실패 격리가 그대로 적용된다.

근거와 한계는 ADR-0011, ADR-0012에 있다. ADR-0012가 classpath 근거로
인용하는 docs/sbom도 함께 가져온다.

192개 테스트 전부 통과. 기존 169건은 새 검사에 걸리지 않는다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 17:20:50 +09:00

707 lines
21 KiB
JSON

{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"serialNumber": "urn:uuid:dd2dbf54-3ff5-57b2-bc28-765721359457",
"version": 1,
"metadata": {
"timestamp": "2026-08-18T00:00:00Z",
"component": {
"type": "application",
"bom-ref": "pkg:maven/io.shinhanlife.dap.biz.mcp/ax-hub-mcp-server@0.1.0",
"group": "io.shinhanlife.dap.biz.mcp",
"name": "ax-hub-mcp-server",
"version": "0.1.0",
"description": "AXHUB MCP&Tool Service 공통 스택 (Java 21 / Spring Boot 3.5.11)",
"purl": "pkg:maven/io.shinhanlife.dap.biz.mcp/ax-hub-mcp-server@0.1.0"
},
"properties": [
{
"name": "axhub:scope",
"value": "MCP Java SDK 2.0.0과 그 런타임 전이 의존, 그리고 빌드 환경. MCP Server와 Tool Service의 공통 스택에 적용된다"
},
{
"name": "axhub:source",
"value": "build.gradle + Gradle 로컬 캐시의 실제 pom/jar 판독"
}
]
},
"components": [
{
"type": "library",
"bom-ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0",
"name": "mcp-json-jackson2",
"version": "2.0.0",
"publisher": "Anthropic",
"description": "MCP JSON 직렬화 · JSON Schema 2020-12 검증 구현체",
"scope": "required",
"purl": "pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0",
"group": "io.modelcontextprotocol.sdk",
"hashes": [
{
"alg": "SHA-1",
"content": "2f9b7d72acb74d854589b7f22477aaaef4d84083"
},
{
"alg": "SHA-512",
"content": "58951bd4b1c5a385af5b146b5582bc457475e2933a220d2fd63c1aed4435d1fc6f585b068dc752170d58890bd4036947c82afa8686f872560c2d148d270654fe"
}
],
"licenses": [
{
"license": {
"id": "MIT",
"url": "https://opensource.org/licenses/MIT"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/modelcontextprotocol/java-sdk"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "직접 선언 (build.gradle implementation)"
},
{
"name": "axhub:note",
"value": "이 SBOM의 유일한 직접 선언 오픈소스"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
"name": "mcp-core",
"version": "2.0.0",
"publisher": "Anthropic",
"description": "MCP 표준 프로토콜 모델(McpSchema) · JSON-RPC 상수",
"scope": "required",
"purl": "pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
"group": "io.modelcontextprotocol.sdk",
"hashes": [
{
"alg": "SHA-1",
"content": "fd49feda3b9e6914a46a56ccd4a8f70e35156898"
},
{
"alg": "SHA-512",
"content": "44dcf26bddfaa4757d7b2d765cd48745a0130fbc074ebb59565a03f66c92f387073d109c54fe62e1a68f3df71629928df973f6adc8abe75d4f5cf76b1d1f6f0b"
}
],
"licenses": [
{
"license": {
"id": "MIT",
"url": "https://opensource.org/licenses/MIT"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/modelcontextprotocol/java-sdk"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← mcp-json-jackson2"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/com.networknt/json-schema-validator@2.0.0",
"name": "json-schema-validator",
"version": "2.0.0",
"publisher": "Network New Technologies Inc.",
"description": "JSON Schema draft 2020-12 검증 엔진 (Tool inputSchema 검증)",
"scope": "required",
"purl": "pkg:maven/com.networknt/json-schema-validator@2.0.0",
"group": "com.networknt",
"hashes": [
{
"alg": "SHA-1",
"content": "bc7c4ddf322d1295e3c296f28a9966590e6dea20"
},
{
"alg": "SHA-512",
"content": "bc033e50c66e72ad89df6442532b614fc984386aad2da68daaa098d81ac5a4a82933d0783d3f1a0ed5fe80e3bca6091d72acf5d7dcadcb50c3153100edcf334b"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/networknt/json-schema-validator"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← mcp-json-jackson2"
},
{
"name": "axhub:note",
"value": "optional인 joni·graal-js를 해석하지 않아 pattern 검증에 JDK 정규식 엔진을 사용한다"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/com.ethlo.time/itu@1.14.0",
"name": "itu",
"version": "1.14.0",
"publisher": "ethlo (Morten Haraldsen)",
"description": "RFC 3339 date/date-time 파싱 — json-schema-validator의 format 구현용",
"scope": "required",
"purl": "pkg:maven/com.ethlo.time/itu@1.14.0",
"group": "com.ethlo.time",
"hashes": [
{
"alg": "SHA-1",
"content": "c0f9f9d4f4404787e992ab3af5ae95f2fad79e47"
},
{
"alg": "SHA-512",
"content": "aa69a6af3a7123eb41425bbaf6834e16dc3323172709e2338b8a21b970fd21333d996515f42da4aa0225251e30542ad7d9c8332bdf7d62ed96b42fadc8a1520d"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/ethlo/itu"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← json-schema-validator"
},
{
"name": "axhub:note",
"value": "SDK 검증기가 format을 단언하지 않아 런타임에 호출되지 않는다. classpath에는 포함되므로 수록"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
"name": "jackson-dataformat-yaml",
"version": "2.19.4",
"publisher": "FasterXML, LLC",
"description": "YAML 형식 schema 로딩 (validator 부가 기능)",
"scope": "required",
"purl": "pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
"group": "com.fasterxml.jackson.dataformat",
"hashes": [
{
"alg": "SHA-1",
"content": "500956daea0869bf753b94fdaa77e5dc99847d79"
},
{
"alg": "SHA-512",
"content": "42cf2edacf2dea3c0616991a9a945c6e3e44dcb719918e76e6babae55601454397a1667bf75b7d55c74f96a7da7c0d9f60a0f4be60f84fd405fa31eb144f9b92"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/FasterXML/jackson-dataformats-text"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← json-schema-validator"
},
{
"name": "axhub:note",
"value": "Spring Boot 3.5.11 BOM이 2.19.4로 정렬"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/io.projectreactor/reactor-core@3.7.16",
"name": "reactor-core",
"version": "3.7.16",
"publisher": "VMware (Project Reactor)",
"description": "mcp-core가 참조하는 리액티브 타입 제공",
"scope": "required",
"purl": "pkg:maven/io.projectreactor/reactor-core@3.7.16",
"group": "io.projectreactor",
"hashes": [
{
"alg": "SHA-1",
"content": "dc7f2ba3c4fbc69678937dfe1ad45264d8a1c7be"
},
{
"alg": "SHA-512",
"content": "f0313eedd03acee06e7e38a915ecb8060d6996ffafbd05afeff4c7cdeb239e022b65f8f721290e228d5c30180d069a417cb40c3f782b643508fa0b64d11de10f"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/reactor/reactor-core"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← mcp-core"
},
{
"name": "axhub:note",
"value": "pom 요청 3.7.0 → reactor-bom 2024.0.15의 3.7.16"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/org.reactivestreams/reactive-streams@1.0.4",
"name": "reactive-streams",
"version": "1.0.4",
"publisher": "Reactive Streams SIG",
"description": "리액티브 스트림 표준 인터페이스",
"scope": "required",
"purl": "pkg:maven/org.reactivestreams/reactive-streams@1.0.4",
"group": "org.reactivestreams",
"hashes": [
{
"alg": "SHA-1",
"content": "3864a1320d97d7b045f729a326e1e077661f31b7"
},
{
"alg": "SHA-512",
"content": "cdab6bd156f39106cd6bbfd47df1f4b0a89dc4aa28c68c31ef12a463193c688897e415f01b8d7f0d487b0e6b5bd2f19044bf8605704b024f26d6aa1f4f9a2471"
}
],
"licenses": [
{
"license": {
"id": "MIT-0",
"url": "https://spdx.org/licenses/MIT-0.html"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "http://www.reactive-streams.org/"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← reactor-core"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
"name": "jackson-databind",
"version": "2.19.4",
"publisher": "FasterXML, LLC",
"description": "JSON 데이터 바인딩",
"scope": "required",
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
"group": "com.fasterxml.jackson.core",
"hashes": [
{
"alg": "SHA-1",
"content": "7a39bf9257b726b90b80f27fa3f5174bc75162a5"
},
{
"alg": "SHA-512",
"content": "02a80c97ea12874f66802cb2c8909e5358639b41050bd04da495c0ee8db496a0d9d609a3c62a1dca7cbd89681bf340d6f6dbc507d4f21602aa1a7f31b2285ba8"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/FasterXML/jackson-databind"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← mcp-json-jackson2, json-schema-validator"
},
{
"name": "axhub:note",
"value": "pom 요청 2.20.1 / 2.18.3 → Spring Boot 3.5.11 BOM의 2.19.4로 정렬"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
"name": "jackson-core",
"version": "2.19.4",
"publisher": "FasterXML, LLC",
"description": "JSON 스트리밍 파서/생성기",
"scope": "required",
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
"group": "com.fasterxml.jackson.core",
"hashes": [
{
"alg": "SHA-1",
"content": "a720ca9b800742699e041c3890f3731fe516085e"
},
{
"alg": "SHA-512",
"content": "987de559d452fb78557c038a02289454cf1354985bdb79df1087c5bc33db35c9510ee6c1c1dd3816e220a86a35d19820a8c32176a7d4fc4e5d3c7e65df5536d4"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/FasterXML/jackson-core"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← jackson-databind"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
"name": "jackson-annotations",
"version": "2.19.4",
"publisher": "FasterXML, LLC",
"description": "JSON 바인딩 애노테이션",
"scope": "required",
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
"group": "com.fasterxml.jackson.core",
"hashes": [
{
"alg": "SHA-1",
"content": "bbb09b1e7f7f5108890270eb701cb3ddef991c05"
},
{
"alg": "SHA-512",
"content": "22a2ce8150c380b9dc00bfbdd026f26e626f483e8ceebfbb2087e9abd63462781daf4e18ca09543a7d0eb7b5c5625f02332d3251e29c2abc6016d69a7194a565"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://github.com/FasterXML/jackson-annotations"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← mcp-core, jackson-databind"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/org.slf4j/slf4j-api@2.0.17",
"name": "slf4j-api",
"version": "2.0.17",
"publisher": "QOS.ch",
"description": "로깅 파사드",
"scope": "required",
"purl": "pkg:maven/org.slf4j/slf4j-api@2.0.17",
"group": "org.slf4j",
"hashes": [
{
"alg": "SHA-1",
"content": "d9e58ac9c7779ba3bf8142aff6c830617a7fe60f"
},
{
"alg": "SHA-512",
"content": "9a3e79db6666a6096a3021bb2e1d918f30f589d8de51d6b600f8ebd92515a510ae2d8f87919cc2dfa8365d64f10194cac8dfa0fb950160eef0e9da06f6caaeb9"
}
],
"licenses": [
{
"license": {
"id": "MIT",
"url": "https://opensource.org/licenses/MIT"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://www.slf4j.org/"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← mcp-core, json-schema-validator"
},
{
"name": "axhub:note",
"value": "pom 요청 2.0.16 → Spring Boot 3.5.11 BOM의 2.0.17로 정렬"
}
]
},
{
"type": "library",
"bom-ref": "pkg:maven/org.yaml/snakeyaml@2.4",
"name": "snakeyaml",
"version": "2.4",
"publisher": "SnakeYAML",
"description": "YAML 파서 (jackson-dataformat-yaml 백엔드)",
"scope": "required",
"purl": "pkg:maven/org.yaml/snakeyaml@2.4",
"group": "org.yaml",
"hashes": [
{
"alg": "SHA-1",
"content": "e0666b825b796f85521f02360e77f4c92c5a7a07"
},
{
"alg": "SHA-512",
"content": "1573717e2c47868515cbed5265a6f77ebec23a0b5c6376ac18b9f5c2335beb65d4c68d2073d50143d59a60141980be8db1e493a85d7c78106cdb94a52e8361d2"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://bitbucket.org/snakeyaml/snakeyaml"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "전이 ← jackson-dataformat-yaml"
}
]
},
{
"type": "platform",
"bom-ref": "pkg:generic/jdk@21.0.5",
"name": "jdk",
"version": "21.0.5",
"publisher": "Eclipse Adoptium (Temurin)",
"description": "언어/실행 환경 — Java 21 toolchain",
"scope": "optional",
"purl": "pkg:generic/jdk@21.0.5",
"licenses": [
{
"expression": "GPL-2.0-only WITH Classpath-exception-2.0"
}
],
"externalReferences": [
{
"type": "website",
"url": "https://adoptium.net/temurin/releases/?version=21"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "build.gradle java.toolchain (vendor=ADOPTIUM)"
},
{
"name": "axhub:note",
"value": "표준가이드의 openjdk21u-jdk_x64_windows_hotspot_21.0.5 기준. Classpath Exception이 있어 이 JDK로 실행하는 애플리케이션에는 소스 공개 의무가 없다"
}
]
},
{
"type": "application",
"bom-ref": "pkg:generic/gradle@8.14.3",
"name": "gradle",
"version": "8.14.3",
"publisher": "Gradle Inc.",
"description": "빌드 도구 (gradle wrapper 고정)",
"scope": "optional",
"purl": "pkg:generic/gradle@8.14.3",
"hashes": [
{
"alg": "SHA-256",
"content": "bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531"
}
],
"licenses": [
{
"license": {
"id": "Apache-2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
}
],
"externalReferences": [
{
"type": "website",
"url": "https://gradle.org/"
}
],
"properties": [
{
"name": "axhub:dependencyPath",
"value": "gradle/wrapper/gradle-wrapper.properties"
},
{
"name": "axhub:note",
"value": "SHA-256은 wrapper의 distributionSha256Sum 값"
}
]
}
],
"dependencies": [
{
"ref": "pkg:maven/io.shinhanlife.dap.biz.mcp/ax-hub-mcp-server@0.1.0",
"dependsOn": [
"pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0"
]
},
{
"ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0",
"dependsOn": [
"pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
"pkg:maven/com.networknt/json-schema-validator@2.0.0",
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4"
]
},
{
"ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
"dependsOn": [
"pkg:maven/io.projectreactor/reactor-core@3.7.16",
"pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
"pkg:maven/org.slf4j/slf4j-api@2.0.17"
]
},
{
"ref": "pkg:maven/com.networknt/json-schema-validator@2.0.0",
"dependsOn": [
"pkg:maven/com.ethlo.time/itu@1.14.0",
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
"pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
"pkg:maven/org.slf4j/slf4j-api@2.0.17"
]
},
{
"ref": "pkg:maven/com.ethlo.time/itu@1.14.0",
"dependsOn": []
},
{
"ref": "pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
"dependsOn": [
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
"pkg:maven/org.yaml/snakeyaml@2.4"
]
},
{
"ref": "pkg:maven/io.projectreactor/reactor-core@3.7.16",
"dependsOn": [
"pkg:maven/org.reactivestreams/reactive-streams@1.0.4"
]
},
{
"ref": "pkg:maven/org.reactivestreams/reactive-streams@1.0.4",
"dependsOn": []
},
{
"ref": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
"dependsOn": [
"pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
"pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4"
]
},
{
"ref": "pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
"dependsOn": []
},
{
"ref": "pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
"dependsOn": []
},
{
"ref": "pkg:maven/org.slf4j/slf4j-api@2.0.17",
"dependsOn": []
},
{
"ref": "pkg:maven/org.yaml/snakeyaml@2.4",
"dependsOn": []
},
{
"ref": "pkg:generic/jdk@21.0.5",
"dependsOn": []
},
{
"ref": "pkg:generic/gradle@8.14.3",
"dependsOn": []
}
]
}