[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "hn-tech-signal-mcp" # Single source of truth: src/hn_tech_signal_mcp/__init__.py (see [tool.hatch.version]). dynamic = ["version"] description = "MCP server for tech & AI intelligence – aggregates HackerNews, arXiv, Lobste.rs and GitHub. No API key required." readme = "README.md" license = { text = "MIT" } requires-python = ">=3.11" authors = [{ name = "malkreide" }] keywords = [ "mcp", "model-context-protocol", "hackernews", "arxiv", "tech-intelligence", "ai-research", "lobsters", "github", "swiss-public-data-mcp", ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", ] dependencies = [ # Upper bound added deliberately: `mcp` 2.0.0 removed `mcp.server.fastmcp` # outright (the API moved to `mcp.server.mcpserver`), so an unbounded # `>=1.28.1` breaks every fresh install — CI and `pip install` alike. # Migrating to the 2.x API is real work and a decision to take on purpose, # not one a resolver should make silently. "mcp>=2.0.0,<3", "httpx>=0.27.0", "pydantic>=2.0.0", "defusedxml>=0.7.1", ] [project.optional-dependencies] # Neu angelegt: Es gab hier kein dev-Extra, also stand der ruff-Pin allein in # einer `uv pip install`-Zeile der CI — zusammen mit den Test-Abhaengigkeiten, # die dort ebenfalls von Hand aufgezaehlt waren. Lokal war damit weder das eine # noch das andere reproduzierbar, ohne die Zeile abzuschreiben. # Beim Anheben von ruff: hier aendern, `ruff format` ueber src tests scripts # laufen lassen, Ergebnis mitcommitten. dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=5.0.0", "respx>=0.21.0", "ruff==0.16.6", ] [project.scripts] hn-tech-signal-mcp = "hn_tech_signal_mcp.server:main" [project.urls] Homepage = "https://github.com/malkreide/hn-tech-signal-mcp" Repository = "https://github.com/malkreide/hn-tech-signal-mcp" Issues = "https://github.com/malkreide/hn-tech-signal-mcp/issues" [tool.hatch.build.targets.wheel] packages = ["src/hn_tech_signal_mcp"] [tool.hatch.version] path = "src/hn_tech_signal_mcp/__init__.py" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I", "N", "W"] [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["src"] markers = ["live: marks tests as requiring live API access (deselect with '-m not live')"]