World of Tanks stats for players, clans and tanks across EU, NA, and Asia.
One address for any MCP client. No sign-in needed on this server.
11 read39 other
Grouped by tool name. At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Free, open-source World of Tanks stats tracker. Player profiles, clan pages, leaderboards. WN7, WN8, WNX. No ads.
Live at unicum.gg.
Next.js 16, React 19, TypeScript, PostgreSQL via Drizzle, Tailwind v4, shadcn/ui, Recharts.
pnpm workspace. Dependencies flow one way, no cycles:
@unicum.gg/wargaming ──▶ @unicum.gg/shared ──▶ @unicum.gg/core ──▶ apps/web (server) + apps/worker
│ HTTP API
@unicum.gg/sdk ◀───────┘
└──▶ web front + apps/bot
| Package / app | Role |
|---|---|
packages/wargaming | Neutral Wargaming API SDK (client, rate limiting, full response types) |
packages/shared | Client-safe foundations: env, constants, db schema, pure domain math and types |
packages/core | Server-only: db pool, redis, crons, repositories, WG fetchers, auth |
packages/sdk | Fluent client for our own public API, types generated from the OpenAPI spec |
apps/web | The Next.js site and public API |
apps/worker | Standalone cron runner |
apps/bot | Discord bot (/player, /clan) |
wargaming, shared and sdk are imported from their package barrel (import { Region } from "@unicum.gg/wargaming"). core is deliberately not a barrel: its modules have import-time side effects (db pool, auth secret assert), so server code imports the specific subpath it needs (@unicum.gg/core/db, ...). The front end and the Discord bot never import core; they consume the API through @unicum.gg/sdk and types through @unicum.gg/shared.
pnpm install
pnpm env:init # generates .env.local from env.ts; fill in the values
pnpm dev
pnpm env:init reads env.ts and writes a .env.local with every required key. If a .env.local already exists it is backed up to .env.local.<timestamp>.bak first, so nothing is lost.
Get the three WG application IDs at developers.wargaming.net (one ID can be reused across regions).
for f in apps/web/drizzle/0*.sql; do psql "$DATABASE_URL" -f "$f"; done
Issues and PRs welcome. Read AGENTS.md first. It is the project's contributing guide and covers the non-obvious foot-guns (schema factory pattern, migration workflow, cron loop, WG fetch and rate limits).
AGPL v3. Copyright (C) 2026 Antoine Kingue.
Not affiliated with Wargaming.net.