openapi: 3.1.0 info: title: TryMe TPK FastMCP HTTP Server version: '0.1' description: Streamable HTTP Model Context Protocol (MCP) server exposing all 29 TryMe Gaming App API operations (https://tryme.tpk.pw/openapi.json) as MCP tools. servers: - url: http://0.0.0.0:8000 description: Default local/container HTTP bind paths: /mcp: post: tags: - MCP summary: MCP Streamable HTTP Endpoint (JSON-RPC 2.0) operationId: mcp_post description: Accepts MCP JSON-RPC 2.0 messages (`initialize`, `tools/list`, `tools/call`, etc.). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/JsonRpcRequest' responses: '200': description: JSON-RPC response or SSE event stream content: application/json: schema: type: object text/event-stream: schema: type: string get: tags: - MCP summary: MCP Streamable HTTP SSE Listener operationId: mcp_get responses: '200': description: SSE event stream for server-initiated notifications content: text/event-stream: schema: type: string delete: tags: - MCP summary: Terminate MCP HTTP Session operationId: mcp_delete responses: '200': description: Session terminated /health: get: tags: - System summary: MCP Server Container Healthcheck operationId: server_health responses: '200': description: Server health status content: application/json: schema: $ref: '#/components/schemas/ServerHealthOut' /openapi.yaml: get: tags: - System summary: OpenAPI 3.1 YAML Specification operationId: openapi_yaml responses: '200': description: OpenAPI YAML document content: application/yaml: schema: type: string /openapi.json: get: tags: - System summary: OpenAPI 3.1 JSON Specification operationId: openapi_json responses: '200': description: OpenAPI JSON document content: application/json: schema: type: object x-mcp-tools: - name: healthcheck description: Check the health status of the upstream TryMe Gaming App API (`GET /health`). tags: - System inputSchemaRef: '#/components/schemas/Tool_healthcheck_Input' - name: get_auth_config description: Retrieve Auth0 federated login settings, dev-auth status, and admin claim status (`GET /api/v1/auth/config`). tags: - Authentication inputSchemaRef: '#/components/schemas/Tool_get_auth_config_Input' - name: auth0_login description: Initiate the Auth0 federated login flow (`GET /api/v1/auth/login`). tags: - Authentication inputSchemaRef: '#/components/schemas/Tool_auth0_login_Input' - name: auth0_callback description: Handle the Auth0 OAuth callback (`GET /api/v1/auth/callback`). tags: - Authentication inputSchemaRef: '#/components/schemas/Tool_auth0_callback_Input' - name: dev_login description: 'Authenticate using the development login endpoint (`POST /api/v1/auth/dev-login`). Returns an `access_token`, `token_type`, and `user` profile when dev auth is enabled.' tags: - Authentication inputSchemaRef: '#/components/schemas/Tool_dev_login_Input' - name: logout description: Log out the current authenticated session (`POST /api/v1/auth/logout`). tags: - Authentication inputSchemaRef: '#/components/schemas/Tool_logout_Input' - name: get_me description: Retrieve the authenticated user's profile (`GET /api/v1/users/me`). tags: - Users & API Keys inputSchemaRef: '#/components/schemas/Tool_get_me_Input' - name: update_me description: Update the authenticated user's profile (`PATCH /api/v1/users/me`). tags: - Users & API Keys inputSchemaRef: '#/components/schemas/Tool_update_me_Input' - name: get_my_scores description: Retrieve quiz score summaries and attempt counts for the authenticated user (`GET /api/v1/users/me/scores`). tags: - Users & API Keys inputSchemaRef: '#/components/schemas/Tool_get_my_scores_Input' - name: list_api_keys description: List personal API keys belonging to the authenticated user (`GET /api/v1/users/me/api-keys`). tags: - Users & API Keys inputSchemaRef: '#/components/schemas/Tool_list_api_keys_Input' - name: create_api_key description: Create a new personal API key (`POST /api/v1/users/me/api-keys`). Returns `raw_key` once. tags: - Users & API Keys inputSchemaRef: '#/components/schemas/Tool_create_api_key_Input' - name: expire_api_key description: Expire/revoke an existing personal API key (`POST /api/v1/users/me/api-keys/{key_id}/expire`). tags: - Users & API Keys inputSchemaRef: '#/components/schemas/Tool_expire_api_key_Input' - name: list_quizzes description: Search and list quizzes (`GET /api/v1/quizzes`). tags: - Quizzes inputSchemaRef: '#/components/schemas/Tool_list_quizzes_Input' - name: create_quiz description: Create a new quiz (`POST /api/v1/quizzes`). tags: - Quizzes inputSchemaRef: '#/components/schemas/Tool_create_quiz_Input' - name: get_quiz description: Retrieve full details and questions for a quiz (`GET /api/v1/quizzes/{slug_or_id}`). tags: - Quizzes inputSchemaRef: '#/components/schemas/Tool_get_quiz_Input' - name: update_quiz description: Update an existing quiz (`PUT /api/v1/quizzes/{quiz_id}`). tags: - Quizzes inputSchemaRef: '#/components/schemas/Tool_update_quiz_Input' - name: delete_quiz description: Delete a quiz authored by the authenticated user (`DELETE /api/v1/quizzes/{quiz_id}`). tags: - Quizzes inputSchemaRef: '#/components/schemas/Tool_delete_quiz_Input' - name: submit_quiz description: Submit answers for a quiz and receive graded results & scores (`POST /api/v1/quizzes/{quiz_id}/submit`). tags: - Quizzes inputSchemaRef: '#/components/schemas/Tool_submit_quiz_Input' - name: vote_quiz description: Upvote, downvote, or clear vote on a quiz (`POST /api/v1/quizzes/{quiz_id}/vote`). tags: - Quizzes inputSchemaRef: '#/components/schemas/Tool_vote_quiz_Input' - name: list_favourites description: List the authenticated user's favourited quizzes (`GET /api/v1/favourites`). tags: - Favourites inputSchemaRef: '#/components/schemas/Tool_list_favourites_Input' - name: add_favourite description: Add a quiz to the authenticated user's favourites (`POST /api/v1/favourites`). tags: - Favourites inputSchemaRef: '#/components/schemas/Tool_add_favourite_Input' - name: reorder_favourites description: Reorder the authenticated user's favourited quizzes (`PUT /api/v1/favourites/reorder`). tags: - Favourites inputSchemaRef: '#/components/schemas/Tool_reorder_favourites_Input' - name: remove_favourite description: Remove a quiz from the authenticated user's favourites (`DELETE /api/v1/favourites/{quiz_id}`). tags: - Favourites inputSchemaRef: '#/components/schemas/Tool_remove_favourite_Input' - name: claim_initial_moderator description: Claim initial moderator/admin status when no admin exists (`POST /api/v1/admin/claim`). tags: - Moderation inputSchemaRef: '#/components/schemas/Tool_claim_initial_moderator_Input' - name: list_users_for_moderation description: List all users for admin moderation (`GET /api/v1/admin/users`). Requires moderator privileges. tags: - Moderation inputSchemaRef: '#/components/schemas/Tool_list_users_for_moderation_Input' - name: ban_user description: Ban a user (`POST /api/v1/admin/users/{user_id}/ban`). Requires moderator privileges. tags: - Moderation inputSchemaRef: '#/components/schemas/Tool_ban_user_Input' - name: unban_user description: Unban a previously banned user (`POST /api/v1/admin/users/{user_id}/unban`). Requires moderator privileges. tags: - Moderation inputSchemaRef: '#/components/schemas/Tool_unban_user_Input' - name: list_quizzes_for_moderation description: List all quizzes for admin moderation (`GET /api/v1/admin/quizzes`). Requires moderator privileges. tags: - Moderation inputSchemaRef: '#/components/schemas/Tool_list_quizzes_for_moderation_Input' - name: moderator_remove_quiz description: Remove any quiz as a moderator (`DELETE /api/v1/admin/quizzes/{quiz_id}`). Requires moderator privileges. tags: - Moderation inputSchemaRef: '#/components/schemas/Tool_moderator_remove_quiz_Input' components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-API-Key BearerAuth: type: http scheme: bearer SessionCookie: type: apiKey in: cookie name: tryme_session schemas: JsonRpcRequest: type: object required: - jsonrpc - method properties: jsonrpc: type: string const: '2.0' id: anyOf: - type: string - type: integer method: type: string params: type: object ServerHealthOut: type: object required: - status - service - version - transport - mcp_endpoint - upstream_url properties: status: type: string service: type: string version: type: string transport: type: string host: type: string port: type: integer mcp_endpoint: type: string upstream_url: type: string Tool_healthcheck_Input: additionalProperties: false properties: {} type: object Tool_get_auth_config_Input: additionalProperties: false properties: {} type: object Tool_auth0_login_Input: additionalProperties: false properties: return_to: default: / description: Relative path to redirect to after login. type: string type: object Tool_auth0_callback_Input: additionalProperties: false properties: code: description: Authorization code returned by Auth0. type: string state: description: CSRF state parameter returned by Auth0. type: string required: - code - state type: object Tool_dev_login_Input: additionalProperties: false properties: nickname: description: User nickname (2-48 chars). maxLength: 48 minLength: 2 type: string email: anyOf: - maxLength: 255 type: string - type: 'null' default: null description: Optional email address. as_moderator: default: false description: Request moderator privileges in dev mode. type: boolean required: - nickname type: object Tool_logout_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_get_me_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_update_me_Input: additionalProperties: false properties: nickname: anyOf: - maxLength: 48 minLength: 2 type: string - type: 'null' default: null description: Updated nickname. first_name: anyOf: - maxLength: 80 type: string - type: 'null' default: null description: Updated first name. last_name: anyOf: - maxLength: 80 type: string - type: 'null' default: null description: Updated last name. age: anyOf: - maximum: 120 minimum: 4 type: integer - type: 'null' default: null description: Updated age (4-120). clear_age: default: false description: Set to true to clear the stored age. type: boolean gender: anyOf: - type: string - type: 'null' default: null description: Updated gender value. gender_custom: anyOf: - maxLength: 80 type: string - type: 'null' default: null description: Custom gender text. avatar_animal: anyOf: - type: string - type: 'null' default: null description: Avatar animal identifier. avatar_color: anyOf: - type: string - type: 'null' default: null description: Avatar color identifier. public_website_consent: anyOf: - type: boolean - type: 'null' default: null description: Public website display consent flag. api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_get_my_scores_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_list_api_keys_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_create_api_key_Input: additionalProperties: false properties: name: description: Descriptive name for the API key. maxLength: 80 minLength: 1 type: string expires_in_days: anyOf: - maximum: 3650 minimum: 1 type: integer - type: 'null' default: 90 description: Number of days until expiration (1-3650), or null for non-expiring if supported. api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - name type: object Tool_expire_api_key_Input: additionalProperties: false properties: key_id: description: Numeric ID of the API key to expire/revoke. type: integer api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - key_id type: object Tool_list_quizzes_Input: additionalProperties: false properties: q: anyOf: - maxLength: 120 type: string - type: 'null' default: null description: Optional search query string. mode: anyOf: - type: string - type: 'null' default: null description: Optional quiz mode filter (e.g. 'multiple_choice', 'write_in', 'mixed'). mine_only: default: false description: If true, return only quizzes authored by the authenticated user. type: boolean api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_create_quiz_Input: additionalProperties: false properties: title: description: Quiz title (1-140 chars). maxLength: 140 minLength: 1 type: string description: default: '' description: Quiz description (up to 1000 chars). maxLength: 1000 type: string is_public: default: true description: Whether the quiz is publicly listed. type: boolean questions: anyOf: - items: description: Input schema for creating or updating a quiz question. properties: question_type: description: 'Type of question: ''multiple_choice'' or ''write_in''.' enum: - multiple_choice - write_in type: string prompt: description: Question prompt displayed to quiz players. maxLength: 1000 minLength: 1 type: string options: description: List of selectable options (used when question_type is 'multiple_choice'). items: description: Multiple-choice option for a quiz question. properties: id: description: Option identifier (e.g. 'a', 'b', 'opt1'). maxLength: 32 minLength: 1 type: string text: description: Display text of the answer option. maxLength: 300 minLength: 1 type: string required: - id - text type: object type: array correct_answer: description: Option ID (for multiple_choice) or canonical answer text (for write_in). maxLength: 500 minLength: 1 type: string accepted_answers: description: Additional accepted write-in answers. items: type: string type: array required: - question_type - prompt - correct_answer type: object maxItems: 40 type: array - type: 'null' default: null description: Up to 40 quiz questions. api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - title type: object Tool_get_quiz_Input: additionalProperties: false properties: slug_or_id: description: Quiz share slug or numeric quiz ID (passed as string). type: string api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - slug_or_id type: object Tool_update_quiz_Input: additionalProperties: false properties: quiz_id: description: Numeric ID of the quiz to update. type: integer title: description: Updated quiz title (1-140 chars). maxLength: 140 minLength: 1 type: string description: default: '' description: Updated quiz description (up to 1000 chars). maxLength: 1000 type: string is_public: default: true description: Whether the quiz is publicly listed. type: boolean questions: anyOf: - items: description: Input schema for creating or updating a quiz question. properties: question_type: description: 'Type of question: ''multiple_choice'' or ''write_in''.' enum: - multiple_choice - write_in type: string prompt: description: Question prompt displayed to quiz players. maxLength: 1000 minLength: 1 type: string options: description: List of selectable options (used when question_type is 'multiple_choice'). items: description: Multiple-choice option for a quiz question. properties: id: description: Option identifier (e.g. 'a', 'b', 'opt1'). maxLength: 32 minLength: 1 type: string text: description: Display text of the answer option. maxLength: 300 minLength: 1 type: string required: - id - text type: object type: array correct_answer: description: Option ID (for multiple_choice) or canonical answer text (for write_in). maxLength: 500 minLength: 1 type: string accepted_answers: description: Additional accepted write-in answers. items: type: string type: array required: - question_type - prompt - correct_answer type: object maxItems: 40 type: array - type: 'null' default: null description: Full updated list of up to 40 quiz questions. api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_id - title type: object Tool_delete_quiz_Input: additionalProperties: false properties: quiz_id: description: Numeric ID of the quiz to delete. type: integer api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_id type: object Tool_submit_quiz_Input: additionalProperties: false properties: quiz_id: description: Numeric ID of the quiz to submit answers for. type: integer answers: additionalProperties: type: string description: Mapping of question ID (as string) to submitted option ID or write-in answer. type: object api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_id type: object Tool_vote_quiz_Input: additionalProperties: false properties: quiz_id: description: Numeric ID of the quiz to vote on. type: integer value: description: 'Vote value: `1` (upvote), `-1` (downvote), or `0` (remove vote).' enum: - -1 - 0 - 1 type: integer api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_id - value type: object Tool_list_favourites_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_add_favourite_Input: additionalProperties: false properties: quiz_id: description: Numeric ID of the quiz to favourite. type: integer position: anyOf: - minimum: 0 type: integer - type: 'null' default: null description: Optional 0-based position in the favourites list. api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_id type: object Tool_reorder_favourites_Input: additionalProperties: false properties: quiz_ids: description: Ordered list of favourited quiz IDs representing the desired order. items: type: integer type: array api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_ids type: object Tool_remove_favourite_Input: additionalProperties: false properties: quiz_id: description: Numeric ID of the quiz to remove from favourites. type: integer api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_id type: object Tool_claim_initial_moderator_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_list_users_for_moderation_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_ban_user_Input: additionalProperties: false properties: user_id: description: Numeric ID of the user to ban. type: integer reason: default: Community guidelines violation description: Reason for banning the user. maxLength: 255 type: string api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - user_id type: object Tool_unban_user_Input: additionalProperties: false properties: user_id: description: Numeric ID of the user to unban. type: integer api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - user_id type: object Tool_list_quizzes_for_moderation_Input: additionalProperties: false properties: api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. type: object Tool_moderator_remove_quiz_Input: additionalProperties: false properties: quiz_id: description: Numeric ID of the quiz to remove. type: integer api_key: anyOf: - type: string - type: 'null' default: null description: Optional TryMe API key (`X-API-Key` header). Overrides server default if provided. authorization: anyOf: - type: string - type: 'null' default: null description: Optional Bearer token or `Authorization` header value. tryme_session: anyOf: - type: string - type: 'null' default: null description: Optional `tryme_session` cookie value. required: - quiz_id type: object