security-controls-mcp 0.3.2__tar.gz → 0.3.3__tar.gz

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 (58) hide show
  1. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/.gitleaks.toml +2 -4
  2. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/CHANGELOG.md +18 -0
  3. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/PAID_STANDARDS_GUIDE.md +54 -145
  4. security_controls_mcp-0.3.3/PKG-INFO +288 -0
  5. security_controls_mcp-0.3.3/README.md +255 -0
  6. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/SECURITY.md +5 -4
  7. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/pyproject.toml +1 -1
  8. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/__init__.py +1 -1
  9. security_controls_mcp-0.3.3/src/security_controls_mcp.egg-info/PKG-INFO +288 -0
  10. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp.egg-info/SOURCES.txt +0 -13
  11. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/test_smoke.py +1 -7
  12. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/verify_production_ready.py +1 -3
  13. security_controls_mcp-0.3.2/CI-CD-PIPELINE.md +0 -622
  14. security_controls_mcp-0.3.2/CLAUDE_CODE_SETUP.md +0 -222
  15. security_controls_mcp-0.3.2/DEPLOYMENT_CHECKLIST.md +0 -327
  16. security_controls_mcp-0.3.2/INSTALL.md +0 -165
  17. security_controls_mcp-0.3.2/LEGAL_COMPLIANCE.md +0 -284
  18. security_controls_mcp-0.3.2/PKG-INFO +0 -556
  19. security_controls_mcp-0.3.2/QUICK_START.md +0 -169
  20. security_controls_mcp-0.3.2/README.md +0 -523
  21. security_controls_mcp-0.3.2/RELEASE_NOTES_v0.3.1.md +0 -56
  22. security_controls_mcp-0.3.2/SECURITY-TOOLS.md +0 -417
  23. security_controls_mcp-0.3.2/TESTING.md +0 -229
  24. security_controls_mcp-0.3.2/quality_test.py +0 -173
  25. security_controls_mcp-0.3.2/scf-extract-starter.py +0 -250
  26. security_controls_mcp-0.3.2/scf-query-tester.py +0 -238
  27. security_controls_mcp-0.3.2/src/security_controls_mcp.egg-info/PKG-INFO +0 -556
  28. security_controls_mcp-0.3.2/test_server.py +0 -68
  29. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/CLAUDE.md +0 -0
  30. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/Dockerfile +0 -0
  31. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/LICENSE +0 -0
  32. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/LICENSE-DATA.md +0 -0
  33. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/MANIFEST.in +0 -0
  34. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/setup.cfg +0 -0
  35. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/__main__.py +0 -0
  36. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/cli.py +0 -0
  37. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/config.py +0 -0
  38. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/data/framework-to-scf.json +0 -0
  39. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/data/scf-controls.json +0 -0
  40. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/data_loader.py +0 -0
  41. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/extractors/__init__.py +0 -0
  42. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/extractors/pdf_extractor.py +0 -0
  43. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/http_server.py +0 -0
  44. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/legal_notice.py +0 -0
  45. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/providers.py +0 -0
  46. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/registry.py +0 -0
  47. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp/server.py +0 -0
  48. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp.egg-info/dependency_links.txt +0 -0
  49. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp.egg-info/entry_points.txt +0 -0
  50. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp.egg-info/requires.txt +0 -0
  51. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/src/security_controls_mcp.egg-info/top_level.txt +0 -0
  52. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/README.md +0 -0
  53. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/__init__.py +0 -0
  54. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/test_content_quality.py +0 -0
  55. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/test_data_loader.py +0 -0
  56. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/test_integration.py +0 -0
  57. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/test_paid_standards.py +0 -0
  58. {security_controls_mcp-0.3.2 → security_controls_mcp-0.3.3}/tests/test_security.py +0 -0
