eve-online-mcp 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,6 +6,8 @@ The server is generated at runtime from a pinned copy of CCP's OpenAPI 3.1 docum
6
6
 
7
7
  ## What the MCP server exposes
8
8
 
9
+ - `list_eve_characters` lists saved character IDs, names, and granted scopes without exposing credentials.
10
+ - `authorize_eve_character` opens browser consent for a specific character, verifies the selected identity, and stores that character's refresh credential. `select_eve_character` chooses a saved character for protected operations that do not name one. These tools manage local authentication only; they never change game state.
9
11
  - `search_esi_operations` ranks endpoints using deterministic lexical and curated intent matching, supports hard tag/authentication filters and offsets, and explains every match.
10
12
  - `get_esi_operation` returns exact parameters, request-body schema, required caller inputs, defaults, pagination guidance, OAuth scopes, cache hints, safe examples where available, and rate-limit metadata.
11
13
  - `call_esi` invokes one page of one catalogued read operation. It rejects undeclared parameters, validates values, fixes the origin to ESI, supplies compatibility headers, and never accepts an Authorization header from a tool call.
@@ -54,16 +56,41 @@ Once published, configure your MCP host to run the npm package directly:
54
56
 
55
57
  For a local checkout, build in the devcontainer and use `node /absolute/path/to/eve-online-mcp/dist/index.js` instead.
56
58
 
