Metadata-Version: 2.4
Name: riotskillissue
Version: 1.0.0
Summary: Typed Python client and local MCP server for Riot Games APIs.
Project-URL: Homepage, https://github.com/Demoen/riotskillissue
Project-URL: Repository, https://github.com/Demoen/riotskillissue
Project-URL: Issues, https://github.com/Demoen/riotskillissue/issues
Project-URL: Changelog, https://github.com/Demoen/riotskillissue/blob/main/CHANGELOG.md
Author: Demoen
License-Expression: MIT
License-File: LICENSE
Keywords: api,league-of-legends,lor,mcp,riot,tft,valorant
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3.15
Classifier: Programming Language :: Python :: 3.16
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: <3.17,>=3.14
Requires-Dist: httpx<1,>=0.27.0
Requires-Dist: pydantic<3,>=2.13.4
Requires-Dist: rich>=13.7.0
Requires-Dist: tenacity>=8.2.0
Requires-Dist: typer>=0.12.0
Provides-Extra: dev
Requires-Dist: hatch>=1.14.0; extra == 'dev'
Requires-Dist: jinja2>=3.1.0; extra == 'dev'
Requires-Dist: mcp[cli]<3,>=2; extra == 'dev'
Requires-Dist: mypy>=1.19.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=1.4.0; extra == 'dev'
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: respx>=0.21.0; extra == 'dev'
Requires-Dist: ruff>=0.15.0; extra == 'dev'
Requires-Dist: textual-dev>=1.0.0; extra == 'dev'
Requires-Dist: types-redis; extra == 'dev'
Requires-Dist: types-requests; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
Provides-Extra: mcp
Requires-Dist: mcp<3,>=2; extra == 'mcp'
Provides-Extra: redis
Requires-Dist: redis>=5.0.0; extra == 'redis'
Provides-Extra: tui
Requires-Dist: textual>=0.85.0; extra == 'tui'
Description-Content-Type: text/markdown

# RiotSkillIssue

<div align="center">

![riotskillissue](docs/assets/logo.png)

[![PyPI version](https://badge.fury.io/py/riotskillissue.svg?icon=si%3Apython)](https://badge.fury.io/py/riotskillissue)
[![Python Versions](https://img.shields.io/pypi/pyversions/riotskillissue.svg)](https://pypi.org/project/riotskillissue/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Tests](https://github.com/Demoen/riotskillissue/actions/workflows/test.yml/badge.svg)](https://github.com/Demoen/riotskillissue/actions/workflows/test.yml)
[![PyPI Downloads](https://static.pepy.tech/personalized-badge/riotskillissue?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/riotskillissue)

**Typed async and sync Riot Games APIs, plus an optional local MCP server.**

[Documentation](https://demoen.github.io/riotskillissue/) · [Migration guide](https://demoen.github.io/riotskillissue/migration/) · [API reference](https://demoen.github.io/riotskillissue/api-reference/)

</div>

## Install

RiotSkillIssue 1.0 requires Python `>=3.14,<3.17`, covering Python 3.14,
3.15, and 3.16. As of July 2026, CI gates releases on Python 3.14 and the
current Python 3.15 prerelease. Python 3.16 is still in development, so it is
covered by a non-blocking nightly compatibility probe until its stable release.

```bash
pip install riotskillissue
```

Set `RIOT_API_KEY` or pass a key directly:

```python
import asyncio

from riotskillissue import PlatformRoute, RiotClient


async def main() -> None:
    async with RiotClient(
        api_key="RGAPI-...",
        default_route=PlatformRoute.EUW1,
    ) as riot:
        profile = await riot.lol.player_profile("Player#EUW")
        history = await riot.lol.match_history("Player#EUW", count=5)
        match = await riot.raw.lol.match.get_match(match_id="EUW1_...")
        print(profile, history, match)


asyncio.run(main())
```

The explicit synchronous client provides the same workflows and raw operation
groups:

```python
from riotskillissue import PlatformRoute, SyncRiotClient

with SyncRiotClient(default_route=PlatformRoute.EUW1) as riot:
    print(riot.lol.player_profile("Player#EUW"))
```

## Local MCP server

Install the optional server and run it over stdio:

```bash
pip install "riotskillissue[mcp]"
riotskillissue-mcp
```

The server reads credentials from its environment. API keys and RSO tokens are
never tool arguments. Raw write operations are hidden unless
`RIOT_MCP_ALLOW_WRITES=true`; enabled writes still require human confirmation.

## Coverage and generation

The generated raw API covers every operation in the bundled community-maintained
OpenAPI feed. That feed is not an official Riot Games specification. One
committed operation registry drives raw dispatch, reference documentation, and
MCP discovery.

RiotSkillIssue is not endorsed by Riot Games and does not reflect the views or
opinions of Riot Games or anyone officially involved in producing or managing
Riot Games properties. Riot Games and all associated properties are trademarks
or registered trademarks of Riot Games, Inc.

## License

MIT. See [LICENSE](LICENSE).