@@ -31,8 +31,6 @@ regexes = [
31
31
 
32
32
  # Stop words that indicate a false positive
33
33
  stopwords = [
34
- # Add stop words, e.g.:
35
- # '''fake''',
36
- # '''example''',
37
- # '''test''',
34
+ '''example''',
35
+ '''test''',
38
36
  ]
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.3.3] - 2026-01-31
9
+
10
+ ### Changed
11
+ - Repository cleanup: Removed LLM-generated documentation bloat
12
+ - Simplified documentation from 18 to 6 essential files
13
+ - Cleaned up README (524→256 lines), removed excessive emojis and verbosity
14
+ - Simplified PAID_STANDARDS_GUIDE (342→251 lines)
15
+ - Updated .gitignore to exclude Claude artifacts (.claude/, .serena/, test_venv/)
16
+
17
+ ### Removed
18
+ - 11 redundant documentation files (CLAUDE_CODE_SETUP.md, DEPLOYMENT_CHECKLIST.md, CI-CD-PIPELINE.md, QUICK_START.md, INSTALL.md, TESTING.md, SECURITY-TOOLS.md, LEGAL_COMPLIANCE.md, RELEASE_NOTES_v0.3.1.md)
19
+ - 7 development files from root (duplicate data files, test scripts)
20
+
21
+ ### Technical
22
+ - No functional changes to MCP server or controls data
23
+ - All 103 tests passing
24
+ - Production readiness: 7/7 checks passed
25
+
8
26
  ## [0.3.2] - 2026-01-31
9
27
 
10
28
  ### Changed
@@ -1,21 +1,17 @@
1
- # Paid Standards Guide
1
+ # Paid Standards Import Guide
2
2
 
3
- This guide explains how to add your purchased security standards (ISO 27001, NIST SP 800-53, etc.) to the Security Controls MCP Server for enhanced compliance research.
4
-
5
- ---
3
+ Import your purchased security standards (ISO 27001, NIST SP 800-53, etc.) to get official text alongside SCF descriptions.
6
4
 
7
5
  ## Overview
8
6
 
9
- The Security Controls MCP Server includes **1,451 free SCF controls** that map across 28 frameworks. When you add your **purchased standards**, you get:
7
+ The Security Controls MCP Server includes 1,451 free SCF controls that map across 28 frameworks. When you add purchased standards:
10
8
 
11
- - **Official text** from your licensed copies
12
- - **Full clauses** with page numbers
13
- - ✅ **Enhanced SCF queries** showing both SCF descriptions AND official requirements
14
- - ✅ **Framework mapping** with real standard text on both sides
9
+ - Get official text from your licensed copies
10
+ - See full clauses with page numbers
11
+ - Enhanced queries showing both SCF descriptions and official requirements
12
+ - Framework mapping with real standard text on both sides
15
13
 
16
- **Your paid content stays private** - it's stored locally in `~/.security-controls-mcp/` and never committed to git.
17
-
18
- ---
14
+ Your paid content stays private in `~/.security-controls-mcp/` (never committed to git).
19
15
 
20
16
  ## Quick Start
21
17
 
@@ -25,17 +21,17 @@ The Security Controls MCP Server includes **1,451 free SCF controls** that map a
25
21
  pip install -e '.[import-tools]'
26
22
  ```
27
23
 
28
- This installs PDF extraction dependencies (pdfplumber, Pillow, Click).
24
+ Installs PDF extraction dependencies (pdfplumber, Pillow, Click).
29
25
 
30
26
  ### 2. Purchase a Standard
31
27
 
32
- Buy the standard from the official source:
28
+ Buy from official source:
33
29
 
34
30
  - **ISO 27001**: [iso.org](https://www.iso.org/standard/27001)
35
31
  - **NIST SP 800-53**: [csrc.nist.gov](https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final)
36
32
  - **PCI DSS**: [pcisecuritystandards.org](https://www.pcisecuritystandards.org/)
37
33
 
38
- Download the PDF to your computer.
34
+ Download the PDF.
39
35
 
40
36
  ### 3. Import the Standard
41
37
 
@@ -48,7 +44,7 @@ scf-mcp import-standard \
48
44
  --purchase-date "2026-01-29"
49
45
  ```
50
46
 
51
- **What happens:**
47
+ What happens:
52
48
  - Extracts text from PDF
53
49
  - Detects sections and clauses (e.g., "5.1.2 Cryptographic controls")
54
50
  - Saves to `~/.security-controls-mcp/standards/iso_27001_2022/`
@@ -56,46 +52,31 @@ scf-mcp import-standard \
56
52
 
