@pactosigna/mcp-server 0.1.9 → 0.1.11

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 +86 -27
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21848,7 +21848,18 @@ var REQUIRED_SECTIONS = {
21848
21848
  audit_schedule: ["Scope", "Audit Criteria"],
21849
21849
  audit_report: ["Scope", "Methodology", "Findings", "Conclusion"],
21850
21850
  management_review: ["Review Inputs", "Review Outputs", "Action Items", "Decisions"],
21851
- hazard_category: ["Description", "Examples", "Applicable Standards"]
21851
+ hazard_category: ["Description", "Examples", "Applicable Standards"],
21852
+ software_risk: ["Harm Assessment"],
21853
+ security_risk: ["Harm Assessment"],
21854
+ usability_risk: ["Harm Assessment"],
21855
+ haz_soe_software: ["Intended Function", "Failure Cause", "Failure Mode", "Failure Effect"],
21856
+ haz_soe_security: [
21857
+ "STRIDE Category & Threat",
21858
+ "Asset",
21859
+ "Vulnerability",
21860
+ "Actor & Attack Vector",
21861
+ "Adverse Impact"
21862
+ ]
21852
21863
  };
21853
21864
  var MemberPermissionsSchema = external_exports.object({
21854
21865
  canSign: external_exports.boolean(),
@@ -22409,6 +22420,7 @@ var DCOSigningObligationSchema = external_exports.object({
22409
22420
  department: external_exports.string(),
22410
22421
  status: external_exports.enum(["pending", "fulfilled"]),
22411
22422
  meaning: external_exports.string().optional(),
22423
+ documentIds: external_exports.array(external_exports.string()).default([]),
22412
22424
  fulfilledBySignatureId: external_exports.string().optional(),
22413
22425
  fulfilledAt: external_exports.string().optional()
22414
22426
  });
@@ -22554,11 +22566,12 @@ var RiskDocumentStatusSchema = external_exports.enum([
22554
22566
  "archived",
22555
22567
  "example"
22556
22568
  ]);
22557
- var MitigationTargetSchema = external_exports.enum([
22558
- "sequence_probability",
22559
- "harm_probability",
22560
- "severity"
22569
+ var IsoCategorySchema = external_exports.enum([
22570
+ "safe_design",
22571
+ "protective_measure",
22572
+ "safety_information"
22561
22573
  ]);
22574
+ var ReducesTargetSchema = external_exports.enum(["p1_sequence", "p2_harm", "severity"]);
22562
22575
  var RiskGapCodeSchema = external_exports.enum([
22563
22576
  "hazard_no_situation",
22564
22577
  "situation_no_harm",
@@ -22576,13 +22589,19 @@ var RiskGapCodeSchema = external_exports.enum([
22576
22589
  "architecture_no_parent",
22577
22590
  "haz_missing_category",
22578
22591
  "haz_invalid_category",
22579
- "category_not_approved"
22592
+ "category_not_approved",
22593
+ "missing_iso_category",
22594
+ "missing_risk_acceptable",
22595
+ "unacceptable_no_benefit",
22596
+ "preliminary_not_analyzed",
22597
+ "missing_body_rationale",
22598
+ "orphaned_body_section"
22580
22599
  ]);
22581
22600
  var RiskGapSeveritySchema = external_exports.enum(["error", "warning"]);
22582
22601
  var MitigationSchema = external_exports.object({
22583
22602
  control: external_exports.string().min(1),
22584
- reduces: MitigationTargetSchema,
22585
- for_harm: external_exports.string().optional()
22603
+ iso_category: IsoCategorySchema,
22604
+ reduces: ReducesTargetSchema
22586
22605
  });
22587
22606
  var HarmAssessmentSchema = external_exports.object({
22588
22607
  harm: external_exports.string().min(1),
@@ -22590,48 +22609,80 @@ var HarmAssessmentSchema = external_exports.object({
22590
22609
  inherent_exploitability: external_exports.number().int().min(1).max(5).optional(),
22591
22610
  residual_probability: external_exports.number().int().min(1).max(5).optional(),
22592
22611
  residual_exploitability: external_exports.number().int().min(1).max(5).optional(),
22593
- residual_severity_override: external_exports.number().int().min(1).max(5).optional()
22612
+ harm_severity_override: external_exports.number().int().min(1).max(5).optional(),
22613
+ risk_acceptable: external_exports.boolean(),
22614
+ benefit_outweighs_risk: external_exports.boolean().optional()
22615
+ });
22616
+ var HazardousSituationAssessmentSchema = external_exports.object({
22617
+ hazardous_situation: external_exports.string().min(1),
22618
+ mitigations: external_exports.array(MitigationSchema).optional(),
22619
+ harms: external_exports.array(HarmAssessmentSchema).min(1)
22594
22620
  });
22595
22621
  var RiskEntryFrontmatterSchema = external_exports.object({
22596
22622
  type: external_exports.enum(["software_risk", "usability_risk", "security_risk"]),
22597
22623
  id: external_exports.string().min(1),
22598
22624
  title: external_exports.string().min(1),
22599
22625
  status: RiskDocumentStatusSchema,
22626
+ author: external_exports.string().min(1),
22627
+ reviewers: external_exports.array(external_exports.string()).optional(),
22628
+ approvers: external_exports.array(external_exports.string()).optional(),
22600
22629
  analyzes: external_exports.string().min(1),
22601
- hazardous_situation: external_exports.string().min(1),
22602
- harm_assessments: external_exports.array(HarmAssessmentSchema).min(1),
22603
22630
  mitigations: external_exports.array(MitigationSchema).optional(),
22631
+ hazardous_situation_assessments: external_exports.array(HazardousSituationAssessmentSchema).min(1),
22604
22632
  cvss_score: external_exports.number().min(0).max(10).optional(),
22605
22633
  cvss_vector: external_exports.string().regex(
22606
22634
  /^CVSS:3\.[01]\/AV:[NALP]\/AC:[LH]\/PR:[NLH]\/UI:[NR]\/S:[UC]\/C:[NLH]\/I:[NLH]\/A:[NLH]$/
22607
22635
  ).optional()
22608
22636
  }).refine(
22609
22637
  (data) => {
22638
+ const allHarms = data.hazardous_situation_assessments.flatMap((hsa) => hsa.harms);
22610
22639
  if (data.type === "security_risk") {
22611
- return data.harm_assessments.every((ha) => ha.inherent_exploitability != null);
22640
+ return allHarms.every((ha) => ha.inherent_exploitability != null);
22612
22641
  }
22613
- return data.harm_assessments.every((ha) => ha.inherent_probability != null);
22642
+ return allHarms.every((ha) => ha.inherent_probability != null);
22614
22643
  },
22615
22644
  {
22616
22645
  message: "Security risks must use inherent_exploitability; software/usability risks must use inherent_probability"
22617
22646
  }
22647
+ ).refine(
22648
+ (data) => {
22649
+ const allHarms = data.hazardous_situation_assessments.flatMap((hsa) => hsa.harms);
22650
+ return allHarms.every((ha) => ha.risk_acceptable || ha.benefit_outweighs_risk != null);
22651
+ },
22652
+ {
22653
+ message: "benefit_outweighs_risk required when risk_acceptable is false"
22654
+ }
22618
22655
  );
22619
- var HazardFrontmatterSchema = external_exports.object({
22620
- type: external_exports.enum(["haz_soe_software", "haz_soe_security"]),
22656
+ var HazardSoftwareFrontmatterSchema = external_exports.object({
22657
+ type: external_exports.literal("haz_soe_software"),
22621
22658
  id: external_exports.string().min(1),
22622
22659
  title: external_exports.string().min(1),
22623
22660
  status: RiskDocumentStatusSchema,
22661
+ author: external_exports.string().min(1),
22662
+ reviewers: external_exports.array(external_exports.string()).optional(),
22663
+ approvers: external_exports.array(external_exports.string()).optional(),
22664
+ preliminary: external_exports.boolean().default(false),
22665
+ leads_to: external_exports.array(external_exports.string()).optional(),
22666
+ hazard_category: external_exports.string().optional(),
22667
+ detection_score: external_exports.number().int().min(1).max(5).optional(),
22668
+ detection_method: external_exports.string().optional()
22669
+ });
22670
+ var HazardSecurityFrontmatterSchema = external_exports.object({
22671
+ type: external_exports.literal("haz_soe_security"),
22672
+ id: external_exports.string().min(1),
22673
+ title: external_exports.string().min(1),
22674
+ status: RiskDocumentStatusSchema,
22675
+ author: external_exports.string().min(1),
22676
+ reviewers: external_exports.array(external_exports.string()).optional(),
22677
+ approvers: external_exports.array(external_exports.string()).optional(),
22678
+ preliminary: external_exports.boolean().default(false),
22624
22679
  leads_to: external_exports.array(external_exports.string()).optional(),
22625
- // sFMEA fields
22626
- failure_mode: external_exports.string().optional(),
22627
- cause: external_exports.string().optional(),
22628
- detection_method: external_exports.string().optional(),
22629
- // STRIDE fields
22630
- threat_category: external_exports.string().optional(),
22631
- attack_vector: external_exports.string().optional(),
22632
- // Hazard category reference (HC-xxx)
22633
22680
  hazard_category: external_exports.string().optional()
22634
22681
  });
22682
+ var HazardFrontmatterSchema = external_exports.discriminatedUnion("type", [
22683
+ HazardSoftwareFrontmatterSchema,
22684
+ HazardSecurityFrontmatterSchema
22685
+ ]);
22635
22686
  var HazardCategoryFrontmatterSchema = external_exports.object({
22636
22687
  type: external_exports.literal("hazard_category"),
22637
22688
  id: external_exports.string().min(1),
@@ -24079,10 +24130,13 @@ var HarmAssessmentEntrySchema = external_exports.object({
24079
24130
  harmSeverity: RiskValueSchema,
24080
24131
  inherentProbability: RiskValueSchema,
24081
24132
  residualProbability: RiskValueSchema,
24082
- residualSeverityOverride: RiskValueSchema.optional(),
24133
+ harmSeverityOverride: RiskValueSchema.optional(),
24083
24134
  residualSeverity: RiskValueSchema,
24084
24135
  inherentAcceptability: AcceptabilityStatusSchema,
24085
- residualAcceptability: AcceptabilityStatusSchema
24136
+ residualAcceptability: AcceptabilityStatusSchema,
24137
+ riskAcceptable: external_exports.boolean(),
24138
+ benefitOutweighsRisk: external_exports.boolean().optional(),
24139
+ hazardousSituation: external_exports.string().optional()
24086
24140
  });
24087
24141
  var RiskEntrySchema = external_exports.object({
24088
24142
  id: external_exports.string(),
@@ -24136,6 +24190,8 @@ var RiskListItemSchema = external_exports.object({
24136
24190
  worstResidualProbability: RiskValueSchema.optional(),
24137
24191
  worstAcceptability: AcceptabilityStatusSchema.optional(),
24138
24192
  mitigationsCount: external_exports.number().int().min(0),
24193
+ topLevelMitigationsCount: external_exports.number().int().min(0),
24194
+ perHsMitigationsCount: external_exports.number().int().min(0),
24139
24195
  hasRiskBenefit: external_exports.boolean(),
24140
24196
  cvssScore: external_exports.number().min(0).max(10).optional(),
24141
24197
  cvssVector: external_exports.string().optional()
@@ -25380,6 +25436,7 @@ var ClauseNodeSchema = external_exports.lazy(
25380
25436
  parentClauseId: external_exports.string().nullable(),
25381
25437
  depth: external_exports.number().int().nonnegative(),
25382
25438
  sortOrder: external_exports.number().int().nonnegative(),
25439
+ scope: FrameworkScopeSchema,
25383
25440
  children: external_exports.array(ClauseNodeSchema)
25384
25441
  })
25385
25442
  );
@@ -25439,7 +25496,9 @@ var ClauseComplianceSchema = external_exports.object({
25439
25496
  covered: external_exports.boolean(),
25440
25497
  /** Compliance score 0..1 based on weighted evidence rules */
25441
25498
  score: external_exports.number().min(0).max(1),
25442
- evidence: external_exports.array(EvidenceItemSchema)
25499
+ evidence: external_exports.array(EvidenceItemSchema),
25500
+ /** Effective scope for this clause. UI uses this to grey out irrelevant clauses. */
25501
+ scope: FrameworkScopeSchema
25443
25502
  });
25444
25503
  var FrameworkComplianceResponseSchema = external_exports.object({
25445
25504
  frameworkId: RegulatoryFrameworkSchema,
@@ -25777,7 +25836,7 @@ var client = new PactoSignaApiClient({
25777
25836
  apiKey: PACTOSIGNA_API_KEY
25778
25837
  });
25779
25838
  var server = new Server(
25780
- { name: "pactosigna", version: "0.1.9" },
25839
+ { name: "pactosigna", version: "0.1.11" },
25781
25840
  { capabilities: { tools: {} } }
25782
25841
  );
25783
25842
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pactosigna/mcp-server",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
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": {