[project] name = "openmarkets" version = "0.1.0b1" description = "OpenMarkets is a modular Model Context Protocol (MCP) server that unifies access to financial market data for AI, research, and quantitative finance. It offers robust APIs for historical prices, corporate actions, fundamentals, and more, enabling advanced agentic retrieval, RAG, and LLM-powered workflows." authors = [{ name = "Dobri Danchev" }] classifiers = [ "Development Status :: 4 - Beta", "Operating System :: OS Independent", "Intended Audience :: Developers", "Intended Audience :: Financial and Insurance Industry", "Topic :: Office/Business :: Financial", "Topic :: Office/Business :: Financial :: Investment", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Programming Language :: Python :: 3 :: Only", ] keywords = [ "machinelearning", "finance", "investment", "mcp", "modelcontextprotocol", "yahoo finance", "financial data retrieval", ] readme = "README.md" license = "AGPL-3.0-or-later" license-files = ["LICENSE"] requires-python = ">=3.10" dependencies = [ "mcp[cli]>=2.0.0,<3", "httpx2>=2.12.0,<3", "yfinance>=1.5.2", "lxml>=6.0.2", "curl-cffi>=0.13.0", "numpy>=2.0.0; python_version < '3.13'", "numpy>=2.1.0; python_version >= '3.13' and python_version < '3.14'", "numpy>=2.3.2; python_version >= '3.14'", "pandas>=2.3.3", "pydantic>=2.11.0", "pydantic-settings>=2.7.0", "starlette>=0.50.0", ] [project.urls] Homepage = "https://openmarkets.dev" Source = "https://github.com/danchev/openmarkets" Documentation = "https://danchev.github.io/openmarkets/" Issues = "https://github.com/danchev/openmarkets/issues" [project.scripts] openmarkets = "openmarkets.core.server:main" mcp-server-yfinance = "openmarkets.core.server:main" [build-system] requires = ["uv_build>=0.9.9,<0.13.0"] build-backend = "uv_build" [dependency-groups] dev = [ "debugpy>=1.8.17", "pyright>=1.1.411", "refurb>=2.3.1", "ruff>=0.16.1", "ty>=0.0.68", {include-group = "test"}, {include-group = "commit"}, ] test = [ "httpx>=0.28.1", "pytest>=9.0.2", "pytest-cov>=7.0.0", "pytest-xdist>=3.8.0", "pytest-asyncio>=1.3.0", "coverage>=7.13.1", ] docs = [ "mkdocs>=1.6.1", "mkdocs-glightbox>=0.5.1", "mkdocs-material[imaging]>=9.6.22", "mkdocstrings-python>=1.18.2", ] commit = [ "commitizen>=4.17.0", "pre-commit>=4.5.1", ] [tool.ruff] fix = true show-fixes = true output-format = "full" line-length = 120 target-version = "py310" [tool.ruff.lint] select = ["E", "F", "I", "B", "Q"] ignore = ["E203", "E501"] [tool.ruff.lint.isort] known-first-party = ["openmarkets"] [tool.ruff.format] quote-style = "double" indent-style = "space" line-ending = "auto" [tool.pytest.ini_options] addopts = "-n auto --cov=src/openmarkets --cov-report=html --cov-report=term-missing --cov-fail-under=70 -m \"not live\"" testpaths = ["tests"] python_files = "test_*.py" python_functions = "test_*" filterwarnings = [ "once::Warning", "ignore:unclosed database in