crowdstrike-mcp 4.0.0__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 (70) hide show
  1. crowdstrike_mcp-4.0.0/.claude/permissions-full.json +14 -0
  2. crowdstrike_mcp-4.0.0/.claude/permissions-minimal.json +23 -0
  3. crowdstrike_mcp-4.0.0/.claude/permissions-readonly.json +40 -0
  4. crowdstrike_mcp-4.0.0/.claude/permissions-standard.json +48 -0
  5. crowdstrike_mcp-4.0.0/.claude/settings.json +40 -0
  6. crowdstrike_mcp-4.0.0/.dockerignore +10 -0
  7. crowdstrike_mcp-4.0.0/.github/dependabot.yml +12 -0
  8. crowdstrike_mcp-4.0.0/.github/workflows/ci.yml +49 -0
  9. crowdstrike_mcp-4.0.0/.github/workflows/release.yml +116 -0
  10. crowdstrike_mcp-4.0.0/.gitignore +27 -0
  11. crowdstrike_mcp-4.0.0/Dockerfile +8 -0
  12. crowdstrike_mcp-4.0.0/PKG-INFO +592 -0
  13. crowdstrike_mcp-4.0.0/README.md +567 -0
  14. crowdstrike_mcp-4.0.0/docs/superpowers/plans/2026-04-01-falconpy-v1.6.1-upgrade.md +1247 -0
  15. crowdstrike_mcp-4.0.0/docs/superpowers/plans/2026-04-07-mcp-improvements.md +1449 -0
  16. crowdstrike_mcp-4.0.0/docs/superpowers/plans/2026-04-09-release-mechanism.md +126 -0
  17. crowdstrike_mcp-4.0.0/docs/superpowers/plans/2026-04-09-remote-mcp-server.md +1618 -0
  18. crowdstrike_mcp-4.0.0/docs/superpowers/plans/2026-04-09-response-store.md +1386 -0
  19. crowdstrike_mcp-4.0.0/docs/superpowers/plans/2026-04-14-mcp-pip-packaging.md +685 -0
  20. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-03-27-mcp-ci-pipeline-design.md +86 -0
  21. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-03-31-cao-hunting-module-design.md +110 -0
  22. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-04-01-falconpy-v1.6.1-upgrade-design.md +149 -0
  23. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-04-07-mcp-improvements-design.md +302 -0
  24. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-04-09-release-mechanism-design.md +55 -0
  25. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-04-09-remote-mcp-server-design.md +430 -0
  26. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-04-09-response-store-design.md +326 -0
  27. crowdstrike_mcp-4.0.0/docs/superpowers/specs/2026-04-14-mcp-pip-packaging-design.md +193 -0
  28. crowdstrike_mcp-4.0.0/pyproject.toml +52 -0
  29. crowdstrike_mcp-4.0.0/ruff.toml +13 -0
  30. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/__init__.py +12 -0
  31. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/_version.py +24 -0
  32. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/client.py +189 -0
  33. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/common/__init__.py +1 -0
  34. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/common/api_scopes.py +82 -0
  35. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/common/auth_middleware.py +39 -0
  36. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/common/errors.py +79 -0
  37. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/common/health.py +33 -0
  38. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/common/session_auth.py +108 -0
  39. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/__init__.py +1 -0
  40. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/alerts.py +844 -0
  41. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/base.py +114 -0
  42. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/cao_hunting.py +449 -0
  43. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/case_management.py +998 -0
  44. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/cloud_registration.py +263 -0
  45. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/cloud_security.py +503 -0
  46. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/correlation.py +659 -0
  47. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/hosts.py +270 -0
  48. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/ngsiem.py +250 -0
  49. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/response.py +348 -0
  50. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/response_store.py +250 -0
  51. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/modules/spotlight.py +80 -0
  52. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/registry.py +94 -0
  53. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/resources/__init__.py +1 -0
  54. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/resources/fql_guides.py +250 -0
  55. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/response_store.py +102 -0
  56. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/server.py +217 -0
  57. crowdstrike_mcp-4.0.0/src/crowdstrike_mcp/utils.py +307 -0
  58. crowdstrike_mcp-4.0.0/tests/__init__.py +0 -0
  59. crowdstrike_mcp-4.0.0/tests/conftest.py +35 -0
  60. crowdstrike_mcp-4.0.0/tests/test_alerts_endpoint_enrichment.py +98 -0
  61. crowdstrike_mcp-4.0.0/tests/test_cao_hunting.py +332 -0
  62. crowdstrike_mcp-4.0.0/tests/test_case_management_new_tools.py +193 -0
  63. crowdstrike_mcp-4.0.0/tests/test_correlation_import.py +231 -0
  64. crowdstrike_mcp-4.0.0/tests/test_correlation_templates.py +109 -0
  65. crowdstrike_mcp-4.0.0/tests/test_endpoint_removed.py +23 -0
  66. crowdstrike_mcp-4.0.0/tests/test_response_module.py +236 -0
  67. crowdstrike_mcp-4.0.0/tests/test_smoke_tools_list.py +151 -0
  68. crowdstrike_mcp-4.0.0/tests/test_spotlight.py +77 -0
  69. crowdstrike_mcp-4.0.0/tests/test_tool_permissions.py +111 -0
  70. crowdstrike_mcp-4.0.0/tests/test_version.py +19 -0
