@panguard-ai/atr 1.4.3 → 1.5.1

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 (274) hide show
  1. package/dist/action-executor.d.ts +44 -0
  2. package/dist/action-executor.d.ts.map +1 -0
  3. package/dist/action-executor.js +130 -0
  4. package/dist/action-executor.js.map +1 -0
  5. package/dist/adapters/default-adapter.d.ts +24 -0
  6. package/dist/adapters/default-adapter.d.ts.map +1 -0
  7. package/dist/adapters/default-adapter.js +51 -0
  8. package/dist/adapters/default-adapter.js.map +1 -0
  9. package/dist/adapters/stdio-adapter.d.ts +30 -0
  10. package/dist/adapters/stdio-adapter.d.ts.map +1 -0
  11. package/dist/adapters/stdio-adapter.js +128 -0
  12. package/dist/adapters/stdio-adapter.js.map +1 -0
  13. package/dist/badge.d.ts +42 -0
  14. package/dist/badge.d.ts.map +1 -0
  15. package/dist/badge.js +163 -0
  16. package/dist/badge.js.map +1 -0
  17. package/dist/capability-extractor.d.ts +35 -0
  18. package/dist/capability-extractor.d.ts.map +1 -0
  19. package/dist/capability-extractor.js +91 -0
  20. package/dist/capability-extractor.js.map +1 -0
  21. package/dist/cli/scan-handler.d.ts +21 -0
  22. package/dist/cli/scan-handler.d.ts.map +1 -0
  23. package/dist/cli/scan-handler.js +276 -0
  24. package/dist/cli/scan-handler.js.map +1 -0
  25. package/dist/cli/tc-pipeline.d.ts +18 -0
  26. package/dist/cli/tc-pipeline.d.ts.map +1 -0
  27. package/dist/cli/tc-pipeline.js +295 -0
  28. package/dist/cli/tc-pipeline.js.map +1 -0
  29. package/dist/cli.d.ts +12 -0
  30. package/dist/cli.d.ts.map +1 -0
  31. package/dist/cli.js +894 -0
  32. package/dist/cli.js.map +1 -0
  33. package/dist/content-hash.d.ts +7 -0
  34. package/dist/content-hash.d.ts.map +1 -0
  35. package/dist/content-hash.js +10 -0
  36. package/dist/content-hash.js.map +1 -0
  37. package/dist/converters/elastic.d.ts +36 -0
  38. package/dist/converters/elastic.d.ts.map +1 -0
  39. package/dist/converters/elastic.js +125 -0
  40. package/dist/converters/elastic.js.map +1 -0
  41. package/dist/converters/generic-regex.d.ts +37 -0
  42. package/dist/converters/generic-regex.d.ts.map +1 -0
  43. package/dist/converters/generic-regex.js +59 -0
  44. package/dist/converters/generic-regex.js.map +1 -0
  45. package/dist/converters/index.d.ts +32 -0
  46. package/dist/converters/index.d.ts.map +1 -0
  47. package/dist/converters/index.js +38 -0
  48. package/dist/converters/index.js.map +1 -0
  49. package/dist/converters/sarif.d.ts +18 -0
  50. package/dist/converters/sarif.d.ts.map +1 -0
  51. package/dist/converters/sarif.js +142 -0
  52. package/dist/converters/sarif.js.map +1 -0
  53. package/dist/converters/splunk.d.ts +19 -0
  54. package/dist/converters/splunk.d.ts.map +1 -0
  55. package/dist/converters/splunk.js +148 -0
  56. package/dist/converters/splunk.js.map +1 -0
  57. package/dist/coverage-analyzer.d.ts +43 -0
  58. package/dist/coverage-analyzer.d.ts.map +1 -0
  59. package/dist/coverage-analyzer.js +329 -0
  60. package/dist/coverage-analyzer.js.map +1 -0
  61. package/dist/embedding/build-corpus.d.ts +15 -0
  62. package/dist/embedding/build-corpus.d.ts.map +1 -0
  63. package/dist/embedding/build-corpus.js +105 -0
  64. package/dist/embedding/build-corpus.js.map +1 -0
  65. package/dist/embedding/model-loader.d.ts +41 -0
  66. package/dist/embedding/model-loader.d.ts.map +1 -0
  67. package/dist/embedding/model-loader.js +90 -0
  68. package/dist/embedding/model-loader.js.map +1 -0
  69. package/dist/embedding/vector-store.d.ts +41 -0
  70. package/dist/embedding/vector-store.d.ts.map +1 -0
  71. package/dist/embedding/vector-store.js +70 -0
  72. package/dist/embedding/vector-store.js.map +1 -0
  73. package/dist/engine.d.ts +222 -0
  74. package/dist/engine.d.ts.map +1 -0
  75. package/dist/engine.js +1185 -0
  76. package/dist/engine.js.map +1 -0
  77. package/dist/eval/corpus.d.ts +42 -0
  78. package/dist/eval/corpus.d.ts.map +1 -0
  79. package/dist/eval/corpus.js +427 -0
  80. package/dist/eval/corpus.js.map +1 -0
  81. package/dist/eval/eval-harness.d.ts +44 -0
  82. package/dist/eval/eval-harness.d.ts.map +1 -0
  83. package/dist/eval/eval-harness.js +296 -0
  84. package/dist/eval/eval-harness.js.map +1 -0
  85. package/dist/eval/index.d.ts +13 -0
  86. package/dist/eval/index.d.ts.map +1 -0
  87. package/dist/eval/index.js +9 -0
  88. package/dist/eval/index.js.map +1 -0
  89. package/dist/eval/metrics.d.ts +74 -0
  90. package/dist/eval/metrics.d.ts.map +1 -0
  91. package/dist/eval/metrics.js +108 -0
  92. package/dist/eval/metrics.js.map +1 -0
  93. package/dist/eval/pint-corpus.d.ts +34 -0
  94. package/dist/eval/pint-corpus.d.ts.map +1 -0
  95. package/dist/eval/pint-corpus.js +113 -0
  96. package/dist/eval/pint-corpus.js.map +1 -0
  97. package/dist/eval/rule-corpus.d.ts +9 -0
  98. package/dist/eval/rule-corpus.d.ts.map +1 -0
  99. package/dist/eval/rule-corpus.js +4780 -0
  100. package/dist/eval/rule-corpus.js.map +1 -0
  101. package/dist/eval/rule-metrics.d.ts +34 -0
  102. package/dist/eval/rule-metrics.d.ts.map +1 -0
  103. package/dist/eval/rule-metrics.js +92 -0
  104. package/dist/eval/rule-metrics.js.map +1 -0
  105. package/dist/eval/run-eval.d.ts +7 -0
  106. package/dist/eval/run-eval.d.ts.map +1 -0
  107. package/dist/eval/run-eval.js +11 -0
  108. package/dist/eval/run-eval.js.map +1 -0
  109. package/dist/eval/run-pint-benchmark.d.ts +18 -0
  110. package/dist/eval/run-pint-benchmark.d.ts.map +1 -0
  111. package/dist/eval/run-pint-benchmark.js +159 -0
  112. package/dist/eval/run-pint-benchmark.js.map +1 -0
  113. package/dist/eval/skill-benchmark.d.ts +66 -0
  114. package/dist/eval/skill-benchmark.d.ts.map +1 -0
  115. package/dist/eval/skill-benchmark.js +194 -0
  116. package/dist/eval/skill-benchmark.js.map +1 -0
  117. package/dist/flywheel.d.ts +54 -0
  118. package/dist/flywheel.d.ts.map +1 -0
  119. package/dist/flywheel.js +121 -0
  120. package/dist/flywheel.js.map +1 -0
  121. package/dist/hook-handler.d.ts +61 -0
  122. package/dist/hook-handler.d.ts.map +1 -0
  123. package/dist/hook-handler.js +178 -0
  124. package/dist/hook-handler.js.map +1 -0
  125. package/dist/index.d.ts +8 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/{src/index.ts → dist/index.js} +1 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/layer-integration.d.ts +55 -0
  130. package/dist/layer-integration.d.ts.map +1 -0
  131. package/dist/layer-integration.js +187 -0
  132. package/dist/layer-integration.js.map +1 -0
  133. package/dist/loader.d.ts +18 -0
  134. package/dist/loader.d.ts.map +1 -0
  135. package/dist/loader.js +129 -0
  136. package/dist/loader.js.map +1 -0
  137. package/dist/mcp-server.d.ts +13 -0
  138. package/dist/mcp-server.d.ts.map +1 -0
  139. package/dist/mcp-server.js +246 -0
  140. package/dist/mcp-server.js.map +1 -0
  141. package/dist/mcp-tools/coverage-gaps.d.ts +13 -0
  142. package/dist/mcp-tools/coverage-gaps.d.ts.map +1 -0
  143. package/dist/mcp-tools/coverage-gaps.js +55 -0
  144. package/dist/mcp-tools/coverage-gaps.js.map +1 -0
  145. package/dist/mcp-tools/list-rules.d.ts +17 -0
  146. package/dist/mcp-tools/list-rules.d.ts.map +1 -0
  147. package/dist/mcp-tools/list-rules.js +45 -0
  148. package/dist/mcp-tools/list-rules.js.map +1 -0
  149. package/dist/mcp-tools/scan-skill.d.ts +17 -0
  150. package/dist/mcp-tools/scan-skill.d.ts.map +1 -0
  151. package/dist/mcp-tools/scan-skill.js +65 -0
  152. package/dist/mcp-tools/scan-skill.js.map +1 -0
  153. package/dist/mcp-tools/scan.d.ts +24 -0
  154. package/dist/mcp-tools/scan.d.ts.map +1 -0
  155. package/dist/mcp-tools/scan.js +94 -0
  156. package/dist/mcp-tools/scan.js.map +1 -0
  157. package/dist/mcp-tools/submit-proposal.d.ts +12 -0
  158. package/dist/mcp-tools/submit-proposal.d.ts.map +1 -0
  159. package/dist/mcp-tools/submit-proposal.js +103 -0
  160. package/dist/mcp-tools/submit-proposal.js.map +1 -0
  161. package/dist/mcp-tools/threat-summary.d.ts +12 -0
  162. package/dist/mcp-tools/threat-summary.d.ts.map +1 -0
  163. package/dist/mcp-tools/threat-summary.js +74 -0
  164. package/dist/mcp-tools/threat-summary.js.map +1 -0
  165. package/dist/mcp-tools/validate.d.ts +15 -0
  166. package/dist/mcp-tools/validate.d.ts.map +1 -0
  167. package/dist/mcp-tools/validate.js +51 -0
  168. package/dist/mcp-tools/validate.js.map +1 -0
  169. package/dist/modules/embedding.d.ts +71 -0
  170. package/dist/modules/embedding.d.ts.map +1 -0
  171. package/dist/modules/embedding.js +141 -0
  172. package/dist/modules/embedding.js.map +1 -0
  173. package/dist/modules/index.d.ts +144 -0
  174. package/dist/modules/index.d.ts.map +1 -0
  175. package/dist/modules/index.js +82 -0
  176. package/dist/modules/index.js.map +1 -0
  177. package/dist/modules/semantic.d.ts +106 -0
  178. package/dist/modules/semantic.d.ts.map +1 -0
  179. package/dist/modules/semantic.js +359 -0
  180. package/dist/modules/semantic.js.map +1 -0
  181. package/dist/modules/session.d.ts +70 -0
  182. package/dist/modules/session.d.ts.map +1 -0
  183. package/dist/modules/session.js +128 -0
  184. package/dist/modules/session.js.map +1 -0
  185. package/dist/quality/adapters/atr.d.ts +65 -0
  186. package/dist/quality/adapters/atr.d.ts.map +1 -0
  187. package/dist/quality/adapters/atr.js +154 -0
  188. package/dist/quality/adapters/atr.js.map +1 -0
  189. package/dist/quality/adapters/index.d.ts +10 -0
  190. package/dist/quality/adapters/index.d.ts.map +1 -0
  191. package/dist/quality/adapters/index.js +10 -0
  192. package/dist/quality/adapters/index.js.map +1 -0
  193. package/dist/quality/compute-confidence.d.ts +45 -0
  194. package/dist/quality/compute-confidence.d.ts.map +1 -0
  195. package/dist/quality/compute-confidence.js +133 -0
  196. package/dist/quality/compute-confidence.js.map +1 -0
  197. package/dist/quality/index.d.ts +36 -0
  198. package/dist/quality/index.d.ts.map +1 -0
  199. package/dist/quality/index.js +39 -0
  200. package/dist/quality/index.js.map +1 -0
  201. package/dist/quality/quality-gate.d.ts +86 -0
  202. package/dist/quality/quality-gate.d.ts.map +1 -0
  203. package/dist/quality/quality-gate.js +187 -0
  204. package/dist/quality/quality-gate.js.map +1 -0
  205. package/dist/quality/types.d.ts +129 -0
  206. package/dist/quality/types.d.ts.map +1 -0
  207. package/dist/quality/types.js +10 -0
  208. package/dist/quality/types.js.map +1 -0
  209. package/dist/quality/validate-maturity.d.ts +51 -0
  210. package/dist/quality/validate-maturity.d.ts.map +1 -0
  211. package/dist/quality/validate-maturity.js +134 -0
  212. package/dist/quality/validate-maturity.js.map +1 -0
  213. package/dist/quality.d.ts +8 -0
  214. package/dist/quality.d.ts.map +1 -0
  215. package/dist/quality.js +8 -0
  216. package/dist/quality.js.map +1 -0
  217. package/dist/rule-scaffolder.d.ts +53 -0
  218. package/dist/rule-scaffolder.d.ts.map +1 -0
  219. package/dist/rule-scaffolder.js +301 -0
  220. package/dist/rule-scaffolder.js.map +1 -0
  221. package/dist/session-tracker.d.ts +58 -0
  222. package/dist/session-tracker.d.ts.map +1 -0
  223. package/dist/session-tracker.js +176 -0
  224. package/dist/session-tracker.js.map +1 -0
  225. package/dist/shadow-evaluator.d.ts +48 -0
  226. package/dist/shadow-evaluator.d.ts.map +1 -0
  227. package/dist/shadow-evaluator.js +129 -0
  228. package/dist/shadow-evaluator.js.map +1 -0
  229. package/dist/skill-fingerprint.d.ts +85 -0
  230. package/dist/skill-fingerprint.d.ts.map +1 -0
  231. package/dist/skill-fingerprint.js +284 -0
  232. package/dist/skill-fingerprint.js.map +1 -0
  233. package/dist/tc-reporter.d.ts +50 -0
  234. package/dist/tc-reporter.d.ts.map +1 -0
  235. package/dist/tc-reporter.js +164 -0
  236. package/dist/tc-reporter.js.map +1 -0
  237. package/dist/tier0-invariant.d.ts +49 -0
  238. package/dist/tier0-invariant.d.ts.map +1 -0
  239. package/dist/tier0-invariant.js +185 -0
  240. package/dist/tier0-invariant.js.map +1 -0
  241. package/dist/tier1-blacklist.d.ts +48 -0
  242. package/dist/tier1-blacklist.d.ts.map +1 -0
  243. package/dist/tier1-blacklist.js +92 -0
  244. package/dist/tier1-blacklist.js.map +1 -0
  245. package/dist/types.d.ts +232 -0
  246. package/dist/types.d.ts.map +1 -0
  247. package/dist/types.js +6 -0
  248. package/dist/types.js.map +1 -0
  249. package/dist/verdict.d.ts +26 -0
  250. package/dist/verdict.d.ts.map +1 -0
  251. package/dist/verdict.js +127 -0
  252. package/dist/verdict.js.map +1 -0
  253. package/package.json +16 -4
  254. package/.github/ISSUE_TEMPLATE/evasion-report.yml +0 -75
  255. package/.github/ISSUE_TEMPLATE/false-positive.yml +0 -31
  256. package/.github/ISSUE_TEMPLATE/mirofish-prediction.yml +0 -128
  257. package/.github/ISSUE_TEMPLATE/new-rule.yml +0 -37
  258. package/.github/PULL_REQUEST_TEMPLATE.md +0 -23
  259. package/.github/workflows/rule-quality.yml +0 -203
  260. package/.github/workflows/validate.yml +0 -42
  261. package/CHANGELOG.md +0 -30
  262. package/CONTRIBUTING.md +0 -168
  263. package/CONTRIBUTORS.md +0 -28
  264. package/COVERAGE.md +0 -135
  265. package/LIMITATIONS.md +0 -154
  266. package/SECURITY.md +0 -48
  267. package/THREAT-MODEL.md +0 -243
  268. package/docs/contribution-paths.md +0 -202
  269. package/docs/mirofish-prediction-guide.md +0 -304
  270. package/docs/quick-start.md +0 -245
  271. package/docs/rule-writing-guide.md +0 -647
  272. package/docs/schema-spec.md +0 -594
  273. package/examples/how-to-write-a-rule.md +0 -251
  274. package/tsconfig.json +0 -17