57
53
  ### 4. Restart MCP Server
58
54
 
59
- The server loads paid standards on startup. Restart it to see your new content.
55
+ Restart to load the new content.
60
56
 
61
57
  ### 5. Query Your Standards
62
58
 
63
- Use the MCP tools in Claude:
64
-
65
59
  ```
66
60
  list_available_standards()
67
- → Shows SCF + your ISO 27001
68
-
69
61
  get_control("GOV-01")
70
- → Shows SCF description + ISO 27001 A.5.1 official text
71
-
72
62
  query_standard("iso_27001_2022", "encryption key management")
73
- → Searches within your ISO 27001
74
-
75
63
  get_clause("iso_27001_2022", "5.1.2")
76
- → Shows full text of clause 5.1.2 with page number
77
64
  ```
78
65
 
79
- ---
80
-
81
66
  ## Supported Standards
82
67
 
83
- The import tool works best with:
84
-
85
- ### ✅ Well-Structured PDFs
68
+ **Works best with:**
86
69
  - **ISO 27001/27002** - Numbered clauses, Annex A controls
87
70
  - **NIST SP 800-53** - Control families (AC-1, SC-7, etc.)
88
71
  - **PCI DSS** - Numbered requirements
89
72
  - **CIS Controls** - Numbered controls and safeguards
90
73
 
91
- ### ⚠️ May Need Adjustments
74
+ **May need adjustments:**
92
75
  - Scanned PDFs (poor text extraction)
93
76
  - Image-heavy documents
94
77
  - Non-standard numbering schemes
95
78
 
96
- **Tip:** The generic extractor uses heuristics (numbered sections like "1.2.3 Title"). It handles most standards reasonably well, but extraction quality varies by PDF.
97
-
98
- ---
79
+ The generic extractor uses heuristics for numbered sections. Extraction quality varies by PDF.
99
80
 
100
81
  ## Standard IDs
101
82
 
@@ -110,14 +91,10 @@ Use these IDs for the `--type` parameter:
110
91
  | NIST CSF 2.0 | `nist_csf_2.0` | PR.DS-2 |
111
92
  | SOC 2 (TSC) | `soc_2_tsc` | CC6.1 |
112
93
 
113
- **Note:** IDs should match the SCF framework keys for automatic integration.
114
-
115
- ---
94
+ IDs should match SCF framework keys for automatic integration.
116
95
 
117
96
  ## Directory Structure
118
97
 
119
- After importing, your files live here:
120
-
121
98
  ```
122
99
  ~/.security-controls-mcp/
123
100
  ├── config.json # Which standards are enabled
@@ -130,136 +107,97 @@ After importing, your files live here:
130
107
  └── full_text.json
131
108
  ```
132
109
 
133
- **Important:** This directory is gitignored by default. Never commit it!
134
-
135
- ---
110
+ **Important:** This directory is gitignored by default. Never commit it.
136
111
 
137
112
  ## Advanced Usage
138
113
 
139
- ### List Imported Standards
140
-
114
+ **List imported standards:**
141
115
  ```bash
142
116
  scf-mcp list-standards
143
117
  ```
144
118
 
145
- Shows all available standards (SCF + your imports).
146
-
147
- ### Re-Import (Overwrite)
148
-
119
+ **Re-import (overwrite):**
149
120
  ```bash
150
121
  scf-mcp import-standard --file new-version.pdf --type iso_27001_2022 --force
151
122
  ```
152
123
 
153
- Overwrites existing import with new PDF.
154
-
155
- ### Disable a Standard
156
-
124
+ **Disable a standard:**
157
125
  Edit `~/.security-controls-mcp/config.json`:
158
-
159
126
  ```json
160
127
  {
161
128
  "standards": {
162
129
  "iso_27001_2022": {
163
- "enabled": false, // Change to false
130
+ "enabled": false,
164
131
  "path": "iso_27001_2022"
165
132
  }
166
133
  }
167
134
  }
168
135
  ```
169
136
 
170
- Restart server to apply.
171
-
172
- ### Remove a Standard
173
-
137
+ **Remove a standard:**
174
138
  ```bash
175
139
  rm -rf ~/.security-controls-mcp/standards/iso_27001_2022
176
140
  ```
