eve-esi-mcp
An MCP server that gives an AI assistant authenticated, one-call access to EVE Online's ESI API and local static data, across multiple characters.
Characters & auth: EVE SSO login (PKCE) for many characters, list/select/logout, and any tool accepts
character: "Name".Character data: one-call overview (location, ship, wallet, SP, training, clones, implants, fatigue, LP), full skills/queue, and
skill_checkcomparing characters against items or a whole EFT fit.Fittings: saved fittings list/get, fit of a real ship in assets, analysis of any EFT (modules per slot, charges, CPU/PG, attributes, skill gaps, EFT + DNA), save/delete in-game fittings.
Items & universe: fuzzy item search (with shorthand like
mwd,lse), item details/blueprint materials/variants/prices, name↔id resolution, system info (security, kills, sovereignty, wormhole class/effect/statics), wormhole type lookup, stargate route planning.Market & money: prices at any hub/structure with history and order depth, appraise pasted item lists or EFTs, open orders with undercut detection, wallet/journal/transactions, contracts.
Industry & PI: industry jobs and blueprints; planetary colonies with extractors and storage.
Comms: mail list/read/send, notifications, recent kills/losses with loss fits as EFT.
Game client control: set destination, add waypoint, open market or show-info windows.
Escape hatch: raw
esi_requestfor any ESI route, handling auth, paging and*_nameresolution.Under the hood: local SQLite SDE index (no ESI calls for search/attributes), ETag/Expires caching,
X-Compatibility-Date, User-Agent and 420/429 backoff; public tools work without logging in.
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-esi-mcp show my current ship's fit as EFT and check if I can fly it"
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-esi-mcp
An MCP server for EVE Online's ESI API that's built for AI assistants rather than just wrapping endpoints.
Handles auth. EVE SSO (OAuth2 + PKCE, no client secret needed) with a local callback, refresh-token rotation and JWT verification.
Supports several characters. Log in as many characters as you like, pick an active one, or pass
character: "Name"to any tool. Tools also compare characters (skill_check).Answers in one call. Each tool resolves names and combines several ESI requests, so the model rarely has to chain lookups. For example,
fitting_getreturns module names per slot, charges, CPU/PG/calibration usage, ship stats and bonuses, attributes for every module, a skill check with training time, and the fit as EFT and DNA.Uses local static data. The official CCP Static Data Export is downloaded once and indexed into SQLite, so fuzzy item search, attributes, skills, blueprints, systems and stations need no ESI calls. It checks for a new SDE daily.
Follows CCP's rules. It sends
X-Compatibility-Dateand a descriptive User-Agent, honours ETag andExpirescaching, fetchesX-Pagespages in parallel, and backs off on 420 and 429 responses.
Tools
Area | Tools |
Characters |
|
Character data |
|
Assets |
|
Fittings |
|
Items & universe |
|
Market & money |
|
Industry |
|
Planetary interaction |
|
Comms |
|
Enemy doctrines |
|
Game client |
|
Anything else |
|
Example: fitting_get
{
"name": "Brawler",
"ship": { "name": "Rifter", "stats": { "CPU Output": "130 tf", "Turret Hardpoints": "3 hardpoints", ... },
"bonuses": { "Minmatar Frigate (per level)": ["7.5% bonus to Small Projectile Turret rate of fire", ...] } },
"slots": { "high": [{ "slot": "high:0", "module": "200mm AutoCannon II", "charge": "Republic Fleet EMP S" }, ...],
"low": [..., { "slot": "low:3", "module": "(empty)" }] },
"resources": { "cpu": { "used": "116 tf", "available": "130 tf", "percent": 89.2 }, "turret_hardpoints": "3/3", ... },
"stats": { "pilot": "custom skills", "skills_used": "My Pilot's trained skills (active levels) with 3 active implant(s).", // with eve-fit only
"offense": { "dps": 142.3, "volley": 213.5, ... }, "defense": { "ehp": 4120, "resists_percent": { ... } },
"capacitor": { "stable": false, "lasts_s": 95 }, "navigation": { "max_speed_m_s": 3240.5, "align_time_s": 4.69 },
"fitting": { "cpu_tf": { "used": 135.8, "total": 162.5, "percent": 83.5 }, ... } },
"modules": [{ "name": "Stasis Webifier II", "required_skills": [{ "skill": "Propulsion Jamming", "level": 4, "met": true }],
"attributes": { "EW - Webbing": { "Maximum Velocity Bonus": "-60%" }, "Turrets": { "Optimal Range": "10,000 m" } } }],
"skill_check": { "character": "My Pilot", "can_use": false, "missing": [{ "skill": "Small Projectile Turret", "required_level": 5, "trained_level": 4, "training_time": "4d 2h" }] },
"eft": "[Rifter, Brawler]\nDamage Control II\n...",
"dna": "587:2889;3:..."
}The EFT text is also returned as a separate text block, so it can be copied straight into the game ("Import from Clipboard") or into a fitting engine such as Pyfa.
Accurate fit stats with eve-fit
resources uses static data only, so skills, rigs and module bonuses aren't applied, and many working fits look over budget there. For engine-accurate numbers, fitting_get, ship_fitting and fitting_analyze can use eve-fit-mcp, a fitting engine built on Pyfa. When eve-fit is configured, each fit also gets a stats section with these values:
offense: DPS and volley (weapons and drones), range and tracking of the main weapon, missile explosion radius and velocity, and a per-weapon-group breakdown
defense: EHP per layer and against each single damage type, resists, sustained and burst tank
capacitor: stability, or how long it lasts
navigation: speed, align time, signature and warp speed, plus the same values with the prop module off when they differ
targeting: lock range, scan resolution and sensor strength
fitting: CPU/PG/calibration/drone/cargo usage after skills, plus slot and hardpoint usage
any fitting issues and missing skills
eve-esi-mcp starts eve-fit as a child MCP server the first time a fitting tool needs it, then reuses it. Each fit is a single stateless evaluate_fit call (contract eve-fit/evaluate_fit@1). If a character with the skills scope is involved, its active skill levels are sent with the call, along with its active implants if the token has esi-clones.read_implants.v1 and the fit lists no implants of its own. So the stats reflect what that character can actually fly. With no character, the stats use All 5. The pilot and skills_used fields say which skills were used. If eve-fit isn't configured, is too old to have evaluate_fit, or fails, stats is left out and a short stats_note explains why. The rest of the output is unaffected.
In-game saved fittings keep ammo in cargo, and ships in assets often have empty guns, so on its own the engine would report 0 weapon DPS for most real fits. To avoid that, every turret and launcher without a charge is loaded, for the engine's calculation only, with a compatible charge from the fit's cargo. A charge is compatible when its charge group matches and, for turrets, its size matches. The largest stack wins. For ship_fitting, the ship's real cargo hold is used even with include_cargo: false. stats.assumed_charges lists what was loaded (e.g. 200mm AutoCannon II x3: Republic Fleet EMP S (from cargo)), and stats.unloaded_weapons lists weapons with nothing compatible in cargo. The displayed slots, EFT and DNA still show the fit exactly as it is. Pass load_cargo_ammo: false to turn this off.
To enable it, set EVE_FIT_DIR to an eve-fit-mcp checkout (commit 03e5b41 or newer) that has a .venv, or set EVE_FIT_COMMAND/EVE_FIT_ARGS to launch it some other way. A checkout named eve-fit-mcp next to this package is detected automatically. The very first start builds eve-fit's game data and item index, which takes about 30 s. Later starts take a few seconds, and each fit then takes milliseconds. eve-esi-mcp keeps the only ESI tokens; eve-fit's own ESI login isn't used.
Enemy doctrines from killmails
doctrine_from_killmails and doctrine_from_battle_report turn public killmails into doctrine bundles: the hulls a group flies, the unique pilots seen in each, one EFT per loss and the weapons seen on their kills. The model passes a bundle unchanged to eve-fit's save_doctrine(**bundle), then uses analyze_doctrine, fleet_battle or counter_fit there. The shape is a contract shared with eve-fit-mcp (its docs/INTEGRATION.md, "Doctrine bundle"). Fields are only ever added, and each addition is agreed with eve-fit first.
{
"name": "Fraternity. comp",
"description": "From 40 zKillboard killmails, ... Pilots counted: Fraternity. ...",
"source": { "type": "zkillboard", "url": "https://zkillboard.com/alliance/99003581/", "kill_ids": [139468949, ...], "fetched_at": "2026-10-27T11:04:40Z" },
"ships": [
{ "ship": "Harbinger", "label": "Harbinger", "count": 4, "efts": ["[Harbinger, km 139468923]\n...", ...], "pilots_seen": 4 },
{ "ship": "Caracal Navy Issue", "label": "Caracal Navy Issue", "count": 7, "efts": [], "pilots_seen": 7,
"weapons_seen": ["Caldari Navy Scourge Light Missile", "Inferno Rage Heavy Assault Missile"] }
]
}countis the number of unique pilots in that hull, victims and attackers. Capsules, NPCs and structures are left out.Each EFT shows a loss as it was flown: fitted modules with their loaded charges (command burst charges included), drones up to the hull's bandwidth and five in space, and fighters in tubes. Cargo, implants, the rest of the drone bay and anything past the hull's racks are dropped, because eve-fit rejects fits that don't fit the hull. A hull seen only among attackers has
efts: [], which eve-fit keeps as a bare-hull placeholder.doctrine_from_killmailstakes zKillboard list URLs (/alliance/<id>/,/corporation/<id>/losses/,/ship/<id>/, ...), filters (alliance,corporation,character,ship,side,past_hoursup to 7 days) or killmail id+hash pairs. The killmails themselves are read from ESI. It counts the pilots of the entity in the URL or filter, or ofmembers_of. With neither (a ship or system feed, or a list of kills), it counts the victims' alliances or corporations.doctrine_from_battle_reporttakes a zKillboard related URL (zkillboard.com/related/<system>/<YYYYMMDDHH00>/), abr.evetools.org/related/...URL, orsystem+time. It returns{"sides": [bundle_A, bundle_B]}, using zKillboard's split of the pilots into sides. It reads up tofits_per_hulllosses (default 5) per hull and side. zKillboard has no batch lookup for killmail hashes, so each loss it reads costs one zKillboard request.zKillboard is called with the same User-Agent as ESI, through a short in-memory cache, with at most three requests at a time.
Wormhole rollers
A fit counts as a roller when its name or description mentions rolling, it has a Higgs Anchor rig, or it carries more than one prop module. fitting_get, ship_fitting and fitting_analyze then add a rolling section. It gives the hull mass and the jump mass cold (no prop running) and hot with each prop module, since prop modules add mass only while they run. Plates and Higgs Anchors are included. It also gives roller advice:
Fit the biggest microwarpdrive. It adds the most mass and is the fastest way back to the hole.
Back it up with an afterburner of the same size. A warp scrambler shuts the MWD off, but the afterburner still runs and adds the same mass, so you can still jump hot and crush the hole.
A smaller prop module (e.g. a 500MN MWD on a capital) adds about a tenth of the mass and is flagged as probably not worth the slot.
The masses come from static data, so check them in game or in Pyfa before relying on exact numbers.
Related MCP server: EVE ESI LLM Bridge
Setup
1. Register an EVE application
Go to https://developers.eveonline.com/applications and create an application.
Set the Callback URL to
http://localhost:8642/callback.Under Scopes, add the scopes you want to allow. The default
standardpreset needs the scopes insrc/auth/scopes.ts. Enable more if you plan to log in with thefullpreset (which adds corporation scopes).Copy the Client ID. You don't need the secret, because the server uses PKCE.
2. Install
git clone https://github.com/apettey/eve-esi-mcp.git
cd eve-esi-mcp
npm install
npm run buildRequires Node.js 22.13 or later (it uses the built-in node:sqlite).
3. Add it to your MCP client
Claude Code:
claude mcp add eve-esi -e EVE_CLIENT_ID=your_client_id -e EVE_CONTACT=you@example.com -- node /path/to/eve-esi-mcp/dist/index.jsClaude Desktop (claude_desktop_config.json) or any other stdio MCP client:
{
"mcpServers": {
"eve-esi": {
"command": "node",
"args": ["/path/to/eve-esi-mcp/dist/index.js"],
"env": {
"EVE_CLIENT_ID": "your_client_id",
"EVE_CONTACT": "you@example.com"
}
}
}
}On first start the server downloads and indexes the static data (about 100 MB, usually under a minute). Public tools such as item search and market prices work without logging in.
4. Log in a character
Ask your assistant to "log in my EVE character". It calls character_login, which opens the EVE login page in your browser. Repeat this for each character. You can also log in from a terminal:
node dist/index.js login # standard scopes
node dist/index.js login full # include corporation scopes
node dist/index.js characters # list stored charactersConfiguration
Variable | Default | Purpose |
| — | Client ID of your EVE application (required for login) |
| — | Optional; set it to use the confidential-client flow instead of PKCE |
|
| Must match the application's callback URL |
|
| Data directory (characters, SDE index, name cache) |
| — | Email or Discord handle added to the User-Agent, as CCP asks |
|
| Default scopes for |
|
| Set to |
| sibling | eve-fit-mcp checkout. Launched as |
| — | Command that starts eve-fit over stdio. Overrides |
| — | Arguments for |
| — | Working directory for |
Data and security
Refresh tokens are stored in
characters.jsonin the data directory, with owner-only file permissions where the OS supports them. Anyone who can read that file can access the characters' data within the granted scopes. Usecharacter_logoutto revoke a token.fitting_save,fitting_delete,mail_send,ui_action,route_planwithset_destination, and non-GETesi_requestcalls change things in your account or game client. The tool descriptions tell the model to confirm with you first.Wormhole class, system effects with their modifiers, and wormhole type attributes (destination, mass, lifetime) come from the SDE. The SDE doesn't list statics, so these come from WormholeSystems (
data/static/wormhole_systems.json, MIT licence, © 2026 WormholeSystems), vendored insrc/sde/wormhole-statics.ts. Runnode scripts/update-wormhole-statics.mjsto refresh it.Fitting resource numbers in
resourcescome from static data, so skills, rigs and module bonuses aren't applied. For exact stats, configure eve-fit (see above).The doctrine tools read public data only (zKillboard's API and public ESI killmails). No character or token is involved.
With eve-fit enabled, a character's skill levels and implant type ids are sent to the local eve-fit process for each fit. Nothing is stored there, and no tokens are shared.
Development
npm run build # compile TypeScript to dist/
npm test # builds, then runs unit and tool tests (SDE-backed tests run when an SDE index exists)
node scripts/smoke.mjs '[["system_info",{"system":"Jita"}]]' # call tools on the built server over stdio
node dist/index.js sde-update # force a static data refreshWhen working on this repo with Claude Code, CLAUDE.md and the project skills in
.claude/skills/ describe how tools should be designed (adding-eve-tools), unit-tested
(testing-eve-esi) and safely tested against a live character (live-testing-eve-esi).
The server targets ESI compatibility date 2026-08-18 (COMPATIBILITY_DATE in src/config.ts). Check /meta/changelog before you bump it.
License
MIT. EVE Online and all related materials are the intellectual property of CCP hf.
Available Tools
35 toolsappraiseAppraise a list of itemsARead-only
Values free-form item text at a market (default Jita 4-4): EFT fits, in-game inventory/cargo copy-paste (tab separated), 'Item x10', '10 Item' lines. Returns per-item buy/sell unit and totals, volume, and unrecognized lines.
Inputs: text (required), location.
assetsSearch and summarise assetsARead-only
A character's assets with names and locations resolved (stations, structures, containers, ships). Modes: 'summary' (per location: item count, estimated value, ships there), 'search' (find items by name/category, with location and container path, plus totals per item), 'ships' (every assembled ship with its name and location). Values use CCP's universe average price. ESI caches assets for up to an hour.
Inputs: mode, limit, query, category, +2 more.
character_loginAuthorize an EVE characterA
Starts EVE SSO login. Opens the user's browser (and returns the URL) so they can pick a character and approve scopes; waits for completion up to wait_seconds. Use again to add more characters or to re-authorize with more scopes. Scope presets: 'standard' (default: personal data read + fittings/mail/waypoint write), 'readonly', 'full' (adds corporation scopes).
Inputs: scopes, wait_seconds.
character_logoutRemove a characterADestructive
Revokes the SSO refresh token for a character and removes it from this server. Only do this when the user asks.
Inputs: character (required).
character_overviewCharacter overviewARead-only
One-call snapshot of a character: corp/alliance, security status, online state, current system/station, active ship, wallet, SP and what's training, clones and implants (with clone-jump availability), jump fatigue and loyalty points. Sections the character has no scope for are reported under 'unavailable' rather than failing.
Inputs: sections, character.
character_selectSelect active characterAIdempotent
Makes a logged-in character the default for all character tools. Accepts a name (or unique part of it) or id.
Inputs: character (required).
character_skillsCharacter skills and queueARead-only
A character's skills grouped by skill group (names and levels, not ids), attributes, and the training queue with finish times. Use 'filter' to look at specific skills or groups (e.g. 'Gunnery', 'drone', 'Caldari').
Inputs: filter, character, include_queue.
characters_listList logged-in charactersARead-only
Lists every EVE character authorized with this server, which one is active (used by default by all character tools), their corporation/alliance and granted scopes. Call this first when the user refers to a character by name.
Inputs: no named parameters.
contractsCharacter contractsBRead-only
A character's contracts (issued to/by them) with names for issuer/assignee/acceptor, start/end locations, prices, courier details and the items in each item-exchange/auction contract.
Inputs: type, limit, status, character, +1 more.
esi_requestRaw ESI requestA
Escape hatch for any ESI route not covered by a dedicated tool (see https://developers.eveonline.com/api-explorer). Paths may use {character_id}, {corporation_id} and {alliance_id}, filled from the selected character. Authentication, compatibility date, caching and pagination are handled; id fields in the response get *_name siblings. Non-GET methods change game state: confirm with the user first.
Inputs: path (required), body, query, method, +4 more.
fitting_analyzeAnalyze an EFT fitARead-only
Parses any EFT text (from the user, Pyfa, zKillboard, ...) and returns the same rich breakdown as fitting_get: resolved names, resource usage, ship stats/bonuses, module attributes, skill check against a character and DNA, plus engine stats (EHP, DPS, cap, speed, real CPU/PG) when eve-fit is configured. Does not save anything.
Inputs: eft (required), character, attributes.
fitting_deleteDelete a saved fittingADestructive
Deletes one saved in-game fitting by id or exact name. Only do this when the user explicitly asks.
Inputs: fitting (required), character.
fitting_getGet saved fitting(s) in fullARead-only
Full detail for saved fittings, by id, name or ship: modules per slot by name, loaded charges, drones/cargo, CPU/PG/calibration usage vs ship output, hardpoints, ship stats and bonuses, attributes of every module, a skill check against the character (missing skills + training time), plus EFT (ready for in-game import or Pyfa) and DNA.
Inputs: fittings (required), character, attributes, check_skills.
fitting_saveSave a fitting in-gameA
Saves an EFT fit to the character's in-game saved fittings (requires esi-fittings.write_fittings.v1). Names are resolved from static data. ESI cannot store charges per slot, so loaded charges are dropped (with a warning) unless they are also in the cargo section. Returns the new fitting_id. Confirm with the user before saving.
Inputs: eft (required), name, character, description.
fittings_listList saved fittingsARead-only
Lists a character's saved in-game fittings with ship names and module counts. Filter by fit name or ship. Set include_eft to get every fit as EFT text in the same call.
Inputs: filter, character, include_eft.
industryIndustry jobs and blueprintsBRead-only
A character's industry jobs (activity, blueprint, product, runs, facility, time left) and/or blueprints (BPO/BPC, ME/TE, runs, location). Filter blueprints by name.
Inputs: limit, include, character, blueprint_filter, +1 more.
item_infoItem detailsARead-only
Everything about one or more items in one call: category/group, meta level, volume, description, formatted attributes (grouped, with units), required skills (checked against the character if logged in, with training time for gaps), ship bonuses, variants (T1/T2/faction/...), manufacturing blueprint materials, and optionally Jita prices.
Inputs: items (required), character, attributes, include_market, +1 more.
killmailsRecent kills and lossesARead-only
A character's recent killmails with victim/attacker names, ships, system and security, and zKillboard links. For losses (or any kill with include_fit) the victim's fit is rebuilt as EFT with dropped/destroyed items.
Inputs: limit, filter, character, include_fit.
lookupResolve names and idsBRead-only
Resolves names or ids of characters, corporations, alliances, factions, systems, regions, constellations, stations and items to their counterpart, with public details (corp/alliance of a character, ticker/members of a corp, security of a system, ...).
Inputs: ids, names, details.
mail_listList EVE mailARead-only
Recent EVE mail headers with sender/recipient names, labels and read state. Use mail_read for bodies.
Inputs: label, limit, character, unread_only.
mail_readRead EVE mailARead-only
Full text of one or more mails (HTML converted to plain text) with sender and recipient names.
Inputs: mail_ids (required), character.
mail_sendSend EVE mailA
Sends an in-game EVE mail from the character. Recipients are names of characters, corporations, alliances or the character's mailing lists. This sends a real message: always confirm recipients, subject and body with the user first.
Inputs: to (required), body (required), subject (required), character.
market_ordersCharacter market ordersARead-only
A character's open market orders with item and location names, remaining volume, expiry and escrow — and whether each order is currently the best price at its station or has been undercut/outbid (and by how much). Optionally recent order history.
Inputs: character, include_history, check_competition.
market_pricesMarket pricesARead-only
Best buy/sell, spread, order counts and volumes for up to 20 items at a market (default Jita 4-4; also amarr, dodixie, rens, hek, any region/system/station name, or a structure id), with optional 7/30-day regional history and order book depth.
Inputs: items (required), depth, history, location.
notificationsCharacter notificationsARead-only
Recent in-game notifications (structure attacks, war declarations, kill reports, sov, corp applications, ...) with the YAML payload parsed and ids resolved to names. Filter by type substring (e.g. 'Structure', 'War', 'Kill').
Inputs: limit, character, type_filter, unread_only.
planetsPlanetary industry coloniesARead-only
A character's PI colonies with planet names and types, extractor products and expiry times (soonest first), factory schematics, and storage contents. ESI only updates PI data when the colony is viewed in game.
Inputs: character, include_storage.
route_planPlan a routeA
Plans a stargate route and returns every system with security and region, a security breakdown, and recent kills along the way. Origin defaults to the character's current system. Optionally sets the in-game autopilot destination.
Inputs: to (required), from, avoid, character, +2 more.
search_itemsSearch items by nameARead-only
Fuzzy search over every published EVE item (ships, modules, ammo, materials, skills, ...) using the local static data. Accepts several queries at once and common shorthand (mwd, dc, lse, scram, web, ...). Blueprints/SKINs are hidden unless asked for. Use item_info for full details on a match.
Inputs: queries (required), group, limit, category, +2 more.
server_statusTranquility statusARead-only
EVE server status (players online, version, start time) and the SDE/static data build this server is using.
Inputs: no named parameters.
ship_fittingFit of an actual shipARead-only
Reads how a real ship in the character's assets is fitted (default: the ship they are flying) and returns the same rich output as fitting_get: named modules/charges per slot, drones, cargo, resources, attributes, skill check, EFT and DNA. Note ESI caches assets for up to an hour, so very recent refits may not show yet.
Inputs: ship, character, attributes, include_cargo.
skill_checkCan the character use this?ARead-only
Checks whether a character can use items (ships, modules, ammo, drones) or a whole EFT fit. Includes all prerequisite skills, missing levels, SP needed and estimated training time (from the character's attributes), and a training order. Can compare several characters at once.
Inputs: eft, items, characters.
system_infoSolar system detailsARead-only
Details for a solar system: security, constellation/region, NPC stations, gate neighbours with security, sovereignty, ship/pod/NPC kills and jumps in the last hour, and jump distance to the major trade hubs. Use 'current' for the character's location. For wormhole (J-space) systems: class, system effect with its modifiers, and static wormholes with destination, mass and lifetime.
Inputs: system (required), character.
ui_actionControl the EVE clientA
Acts on the running EVE client of the character (must be logged in to the game): set autopilot destination or add a waypoint (system, NPC station or structure), open the market window for an item, or open the show-info window for an item/character/corporation/alliance.
Inputs: action (required), target (required), character.
walletWallet, journal and transactionsBRead-only
A character's ISK balance, income/expense breakdown by type over recent days, latest journal entries (with party names) and latest market transactions (item, quantity, price, location, counterparty).
Inputs: days, character, journal_limit, transactions_limit.
wormhole_typeWormhole type lookupARead-only
Looks up wormhole types by their signature code (e.g. K162, H296, D845): destination class, max mass per jump, total mass, mass regeneration, lifetime, and the classes of systems that have it as a static.
Inputs: codes (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 35 tools
Most tools target clearly distinct resources/actions (mail_list vs mail_read vs mail_send, market_prices vs market_orders vs appraise). The main overlap is the fitting trio (fitting_get, ship_fitting, fitting_analyze), which return near-identical rich output and are separated only by input source; character_overview also aggregates data from wallet, skills, and assets. Descriptions do enough to steer selection, but the fitting trio is a real source of confusion.
All names are snake_case, but conventions are mixed: bare nouns (assets, wallet, contracts, industry, planets), noun_verb (characters_list, mail_list), verb_noun (search_items, route_plan, fitting_save), and noun_noun (item_info, market_prices). Prefixes like character_, fitting_, mail_, market_ help group tools but are not applied uniformly. Readable, but not a predictable pattern.
35 tools is heavy for any single server, and an agent must scan a large surface to find the right call. However, the EVE ESI domain genuinely spans many independent resources (characters, fittings, market, mail, industry, PI, contracts, killmails, static data, navigation), so most tools earn their place. It sits at the upper bound rather than being gratuitously bloated.
Coverage is broad and lifecycle-aware: fittings support list/get/analyze/save/delete, mail supports list/read/send, and assets, contracts, industry, planets, notifications, killmails, wallet, and market are all covered. Minor gaps remain—no fitting update for an existing fit, and no market order create/cancel or contract actions—but esi_request serves as a general escape hatch. Agents can complete nearly all typical workflows.
Maintenance
Related MCP Connectors
Query your Twitch streams, events, supporters, raids & rankings from an AI assistant via OAuth.
AI for your car: check charge, start climate, lock/unlock, open trunk via Tesla Fleet API. OAuth.
Web search, data extraction and controlled browser automation for AI assistants via OAuth.
Access your Callin.io AI phone agents, call history and transcripts from any AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that integrates EVE Online's ESI API with AI assistants to enable natural language interaction with character data, market information, and assets. It provides 22 tools for managing skills, wallet balances, ship fittings, and more directly through AI-powered clients.2MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that connects EVE Online's ESI API to LLM clients, enabling reading private and public EVE data, resolving names and IDs, and optionally executing a small allowlist of write actions.MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search EVE Online items, validate ship fits against fitting limits, compute combat stats like DPS and EHP, and retrieve Jita market prices.4MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to discover and invoke read-only EVE Online ESI API endpoints, retrieve public and character data with automatic OAuth, and turn that context into practical adventure plans.345 npm2AGPL 3.0