io.github.thomasxm/crowdsentinel-mcp-server
AI threat hunting & incident response for Elasticsearch/OpenSearch with endpoint & network forensics
io.github.thomasxm/crowdsentinel-mcp-server · Repository · version 0.6.0 · 206 stars · listed from registry
Install
The sweep installs into a clean prefix, but this is the command a user would run:
uvx crowdsentinel-mcp-server
Results by platform
Linux
MCP handshake failed2026-08-16 · probed over pypi1 recorded run, oldest first.
handshake failed: MCP error -32000: Connection closed
transport: Unexpected token '', "[2m02:54:"... is not valid JSON
Unexpected token '', "[2m02:54:"... is not valid JSON
Unexpected token '', "[2m02:54:"... is not valid JSON
Unexpected token '', "[2m02:54:"... is not valid JSON
--- stderr (tail) ---
…nner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/urllib3/connection.py", line 219, in _new_conn
raise NewConnectionError(
self, f"Failed to establish a new connection: {e}"
) from e
urllib3.exceptions.NewConnectionError: HTTPSConnection(host='localhost', port=9200): Failed to establish a new connection: [Errno 111] Connection refused
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/bin/crowdsentinel-mcp-server", line 12, in <module>
sys.exit(elasticsearch_mcp_server())
~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/src/server.py", line 401, in elasticsearch_mcp_server
run_search_server(
~~~~~~~~~~~~~~~~~^
engine_type="elasticsearch", transport=args.transport, host=args.host, port=args.port, path=args.path
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/src/server.py", line 335, in run_search_server
server = SearchMCPServer(engine_type=engine_type)
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/src/server.py", line 76, in __init__
self.search_client = create_search_client(self.engine_type)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/src/clients/__init__.py", line 149, in create_search_client
client.client.info(request_timeout=5)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/elasticsearch/_sync/client/utils.py", line 455, in wrapped
return api(*args, **kwargs)
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/elasticsearch/_sync/client/__init__.py", line 3042, in info
return self.perform_request( # type: ignore[return-value]
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"GET",
^^^^^^
...<4 lines>...
path_parts=__path_parts,
^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/elasticsearch/_sync/client/_base.py", line 271, in perform_request
response = self._perform_request(
method,
...<4 lines>...
otel_span=otel_span,
)
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/elasticsearch/_sync/client/_base.py", line 316, in _perform_request
meta, resp_body = self.transport.perform_request(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
method,
^^^^^^^
...<8 lines>...
otel_span=otel_span,
^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/elastic_transport/_transport.py", line 342, in perform_request
resp = node.perform_request(
method,
...<3 lines>...
request_timeout=request_timeout,
)
File "/home/runner/.cache/uv/archive-v0/mTY3RMbq1NHhzfug/lib/python3.13/site-packages/elastic_transport/_node/_http_urllib3.py", line 202, in perform_request
raise err from e
elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(HTTPSConnection(host='localhost', port=9200): Failed to establish a new connection: [Errno 111] Connection refused))
macOS
MCP handshake failed2026-08-16 · probed over pypi1 recorded run, oldest first.
handshake failed: MCP error -32000: Connection closed
--- stderr (tail) ---
…Compiling python3-dll-a v0.2.13
Compiling once_cell v1.19.0
Compiling stable_deref_trait v1.2.0
Compiling autocfg v1.3.0
Compiling litemap v0.7.3
Compiling writeable v0.5.5
Compiling heck v0.5.0
Compiling libc v0.2.155
Compiling num-traits v0.2.19
Compiling icu_locid_transform_data v1.5.0
Compiling version_check v0.9.5
Compiling pyo3-build-config v0.24.1
Compiling quote v1.0.36
Compiling syn v2.0.82
Compiling icu_properties_data v1.5.0
Compiling rustversion v1.0.17
Compiling smallvec v1.14.0
Compiling pyo3-macros-backend v0.24.1
Compiling pyo3-ffi v0.24.1
error: failed to run custom build command for `pyo3-ffi v0.24.1`
Caused by:
process didn't exit successfully:
`/Users/runner/.cache/uv/sdists-v9/pypi/pydantic-core/2.33.2/2f7rVIA27UIhIfEU/src/target/release/build/pyo3-ffi-c6dfd9c3f3b0d5da/build-script-build`
(exit status: 1)
--- stdout
cargo:rustc-check-cfg=cfg(Py_LIMITED_API)
cargo:rustc-check-cfg=cfg(Py_GIL_DISABLED)
cargo:rustc-check-cfg=cfg(PyPy)
cargo:rustc-check-cfg=cfg(GraalPy)
cargo:rustc-check-cfg=cfg(py_sys_config, values("Py_DEBUG",
"Py_REF_DEBUG", "Py_TRACE_REFS", "COUNT_ALLOCS"))
cargo:rustc-check-cfg=cfg(pyo3_disable_reference_pool)
cargo:rustc-check-cfg=cfg(pyo3_leak_on_drop_without_reference_pool)
cargo:rustc-check-cfg=cfg(Py_3_7)
cargo:rustc-check-cfg=cfg(Py_3_8)
cargo:rustc-check-cfg=cfg(Py_3_9)
cargo:rustc-check-cfg=cfg(Py_3_10)
cargo:rustc-check-cfg=cfg(Py_3_11)
cargo:rustc-check-cfg=cfg(Py_3_12)
cargo:rustc-check-cfg=cfg(Py_3_13)
cargo:rustc-check-cfg=cfg(Py_3_14)
cargo:rerun-if-env-changed=PYO3_CROSS
cargo:rerun-if-env-changed=PYO3_CROSS_LIB_DIR
cargo:rerun-if-env-changed=PYO3_CROSS_PYTHON_VERSION
cargo:rerun-if-env-changed=PYO3_CROSS_PYTHON_IMPLEMENTATION
cargo:rerun-if-env-changed=PYO3_PRINT_CONFIG
cargo:rerun-if-env-changed=PYO3_USE_ABI3_FORWARD_COMPATIBILITY
--- stderr
error: the configured Python interpreter version (3.14) is newer than
PyO3's maximum supported version (3.13)
= help: please check if an updated version of PyO3 is available.
Current version: 0.24.1
= help: set PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 to suppress this
check and build anyway using the stable ABI
warning: build failed, waiting for other jobs to finish...
💥 maturin failed
Caused by: Failed to build a native library through cargo
Caused by: Cargo build finished with "exit status: 101": `env -u
CARGO MACOSX_DEPLOYMENT_TARGET="11.0" PYO3_BUILD_EXTENSION_MODULE="1"
PYO3_ENVIRONMENT_SIGNATURE="cpython-3.14-64bit"
PYO3_PYTHON="/Users/runner/.cache/uv/builds-v0/.tmpOyTy2L/bin/python"
PYTHON_SYS_EXECUTABLE="/Users/runner/.cache/uv/builds-v0/.tmpOyTy2L/bin/python"
"cargo" "rustc" "--profile" "release" "--features"
"pyo3/extension-module" "--message-format"
"json-render-diagnostics" "--manifest-path"
"/Users/runner/.cache/uv/sdists-v9/pypi/pydantic-core/2.33.2/2f7rVIA27UIhIfEU/src/Cargo.toml"
"--lib" "--crate-type" "cdylib" "--" "-C"
"link-args=-Wl,-install_name,@rpath/pydantic_core._pydantic_core.cpython-314-darwin.so"`
Error: command ['maturin', 'pep517', 'build-wheel', '-i',
'/Users/runner/.cache/uv/builds-v0/.tmpOyTy2L/bin/python',
'--compatibility', 'off'] returned non-zero exit status 1
hint: `pydantic-core` (v2.33.2) was included because `crowdsentinel-mcp-server` (v0.6.0) depends on `pydantic` (v2.11.10) which depends on `pydantic-core`
hint: Build failures usually indicate a problem with the package or the build environment
Windows
MCP handshake failed2026-08-16 · probed over pypi1 recorded run, oldest first.
handshake failed: MCP error -32000: Connection closed
transport: Unexpected token '', "[2m04:11:"... is not valid JSON
Unexpected token '', "[2m04:11:"... is not valid JSON
Unexpected token '', "[2m04:11:"... is not valid JSON
Unexpected token '', "[2m04:11:"... is not valid JSON
--- stderr (tail) ---
… 45, in connect
super().connect()
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\urllib3\connection.py", line 759, in connect
self.sock = sock = self._new_conn()
^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\urllib3\connection.py", line 219, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: HTTPSConnection(host='localhost', port=9200): Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Scripts\crowdsentinel-mcp-server.exe\__main__.py", line 10, in <module>
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\src\server.py", line 401, in elasticsearch_mcp_server
run_search_server(
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\src\server.py", line 335, in run_search_server
server = SearchMCPServer(engine_type=engine_type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\src\server.py", line 76, in __init__
self.search_client = create_search_client(self.engine_type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\src\clients\__init__.py", line 149, in create_search_client
client.client.info(request_timeout=5)
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\elasticsearch\_sync\client\utils.py", line 455, in wrapped
return api(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\elasticsearch\_sync\client\__init__.py", line 3042, in info
return self.perform_request( # type: ignore[return-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\elasticsearch\_sync\client\_base.py", line 271, in perform_request
response = self._perform_request(
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\elasticsearch\_sync\client\_base.py", line 316, in _perform_request
meta, resp_body = self.transport.perform_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\elastic_transport\_transport.py", line 342, in perform_request
resp = node.perform_request(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\qwj3uM9xs1d6j6_t\Lib\site-packages\elastic_transport\_node\_http_urllib3.py", line 202, in perform_request
raise err from e
elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(HTTPSConnection(host='localhost', port=9200): Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it))
Badge
Paste this into the project README to show the current result:
[](https://doesitinstall.com/s/io.github.thomasxm__crowdsentinel-mcp-server.html)