@pactosigna/mcp-server 0.1.10 → 0.1.12

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.
Files changed (2) hide show
  1. package/dist/index.js +264 -150
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21840,15 +21840,27 @@ var LINK_TYPES = {
21840
21840
  analyzes: "Analyzes"
21841
21841
  };
21842
21842
  var REQUIRED_SECTIONS = {
21843
- user_need: ["Purpose", "Stakeholder", "User Needs"],
21844
- architecture: ["Purpose"],
21843
+ user_need: ["User Story", "Validation Criteria"],
21844
+ architecture: ["Purpose", "Architecture Overview", "Interfaces"],
21845
+ detailed_design: ["Purpose", "Detailed Design", "Interfaces"],
21845
21846
  release_plan: ["Scope", "Applicable Plans", "Release-Specific Criteria", "Known Anomalies"],
21846
21847
  design_review: ["Review Scope", "Attendees", "Findings", "Actions", "Conclusion"],
21847
21848
  release_notes: ["Changes", "Known Issues"],
21848
21849
  audit_schedule: ["Scope", "Audit Criteria"],
21849
21850
  audit_report: ["Scope", "Methodology", "Findings", "Conclusion"],
21850
21851
  management_review: ["Review Inputs", "Review Outputs", "Action Items", "Decisions"],
21851
- hazard_category: ["Description", "Examples", "Applicable Standards"]
21852
+ hazard_category: ["Description", "Examples", "Applicable Standards"],
21853
+ software_risk: ["Harm Assessment"],
21854
+ security_risk: ["Harm Assessment"],
21855
+ usability_risk: ["Harm Assessment"],
21856
+ haz_soe_software: ["Intended Function", "Failure Cause", "Failure Mode", "Failure Effect"],
21857
+ haz_soe_security: [
21858
+ "STRIDE Category & Threat",
21859
+ "Asset",
21860
+ "Vulnerability",
21861
+ "Actor & Attack Vector",
21862
+ "Adverse Impact"
21863
+ ]
21852
21864
  };