177
-
178
141
  Then edit `config.json` to remove the entry.
179
142
 
180
- ---
181
-
182
143
  ## License Compliance
183
144
 
184
- ### ⚠️ Important Restrictions
185
-
186
145
  **Your purchased standards are licensed for PERSONAL USE ONLY.**
187
146
 
188
- **You MAY:**
147
+ **You MAY:**
189
148
  - Import standards you've purchased
190
149
  - Query them via MCP for your own compliance research
191
150
  - Reference them in your work (with attribution)
192
151
  - Use get_control() to see official text alongside SCF
193
152
 
194
- **You MAY NOT:**
153
+ **You MAY NOT:**
195
154
  - Share extracted JSON files with others
196
155
  - Redistribute PDFs or extracted content
197
156
  - Use AI to generate policies/procedures from SCF (SCF license restriction)
198
157
  - Create derivative frameworks for distribution
199
158
 
200
- ### Automatic Safeguards
159
+ **Automatic safeguards:**
160
+ - Git safety checks warn if standards directory isn't gitignored
161
+ - Attribution on every response shows source and license info
162
+ - Startup warnings list loaded paid standards and restrictions
163
+ - Local-only storage - content never leaves your machine
201
164
 
202
- The tool includes:
203
- - **Git safety checks** - Warns if standards directory isn't gitignored
204
- - **Attribution on every response** - Shows source and license info
205
- - **Startup warnings** - Lists loaded paid standards and restrictions
206
- - **Local-only storage** - Content never leaves your machine
165
+ **Your responsibility:**
166
+ - Purchase standards from authorized sources
167
+ - Comply with your purchase agreement
168
+ - Don't redistribute content
169
+ - Consult legal counsel for compliance questions
207
170
 
208
- ### Your Responsibility
209
-
210
- **You are responsible for:**
211
- - Purchasing standards from authorized sources
212
- - Complying with your purchase agreement
213
- - Not redistributing content
214
- - Consulting legal counsel for compliance questions
215
-
216
- **This tool facilitates querying - it doesn't grant licenses.**
217
-
218
- ---
171
+ This tool facilitates querying - it doesn't grant licenses.
219
172
 
220
173
  ## Troubleshooting
221
174
 
222
- ### "No text extracted from PDF"
223
-
224
- **Cause:** PDF is scanned or image-based.
225
-
226
- **Solution:** The PDF needs searchable text. Try:
227
- 1. Check if PDF has selectable text (not just images)
228
- 2. Use OCR software to create searchable version
229
- 3. Purchase a different format (Word, HTML) if available
230
-
231
- ### "Warning: standards directory not gitignored"
232
-
233
- **Cause:** You're in a git repo and the standards directory could be committed.
175
+ **"No text extracted from PDF"**
176
+ - PDF is scanned or image-based
177
+ - Check if PDF has selectable text
178
+ - Use OCR software to create searchable version
179
+ - Purchase different format (Word, HTML) if available
234
180
 
235
- **Solution:**
181
+ **"Warning: standards directory not gitignored"**
236
182
  ```bash
237
183
  echo ".security-controls-mcp/" >> .gitignore
238
184
  git add .gitignore
239
185
  git commit -m "Gitignore paid standards directory"
240
186
  ```
241
187
 
242
- ### "Section detection found 0 sections"
243
-
244
- **Cause:** PDF doesn't match expected numbering patterns.
245
-
246
- **Solution:**
188
+ **"Section detection found 0 sections"**
189
+ - PDF doesn't match expected numbering patterns
247
190
  - Check if PDF uses standard numbering (1, 1.2, 1.2.3)
248
- - The extractor looks for patterns like "5.1.2 Title"
249
- - Contact us if you need help with a specific standard format
250
-
251
- ### "Standard 'xyz' not found" after import
252
-
253
- **Cause:** MCP server hasn't reloaded.
191
+ - Extractor looks for patterns like "5.1.2 Title"
192
+ - Contact us for help with specific standard formats
254
193
 
