Skip to main content
Glama
Dreiev

l2calendar-mcp

README.md
# l2calendar-mcp

MCP server for [L2 Calendar](https://l2calendar.com) — query upcoming **Lineage 2 private server openings** by chronicle directly from any MCP client (Claude Desktop, Cursor, VS Code, Windsurf, Cline...).

It wraps the free, public, CORS-enabled [L2 Calendar API](https://l2calendar.com/api/servers) and exposes it as MCP tools.

## Tools

| Tool | What it does |
|------|--------------|
| `list_servers` | List tracked servers, ordered by VIP status + opening date. Filters: `chronicle`, `only_upcoming`, `new_only`, `min_rate`, `max_rate`, `limit`. |
| `get_chronicles` | List every chronicle (slug + display name) to use as a filter. |
| `search_servers` | Free-text search across name, website, rate, chronicle, description and labels. |
| `get_server` | Full public record of one server by exact name (case-insensitive). |
| `list_labels` | Distinct labels in use (PTS, Low rate, Craft...) with colors. |

Every result is JSON, ready for the model to reason about.

## Data source

All data comes from the public API:

- `GET https://l2calendar.com/api/servers` — up to 50 servers per call, optional `?chronicle=<slug>` filter.
- `GET https://l2calendar.com/api/chronicles` — the chronicle catalog.

The API is read-only, requires no key and sends `Access-Control-Allow-Origin: *`.

Fields returned per server: `name`, `website_url`, `rate`, `opening_date`, `opening_time`, `opening_datetime_utc`, `description`, `is_vip`, `vip_level`, `multiproff`, `multicraft`, `is_new`, `chronicle` and `labels`.

> **Note:** the public API returns a single page of up to 50 servers (VIP first, then soonest opening). Tools that filter or search operate on that public page. Increase precision with the `chronicle` filter.

## Install

### Remote (HTTP) — no install

When hosted, point your client at the streamable HTTP endpoint:

```json
{
  "mcpServers": {
    "l2calendar": {
      "type": "http",
      "url": "https://<your-host>/mcp"
    }
  }
}
```

### Local (stdio) via npx

```json
{
  "mcpServers": {
    "l2calendar": {
      "command": "npx",
      "args": ["-y", "l2calendar-mcp"]
    }
  }
}
```

### Local (stdio) from source

```bash
git clone https://github.com/Dreiev/l2calendar-mcp.git
cd l2calendar-mcp
npm install
npm run build
```

```json
{
  "mcpServers": {
    "l2calendar": {
      "command": "node",
      "args": ["/absolute/path/to/l2calendar-mcp/dist/index.js"]
    }
  }
}
```

## Run the HTTP transport

```bash
node dist/index.js --http            # http://127.0.0.1:8787/mcp
node dist/index.js --http --port 9000
```

`GET /health` returns `{ "status": "ok" }` for uptime checks.

## Configuration

| Variable | Default | Purpose |
|----------|---------|---------|
| `L2CALENDAR_API_URL` | `https://l2calendar.com` | Base URL of the L2 Calendar instance to query. |

## Example prompts

- "List the Interlude servers opening soon."
- "Which Classic servers are new this week?"
- "Search for High Five servers with rate x1000."
- "Show me every chronicle L2 Calendar tracks."
- "Get the details of the server named L2Hispano."

## Development

```bash
npm install
npm run build      # tsc -> dist/
npm run dev        # run src/index.ts directly (Node >= 22)
npm run start:http # build output over HTTP
```

## About L2 Calendar

L2 Calendar is a multilingual (EN/ES/PT/RU) calendar and tracker of Lineage 2 private server openings by chronicle — [l2calendar.com](https://l2calendar.com).

## License

MIT © Dreiev

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation4/5

Most tools have clearly distinct purposes, with list_servers, search_servers, and get_server each serving different retrieval modes. The only possible confusion is between list_servers and search_servers, since both return servers, but their filtering vs. free-text search approaches are described distinctly.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: list_servers, get_chronicles, search_servers, get_server, list_labels. The verbs (list, get, search) are predictable and match the action each tool performs.

Tool Count5/5

Five tools is a well-scoped set for a read-only calendar/lookup service. Each tool covers a distinct need—listing, searching, detail retrieval, and reference lookups—without unnecessary redundancy or bloat.

Completeness5/5

The tool surface fully covers the apparent read-only domain: broad listing with filters, free-text search, exact record retrieval, and enumeration of chronicles and labels. No obvious dead ends or missing operations for the stated purpose.