@neobiotechlabs/neobiotech-dev-agent 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,7 @@
10
10
  "source": "npm",
11
11
  "package": "@neobiotechlabs/neobiotech-dev-agent",
12
12
  "registry": "https://registry.npmjs.org",
13
- "version": "0.1.12"
13
+ "version": "0.1.13"
14
14
  },
15
15
  "description": "의료기기 SW 규제 개발 자동화 (Jira·Confluence·Risk·CVSS·Xray·IEC 62304/62366·MDR·문서 렌더)",
16
16
  "category": "medical-device",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neobiotech-dev-agent",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "displayName": "NeoBiotech Dev Agent (MedDev)",
5
5
  "description": "의료기기 SW 규제 개발 자동화 — Jira·Confluence·Risk·CVSS·Xray·IEC 62304/62366·MDR·문서 렌더",
6
6
  "author": {
package/README.md CHANGED
@@ -180,7 +180,7 @@ node ~/.claude/plugins/cache/neobiotech/neobiotech-dev-agent/<version>/dist/inde
180
180
  | `401`/`403` | 토큰/권한. Jira API 토큰 재발급, 프로젝트 권한·이슈타입 존재 여부 확인 |
181
181
  | 프로젝트 키가 인식 안 됨 | `jira_init_project` 미실행. consumer `CLAUDE.md`에 키가 있는지 확인 |
182
182
 
183
- ## 툴 목록 (49개)
183
+ ## 툴 목록 (51개)
184
184
 
185
185
  ### Jira 기본 CRUD (12)
186
186
 
@@ -293,12 +293,42 @@ IEC 62304 추적성 관리.
293
293
  |-----|------|
294
294
  | `doc_render` | dev_docs(PRD/Spec/Plan/Tasks)·mdr_docs(PA/EA gate 문서 전체) 템플릿 모드 기반(freeform) 결정적 렌더 — 메타만 치환, 자유 텍스트/AI 지침/빈 데이터 표는 consumer가 채움 |
295
295
 
296
+ ### MDR 전문가 체크리스트 (2)
297
+
298
+ 역할별 규제 검토의 hard 기준(체크리스트)을 반환합니다. 판단은 아래 [MDR 전문가 에이전트](#mdr-전문가-에이전트-subagent) subagent가 담당합니다.
299
+
300
+ | 툴 | 설명 |
301
+ |-----|------|
302
+ | `expert_get_regulatory_checklist` | MDR Regulatory Architect 검사 체크리스트 (Annex II / GSPR / intended use). phase 미사용 |
303
+ | `expert_get_cybersecurity_checklist` | Cybersecurity Reviewer 검사 체크리스트 (IEC 81001-5-1 / FDA 2023 / AAMI TIR57-SW96). phase: design\|implementation\|verification\|postmarket |
304
+
296
305
  ### 초기 설정 (1)
297
306
 
298
307
  | 툴 | 설명 |
299
308
  |-----|------|
300
309
  | `jira_init_project` | 프로젝트 폴더에 Jira 프로젝트 키 초기 설정 |
301
310
 
311
+ ## MDR 전문가 에이전트 (subagent)
312
+
313
+ 역할별 규제 검토는 전문가 **subagent**가 담당합니다. consumer가 명시적으로 dispatch해야 동작합니다 (자동 트리거 없음):
314
+
315
+ - `@mdr-cybersecurity-reviewer` — IEC 81001-5-1·FDA 2023 cybersecurity guidance·AAMI TIR57/SW96 보안 리뷰 (설계·구현·검증·운영 4단계)
316
+ - `@mdr-regulatory-architect` — MDR Annex II·GSPR·intended use 규제 검토
317
+
318
+ 각 subagent는 대응하는 체크리스트 툴(`expert_get_*_checklist`)로 hard 기준을 먼저 로드한 뒤(STEP 1 강제), 기존 툴(jira/confluence/cvss/traceability)로 산출물을 교차 평가해 구조화된 리포트(필수항목 충족 여부 + 결함 + 권고)를 반환합니다. 체크리스트 기준 자체는 `src/tools/expert-checklists.ts`의 pure data로 결정적·재현 가능합니다.
319
+
320
+ 사용 예:
321
+
322
+ ```
323
+ @mdr-cybersecurity-reviewer DYN-123 설계 보안 리뷰해줘 (phase=design)
324
+ ```
325
+
326
+ ```
327
+ @mdr-regulatory-architect PA Gate(DYN-100) Annex II 완전성 검토해줘
328
+ ```
329
+
330
+ > subagent는 plugin의 `agents/` 디렉터리가 Claude Code에 의해 자동 재귀 스캔되어 노출됩니다. `marketplace.json` 수정은 불필요하며, npm 패키지에 포함되려면 `package.json` `files`에 `"agents"`가 있어야 합니다. 상세 설계: [docs/superpowers/specs/2026-07-07-mdr-expert-agents-design.md](docs/superpowers/specs/2026-07-07-mdr-expert-agents-design.md).
331
+
302
332
  ## doc_render 작성 skill (consumer 워크플로우)
303
333
 
304
334
  이 서버는 `.claude/skills/doc-render/` 절차 가이드를 함께 제공합니다. `/plugin install` 하면 consumer(Claude Code)에게 skill도 자동으로 배포되므로, consumer는 doc_render 출력으로 MDR/dev 문서를 자동 작성해 자기 repo `docs/`에 저장하고 Jira 티켓 description에 미러할 수 있습니다.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: mdr-cybersecurity-reviewer
3
+ description: IEC 81001-5-1·FDA 2023·AAMI TIR57/SW96 기반 의료기기 SW 보안 리뷰. 설계(위협모델)·구현(시큐어코딩/SBOM/SAST/SCA)·검증(보안테스트/CVSS)·운영(CVD) 4단계. Gate 승인 전 또는 설계/구현 완료 시점 정규 보안 검토에 사용.
4
+ tools:
5
+ - mcp__neobiotech-dev-agent__expert_get_cybersecurity_checklist
6
+ - mcp__neobiotech-dev-agent__jira_get_issue
7
+ - mcp__neobiotech-dev-agent__jira_get_links
8
+ - mcp__neobiotech-dev-agent__jira_search
9
+ - mcp__neobiotech-dev-agent__cvss_get_vector
10
+ - mcp__neobiotech-dev-agent__confluence_get_page
11
+ - Read
12
+ - Grep
13
+ - Glob
14
+ model: inherit
15
+ ---
16
+
17
+ # Cybersecurity Reviewer
18
+
19
+ 당신은 의료기기 소프트웨어 보안 전문가입니다. IEC 81001-5-1:2021(보안 SDLC), FDA 시판전 사이버보안 가이던스 2023, AAMI TIR57:2016 / AAMI SW96:2023(보안 위험관리, CVSS v4.0 통합)에 정통합니다.
20
+
21
+ ## 수행 절차 (반드시 이 순서)
22
+
23
+ 1. **판단 전 checklist 먼저 로드** — `expert_get_cybersecurity_checklist(phase=...)` 호출. 검사 범위(phase)를 consumer 요청에서 판단(전체 검토라면 phase 생략 → 4단계 전체). 이 단계를 건너뛰고 임의 판단하지 말 것.
24
+ 2. 각 항목의 `evidence.tools`가 지시하는 레이어1 툴(`jira_search`·`jira_get_issue`·`jira_get_links`·`confluence_get_page`·`cvss_get_vector`)로 산출물 조회.
25
+ 3. 항목 `passCriteria`에 대조 → PASS / WARN(증거 불충분·조회 실패) / FAIL 판정.
26
+ 4. 아래 출력 형식으로 구조화 리포트 반환.
27
+
28
+ ## 판정 규칙
29
+
30
+ - **PASS**: `passCriteria`가 관측 가능한 증거로 충족됨.
31
+ - **WARN**: 항목 관련 산출물을 찾을 수 없거나 권한·존재 문제로 조회 실패. 누락을 명시 보고 — "조회 불가"를 절대 PASS로 처리하지 말 것.
32
+ - **FAIL**: 산출물은 존재하나 `passCriteria` 미충족.
33
+
34
+ ## 출력 형식
35
+
36
+ ```
37
+ ## Cybersecurity Review — [대상 키/문서]
38
+
39
+ [상단] critical FAIL ≥1 시: "⛔ BLOCK — critical 미충족 N건"
40
+ critical FAIL 0 시: "✅ critical 통과 (major 미충족 M건)"
41
+
42
+ ### 항목별 판정
43
+ | id | phase | severity | 판정 | 근거 |
44
+ (각 항목: 근거에 티켓 키·필드명·링크·문서 경로 명시)
45
+
46
+ ### 권고 (soft 통찰)
47
+ (전문가 판단 기반 개선 제안 — 표준 모범 사례 참조)
48
+
49
+ ### 다음 액션
50
+ (누락/미충족 항목에 대해 consumer가 호출할 수 있는 구체적 jira-mcp 툴 시그니처 제안 — 예: `jira_create_issue`로 security requirement 티켓 생성)
51
+ ```
52
+
53
+ ## 주의
54
+
55
+ - `CS-VER-CVSS`는 `cvss_get_vector`로 `customfield_10166`/`customfield_10167` 확인 — 이 repo에 이미 구현된 지점.
56
+ - soft 권고는 변동 가능하나, hard 판정(체크리스트 기반)은 같은 산출물+같은 체크리스트에서 재현 가능해야 함.
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: mdr-regulatory-architect
3
+ description: MDR(Annex II 기술문서 / Annex I GSPR / Art.2 intended use) 규제 검토. 기술문서 완전성·추적성·GSPR 준수 매핑·혜택-위험·intended use 검토. Gate(PA/EA) 승인 전 또는 기술문서 작성 완료 시점에 사용.
4
+ tools:
5
+ - mcp__neobiotech-dev-agent__expert_get_regulatory_checklist
6
+ - mcp__neobiotech-dev-agent__doc_check_completeness
7
+ - mcp__neobiotech-dev-agent__doc_generate_evidence
8
+ - mcp__neobiotech-dev-agent__traceability_check
9
+ - mcp__neobiotech-dev-agent__jira_get_issue
10
+ - mcp__neobiotech-dev-agent__jira_get_links
11
+ - mcp__neobiotech-dev-agent__jira_search
12
+ - mcp__neobiotech-dev-agent__confluence_get_page
13
+ - Read
14
+ - Grep
15
+ - Glob
16
+ model: inherit
17
+ ---
18
+
19
+ # Regulatory Architect
20
+
21
+ 당신은 MDR(EU 2017/745) 의료기기 규제 전문가입니다. MDR Annex II(기술 문서 구조), Annex I GSPR(일반 안전·성능 요건), Art.2(12) intended use 정의, 그리고 IEC 62304(생애주기 추적성)·ISO 14971(위험관리)와의 연계에 정통합니다.
22
+
23
+ ## 수행 절차 (반드시 이 순서)
24
+
25
+ 1. **판단 전 checklist 먼저 로드** — `expert_get_regulatory_checklist` 호출. 5개 항목(Annex II Ch.1·Ch.3, GSPR, 혜택-위험, intended use) 로드. 이 단계를 건너뛰지 말 것.
26
+ 2. 각 항목의 `evidence.tools`가 지시하는 레이어1 툴(`doc_check_completeness`·`doc_generate_evidence`·`traceability_check`·`jira_get_issue`·`jira_get_links`·`confluence_get_page`)로 산출물 조회.
27
+ 3. 항목 `passCriteria`에 대조 → PASS / WARN / FAIL 판정.
28
+ 4. 아래 출력 형식으로 구조화 리포트 반환.
29
+
30
+ ## 판정 규칙
31
+
32
+ - **PASS**: `passCriteria`가 관측 가능한 증거로 충족됨.
33
+ - **WARN**: 산출물 조회 불가(권한·존재·링크 단절). "조회 불가"를 PASS로 처리하지 말 것.
34
+ - **FAIL**: 산출물은 존재하나 `passCriteria` 미충족.
35
+
36
+ ## 출력 형식
37
+
38
+ ```
39
+ ## Regulatory Review — [프로젝트/Gate 키]
40
+
41
+ [상단] critical FAIL ≥1 시: "⛔ BLOCK — critical 미충족 N건"
42
+ critical FAIL 0 시: "✅ critical 통과 (major 미충족 M건)"
43
+
44
+ ### 항목별 판정
45
+ | id | severity | 판정 | 근거 |
46
+ (각 항목: 근거에 문서명·티켓 키·GSPR 항목 번호·링크 명시)
47
+
48
+ ### 권고 (soft 통찰)
49
+ (규제 모범 사례·통상적 기대 수준 기반 제안)
50
+
51
+ ### 다음 액션
52
+ (누락/미충족 항목에 대한 구체적 jira-mcp 툴 시그니처 제안 — 예: `doc_create_from_template`으로 누락 문서 생성, `traceability_fix`로 단절 링크 보정)
53
+ ```
54
+
55
+ ## 주의
56
+
57
+ - `RA-ANNEX-CH3`은 `traceability_check` 결과(링크 단절)가 핵심 증거.
58
+ - `RA-INTENDED-USE`는 `usability_create_use_spec` 산출물의 `intended_use` 필드 — 필요 시 consumer가 해당 툴로 생성 후 재검토.
59
+ - hard 판정은 체크리스트 기반이라 재현 가능해야 함.
package/dist/index.js CHANGED
@@ -33182,7 +33182,17 @@ var TOOL_CATALOG = [
33182
33182
  { name: "doc_render", description: "dev_docs(PRD/Spec/Plan/Tasks)\xB7mdr_docs(PA/EA gate \uBB38\uC11C \uC804\uCCB4) \uD15C\uD50C\uB9BF \uBAA8\uB4DC \uAE30\uBC18(freeform) \uACB0\uC815\uC801 \uB80C\uB354 \u2014 \uBA54\uD0C0\uB9CC \uCE58\uD658, \uC790\uC720 \uD14D\uC2A4\uD2B8/\uC9C0\uCE68/\uBE48 \uB370\uC774\uD130 \uD45C\uB294 consumer\uAC00 \uCC44\uC6C0", category: "\uAC1C\uBC1C \uBB38\uC11C \uB80C\uB354" },
33183
33183
  // Init
33184
33184
  { name: "jira_init_project", description: "\uD504\uB85C\uC81D\uD2B8 \uD3F4\uB354\uC5D0 Jira \uD504\uB85C\uC81D\uD2B8 \uD0A4 \uCD08\uAE30 \uC124\uC815 (CLAUDE.md \uC5C5\uB370\uC774\uD2B8)", category: "\uCD08\uAE30 \uC124\uC815" },
33185
- { name: "help", description: "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB3C4\uAD6C \uCE74\uD0C8\uB85C\uADF8\uC640 \uC6CC\uD06C\uD50C\uB85C\uC6B0 \uAC00\uC774\uB4DC \uC870\uD68C (topic \uC9C0\uC815 \uAC00\uB2A5)", category: "\uB3C4\uC6C0\uB9D0" }
33185
+ { name: "help", description: "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB3C4\uAD6C \uCE74\uD0C8\uB85C\uADF8\uC640 \uC6CC\uD06C\uD50C\uB85C\uC6B0 \uAC00\uC774\uB4DC \uC870\uD68C (topic \uC9C0\uC815 \uAC00\uB2A5)", category: "\uB3C4\uC6C0\uB9D0" },
33186
+ {
33187
+ name: "expert_get_regulatory_checklist",
33188
+ description: "[\uC804\uBB38\uAC00\xB7MDR \uADDC\uC81C] MDR Regulatory Architect \uAC80\uC0AC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uBC18\uD658 (Annex II / GSPR / intended use)",
33189
+ category: "MDR \uC804\uBB38\uAC00"
33190
+ },
33191
+ {
33192
+ name: "expert_get_cybersecurity_checklist",
33193
+ description: "[\uC804\uBB38\uAC00\xB7\uBCF4\uC548] Cybersecurity Reviewer \uAC80\uC0AC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uBC18\uD658 (IEC 81001-5-1 / FDA 2023 / AAMI TIR57-SW96). phase: design|implementation|verification|postmarket",
33194
+ category: "MDR \uC804\uBB38\uAC00"
33195
+ }
33186
33196
  ];
33187
33197
  var WORKFLOWS = {
33188
33198
  pa: [
@@ -33996,6 +34006,243 @@ var registerDocRenderTools = (ctx2) => {
33996
34006
  );
33997
34007
  };
33998
34008
 
34009
+ // src/tools/expert-checklists.ts
34010
+ var EXPERT_CHECKLISTS = {
34011
+ "regulatory-architect": {
34012
+ role: "regulatory-architect",
34013
+ title: "MDR Regulatory Architect \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 (Annex II / GSPR / intended use)",
34014
+ items: [
34015
+ {
34016
+ id: "RA-ANNEX-CH1",
34017
+ standard: "MDR Annex II Ch.1",
34018
+ check: "\uAE30\uAE30 \uC124\uBA85\xB7\uC18C\uD504\uD2B8\uC6E8\uC5B4 \uC0AC\uC591\xB7intended use\uAC00 \uAE30\uC220\uBB38\uC11C\uC5D0 \uBA85\uC2DC\uB418\uC5B4 \uC788\uB294\uAC00?",
34019
+ passCriteria: "device description \uD2F0\uCF13/\uBB38\uC11C\uC5D0 SW \uBC84\uC804\xB7intended medical purpose \uD3EC\uD568",
34020
+ severity: "critical",
34021
+ evidence: {
34022
+ tools: ["doc_check_completeness", "doc_generate_evidence", "jira_get_issue"]
34023
+ }
34024
+ },
34025
+ {
34026
+ id: "RA-ANNEX-CH3",
34027
+ standard: "Annex II Ch.3 / IEC 62304",
34028
+ check: "SW \uAC1C\uBC1C \uC0DD\uC560\uC8FC\uAE30 \uC0B0\uCD9C\uBB3C(SyRS\u2192Arch\u2192DD\u2192Code\u2192Test) \uCD94\uC801\uC131\uC774 \uD655\uBCF4\uB418\uC5C8\uB294\uAC00?",
34029
+ passCriteria: "traceability_check \uAC00 \uB9C1\uD06C \uB2E8\uC808 \uC5C6\uC774 \uD1B5\uACFC",
34030
+ severity: "critical",
34031
+ evidence: {
34032
+ tools: ["traceability_check", "jira_get_links", "jira_get_issue"]
34033
+ }
34034
+ },
34035
+ {
34036
+ id: "RA-GSPR-COV",
34037
+ standard: "Annex I (GSPR)",
34038
+ check: "\uC801\uC6A9 GSPR \uD56D\uBAA9\uBCC4\uB85C \uC900\uC218/\uADFC\uAC70 \uB9E4\uD551\uC774 \uC788\uB294\uAC00? (\uD2B9\uD788 Ch.I \uC77C\uBC18, Ch.II \uC124\uACC4/\uC81C\uC870)",
34039
+ passCriteria: "\uAC01 GSPR \uD56D\uBAA9\uC5D0 \uC900\uC218 \uC5EC\uBD80 + \uADFC\uAC70 \uD2F0\uCF13 \uB9E4\uD551 \uC874\uC7AC",
34040
+ severity: "critical",
34041
+ evidence: {
34042
+ tools: ["doc_check_completeness", "doc_generate_evidence", "jira_get_issue", "jira_get_links"]
34043
+ }
34044
+ },
34045
+ {
34046
+ id: "RA-BENEFIT-RISK",
34047
+ standard: "Annex II Ch.5 / ISO 14971",
34048
+ check: "\uD61C\uD0DD-\uC704\uD5D8 \uBD84\uC11D + \uC704\uD5D8 \uD1B5\uC81C \uAC80\uC99D \uC99D\uAC70\uAC00 \uC788\uB294\uAC00?",
34049
+ passCriteria: "risk_create_mitigation \uACB0\uACFC + \uC794\uB958 \uC704\uD5D8 \uC218\uC6A9 \uADFC\uAC70 \uBB38\uC11C\uD654",
34050
+ severity: "critical",
34051
+ evidence: {
34052
+ tools: ["doc_generate_evidence", "jira_get_links", "jira_get_issue"]
34053
+ }
34054
+ },
34055
+ {
34056
+ id: "RA-INTENDED-USE",
34057
+ standard: "MDR Art.2(12)",
34058
+ check: "intended medical purpose\uAC00 use_spec\uC5D0 \uBA85\uC2DC\uB418\uC5B4 \uC788\uB294\uAC00?",
34059
+ passCriteria: "usability use_spec \uD2F0\uCF13\uC5D0 intended_use \uD544\uB4DC \uCC44\uC6CC\uC9D0",
34060
+ severity: "major",
34061
+ evidence: {
34062
+ tools: ["jira_get_issue", "jira_get_links"]
34063
+ }
34064
+ }
34065
+ ]
34066
+ },
34067
+ "cybersecurity-reviewer": {
34068
+ role: "cybersecurity-reviewer",
34069
+ title: "Cybersecurity Reviewer \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 (IEC 81001-5-1 / FDA 2023 / AAMI TIR57-SW96)",
34070
+ items: [
34071
+ // ── design ──
34072
+ {
34073
+ id: "CS-DESIGN-THREATMODEL",
34074
+ phase: "design",
34075
+ standard: "IEC 81001-5-1 \xA75.2 / FDA 2023",
34076
+ check: "\uC704\uD611 \uBAA8\uB378(STRIDE \uB610\uB294 \uC790\uC0B0-\uC704\uD611\uC8FC\uCCB4-\uD1B5\uC81C \uB9E4\uD551)\uC774 \uC874\uC7AC\uD558\uB294\uAC00?",
34077
+ passCriteria: "threat-model \uB77C\uBCA8 \uD2F0\uCF13/\uBB38\uC11C \uC874\uC7AC, STRIDE 6\uCE74\uD14C\uACE0\uB9AC \uCEE4\uBC84",
34078
+ severity: "critical",
34079
+ evidence: {
34080
+ tools: ["jira_search", "jira_get_issue", "confluence_get_page"]
34081
+ }
34082
+ },
34083
+ {
34084
+ id: "CS-DESIGN-SECREQ",
34085
+ phase: "design",
34086
+ standard: "IEC 81001-5-1 \xA75.1",
34087
+ check: "\uBCF4\uC548 \uC694\uAD6C\uC0AC\uD56D\uC774 \uAE30\uB2A5 \uC694\uAD6C\uC0AC\uD56D\uACFC \uBD84\uB9AC\xB7\uBA85\uC2DC\uB418\uC5B4 \uC788\uB294\uAC00?",
34088
+ passCriteria: "\uBCC4\uB3C4 security requirement \uD2F0\uCF13/\uD544\uB4DC\uB85C \uBD84\uB9AC",
34089
+ severity: "critical",
34090
+ evidence: {
34091
+ tools: ["jira_search", "jira_get_issue"]
34092
+ }
34093
+ },
34094
+ {
34095
+ id: "CS-DESIGN-ARCH",
34096
+ phase: "design",
34097
+ standard: "IEC 81001-5-1 \xA75.3",
34098
+ check: "\uBCF4\uC548 \uC544\uD0A4\uD14D\uCC98(\uC778\uC99D/\uC778\uAC00\xB7\uC554\uD638\uD654\xB7\uCD5C\uC18C\uAD8C\uD55C\xB7\uC2E0\uB8B0\uACBD\uACC4)\uAC00 \uC815\uC758\uB418\uC5C8\uB294\uAC00?",
34099
+ passCriteria: "\uC544\uD0A4\uD14D\uCC98 \uBB38\uC11C\uC5D0 4\uC694\uC18C \uAE30\uC220",
34100
+ severity: "major",
34101
+ evidence: {
34102
+ tools: ["confluence_get_page", "jira_get_issue"]
34103
+ }
34104
+ },
34105
+ // ── implementation ──
34106
+ {
34107
+ id: "CS-IMPL-SECURECODE",
34108
+ phase: "implementation",
34109
+ standard: "IEC 81001-5-1 \xA76 / OWASP CWE",
34110
+ check: "\uC2DC\uD050\uC5B4 \uCF54\uB529 \uD45C\uC900\uC744 \uC900\uC218\uD558\uB294\uAC00? (\uC785\uB825\uAC80\uC99D\xB7\uCD9C\uB825\uC778\uCF54\uB529\xB7\uBE44\uBC00 \uD558\uB4DC\uCF54\uB529 \u7121)",
34111
+ passCriteria: "\uCF54\uB529 \uD45C\uC900 \uBB38\uC11C + \uBE44\uBC00 \uC2A4\uCE94 \uACB0\uACFC clean",
34112
+ severity: "critical",
34113
+ evidence: {
34114
+ tools: ["confluence_get_page", "jira_get_issue"]
34115
+ }
34116
+ },
34117
+ {
34118
+ id: "CS-IMPL-SAST",
34119
+ phase: "implementation",
34120
+ standard: "IEC 81001-5-1 \xA76",
34121
+ check: "SAST \uACB0\uACFC \uCD94\uC801 + \uACB0\uD568\uBCC4 \uD574\uACB0/\uC218\uC6A9 \uADFC\uAC70\uAC00 \uC788\uB294\uAC00?",
34122
+ passCriteria: "SAST \uACB0\uACFC \uD2F0\uCF13/\uBCF4\uACE0\uC11C + \uAC01 \uACB0\uD568 \uC0C1\uD0DC(\uC218\uC815/\uC218\uC6A9) \uAE30\uB85D",
34123
+ severity: "major",
34124
+ evidence: {
34125
+ tools: ["jira_search", "jira_get_issue"]
34126
+ }
34127
+ },
34128
+ {
34129
+ id: "CS-IMPL-SBOM",
34130
+ phase: "implementation",
34131
+ standard: "FDA 2023 / IEC 81001-5-1",
34132
+ check: "SBOM \uC874\uC7AC + \uC11C\uB4DC\uD30C\uD2F0 \uCDE8\uC57D\uC810\xB7\uB77C\uC774\uC120\uC2A4 \uAD00\uB9AC\uAC00 \uB418\uB294\uAC00?",
34133
+ passCriteria: "SBOM \uC0B0\uCD9C\uBB3C \uC874\uC7AC + \uCEF4\uD3EC\uB10C\uD2B8\uBCC4 \uCDE8\uC57D\uC810/\uB77C\uC774\uC120\uC2A4 \uB9E4\uD551",
34134
+ severity: "critical",
34135
+ evidence: {
34136
+ tools: ["jira_get_issue", "confluence_get_page"]
34137
+ }
34138
+ },
34139
+ {
34140
+ id: "CS-IMPL-SCA",
34141
+ phase: "implementation",
34142
+ standard: "IEC 81001-5-1 \xA76",
34143
+ check: "\uC758\uC874\uC131 \uCDE8\uC57D\uC810 \uC2A4\uCE94(SCA) \uACB0\uACFC \uCD94\uC801\uC774 \uB418\uB294\uAC00?",
34144
+ passCriteria: "SCA \uBCF4\uACE0\uC11C + \uACE0\uC704\uD5D8 \uC758\uC874\uC131 \uCC98\uB9AC \uADFC\uAC70",
34145
+ severity: "major",
34146
+ evidence: {
34147
+ tools: ["jira_search", "jira_get_issue"]
34148
+ }
34149
+ },
34150
+ // ── verification ──
34151
+ {
34152
+ id: "CS-VER-TEST",
34153
+ phase: "verification",
34154
+ standard: "FDA 2023 / AAMI SW96",
34155
+ check: "\uBCF4\uC548 \uD14C\uC2A4\uD2B8 \uCF00\uC774\uC2A4 + \uCE68\uD22C\uD14C\uC2A4\uD2B8 \uACB0\uACFC\uAC00 \uC788\uB294\uAC00?",
34156
+ passCriteria: "\uBCF4\uC548 \uD14C\uC2A4\uD2B8 \uCF00\uC774\uC2A4 + pentest \uBCF4\uACE0\uC11C \uC874\uC7AC",
34157
+ severity: "critical",
34158
+ evidence: {
34159
+ tools: ["jira_search", "jira_get_issue", "confluence_get_page"]
34160
+ }
34161
+ },
34162
+ {
34163
+ id: "CS-VER-CVSS",
34164
+ phase: "verification",
34165
+ standard: "AAMI TIR57 / CVSS v4.0",
34166
+ check: "\uC2DD\uBCC4\uB41C \uCDE8\uC57D\uC810\uB9C8\uB2E4 CVSS vector/score\uAC00 \uC124\uC815\uB418\uC5C8\uB294\uAC00?",
34167
+ passCriteria: "customfield_10166/10167 \uCC44\uC6CC\uC9D0 \u2014 cvss_get_vector\uB85C \uD655\uC778",
34168
+ severity: "major",
34169
+ evidence: {
34170
+ tools: ["cvss_get_vector", "jira_get_issue"],
34171
+ fields: ["customfield_10166", "customfield_10167"]
34172
+ }
34173
+ },
34174
+ {
34175
+ id: "CS-VER-RESIDUAL",
34176
+ phase: "verification",
34177
+ standard: "AAMI SW96",
34178
+ check: "\uC794\uC874 \uC704\uD5D8 \uC218\uC6A9 \uADFC\uAC70\uAC00 \uBB38\uC11C\uD654\uB418\uC5C8\uB294\uAC00?",
34179
+ passCriteria: "\uAC01 \uC794\uB958 \uC704\uD5D8\uBCC4 \uC218\uC6A9 \uC0AC\uC720\xB7\uC2B9\uC778 \uAE30\uB85D",
34180
+ severity: "major",
34181
+ evidence: {
34182
+ tools: ["jira_get_issue", "jira_get_links", "confluence_get_page"]
34183
+ }
34184
+ },
34185
+ // ── postmarket ──
34186
+ {
34187
+ id: "CS-PMS-DISCLOSURE",
34188
+ phase: "postmarket",
34189
+ standard: "FDA 2023 / IMDRF",
34190
+ check: "\uCDE8\uC57D\uC810 \uACF5\uC2DC(CVD) \uD504\uB85C\uC138\uC2A4 + postmarket \uBAA8\uB2C8\uD130\uB9C1 \uACC4\uD68D\uC774 \uC788\uB294\uAC00?",
34191
+ passCriteria: "CVD \uC815\uCC45 \uBB38\uC11C + \uBAA8\uB2C8\uD130\uB9C1 \uACC4\uD68D \uC874\uC7AC",
34192
+ severity: "major",
34193
+ evidence: {
34194
+ tools: ["confluence_get_page", "jira_get_issue"]
34195
+ }
34196
+ },
34197
+ {
34198
+ id: "CS-PMS-RISK",
34199
+ phase: "postmarket",
34200
+ standard: "AAMI TIR57/SW96",
34201
+ check: "\uBCF4\uC548 \uC704\uD5D8\uC774 ISO 14971 risk \uCCB4\uACC4\uC640 \uC5F0\uACB0\uB418\uC5C8\uB294\uAC00?",
34202
+ passCriteria: "\uBCF4\uC548 \uC704\uD5D8 \u2194 Hazard/risk \uB9C1\uD06C \uC874\uC7AC",
34203
+ severity: "critical",
34204
+ evidence: {
34205
+ tools: ["jira_get_issue", "jira_get_links"]
34206
+ }
34207
+ }
34208
+ ]
34209
+ }
34210
+ };
34211
+
34212
+ // src/tools/expert.ts
34213
+ var phaseSchema = external_exports.enum(["design", "implementation", "verification", "postmarket"]);
34214
+ function buildChecklistText(roleKey, phase) {
34215
+ const cl = EXPERT_CHECKLISTS[roleKey];
34216
+ if (!cl) return `\uC54C \uC218 \uC5C6\uB294 \uC5ED\uD560: ${roleKey}`;
34217
+ const items = phase ? cl.items.filter((i2) => i2.phase === phase) : cl.items;
34218
+ if (phase && items.length === 0) {
34219
+ return `${cl.title}
34220
+
34221
+ phase='${phase}'\uC5D0 \uD574\uB2F9 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. (\uC774 \uC5ED\uD560\uC740 phase \uBBF8\uC0AC\uC6A9\uC77C \uC218 \uC788\uC74C)`;
34222
+ }
34223
+ return JSON.stringify({ role: cl.role, title: cl.title, items }, null, 2);
34224
+ }
34225
+ var registerExpertTools = (ctx2) => {
34226
+ ctx2.server.tool(
34227
+ "expert_get_regulatory_checklist",
34228
+ "[\uC804\uBB38\uAC00\xB7MDR \uADDC\uC81C] MDR Regulatory Architect \uAC80\uC0AC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uBC18\uD658. (Annex II / GSPR / intended use) phase\uB294 \uBBF8\uC0AC\uC6A9.",
34229
+ { phase: phaseSchema.optional() },
34230
+ async ({ phase }) => ({
34231
+ content: [{ type: "text", text: buildChecklistText("regulatory-architect", phase) }]
34232
+ })
34233
+ );
34234
+ ctx2.server.tool(
34235
+ "expert_get_cybersecurity_checklist",
34236
+ "[\uC804\uBB38\uAC00\xB7\uBCF4\uC548] Cybersecurity Reviewer \uAC80\uC0AC \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uBC18\uD658. (IEC 81001-5-1 / FDA 2023 / AAMI TIR57-SW96) phase: design|implementation|verification|postmarket",
34237
+ { phase: phaseSchema.optional() },
34238
+ async ({ phase }) => ({
34239
+ content: [
34240
+ { type: "text", text: buildChecklistText("cybersecurity-reviewer", phase) }
34241
+ ]
34242
+ })
34243
+ );
34244
+ };
34245
+
33999
34246
  // src/index.ts
34000
34247
  var jiraUrl = process.env.JIRA_URL || "";
34001
34248
  var jiraEmail = process.env.JIRA_EMAIL || "";
@@ -34013,7 +34260,7 @@ var xrayClientSecret = process.env.XRAY_CLIENT_SECRET || "";
34013
34260
  var xray = xrayClientId && xrayClientSecret ? new XrayClient(xrayClientId, xrayClientSecret, jiraUrl, jiraEmail, jiraToken) : null;
34014
34261
  var server = new McpServer({
34015
34262
  name: "jira-confluence",
34016
- version: "0.1.12"
34263
+ version: "0.1.13"
34017
34264
  });
34018
34265
  var ctx = { server, jira, confluence, risk, xray };
34019
34266
  registerJiraCrudTools(ctx);
@@ -34028,6 +34275,7 @@ registerUsabilityTools(ctx);
34028
34275
  registerDocValidationTools(ctx);
34029
34276
  registerInitTools(ctx);
34030
34277
  registerDocRenderTools(ctx);
34278
+ registerExpertTools(ctx);
34031
34279
  var transport = new StdioServerTransport();
34032
34280
  server.connect(transport).catch((err) => {
34033
34281
  console.error("Failed to start MCP server:", err);