59
+ During MCP initialization, the server reports the version from its installed `package.json`, so MCP host diagnostics identify the running package release.
60
+
61
+ ### Discovery in Codex and other MCP hosts
62
+
63
+ Installing the npm package makes the executable available; the MCP host must also be configured to launch it. For [Codex](https://learn.chatgpt.com/docs/extend/mcp?surface=cli), register the stdio server with:
64
+
65
+ ```sh
66
+ codex mcp add eve-online -- npx -y eve-online-mcp
67
+ codex mcp list
68
+ ```
69
+
70
+ The server advertises EVE Online use cases in every tool's title and description, and returns workflow guidance in the MCP initialization `instructions` field. This lets hosts recognize character sheets, skills, skill queues, markets and other ESI data requests before a prompt or catalog resource is opened. Codex reads these instructions; other hosts may handle them differently. Tool selection remains the host's decision.
71
+
72
+ For a named character's training or hauling plan, the intended path is `resolve_eve_entities`, then `get_character_context` with the resolved character-category ID and the `skills` and `skillQueue` sections. Other ESI questions use `search_esi_operations`, `get_esi_operation`, then `call_esi`. Public discovery needs no login; protected sections use EVE SSO. ESI does not expose Omega subscription status or saved in-game skill plans, and skill injector recommendations require current game rules and explicit assumptions in addition to character data.
73
+
74
+ To check discovery after updating the configured server, reconnect it or start a fresh host session and confirm that its tool list contains EVE Online tool titles. Try a request such as: "Use EVE Online data to review the character sheet, skills and skill queue for <exact character name>, and suggest a hauling training plan." The host should discover the EVE tools and resolve the name before retrieving the needed sections. Inspect the tool-call trace to verify that it uses MCP for ESI-covered data before inspecting the game client. This is a manual host check; the automated tests verify initialization metadata and tool listings, not model selection behavior.
75
+
76
+ If the host still overlooks the server, capture the exact prompt, host/model version, configured server command and arguments, initialization instructions, tool listing and relevant tool-call sequence. Exclude credentials, tokens and private character responses from a shared report. This distinguishes a connection or stale-metadata problem from a host tool-selection problem.
77
+
57
78
  ### EVE SSO
58
79
 
59
- Public ESI routes need no credentials and never trigger login. On the first operation that needs character or corporation data, the server automatically opens EVE SSO in the browser. After consent it stores only the refresh credential in the user's OS configuration directory, rotates it when EVE returns a replacement, and manages short-lived access tokens in memory. No client secret or manual token handling is required.
80
+ Public ESI routes need no credentials and never trigger login. Ask Codex for a character's protected data: when that character has no saved authorization, the server automatically opens EVE SSO in the browser. Select the requested character and approve access; the server verifies the identity, saves its separate refresh credential, and continues the request. Repeat for another character on the same or a different EVE account. Previously authorized characters remain available. No commands, client secret, or manual token handling are required.
81
+
82
+ Credentials are stored per character, not per EVE account. Both `call_esi` and `get_character_context` select the credential matching the requested `character_id`/`characterId`. A wrong-character browser selection saves nothing and reports the requested and selected IDs. Tokens with a different or unreadable character subject are rejected before making a protected character request. A remaining upstream 403 identifies the character and required scopes; ownership or corporation roles can still deny access even with the correct character.
83
+
84
+ Codex can inspect saved authorizations using `list_eve_characters` and renew consent using `authorize_eve_character` when scopes are missing or a grant has expired or been revoked. For corporation, fleet, or structure operations without a character path parameter, a sole saved character is used automatically. With multiple saved characters and no default, the server asks Codex to use `select_eve_character` for the intended character. This default never overrides a character-specific request. Login dialogs are serialized, and simultaneous requests for the same missing character share a successful login.
85
+
86
+ The versioned credential file lives in the user's OS configuration directory. Each entry stores a character ID/name, client ID, granted scopes, creation time, and refresh token. Access tokens stay in memory. Login and refresh validate EVE's signature, issuer, audiences, expiration, and character claims. Refresh-token rotation updates only the matching character; writes use a restricted-permission temporary file, atomic replacement, and locks to coordinate concurrent processes. Running servers reread the store to notice new consent or removal. Old single-credential files migrate on their next protected use after the character identity is verified; adding a new character before migration preserves the legacy credential.
60
87
 
61
88
  The package ships with this public PKCE client configuration:
62
89
 
63
90
  - Client ID: `6a65f1e650d240659dafbad29fb55e05`
64
91
  - Callback URL: `http://localhost:52765/callback`
65
92
 
66
- The callback must match the EVE application registration exactly. PKCE is intended for local applications that cannot keep a client secret, so never distribute or commit the client secret. The login can also be started or managed explicitly:
93
+ The callback must match the EVE application registration exactly. PKCE is intended for local applications that cannot keep a client secret, so never distribute or commit the client secret. Optional maintenance commands are available, but are not needed for the Codex workflow. `auth logout` removes all local character credentials:
67
94
 
68
95
  ```sh
69
96
  npx eve-online-mcp auth login
@@ -136,7 +163,7 @@ esi-wallet.read_corporation_wallets.v1
136
163
 
137
164
  </details>
138
165
 
139
- `EVE_ACCESS_TOKEN`, `EVE_REFRESH_TOKEN`, `EVE_CLIENT_ID`, and `EVE_CLIENT_SECRET` remain supported as non-default overrides for automation or existing credentials. The server reports missing JWT scopes before spending an ESI request.
166
+ `EVE_ACCESS_TOKEN`, `EVE_REFRESH_TOKEN`, `EVE_CLIENT_ID`, and `EVE_CLIENT_SECRET` remain supported as non-default overrides for automation or existing credentials. An environment token override represents one character and takes precedence over the local store; browser authorization tools are unavailable in that mode. Character requests still check the token subject and required scopes before spending an ESI request. Remove the token override to use automatic multi-character login.
140
167
 
141
168
  Optional settings:
142
169
 
package/dist/auth.d.ts CHANGED
@@ -1,8 +1,22 @@
1
1
  import { CredentialStore } from "./credential-store.js";
2
2
  import { type SsoLoginOptions } from "./sso.js";
3
+ import { type TokenVerifier } from "./token-identity.js";
3
4
  export declare const DEFAULT_EVE_CLIENT_ID = "6a65f1e650d240659dafbad29fb55e05";
4
5
  export interface TokenProvider {
5
- getAccessToken(requiredScopes?: string[]): Promise<string | undefined>;
6
+ getAccessToken(requiredScopes?: string[], characterId?: number): Promise<string | undefined>;
7
+ }
8
+ export declare class AuthenticationError extends Error {
9
+ readonly code: "CHARACTER_MISMATCH" | "CHARACTER_SELECTION_REQUIRED" | "MISSING_SCOPES";
10
+ readonly details: {
11
+ characterId?: number;
12
+ authenticatedCharacterId?: number;
13
+ missingScopes?: string[];
14
+ };
15
+ constructor(message: string, code: "CHARACTER_MISMATCH" | "CHARACTER_SELECTION_REQUIRED" | "MISSING_SCOPES", details?: {
16
+ characterId?: number;
17
+ authenticatedCharacterId?: number;
18
+ missingScopes?: string[];
19
+ });
6
20
  }
7
21
  export declare class StaticTokenProvider implements TokenProvider {
8
22
  private readonly token;
@@ -14,27 +28,35 @@ export declare class RefreshTokenProvider implements TokenProvider {
14
28
  private readonly clientSecret;
15
29
  private readonly fetchImplementation;
16
30
  private readonly onRefreshToken?;
31
+ private readonly verifyAccessToken?;
17
32
  private cached?;
18
33
  private currentRefreshToken;
19
- constructor(clientId: string, refreshToken: string, clientSecret: string | undefined, fetchImplementation?: typeof fetch, onRefreshToken?: ((refreshToken: string) => Promise<void>) | undefined);
34
+ private pending;
35
+ constructor(clientId: string, refreshToken: string, clientSecret: string | undefined, fetchImplementation?: typeof fetch, onRefreshToken?: ((refreshToken: string) => Promise<void> | void) | undefined, verifyAccessToken?: ((token: string) => Promise<void>) | undefined);
20
36
  getAccessToken(): Promise<string>;
37
+ private refresh;
21
38
  }
22
39
  export declare class StoredCredentialTokenProvider implements TokenProvider {
23
40
  private readonly store;
24
41
  private readonly fetchImplementation;
25
- private provider?;
26
- constructor(store: CredentialStore, fetchImplementation?: typeof fetch);
27
- getAccessToken(): Promise<string | undefined>;
42
+ private readonly verify;
43
+ private readonly providers;
44
+ constructor(store: CredentialStore, fetchImplementation?: typeof fetch, verify?: TokenVerifier);
45
+ getAccessToken(requiredScopes?: string[], characterId?: number): Promise<string | undefined>;
28
46
  }
29
47
  export declare class InteractiveSsoTokenProvider implements TokenProvider {
30
- private readonly store;
48
+ readonly store: CredentialStore;
31
49
  private readonly clientId;
32
50
  private readonly scopes;
33
51
  private readonly loginImplementation;
52
+ private readonly redirectUri?;
34
53
  private readonly storedProvider;
35
- private loginPromise?;
36
- constructor(store: CredentialStore, clientId: string, scopes: string[], fetchImplementation?: typeof fetch, loginImplementation?: (options: SsoLoginOptions) => Promise<unknown>);
37
- getAccessToken(): Promise<string>;
54
+ private loginTail;
55
+ constructor(store: CredentialStore, clientId: string, scopes: string[], fetchImplementation?: typeof fetch, loginImplementation?: (options: SsoLoginOptions) => Promise<unknown>, verify?: TokenVerifier, redirectUri?: string | undefined);
56
+ getAccessToken(requiredScopes?: string[], characterId?: number): Promise<string>;
57
+ authorizeCharacter(characterId: number): Promise<void>;
58
+ private login;
59
+ private enqueueLogin;
38
60
  }
39
61
  export declare function tokenProviderFromEnvironment(environment?: NodeJS.ProcessEnv, fetchImplementation?: typeof fetch, options?: {
40
62
  clientId?: string;
package/dist/auth.js CHANGED
@@ -1,6 +1,16 @@
1
1
  import { CredentialStore, defaultCredentialPath, } from "./credential-store.js";
2
2
  import { loginWithEveSso } from "./sso.js";
3
+ import { createTokenVerifier, } from "./token-identity.js";
3
4
  export const DEFAULT_EVE_CLIENT_ID = "6a65f1e650d240659dafbad29fb55e05";
5
+ export class AuthenticationError extends Error {
6
+ code;
7
+ details;
8
+ constructor(message, code, details = {}) {
9
+ super(message);
10
+ this.code = code;
11
+ this.details = details;
12
+ }
13
+ }
4
14
  export class StaticTokenProvider {
5
15
  token;
6
16
  constructor(token) {
@@ -15,18 +25,27 @@ export class RefreshTokenProvider {
15
25
  clientSecret;
16
26
  fetchImplementation;
17
27
  onRefreshToken;
28
+ verifyAccessToken;
18
29
  cached;
19
30
  currentRefreshToken;
20
- constructor(clientId, refreshToken, clientSecret, fetchImplementation = fetch, onRefreshToken) {
31
+ pending;
32
+ constructor(clientId, refreshToken, clientSecret, fetchImplementation = fetch, onRefreshToken, verifyAccessToken) {
21
33
  this.clientId = clientId;
22
34
  this.clientSecret = clientSecret;
23
35
  this.fetchImplementation = fetchImplementation;
24
36
  this.onRefreshToken = onRefreshToken;
37
+ this.verifyAccessToken = verifyAccessToken;
25
38
  this.currentRefreshToken = refreshToken;
26
39
  }
27
40
  async getAccessToken() {
28
41
  if (this.cached && this.cached.expiresAt > Date.now() + 60_000)
29
42
  return this.cached.token;
43
+ this.pending ??= this.refresh().finally(() => {
44
+ this.pending = undefined;
45
+ });
46
+ return this.pending;
47
+ }
48
+ async refresh() {
30
49
  const body = new URLSearchParams({
31
50
  grant_type: "refresh_token",
32
51
  refresh_token: this.currentRefreshToken,
@@ -48,12 +67,18 @@ export class RefreshTokenProvider {
48
67
  if (!response.ok)
49
68
  throw new Error(`EVE SSO token refresh failed with HTTP ${response.status}`);
50
69
  const value = (await response.json());
51
- if (!value.access_token || !Number.isFinite(value.expires_in))
70
+ if (typeof value.access_token !== "string" ||
71
+ !value.access_token ||
72
+ !Number.isFinite(value.expires_in) ||
73
+ value.expires_in <= 0 ||
74
+ (value.refresh_token !== undefined &&
75
+ (typeof value.refresh_token !== "string" || !value.refresh_token)))
52
76
  throw new Error("EVE SSO returned an invalid token response");
77
+ await this.verifyAccessToken?.(value.access_token);
53
78
  if (value.refresh_token &&
54
79
  value.refresh_token !== this.currentRefreshToken) {
55
- this.currentRefreshToken = value.refresh_token;
56
80
  await this.onRefreshToken?.(value.refresh_token);
81
+ this.currentRefreshToken = value.refresh_token;
57
82
  }
58
83
  this.cached = {
59
84
  token: value.access_token,
@@ -65,22 +90,83 @@ export class RefreshTokenProvider {
65
90
  export class StoredCredentialTokenProvider {
66
91
  store;
67
92
  fetchImplementation;
68
- provider;
69
- constructor(store, fetchImplementation = fetch) {
93
+ verify;
94
+ providers = new Map();
95
+ constructor(store, fetchImplementation = fetch, verify = createTokenVerifier(fetchImplementation)) {
70
96
  this.store = store;
71
97
  this.fetchImplementation = fetchImplementation;
98
+ this.verify = verify;
72
99
  }
73
- async getAccessToken() {
74
- if (!this.provider) {
75
- const credential = await this.store.read();
76
- if (!credential)
77
- return undefined;
78
- this.provider = new RefreshTokenProvider(credential.clientId, credential.refreshToken, undefined, this.fetchImplementation, async (refreshToken) => {
79
- const updated = { ...credential, refreshToken };
80
- await this.store.write(updated);
100
+ async getAccessToken(requiredScopes = [], characterId) {
101
+ let file = await this.store.read();
102
+ if (file.legacyCredential &&
103
+ (characterId === undefined ||
104
+ !file.characters.some((entry) => entry.characterId === characterId))) {
105
+ await this.store.withRefreshLock("legacy", async () => {
106
+ const legacy = (await this.store.read()).legacyCredential;
107
+ if (!legacy)
108
+ return;
109
+ let identity;
110
+ let refreshToken = legacy.refreshToken;
111
+ const provider = new RefreshTokenProvider(legacy.clientId, refreshToken, undefined, this.fetchImplementation, (replacement) => {
112
+ refreshToken = replacement;
113
+ }, async (token) => {
114
+ identity = await this.verify(token, legacy.clientId);
115
+ });
116
+ await provider.getAccessToken();
117
+ if (!identity)
118
+ throw new Error("EVE SSO did not return a verified character identity.");
119
+ await this.store.migrateLegacy(legacy, {
120
+ ...legacy,
121
+ ...identity,
122
+ refreshToken,
123
+ });
81
124
  });
125
+ file = await this.store.read();
126
+ }
127
+ const characters = file.characters;
128
+ const selected = characterId ??
129
+ file.defaultCharacterId ??
130
+ (characters.length === 1 ? characters[0]?.characterId : undefined);
131
+ if (selected === undefined) {
132
+ if (characters.length > 1)
133
+ throw new AuthenticationError("Choose an authorized character for this protected operation using select_eve_character.", "CHARACTER_SELECTION_REQUIRED");
134
+ return undefined;
82
135
  }
83
- return this.provider.getAccessToken();
136
+ return this.store.withRefreshLock(selected, async () => {
137
+ const credential = (await this.store.read()).characters.find((entry) => entry.characterId === selected);
138
+ if (!credential) {
139
+ this.providers.delete(selected);
140
+ return undefined;
141
+ }
142
+ const missingScopes = requiredScopes.filter((scope) => !credential.scopes.includes(scope));
143
+ if (missingScopes.length)
144
+ throw new AuthenticationError(`Character ${selected} lacks required scopes; use authorize_eve_character to grant access.`, "MISSING_SCOPES", { characterId: selected, missingScopes });
145
+ let cached = this.providers.get(selected);
146
+ if (cached?.credential.refreshToken !== credential.refreshToken ||
147
+ cached.credential.clientId !== credential.clientId ||
148
+ cached.credential.createdAt !== credential.createdAt ||
149
+ JSON.stringify(cached.credential.scopes) !==
150
+ JSON.stringify(credential.scopes)) {
151
+ const entry = {
152
+ credential,
153
+ provider: new RefreshTokenProvider(credential.clientId, credential.refreshToken, undefined, this.fetchImplementation, async (refreshToken) => {
154
+ await this.store.rotate(entry.credential, refreshToken);
155
+ entry.credential = { ...entry.credential, refreshToken };
156
+ }, async (token) => {
157
+ const identity = await this.verify(token, credential.clientId);
158
+ if (identity.characterId !== selected)
159
+ throw new AuthenticationError(`The saved credential for character ${selected} authenticated character ${identity.characterId}; authorize the requested character again.`, "CHARACTER_MISMATCH", {
160
+ characterId: selected,
161
+ authenticatedCharacterId: identity.characterId,
162
+ });
163
+ }),
164
+ };
165
+ cached = entry;
166
+ this.providers.set(selected, cached);
167
+ }
168
+ return cached.provider.getAccessToken();
169
+ });
84
170
  }
85
171
  }
86
172
  export class InteractiveSsoTokenProvider {
@@ -88,40 +174,68 @@ export class InteractiveSsoTokenProvider {
88
174
  clientId;
89
175
  scopes;
90
176
  loginImplementation;
177
+ redirectUri;
91
178
  storedProvider;
92
- loginPromise;
93
- constructor(store, clientId, scopes, fetchImplementation = fetch, loginImplementation = loginWithEveSso) {
179
+ loginTail = Promise.resolve();
180
+ constructor(store, clientId, scopes, fetchImplementation = fetch, loginImplementation = loginWithEveSso, verify = createTokenVerifier(fetchImplementation), redirectUri) {
94
181
  this.store = store;
95
182
  this.clientId = clientId;
96
183
  this.scopes = scopes;
97
184
  this.loginImplementation = loginImplementation;
98
- this.storedProvider = new StoredCredentialTokenProvider(store, fetchImplementation);
185
+ this.redirectUri = redirectUri;
186
+ this.storedProvider = new StoredCredentialTokenProvider(store, fetchImplementation, verify);
99
187
  }
100
- async getAccessToken() {
101
- const existing = await this.storedProvider.getAccessToken();
188
+ async getAccessToken(requiredScopes = [], characterId) {
189
+ const existing = await this.storedProvider.getAccessToken(requiredScopes, characterId);
102
190
  if (existing)
103
191
  return existing;
104
- this.loginPromise ??= this.loginImplementation({
105
- clientId: this.clientId,
106
- scopes: this.scopes,
107
- store: this.store,
108
- }).then(() => undefined);
109
- await this.loginPromise;
110
- const token = await this.storedProvider.getAccessToken();
192
+ await this.enqueueLogin(async () => {
193
+ if (await this.storedProvider.getAccessToken(requiredScopes, characterId))
194
+ return;
195
+ await this.login(characterId);
196
+ });
197
+ const token = await this.storedProvider.getAccessToken(requiredScopes, characterId);
111
198
  if (!token)
112
199
  throw new Error("EVE SSO completed without storing a credential");
113
200
  return token;
114
201
  }
202
+ async authorizeCharacter(characterId) {
203
+ await this.enqueueLogin(async () => {
204
+ await this.login(characterId);
205
+ });
206
+ }
207
+ async login(characterId) {
208
+ await this.loginImplementation({
209
+ clientId: this.clientId,
210
+ scopes: this.scopes,
211
+ store: this.store,
212
+ ...(characterId === undefined
213
+ ? {}
214
+ : { expectedCharacterId: characterId }),
215
+ ...(this.redirectUri === undefined
216
+ ? {}
217
+ : { redirectUri: this.redirectUri }),
218
+ });
219
+ }
220
+ async enqueueLogin(action) {
221
+ const pending = this.loginTail.then(action);
222
+ this.loginTail = pending.catch(() => undefined);
223
+ await pending;
224
+ }
115
225
  }
116
226
  export function tokenProviderFromEnvironment(environment = process.env, fetchImplementation = fetch, options = {}) {
117
227
  if (environment.EVE_ACCESS_TOKEN)
118
228
  return new StaticTokenProvider(environment.EVE_ACCESS_TOKEN);
119
229
  if (environment.EVE_CLIENT_ID && environment.EVE_REFRESH_TOKEN) {
120
- return new RefreshTokenProvider(environment.EVE_CLIENT_ID, environment.EVE_REFRESH_TOKEN, environment.EVE_CLIENT_SECRET, fetchImplementation);
230
+ const clientId = environment.EVE_CLIENT_ID;
231
+ const verify = createTokenVerifier(fetchImplementation);
232
+ return new RefreshTokenProvider(environment.EVE_CLIENT_ID, environment.EVE_REFRESH_TOKEN, environment.EVE_CLIENT_SECRET, fetchImplementation, undefined, async (token) => {
233
+ await verify(token, clientId);
234
+ });
121
235
  }
122
236
  const store = new CredentialStore(defaultCredentialPath(environment));
123
237
  if (options.interactive !== false && options.scopes?.length) {
124
- return new InteractiveSsoTokenProvider(store, environment.EVE_CLIENT_ID ?? options.clientId ?? DEFAULT_EVE_CLIENT_ID, options.scopes, fetchImplementation);
238
+ return new InteractiveSsoTokenProvider(store, environment.EVE_CLIENT_ID ?? options.clientId ?? DEFAULT_EVE_CLIENT_ID, options.scopes, fetchImplementation, loginWithEveSso, createTokenVerifier(fetchImplementation), environment.EVE_SSO_REDIRECT_URI);
125
239
  }
126
240
  return new StoredCredentialTokenProvider(store, fetchImplementation);
127
241
  }
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { InteractiveSsoTokenProvider } from "./auth.js";
2
+ import type { CredentialStore } from "./credential-store.js";
3
+ /** Only non-secret character metadata crosses the MCP boundary. */
4
+ export declare class CharacterAuthentication {
5
+ private readonly store;
6
+ private readonly interactive?;
7
+ constructor(store: CredentialStore, interactive?: InteractiveSsoTokenProvider | undefined);
8
+ list(): Promise<{
9
+ characters: {
10
+ characterId: number;
11
+ characterName: string;
12
+ scopes: string[];
13
+ }[];
14
+ defaultCharacterId: number | null;
15
+ legacyCredentialPendingMigration: boolean;
16
+ browserAuthorizationAvailable: boolean;
17
+ }>;
18
+ authorize(characterId: number): Promise<{
19
+ characters: {
20
+ characterId: number;
21
+ characterName: string;
22
+ scopes: string[];
23
+ }[];
24
+ defaultCharacterId: number | null;
25
+ legacyCredentialPendingMigration: boolean;
26
+ browserAuthorizationAvailable: boolean;
27
+ }>;
28
+ select(characterId: number): Promise<{
29
+ characters: {
30
+ characterId: number;
31
+ characterName: string;
32
+ scopes: string[];
33
+ }[];
34
+ defaultCharacterId: number | null;
35
+ legacyCredentialPendingMigration: boolean;
36
+ browserAuthorizationAvailable: boolean;
37
+ }>;
38
+ }
@@ -0,0 +1,35 @@
1
+ /** Only non-secret character metadata crosses the MCP boundary. */
2
+ export class CharacterAuthentication {
3
+ store;
4
+ interactive;
5
+ constructor(store, interactive) {
6
+ this.store = store;
7
+ this.interactive = interactive;
8
+ }
9
+ async list() {
10
+ const file = await this.store.read();
11
+ return {
12
+ characters: file.characters.map(({ characterId, characterName, scopes }) => ({
13
+ characterId,
14
+ characterName,
15
+ scopes,
16
+ })),
17
+ defaultCharacterId: file.defaultCharacterId ?? null,
18
+ legacyCredentialPendingMigration: !!file.legacyCredential,
19
+ browserAuthorizationAvailable: !!this.interactive,
20
+ };
21
+ }
22
+ async authorize(characterId) {
23
+ if (!this.interactive)
24
+ throw new Error("Browser authorization is unavailable while environment token overrides are configured.");
25
+ await this.interactive.authorizeCharacter(characterId);
26
+ return this.list();
27
+ }
28
+ async select(characterId) {
29
+ if (!this.interactive)
30
+ throw new Error("Character selection is unavailable while environment token overrides are configured.");
31
+ await this.store.select(characterId);
32
+ return this.list();
33
+ }
34
+ }
35
+ //# sourceMappingURL=character-authentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"character-authentication.js","sourceRoot":"","sources":["../src/character-authentication.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,MAAM,OAAO,uBAAuB;IAEf;IACA;IAFnB,YACmB,KAAsB,EACtB,WAAyC;QADzC,UAAK,GAAL,KAAK,CAAiB;QACtB,gBAAW,GAAX,WAAW,CAA8B;IACzD,CAAC;IAEJ,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAC7B,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,WAAW;gBACX,aAAa;gBACb,MAAM;aACP,CAAC,CACH;YACD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI;YACnD,gCAAgC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB;YACzD,6BAA6B,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;SAClD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,WAAmB;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW;YACnB,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;QACJ,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW;YACnB,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;QACJ,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -36,7 +36,7 @@ export async function getCharacterContext(client, catalog, input, options = {})
36
36
  let authorizationError;
37
37
  if (requiredScopes.length > 0) {
38
38
  try {
39
- authorization = await client.authorize(requiredScopes);
39
+ authorization = await client.authorize(requiredScopes, input.characterId);
40
40
  }
41
41
  catch (error) {
42
42
  authorizationError = error;
@@ -1 +1 @@
1
- {"version":3,"file":"character-context.js","sourceRoot":"","sources":["../src/character-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"character-context.js","sourceRoot":"","sources":["../src/character-context.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DEFAULT_EVE_CLIENT_ID } from "./auth.js";
2
- import { CredentialStore } from "./credential-store.js";
2
+ import { CredentialStore, defaultCredentialPath } from "./credential-store.js";
3
3
  import { loginWithEveSso } from "./sso.js";
4
4
  function option(args, name) {
5
5
  const index = args.indexOf(name);
@@ -16,7 +16,7 @@ function requestedScopes(args, catalog) {
16
16
  export async function runAuthCommand(args, catalog, environment = process.env) {
17
17
  if (args[0] !== "auth")
18
18
  return false;
19
- const store = new CredentialStore(environment.EVE_CREDENTIALS_PATH);
19
+ const store = new CredentialStore(defaultCredentialPath(environment));
20
20
  const command = args[1];
21
21
  if (command === "login") {
22
22
  const clientId = option(args, "--client-id") ??
@@ -33,10 +33,14 @@ export async function runAuthCommand(args, catalog, environment = process.env) {
33
33
  return true;
34
34
  }
35
35
  if (command === "status") {
36
- const credential = await store.read();
37
- console.log(credential
38
- ? `EVE SSO is configured for client ${credential.clientId} with ${credential.scopes.length} scopes.`
39
- : "EVE SSO is not configured. Public ESI operations remain available.");
36
+ const file = await store.read();
37
+ console.log(file.characters.length
38
+ ? file.characters
39
+ .map((entry) => `${entry.characterName} (${entry.characterId}): ${entry.scopes.length} scopes${file.defaultCharacterId === entry.characterId ? " (default)" : ""}`)
40
+ .join("\n")
41
+ : file.legacyCredential
42
+ ? "A legacy EVE SSO credential will migrate on the next protected request."
43
+ : "EVE SSO is not configured. Public ESI operations remain available.");
40
44
  return true;
41
45
  }
42
46
  if (command === "logout") {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,SAAS,MAAM,CAAC,IAAc,EAAE,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,IAAc,EAAE,OAAyB;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO;QACL,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CACpE;KACF,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAc,EACd,OAAyB,EACzB,cAAiC,OAAO,CAAC,GAAG;IAE5C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;YAC3B,WAAW,CAAC,aAAa;YACzB,qBAAqB,CAAC;QACxB,MAAM,WAAW,GACf,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,QAAQ;YACR,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;YACtC,KAAK;YACL,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CACT,0DAA0D,MAAM,CAAC,cAAc,GAAG,CACnF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CACT,UAAU;YACR,CAAC,CAAC,oCAAoC,UAAU,CAAC,QAAQ,SAAS,UAAU,CAAC,MAAM,CAAC,MAAM,UAAU;YACpG,CAAC,CAAC,oEAAoE,CACzE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,iDAAiD,CACtD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}