Skip to main content
Glama
zachyt

jita-mcp

by zachyt

jita-mcp

Remote MCP server that gives Claude and Gemini ground truth on EVE Online ship fittings: stat validation, effective DPS/EHP with skills and bonuses applied, and live market prices. The LLM brings EVE meta knowledge (what's good for what content); this server answers "does this fit actually work and what does it cost."

Architecture

Claude / Gemini (web)
  └── MCP connector (Streamable HTTP)
        ├── SDE      — static data export (ships, modules, dogma, skills)
        ├── eos      — dogma / fitting calculation engine (TBD: vendored Pyfa)
        └── ESI      — live market prices, cached

Three independent inputs (our code, the engine, the SDE) get baked into one runtime container via a multi-stage Dockerfile. Each input has its own cache layer so a change in one doesn't invalidate the others.

Tools

Tool

Purpose

get_ship_info

Slot layout, fitting room, base resists, bonuses

get_modules_for_goal

Ranked modules toward a goal (ehp, dps, speed, …)

get_modules_by_attribute

Ranked modules by a specific dogma attribute

calculate_fit

Validate a full fit; return all stats and errors

export_eft

EFT string + required-skills list for a valid fit

Dev setup

Requires Python 3.12+ and uv. On macOS:

brew install uv

Bootstrap

git clone --recurse-submodules <repo-url> jita-mcp
cd jita-mcp
git submodule update --init --recursive    # only if you forgot --recurse-submodules
uv sync                                    # creates .venv, installs deps
python3 scripts/fetch_sde.py               # downloads + decompresses SDE (~130MB)

Day-to-day

uv is the entry point for everything — no task runner, no Makefile.

Command

What it does

uv sync

Install / sync Python deps

uv run pytest

Run the test suite

uv run ruff check

Lint

uv run ruff format

Format

uv run jita-mcp

Start the MCP server on :8080

python3 scripts/fetch_sde.py

Idempotent SDE download (pinned by sde.checksum)

SDE

The Static Data Export (~700MB uncompressed) is sourced from Fuzzwork and pinned by MD5 in sde.checksum so dev/CI/prod builds are reproducible. python3 scripts/fetch_sde.py is idempotent — it skips the download when the local file already matches the pinned MD5. To pull whatever is currently live upstream (useful for the SDE-watch workflow), run:

python3 scripts/fetch_sde.py --version latest

Submodule (Pyfa)

The fitting engine lives at vendor/pyfa/ as a git submodule pinned to a specific Pyfa commit. The pin moves only via an explicit git submodule update --remote vendor/pyfa && git commit — automated by a scheduled GitHub Action that opens a PR when upstream advances.

Project layout

jita_mcp/
  server.py             MCP entry point, tool registration
  config.py             env-driven settings
  tools/                one module per MCP tool (stubbed)
  engine/               dogma / fitting engine wrapper (eos, TODO)
  db/sde.py             SDE query helpers (all SQL lives here)
  esi/                  ESI client + price cache
tests/
  fixtures/             tiny synthetic SDE for unit tests
scripts/
  fetch_sde.py          idempotent SDE downloader
vendor/
  pyfa/                 git submodule → pyfa-org/Pyfa (we use vendor/pyfa/eos)
Dockerfile              4-stage build (sde, eos, app, runtime)
sde.checksum            pinned Fuzzwork SDE MD5

License

GPL-3.0-or-later. Required because the project links the eos fitting engine, which is GPL-3.0.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zachyt/jita-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server