@@ -0,0 +1,14 @@
1
+ {
2
+ "_comment": "Full access: all tools auto-allowed. Containment and rule changes always prompt. Requires --allow-writes on the server.",
3
+ "permissions": {
4
+ "allow": [
5
+ "mcp__crowdstrike__*"
6
+ ],
7
+ "ask": [
8
+ "mcp__crowdstrike__host_contain",
9
+ "mcp__crowdstrike__host_lift_containment",
10
+ "mcp__crowdstrike__correlation_update_rule",
11
+ "mcp__crowdstrike__correlation_import_to_iac"
12
+ ]
13
+ }
14
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "_comment": "Minimal: query-only analyst. Only NGSIEM queries and host lookups auto-allowed.",
3
+ "permissions": {
4
+ "allow": [
5
+ "mcp__crowdstrike__ngsiem_query",
6
+ "mcp__crowdstrike__host_lookup"
7
+ ],
8
+ "ask": [
9
+ "mcp__crowdstrike__update_alert_status",
10
+ "mcp__crowdstrike__correlation_update_rule",
11
+ "mcp__crowdstrike__correlation_import_to_iac",
12
+ "mcp__crowdstrike__host_contain",
13
+ "mcp__crowdstrike__host_lift_containment",
14
+ "mcp__crowdstrike__case_create",
15
+ "mcp__crowdstrike__case_update",
16
+ "mcp__crowdstrike__case_add_alert_evidence",
17
+ "mcp__crowdstrike__case_add_event_evidence",
18
+ "mcp__crowdstrike__case_add_tags",
19
+ "mcp__crowdstrike__case_delete_tags",
20
+ "mcp__crowdstrike__case_upload_file"
21
+ ]
22
+ }
23
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "_comment": "Read-only (default): all read tools auto-allowed, write tools always prompt.",
3
+ "permissions": {
4
+ "allow": [
5
+ "mcp__crowdstrike__get_alerts",
6
+ "mcp__crowdstrike__alert_analysis",
7
+ "mcp__crowdstrike__ngsiem_alert_analysis",
8
+ "mcp__crowdstrike__ngsiem_query",
9
+ "mcp__crowdstrike__host_lookup",
10
+ "mcp__crowdstrike__host_login_history",
11
+ "mcp__crowdstrike__host_network_history",
12
+ "mcp__crowdstrike__correlation_list_rules",
13
+ "mcp__crowdstrike__correlation_get_rule",
14
+ "mcp__crowdstrike__correlation_export_rule",
15
+ "mcp__crowdstrike__case_query",
16
+ "mcp__crowdstrike__case_get",
17
+ "mcp__crowdstrike__case_get_fields",
18
+ "mcp__crowdstrike__cloud_list_accounts",
19
+ "mcp__crowdstrike__cloud_policy_settings",
20
+ "mcp__crowdstrike__cloud_get_risks",
21
+ "mcp__crowdstrike__cloud_get_iom_detections",
22
+ "mcp__crowdstrike__cloud_query_assets",
23
+ "mcp__crowdstrike__cloud_compliance_by_account"
24
+ ],
25
+ "ask": [
26
+ "mcp__crowdstrike__update_alert_status",
27
+ "mcp__crowdstrike__correlation_update_rule",
28
+ "mcp__crowdstrike__correlation_import_to_iac",
29
+ "mcp__crowdstrike__host_contain",
30
+ "mcp__crowdstrike__host_lift_containment",
31
+ "mcp__crowdstrike__case_create",
32
+ "mcp__crowdstrike__case_update",
33
+ "mcp__crowdstrike__case_add_alert_evidence",
34
+ "mcp__crowdstrike__case_add_event_evidence",
35
+ "mcp__crowdstrike__case_add_tags",
36
+ "mcp__crowdstrike__case_delete_tags",
37
+ "mcp__crowdstrike__case_upload_file"
38
+ ]
39
+ }
40
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "_comment": "Standard SOC analyst: read tools auto-allowed, alert triage auto-allowed, containment and rule changes prompt.",
3
+ "permissions": {
4
+ "allow": [
5
+ "mcp__crowdstrike__get_alerts",
6
+ "mcp__crowdstrike__alert_analysis",
7
+ "mcp__crowdstrike__ngsiem_alert_analysis",
8
+ "mcp__crowdstrike__ngsiem_query",
9
+ "mcp__crowdstrike__host_lookup",
10
+ "mcp__crowdstrike__host_login_history",
11
+ "mcp__crowdstrike__host_network_history",
12
+ "mcp__crowdstrike__correlation_list_rules",
13
+ "mcp__crowdstrike__correlation_get_rule",
14
+ "mcp__crowdstrike__correlation_export_rule",
15
+ "mcp__crowdstrike__case_query",
16
+ "mcp__crowdstrike__case_get",
17
+ "mcp__crowdstrike__case_get_fields",
18
+ "mcp__crowdstrike__cloud_list_accounts",
19
+ "mcp__crowdstrike__cloud_policy_settings",
20
+ "mcp__crowdstrike__cloud_get_risks",
21
+ "mcp__crowdstrike__cloud_get_iom_detections",
22
+ "mcp__crowdstrike__cloud_query_assets",
23
+ "mcp__crowdstrike__cloud_compliance_by_account",
24
+ "mcp__crowdstrike__case_query_access_tags",
25
+ "mcp__crowdstrike__case_get_access_tags",
26
+ "mcp__crowdstrike__case_aggregate_access_tags",
27
+ "mcp__crowdstrike__case_get_rtr_file_metadata",
28
+ "mcp__crowdstrike__case_get_rtr_recent_files",
29
+ "mcp__crowdstrike__correlation_list_templates",
30
+ "mcp__crowdstrike__correlation_get_template",
31
+ "mcp__crowdstrike__spotlight_supported_evaluations",
32
+ "mcp__crowdstrike__update_alert_status",
33
+ "mcp__crowdstrike__case_create",
34
+ "mcp__crowdstrike__case_update",
35
+ "mcp__crowdstrike__case_add_alert_evidence",
36
+ "mcp__crowdstrike__case_add_event_evidence",
37
+ "mcp__crowdstrike__case_add_tags",
38
+ "mcp__crowdstrike__case_delete_tags",
39
+ "mcp__crowdstrike__case_upload_file"
40
+ ],
41
+ "ask": [
42
+ "mcp__crowdstrike__host_contain",
43
+ "mcp__crowdstrike__host_lift_containment",
44
+ "mcp__crowdstrike__correlation_update_rule",
45
+ "mcp__crowdstrike__correlation_import_to_iac"
46
+ ]
47
+ }
48
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "_comment": "Read-only (default): all read tools auto-allowed, write tools always prompt.",
3
+ "permissions": {
4
+ "allow": [
5
+ "mcp__crowdstrike__get_alerts",
6
+ "mcp__crowdstrike__alert_analysis",
7
+ "mcp__crowdstrike__ngsiem_alert_analysis",
8
+ "mcp__crowdstrike__ngsiem_query",
9
+ "mcp__crowdstrike__host_lookup",
10
+ "mcp__crowdstrike__host_login_history",
11
+ "mcp__crowdstrike__host_network_history",
12
+ "mcp__crowdstrike__correlation_list_rules",
13
+ "mcp__crowdstrike__correlation_get_rule",
14
+ "mcp__crowdstrike__correlation_export_rule",
15
+ "mcp__crowdstrike__case_query",
16
+ "mcp__crowdstrike__case_get",
17
+ "mcp__crowdstrike__case_get_fields",
18
+ "mcp__crowdstrike__cloud_list_accounts",
19
+ "mcp__crowdstrike__cloud_policy_settings",
20
+ "mcp__crowdstrike__cloud_get_risks",
21
+ "mcp__crowdstrike__cloud_get_iom_detections",
22
+ "mcp__crowdstrike__cloud_query_assets",
23
+ "mcp__crowdstrike__cloud_compliance_by_account"
24
+ ],
25
+ "ask": [
26
+ "mcp__crowdstrike__update_alert_status",
27
+ "mcp__crowdstrike__correlation_update_rule",
28
+ "mcp__crowdstrike__correlation_import_to_iac",
29
+ "mcp__crowdstrike__host_contain",
30
+ "mcp__crowdstrike__host_lift_containment",
31
+ "mcp__crowdstrike__case_create",
32
+ "mcp__crowdstrike__case_update",
33
+ "mcp__crowdstrike__case_add_alert_evidence",
34
+ "mcp__crowdstrike__case_add_event_evidence",
35
+ "mcp__crowdstrike__case_add_tags",
36
+ "mcp__crowdstrike__case_delete_tags",
37
+ "mcp__crowdstrike__case_upload_file"
38
+ ]
39
+ }
40
+ }
@@ -0,0 +1,10 @@
1
+ .venv/
2
+ .git/
3
+ __pycache__/
4
+ *.pyc
5
+ tests/
6
+ docs/
7
+ .github/
8
+ .claude/
9
+ .ruff_cache/
10
+ *.egg-info/
@@ -0,0 +1,12 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "weekly"
12
+
@@ -0,0 +1,49 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ branches: [master]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ lint:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.11"
20
+ - name: Install dependencies
21
+ run: pip install -e .[dev]
22
+ - name: Check linting
23
+ run: ruff check src/ tests/ --exclude src/crowdstrike_mcp/_version.py
24
+ - name: Check formatting
25
+ run: ruff format --check src/ tests/ --exclude src/crowdstrike_mcp/_version.py
26
+
27
+ test:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+ - uses: actions/setup-python@v5
32
+ with:
33
+ python-version: "3.11"
34
+ - name: Install dependencies
35
+ run: pip install -e .[dev]
36
+ - name: Run tests
37
+ run: pytest tests/ -v --tb=short
38
+
39
+ smoke:
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ - uses: actions/setup-python@v5
44
+ with:
45
+ python-version: "3.11"
46
+ - name: Install dependencies
47
+ run: pip install -e .[dev]
48
+ - name: Smoke test — tool registration
49
+ run: pytest tests/test_smoke_tools_list.py -v --tb=short
@@ -0,0 +1,116 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: write
9
+ packages: write
10
+
11
+ jobs:
12
+ lint:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ with:
17
+ fetch-depth: 0
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.11"
21
+ - name: Install dependencies
22
+ run: pip install -e .[dev]
23
+ - name: Check linting
24
+ run: ruff check src/ tests/ --exclude src/crowdstrike_mcp/_version.py
25
+ - name: Check formatting
26
+ run: ruff format --check src/ tests/ --exclude src/crowdstrike_mcp/_version.py
27
+
28
+ test:
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@v4
32
+ with:
33
+ fetch-depth: 0
34
+ - uses: actions/setup-python@v5
35
+ with:
36
+ python-version: "3.11"
37
+ - name: Install dependencies
38
+ run: pip install -e .[dev]
39
+ - name: Run tests
40
+ run: pytest tests/ -v --tb=short
41
+
42
+ build:
43
+ needs: [lint, test]
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ with:
48
+ fetch-depth: 0 # hatch-vcs needs full history for version
49
+ - uses: actions/setup-python@v5
50
+ with:
51
+ python-version: "3.12"
52
+ - name: Install build tools
53
+ run: pip install build
54
+ - name: Build sdist and wheel
55
+ run: python -m build
56
+ - name: Verify package version matches tag
57
+ run: |
58
+ TAG_VERSION="${GITHUB_REF_NAME#v}"
59
+ PKG_VERSION=$(python -c "
60
+ import pathlib
61
+ whl = next(pathlib.Path('dist').glob('*.whl'))
62
+ print(whl.name.split('-')[1])
63
+ ")
64
+ if [ "$PKG_VERSION" != "$TAG_VERSION" ]; then
65
+ echo "::error::Version mismatch: built package is '$PKG_VERSION' but tag is 'v$TAG_VERSION'"
66
+ exit 1
67
+ fi
68
+ echo "Version verified: $TAG_VERSION"
69
+ - uses: actions/upload-artifact@v4
70
+ with:
71
+ name: dist
72
+ path: dist/
73
+
74
+ publish-pypi:
75
+ needs: [build]
76
+ runs-on: ubuntu-latest
77
+ environment: pypi
78
+ permissions:
79
+ id-token: write # OIDC for trusted publishing
80
+ steps:
81
+ - uses: actions/download-artifact@v4
82
+ with:
83
+ name: dist
84
+ path: dist/
85
+ - uses: pypa/gh-action-pypi-publish@release/v1
86
+
87
+ release:
88
+ needs: [build]
89
+ runs-on: ubuntu-latest
90
+ steps:
91
+ - uses: actions/checkout@v4
92
+
93
+ - name: Extract version from tag
94
+ id: version
95
+ run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
96
+
97
+ - name: Log in to GHCR
98
+ uses: docker/login-action@v3
99
+ with:
100
+ registry: ghcr.io
101
+ username: ${{ github.actor }}
102
+ password: ${{ secrets.GITHUB_TOKEN }}
103
+
104
+ - name: Build and push Docker image
105
+ uses: docker/build-push-action@v6
106
+ with:
107
+ context: .
108
+ push: true
109
+ tags: |
110
+ ghcr.io/${{ github.repository }}:${{ steps.version.outputs.version }}
111
+ ghcr.io/${{ github.repository }}:latest
112
+
113
+ - name: Create GitHub Release
114
+ run: gh release create "$GITHUB_REF_NAME" --generate-notes
115
+ env:
116
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,27 @@
1
+ # Virtual environment
2
+ .venv/
3
+ venv/
4
+
5
+ # Python
6
+ __pycache__/
7
+ *.pyc
8
+ *.pyo
9
+
10
+ # Secrets
11
+ .env
12
+ .env.*
13
+ credentials.json
14
+
15
+ # IDE
16
+ .vscode/
17
+ .idea/
18
+
19
+ # OS
20
+ .DS_Store
21
+
22
+ # Debug/diagnostic utilities
23
+ mcp-debug/
24
+
25
+ # hatch-vcs generated version file
26
+ src/crowdstrike_mcp/_version.py
27
+ dist/
@@ -0,0 +1,8 @@
1
+ FROM python:3.12-slim
2
+ WORKDIR /app
3
+ COPY . .
4
+ RUN pip install --no-cache-dir .
5
+ RUN useradd -r -s /bin/false mcp
6
+ USER mcp
7
+ EXPOSE 8000
8
+ ENTRYPOINT ["crowdstrike-mcp", "--transport", "streamable-http", "--host", "0.0.0.0"]