[project]
name = "skill-retriever"
version = "0.1.0"
description = "Graph-based MCP server for Claude Code component retrieval"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"fastembed>=0.7.4",
"gitpython>=3.1.44",
"pydantic>=2.12.5",
"python-frontmatter>=1.1",
"networkx>=3.6.1",
"scipy>=1.15",
"faiss-cpu>=1.13.2",
"rapidfuzz>=3.14",
"fastmcp>=2.14,<3",
# Sync module dependencies
"aiohttp>=3.11",
"httpx>=0.28",
]
[dependency-groups]
dev = [
"pytest>=9.0.2",
"pytest-asyncio>=0.24",
"pytest-cov>=6.0",
"pytest-benchmark>=5.2",
"ruff>=0.14.14",
"pyright>=1.1.408",
"ranx>=0.3.20",
]
[project.scripts]
skill-retriever = "skill_retriever.mcp:main"
[build-system]
requires = ["uv_build>=0.9.28,<0.10.0"]
build-backend = "uv_build"
[tool.ruff]
target-version = "py313"
line-length = 100
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"F", # pyflakes
"W", # pycodestyle warnings
"I", # isort
"N", # pep8-naming
"UP", # pyupgrade
"B", # flake8-bugbear
"SIM", # flake8-simplify
"TCH", # flake8-type-checking
"RUF", # ruff-specific rules
]
[tool.ruff.lint.isort]
known-first-party = ["skill_retriever"]
[tool.pyright]
pythonVersion = "3.13"
typeCheckingMode = "strict"
reportMissingTypeStubs = false
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]