255
- **Solution:** Restart your MCP server to load new standards.
256
-
257
- ---
194
+ **"Standard 'xyz' not found" after import**
195
+ - MCP server hasn't reloaded
196
+ - Restart your MCP server to load new standards
258
197
 
259
198
  ## Examples
260
199
 
261
- ### Complete Workflow: ISO 27001
262
-
200
+ **Complete workflow:**
263
201
  ```bash
264
202
  # 1. Buy ISO 27001 from ISO.org (download PDF)
265
203
 
@@ -272,8 +210,7 @@ scf-mcp import-standard \
272
210
  --type iso_27001_2022 \
273
211
  --title "ISO/IEC 27001:2022" \
274
212
  --purchased-from "ISO.org" \
275
- --purchase-date "2026-01-29" \
276
- --version "2022"
213
+ --purchase-date "2026-01-29"
277
214
 
278
215
  # 4. Restart MCP server
279
216
 
@@ -283,38 +220,13 @@ scf-mcp import-standard \
283
220
  # "Map ISO 27001 to DORA with official text"
284
221
  ```
285
222
 
286
- ### Query Examples
287
-
288
- **Get SCF control with official text:**
289
- ```
290
- User: Get control GOV-01
291
- Claude: [Shows SCF description]
292
- [Shows ISO 27001 A.5.1 official text with page number]
293
- ```
294
-
295
- **Search within your standard:**
296
- ```
297
- User: Search for "encryption key management" in ISO 27001
298
- Claude: [Shows matching clauses with page numbers]
299
- ```
300
-
301
- **Framework mapping with official text:**
302
- ```
303
- User: Map ISO 27001 to DORA
304
- Claude: [Shows SCF mapping]
305
- [Shows ISO 27001 A.5.15 official text]
306
- [Shows DORA Article 9 official text if you have it]
307
- ```
308
-
309
- ---
310
-
311
223
  ## FAQ
312
224
 
313
225
  **Q: How many standards can I import?**
314
226
  A: Unlimited. Each standard you purchase can be imported.
315
227
 
316
228
  **Q: Do I need to keep the original PDF?**
317
- A: No, after import you can delete it. The extracted JSON has everything.
229
+ A: No, after import you can delete it.
318
230
 
319
231
  **Q: Can I share my imported standards with my team?**
320
232
  A: No. Each person must purchase and import their own licensed copy.
@@ -323,18 +235,15 @@ A: No. Each person must purchase and import their own licensed copy.
323
235
  A: Maybe. If it's in PDF with numbered sections, the generic extractor might work. Contact us for custom extractors.
324
236
 
325
237
  **Q: What if extraction quality is poor?**
326
- A: You can manually edit `~/.security-controls-mcp/standards/xyz/full_text.json` to fix issues.
238
+ A: You can manually edit `~/.security-controls-mcp/standards/xyz/full_text.json`.
327
239
 
328
240
  **Q: Does this replace the official standard document?**
329
- A: No. This tool is for research and queries. Always refer to the official published standard for authoritative guidance.
330
-
331
- ---
241
+ A: No. This tool is for research. Always refer to the official published standard for authoritative guidance.
332
242
 
333
243
  ## Getting Help
334
244
 
