trymemcp/README.md

150 lines
6.3 KiB
Markdown
Raw Permalink Normal View History

2026-11-12 03:23:16 +00:00
# TryMe TPK MCP Server (`trymemcp`)
A Python [FastMCP](https://gofastmcp.com) **Streamable HTTP** Model Context Protocol (MCP) server bound to all interfaces (`0.0.0.0:8000`) that exposes all **29** API operations from [`https://tryme.tpk.pw/openapi.json`](https://tryme.tpk.pw/openapi.json) as strongly typed MCP tools.
## Features
- **HTTP Transport on All Interfaces (`0.0.0.0`)**: Serves MCP Streamable HTTP at `http://0.0.0.0:8000/mcp` out of the box.
- **Complete OpenAPI Coverage (29 Tools)**: Covers System Health, Auth0 & Dev Authentication, User Profiles & Personal API Keys, Quiz Creation/Play/Voting, Favourites, and Admin Moderation.
- **Flexible Authentication**: Supports per-tool credentials (`api_key`, `authorization`, `tryme_session`), automatic HTTP header/cookie passthrough from MCP clients (`X-API-Key`, `Authorization`, `Cookie: tryme_session=...`), and server environment variable defaults (`TRYME_API_KEY`, `TRYME_BEARER_TOKEN`, `TRYME_SESSION_COOKIE`).
- **Production Container & CI/CD Ready**: Multi-stage `python:3.11-slim` `Dockerfile` with `/health` healthcheck, `docker-compose.yaml`, `helm-chart/`, OpenAPI 3.1 spec (`/openapi.yaml`, `/openapi.json`), and Gitea Actions CI/CD workflow (`.gitea/workflows/cicd.yaml`).
---
## Quick Start
### Prerequisites
- Python **3.11+** (or Docker 24+ / Docker Compose v2)
- Optional: A personal TryMe API key (`X-API-Key`) or Bearer token for authenticated endpoints
### Run Locally
```bash
python3 -m venv venv
venv/bin/pip install --upgrade pip
venv/bin/pip install -e ".[dev]"
# Start the FastMCP HTTP server on 0.0.0.0:8000
venv/bin/python -m app.main
```
Or run via Uvicorn directly:
```bash
venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
```
### Run with Docker / Docker Compose
```bash
# Docker
docker build -t trymemcp:0.1 .
docker run --rm -p 8000:8000 -e TRYME_API_KEY="your-api-key" trymemcp:0.1
# Docker Compose
docker compose up --build -d
```
---
## Connecting an MCP Client
Point any Streamable HTTP MCP client at `http://<server-ip>:8000/mcp`:
```json
{
"mcpServers": {
"tryme": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": {
"X-API-Key": "YOUR_TRYME_API_KEY"
}
}
}
}
```
---
## HTTP Endpoints
| Method | Path | Description |
| :--- | :--- | :--- |
| `POST` / `GET` / `DELETE` | `/mcp` | MCP Streamable HTTP endpoint (JSON-RPC 2.0 + SSE) |
| `GET` | `/health` | Container & Kubernetes liveness/readiness healthcheck |
| `GET` | `/openapi.yaml` | OpenAPI 3.1 YAML specification & MCP tool schemas |
| `GET` | `/openapi.json` | OpenAPI 3.1 JSON specification & MCP tool schemas |
---
## Exposed MCP Tools (29 Tools)
### System
| Tool | Upstream Endpoint | Description |
| :--- | :--- | :--- |
| `healthcheck` | `GET /health` | Check upstream TryMe Gaming App API health |
### Authentication
| Tool | Upstream Endpoint | Description |
| :--- | :--- | :--- |
| `get_auth_config` | `GET /api/v1/auth/config` | Get Auth0 settings, dev-auth status, and unclaimed admin status |
| `auth0_login` | `GET /api/v1/auth/login` | Initiate Auth0 federated login flow |
| `auth0_callback` | `GET /api/v1/auth/callback` | Complete Auth0 OAuth callback (`code`, `state`) |
| `dev_login` | `POST /api/v1/auth/dev-login` | Authenticate via dev login (`nickname`, `email`, `as_moderator`) |
| `logout` | `POST /api/v1/auth/logout` | Log out the active session |
### Users & API Keys
| Tool | Upstream Endpoint | Description |
| :--- | :--- | :--- |
| `get_me` | `GET /api/v1/users/me` | Retrieve the authenticated user's profile |
| `update_me` | `PATCH /api/v1/users/me` | Update nickname, name, age, gender, avatar, or consent |
| `get_my_scores` | `GET /api/v1/users/me/scores` | Retrieve quiz attempt counts, latest, best, and global best scores |
| `list_api_keys` | `GET /api/v1/users/me/api-keys` | List personal API keys |
| `create_api_key` | `POST /api/v1/users/me/api-keys` | Create a personal API key (`name`, `expires_in_days`) |
| `expire_api_key` | `POST /api/v1/users/me/api-keys/{key_id}/expire` | Immediately expire/revoke an API key |
### Quizzes
| Tool | Upstream Endpoint | Description |
| :--- | :--- | :--- |
| `list_quizzes` | `GET /api/v1/quizzes` | Search and list quizzes (`q`, `mode`, `mine_only`) |
| `create_quiz` | `POST /api/v1/quizzes` | Create a new quiz with multiple-choice or write-in questions |
| `get_quiz` | `GET /api/v1/quizzes/{slug_or_id}` | Fetch full quiz details by share slug or ID |
| `update_quiz` | `PUT /api/v1/quizzes/{quiz_id}` | Update an existing quiz |
| `delete_quiz` | `DELETE /api/v1/quizzes/{quiz_id}` | Delete a quiz owned by the authenticated user |
| `submit_quiz` | `POST /api/v1/quizzes/{quiz_id}/submit` | Submit quiz answers and receive graded results & scores |
| `vote_quiz` | `POST /api/v1/quizzes/{quiz_id}/vote` | Upvote (`1`), downvote (`-1`), or clear vote (`0`) on a quiz |
### Favourites
| Tool | Upstream Endpoint | Description |
| :--- | :--- | :--- |
| `list_favourites` | `GET /api/v1/favourites` | List favourited quizzes in display order |
| `add_favourite` | `POST /api/v1/favourites` | Add a quiz to favourites at an optional `position` |
| `reorder_favourites` | `PUT /api/v1/favourites/reorder` | Reorder favourited quizzes by `quiz_ids` |
| `remove_favourite` | `DELETE /api/v1/favourites/{quiz_id}` | Remove a quiz from favourites |
### Moderation
| Tool | Upstream Endpoint | Description |
| :--- | :--- | :--- |
| `claim_initial_moderator` | `POST /api/v1/admin/claim` | Claim initial moderator/admin privileges if unclaimed |
| `list_users_for_moderation` | `GET /api/v1/admin/users` | List all users for moderation |
| `ban_user` | `POST /api/v1/admin/users/{user_id}/ban` | Ban a user with a moderation `reason` |
| `unban_user` | `POST /api/v1/admin/users/{user_id}/unban` | Unban a user |
| `list_quizzes_for_moderation` | `GET /api/v1/admin/quizzes` | List all quizzes for moderation |
| `moderator_remove_quiz` | `DELETE /api/v1/admin/quizzes/{quiz_id}` | Remove any quiz as moderator |
---
## Testing
```bash
venv/bin/pytest
```
## Documentation
- [`SETUP.md`](./SETUP.md) — End-to-end setup, authentication configuration, MCP client setup, Docker/Helm deployment, and Gitea CI/CD guide
- [`INSTALL.md`](./INSTALL.md) — Environment installation & operator reference
- [`SYSTEM.md`](./SYSTEM.md) — System architecture & Mermaid diagrams