agent-threat-rules 0.1.0 → 0.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.
Files changed (101) hide show
  1. package/README.md +358 -96
  2. package/dist/cli.js +90 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/coverage-analyzer.d.ts +43 -0
  5. package/dist/coverage-analyzer.d.ts.map +1 -0
  6. package/dist/coverage-analyzer.js +329 -0
  7. package/dist/coverage-analyzer.js.map +1 -0
  8. package/dist/index.d.ts +10 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +6 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/mcp-server.d.ts +13 -0
  13. package/dist/mcp-server.d.ts.map +1 -0
  14. package/dist/mcp-server.js +220 -0
  15. package/dist/mcp-server.js.map +1 -0
  16. package/dist/mcp-tools/coverage-gaps.d.ts +13 -0
  17. package/dist/mcp-tools/coverage-gaps.d.ts.map +1 -0
  18. package/dist/mcp-tools/coverage-gaps.js +55 -0
  19. package/dist/mcp-tools/coverage-gaps.js.map +1 -0
  20. package/dist/mcp-tools/list-rules.d.ts +17 -0
  21. package/dist/mcp-tools/list-rules.d.ts.map +1 -0
  22. package/dist/mcp-tools/list-rules.js +45 -0
  23. package/dist/mcp-tools/list-rules.js.map +1 -0
  24. package/dist/mcp-tools/scan.d.ts +18 -0
  25. package/dist/mcp-tools/scan.d.ts.map +1 -0
  26. package/dist/mcp-tools/scan.js +75 -0
  27. package/dist/mcp-tools/scan.js.map +1 -0
  28. package/dist/mcp-tools/submit-proposal.d.ts +12 -0
  29. package/dist/mcp-tools/submit-proposal.d.ts.map +1 -0
  30. package/dist/mcp-tools/submit-proposal.js +95 -0
  31. package/dist/mcp-tools/submit-proposal.js.map +1 -0
  32. package/dist/mcp-tools/threat-summary.d.ts +12 -0
  33. package/dist/mcp-tools/threat-summary.d.ts.map +1 -0
  34. package/dist/mcp-tools/threat-summary.js +74 -0
  35. package/dist/mcp-tools/threat-summary.js.map +1 -0
  36. package/dist/mcp-tools/validate.d.ts +15 -0
  37. package/dist/mcp-tools/validate.d.ts.map +1 -0
  38. package/dist/mcp-tools/validate.js +45 -0
  39. package/dist/mcp-tools/validate.js.map +1 -0
  40. package/dist/modules/index.d.ts +5 -4
  41. package/dist/modules/index.d.ts.map +1 -1
  42. package/dist/modules/index.js +6 -4
  43. package/dist/modules/index.js.map +1 -1
  44. package/dist/modules/semantic.d.ts +105 -0
  45. package/dist/modules/semantic.d.ts.map +1 -0
  46. package/dist/modules/semantic.js +283 -0
  47. package/dist/modules/semantic.js.map +1 -0
  48. package/dist/rule-scaffolder.d.ts +39 -0
  49. package/dist/rule-scaffolder.d.ts.map +1 -0
  50. package/dist/rule-scaffolder.js +173 -0
  51. package/dist/rule-scaffolder.js.map +1 -0
  52. package/dist/skill-fingerprint.d.ts +96 -0
  53. package/dist/skill-fingerprint.d.ts.map +1 -0
  54. package/dist/skill-fingerprint.js +337 -0
  55. package/dist/skill-fingerprint.js.map +1 -0
  56. package/dist/types.d.ts +1 -1
  57. package/dist/types.d.ts.map +1 -1
  58. package/package.json +6 -1
  59. package/rules/agent-manipulation/ATR-2026-030-cross-agent-attack.yaml +1 -1
  60. package/rules/agent-manipulation/ATR-2026-032-goal-hijacking.yaml +1 -1
  61. package/rules/agent-manipulation/ATR-2026-074-cross-agent-privilege-escalation.yaml +1 -1
  62. package/rules/agent-manipulation/ATR-2026-076-inter-agent-message-spoofing.yaml +1 -1
  63. package/rules/agent-manipulation/ATR-2026-077-human-trust-exploitation.yaml +1 -1
  64. package/rules/context-exfiltration/ATR-2026-020-system-prompt-leak.yaml +1 -1
  65. package/rules/context-exfiltration/ATR-2026-021-api-key-exposure.yaml +1 -1
  66. package/rules/context-exfiltration/ATR-2026-075-agent-memory-manipulation.yaml +1 -1
  67. package/rules/data-poisoning/ATR-2026-070-data-poisoning.yaml +1 -1
  68. package/rules/excessive-autonomy/ATR-2026-050-runaway-agent-loop.yaml +1 -1
  69. package/rules/excessive-autonomy/ATR-2026-051-resource-exhaustion.yaml +1 -1
  70. package/rules/excessive-autonomy/ATR-2026-052-cascading-failure.yaml +1 -1
  71. package/rules/model-security/ATR-2026-072-model-behavior-extraction.yaml +1 -1
  72. package/rules/model-security/ATR-2026-073-malicious-finetuning-data.yaml +1 -1
  73. package/rules/privilege-escalation/ATR-2026-040-privilege-escalation.yaml +1 -1
  74. package/rules/privilege-escalation/ATR-2026-041-scope-creep.yaml +1 -1
  75. package/rules/prompt-injection/ATR-2026-001-direct-prompt-injection.yaml +1 -1
  76. package/rules/prompt-injection/ATR-2026-002-indirect-prompt-injection.yaml +1 -1
  77. package/rules/prompt-injection/ATR-2026-003-jailbreak-attempt.yaml +1 -1
  78. package/rules/prompt-injection/ATR-2026-004-system-prompt-override.yaml +1 -1
  79. package/rules/prompt-injection/ATR-2026-005-multi-turn-injection.yaml +1 -1
  80. package/rules/prompt-injection/ATR-2026-080-encoding-evasion.yaml +75 -0
  81. package/rules/prompt-injection/ATR-2026-081-semantic-multi-turn.yaml +72 -0
  82. package/rules/prompt-injection/ATR-2026-082-fingerprint-evasion.yaml +71 -0
  83. package/rules/prompt-injection/ATR-2026-083-indirect-tool-injection.yaml +71 -0
  84. package/rules/prompt-injection/ATR-2026-084-structured-data-injection.yaml +73 -0
  85. package/rules/prompt-injection/ATR-2026-085-audit-evasion.yaml +71 -0
  86. package/rules/prompt-injection/ATR-2026-086-visual-spoofing.yaml +75 -0
  87. package/rules/prompt-injection/ATR-2026-087-rule-probing.yaml +69 -0
  88. package/rules/prompt-injection/ATR-2026-088-adaptive-countermeasure.yaml +71 -0
  89. package/rules/prompt-injection/ATR-2026-089-polymorphic-skill.yaml +72 -0
  90. package/rules/prompt-injection/ATR-2026-090-threat-intel-exfil.yaml +71 -0
  91. package/rules/prompt-injection/ATR-2026-091-nested-payload.yaml +75 -0
  92. package/rules/prompt-injection/ATR-2026-092-consensus-poisoning.yaml +79 -0
  93. package/rules/prompt-injection/ATR-2026-093-gradual-escalation.yaml +73 -0
  94. package/rules/prompt-injection/ATR-2026-094-audit-bypass.yaml +73 -0
  95. package/rules/skill-compromise/ATR-2026-060-skill-impersonation.yaml +1 -1
  96. package/rules/tool-poisoning/ATR-2026-010-mcp-malicious-response.yaml +1 -1
  97. package/rules/tool-poisoning/ATR-2026-011-tool-output-injection.yaml +1 -1
  98. package/rules/tool-poisoning/ATR-2026-012-unauthorized-tool-call.yaml +1 -1
  99. package/rules/tool-poisoning/ATR-2026-013-tool-ssrf.yaml +1 -1
  100. package/rules/tool-poisoning/ATR-2026-095-supply-chain-poisoning.yaml +77 -0
  101. package/rules/tool-poisoning/ATR-2026-096-registry-poisoning.yaml +79 -0
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ATR MCP Server - Model Context Protocol server for Agent Threat Rules
4
+ *
5
+ * Exposes ATR functionality as MCP tools for AI agents and IDEs.
6
+ * Start with: atr mcp (stdio transport)
7
+ *
8
+ * @module agent-threat-rules/mcp-server
9
+ */
10
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
11
+ export declare function createMCPServer(): Promise<Server>;
12
+ export declare function startMCPServer(): Promise<void>;
13
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAsKnE,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAoDvD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
@@ -0,0 +1,220 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ATR MCP Server - Model Context Protocol server for Agent Threat Rules
4
+ *
5
+ * Exposes ATR functionality as MCP tools for AI agents and IDEs.
6
+ * Start with: atr mcp (stdio transport)
7
+ *
8
+ * @module agent-threat-rules/mcp-server
9
+ */
10
+ import { resolve, dirname } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
13
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
14
+ import { ListToolsRequestSchema, CallToolRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
15
+ import { ATREngine } from './engine.js';
16
+ import { handleScan } from './mcp-tools/scan.js';
17
+ import { handleListRules } from './mcp-tools/list-rules.js';
18
+ import { handleValidate } from './mcp-tools/validate.js';
19
+ import { handleSubmitProposal } from './mcp-tools/submit-proposal.js';
20
+ import { handleCoverageGaps } from './mcp-tools/coverage-gaps.js';
21
+ import { handleThreatSummary } from './mcp-tools/threat-summary.js';
22
+ const __filename = fileURLToPath(import.meta.url);
23
+ const __dirname = dirname(__filename);
24
+ const RULES_DIR = resolve(__dirname, '..', 'rules');
25
+ const TOOLS = [
26
+ {
27
+ name: 'atr_scan',
28
+ description: 'Scan text content for AI agent security threats using ATR detection rules. Returns matched rules with severity, confidence, and recommended actions.',
29
+ inputSchema: {
30
+ type: 'object',
31
+ properties: {
32
+ content: {
33
+ type: 'string',
34
+ description: 'The text content to scan for threats (prompt, tool response, agent output, etc.)',
35
+ },
36
+ event_type: {
37
+ type: 'string',
38
+ enum: ['llm_input', 'llm_output', 'tool_call', 'tool_response', 'agent_behavior', 'multi_agent_message'],
39
+ description: 'Type of agent event being scanned. Defaults to "llm_input".',
40
+ },
41
+ min_severity: {
42
+ type: 'string',
43
+ enum: ['informational', 'low', 'medium', 'high', 'critical'],
44
+ description: 'Minimum severity level to include in results. Defaults to "informational".',
45
+ },
46
+ },
47
+ required: ['content'],
48
+ },
49
+ },
50
+ {
51
+ name: 'atr_list_rules',
52
+ description: 'List and filter available ATR detection rules. Search by category, severity, or keyword.',
53
+ inputSchema: {
54
+ type: 'object',
55
+ properties: {
56
+ category: {
57
+ type: 'string',
58
+ enum: [
59
+ 'prompt-injection', 'tool-poisoning', 'context-exfiltration',
60
+ 'agent-manipulation', 'privilege-escalation', 'excessive-autonomy',
61
+ 'data-poisoning', 'model-abuse', 'skill-compromise',
62
+ ],
63
+ description: 'Filter rules by threat category.',
64
+ },
65
+ severity: {
66
+ type: 'string',
67
+ enum: ['informational', 'low', 'medium', 'high', 'critical'],
68
+ description: 'Filter rules by severity level.',
69
+ },
70
+ search: {
71
+ type: 'string',
72
+ description: 'Search rules by keyword in title, description, or ID.',
73
+ },
74
+ },
75
+ },
76
+ },
77
+ {
78
+ name: 'atr_validate_rule',
79
+ description: 'Validate an ATR rule written in YAML format. Checks required fields, enum values, and structural correctness.',
80
+ inputSchema: {
81
+ type: 'object',
82
+ properties: {
83
+ yaml_content: {
84
+ type: 'string',
85
+ description: 'The ATR rule YAML content to validate.',
86
+ },
87
+ },
88
+ required: ['yaml_content'],
89
+ },
90
+ },
91
+ {
92
+ name: 'atr_submit_proposal',
93
+ description: 'Generate a draft ATR rule from a threat description. Produces YAML with detection patterns derived from example payloads.',
94
+ inputSchema: {
95
+ type: 'object',
96
+ properties: {
97
+ title: {
98
+ type: 'string',
99
+ description: 'Title for the new rule (e.g., "Multi-turn Context Hijacking").',
100
+ },
101
+ category: {
102
+ type: 'string',
103
+ enum: [
104
+ 'prompt-injection', 'tool-poisoning', 'context-exfiltration',
105
+ 'agent-manipulation', 'privilege-escalation', 'excessive-autonomy',
106
+ 'data-poisoning', 'model-abuse', 'skill-compromise',
107
+ ],
108
+ description: 'Threat category for the rule.',
109
+ },
110
+ attack_description: {
111
+ type: 'string',
112
+ description: 'Detailed description of the attack this rule detects.',
113
+ },
114
+ example_payloads: {
115
+ type: 'array',
116
+ items: { type: 'string' },
117
+ description: 'Example attack payloads to generate detection patterns from.',
118
+ },
119
+ severity: {
120
+ type: 'string',
121
+ enum: ['informational', 'low', 'medium', 'high', 'critical'],
122
+ description: 'Severity level. Defaults to "medium".',
123
+ },
124
+ mitre_refs: {
125
+ type: 'array',
126
+ items: { type: 'string' },
127
+ description: 'Optional MITRE ATLAS reference IDs (e.g., "AML.T0051").',
128
+ },
129
+ },
130
+ required: ['title', 'category', 'attack_description', 'example_payloads'],
131
+ },
132
+ },
133
+ {
134
+ name: 'atr_coverage_gaps',
135
+ description: 'Analyze ATR rule coverage against security frameworks (OWASP Agentic AI, MITRE ATLAS). Identifies uncovered threat categories.',
136
+ inputSchema: {
137
+ type: 'object',
138
+ properties: {
139
+ framework: {
140
+ type: 'string',
141
+ enum: ['owasp_agentic', 'mitre_atlas', 'all'],
142
+ description: 'Security framework to analyze against. Defaults to "all".',
143
+ },
144
+ },
145
+ },
146
+ },
147
+ {
148
+ name: 'atr_threat_summary',
149
+ description: 'Get aggregated statistics about loaded ATR rules. Shows distribution by category, severity, status, and test coverage.',
150
+ inputSchema: {
151
+ type: 'object',
152
+ properties: {
153
+ category: {
154
+ type: 'string',
155
+ enum: [
156
+ 'prompt-injection', 'tool-poisoning', 'context-exfiltration',
157
+ 'agent-manipulation', 'privilege-escalation', 'excessive-autonomy',
158
+ 'data-poisoning', 'model-abuse', 'skill-compromise',
159
+ ],
160
+ description: 'Optional: filter statistics to a single threat category.',
161
+ },
162
+ },
163
+ },
164
+ },
165
+ ];
166
+ export async function createMCPServer() {
167
+ const engine = new ATREngine({ rulesDir: RULES_DIR });
168
+ const ruleCount = await engine.loadRules();
169
+ const server = new Server({
170
+ name: 'atr-mcp-server',
171
+ version: '0.1.0',
172
+ }, {
173
+ capabilities: {
174
+ tools: {},
175
+ },
176
+ });
177
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
178
+ tools: TOOLS,
179
+ }));
180
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
181
+ const { name, arguments: args } = request.params;
182
+ const toolArgs = (args ?? {});
183
+ switch (name) {
184
+ case 'atr_scan':
185
+ return handleScan(engine, toolArgs);
186
+ case 'atr_list_rules':
187
+ return handleListRules(engine, toolArgs);
188
+ case 'atr_validate_rule':
189
+ return handleValidate(toolArgs);
190
+ case 'atr_submit_proposal':
191
+ return handleSubmitProposal(toolArgs);
192
+ case 'atr_coverage_gaps':
193
+ return handleCoverageGaps(engine, toolArgs);
194
+ case 'atr_threat_summary':
195
+ return handleThreatSummary(engine, toolArgs);
196
+ default:
197
+ return {
198
+ content: [{ type: 'text', text: `Error: Unknown tool "${name}".` }],
199
+ isError: true,
200
+ };
201
+ }
202
+ });
203
+ return server;
204
+ }
205
+ export async function startMCPServer() {
206
+ const server = await createMCPServer();
207
+ const transport = new StdioServerTransport();
208
+ await server.connect(transport);
209
+ }
210
+ // Auto-start when run directly
211
+ const isDirectExecution = process.argv[1] &&
212
+ (process.argv[1].endsWith('mcp-server.js') ||
213
+ process.argv[1].endsWith('mcp-server.ts'));
214
+ if (isDirectExecution) {
215
+ startMCPServer().catch((err) => {
216
+ process.stderr.write(`ATR MCP Server error: ${err instanceof Error ? err.message : String(err)}\n`);
217
+ process.exit(1);
218
+ });
219
+ }
220
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * atr_coverage_gaps MCP tool - Analyze coverage gaps against security frameworks
3
+ * @module agent-threat-rules/mcp-tools/coverage-gaps
4
+ */
5
+ import type { ATREngine } from '../engine.js';
6
+ export declare function handleCoverageGaps(engine: ATREngine, args: Record<string, unknown>): {
7
+ content: Array<{
8
+ type: string;
9
+ text: string;
10
+ }>;
11
+ isError?: boolean;
12
+ };
13
+ //# sourceMappingURL=coverage-gaps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-gaps.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/coverage-gaps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACpF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAkDA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * atr_coverage_gaps MCP tool - Analyze coverage gaps against security frameworks
3
+ * @module agent-threat-rules/mcp-tools/coverage-gaps
4
+ */
5
+ import { CoverageAnalyzer } from '../coverage-analyzer.js';
6
+ export function handleCoverageGaps(engine, args) {
7
+ const framework = (args['framework'] ?? 'all').toLowerCase();
8
+ const validFrameworks = ['owasp_agentic', 'mitre_atlas', 'all'];
9
+ if (!validFrameworks.includes(framework)) {
10
+ return {
11
+ content: [{ type: 'text', text: `Error: "framework" must be one of: ${validFrameworks.join(', ')}` }],
12
+ isError: true,
13
+ };
14
+ }
15
+ const analyzer = new CoverageAnalyzer(engine.getRules());
16
+ const report = analyzer.analyze();
17
+ // Filter gaps by requested framework
18
+ const filteredGaps = framework === 'all'
19
+ ? report.gaps
20
+ : report.gaps.filter((g) => {
21
+ if (framework === 'owasp_agentic')
22
+ return g.framework === 'OWASP Agentic Top 10';
23
+ if (framework === 'mitre_atlas')
24
+ return g.framework === 'MITRE ATLAS';
25
+ return true;
26
+ });
27
+ const filteredSuggestions = framework === 'all'
28
+ ? report.suggestions
29
+ : report.suggestions.filter((s) => {
30
+ if (framework === 'owasp_agentic')
31
+ return s.includes('OWASP') || s.includes('ASI');
32
+ if (framework === 'mitre_atlas')
33
+ return s.includes('MITRE') || s.includes('AML');
34
+ return true;
35
+ });
36
+ const result = {
37
+ analysis_timestamp: new Date().toISOString(),
38
+ total_rules_loaded: engine.getRuleCount(),
39
+ total_active_rules: report.totalRules,
40
+ framework_filter: framework,
41
+ gaps: filteredGaps.map((g) => ({
42
+ framework: g.framework,
43
+ risk_id: g.riskId,
44
+ risk_name: g.riskName,
45
+ current_rule_count: g.currentRuleCount,
46
+ recommended_min: g.recommendedMin,
47
+ })),
48
+ category_distribution: report.categoryDistribution,
49
+ suggestions: filteredSuggestions,
50
+ };
51
+ return {
52
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
53
+ };
54
+ }
55
+ //# sourceMappingURL=coverage-gaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-gaps.js","sourceRoot":"","sources":["../../src/mcp-tools/coverage-gaps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,IAA6B;IAIjF,MAAM,SAAS,GAAG,CAAE,IAAI,CAAC,WAAW,CAAY,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAEzE,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAChE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACrG,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzD,MAAM,MAAM,GAAmB,QAAQ,CAAC,OAAO,EAAE,CAAC;IAElD,qCAAqC;IACrC,MAAM,YAAY,GAAG,SAAS,KAAK,KAAK;QACtC,CAAC,CAAC,MAAM,CAAC,IAAI;QACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,IAAI,SAAS,KAAK,eAAe;gBAAE,OAAO,CAAC,CAAC,SAAS,KAAK,sBAAsB,CAAC;YACjF,IAAI,SAAS,KAAK,aAAa;gBAAE,OAAO,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,SAAS,KAAK,KAAK;QAC7C,CAAC,CAAC,MAAM,CAAC,WAAW;QACpB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,IAAI,SAAS,KAAK,eAAe;gBAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnF,IAAI,SAAS,KAAK,aAAa;gBAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG;QACb,kBAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5C,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE;QACzC,kBAAkB,EAAE,MAAM,CAAC,UAAU;QACrC,gBAAgB,EAAE,SAAS;QAC3B,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,MAAM;YACjB,SAAS,EAAE,CAAC,CAAC,QAAQ;YACrB,kBAAkB,EAAE,CAAC,CAAC,gBAAgB;YACtC,eAAe,EAAE,CAAC,CAAC,cAAc;SAClC,CAAC,CAAC;QACH,qBAAqB,EAAE,MAAM,CAAC,oBAAoB;QAClD,WAAW,EAAE,mBAAmB;KACjC,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * atr_list_rules MCP tool - List and filter ATR rules
3
+ * @module agent-threat-rules/mcp-tools/list-rules
4
+ */
5
+ import type { ATREngine } from '../engine.js';
6
+ export interface ListRulesInput {
7
+ category?: string;
8
+ severity?: string;
9
+ search?: string;
10
+ }
11
+ export declare function handleListRules(engine: ATREngine, args: Record<string, unknown>): {
12
+ content: Array<{
13
+ type: string;
14
+ text: string;
15
+ }>;
16
+ };
17
+ //# sourceMappingURL=list-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-rules.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/list-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACjF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CAgDA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * atr_list_rules MCP tool - List and filter ATR rules
3
+ * @module agent-threat-rules/mcp-tools/list-rules
4
+ */
5
+ export function handleListRules(engine, args) {
6
+ const category = args['category'];
7
+ const severity = args['severity'];
8
+ const search = args['search'];
9
+ let rules = [...engine.getRules()];
10
+ if (category) {
11
+ rules = rules.filter((r) => r.tags.category === category);
12
+ }
13
+ if (severity) {
14
+ rules = rules.filter((r) => r.severity === severity.toLowerCase());
15
+ }
16
+ if (search) {
17
+ const term = search.toLowerCase();
18
+ rules = rules.filter((r) => r.title.toLowerCase().includes(term) ||
19
+ r.description.toLowerCase().includes(term) ||
20
+ r.id.toLowerCase().includes(term) ||
21
+ r.tags.category.toLowerCase().includes(term));
22
+ }
23
+ const result = {
24
+ total: rules.length,
25
+ filters_applied: {
26
+ ...(category ? { category } : {}),
27
+ ...(severity ? { severity } : {}),
28
+ ...(search ? { search } : {}),
29
+ },
30
+ rules: rules.map((r) => ({
31
+ id: r.id,
32
+ title: r.title,
33
+ severity: r.severity,
34
+ status: r.status,
35
+ category: r.tags.category,
36
+ source_type: r.agent_source.type,
37
+ description: r.description,
38
+ actions: r.response.actions,
39
+ })),
40
+ };
41
+ return {
42
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
43
+ };
44
+ }
45
+ //# sourceMappingURL=list-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-rules.js","sourceRoot":"","sources":["../../src/mcp-tools/list-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,IAA6B;IAG9E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAuB,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAuB,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAuB,CAAC;IAEpD,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAClC,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACpC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC/C,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,eAAe,EAAE;YACf,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B;QACD,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;YACzB,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI;YAChC,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO;SAC5B,CAAC,CAAC;KACJ,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * atr_scan MCP tool - Scan content for agent threats
3
+ * @module agent-threat-rules/mcp-tools/scan
4
+ */
5
+ import type { ATREngine } from '../engine.js';
6
+ export interface ScanInput {
7
+ content: string;
8
+ event_type?: string;
9
+ min_severity?: string;
10
+ }
11
+ export declare function handleScan(engine: ATREngine, args: Record<string, unknown>): {
12
+ content: Array<{
13
+ type: string;
14
+ text: string;
15
+ }>;
16
+ isError?: boolean;
17
+ };
18
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/scan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC5E,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CA+DA"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * atr_scan MCP tool - Scan content for agent threats
3
+ * @module agent-threat-rules/mcp-tools/scan
4
+ */
5
+ const SEVERITY_ORDER = {
6
+ informational: 0,
7
+ low: 1,
8
+ medium: 2,
9
+ high: 3,
10
+ critical: 4,
11
+ };
12
+ const VALID_EVENT_TYPES = new Set([
13
+ 'llm_input',
14
+ 'llm_output',
15
+ 'tool_call',
16
+ 'tool_response',
17
+ 'agent_behavior',
18
+ 'multi_agent_message',
19
+ ]);
20
+ export function handleScan(engine, args) {
21
+ const content = args['content'];
22
+ if (typeof content !== 'string' || content.trim().length === 0) {
23
+ return {
24
+ content: [{ type: 'text', text: 'Error: "content" is required and must be a non-empty string.' }],
25
+ isError: true,
26
+ };
27
+ }
28
+ const eventTypeRaw = args['event_type'] ?? 'llm_input';
29
+ if (!VALID_EVENT_TYPES.has(eventTypeRaw)) {
30
+ return {
31
+ content: [{ type: 'text', text: `Error: Invalid event_type "${eventTypeRaw}". Valid types: ${[...VALID_EVENT_TYPES].join(', ')}` }],
32
+ isError: true,
33
+ };
34
+ }
35
+ const minSeverity = (args['min_severity'] ?? 'informational').toLowerCase();
36
+ if (!(minSeverity in SEVERITY_ORDER)) {
37
+ return {
38
+ content: [{ type: 'text', text: `Error: Invalid min_severity "${minSeverity}". Valid: informational, low, medium, high, critical` }],
39
+ isError: true,
40
+ };
41
+ }
42
+ const minIdx = SEVERITY_ORDER[minSeverity] ?? 0;
43
+ const event = {
44
+ type: eventTypeRaw,
45
+ timestamp: new Date().toISOString(),
46
+ content: content,
47
+ fields: {
48
+ user_input: content,
49
+ agent_output: content,
50
+ tool_response: content,
51
+ content: content,
52
+ },
53
+ };
54
+ const matches = engine.evaluate(event);
55
+ const filtered = matches.filter((m) => (SEVERITY_ORDER[m.rule.severity] ?? 0) >= minIdx);
56
+ const result = {
57
+ threats_found: filtered.length,
58
+ scan_timestamp: event.timestamp,
59
+ event_type: eventTypeRaw,
60
+ matches: filtered.map((m) => ({
61
+ rule_id: m.rule.id,
62
+ title: m.rule.title,
63
+ severity: m.rule.severity,
64
+ category: m.rule.tags.category,
65
+ confidence: Math.round(m.confidence * 100),
66
+ description: m.rule.description,
67
+ matched_patterns: m.matchedPatterns,
68
+ recommended_actions: m.rule.response.actions,
69
+ })),
70
+ };
71
+ return {
72
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
73
+ };
74
+ }
75
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/mcp-tools/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * atr_submit_proposal MCP tool - Generate ATR rule draft from threat description
3
+ * @module agent-threat-rules/mcp-tools/submit-proposal
4
+ */
5
+ export declare function handleSubmitProposal(args: Record<string, unknown>): {
6
+ content: Array<{
7
+ type: string;
8
+ text: string;
9
+ }>;
10
+ isError?: boolean;
11
+ };
12
+ //# sourceMappingURL=submit-proposal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-proposal.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/submit-proposal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACnE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CA+EA"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * atr_submit_proposal MCP tool - Generate ATR rule draft from threat description
3
+ * @module agent-threat-rules/mcp-tools/submit-proposal
4
+ */
5
+ import { RuleScaffolder } from '../rule-scaffolder.js';
6
+ const VALID_CATEGORIES = new Set([
7
+ 'prompt-injection',
8
+ 'tool-poisoning',
9
+ 'context-exfiltration',
10
+ 'agent-manipulation',
11
+ 'privilege-escalation',
12
+ 'excessive-autonomy',
13
+ 'data-poisoning',
14
+ 'model-abuse',
15
+ 'skill-compromise',
16
+ ]);
17
+ const VALID_SEVERITIES = new Set([
18
+ 'critical',
19
+ 'high',
20
+ 'medium',
21
+ 'low',
22
+ 'informational',
23
+ ]);
24
+ export function handleSubmitProposal(args) {
25
+ const title = args['title'];
26
+ const category = args['category'];
27
+ const attackDescription = args['attack_description'];
28
+ const examplePayloads = args['example_payloads'];
29
+ const severity = args['severity'];
30
+ const mitreRefs = args['mitre_refs'];
31
+ // Validate required fields
32
+ if (typeof title !== 'string' || title.trim().length === 0) {
33
+ return {
34
+ content: [{ type: 'text', text: 'Error: "title" is required and must be a non-empty string.' }],
35
+ isError: true,
36
+ };
37
+ }
38
+ if (typeof category !== 'string' || !VALID_CATEGORIES.has(category)) {
39
+ return {
40
+ content: [{ type: 'text', text: `Error: "category" must be one of: ${[...VALID_CATEGORIES].join(', ')}` }],
41
+ isError: true,
42
+ };
43
+ }
44
+ if (typeof attackDescription !== 'string' || attackDescription.trim().length === 0) {
45
+ return {
46
+ content: [{ type: 'text', text: 'Error: "attack_description" is required and must be a non-empty string.' }],
47
+ isError: true,
48
+ };
49
+ }
50
+ if (!Array.isArray(examplePayloads) || examplePayloads.length === 0) {
51
+ return {
52
+ content: [{ type: 'text', text: 'Error: "example_payloads" must be a non-empty array of strings.' }],
53
+ isError: true,
54
+ };
55
+ }
56
+ for (const payload of examplePayloads) {
57
+ if (typeof payload !== 'string') {
58
+ return {
59
+ content: [{ type: 'text', text: 'Error: All items in "example_payloads" must be strings.' }],
60
+ isError: true,
61
+ };
62
+ }
63
+ }
64
+ if (severity && !VALID_SEVERITIES.has(severity)) {
65
+ return {
66
+ content: [{ type: 'text', text: `Error: "severity" must be one of: ${[...VALID_SEVERITIES].join(', ')}` }],
67
+ isError: true,
68
+ };
69
+ }
70
+ const scaffolder = new RuleScaffolder();
71
+ const result = scaffolder.scaffold({
72
+ title: title.trim(),
73
+ category: category,
74
+ attackDescription: attackDescription.trim(),
75
+ examplePayloads: examplePayloads.map((p) => p.trim()),
76
+ severity: severity,
77
+ mitreRefs: mitreRefs,
78
+ });
79
+ const response = {
80
+ generated_id: result.id,
81
+ warnings: result.warnings,
82
+ yaml_rule: result.yaml,
83
+ next_steps: [
84
+ 'Review and refine the generated detection patterns',
85
+ 'Add more specific regex patterns for your use case',
86
+ 'Test with atr_scan using example payloads',
87
+ 'Validate with atr_validate_rule before submitting',
88
+ 'Submit as a PR to the ATR repository',
89
+ ],
90
+ };
91
+ return {
92
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
93
+ };
94
+ }
95
+ //# sourceMappingURL=submit-proposal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-proposal.js","sourceRoot":"","sources":["../../src/mcp-tools/submit-proposal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * atr_threat_summary MCP tool - Aggregate threat statistics
3
+ * @module agent-threat-rules/mcp-tools/threat-summary
4
+ */
5
+ import type { ATREngine } from '../engine.js';
6
+ export declare function handleThreatSummary(engine: ATREngine, args: Record<string, unknown>): {
7
+ content: Array<{
8
+ type: string;
9
+ text: string;
10
+ }>;
11
+ };
12
+ //# sourceMappingURL=threat-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threat-summary.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/threat-summary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CA8EA"}