[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "falcon-mcp"
version = "0.4.1"
description = "CrowdStrike Falcon MCP Server"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "MIT"}
authors = [
{name = "CrowdStrike", email = "cloud-integrations@crowdstrike.com"}
]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
]
dependencies = [
"crowdstrike-falconpy>=1.3.0",
"mcp>=1.12.1,<2.0.0",
"python-dotenv>=1.1.1",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"pytest-asyncio>=0.21.0",
"mypy>=1.0.0",
"langchain-openai>=0.3.28",
"mcp-use[search]>=1.3.7",
"ruff>=0.12.5",
"black>=23.0.0",
]
[project.scripts]
falcon-mcp = "falcon_mcp.server:main"
[tool.black]
line-length = 100
target-version = ["py311"]
[tool.mypy]
python_version = "3.11"
warn_return_any = false
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
# Ignore missing stubs for third-party libraries
ignore_missing_imports = true
[[tool.mypy.overrides]]
module = "tests.*"
disallow_untyped_defs = false
disallow_incomplete_defs = false
disable_error_code = ["arg-type", "valid-type", "attr-defined", "misc"]
[[tool.mypy.overrides]]
module = "scripts.*"
disallow_untyped_defs = false
disallow_incomplete_defs = false
[[tool.mypy.overrides]]
module = "falcon_mcp.modules.*"
# Pydantic Field() overloads cause call-overload errors - ignore them
# Union return types cause union-attr errors - code handles these correctly at runtime
# These are not actual type errors, just mypy/pydantic typing quirks
disable_error_code = ["call-overload", "return-value", "list-item", "arg-type", "union-attr"]
disallow_untyped_defs = false
[[tool.mypy.overrides]]
module = "examples.*"
disallow_untyped_defs = false
disallow_incomplete_defs = false
[tool.ruff]
target-version = "py311"
line-length = 100
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
filterwarnings = [
"ignore::DeprecationWarning:websockets.*:",
"ignore::DeprecationWarning:uvicorn.protocols.websockets.*:",
"ignore::pydantic.PydanticDeprecatedSince20:langchain_core.*:"
]