eve-sde-mcp
This MCP server provides Eve Online static data, live ESI character/market/industry/fitting data, and a local accounting ledger with autonomous daily close.
Search and resolve items, groups, categories, market groups, systems, regions, stations, and blueprints via the SDE.
Get detailed type attributes, effects, dogma, compare types, run raw SQL queries, and refresh the SDE.
Authenticate via EVE SSO and manage multiple characters; read skills, attributes, skill queue, and check skill requirements.
Access wallet balance, orders, journal, transactions, market prices, region/structure orders, and market history.
Sync and analyze a local wallet ledger with FIFO cost basis, daily P&L closes, open lots, station fee models, and autoclose status.
Retrieve killmails and fittings; save/delete/parse fittings; check fitting CPU/PG/calibration/slots; price fits; convert killmails to EFT.
Manage industry jobs, cost indices, price builds, character blueprints, scan build candidates, assets, and contracts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@eve-sde-mcp Get the fitting stats for a Vexor."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
eve-sde-mcp
MCP server providing access to Eve Online's Static Data Export (SDE) and live character data via the ESI API — ship stats, module attributes, universe data, industry blueprints, character skills, and more.
A companion skill bundle ships in skills/eve-trading/ as one installable plugin package (also listed in the eve-sde marketplace at .claude-plugin/marketplace.json), covering three independently-triggered skills: eve-trading (hybrid station trading workflows), eve-fitting (fitting discipline), eve-industry (build-margin verification via price_build, production review, BPO candidate selection). Installing the eve-trading plugin gets you all three.
Static data is powered by the Fuzzwork SQLite conversion of CCP's SDE. Live data uses EVE SSO OAuth with PKCE (no client secret needed).
Tools
Static Data (SDE)
Tool | Description |
| Search items by name with category/group filters |
| Resolve many exact item names to type IDs in one call (reports missing and ambiguous names) |
| Full type detail with dogma attributes, effects, and traits |
| Dogma attributes (CPU, PG, damage, resists, etc.) |
| Effects and slot type (hi/med/low/rig) |
| Side-by-side attribute comparison for multiple types |
| Inventory group with all types |
| Inventory category with child groups |
| Market group tree navigation |
| Search solar systems by name |
| System details, connected systems, stations |
| Region with constellations |
| Resolve a station or player-structure id to name, solar system, structure type, and the system's industry cost indices — NPC stations from the SDE, Upwell structures via authenticated ESI (esi-universe.read_structures.v1). Also enriches get_industry_jobs and get_character_assets with resolved facility/location names |
| Station details |
| Blueprint materials, products, skills, time |
| Find blueprints by product name |
| Raw read-only SQL against the SDE |
| SDE version, download date, table list |
| Download/update the SDE from Fuzzwork |
Live Character Data (ESI)
Tool | Description |
| Start EVE SSO OAuth login flow |
| Show authenticated characters and token status |
| Remove stored tokens for a character |
| Switch active character for queries |
| All trained skills with SDE-enriched names and groups |
| Current skill training queue |
| Character attributes (int/mem/per/will/cha) |
| Check if character meets skill reqs for a ship/module |
Market & Trading (ESI)
Tool | Description |
| Character ISK balance |
| Open market orders with item names |
| Completed/cancelled/expired orders; |
| ISK income/expense log |
| Recent market buys/sells with item names |
| Global average/adjusted prices (public) |
| Market orders for an item in a region (public); |
| Daily price/volume history for an item (public); |
| Orders in a player-owned structure (authenticated) |
| List type IDs with active orders in a region (public) |
Accounting Ledger (local)
ESI's wallet journal/transactions only cover a rolling ~30 days and order history ~90 days — these tools persist synced data permanently in a local SQLite ledger (~/.eve-sde/ledger.db) so realized P&L, FIFO cost basis, daily closes, and relisting-fee correlation all survive past those windows.
Tool | Description |
| Pull all currently-available wallet journal + transactions + orders into the local ledger |
| Sync, apply FIFO cost-basis matching, and compute a day's realized/unrealized P&L — defaults to the last completed UTC day (00:00–24:00); past dates get historical marks + reconstructed escrow, and every close reconciles NAV change vs. prior close; broker fees split into new-listing vs. relisting. BOM linkage: delivered manufacturing jobs consume material FIFO lots and create product lots at all-in basis, with a production section in the report |
| Same day-close, broken out per item type_id instead of one portfolio total, incl. both directions of relisting-fee attribution and all-in net P&L per position |
| Read a previously computed close for one date |
| Read a range of computed closes, with summed totals |
| List current open FIFO lots (unsold inventory with acquisition cost, all-in cost basis incl. acquisition churn, and the sell-side relisting fees already sunk per position) |
| Station broker-fee models for fee/order matching — config-first ( |
| Inspect the autonomous daily-close heartbeat: config, per-character coverage of recent days, and the run log |
Autonomous daily close. While the server is running it closes days by itself: it syncs the wallet ledger once its last sync is older than 4 hours, and closes every completed UTC day (including backfilling gaps up to 25 days) once EVE downtime (~11:05 UTC) has published that day's market history — the default cutoff is 11:30 UTC. Everything is condition-based and idempotent, so a sleeping machine or a closed MCP client just means the next heartbeat catches up; nothing is lost as long as gaps stay under ESI's ~30-day windows. Failed attempts never accelerate the next tick, and both closes and syncs are capped per day, so a dead refresh token or an ESI outage backs off to the normal interval instead of hammering the API. Every attempt (success or failure) is logged to the autoclose_runs table — get_autoclose_status shows coverage and history. Configure or disable via ~/.eve-sde/config.json:
{
"autoClose": {
"enabled": true,
"minUtcHour": 11.5,
"tickMinutes": 30,
"syncMaxAgeHours": 4,
"lookbackDays": 25,
"maxAttemptsPerDate": 3,
"maxBackfillsPerTick": 5,
"maxSyncAttemptsPerDay": 3
}
}Station fee models (config-first). Broker fees differ per station, and the ledger's fee/order matching needs each station's model: ~/.eve-sde/config.json pins them. Components are additive — expected fee = order value × pct/100 + flat (a pure-percentage station sets only brokerFeePct; a Perimeter-style structure sets the 0.5% SCC surcharge plus its flat structure fee). Stations not in config derive a percentage from the character's own unambiguous fee/order history; stations with neither use the generic default and are flagged. salesTaxPct covers the character-level sales tax used for net-of-tax marks.
{
"clientId": "your_client_id_here",
"salesTaxPct": 3.4,
"stationFees": {
"60003760": { "brokerFeePct": 1.491, "label": "Jita 4-4 CNAP" },
"1044752365771": { "brokerFeePct": 0.5, "brokerFeeFlat": 100, "label": "Perimeter 0.0% Neutral States Market HQ" }
},
"blueprintME": {
"2047": 10,
"1404": 8
}
}get_station_fees shows the resolution per station and lists any unconfigured stations you trade at.
blueprintME is the FALLBACK for the close's bill-of-materials ME resolution (keyed by blueprint type id). The primary source is the character's synced ESI blueprints — each delivered job's own BPO is matched by item id for its exact ME (get_character_blueprints; requires esi-characters.read_blueprints.v1, in the default login scope set since this feature — re-auth once if your token predates it). Unlisted and unsynced blueprints default to ME 0 (base quantities, conservative basis). The daily close consumes delivered manufacturing jobs' materials from FIFO buy lots oldest-first and creates product lots at all-in basis (materials + installation); product sells then match real cost basis, and the close report carries a production section.
Killmails (ESI)
Tool | Description |
| Character's recent kills and losses (IDs + hashes) |
| Full killmail detail with victim fitting, attackers, SDE names (public) |
Fittings (ESI)
Tool | Description |
| All saved fittings with ship/module names from SDE |
| Save a fitting from EFT format or structured input (write) |
| Delete a saved fitting by ID (write) |
| Preview EFT parsing without saving — resolves names to IDs and slot flags; tolerates empty-slot markers, offline markers, x-quantities, mutated-module warnings |
| Exact fit check: CPU/PG/calibration/slot/hardpoint/drone-bay budgets from the SDE with skill effects applied (CPU/PG Management, Weapon/AWU, Evasive Maneuvering, weapon-rig drawbacks), plus a mass/inertia/align section (ln(4) in-game warp-entry formula, stack-penalized agility modifiers, online prop mass additions — the MWD passive-mass trap; sim-validated within ~2%); unmodeled effects listed (pyfa territory) |
| Reconstruct a killmail victim's fit (destroyed + dropped) as EFT — feeds check_fitting / price_fitting / save_fitting |
| Sum the cheapest sell orders per fit item at a station (default Jita 4-4) — the real acquisition cost of a fit |
Industry & Assets (ESI)
Tool | Description |
| Active/recent manufacturing, research, invention jobs |
| System cost indices for industry (public) |
| Price a manufacturing job before committing runs: ME-adjusted blueprint materials at live market prices + installation cost vs the product's net sell — unit build cost and margin on both acquisition bases (materials at sell orders = instant/conservative, at buy orders = patient), book depths, thin-book warnings. Born from a production audit that found a 400-run job committed at +0.9% margin |
| The character's blueprints with ME/TE/runs from ESI — also feeds the BOM pass's exact per-BPO ME resolution |
| Discover industry candidates: screen every market-obtainable T1 manufacturing BPO in a category (or a specific product list — synergy mode) with ESI bulk adjusted prices, then LIVE-verify the top candidates at a station (order-book margins on both bases, 30-day traded volume, book depths, input cost-share). Screen ranks, verification decides — the closed SDE blueprint universe makes industry discovery self-sufficient, no external tier feeds needed |
| Items in hangars/containers with names; rows carry |
| Courier, item exchange, auction contracts |
Related MCP server: eve-online-traffic-mcp
Setup
Requires Node.js 22+ (managed with fnm — the version is pinned in .node-version). Development and the deployed server both run this pinned version.
git clone https://github.com/ramonvanalteren/eve-sde-mcp.git
cd eve-sde-mcp
fnm use # switch to the pinned Node before installing
npm install
npm run buildThe SDE database (~460MB) is auto-downloaded to ~/.eve-sde/eve.db on first run.
Server install (production)
The MCP server is installed separately from the development checkout — it never runs from the repo directly:
fnm use # deploy refuses to run under the wrong Node
npm run deploynpm run deploy builds dist/, wipes and repopulates ~/.eve-sde/server/ (dist, a production-only node_modules built for the pinned runtime, a start.sh launcher with the resolved Node path baked in), verifies the native binding there, and updates the Claude Desktop config (with a timestamped backup; --no-config skips). Restart Claude Desktop afterwards. The resulting config entry is:
{
"mcpServers": {
"eve-sde": {
"command": "/Users/you/.eve-sde/server/start.sh"
}
}
}Updates are the same command — it's a clean redeploy. Data (eve.db, ledger.db, auth.db, config.json) lives in ~/.eve-sde/ and is shared between the installed server and dev runs, unchanged by deploys.
Why the separation exists: the server used to run from this checkout via bootstrap.mjs, launched by the MCP client under /opt/homebrew/bin/node while development ran under fnm — two runtimes, one shared node_modules. The launcher's on-mismatch "npm rebuild" silently flipped the better-sqlite3 binary between ABIs on every relaunch, racing the dev shell's own rebuilds; a torn binary left macOS killing every process that tried to load it (Code Signature Invalid). Two rules now prevent that class of failure:
The server owns its install.
~/.eve-sde/server/is independent of the dev tree — branch switches,npm install, and rebuilds in the repo can't affect a running or deployed server, and vice versa.Launchers never rebuild.
start.sh(repo and install) andbootstrap.mjsverify the binding and fail loudly with the fix on mismatch. They never mutatenode_modules— silent self-repair by a launcher running under an unexpected runtime is what corrupted the shared install.
Claude Desktop / Claude Chat
Use the deployed install (see Server install) — don't point an MCP client at the dev checkout. If you know what you're doing and want a dev-tree launch anyway:
{
"mcpServers": {
"eve-sde": {
"command": "/path/to/eve-sde-mcp/start.sh"
}
}
}Restart Claude Desktop to connect.
ESI Authentication
To use the live character data tools, you need an EVE SSO application:
Register at https://developers.eveonline.com — create an app with "Authentication & API Access", callback URL
http://localhost:8085/callbackCreate
~/.eve-sde/config.json:{ "clientId": "your_client_id_here" }Use the
esi_logintool — it opens a browser for EVE SSO login and stores encrypted tokens locally
Tokens are encrypted at rest (AES-256-GCM) and stored in ~/.eve-sde/auth.db. Scopes include skill reading, wallet, market, industry, assets, blueprints, universe structures, contracts, and fittings (read+write). Multi-character support is built in.
Development
fnm use
npm run dev # Run with tsx (no build needed)
npm test # Run test suite
npm run test:watch # Watch mode
npm run build # Compile TypeScript
npm run rebuild # Rebuild better-sqlite3 for the current fnm Node
npm run deploy # (Re)install the server to ~/.eve-sde/serverstart.sh and bootstrap.mjs (dev-tree launchers) check that the native binding loads under the resolved runtime and exit with instructions on mismatch — they never rebuild automatically. If the binding breaks after a Node switch, run fnm use (to the .node-version pin) and npm run rebuild.
Versioning
Two things carry a semver version, each bumped in the same commit/PR that changes it — not on a schedule, not batched up later:
The MCP server —
package.json"version". This is the single source of truth:src/server.tsreads it at construction (createServer()), so the version the client sees (get_sde_status, MCPinitialize) can't drift frompackage.jsonby forgetting a second edit.The
eve-tradingskill plugin —skills/eve-trading/.claude-plugin/plugin.json"version". It bundles three independently-triggered skills (eve-trading, eve-fitting, eve-industry); a change to any one of them bumps this one version, since they ship together as a single install.
Bump rule for both, by the nature of the change:
PATCH — bug fix, formula/rounding correction, doc/reference wording fix, no behavior or interface change a caller/reader needs to know about.
MINOR — new tool, new skill workflow, new optional parameter, materially expanded guidance — additive, backward compatible.
MAJOR — a tool's parameters/output shape change incompatibly, a tool is removed, or a skill's guidance changes in a way that contradicts what it said before (e.g. a formula correction that flips a number callers already depend on — judgment call between PATCH and MAJOR: PATCH if the old behavior was simply wrong and nothing sane depended on the bug, MAJOR if something plausibly did).
If a PR touches both src/ and skills/eve-trading/, bump both independently against their own history — they are not tied together.
Data
SDE:
~/.eve-sde/eve.db— userefresh_sdeto updateAuth tokens:
~/.eve-sde/auth.db— encrypted, useesi_logoutto removeConfig:
~/.eve-sde/config.json— EVE SSO Client IDThe
query_sdetool allows arbitrary SELECT queries for anything the specific tools don't cover
License
MIT
Available Tools
17 toolscompare_typesA
Compare dogma attributes side-by-side for multiple types. Useful for comparing ships or modules.
Inputs: type_ids (required), attributes.
get_blueprintB
Get Eve Online blueprint details — materials, products, skills, and time for all activities (manufacturing, invention, copying, ME/TE research, reaction).
Inputs: blueprint_type_id (required).
get_categoryB
Get an Eve Online inventory category (e.g. Ship, Module, Drone, Charge) with its child groups.
Inputs: category_id, name.
get_groupA
Get an Eve Online inventory group by ID or name, with all types in that group.
Inputs: group_id, name, include_types.
get_market_groupB
Navigate the Eve Online market group tree. Returns group info and children (subgroups or types).
Inputs: market_group_id.
get_regionB
Get an Eve Online region with its constellations and system count.
Inputs: region_id, name.
get_sde_statusA
Get the current status of the Eve Online SDE database — version, download date, file size, and available tables.
Inputs: no named parameters.
get_stationC
Get Eve Online station details.
Inputs: station_id, name.
get_systemA
Get details for an Eve Online solar system — security status, constellation, region, and connected stargates.
Inputs: system_id, name.
get_typeA
Get full details for an Eve Online type by ID, including all dogma attributes (CPU, powergrid, damage, resistances, etc.), effects, traits, and meta info.
Inputs: type_id (required).
get_type_attributesA
Get all dogma attributes for a type, with human-readable names and units. Essential for fitting: CPU, powergrid, capacitor, damage, tracking speed, signature radius, resistances, etc.
Inputs: type_id (required), filter.
get_type_effectsB
Get effects for a type — determines slot type (hiSlot, medSlot, loSlot, rigSlot), activation effects, passive bonuses, etc.
Inputs: type_id (required).
query_sdeA
Run a read-only SQL query against the Eve Online SDE database. Only SELECT statements are allowed. Use this for anything the other tools don't cover.
Inputs: sql (required), params.
refresh_sdeA
Download or update the Eve Online SDE database from Fuzzwork. This replaces the current database with the latest version. Takes a minute or two.
Inputs: no named parameters.
search_blueprintsA
Search for Eve Online blueprints by product name. Find what blueprint makes a given item.
Inputs: product_name (required), limit.
search_systemsC
Search Eve Online solar systems by name.
Inputs: query (required), limit.
search_typesB
Search Eve Online item types by name. Returns type_id, name, group, and category. Use this to find ships, modules, ammo, drones, etc.
Inputs: query (required), category, group, published_only, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Most tools have distinct purposes, but there is some overlap between get_type, get_type_attributes, and get_type_effects, as well as between get_blueprint and search_blueprints. However, descriptions clarify the differences, and the overlap is minimal.
Tool names follow a consistent verb_noun pattern (get_, search_, compare_, query_, refresh_), with only minor plural/singular variations that are intuitive. The naming is predictable and clear.
17 tools is slightly above average but appropriate for the large EVE Online SDE domain. Each tool serves a clear purpose, and the count is reasonable for covering types, blueprints, systems, regions, and custom queries.
The tool surface is remarkably complete for an SDE database, covering retrieval of all major entity types (types, blueprints, systems, regions, stations, market groups, categories, groups) plus search, comparison, and raw SQL access for edge cases.
Related MCP Connectors
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Read-only MCP server for wafergraph.com's semiconductor & AI supply-chain data: 30 tools, no auth.
Official remote MCP server for Archivist AI TTRPG campaign memory: characters, sessions, and more.
Historical tick, order book and settlement data for Polymarket and Predict.fun crypto up/down markets, plus smart-money lists and backtest quotes, over a read-only MCP server.
Related MCP Servers
- AlicenseAqualityDmaintenanceThis MCP server allows you to interact with the EVE Tycoon API to retrieve market data, price statistics, order books, and historical pricing information for EVE Online items across different regions.64MIT
- AlicenseAqualityDmaintenanceA comprehensive Model Context Protocol (MCP) server for EVE Online traffic, navigation, and system information using both the official ESI API and SDE data.206TypeScriptMIT
- FlicenseAqualityNot gradedmaintenanceAn MCP server that provides Claude with direct access to EVE Online character data, market prices, killboard intelligence, wiki knowledge, and game mechanics. It enables natural language interaction for checking skills, analyzing fittings, setting in-game destinations, and accessing real-time EVE Online information.37-
- AlicenseNot gradedqualityDmaintenanceRemote MCP server for EVE Online that validates ship fittings with actual stats, DPS/EHP, and live market prices, enabling LLMs to answer whether a fit works and what it costs.GPL 3.0