Skip to content

CLI Commands

Run the server with default settings (stdio transport):

Terminal window
falcon-mcp

Run with SSE transport:

Terminal window
falcon-mcp --transport sse

Run with streamable-http transport:

Terminal window
falcon-mcp --transport streamable-http

Run with streamable-http on a custom port:

Terminal window
falcon-mcp --transport streamable-http --host 0.0.0.0 --port 8080 --api-key your-secret-key

Run with stateless HTTP mode (for scalable deployments like AWS AgentCore):

Terminal window
falcon-mcp --transport streamable-http --stateless-http

Run with API key authentication:

Terminal window
falcon-mcp --transport streamable-http --api-key your-secret-key

Enable specific modules by name (comma-separated):

Terminal window
falcon-mcp --modules detections,intel,spotlight,idp

Enable only one module:

Terminal window
falcon-mcp --modules detections

If no --modules flag is provided, all available modules are enabled.

falcon-mcp --help
FlagEnv VariableDefaultDescription
--transportFALCON_MCP_TRANSPORTstdioTransport method: stdio, sse, streamable-http
--hostFALCON_MCP_HOST127.0.0.1Host for HTTP transports
--portFALCON_MCP_PORT8000Port for HTTP transports
--modulesFALCON_MCP_MODULESallComma-separated list of modules to enable
--debugFALCON_MCP_DEBUGfalseEnable debug logging
--api-keyFALCON_MCP_API_KEYAPI key for HTTP transport auth
--stateless-httpFALCON_MCP_STATELESS_HTTPfalseStateless mode for scalable deployments
--member-cidFALCON_MEMBER_CIDFlight Control child CID
--proxyFALCON_PROXY_URLHTTP/HTTPS proxy for outbound API connections
--dynamicFALCON_MCP_DYNAMICfalseDynamic mode: expose three tools (list-enabled-tools, search, execute) instead of all module tools to reduce context usage
--read-onlyFALCON_MCP_READ_ONLYfalseRegister only read-only tools, disabling every tool that mutates tenant state
--toolsFALCON_MCP_TOOLSComma-separated allow-list of tool names, added to the enabled modules
--exclude-toolsFALCON_MCP_EXCLUDE_TOOLSComma-separated deny-list of tool names to withhold

--modules gates whole modules, so enabling one to reach its search tools also exposes its mutating tools. The three tool-level options narrow that surface further:

Terminal window
# Investigation-only server
falcon-mcp --read-only
# Expose exactly two tools, nothing else
falcon-mcp --tools falcon_search_detections,falcon_search_hosts
# Keep the module, drop one tool
falcon-mcp --modules hostgroups --exclude-tools falcon_delete_host_groups
# All of detections, plus one tool from a module you did not enable
falcon-mcp --modules detections --tools falcon_search_applications

Tool names are the falcon_-prefixed names clients display. An unrecognized name aborts startup instead of being ignored, so a typo in a deny-list cannot silently leave a tool exposed.

--tools is additive, not a narrowing filter. It grants individual tools on top of whatever --modules already enabled, reaching across the module boundary:

  • --tools X on its own registers only X — no modules are loaded by default.
  • --modules detections --tools X registers every detections tool plus X, even when X belongs to a module that is not enabled. That module contributes only X, not its whole surface, and falcon_list_enabled_modules does not list it. falcon_list_enabled_tools does list X — it reports the tools available on the server, so it is the reliable answer to “is this capability available here?”

To subtract, use --exclude-tools or --read-only. All four options compose and resolve in a fixed order:

  1. --exclude-tools removes a tool unconditionally, even if --tools names it.
  2. --read-only removes every mutating tool unconditionally, even if --tools names it.
  3. --tools adds the tools it names, bypassing the module gate.
  4. --modules decides which tools are candidates by default.

Since the first two rules always win, they work as a deployment-wide floor that an additive --tools list cannot widen past. The restrictions also hold in dynamic mode: a withheld tool is absent from falcon_search_tools results and rejected by falcon_execute_tool. Since dynamic mode dispatches by name, that rejection says the tool exists but is withheld by configuration and names the one rule responsible, so an agent does not report a disabled tool as a capability the product lacks. In either mode falcon_list_enabled_tools carries a filters_active field while any rule is in effect. The startup log reports which rules are active and how many tools --read-only and --exclude-tools withheld; add --debug to see those tools by name. A tool that was simply never requested is not counted as withheld — only --tools grants and the two subtracting rules are decisions worth reporting.

These options filter tools, not resources. A withheld tool’s FQL guide resource stays available, since guides are static field documentation carrying no tenant data.

You can also embed the server directly in Python:

from falcon_mcp.server import FalconMCPServer
server = FalconMCPServer(
base_url="https://api.us-2.crowdstrike.com", # Optional
debug=True,
enabled_modules=["detections", "spotlight"],
api_key="your-api-key"
)
# Run with stdio transport (default)
server.run()
# Or with a specific transport
server.run("streamable-http")

For enterprise deployments using secret management systems (HashiCorp Vault, AWS Secrets Manager, etc.), you can pass credentials directly:

server = FalconMCPServer(
client_id="your-client-id",
client_secret="your-client-secret",
base_url="https://api.us-2.crowdstrike.com",
enabled_modules=["detections", "hosts"],
proxy="http://proxy.corp.example.com:8080",
)
server.run()

When both direct parameters and environment variables are available, direct parameters take precedence.