[project] name = "fossick-mcp" version = "0.1.4" description = "MCP server — search code, find libraries, and evaluate dependencies across all of GitHub, PyPI, and npm" readme = "README.md" requires-python = ">=3.11" license = "MIT" license-files = ["LICENSE"] keywords = ["mcp", "mcp-server", "github", "code-search", "library-discovery", "ai-agents"] dependencies = [ "httpx>=0.27", "mcp>=1.26", "pydantic>=2.0", "pydantic-settings>=2.0", "tree-sitter>=0.25.2", "tree-sitter-language-pack>=1.5.0", ] [project.urls] Homepage = "https://github.com/Lipdog/fossick-mcp" Repository = "https://github.com/Lipdog/fossick-mcp" Issues = "https://github.com/Lipdog/fossick-mcp/issues" [project.scripts] fossick-mcp = "fossick.__main__:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/fossick"] [dependency-groups] dev = [ "claude-agent-sdk>=0.1.58", "pytest>=9.0.3", "pytest-asyncio>=1.3.0", "pytest-timeout>=2.4.0", "tiktoken>=0.12.0", ] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" # Session-scoped event loop: the fossick.github_client singleton creates # an httpx.AsyncClient bound to whatever loop is active on first use. A # function-scoped loop would strand the client on a closed loop after the # first test, breaking every subsequent test that calls a GitHub-backed tool. asyncio_default_test_loop_scope = "session" asyncio_default_fixture_loop_scope = "session" markers = [ "live: test hits real GitHub API (requires token, skipped if absent)", ] timeout = 30