[project] name = "querywise-mcp" version = "1.0.0" description = "MCP server (and CLI) for querying databases in natural language through a semantic layer" readme = "README.md" requires-python = ">=3.11" license = "MIT" license-files = ["LICENSE"] authors = [{ name = "Cosmin Chauciuc", email = "cosmin.chauciuc@gmail.com" }] keywords = [ "mcp", "model-context-protocol", "text-to-sql", "semantic-layer", "sqlite", "llm", "natural-language-query", ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Topic :: Database", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] dependencies = [ "mcp[cli]>=1.2", "typer>=0.12", "pydantic>=2.0", "pydantic-settings>=2.0", "sqlalchemy[asyncio]>=2.0", "aiosqlite>=0.20", "sqlite-vec>=0.1.6", "asyncpg>=0.30", "httpx>=0.27", "sqlparse>=0.5", "cryptography>=43.0", ] [project.optional-dependencies] llm = [ "anthropic>=0.40", "openai>=1.50", ] bigquery = [ "google-cloud-bigquery>=3.0", ] databricks = [ "databricks-sql-connector[pyarrow]>=3.0", ] dev = [ "pytest>=8.0", "pytest-asyncio>=0.24", "ruff>=0.8", "mypy>=1.13", ] [project.scripts] querywise = "querywise_mcp.cli:app" querywise-mcp = "querywise_mcp.server:main" [project.urls] Homepage = "https://github.com/kosminus/querywise-mcp" Repository = "https://github.com/kosminus/querywise-mcp" Issues = "https://github.com/kosminus/querywise-mcp/issues" [build-system] requires = ["setuptools>=77"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] [tool.ruff] target-version = "py311" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I", "N", "UP", "B"] [tool.ruff.lint.per-file-ignores] # Prompt templates and the IFRS 9 seed-data dicts are intentional long string # literals; reflowing them would hurt readability without any real benefit. "src/querywise_mcp/llm/prompts/*.py" = ["E501"] "src/querywise_mcp/llm/agents/error_handler.py" = ["E501"] "src/querywise_mcp/services/setup_service.py" = ["E501"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"]