21853
21865
  var MemberPermissionsSchema = external_exports.object({
21854
21866
  canSign: external_exports.boolean(),
@@ -22124,6 +22136,114 @@ var ListActionsResponseSchema = external_exports.object({
22124
22136
  limit: external_exports.number(),
22125
22137
  hasMore: external_exports.boolean()
22126
22138
  });
22139
+ var CapaStatusSchema = external_exports.enum(CAPA_STATUSES);
22140
+ var CapaClassificationSchema = external_exports.enum(CAPA_CLASSIFICATIONS);
22141
+ var CapaPrioritySchema = external_exports.enum(CAPA_PRIORITIES);
22142
+ var CapaSourceTypeSchema = external_exports.enum(CAPA_SOURCE_TYPES);
22143
+ var CapaActionStatusSchema = external_exports.enum(CAPA_ACTION_STATUSES);
22144
+ var QmsCapaParamSchema = external_exports.object({
22145
+ orgId: external_exports.string().min(1),
22146
+ qmsId: external_exports.string().min(1)
22147
+ });
22148
+ var CapaIdParamSchema = external_exports.object({
22149
+ orgId: external_exports.string().min(1),
22150
+ qmsId: external_exports.string().min(1),
22151
+ capaId: external_exports.string().min(1)
22152
+ });
22153
+ var CapaActionIdParamSchema = external_exports.object({
22154
+ orgId: external_exports.string().min(1),
22155
+ qmsId: external_exports.string().min(1),
22156
+ capaId: external_exports.string().min(1),
22157
+ actionId: external_exports.string().min(1)
22158
+ });
22159
+ var CreateCapaRequestSchema = external_exports.object({
22160
+ classification: CapaClassificationSchema,
22161
+ priority: CapaPrioritySchema,
22162
+ title: external_exports.string().min(1).max(200),
22163
+ description: external_exports.string().min(1).max(5e3),
22164
+ sourceType: CapaSourceTypeSchema,
22165
+ sourceDescription: external_exports.string().min(1).max(2e3),
22166
+ sourceId: external_exports.string().max(200).optional(),
22167
+ dueDate: external_exports.string().datetime().optional(),
22168
+ affectedDocumentIds: external_exports.array(external_exports.string().min(1)).default([]),
22169
+ affectedDeviceIds: external_exports.array(external_exports.string().min(1)).default([])
22170
+ });
22171
+ var UpdateCapaRequestSchema = external_exports.object({
22172
+ title: external_exports.string().min(1).max(200).optional(),
22173
+ description: external_exports.string().min(1).max(5e3).optional(),
22174
+ priority: CapaPrioritySchema.optional(),
22175
+ rootCauseDescription: external_exports.string().max(5e3).optional(),
22176
+ verificationDescription: external_exports.string().max(5e3).optional(),
22177
+ affectedDocumentIds: external_exports.array(external_exports.string().min(1)).optional(),
22178
+ affectedDeviceIds: external_exports.array(external_exports.string().min(1)).optional(),
22179
+ dueDate: external_exports.string().datetime().nullable().optional()
22180
+ });
22181
+ var CloseCapaRequestSchema = external_exports.object({
22182
+ signatureId: external_exports.string().min(1)
22183
+ });
22184
+ var AddCapaActionRequestSchema = external_exports.object({
22185
+ description: external_exports.string().min(1).max(2e3),
22186
+ assigneeId: external_exports.string().min(1),
22187
+ dueDate: external_exports.string().datetime(),
22188
+ notes: external_exports.string().max(2e3).optional()
22189
+ });
22190
+ var UpdateCapaActionRequestSchema = external_exports.object({
22191
+ description: external_exports.string().min(1).max(2e3).optional(),
22192
+ assigneeId: external_exports.string().min(1).optional(),
22193
+ dueDate: external_exports.string().datetime().optional(),
22194
+ status: CapaActionStatusSchema.optional(),
22195
+ notes: external_exports.string().max(2e3).optional()
22196
+ });
22197
+ var CapaListQuerySchema = PaginationParamsSchema.extend({
22198
+ status: CapaStatusSchema.optional(),
22199
+ classification: CapaClassificationSchema.optional(),
22200
+ priority: CapaPrioritySchema.optional()
22201
+ });
22202
+ var CapaActionResponseSchema = external_exports.object({
22203
+ id: external_exports.string(),
22204
+ description: external_exports.string(),
22205
+ assigneeId: external_exports.string(),
22206
+ assigneeEmail: external_exports.string(),
22207
+ dueDate: external_exports.string(),
22208
+ status: CapaActionStatusSchema,
22209
+ completedAt: external_exports.string().optional(),
22210
+ notes: external_exports.string().optional()
22211
+ });
22212
+ var CapaResponseSchema = external_exports.object({
22213
+ id: external_exports.string(),
22214
+ qmsId: external_exports.string(),
22215
+ organizationId: external_exports.string(),
22216
+ capaNumber: external_exports.string(),
22217
+ classification: CapaClassificationSchema,
22218
+ priority: CapaPrioritySchema,
22219
+ title: external_exports.string(),
22220
+ description: external_exports.string(),
22221
+ sourceType: CapaSourceTypeSchema,
22222
+ sourceId: external_exports.string().optional(),
22223
+ sourceDescription: external_exports.string(),
22224
+ rootCauseDescription: external_exports.string().optional(),
22225
+ verificationDescription: external_exports.string().optional(),
22226
+ affectedDocumentIds: external_exports.array(external_exports.string()),
22227
+ affectedDeviceIds: external_exports.array(external_exports.string()),
22228
+ actions: external_exports.array(CapaActionResponseSchema),
22229
+ status: CapaStatusSchema,
22230
+ createdAt: external_exports.string(),
22231
+ createdBy: external_exports.string(),
22232
+ investigationStartedAt: external_exports.string().optional(),
22233
+ implementationStartedAt: external_exports.string().optional(),
22234
+ verificationStartedAt: external_exports.string().optional(),
22235
+ closedAt: external_exports.string().optional(),
22236
+ closedBy: external_exports.string().optional(),
22237
+ cancelledAt: external_exports.string().optional(),
22238
+ cancelledBy: external_exports.string().optional(),
22239
+ dueDate: external_exports.string().optional()
22240
+ });
22241
+ var CapaListResponseSchema = external_exports.object({
22242
+ items: external_exports.array(CapaResponseSchema),
22243
+ total: external_exports.number(),
22244
+ limit: external_exports.number(),
22245
+ offset: external_exports.number()
22246
+ });
22127
22247
  var ComplaintStatusSchema = external_exports.enum(COMPLAINT_STATUSES);
22128
22248
  var ComplaintSeveritySchema = external_exports.enum(COMPLAINT_SEVERITIES);
22129
22249
  var ComplaintCategorySchema = external_exports.enum(COMPLAINT_CATEGORIES);
@@ -22347,114 +22467,6 @@ var RequestDCOExportResponseSchema = external_exports.object({
22347
22467
  message: external_exports.string(),
22348
22468
  estimatedMinutes: external_exports.number()
22349
22469
  });
22350
- var CapaStatusSchema = external_exports.enum(CAPA_STATUSES);
22351
- var CapaClassificationSchema = external_exports.enum(CAPA_CLASSIFICATIONS);
22352
- var CapaPrioritySchema = external_exports.enum(CAPA_PRIORITIES);
22353
- var CapaSourceTypeSchema = external_exports.enum(CAPA_SOURCE_TYPES);
22354
- var CapaActionStatusSchema = external_exports.enum(CAPA_ACTION_STATUSES);
22355
- var QmsCapaParamSchema = external_exports.object({
22356
- orgId: external_exports.string().min(1),
22357
- qmsId: external_exports.string().min(1)
22358
- });
22359
- var CapaIdParamSchema = external_exports.object({
22360
- orgId: external_exports.string().min(1),
22361
- qmsId: external_exports.string().min(1),
22362
- capaId: external_exports.string().min(1)
22363
- });
22364
- var CapaActionIdParamSchema = external_exports.object({
22365
- orgId: external_exports.string().min(1),
22366
- qmsId: external_exports.string().min(1),
22367
- capaId: external_exports.string().min(1),
22368
- actionId: external_exports.string().min(1)
22369
- });
22370
- var CreateCapaRequestSchema = external_exports.object({
22371
- classification: CapaClassificationSchema,
22372
- priority: CapaPrioritySchema,
22373
- title: external_exports.string().min(1).max(200),
22374
- description: external_exports.string().min(1).max(5e3),
22375
- sourceType: CapaSourceTypeSchema,
22376
- sourceDescription: external_exports.string().min(1).max(2e3),
22377
- sourceId: external_exports.string().max(200).optional(),
22378
- dueDate: external_exports.string().datetime().optional(),
22379
- affectedDocumentIds: external_exports.array(external_exports.string().min(1)).default([]),
22380
- affectedDeviceIds: external_exports.array(external_exports.string().min(1)).default([])
22381
- });
22382
- var UpdateCapaRequestSchema = external_exports.object({
22383
- title: external_exports.string().min(1).max(200).optional(),
22384
- description: external_exports.string().min(1).max(5e3).optional(),
22385
- priority: CapaPrioritySchema.optional(),
22386
- rootCauseDescription: external_exports.string().max(5e3).optional(),
22387
- verificationDescription: external_exports.string().max(5e3).optional(),
22388
- affectedDocumentIds: external_exports.array(external_exports.string().min(1)).optional(),
22389
- affectedDeviceIds: external_exports.array(external_exports.string().min(1)).optional(),
22390
- dueDate: external_exports.string().datetime().nullable().optional()
22391
- });
22392
- var CloseCapaRequestSchema = external_exports.object({
22393
- signatureId: external_exports.string().min(1)
22394
- });
22395
- var AddCapaActionRequestSchema = external_exports.object({
22396
- description: external_exports.string().min(1).max(2e3),
22397
- assigneeId: external_exports.string().min(1),
22398
- dueDate: external_exports.string().datetime(),
22399
- notes: external_exports.string().max(2e3).optional()
22400
- });
22401
- var UpdateCapaActionRequestSchema = external_exports.object({
22402
- description: external_exports.string().min(1).max(2e3).optional(),
22403
- assigneeId: external_exports.string().min(1).optional(),
22404
- dueDate: external_exports.string().datetime().optional(),
22405
- status: CapaActionStatusSchema.optional(),
22406
- notes: external_exports.string().max(2e3).optional()
22407
- });
22408
- var CapaListQuerySchema = PaginationParamsSchema.extend({
22409
- status: CapaStatusSchema.optional(),
22410
- classification: CapaClassificationSchema.optional(),
22411
- priority: CapaPrioritySchema.optional()
22412
- });
22413
- var CapaActionResponseSchema = external_exports.object({
22414
- id: external_exports.string(),
22415
- description: external_exports.string(),
22416
- assigneeId: external_exports.string(),
22417
- assigneeEmail: external_exports.string(),
22418
- dueDate: external_exports.string(),
22419
- status: CapaActionStatusSchema,
22420
- completedAt: external_exports.string().optional(),
22421
- notes: external_exports.string().optional()
22422
- });
22423
- var CapaResponseSchema = external_exports.object({
22424
- id: external_exports.string(),
22425
- qmsId: external_exports.string(),
22426
- organizationId: external_exports.string(),
22427
- capaNumber: external_exports.string(),
22428
- classification: CapaClassificationSchema,
22429
- priority: CapaPrioritySchema,
22430
- title: external_exports.string(),
22431
- description: external_exports.string(),
22432
- sourceType: CapaSourceTypeSchema,
22433
- sourceId: external_exports.string().optional(),
22434
- sourceDescription: external_exports.string(),
22435
- rootCauseDescription: external_exports.string().optional(),
22436
- verificationDescription: external_exports.string().optional(),
22437
- affectedDocumentIds: external_exports.array(external_exports.string()),
22438
- affectedDeviceIds: external_exports.array(external_exports.string()),
22439
- actions: external_exports.array(CapaActionResponseSchema),
22440
- status: CapaStatusSchema,
22441
- createdAt: external_exports.string(),
22442
- createdBy: external_exports.string(),
22443
- investigationStartedAt: external_exports.string().optional(),
22444
- implementationStartedAt: external_exports.string().optional(),
22445
- verificationStartedAt: external_exports.string().optional(),
22446
- closedAt: external_exports.string().optional(),
22447
- closedBy: external_exports.string().optional(),
22448
- cancelledAt: external_exports.string().optional(),
22449
- cancelledBy: external_exports.string().optional(),
22450
- dueDate: external_exports.string().optional()
22451
- });
22452
- var CapaListResponseSchema = external_exports.object({
22453
- items: external_exports.array(CapaResponseSchema),
22454
- total: external_exports.number(),
22455
- limit: external_exports.number(),
22456
- offset: external_exports.number()
22457
- });
22458
22470
  var RegulatoryFrameworkSchema = external_exports.enum([
22459
22471
  "ISO_13485",
22460
22472
  "IEC_62304",
@@ -22555,11 +22567,12 @@ var RiskDocumentStatusSchema = external_exports.enum([
22555
22567
  "archived",
22556
22568
  "example"
22557
22569
  ]);
22558
- var MitigationTargetSchema = external_exports.enum([
22559
- "sequence_probability",
22560
- "harm_probability",
22561
- "severity"
22570
+ var IsoCategorySchema = external_exports.enum([
22571
+ "safe_design",
22572
+ "protective_measure",
22573
+ "safety_information"
22562
22574
  ]);
22575
+ var ReducesTargetSchema = external_exports.enum(["p1_sequence", "p2_harm", "severity"]);
22563
22576
  var RiskGapCodeSchema = external_exports.enum([
22564
22577
  "hazard_no_situation",
22565
22578
  "situation_no_harm",
@@ -22577,13 +22590,19 @@ var RiskGapCodeSchema = external_exports.enum([
22577
22590
  "architecture_no_parent",
22578
22591
  "haz_missing_category",
22579
22592
  "haz_invalid_category",
22580
- "category_not_approved"
22593
+ "category_not_approved",
22594
+ "missing_iso_category",
22595
+ "missing_risk_acceptable",
22596
+ "unacceptable_no_benefit",
22597
+ "preliminary_not_analyzed",
22598
+ "missing_body_rationale",
22599
+ "orphaned_body_section"
22581
22600
  ]);
22582
22601
  var RiskGapSeveritySchema = external_exports.enum(["error", "warning"]);
22583
22602
  var MitigationSchema = external_exports.object({
22584
22603
  control: external_exports.string().min(1),
22585
- reduces: MitigationTargetSchema,
22586
- for_harm: external_exports.string().optional()
22604
+ iso_category: IsoCategorySchema,
22605
+ reduces: ReducesTargetSchema
22587
22606
  });
22588
22607
  var HarmAssessmentSchema = external_exports.object({
22589
22608
  harm: external_exports.string().min(1),
@@ -22591,48 +22610,80 @@ var HarmAssessmentSchema = external_exports.object({
22591
22610
  inherent_exploitability: external_exports.number().int().min(1).max(5).optional(),
22592
22611
  residual_probability: external_exports.number().int().min(1).max(5).optional(),
22593
22612
  residual_exploitability: external_exports.number().int().min(1).max(5).optional(),
22594
- residual_severity_override: external_exports.number().int().min(1).max(5).optional()
22613
+ harm_severity_override: external_exports.number().int().min(1).max(5).optional(),
22614
+ risk_acceptable: external_exports.boolean(),
22615
+ benefit_outweighs_risk: external_exports.boolean().optional()
22616
+ });
22617
+ var HazardousSituationAssessmentSchema = external_exports.object({
22618
+ hazardous_situation: external_exports.string().min(1),
22619
+ mitigations: external_exports.array(MitigationSchema).optional(),
22620
+ harms: external_exports.array(HarmAssessmentSchema).min(1)
22595
22621
  });
22596
22622
  var RiskEntryFrontmatterSchema = external_exports.object({
22597
22623
  type: external_exports.enum(["software_risk", "usability_risk", "security_risk"]),
22598
22624
  id: external_exports.string().min(1),
22599
22625
  title: external_exports.string().min(1),
22600
22626
  status: RiskDocumentStatusSchema,
22627
+ author: external_exports.string().min(1),
22628
+ reviewers: external_exports.array(external_exports.string()).optional(),
22629
+ approvers: external_exports.array(external_exports.string()).optional(),
22601
22630
  analyzes: external_exports.string().min(1),
22602
- hazardous_situation: external_exports.string().min(1),
22603
- harm_assessments: external_exports.array(HarmAssessmentSchema).min(1),
22604
22631
  mitigations: external_exports.array(MitigationSchema).optional(),
22632
+ hazardous_situation_assessments: external_exports.array(HazardousSituationAssessmentSchema).min(1),
22605
22633
  cvss_score: external_exports.number().min(0).max(10).optional(),
22606
22634
  cvss_vector: external_exports.string().regex(
22607
22635
  /^CVSS:3\.[01]\/AV:[NALP]\/AC:[LH]\/PR:[NLH]\/UI:[NR]\/S:[UC]\/C:[NLH]\/I:[NLH]\/A:[NLH]$/
22608
22636
  ).optional()
22609
22637
  }).refine(
22610
22638
  (data) => {
22639
+ const allHarms = data.hazardous_situation_assessments.flatMap((hsa) => hsa.harms);
22611
22640
  if (data.type === "security_risk") {
22612
- return data.harm_assessments.every((ha) => ha.inherent_exploitability != null);
22641
+ return allHarms.every((ha) => ha.inherent_exploitability != null);
22613
22642
  }
22614
- return data.harm_assessments.every((ha) => ha.inherent_probability != null);
22643
+ return allHarms.every((ha) => ha.inherent_probability != null);
22615
22644
  },
22616
22645
  {
22617
22646
  message: "Security risks must use inherent_exploitability; software/usability risks must use inherent_probability"
22618
22647
  }
22648
+ ).refine(
22649
+ (data) => {
22650
+ const allHarms = data.hazardous_situation_assessments.flatMap((hsa) => hsa.harms);
22651
+ return allHarms.every((ha) => ha.risk_acceptable || ha.benefit_outweighs_risk != null);
22652
+ },
22653
+ {
22654
+ message: "benefit_outweighs_risk required when risk_acceptable is false"
22655
+ }
22619
22656
  );
22620
- var HazardFrontmatterSchema = external_exports.object({
22621
- type: external_exports.enum(["haz_soe_software", "haz_soe_security"]),
22657
+ var HazardSoftwareFrontmatterSchema = external_exports.object({
22658
+ type: external_exports.literal("haz_soe_software"),
22622
22659
  id: external_exports.string().min(1),
22623
22660
  title: external_exports.string().min(1),
22624
22661
  status: RiskDocumentStatusSchema,
22662
+ author: external_exports.string().min(1),
22663
+ reviewers: external_exports.array(external_exports.string()).optional(),
22664
+ approvers: external_exports.array(external_exports.string()).optional(),
22665
+ preliminary: external_exports.boolean().default(false),
22666
+ leads_to: external_exports.array(external_exports.string()).optional(),
22667
+ hazard_category: external_exports.string().optional(),
22668
+ detection_score: external_exports.number().int().min(1).max(5).optional(),
22669
+ detection_method: external_exports.string().optional()
22670
+ });
22671
+ var HazardSecurityFrontmatterSchema = external_exports.object({
22672
+ type: external_exports.literal("haz_soe_security"),
22673
+ id: external_exports.string().min(1),
22674
+ title: external_exports.string().min(1),
22675
+ status: RiskDocumentStatusSchema,
22676
+ author: external_exports.string().min(1),
22677
+ reviewers: external_exports.array(external_exports.string()).optional(),
22678
+ approvers: external_exports.array(external_exports.string()).optional(),
22679
+ preliminary: external_exports.boolean().default(false),
22625
22680
  leads_to: external_exports.array(external_exports.string()).optional(),
22626
- // sFMEA fields
22627
- failure_mode: external_exports.string().optional(),
22628
- cause: external_exports.string().optional(),
22629
- detection_method: external_exports.string().optional(),
22630
- // STRIDE fields
22631
- threat_category: external_exports.string().optional(),
22632
- attack_vector: external_exports.string().optional(),
22633
- // Hazard category reference (HC-xxx)
22634
22681
  hazard_category: external_exports.string().optional()
22635
22682
  });
22683
+ var HazardFrontmatterSchema = external_exports.discriminatedUnion("type", [
22684
+ HazardSoftwareFrontmatterSchema,
22685
+ HazardSecurityFrontmatterSchema
22686
+ ]);
22636
22687
  var HazardCategoryFrontmatterSchema = external_exports.object({
22637
22688
  type: external_exports.literal("hazard_category"),
22638
22689
  id: external_exports.string().min(1),
@@ -22776,28 +22827,38 @@ var SegregationSchema = external_exports.object({
22776
22827
  var ArchitectureFrontmatterSchema = external_exports.object({
22777
22828
  id: external_exports.string().min(1),
22778
22829
  title: external_exports.string().min(1),
22830
+ /** Required — cannot be inferred from folder alone since architecture/ and design/ share parent */
22779
22831
  type: external_exports.literal("architecture"),
22780
22832
  status: RiskDocumentStatusSchema,
22781
- software_item_type: SoftwareItemTypeSchema.optional(),
22833
+ /** IEC 62304 §5.3 — C4/IEC mapping: system, subsystem, component, unit (required) */
22834
+ software_item_type: SoftwareItemTypeSchema,
22835
+ /** Parent HLD doc ID (optional for system-level, recommended for subsystem/component) */
22782
22836
  parent_item: external_exports.string().optional(),
22783
- safety_class: external_exports.enum(["A", "B", "C"]).optional(),
22837
+ safety_class: SafetyClassSchema.optional(),
22784
22838
  segregation: SegregationSchema.optional(),
22785
- author: external_exports.string().optional(),
22839
+ /** Document author — required for all regulated document types */
22840
+ author: external_exports.string().min(1),
22786
22841
  reviewers: external_exports.array(external_exports.string()).optional(),
22787
- approvers: external_exports.array(external_exports.string()).optional()
22842
+ /** Approver list — required for all regulated document types */
22843
+ approvers: external_exports.array(external_exports.string()).min(1)
22788
22844
  });
22789
22845
  var DetailedDesignFrontmatterSchema = external_exports.object({
22790
22846
  id: external_exports.string().min(1),
22791
22847
  title: external_exports.string().min(1),
22848
+ /** Required — cannot be inferred from folder alone since architecture/ and design/ share parent */
22792
22849
  type: external_exports.literal("detailed_design"),
22793
22850
  status: RiskDocumentStatusSchema,
22794
- software_item_type: SoftwareItemTypeSchema.optional(),
22795
- parent_item: external_exports.string().optional(),
22796
- safety_class: external_exports.enum(["A", "B", "C"]).optional(),
22851
+ /** IEC 62304 §5.4 — typically component or unit (required) */
22852
+ software_item_type: SoftwareItemTypeSchema,
22853
+ /** Parent HLD doc ID — required for SDD (must reference parent architecture) */
22854
+ parent_item: external_exports.string().min(1),
22855
+ safety_class: SafetyClassSchema.optional(),
22797
22856
  segregation: SegregationSchema.optional(),
22798
- author: external_exports.string().optional(),
22857
+ /** Document author — required for all regulated document types */
22858
+ author: external_exports.string().min(1),
22799
22859
  reviewers: external_exports.array(external_exports.string()).optional(),
22800
- approvers: external_exports.array(external_exports.string()).optional()
22860
+ /** Approver list — required for all regulated document types */
22861
+ approvers: external_exports.array(external_exports.string()).min(1)
22801
22862
  });
22802
22863
  var AnomalyCategorySchema = external_exports.enum([
22803
22864
  "bug",
@@ -22926,17 +22987,21 @@ var UserNeedFrontmatterSchema = external_exports.object({
22926
22987
  status: RiskDocumentStatusSchema,
22927
22988
  /** Validated if present — ensures frontmatter doesn't misidentify the document type */
22928
22989
  type: external_exports.literal("user_need").optional(),
22929
- /** The user role or stakeholder (e.g., "Quality Manager", "Developer") */
22930
- stakeholder: external_exports.string().optional(),
22990
+ /** The user role or stakeholder (e.g., "Quality Manager", "Developer") — required per ISO 13485 §7.3.2 */
22991
+ stakeholder: external_exports.string().min(1),
22931
22992
  /** MoSCoW priority classification */
22932
22993
  priority: UserNeedPrioritySchema.optional(),
22933
22994
  /** Where this need originated (e.g., "ISO 13485 §7.3", "user interview") */
22934
22995
  source: external_exports.string().optional(),
22935
22996
  /** IDs of product requirements derived from this need */
22936
22997
  derives: external_exports.array(external_exports.string()).optional(),
22937
- author: external_exports.string().optional(),
22998
+ /** Document author — required for all regulated document types */
22999
+ author: external_exports.string().min(1),
22938
23000
  reviewers: external_exports.array(external_exports.string()).optional(),
22939
- approvers: external_exports.array(external_exports.string()).optional()
23001
+ /** Approver list — required for all regulated document types */
23002
+ approvers: external_exports.array(external_exports.string()).min(1),
23003
+ /** Optional reference to a Use Specification persona (US-xxx) per IEC 62366 */
23004
+ use_specification: external_exports.string().optional()
22940
23005
  });
22941
23006
  var RequirementTypeSchema = external_exports.enum([
22942
23007
  "functional",
@@ -22974,6 +23039,46 @@ var RequirementFrontmatterSchema = external_exports.object({
22974
23039
  /** Downstream traceability — IDs of documents this requirement traces to (e.g., SRS for PRS) */
22975
23040
  traces_to: external_exports.array(external_exports.string()).optional()
22976
23041
  });
23042
+ var ProductRequirementFrontmatterSchema = external_exports.object({
23043
+ id: external_exports.string().min(1),
23044
+ title: external_exports.string().min(1),
23045
+ status: RiskDocumentStatusSchema,
23046
+ /** IEC 62304 §5.2.2 — requirement classification (optional for PRS) */
23047
+ req_type: RequirementTypeSchema.optional(),
23048
+ /** Authoring convention — controls which required sections are checked */
23049
+ format: RequirementFormatSchema.optional(),
23050
+ /** ISO 13485 §7.3.3 — how this PRS design input is fulfilled (defaults to 'software') */
23051
+ fulfillment_type: RequirementFulfillmentTypeSchema.optional(),
23052
+ /** Document author — required for all regulated document types */
23053
+ author: external_exports.string().min(1),
23054
+ reviewers: external_exports.array(external_exports.string()).optional(),
23055
+ /** Approver list — required for all regulated document types */
23056
+ approvers: external_exports.array(external_exports.string()).min(1),
23057
+ /** Upstream traceability — IDs of User Need documents this PRS traces from (required) */
23058
+ traces_from: external_exports.array(external_exports.string()).min(1),
23059
+ /** Downstream traceability — IDs of SRS documents this PRS traces to */
23060
+ traces_to: external_exports.array(external_exports.string()).optional()
23061
+ });
23062
+ var SoftwareRequirementFrontmatterSchema = external_exports.object({
23063
+ id: external_exports.string().min(1),
23064
+ title: external_exports.string().min(1),
23065
+ status: RiskDocumentStatusSchema,
23066
+ /** IEC 62304 §5.2.2 — requirement classification (recommended for SRS) */
23067
+ req_type: RequirementTypeSchema.optional(),
23068
+ /** Authoring convention — controls which required sections are checked */
23069
+ format: RequirementFormatSchema.optional(),
23070
+ /** Document author — required for all regulated document types */
23071
+ author: external_exports.string().min(1),
23072
+ reviewers: external_exports.array(external_exports.string()).optional(),
23073
+ /** Approver list — required for all regulated document types */
23074
+ approvers: external_exports.array(external_exports.string()).min(1),
23075
+ /** Upstream traceability — IDs of PRS documents this SRS traces from (required) */
23076
+ traces_from: external_exports.array(external_exports.string()).min(1),
23077
+ /** Downstream traceability — IDs of documents this SRS traces to */
23078
+ traces_to: external_exports.array(external_exports.string()).optional(),
23079
+ /** HLD/SDD document ID that implements this requirement */
23080
+ implemented_in: external_exports.string().optional()
23081
+ });
22977
23082
  var TestProtocolFrontmatterSchema = external_exports.object({
22978
23083
  type: external_exports.literal("test_protocol"),
22979
23084
  id: external_exports.string().min(1),
@@ -23244,7 +23349,8 @@ var EvidenceRuleConditionsSeedSchema = external_exports.object({
23244
23349
  documentType: DocumentTypeSchema.optional(),
23245
23350
  linkType: LinkTypeSchema.optional(),
23246
23351
  status: external_exports.string().optional(),
23247
- minCount: external_exports.number().int().positive().optional()
23352
+ minCount: external_exports.number().int().positive().optional(),
23353
+ safetyClass: SafetyClassSchema.optional()
23248
23354
  });
23249
23355
  var EvidenceRuleSeedSchema = external_exports.object({
23250
23356
  clauseId: external_exports.string().min(1),
@@ -24080,10 +24186,13 @@ var HarmAssessmentEntrySchema = external_exports.object({
24080
24186
  harmSeverity: RiskValueSchema,
24081
24187
  inherentProbability: RiskValueSchema,
24082
24188
  residualProbability: RiskValueSchema,
24083
- residualSeverityOverride: RiskValueSchema.optional(),
24189
+ harmSeverityOverride: RiskValueSchema.optional(),
24084
24190
  residualSeverity: RiskValueSchema,
24085
24191
  inherentAcceptability: AcceptabilityStatusSchema,
24086
- residualAcceptability: AcceptabilityStatusSchema
24192
+ residualAcceptability: AcceptabilityStatusSchema,
24193
+ riskAcceptable: external_exports.boolean(),
24194
+ benefitOutweighsRisk: external_exports.boolean().optional(),
24195
+ hazardousSituation: external_exports.string().optional()
24087
24196
  });
24088
24197
  var RiskEntrySchema = external_exports.object({
24089
24198
  id: external_exports.string(),
@@ -24137,6 +24246,8 @@ var RiskListItemSchema = external_exports.object({
24137
24246
  worstResidualProbability: RiskValueSchema.optional(),
24138
24247
  worstAcceptability: AcceptabilityStatusSchema.optional(),
24139
24248
  mitigationsCount: external_exports.number().int().min(0),
24249
+ topLevelMitigationsCount: external_exports.number().int().min(0),
24250
+ perHsMitigationsCount: external_exports.number().int().min(0),
24140
24251
  hasRiskBenefit: external_exports.boolean(),
24141
24252
  cvssScore: external_exports.number().min(0).max(10).optional(),
24142
24253
  cvssVector: external_exports.string().optional()
@@ -25517,6 +25628,9 @@ var SCHEMA_MAP = {
25517
25628
  // Product (ISO 13485 §7.3)
25518
25629
  product_development_plan: ProductDevelopmentPlanFrontmatterSchema,
25519
25630
  intended_use: IntendedUseFrontmatterSchema,
25631
+ // Architecture (IEC 62304 §5.3)
25632
+ architecture: ArchitectureFrontmatterSchema,
25633
+ detailed_design: DetailedDesignFrontmatterSchema,
25520
25634
  // User needs (ISO 13485 §7.3.2)
25521
25635
  user_need: UserNeedFrontmatterSchema,
25522
25636
  // Requirements (IEC 62304 §5.2.2, ISO 13485 §7.3.3)
@@ -25781,7 +25895,7 @@ var client = new PactoSignaApiClient({
25781
25895
  apiKey: PACTOSIGNA_API_KEY
25782
25896
  });
25783
25897
  var server = new Server(
25784
- { name: "pactosigna", version: "0.1.10" },
25898
+ { name: "pactosigna", version: "0.1.12" },
25785
25899
  { capabilities: { tools: {} } }
25786
25900
  );
25787
25901
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pactosigna/mcp-server",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "type": "module",
5
5
  "description": "MCP server for PactoSigna QMS — connects Claude Desktop, Cursor, and other AI tools to your quality management system",
6
6
  "bin": {