@systemores/systemores-plugin 1.1.3 → 1.2.0

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.
@@ -6,13 +6,13 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official Systemores AI Agent Psychometrics, Inline Circuit-Breaker, and MCP 2026 Security Governance plugin catalog.",
9
- "version": "1.1.3"
9
+ "version": "1.2.0"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "systemores",
14
14
  "description": "Catch tool privilege escalation, sycophancy, and multi-turn persona drift before production. Combines free static MCP 2026 schema & delegation graph audits with <250ms Systemores System One inline circuit breaking, 21-dimension psychometric stress tests, and EU AI Act / NIST / SOC 2 compliance dossiers.",
15
- "version": "1.1.3",
15
+ "version": "1.2.0",
16
16
  "author": {
17
17
  "name": "Systemores LLC",
18
18
  "url": "https://audit.systemores.com"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "systemores",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
4
  "description": "Audit AI agents, system prompts, and MCP tools across the Systemores 21-dimension & IPIP-NEO-120 psychometric framework, with sub-300ms inline circuit breaking and EU AI Act / NIST / SOC 2 compliance dossiers.",
5
5
  "author": {
6
6
  "name": "Systemores",
package/PRIVACY.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Privacy Policy — Systemores AI Agent & MCP Security Auditor
2
2
 
3
- **Effective Date:** October 30, 2026
4
- **Publisher:** Systemores LLC (`https://systemores.com` / `https://audit.systemores.com`)
3
+ **Effective Date:** November 14, 2026
4
+ **Publisher:** Systemores LLC, a Texas limited liability company (`https://systemores.com` / `https://audit.systemores.com`)
5
5
  **Canonical Privacy Policy URL:** https://audit.systemores.com/privacy
6
6
 
7
7
  ## 1. Overview & Data Minimization
@@ -16,12 +16,13 @@ Systemores LLC ("Systemores", "we", "our") provides the **Systemores AI Agent &
16
16
 
17
17
  ### Free Community Tier (Static & Structural Tools)
18
18
  - Tools: `systemores_audit_tool_integrity`, `systemores_audit_agent_graph`, `systemores_measure_drag`
19
- - Payloads (`toolDefinitionsJson`, `graphTopologyJson`, latency integers) are evaluated deterministically and discarded immediately upon returning the JSON response.
19
+ - Payloads (`toolDefinitionsJson`, `graphTopologyJson`, latency integers) are validated locally on stdio and evaluated deterministically over TLS with zero third-party LLM calls, zero API key required, and immediate in-memory discard.
20
20
  - Client IP addresses are processed solely for sliding-window burst rate limiting.
21
21
 
22
22
  ### Pro & Team Cloud Tiers (Psychometric, Live Circuit-Breaker & Compliance Tools)
23
23
  - Tools: `systemores_stress_test_agent`, `systemores_evaluate_drift`, `systemores_assess_bias`, `systemores_tool_integrity`, `systemores_generate_cohort`, `systemores_inject_environment_fault`, `systemores_analyze_trace_telemetry`, `systemores_export_dossier`, `systemores_audit_turn_live`
24
- - **Authentication & Licensing Metadata:** We store a SHA-256 digest of your API key, subscription tier (`pro`, `team`, `enterprise`), billing status via Stripe, aggregate monthly call counts, and a rolling 24-hour set of distinct client IPs to enforce seat licensing.
24
+ - **Authentication & Licensing Metadata:** We store a SHA-256 digest of your API key, subscription tier (`pro`, `team`, `enterprise`), billing status via Stripe, aggregate monthly call counts, Trial Token TTL/quotas, and a rolling 24-hour set of distinct client IPs to enforce seat licensing.
25
+ - **Zero-Retention Compliance Certificate Metadata (`/verify/dos-...`):** Solely when a Team subscriber explicitly invokes `systemores_export_dossier`, Systemores stores sanitized certificate metadata (`dossierId`, sanitized `companyName`, `auditSessionId`, `frameworksEvaluated`, numeric `frameworkScores`, `overallScore`, `certificationStatus`, optional `locale`, `engineVersion`, `timestamp`, `sha256IntegrityHash`, and HMAC signature) in Upstash Redis for a 365-day TTL. Transient evidence inputs passed for dynamic scoring (`systemPrompt`, `toolDefinitionsJson`, `graphTopologyJson`, `otelTraceJson`, `liveAuditMetricsJson`), user messages, and agent outputs are evaluated strictly in memory and **never** persisted in dossier records.
25
26
 
26
27
  ## 3. Third-Party Subprocessors
27
28
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Stop shipping unverified prompts and over-privileged MCP tools. Audit schemas, delegation graphs, 21-dimension behavioral stability, and `<250ms` inline circuit breakers directly inside your IDE.**
4
4
 
5
- [![Version](https://img.shields.io/badge/version-1.1.3-0ea5e9.svg)](https://audit.systemores.com)
5
+ [![Version](https://img.shields.io/badge/version-1.2.0-0ea5e9.svg)](https://audit.systemores.com)
6
6
  [![npm](https://img.shields.io/npm/v/@systemores/systemores-plugin?color=cb3837&label=npm)](https://www.npmjs.com/package/@systemores/systemores-plugin)
7
7
  [![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.bobcar0%2Fsystemores--plugin-0ea5e9)](https://registry.modelcontextprotocol.io)
8
8
  [![MCP 2026](https://img.shields.io/badge/MCP-2026%20Streamable%20HTTP-10b981.svg)](https://audit.systemores.com/api/mcp)
@@ -24,10 +24,10 @@
24
24
 
25
25
  | Audit Vector | Tool Used | Result / Metric | Status |
26
26
  | :--- | :--- | :--- | :---: |
27
- | **MCP 2026 Tool Schema Integrity** | `systemores_audit_tool_integrity` (`strictMode: true`) | **100 / 100** (11/11 tools, 0 annotation or injection flags) | 🟢 `PASS` |
27
+ | **MCP 2026 Tool Schema Integrity** | `systemores_audit_tool_integrity` (`strictMode: true`) | **100 / 100** (12/12 tools, 0 annotation or injection flags) | 🟢 `PASS` |
28
28
  | **Multi-Agent Graph Topology** | `systemores_audit_agent_graph` | **0 Cycles / 0 Privilege Escalations** (6 nodes, 5 edges) | 🟢 `PASSED` |
29
- | **System One Adversarial Refusal** | `systemores_audit_turn_live` (`systemores-s1-1.13.0`) | **98.4 / 100 Health Index** (`1.99/2.0` compliance, `4.0%` sycophancy, `135ms`) | 🟢 `DISPATCH` |
30
- | **System One Sycophancy Trap** | `systemores_audit_turn_live` (`systemores-s1-1.13.0`) | **Blocked Fake 100/100 Coercion** (`98%` sycophancy detected in `129ms`) | 🛡️ `INTERCEPT` |
29
+ | **System One Adversarial Refusal** | `systemores_audit_turn_live` (`systemores-s1-inline`) | **98.4 / 100 Health Index** (`1.99/2.0` compliance, `4.0%` sycophancy, `135ms`) | 🟢 `DISPATCH` |
30
+ | **System One Sycophancy Trap** | `systemores_audit_turn_live` (`systemores-s1-inline`) | **Blocked Fake 100/100 Coercion** (`98%` sycophancy detected in `129ms`) | 🛡️ `INTERCEPT` |
31
31
  | **20- & 50-Turn Behavioral Drift** | `systemores_evaluate_drift` (`turns: 20 & 50`, `temp: 0.7`) | **0.050 Drift Index / 5° Deviation Angle** (`ISFJ-A` / `98%` Conscientiousness) | 🟢 `CONTROLLED` |
32
32
  | **High-Press Needs-Press Stability** | `systemores_stress_test_agent` (`pressIntensity: high`) | **1.00 Behavioral Integrity** (`0.934` PSI, `93` Compliance, `6` Confrontation) | 🟢 `PASSED` |
33
33
  | **4-Domain Algorithmic Bias Audit** | `systemores_assess_bias` (`eeoc`, `ecoa`, `housing`, `coppa`) | **0 Non-Compliance Flags** across all 4 statutory domains (`LOW` risk) | 🟢 `PASSED` |
@@ -47,9 +47,19 @@
47
47
  | **Gemini CLI Manifest** | `gemini-extension.json` | Cross-platform manifest for Gemini CLI extension installation. |
48
48
  | **Cloud MCP Config** | `mcp_config.json` | Connects to `https://audit.systemores.com/api/mcp` via stateless Streamable HTTP. |
49
49
  | **Specialist Subagent** | `agents/systemores-auditor.md` | Autonomous behavioral & security auditor powered by the 21-dimension & IPIP-NEO-120 framework. |
50
- | **Audit Workflow Skill** | `skills/systemores-audit/SKILL.md` | On-demand procedural runbook for 11 MCP tools, scorecards, and compliance certification. |
50
+ | **Audit Workflow Skill** | `skills/systemores-audit/SKILL.md` | On-demand procedural runbook for 12 MCP tools, scorecards, and compliance certification. |
51
51
  | **Governance Rules** | `rules/AGENTS.md` | Enforces MCP 2026 `annotations` (`readOnlyHint`, `destructiveHint`) and anti-sycophancy guardrails. |
52
52
 
53
+ *✨ Tip: Look for the M8ven Verified badge & live MCP Registry listing across OpenAPI, Smithery & Antigravity.*
54
+
55
+ ---
56
+
57
+ ## 🌍 Multilingual Auditing & Dynamic Zero-Retention Dossiers (`v1.2.0`)
58
+
59
+ - **7-Locale Prompt & Schema Auditing (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh` + BCP-47 tags like `pt-BR`, `zh-CN`):** Prompt stress testing, CJK-weighted MCP tool description scoring (`systemores_audit_tool_integrity`), cross-cultural Needs-Press calibration, and the 5th bias framework **`eu_ai_act`** (`EU 2024/1689`) evaluate native non-English agents directly.
60
+ - **Localized Cohorts & Verification Cards:** Pass `locale` to `systemores_generate_cohort` and `systemores_export_dossier`, and preview any certificate card in 7 languages via `/verify/dos-...?lang=de` (`ja`, `es`, `fr`, `pt`, `zh`) with invariant SHA-256 integrity hashes.
61
+ - **Dynamic Evidence-Driven Dossier Scoring:** Pass optional transient `systemPrompt`, `role`, `toolDefinitionsJson`, `graphTopologyJson`, `otelTraceJson`, and/or `liveAuditMetricsJson` to `systemores_export_dossier` to compute differentiated per-framework scores (`CERTIFIED`, `CONDITIONAL_APPROVAL`, `NON_COMPLIANT`) strictly in memory (`zeroRetentionVerified: true`).
62
+
53
63
  ---
54
64
 
55
65
  ## 🚀 Quick Install
@@ -94,9 +104,10 @@ The Systemores Cloud MCP Server (`https://audit.systemores.com/api/mcp`) provide
94
104
  | `systemores_measure_drag` *(Cognitive Drag & Token Velocity Math)* | ✅ Unlimited* | ✅ | ✅ |
95
105
  | `systemores_audit_turn_live` *(Systemores System One <250ms Inline Circuit Breaker)* | 🔒 Pro / Trial Key | ✅ Live System One Engine | ✅ Priority Burst SLA |
96
106
  | `systemores_stress_test_agent` *(21-Dimension Murray Needs-Press + Big Five/MBTI/DISC)* | 🔒 Pro / Trial Key | ✅ Live 21-Trait Engine | ✅ Unredacted Raw Vectors |
107
+ | `systemores_tool_integrity` *(Action Boundary & Privilege Escalation Audit)* | 🔒 Pro / Trial Key | ✅ Live Compliance Score | ✅ Full Risk Breakdown |
97
108
  | `systemores_evaluate_drift` *(Multi-Turn Persona Erosion & Entropy Curve)* | 🔒 Pro / Trial Key | ✅ Up to 100 Turns | ✅ Up to 100 Turns |
98
- | `systemores_assess_bias` *(EEOC, ECOA, Fair Housing & COPPA Bias Audit)* | 🔒 Pro / Trial Key | ✅ All 4 Domains | ✅ All 4 Domains |
99
- | `systemores_generate_cohort` *(30-Facet IPIP-NEO-120 Synthetic Adversarial Cohorts)* | 🔒 Pro / Trial Key | ✅ Up to 50 Personas | ✅ Custom Domain Cohorts |
109
+ | `systemores_assess_bias` *(EEOC, ECOA, Fair Housing, COPPA & EU AI Act Bias Audit)* | 🔒 Pro / Trial Key | ✅ All 5 Domains | ✅ All 5 Domains |
110
+ | `systemores_generate_cohort` *(30-Facet IPIP-NEO-120 Synthetic Adversarial Cohorts)* | 🔒 Pro / Trial Key | ✅ Up to 100 Personas | ✅ Custom Domain Cohorts |
100
111
  | `systemores_inject_environment_fault` *(Chaos Engineering Fault Generator)* | 🔒 Pro / Trial Key | ✅ All Fault Profiles | ✅ All Fault Profiles |
101
112
  | `systemores_analyze_trace_telemetry` *(OpenTelemetry Span & Cost Burn Trap Audit)* | 🔒 Pro / Team Key | ✅ W3C Trace Context | ✅ Full OTel Ingestion |
102
113
  | `systemores_export_dossier` *(EU AI Act, NIST AI RMF 1.0 & SOC 2 Certification Dossier)* | 🔒 Team Key | 🔒 Team Key | ✅ Audit-Ready Dossier Suite |
@@ -105,7 +116,7 @@ The Systemores Cloud MCP Server (`https://audit.systemores.com/api/mcp`) provide
105
116
 
106
117
  ---
107
118
 
108
- ## 🔓 Unlock All 11 Auditors in 30 Seconds (Trial & Pro Keys)
119
+ ## 🔓 Unlock All 12 Auditors in 30 Seconds (Trial & Pro Keys)
109
120
 
110
121
  1. **Claim a key in one click:** Subscribe for an instant Pro/Team API key (`sys_pro_...`) or request a 7-day Trial Token at **[audit.systemores.com/pricing](https://audit.systemores.com/pricing)**.
111
122
  2. **Add your key to `mcp_config.json`:**
@@ -53,8 +53,8 @@ Always execute audits starting with zero-friction structural checks before invok
53
53
 
54
54
  ### Phase 1: Instant Structural & Topology Audit (Free Community Tier)
55
55
  1. **MCP Tool Schema & Annotation Audit (`systemores_audit_tool_integrity`)**:
56
- - Inspect the workspace's MCP tool definitions (`tools.ts`, `mcp_config.json`, or tool schemas).
57
- - Run `systemores_audit_tool_integrity` with `strictMode: true` to flag injection vectors, privilege overreach, missing `integer` vs. `number` constraints, and deceptive MCP 2026 `annotations` (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`).
56
+ - Inspect the workspace's MCP tool definitions (`tools.ts`, `mcp_config.json`, or tool schemas), including multilingual & CJK tool descriptions (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh`).
57
+ - Run `systemores_audit_tool_integrity` with `strictMode: true` to flag multilingual injection vectors, privilege overreach, missing `integer` vs. `number` constraints, and deceptive MCP 2026 `annotations` (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`), using CJK-weighted semantic description checks.
58
58
  2. **Multi-Agent Graph Topology Audit (`systemores_audit_agent_graph`)**:
59
59
  - Verify delegation graphs for cyclic deadlocks and `public -> admin` privilege escalation paths.
60
60
  3. **Cognitive Drag & Token Efficiency (`systemores_measure_drag`)**:
@@ -62,11 +62,11 @@ Always execute audits starting with zero-friction structural checks before invok
62
62
 
63
63
  ### Phase 2: Live Psychometric Stress Testing & Compliance (Pro / Team / Trial Tier)
64
64
  4. **System One Live Turn Circuit Breaker (`systemores_audit_turn_live`)**:
65
- - Test adversarial user turns and proposed tool calls to compute the **Systemores Health Index (0–100)**, sycophancy probability, and circuit-breaker verdict.
65
+ - Test adversarial user turns (including cross-lingual prompt-injection bypasses and polite/direct cultural registers) and proposed tool calls to compute the **Systemores Health Index (0–100)**, sycophancy probability, and circuit-breaker verdict.
66
66
  5. **Murray Needs-Press & Drift Audit (`systemores_stress_test_agent`, `systemores_evaluate_drift`, `systemores_assess_bias`)**:
67
- - Evaluate the agent's system prompt under high adversarial press and across EEOC/ECOA/COPPA compliance domains.
67
+ - Evaluate multilingual agent system prompts (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh`) with cross-cultural calibration under high adversarial press and across EEOC, ECOA, COPPA, and **EU AI Act (`eu_ai_act`)** compliance domains.
68
68
  6. **Synthetic Cohorts & Regulatory Dossiers (`systemores_generate_cohort`, `systemores_export_dossier`)**:
69
- - Generate 30-facet IPIP-NEO-120 adversarial test cohorts (Pro / Team) and export signed EU AI Act / NIST AI RMF 1.0 / SOC 2 compliance dossiers (`systemores_export_dossier` requires the **Team & Compliance ($199/mo)** or Enterprise tier).
69
+ - Generate 30-facet IPIP-NEO-120 adversarial test cohorts (Pro / Team) and export signed EU AI Act / NIST AI RMF 1.0 / SOC 2 compliance dossiers (`systemores_export_dossier` requires the **Team & Compliance ($199/mo)** or Enterprise tier), passing optional `locale` (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh`; BCP-47 tags like `pt-BR` or `zh-CN` normalized automatically) for localized deliverables and `?lang=` verification pages. To compute differentiated, evidence-backed per-framework scores (`CERTIFIED`, `CONDITIONAL_APPROVAL`, or `NON_COMPLIANT`) under strict zero-retention, pass transient `systemPrompt`, `role`, `toolDefinitionsJson`, `graphTopologyJson`, `otelTraceJson`, and/or `liveAuditMetricsJson` (`healthIndex`, `sycophancyProbability`, `personaStabilityIndex`, `averageDriftIndex`, `toolIntegrityScore`).
70
70
 
71
71
  > **Handling Unauthenticated / Free-Tier Responses Gracefully:**
72
72
  > If a Pro/Enterprise tool returns an authentication prompt from the Cloud MCP server, still deliver a complete **Phase 1 Structural & Static Prompt Audit Scorecard** using the Free Tier tools (`systemores_audit_tool_integrity`, `systemores_audit_agent_graph`, `systemores_measure_drag`), and clearly show the user how to unlock live 21-dimension psychometric scoring and System One inline circuit breaking by adding a Trial Token or Pro API key (`sys_pro_...`) from `https://audit.systemores.com/pricing`.
@@ -90,7 +90,7 @@ Always execute audits starting with zero-friction structural checks before invok
90
90
  **Systemores Health Index:** `XX.X / 100` | **Circuit Breaker Gate:** `[DISPATCH | INTERCEPT | STRIP_TOOL | QUARANTINE]`
91
91
 
92
92
  ### 🛡️ MCP Tool & Graph Integrity Summary
93
- - **Tools Audited:** `X` | **Integrity Score:** `XX / 100` (`[PASS | WARN | FAIL]`)
93
+ - **Tools Audited:** `X` | **Integrity Score:** `XX / 100` (`[PASS | REVIEW | FAIL]`)
94
94
  - **Annotation Mismatches / Injection Flags:** `<summary>`
95
95
  - **Agent Graph Topology:** `[PASSED | FAILED]`
96
96
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "systemores",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
4
  "description": "Systemores AI Agent Auditor — 21-dimension behavioral stress testing, IPIP-NEO-120 psychometrics, MCP 2026 tool integrity auditing, and regulatory compliance dossiers.",
5
5
  "mcpServers": {
6
6
  "cloud": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@systemores/systemores-plugin",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
4
4
  "mcpName": "io.github.bobcar0/systemores-plugin",
5
5
  "description": "Systemores AI Agent Psychometrics, Inline Circuit-Breaker (<250ms), and MCP 2026 Security Governance plugin for Google Antigravity, Claude Code, and Gemini CLI.",
6
6
  "homepage": "https://audit.systemores.com",
package/plugin.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "systemores",
4
4
  "displayName": "Systemores",
5
- "version": "1.1.3",
5
+ "version": "1.2.0",
6
6
  "description": "Audit AI agent system prompts, MCP 2026 tool schemas, delegation graphs, <250ms guardrails, 21D psychometrics, and EU AI Act / NIST / SOC 2 dossiers.",
7
7
  "logo": "assets/logo.svg",
8
8
  "suggestedPrompts": [
package/server.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "title": "Systemores AI Agent & MCP Security Auditor",
5
5
  "description": "AI agent security, MCP 2026 schema & graph audits, <250ms guardrails, and compliance dossiers",
6
6
  "websiteUrl": "https://audit.systemores.com",
7
- "version": "1.1.3",
7
+ "version": "1.2.0",
8
8
  "icons": [
9
9
  {
10
10
  "src": "https://raw.githubusercontent.com/bobcar0/systemores-plugin/main/assets/logo.svg",
@@ -23,7 +23,7 @@
23
23
  "registryType": "npm",
24
24
  "registryBaseUrl": "https://registry.npmjs.org",
25
25
  "identifier": "@systemores/systemores-plugin",
26
- "version": "1.1.3",
26
+ "version": "1.2.0",
27
27
  "transport": {
28
28
  "type": "stdio"
29
29
  },
@@ -9,7 +9,7 @@ Use this skill whenever the user wants to evaluate, stress-test, secure, or cert
9
9
 
10
10
  ## 1. Tool Matrix & Tier Availability
11
11
 
12
- The Systemores MCP server (`systemores_cloud` or `systemores-agent-auditor`) exposes **11 specialized auditing tools** across three tiers:
12
+ The Systemores MCP server (`systemores_cloud` or `systemores-agent-auditor`) exposes **12 specialized auditing tools** across three tiers:
13
13
 
14
14
  ### Free Community Tier ($0 / Zero-Config / Instant Execution)
15
15
  These deterministic structural and efficiency tools run immediately upon plugin installation without requiring an API key:
@@ -25,11 +25,12 @@ These tools run live 30-adjective semantic extraction, Systemores 21-dimension s
25
25
 
26
26
  | Tool Name | Purpose | Key Parameters |
27
27
  | :--- | :--- | :--- |
28
- | `systemores_audit_turn_live` | **Systemores System One** real-time (~250ms) circuit breaker. Returns `healthIndex` (0–100), calibrated sycophancy probability, information leakage verdict, and gate action (`DISPATCH`, `INTERCEPT`, `STRIP_TOOL`, `QUARANTINE`). | `systemPrompt`, `userMessage`, `agentResponse`, `proposedToolCall` |
29
- | `systemores_stress_test_agent` | **Murray Needs-Press** adversarial stress test across 21 traits + derived Big Five (OCEAN), MBTI, and DISC profiles. | `systemPrompt`, `role` (`customer_support`, `financial_underwriter`, `medical_assistant`, `general_developer`), `pressIntensity` |
28
+ | `systemores_audit_turn_live` | **Systemores System One** real-time (~250ms) circuit breaker (supports cross-lingual bypasses & polite/direct cultural registers). Returns `healthIndex` (0–100), calibrated sycophancy probability, information leakage verdict, and gate action (`DISPATCH`, `INTERCEPT`, `STRIP_TOOL`, `QUARANTINE`). | `systemPrompt`, `userMessage`, `agentResponse`, `proposedToolCall` |
29
+ | `systemores_stress_test_agent` | **Murray Needs-Press** adversarial stress test across 21 traits + derived Big Five (OCEAN), MBTI, and DISC profiles across multilingual prompts (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh`). | `systemPrompt`, `role` (`customer_support`, `financial_underwriter`, `medical_assistant`, `general_developer`), `pressIntensity` |
30
+ | `systemores_tool_integrity` | Audits agent tool permissions, action boundaries, and privilege escalation risks in context (with multilingual & CJK-aware semantic description scoring). | `systemPrompt`, `toolContext` (`["api_calls", "database", "filesystem", "code_execution"]`) |
30
31
  | `systemores_evaluate_drift` | Simulates multi-turn persona erosion and computes average drift index and deviation angle in degrees. | `systemPrompt`, `turns` (1–100), `temperature` |
31
- | `systemores_assess_bias` | Evaluates algorithmic bias and regulatory non-compliance flags across protected domains. | `systemPrompt`, `complianceDomain` (`employment_eeoc`, `housing_fair`, `lending_ecoa`, `children_coppa`) |
32
- | `systemores_generate_cohort` | Generates synthetic adversarial & baseline testing personas with full 30-facet IPIP-NEO-120 psychometric vectors. | `domain`, `cohortSize` (1–50), `includeAdversarial` |
32
+ | `systemores_assess_bias` | Evaluates algorithmic bias and regulatory non-compliance flags across protected domains including **EU AI Act (EU 2024/1689)** and multilingual prompts. | `systemPrompt`, `complianceDomain` (`employment_eeoc`, `housing_fair`, `lending_ecoa`, `children_coppa`, `eu_ai_act`) |
33
+ | `systemores_generate_cohort` | Generates synthetic adversarial & baseline testing personas with full 30-facet IPIP-NEO-120 psychometric vectors in optional localized languages (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh`, with BCP-47 normalization). | `domain`, `cohortSize` (1–100), `includeAdversarial`, `locale` |
33
34
  | `systemores_analyze_trace_telemetry` | Inspects OpenTelemetry spans (with W3C `_meta.traceparent` support) for token burn traps, recursive tool deadlocks, and latency hotspots. | `otelTraceJson`, `maxCostThresholdUsd`, `latencyThresholdMs` |
34
35
  | `systemores_inject_environment_fault` | Chaos engineering generator for testing agent resilience against HTTP 429s, 500s, timeouts, and malformed JSON. | `faultType`, `targetToolName`, `failureProbability` |
35
36
 
@@ -38,7 +39,7 @@ Includes everything in Pro plus multi-seat CI/CD licensing (up to 25 active IPs/
38
39
 
39
40
  | Tool Name | Purpose | Key Parameters |
40
41
  | :--- | :--- | :--- |
41
- | `systemores_export_dossier` | Generates a formal Markdown & JSON compliance certification dossier for **EU AI Act**, **NIST AI RMF 1.0**, **EEOC/ECOA**, and **SOC 2 Type II AI** (*Requires Team & Compliance or Enterprise tier*). | `auditSessionId`, `targetFrameworks`, `companyName` |
42
+ | `systemores_export_dossier` | Generates a signed Markdown & JSON compliance certification dossier (plus `?lang=` localized public verification link) for **EU AI Act**, **NIST AI RMF 1.0**, **EEOC/ECOA**, and **SOC 2 Type II AI** (*Requires Team & Compliance or Enterprise tier*). Pass transient `systemPrompt` / `role` / `toolDefinitionsJson` / `graphTopologyJson` / `otelTraceJson` / `liveAuditMetricsJson` for dynamic, zero-retention per-framework scoring. | `auditSessionId`, `targetFrameworks`, `companyName`, `locale` (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh`), optional `systemPrompt`, `role`, `toolDefinitionsJson`, `graphTopologyJson`, `otelTraceJson`, `liveAuditMetricsJson` |
42
43
 
43
44
  ---
44
45
 
package/src/server.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Systemores AI Agent & MCP Security Auditor — MCP Server & Cloud Bridge (v1.1.3)
3
+ * Systemores AI Agent & MCP Security Auditor — MCP Server & Cloud Bridge (v1.2.0)
4
4
  * Canonical URL: https://audit.systemores.com/api/mcp
5
5
  * Privacy Policy: https://audit.systemores.com/privacy (see PRIVACY.md)
6
6
  *
@@ -8,6 +8,7 @@
8
8
  * authenticated tool executions over TLS to https://audit.systemores.com/api/mcp.
9
9
  */
10
10
 
11
+ import { realpathSync } from "node:fs";
11
12
  import { createInterface } from "node:readline";
12
13
  import { timingSafeEqual } from "node:crypto";
13
14
  import { fileURLToPath } from "node:url";
@@ -167,7 +168,7 @@ export const TOOL_DEFINITIONS = [
167
168
  name: "systemores_assess_bias",
168
169
  title: "Assess Regulatory & Demographic Bias",
169
170
  description:
170
- "Verifies the agent's compliance with fair-lending, fair-housing, employment non-discrimination (EEOC/SIOP/ECOA), or child-directed safety (COPPA) standards.",
171
+ "Verifies the agent's compliance with fair-lending, fair-housing, employment non-discrimination (EEOC/SIOP/ECOA), child-directed safety (COPPA), or EU AI Act (EU 2024/1689) governance standards.",
171
172
  annotations: {
172
173
  title: "Assess Regulatory & Demographic Bias",
173
174
  readOnlyHint: true,
@@ -181,13 +182,13 @@ export const TOOL_DEFINITIONS = [
181
182
  systemPrompt: {
182
183
  type: "string",
183
184
  description:
184
- "The underwriting, hiring, or housing agent system prompt to evaluate. Maximum 8,000 characters.",
185
+ "The underwriting, hiring, housing, or EU AI Act agent system prompt to evaluate (supports multilingual prompts). Maximum 8,000 characters.",
185
186
  },
186
187
  complianceDomain: {
187
188
  type: "string",
188
189
  description:
189
- "The legal compliance framework to evaluate against (employment, housing, lending, or COPPA child safety).",
190
- enum: ["employment_eeoc", "housing_fair", "lending_ecoa", "children_coppa"],
190
+ "The legal compliance framework to evaluate against (employment, housing, lending, COPPA child safety, or EU AI Act).",
191
+ enum: ["employment_eeoc", "housing_fair", "lending_ecoa", "children_coppa", "eu_ai_act"],
191
192
  },
192
193
  },
193
194
  required: ["systemPrompt", "complianceDomain"],
@@ -353,6 +354,13 @@ export const TOOL_DEFINITIONS = [
353
354
  description: "Includes prompt-injection and noisy data submitter personas in the cohort.",
354
355
  default: true,
355
356
  },
357
+ locale: {
358
+ type: "string",
359
+ description:
360
+ "Optional ISO-639-1 / BCP-47 language tag (normalized to 'en', 'es', 'de', 'fr', 'pt', 'ja', 'zh') for localized synthetic user prompts. Defaults to 'en'.",
361
+ pattern: "^([eE][nN]|[eE][sS]|[dD][eE]|[fF][rR]|[pP][tT]|[jJ][aA]|[zZ][hH])([-_][a-zA-Z0-9]{2,8}){0,3}$",
362
+ default: "en",
363
+ },
356
364
  },
357
365
  required: ["domain"],
358
366
  },
@@ -436,12 +444,12 @@ export const TOOL_DEFINITIONS = [
436
444
  name: "systemores_export_dossier",
437
445
  title: "Export Regulatory Compliance Dossier",
438
446
  description:
439
- "Aggregates findings from graph audits, synthetic cohort simulations, chaos tests, and trace analytics into formal compliance report packages for EU AI Act (EU 2024/1689), NIST AI RMF 1.0, EEOC/ECOA, and SOC 2 AI Addendums.",
447
+ "Aggregates findings from graph audits, synthetic cohort simulations, chaos tests, and trace analytics into formal signed compliance report packages for EU AI Act (EU 2024/1689), NIST AI RMF 1.0, EEOC/ECOA, and SOC 2 AI Addendums.",
440
448
  annotations: {
441
449
  title: "Export Regulatory Compliance Dossier",
442
- readOnlyHint: true,
450
+ readOnlyHint: false,
443
451
  destructiveHint: false,
444
- idempotentHint: true,
452
+ idempotentHint: false,
445
453
  openWorldHint: false,
446
454
  },
447
455
  inputSchema: {
@@ -461,6 +469,49 @@ export const TOOL_DEFINITIONS = [
461
469
  description: "Legal entity or client name for dossier attribution.",
462
470
  default: "Enterprise Client",
463
471
  },
472
+ locale: {
473
+ type: "string",
474
+ description:
475
+ "Optional ISO-639-1 / BCP-47 language tag (normalized to 'en', 'es', 'de', 'fr', 'pt', 'ja', 'zh') for localized dossier narrative and verification card labels. Defaults to 'en'.",
476
+ pattern: "^([eE][nN]|[eE][sS]|[dD][eE]|[fF][rR]|[pP][tT]|[jJ][aA]|[zZ][hH])([-_][a-zA-Z0-9]{2,8}){0,3}$",
477
+ default: "en",
478
+ },
479
+ systemPrompt: {
480
+ type: "string",
481
+ description:
482
+ "Optional agent system prompt evaluated strictly in memory (never stored) to compute differentiated per-framework scores via Murray Needs-Press, drift, bias, and tool-discipline diagnostics. Maximum 8,000 characters.",
483
+ },
484
+ role: {
485
+ type: "string",
486
+ description:
487
+ "Optional operational role of the target agent when evaluating systemPrompt (defaults to 'general_developer').",
488
+ enum: [
489
+ "customer_support",
490
+ "financial_underwriter",
491
+ "medical_assistant",
492
+ "general_developer",
493
+ ],
494
+ },
495
+ toolDefinitionsJson: {
496
+ type: "string",
497
+ description:
498
+ "Optional JSON array of MCP tool definitions evaluated strictly in memory (never stored) under strictMode to score SOC 2 AI and NIST AI RMF tool governance.",
499
+ },
500
+ graphTopologyJson: {
501
+ type: "string",
502
+ description:
503
+ "Optional JSON multi-agent delegation graph containing nodes and edges evaluated strictly in memory for cycle and privilege boundary scoring.",
504
+ },
505
+ otelTraceJson: {
506
+ type: "string",
507
+ description:
508
+ "Optional OpenTelemetry span payload evaluated strictly in memory for token burn, loop, and latency scoring.",
509
+ },
510
+ liveAuditMetricsJson: {
511
+ type: "string",
512
+ description:
513
+ "Optional JSON object of transient audit metrics (healthIndex 0-100, sycophancyProbability 0-1, personaStabilityIndex 0-1, averageDriftIndex 0-1, toolIntegrityScore 0-100) from preceding tool calls.",
514
+ },
464
515
  },
465
516
  required: ["auditSessionId"],
466
517
  },
@@ -504,6 +555,18 @@ export const TOOL_DEFINITIONS = [
504
555
  },
505
556
  ];
506
557
 
558
+ const SUPPORTED_LOCALE_LIST = ["en", "es", "de", "fr", "pt", "ja", "zh"];
559
+ const BCP47_LOCALE_REGEX = /^[a-zA-Z]{2,3}(?:[-_][a-zA-Z0-9]{2,8}){0,3}$/;
560
+
561
+ function normalizeLocaleTag(raw) {
562
+ if (typeof raw !== "string") return null;
563
+ const trimmed = raw.trim();
564
+ if (trimmed === "") return "en";
565
+ if (!BCP47_LOCALE_REGEX.test(trimmed)) return null;
566
+ const primary = trimmed.toLowerCase().replace(/_/g, "-").split("-")[0];
567
+ return SUPPORTED_LOCALE_LIST.includes(primary) ? primary : null;
568
+ }
569
+
507
570
  // ─── Strict Input Schema Validator ───────────────────────────────────────────
508
571
  export function validateToolArguments(toolName, args = {}) {
509
572
  const tool = TOOL_DEFINITIONS.find((t) => t.name === toolName);
@@ -530,12 +593,30 @@ export function validateToolArguments(toolName, args = {}) {
530
593
  if (propSchema.type === "boolean" && typeof val !== "boolean") {
531
594
  return { valid: false, error: `Parameter '${key}' must be a boolean.` };
532
595
  }
533
- if (propSchema.type === "integer" && (!Number.isInteger(val) || typeof val !== "number")) {
596
+ if (
597
+ propSchema.type === "integer" &&
598
+ (typeof val !== "number" || !Number.isFinite(val) || !Number.isInteger(val))
599
+ ) {
534
600
  return { valid: false, error: `Parameter '${key}' must be an integer.` };
535
601
  }
536
- if (propSchema.type === "number" && (typeof val !== "number" || Number.isNaN(val))) {
602
+ if (propSchema.type === "number" && (typeof val !== "number" || !Number.isFinite(val))) {
537
603
  return { valid: false, error: `Parameter '${key}' must be a number.` };
538
604
  }
605
+ if (key === "locale" && typeof val === "string") {
606
+ if (!normalizeLocaleTag(val)) {
607
+ return {
608
+ valid: false,
609
+ error: `Parameter 'locale' must match BCP-47 for one of: ${SUPPORTED_LOCALE_LIST.join(", ")}.`,
610
+ };
611
+ }
612
+ continue;
613
+ }
614
+ if (typeof propSchema.pattern === "string" && typeof val === "string") {
615
+ const regex = new RegExp(propSchema.pattern);
616
+ if (!regex.test(val)) {
617
+ return { valid: false, error: `Parameter '${key}' does not match required pattern.` };
618
+ }
619
+ }
539
620
  if (Array.isArray(propSchema.enum) && !propSchema.enum.includes(val)) {
540
621
  return {
541
622
  valid: false,
@@ -550,6 +631,87 @@ export function validateToolArguments(toolName, args = {}) {
550
631
  }
551
632
  }
552
633
 
634
+ if (toolName === "systemores_export_dossier") {
635
+ if (args.targetFrameworks !== undefined) {
636
+ const validFrameworks = new Set(["eu_ai_act", "nist_ai_rmf", "eeoc_ecoa", "soc2_ai"]);
637
+ const tokens = args.targetFrameworks
638
+ .split(",")
639
+ .map((s) => s.trim())
640
+ .filter(Boolean);
641
+ if (tokens.length === 0 || tokens.some((fw) => !validFrameworks.has(fw))) {
642
+ return {
643
+ valid: false,
644
+ error:
645
+ "Parameter 'targetFrameworks' must contain one or more of: eu_ai_act, nist_ai_rmf, eeoc_ecoa, soc2_ai.",
646
+ };
647
+ }
648
+ }
649
+
650
+ if (args.systemPrompt !== undefined) {
651
+ if (!args.systemPrompt.trim() || args.systemPrompt.length > 8000) {
652
+ return {
653
+ valid: false,
654
+ error: "Parameter 'systemPrompt' must be a non-empty string up to 8,000 characters.",
655
+ };
656
+ }
657
+ }
658
+
659
+ for (const jsonField of ["toolDefinitionsJson", "graphTopologyJson", "otelTraceJson"]) {
660
+ if (args[jsonField] !== undefined && (!args[jsonField].trim() || args[jsonField].length > 100000)) {
661
+ return {
662
+ valid: false,
663
+ error: `Parameter '${jsonField}' must be a non-empty JSON string up to 100,000 characters.`,
664
+ };
665
+ }
666
+ }
667
+
668
+ if (args.liveAuditMetricsJson !== undefined) {
669
+ if (!args.liveAuditMetricsJson.trim() || args.liveAuditMetricsJson.length > 10000) {
670
+ return {
671
+ valid: false,
672
+ error: "Parameter 'liveAuditMetricsJson' must be a non-empty JSON string up to 10,000 characters.",
673
+ };
674
+ }
675
+ let parsedMetrics;
676
+ try {
677
+ parsedMetrics = JSON.parse(args.liveAuditMetricsJson);
678
+ } catch {
679
+ return {
680
+ valid: false,
681
+ error: "Parameter 'liveAuditMetricsJson' must be valid JSON.",
682
+ };
683
+ }
684
+ if (!parsedMetrics || typeof parsedMetrics !== "object" || Array.isArray(parsedMetrics)) {
685
+ return {
686
+ valid: false,
687
+ error: "Parameter 'liveAuditMetricsJson' must be a JSON object.",
688
+ };
689
+ }
690
+ const bounds = {
691
+ healthIndex: [0, 100],
692
+ sycophancyProbability: [0, 1],
693
+ personaStabilityIndex: [0, 1],
694
+ averageDriftIndex: [0, 1],
695
+ toolIntegrityScore: [0, 100],
696
+ };
697
+ for (const [metricKey, [min, max]] of Object.entries(bounds)) {
698
+ if (!Object.hasOwn(parsedMetrics, metricKey) || parsedMetrics[metricKey] === undefined) continue;
699
+ const metricVal = parsedMetrics[metricKey];
700
+ if (
701
+ typeof metricVal !== "number" ||
702
+ !Number.isFinite(metricVal) ||
703
+ metricVal < min ||
704
+ metricVal > max
705
+ ) {
706
+ return {
707
+ valid: false,
708
+ error: `Parameter 'liveAuditMetricsJson.${metricKey}' must be a finite number between ${min} and ${max}.`,
709
+ };
710
+ }
711
+ }
712
+ }
713
+ }
714
+
553
715
  return { valid: true };
554
716
  }
555
717
 
@@ -587,6 +749,12 @@ export async function executeToolCall(toolName, args = {}, options = {}) {
587
749
  };
588
750
  }
589
751
 
752
+ const forwardArgs =
753
+ args && typeof args === "object" && !Array.isArray(args) ? { ...args } : {};
754
+ if (typeof forwardArgs.locale === "string") {
755
+ forwardArgs.locale = normalizeLocaleTag(forwardArgs.locale) || "en";
756
+ }
757
+
590
758
  if (options.dryRun) {
591
759
  return {
592
760
  isError: false,
@@ -612,30 +780,60 @@ export async function executeToolCall(toolName, args = {}, options = {}) {
612
780
  headers.Authorization = `Bearer ${auth.token}`;
613
781
  }
614
782
 
615
- const response = await fetch(REMOTE_MCP_ENDPOINT, {
616
- method: "POST",
617
- headers,
618
- body: JSON.stringify({
619
- jsonrpc: "2.0",
620
- id: Date.now(),
621
- method: "tools/call",
622
- params: { name: toolName, arguments: args },
623
- }),
624
- });
625
-
626
- const payload = await response.json();
627
- if (payload.result) {
628
- return payload.result;
783
+ try {
784
+ const response = await fetch(REMOTE_MCP_ENDPOINT, {
785
+ method: "POST",
786
+ signal: AbortSignal.timeout(15_000),
787
+ headers,
788
+ body: JSON.stringify({
789
+ jsonrpc: "2.0",
790
+ id: Date.now(),
791
+ method: "tools/call",
792
+ params: { name: toolName, arguments: forwardArgs },
793
+ }),
794
+ });
795
+
796
+ const rawText = await response.text();
797
+ let payload = {};
798
+ if (rawText.trimStart().startsWith("{")) {
799
+ payload = JSON.parse(rawText);
800
+ } else {
801
+ const sseDataLines = rawText
802
+ .split("\n")
803
+ .filter((line) => line.startsWith("data: "))
804
+ .map((line) => line.slice(6).trim())
805
+ .filter((chunk) => chunk && chunk !== "[DONE]");
806
+ if (sseDataLines.length > 0) {
807
+ payload = JSON.parse(sseDataLines[sseDataLines.length - 1]);
808
+ }
809
+ }
810
+ if (payload.result) {
811
+ return payload.result;
812
+ }
813
+ const errText =
814
+ typeof payload.error === "string"
815
+ ? payload.error
816
+ : payload.error?.message || `Remote MCP error (HTTP ${response.status})`;
817
+ return {
818
+ isError: true,
819
+ content: [
820
+ {
821
+ type: "text",
822
+ text: errText,
823
+ },
824
+ ],
825
+ };
826
+ } catch (error) {
827
+ return {
828
+ isError: true,
829
+ content: [
830
+ {
831
+ type: "text",
832
+ text: `Remote MCP transport error: ${error instanceof Error ? error.message : String(error)}`,
833
+ },
834
+ ],
835
+ };
629
836
  }
630
- return {
631
- isError: true,
632
- content: [
633
- {
634
- type: "text",
635
- text: payload.error?.message || `Remote MCP error (HTTP ${response.status})`,
636
- },
637
- ],
638
- };
639
837
  }
640
838
 
641
839
  // ─── MCP SDK Static AST & Runtime Registration Bridge ────────────────────────
@@ -644,7 +842,7 @@ export const CallToolRequestSchema = { method: "tools/call" };
644
842
 
645
843
  export const server = {
646
844
  name: "systemores-plugin",
647
- version: "1.1.3",
845
+ version: "1.2.0",
648
846
  registeredTools: new Map(),
649
847
  handlers: new Map(),
650
848
  tool(name, description, schema, annotations, handler) {
@@ -695,7 +893,7 @@ export async function handleJsonRpcMessage(message) {
695
893
  },
696
894
  serverInfo: {
697
895
  name: "systemores-plugin",
698
- version: "1.1.3",
896
+ version: "1.2.0",
699
897
  },
700
898
  },
701
899
  };
@@ -764,6 +962,17 @@ export function startStdioServer() {
764
962
  });
765
963
  }
766
964
 
767
- if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
965
+ export function isExecutedDirectly(metaUrl, argv1 = process.argv[1]) {
966
+ if (!argv1) return false;
967
+ const modulePath = fileURLToPath(metaUrl);
968
+ if (modulePath === argv1) return true;
969
+ try {
970
+ return realpathSync(modulePath) === realpathSync(argv1);
971
+ } catch {
972
+ return false;
973
+ }
974
+ }
975
+
976
+ if (isExecutedDirectly(import.meta.url)) {
768
977
  startStdioServer();
769
978
  }