LPT Hub API and MCP documentation

LPT Hub has a public read-only API for the game list and an MCP server so AI agents can query the same data. No API key or login is needed.

Overview

Base URL: https://lyphucthien.vercel.app/api/v1. All responses are JSON (application/json; charset=utf-8) and every response carries an API-Version header. The machine-readable specification is /openapi.json (OpenAPI 3.1) and the API catalog is at /.well-known/api-catalog.

Authentication

None. The public endpoints are read-only and open. Do not send credentials. Keys are never issued through the API: a user has to complete the short link in their own browser, so an agent cannot get a key for them. The key-check API is reserved for the LPT Hub script and is not part of the public API.

List games

GET /api/v1/games (alias: /api/games) returns the games LPT Hub supports or will support soon.

ParameterTypeDescription
statusstringOptional. all (default), on (supported) or soon (coming soon).
querystringOptional. Keyword, up to 100 characters, matched against the game name and description.
curl -s "https://lyphucthien.vercel.app/api/v1/games?status=on&query=minecraft"

Example response:

{
  "success": true,
  "games": [
    {
      "id": "Game-Mau",
      "name": "Game-Mau",
      "status": "on",
      "type": "",
      "description": "A short description.",
      "image": "",
      "order": 9999,
      "features": [{ "category": "Other", "items": ["Feature 1"] }]
    }
  ],
  "errors": []
}

Each game has id, name, status (on or soon), type (minecraft, lpthub or empty), description, image, order and features (groups with a category and a list of items).

Errors

Errors are always JSON, never an HTML page, with the matching HTTP status:

{
  "success": false,
  "error": "status must be all, on or soon",
  "code": "INVALID_PARAMETER",
  "hint": "Send ?status=on, ?status=soon or omit it.",
  "status": 400,
  "parameter": "status"
}

error is a human-readable message, code is a stable identifier to branch on, and hint says how to fix it. Codes: INVALID_PARAMETER and INVALID_REQUEST (400), FORBIDDEN (403), NOT_FOUND (404, also returned for unknown /api/* paths), METHOD_NOT_ALLOWED (405, with an Allow header), RATE_LIMITED (429) and SERVER_ERROR (500).

Rate limits

Each IP address may make 120 requests per 60 seconds to the API and to the MCP server. Responses include RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset (seconds until the window resets), plus the structured RateLimit-Policy and RateLimit fields. When the limit is exceeded the API answers 429 with a Retry-After header and the RATE_LIMITED error. Responses may be cached for up to a minute, so the header values are advisory.

Versioning and deprecation policy

The API version is in the URL path (/api/v1) and in the API-Version response header. Within a major version, changes only add optional fields, parameters or endpoints, so clients should ignore fields they do not know. A breaking change ships under a new path such as /api/v2. A deprecated version stays available for at least 90 days after it is announced on this page; during that time its responses carry the Deprecation and Sunset headers (RFC 9745 and RFC 8594) with the removal date.

MCP server

Endpoint: https://lyphucthien.vercel.app/mcp (also available at /.well-known/mcp). Streamable HTTP transport; send JSON-RPC with POST; no authentication. There are two read-only tools:

curl -s https://lyphucthien.vercel.app/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Command-line tool

The lpthub-cli package wraps the API for scripts and terminals. It has no dependencies and needs Node 18 or newer:

npx lpthub-cli games --status on --json
npx lpthub-cli key-info

Exit codes: 0 success, 1 request or API error, 2 invalid usage.

Files for agents

/llms.txt describes when to use LPT Hub, /sitemap.xml lists the pages, /openapi.json is the API specification, and the home page returns Markdown when you send Accept: text/markdown.