[build-system] requires = ["setuptools>=83.0.0"] build-backend = "setuptools.build_meta" [project] name = "clearfront" version = "2.7.3" description = "Clearfront OSINT: AI-powered OSINT agent, MCP server, and CLI that maps your digital footprint across 3,400+ public data sources. Interactive REPL + 30 tools. Anthropic Claude or local Ollama. For authorized security research use only." readme = "README.md" requires-python = ">=3.10" license = "MIT" authors = [ {name = "Scott Martin Anderson"} ] keywords = [ "clearfront", "clearfront-osint", "osint", "open-source-intelligence", "digital-footprint", "security", "mcp", "cli", "ai", "agent", "anthropic", "claude", "investigation", "recon", "cybersecurity", "privacy" ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "Topic :: Security", "Topic :: Internet", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Operating System :: OS Independent", ] dependencies = [ # Upper bounds cap the next major on every runtime dependency. mcp 2.0.0 # shipped on 2026-07-28 against an unbounded `mcp>=1.28.1` and broke the MCP # server on every fresh install. The 0.x pins matter most: semver gives no # stability guarantee below 1.0, so those are capped at 1. "mcp>=1.28.1,<2", "anthropic>=0.116.0,<1", "requests>=2.34.2,<3", "python-whois>=0.9.6,<1", "rich>=15.0.0,<16", "prompt_toolkit>=3.0.52,<4", "python-dotenv>=1.2.2,<2", "aiohttp>=3.14.3,<4", "dnspython>=2.8.0,<3", "ddgs>=9.14.4,<10", "fastapi>=0.139.0,<1", "uvicorn[standard]>=0.51.0,<1", "httpx>=0.28.1,<1", ] [project.urls] Homepage = "https://github.com/scottmartinanderson/clearfront" Repository = "https://github.com/scottmartinanderson/clearfront" "Bug Tracker" = "https://github.com/scottmartinanderson/clearfront/issues" [project.scripts] clearfront = "clearfront.cli:main" clearfront-mcp = "clearfront.mcp_server:main" [project.optional-dependencies] dev = [ "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0", "pytest-freezegun>=0.4.2", "ruff>=0.15.20", ] shodan = [ "shodan>=1.31.0,<2", ] ollama = [ "ollama>=0.6.2,<1", ] openai = [ "openai>=2.44.0,<4", ] pdf = [ "reportlab>=5.0.0,<6", ] censys = [ "censys-platform>=0.15.1,<1", ] web = [ "fastapi>=0.139.0,<1", "uvicorn[standard]>=0.51.0,<1", "sse-starlette>=3.4.5,<4", "python-dotenv>=1.2.2,<2", "anthropic>=0.116.0,<1", "playwright>=1.61.0,<2", ] all = [ "shodan>=1.31.0,<2", "ollama>=0.6.2,<1", "openai>=2.44.0,<4", "reportlab>=5.0.0,<6", "censys-platform>=0.15.1,<1", "fastapi>=0.139.0,<1", "uvicorn[standard]>=0.51.0,<1", "sse-starlette>=3.4.5,<4", ] [tool.setuptools.packages.find] where = ["."] include = ["clearfront*"] exclude = ["assets*", "docs*", "scripts*", "tests*"] [tool.setuptools.package-data] clearfront = ["web/*.html", "web/**/*", "tools/data/*.json", "tools/data/NOTICE"] [tool.ruff] target-version = "py310" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I", "W"] ignore = ["E501"] [tool.mypy] ignore_missing_imports = true [[tool.mypy.overrides]] module = "clearfront.web_server" ignore_errors = true [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function"