@@ -0,0 +1,246 @@
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 { handleScanSkill } from './mcp-tools/scan-skill.js';
18
+ import { handleListRules } from './mcp-tools/list-rules.js';
19
+ import { handleValidate } from './mcp-tools/validate.js';
20
+ import { handleSubmitProposal } from './mcp-tools/submit-proposal.js';
21
+ import { handleCoverageGaps } from './mcp-tools/coverage-gaps.js';
22
+ import { handleThreatSummary } from './mcp-tools/threat-summary.js';
23
+ const __filename = fileURLToPath(import.meta.url);
24
+ const __dirname = dirname(__filename);
25
+ const RULES_DIR = resolve(__dirname, '..', 'rules');
26
+ const TOOLS = [
27
+ {
28
+ name: 'atr_scan',
29
+ description: 'Scan text content for AI agent security threats using ATR detection rules. Returns matched rules with severity, confidence, and recommended actions.',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ content: {
34
+ type: 'string',
35
+ description: 'The text content to scan for threats (prompt, tool response, agent output, etc.)',
36
+ },
37
+ event_type: {
38
+ type: 'string',
39
+ enum: ['llm_input', 'llm_output', 'tool_call', 'tool_response', 'agent_behavior', 'multi_agent_message'],
40
+ description: 'Type of agent event being scanned. Defaults to "llm_input".',
41
+ },
42
+ min_severity: {
43
+ type: 'string',
44
+ enum: ['informational', 'low', 'medium', 'high', 'critical'],
45
+ description: 'Minimum severity level to include in results. Defaults to "informational".',
46
+ },
47
+ },
48
+ required: ['content'],
49
+ },
50
+ },
51
+ {
52
+ name: 'atr_scan_skill',
53
+ description: 'Scan SKILL.md file content for AI agent security threats. Uses skill-specific ATR rules to avoid false positives from MCP-oriented rules. Returns matches with severity, content_hash for deduplication, and recommended actions.',
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ content: {
58
+ type: 'string',
59
+ description: 'The SKILL.md file content to scan for threats.',
60
+ },
61
+ file_name: {
62
+ type: 'string',
63
+ description: 'Optional file name for the SKILL.md being scanned.',
64
+ },
65
+ min_severity: {
66
+ type: 'string',
67
+ enum: ['informational', 'low', 'medium', 'high', 'critical'],
68
+ description: 'Minimum severity level to include in results. Defaults to "medium".',
69
+ },
70
+ },
71
+ required: ['content'],
72
+ },
73
+ },
74
+ {
75
+ name: 'atr_list_rules',
76
+ description: 'List and filter available ATR detection rules. Search by category, severity, or keyword.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ category: {
81
+ type: 'string',
82
+ enum: [
83
+ 'prompt-injection', 'tool-poisoning', 'context-exfiltration',
84
+ 'agent-manipulation', 'privilege-escalation', 'excessive-autonomy',
85
+ 'data-poisoning', 'model-abuse', 'skill-compromise',
86
+ ],
87
+ description: 'Filter rules by threat category.',
88
+ },
89
+ severity: {
90
+ type: 'string',
91
+ enum: ['informational', 'low', 'medium', 'high', 'critical'],
92
+ description: 'Filter rules by severity level.',
93
+ },
94
+ search: {
95
+ type: 'string',
96
+ description: 'Search rules by keyword in title, description, or ID.',
97
+ },
98
+ },
99
+ },
100
+ },
101
+ {
102
+ name: 'atr_validate_rule',
103
+ description: 'Validate an ATR rule written in YAML format. Checks required fields, enum values, and structural correctness.',
104
+ inputSchema: {
105
+ type: 'object',
106
+ properties: {
107
+ yaml_content: {
108
+ type: 'string',
109
+ description: 'The ATR rule YAML content to validate.',
110
+ },
111
+ },
112
+ required: ['yaml_content'],
113
+ },
114
+ },
115
+ {
116
+ name: 'atr_submit_proposal',
117
+ description: 'Generate a draft ATR rule from a threat description. Produces YAML with detection patterns derived from example payloads.',
118
+ inputSchema: {
119
+ type: 'object',
120
+ properties: {
121
+ title: {
122
+ type: 'string',
123
+ description: 'Title for the new rule (e.g., "Multi-turn Context Hijacking").',
124
+ },
125
+ category: {
126
+ type: 'string',
127
+ enum: [
128
+ 'prompt-injection', 'tool-poisoning', 'context-exfiltration',
129
+ 'agent-manipulation', 'privilege-escalation', 'excessive-autonomy',
130
+ 'data-poisoning', 'model-abuse', 'skill-compromise',
131
+ ],
132
+ description: 'Threat category for the rule.',
133
+ },
134
+ attack_description: {
135
+ type: 'string',
136
+ description: 'Detailed description of the attack this rule detects.',
137
+ },
138
+ example_payloads: {
139
+ type: 'array',
140
+ items: { type: 'string' },
141
+ description: 'Example attack payloads to generate detection patterns from.',
142
+ },
143
+ severity: {
144
+ type: 'string',
145
+ enum: ['informational', 'low', 'medium', 'high', 'critical'],
146
+ description: 'Severity level. Defaults to "medium".',
147
+ },
148
+ mitre_refs: {
149
+ type: 'array',
150
+ items: { type: 'string' },
151
+ description: 'Optional MITRE ATLAS reference IDs (e.g., "AML.T0051").',
152
+ },
153
+ },
154
+ required: ['title', 'category', 'attack_description', 'example_payloads'],
155
+ },
156
+ },
157
+ {
158
+ name: 'atr_coverage_gaps',
159
+ description: 'Analyze ATR rule coverage against security frameworks (OWASP Agentic AI, MITRE ATLAS). Identifies uncovered threat categories.',
160
+ inputSchema: {
161
+ type: 'object',
162
+ properties: {
163
+ framework: {
164
+ type: 'string',
165
+ enum: ['owasp_agentic', 'mitre_atlas', 'all'],
166
+ description: 'Security framework to analyze against. Defaults to "all".',
167
+ },
168
+ },
169
+ },
170
+ },
171
+ {
172
+ name: 'atr_threat_summary',
173
+ description: 'Get aggregated statistics about loaded ATR rules. Shows distribution by category, severity, status, and test coverage.',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ category: {
178
+ type: 'string',
179
+ enum: [
180
+ 'prompt-injection', 'tool-poisoning', 'context-exfiltration',
181
+ 'agent-manipulation', 'privilege-escalation', 'excessive-autonomy',
182
+ 'data-poisoning', 'model-abuse', 'skill-compromise',
183
+ ],
184
+ description: 'Optional: filter statistics to a single threat category.',
185
+ },
186
+ },
187
+ },
188
+ },
189
+ ];
190
+ export async function createMCPServer() {
191
+ const engine = new ATREngine({ rulesDir: RULES_DIR });
192
+ const ruleCount = await engine.loadRules();
193
+ const server = new Server({
194
+ name: 'atr-mcp-server',
195
+ version: '0.2.1',
196
+ }, {
197
+ capabilities: {
198
+ tools: {},
199
+ },
200
+ });
201
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
202
+ tools: TOOLS,
203
+ }));
204
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
205
+ const { name, arguments: args } = request.params;
206
+ const toolArgs = (args ?? {});
207
+ switch (name) {
208
+ case 'atr_scan':
209
+ return await handleScan(engine, toolArgs);
210
+ case 'atr_scan_skill':
211
+ return await handleScanSkill(engine, toolArgs);
212
+ case 'atr_list_rules':
213
+ return handleListRules(engine, toolArgs);
214
+ case 'atr_validate_rule':
215
+ return handleValidate(toolArgs);
216
+ case 'atr_submit_proposal':
217
+ return handleSubmitProposal(toolArgs);
218
+ case 'atr_coverage_gaps':
219
+ return handleCoverageGaps(engine, toolArgs);
220
+ case 'atr_threat_summary':
221
+ return handleThreatSummary(engine, toolArgs);
222
+ default:
223
+ return {
224
+ content: [{ type: 'text', text: `Error: Unknown tool "${name}".` }],
225
+ isError: true,
226
+ };
227
+ }
228
+ });
229
+ return server;
230
+ }
231
+ export async function startMCPServer() {
232
+ const server = await createMCPServer();
233
+ const transport = new StdioServerTransport();
234
+ await server.connect(transport);
235
+ }
236
+ // Auto-start when run directly
237
+ const isDirectExecution = process.argv[1] &&
238
+ (process.argv[1].endsWith('mcp-server.js') ||
239
+ process.argv[1].endsWith('mcp-server.ts'));
240
+ if (isDirectExecution) {
241
+ startMCPServer().catch((err) => {
242
+ process.stderr.write(`ATR MCP Server error: ${err instanceof Error ? err.message : String(err)}\n`);
243
+ process.exit(1);
244
+ });
245
+ }
246
+ //# 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,17 @@
1
+ /**
2
+ * atr_scan_skill MCP tool - Scan SKILL.md content for threats
3
+ *
4
+ * Uses scanSkillFull() which only runs skill-targeted rules (scan_target: skill)
5
+ * to avoid false positives from MCP-oriented rules.
6
+ *
7
+ * @module agent-threat-rules/mcp-tools/scan-skill
8
+ */
9
+ import type { ATREngine } from '../engine.js';
10
+ export declare function handleScanSkill(engine: ATREngine, args: Record<string, unknown>): Promise<{
11
+ content: Array<{
12
+ type: string;
13
+ text: string;
14
+ }>;
15
+ isError?: boolean;
16
+ }>;
17
+ //# sourceMappingURL=scan-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-skill.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/scan-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAU9C,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IACT,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,CAAC,CAyDD"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * atr_scan_skill MCP tool - Scan SKILL.md content for threats
3
+ *
4
+ * Uses scanSkillFull() which only runs skill-targeted rules (scan_target: skill)
5
+ * to avoid false positives from MCP-oriented rules.
6
+ *
7
+ * @module agent-threat-rules/mcp-tools/scan-skill
8
+ */
9
+ const SEVERITY_ORDER = {
10
+ informational: 0,
11
+ low: 1,
12
+ medium: 2,
13
+ high: 3,
14
+ critical: 4,
15
+ };
16
+ export async function handleScanSkill(engine, args) {
17
+ const MAX_CONTENT_LENGTH = 1_000_000; // 1MB for SKILL.md files
18
+ const content = args['content'];
19
+ if (typeof content !== 'string' || content.trim().length === 0) {
20
+ return {
21
+ content: [{ type: 'text', text: 'Error: "content" is required and must be a non-empty string.' }],
22
+ isError: true,
23
+ };
24
+ }
25
+ if (content.length > MAX_CONTENT_LENGTH) {
26
+ return {
27
+ content: [{ type: 'text', text: `Error: content exceeds maximum size of ${MAX_CONTENT_LENGTH} characters.` }],
28
+ isError: true,
29
+ };
30
+ }
31
+ const minSeverity = (args['min_severity'] ?? 'medium').toLowerCase();
32
+ if (!(minSeverity in SEVERITY_ORDER)) {
33
+ return {
34
+ content: [{ type: 'text', text: `Error: Invalid min_severity "${minSeverity}". Valid: informational, low, medium, high, critical` }],
35
+ isError: true,
36
+ };
37
+ }
38
+ const fileName = typeof args['file_name'] === 'string' ? args['file_name'] : undefined;
39
+ const minIdx = SEVERITY_ORDER[minSeverity] ?? 0;
40
+ const scanResult = engine.scanSkillFull(content, fileName);
41
+ const filtered = scanResult.matches.filter((m) => (SEVERITY_ORDER[m.rule.severity] ?? 0) >= minIdx);
42
+ const result = {
43
+ scan_type: scanResult.scan_type,
44
+ content_hash: scanResult.content_hash,
45
+ file_name: fileName,
46
+ threats_found: filtered.length,
47
+ scan_timestamp: scanResult.timestamp,
48
+ rules_loaded: scanResult.rules_loaded,
49
+ matches: filtered.map((m) => ({
50
+ rule_id: m.rule.id,
51
+ rule_version: m.rule.rule_version,
52
+ title: m.rule.title,
53
+ severity: m.rule.severity,
54
+ category: m.rule.tags.category,
55
+ confidence: Math.round(m.confidence * 100),
56
+ description: m.rule.description,
57
+ matched_patterns: m.matchedPatterns,
58
+ recommended_actions: m.rule.response.actions,
59
+ })),
60
+ };
61
+ return {
62
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
63
+ };
64
+ }
65
+ //# sourceMappingURL=scan-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-skill.js","sourceRoot":"","sources":["../../src/mcp-tools/scan-skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * atr_scan MCP tool - Scan content for agent threats
3
+ *
4
+ * Runs all configured detection layers:
5
+ * - Layer 1: Regex pattern matching (always)
6
+ * - Layer 2: Skill behavioral fingerprinting (if configured)
7
+ * - Layer 3: Semantic LLM-as-judge (if configured and triggered)
8
+ *
9
+ * @module agent-threat-rules/mcp-tools/scan
10
+ */
11
+ import type { ATREngine } from '../engine.js';
12
+ export interface ScanInput {
13
+ content: string;
14
+ event_type?: string;
15
+ min_severity?: string;
16
+ }
17
+ export declare function handleScan(engine: ATREngine, args: Record<string, unknown>): Promise<{
18
+ content: Array<{
19
+ type: string;
20
+ text: string;
21
+ }>;
22
+ isError?: boolean;
23
+ }>;
24
+ //# 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;;;;;;;;;GASG;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,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IAC1F,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,CAAC,CA6ED"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * atr_scan MCP tool - Scan content for agent threats
3
+ *
4
+ * Runs all configured detection layers:
5
+ * - Layer 1: Regex pattern matching (always)
6
+ * - Layer 2: Skill behavioral fingerprinting (if configured)
7
+ * - Layer 3: Semantic LLM-as-judge (if configured and triggered)
8
+ *
9
+ * @module agent-threat-rules/mcp-tools/scan
10
+ */
11
+ const SEVERITY_ORDER = {
12
+ informational: 0,
13
+ low: 1,
14
+ medium: 2,
15
+ high: 3,
16
+ critical: 4,
17
+ };
18
+ const VALID_EVENT_TYPES = new Set([
19
+ 'llm_input',
20
+ 'llm_output',
21
+ 'tool_call',
22
+ 'tool_response',
23
+ 'agent_behavior',
24
+ 'multi_agent_message',
25
+ ]);
26
+ export async function handleScan(engine, args) {
27
+ const MAX_CONTENT_LENGTH = 500_000;
28
+ const content = args['content'];
29
+ if (typeof content !== 'string' || content.trim().length === 0) {
30
+ return {
31
+ content: [{ type: 'text', text: 'Error: "content" is required and must be a non-empty string.' }],
32
+ isError: true,
33
+ };
34
+ }
35
+ if (content.length > MAX_CONTENT_LENGTH) {
36
+ return {
37
+ content: [{ type: 'text', text: `Error: content exceeds maximum size of ${MAX_CONTENT_LENGTH} characters.` }],
38
+ isError: true,
39
+ };
40
+ }
41
+ const eventTypeRaw = args['event_type'] ?? 'llm_input';
42
+ if (!VALID_EVENT_TYPES.has(eventTypeRaw)) {
43
+ return {
44
+ content: [{ type: 'text', text: `Error: Invalid event_type "${eventTypeRaw}". Valid types: ${[...VALID_EVENT_TYPES].join(', ')}` }],
45
+ isError: true,
46
+ };
47
+ }
48
+ const minSeverity = (args['min_severity'] ?? 'informational').toLowerCase();
49
+ if (!(minSeverity in SEVERITY_ORDER)) {
50
+ return {
51
+ content: [{ type: 'text', text: `Error: Invalid min_severity "${minSeverity}". Valid: informational, low, medium, high, critical` }],
52
+ isError: true,
53
+ };
54
+ }
55
+ const minIdx = SEVERITY_ORDER[minSeverity] ?? 0;
56
+ const event = {
57
+ type: eventTypeRaw,
58
+ timestamp: new Date().toISOString(),
59
+ content: content,
60
+ fields: {
61
+ user_input: content,
62
+ agent_output: content,
63
+ tool_response: content,
64
+ content: content,
65
+ },
66
+ };
67
+ // Use evaluateWithVerdict() to run all configured layers
68
+ const { verdict, layersUsed } = await engine.evaluateWithVerdict(event);
69
+ const filtered = verdict.matches.filter((m) => (SEVERITY_ORDER[m.rule.severity] ?? 0) >= minIdx);
70
+ const result = {
71
+ threats_found: filtered.length,
72
+ scan_timestamp: event.timestamp,
73
+ event_type: eventTypeRaw,
74
+ layers_used: layersUsed,
75
+ verdict: {
76
+ outcome: verdict.outcome,
77
+ reason: verdict.reason,
78
+ },
79
+ matches: filtered.map((m) => ({
80
+ rule_id: m.rule.id,
81
+ title: m.rule.title,
82
+ severity: m.rule.severity,
83
+ category: m.rule.tags.category,
84
+ confidence: Math.round(m.confidence * 100),
85
+ description: m.rule.description,
86
+ matched_patterns: m.matchedPatterns,
87
+ recommended_actions: m.rule.response.actions,
88
+ })),
89
+ };
90
+ return {
91
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
92
+ };
93
+ }
94
+ //# 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,CAwFA"}