Files
Marc Shade bfe89f4f7a Harden fetcher + add live smoke tests
- Exponential backoff: retry waits are now 1s, 2s, 4s (was linear 1s, 2s, 3s)
- Cache poisoning prevention: validate Content-Type is not HTML before JSON parse,
  reject non-dict/list responses before caching
- Add 18 live smoke tests against real public APIs (USGS, CoinGecko, Yahoo Finance,
  SEC EDGAR, FAA, NOAA SWPC, Hacker News, NASA EONET, etc.)
- Smoke tests excluded from default pytest run; opt-in with: pytest -m smoke
- All 220 unit tests + 18 smoke tests pass
2026-04-06 18:53:03 -04:00

54 lines
1.4 KiB
TOML

[project]
name = "world-intel-mcp"
version = "0.1.0"
description = "World Intelligence MCP Server — real-time global intelligence across 30+ domains with 100+ MCP tools"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "MIT"}
authors = [
{name = "Phoenix AGI", email = "phoenix@2acrestudios.com"}
]
keywords = ["mcp", "intelligence", "osint", "markets", "geopolitical", "phoenix"]
dependencies = [
"mcp>=1.8.0,<2.0.0",
"httpx[socks]>=0.27.0",
"pydantic>=2.10.0,<3.0.0",
"feedparser>=6.0.0",
"click>=8.1.0",
"jinja2>=3.1.0",
"rich>=13.0.0",
]
[project.optional-dependencies]
dashboard = ["starlette>=0.37.0", "uvicorn>=0.29.0"]
vector = ["qdrant-client>=1.7.0", "fastembed>=0.7.0"]
pdf = ["weasyprint>=62.0"]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.23.0",
"pytest-cov>=4.0.0",
"respx>=0.21.0",
]
[project.scripts]
world-intel-mcp = "world_intel_mcp.server:run"
intel = "world_intel_mcp.cli:main"
intel-dashboard = "world_intel_mcp.dashboard.app:run"
intel-collector = "world_intel_mcp.collector:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/world_intel_mcp"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["src/world_intel_mcp/tests"]
addopts = "-v --tb=short -m 'not smoke'"
markers = [
"smoke: live API tests (deselected by default, run with: pytest -m smoke)",
]