335
245
  - **Issues:** [GitHub Issues](https://github.com/Ansvar-Systems/security-controls-mcp/issues)
336
246
  - **Email:** hello@ansvar.eu
337
- - **Documentation:** [README.md](README.md)
338
247
 
339
248
  ---
340
249
 
@@ -0,0 +1,288 @@
1
+ Metadata-Version: 2.4
2
+ Name: security-controls-mcp
3
+ Version: 0.3.3
4
+ Summary: MCP server for querying security framework controls (SCF) - map between ISO 27001, NIST CSF, DORA, PCI DSS, and more
5
+ Author-email: Ansvar Systems <hello@ansvar.eu>
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/Ansvar-Systems/security-controls-mcp
8
+ Project-URL: Repository, https://github.com/Ansvar-Systems/security-controls-mcp
9
+ Project-URL: Issues, https://github.com/Ansvar-Systems/security-controls-mcp/issues
10
+ Keywords: mcp,security,compliance,iso27001,nist,dora,pci-dss
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Requires-Python: >=3.10
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ License-File: LICENSE-DATA.md
21
+ Requires-Dist: mcp>=0.9.0
22
+ Provides-Extra: dev
23
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
24
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
25
+ Requires-Dist: black>=23.0.0; extra == "dev"
26
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
27
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
28
+ Provides-Extra: import-tools
29
+ Requires-Dist: pdfplumber>=0.11.0; extra == "import-tools"
30
+ Requires-Dist: Pillow>=10.0.0; extra == "import-tools"
31
+ Requires-Dist: click>=8.0.0; extra == "import-tools"
32
+ Dynamic: license-file
33
+
34
+ # Security Controls MCP Server
35
+
36
+ [![MCP](https://img.shields.io/badge/MCP-0.9.0+-blue.svg)](https://modelcontextprotocol.io)
37
+ [![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://www.python.org)
38
+ [![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE)
39
+ [![SCF](https://img.shields.io/badge/SCF-2025.4-orange.svg)](https://securecontrolsframework.com/)
40
+
41
+ ## Overview
42
+
43
+ Universal translator for security frameworks. Makes 1,451 security controls across 28 frameworks searchable and AI-accessible through Claude, Cursor, or any MCP-compatible client.
44
+
45
+ Built on the [Secure Controls Framework (SCF)](https://securecontrolsframework.com/) by ComplianceForge.
46
+
47
+ **Key capabilities:**
48
+ - 1,451 security controls across governance, risk, compliance, and technical domains
49
+ - 28 major frameworks including ISO 27001, NIST CSF, DORA, PCI DSS, CMMC, and more
50
+ - Bidirectional mapping between frameworks via SCF rosetta stone
51
+ - Optional integration with purchased standards (ISO, NIST 800-53) for official text
52
+ - Full-text search across all control descriptions
53
+ - Natural language queries instead of framework-specific IDs
54
+
55
+ ## Why This Exists
56
+
57
+ Different frameworks describe the same security measures in different ways. ISO 27001 has one control ID, NIST CSF has another, PCI DSS has yet another — but they're all talking about the same thing.
58
+
59
+ This MCP server provides instant bidirectional mapping between any two frameworks via the SCF rosetta stone. Ask Claude "What DORA controls does ISO 27001 A.5.15 map to?" and get an immediate answer backed by ComplianceForge's framework database.
60
+
61
+ ## Installation
62
+
63
+ ```bash
64
+ # Using pipx (recommended)
65
+ pipx install security-controls-mcp
66
+
67
+ # Using pip
68
+ pip install security-controls-mcp
69
+
70
+ # From source
71
+ git clone https://github.com/Ansvar-Systems/security-controls-mcp.git
72
+ cd security-controls-mcp
73
+ pip install -e .
74
+ ```
75
+
76
+ **Requirements:** Python 3.10+
77
+
78
+ ### Claude Desktop Configuration
79
+
80
+ Add to `claude_desktop_config.json`:
81
+
82
+ ```json
83
+ {
84
+ "mcpServers": {
85
+ "security-controls": {
86
+ "command": "scf-mcp"
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ **Config location:**
93
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
94
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
95
+
96
+ ### Cursor / VS Code
97
+
98
+ Same configuration under `"mcp.servers"` in your settings.
99
+
100
+ ## Example Queries
101
+
102
+ - "What does GOV-01 require?"
103
+ - "Search for controls about encryption key management"
104
+ - "What ISO 27001 controls map to DORA?"
105
+ - "List all controls needed for PCI DSS compliance"
106
+ - "Which DORA requirements does ISO 27001 A.5.15 satisfy?"
107
+ - "Show me all NIST CSF 2.0 controls related to incident response"
108
+
109
+ ## Available Frameworks (28)
110
+
111
+ - **US Government:** NIST 800-53 (777), NIST CSF 2.0 (253), FedRAMP (343), CMMC 2.0 (198/52)
112
+ - **International Standards:** ISO 27001 (51), ISO 27002 (316), CIS CSC v8.1 (234)
113
+ - **US Industry:** PCI DSS v4.0.1 (364), SOC 2 (412), HIPAA (136)
114
+ - **APAC:** Australia Essential Eight (37), Australia ISM (336), Singapore MAS TRM (214)
115
+ - **EU Regulations:** GDPR (42), DORA (103), NIS2 (68)
116
+ - **UK Standards:** NCSC CAF 4.0 (67), Cyber Essentials (26)
117
+ - **European National:** Netherlands (27), Norway (23), Sweden (25), Germany (18/91/239)
118
+ - **Financial:** SWIFT CSCF 2023 (127)
119
+ - **Cloud:** CSA CCM v4 (334)
120
+
121
+ ## Tools
122
+
123
+ ### Core Tools
124
+
125
+ **`list_frameworks()`** - List all 28 frameworks with control counts
126
+
127
+ **`get_control(control_id)`** - Get full details for a specific SCF control
128
+ - Returns description, domain, weight, PPTDF category, and mappings to all 28 frameworks
129
+
130
+ **`search_controls(query, frameworks=[], limit=10)`** - Search controls by keyword
131
+ - Optional framework filtering
132
+ - Full-text search across names and descriptions
133
+
134
+ **`get_framework_controls(framework)`** - Get all controls for a specific framework
135
+ - Returns controls organized by domain
136
+
137
+ **`map_frameworks(source_framework, target_framework, source_control=None)`** - Map between frameworks
138
+ - Bidirectional mapping via SCF
139
+ - Optional filtering to specific source control
140
+
141
+ ### Purchased Standards Tools
142
+
143
+ **`list_available_standards()`** - List all available standards (SCF + imported)
144
+
145
+ **`query_standard(standard, query, limit=10)`** - Search within purchased standard
146
+ - Requires import first
147
+ - Returns clauses with page numbers
148
+
149
+ **`get_clause(standard, clause_id)`** - Get full text of specific clause
150
+ - Requires import first
151
+
152
+ See [PAID_STANDARDS_GUIDE.md](PAID_STANDARDS_GUIDE.md) for import instructions.
153
+
154
+ ## Add Purchased Standards (Optional)
155
+
156
+ Import your purchased ISO 27001, NIST SP 800-53, or other standards to get official text alongside SCF descriptions:
157
+
158
+ ```bash
159
+ # Install import tools
160
+ pip install -e '.[import-tools]'
161
+
162
+ # Import purchased PDF
163
+ scf-mcp import-standard \
164
+ --file ~/Downloads/ISO-27001-2022.pdf \
165
+ --type iso_27001_2022 \
166
+ --title "ISO/IEC 27001:2022"
167
+
168
+ # Restart MCP, then query
169
+ ```
170
+
171
+ Your paid content stays private in `~/.security-controls-mcp/` (never committed to git).
172
+
173
+ Full guide: [PAID_STANDARDS_GUIDE.md](PAID_STANDARDS_GUIDE.md)
174
+
175
+ ## Technical Architecture
176
+
177
+ **Data Pipeline:**
178
+ SCF JSON → In-memory index → MCP tools → AI response
179
+
180
+ **Key principles:**
181
+ - All control text returns verbatim from SCF source with zero LLM paraphrasing
182
+ - Framework mappings use ComplianceForge's authoritative crosswalks
183
+ - Optional purchased standards stored locally (never committed)
184
+ - Search results optimized for AI context windows
185
+
186
+ **Data integrity:**
187
+ - SCF version locked to 2025.4 for consistency
188
+ - All mappings sourced from official SCF framework crosswalks
189
+ - User-imported standards require valid licenses
190
+
191
+ ## Data Source
192
+
193
+ Based on **SCF 2025.4** (released December 29, 2025)
194
+
195
+ - 1,451 controls across all domains
196
+ - 580+ framework mappings (28 frameworks)
197
+ - Licensed under Creative Commons (data)
198
+ - Source: [ComplianceForge SCF](https://securecontrolsframework.com/)
199
+
200
+ **Included data files:**
201
+ - `scf-controls.json` - All 1,451 controls with framework mappings
202
+ - `framework-to-scf.json` - Reverse index for framework-to-SCF lookups
203
+
204
+ ## Related Projects
205
+
206
+ Part of **Ansvar's Compliance Suite** - MCP servers that work together for end-to-end compliance:
207
+
208
+ **EU Regulations MCP** - Query 47 EU regulations (GDPR, AI Act, DORA, NIS2, etc.)
209
+ - `npx @ansvar/eu-regulations-mcp`
210
+ - [github.com/Ansvar-Systems/EU_compliance_MCP](https://github.com/Ansvar-Systems/EU_compliance_MCP)
211
+
212
+ **US Regulations MCP** - Query US federal and state compliance laws (HIPAA, CCPA, SOX, etc.)
213
+ - `npm install @ansvar/us-regulations-mcp`
214
+ - [github.com/Ansvar-Systems/US_Compliance_MCP](https://github.com/Ansvar-Systems/US_Compliance_MCP)
215
+
216
+ **OT Security MCP** - Query IEC 62443, NIST 800-82/53, MITRE ATT&CK for ICS
217
+ - `npm install @ansvar/ot-security-mcp`
218
+ - [github.com/Ansvar-Systems/ot-security-mcp](https://github.com/Ansvar-Systems/ot-security-mcp)
219
+
220
+ ### Workflow Example
221
+
222
+ ```
223
+ 1. "What DORA requirements apply to ICT risk management?"
224
+ → EU Regulations MCP returns Article 6 full text
225
+
226
+ 2. "What security controls satisfy DORA Article 6?"
227
+ → Security Controls MCP maps to ISO 27001, NIST CSF controls
228
+
229
+ 3. "Show me ISO 27001 A.8.1 implementation details"
230
+ → Security Controls MCP returns control requirements
231
+ ```
232
+
233
+ ## Development
234
+
235
+ ```bash
236
+ # Clone and install
237
+ git clone https://github.com/Ansvar-Systems/security-controls-mcp.git
238
+ cd security-controls-mcp
239
+ pip install -e '.[dev]'
240
+
241
+ # Install pre-commit hooks
242
+ pre-commit install
243
+
244
+ # Run tests
245
+ pytest tests/ -v
246
+ ```
247
+
248
+ Pre-commit hooks run automatically before each commit:
249
+ - Code formatting (black, ruff)
250
+ - Linting (ruff check, YAML/JSON validation)
251
+ - Tests (pytest, smoke tests, server startup)
252
+
253
+ Bypass hooks (emergencies only): `git commit --no-verify`
254
+
255
+ ## Important Disclaimers
256
+
257
+ **Not Legal or Compliance Advice:** Control text is sourced directly from official SCF data, but this tool should not be used as the sole basis for compliance decisions. Always verify against official framework sources and consult qualified compliance professionals.
258
+
259
+ **AI Content Restrictions:** The SCF license explicitly prohibits using AI systems to generate derivative content such as policies, standards, procedures, metrics, risks, or threats based on SCF data. You may query and analyze controls, but not generate derivative compliance artifacts.
260
+
261
+ **Purchased Standards:** Optional standards imports require valid licenses. You must own legitimate copies and comply with copyright restrictions. This tool does not include or distribute any copyrighted standards text.
262
+
263
+ **Framework Coverage:** While SCF provides comprehensive mappings, not all controls map 1:1 across frameworks. Always review official framework documentation for authoritative requirements.
264
+
265
+ ## License
266
+
267
+ **Code:** Apache License 2.0 (see [LICENSE](LICENSE))
268
+
269
+ **Data:** Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) by ComplianceForge
270
+ - Source: [Secure Controls Framework (SCF)](https://securecontrolsframework.com/)
271
+ - Version: SCF 2025.4 (December 29, 2025)
272
+
273
+ **What you MAY do:**
274
+ - Query and analyze SCF controls
275
+ - Map between frameworks
276
+ - Reference controls in your own work (with attribution)
277
+ - Use this MCP server to understand control requirements
278
+
279
+ **What you MAY NOT do:**
280
+ - Use AI to generate policies or procedures based on SCF controls
281
+ - Create derivative frameworks or modified versions for distribution
282
+ - Remove or modify control definitions
283
+
284
+ For complete terms: [SCF Terms & Conditions](https://securecontrolsframework.com/terms-conditions/)
285
+
286
+ ---
287
+
288
+ **Built by:** [Ansvar Systems](https://ansvar.eu) (Stockholm, Sweden)