appium-mcp 1.81.7 → 1.82.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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [1.82.0](https://github.com/appium/appium-mcp/compare/v1.81.7...v1.82.0) (2026-06-02)
2
+
3
+ ### Features
4
+
5
+ * **attach-session:** fetch capabilities automatically from server when attaching sessions ([#380](https://github.com/appium/appium-mcp/issues/380)) ([69934b0](https://github.com/appium/appium-mcp/commit/69934b0b3893fa9bc05cadfe6a41b9018679e89e))
6
+
1
7
  ## [1.81.7](https://github.com/appium/appium-mcp/compare/v1.81.6...v1.81.7) (2026-06-02)
2
8
 
3
9
  ### Bug Fixes
@@ -74,6 +74,9 @@ const mockSetSession = setSession;
74
74
  const { buildAndroidCapabilities, buildIOSCapabilities, getPortFromUrl, validateRemoteServerUrl, } = await import('../../../tools/session/create-session.js');
75
75
  // ── tool helper ───────────────────────────────────────────────────────────────
76
76
  const mockServer = { addTool: jest.fn() };
77
+ // Default fetch mock: both capability endpoints return nothing (404-like).
78
+ // Individual tests override this for the specific responses they need.
79
+ let mockFetch;
77
80
  beforeEach(() => {
78
81
  jest.clearAllMocks();
79
82
  mockSelectedDevicePlatform = 'ios';
@@ -82,6 +85,10 @@ beforeEach(() => {
82
85
  sessionId: 'attached-session-id',
83
86
  capabilities: { platformName: 'Android' },
84
87
  });
88
+ mockFetch = jest.fn().mockResolvedValue({
89
+ ok: false,
90
+ });
91
+ global.fetch = mockFetch;
85
92
  });
86
93
  async function getToolExecute() {
87
94
  const { default: session } = await import('../../../tools/session/session.js');
@@ -180,69 +187,67 @@ describe('appium_session_management tool', () => {
180
187
  expect(result.isError).toBe(true);
181
188
  expect(result.content[0].text).toBe('sessionId is required for attach action');
182
189
  });
183
- test('attaches an existing remote session and prefers getAppiumSessionCapabilities per field', async () => {
190
+ test('fetches capabilities from server before creating client and prefers W3C extension endpoint', async () => {
184
191
  const tool = await getToolExecute();
185
192
  mockListSessions.mockReturnValue([
186
193
  { sessionId: 'borrowed', isActive: true, ownership: 'attached' },
187
194
  ]);
188
- mockAttachToSession.mockResolvedValue({
189
- sessionId: 'attached-session-id',
190
- getAppiumSessionCapabilities: async () => ({
191
- capabilities: {
192
- platformName: 'Android',
193
- automationName: 'UiAutomator2',
194
- },
195
- }),
196
- getSession: async () => ({
197
- platformName: 'iOS',
198
- automationName: 'XCUITest',
199
- deviceName: 'Ignored Device',
200
- }),
195
+ mockFetch.mockImplementation(async (input) => {
196
+ const url = input.toString();
197
+ if (url.includes('appium/session_capabilities')) {
198
+ return {
199
+ ok: true,
200
+ json: async () => ({
201
+ value: {
202
+ platformName: 'Android',
203
+ automationName: 'UiAutomator2',
204
+ },
205
+ }),
206
+ };
207
+ }
208
+ return {
209
+ ok: true,
210
+ json: async () => ({
211
+ value: {
212
+ platformName: 'iOS',
213
+ automationName: 'XCUITest',
214
+ deviceName: 'Ignored Device',
215
+ },
216
+ }),
217
+ };
201
218
  });
202
219
  const result = await tool.execute({
203
220
  action: 'attach',
204
221
  remoteServerUrl: 'http://localhost:4723',
205
222
  sessionId: 'borrowed',
206
- capabilities: {
207
- platformName: 'Provided',
208
- automationName: 'UiAutomator2',
209
- deviceName: 'Pixel 9 Pro XL',
210
- 'appium:app': 'demo.apk',
211
- },
223
+ capabilities: { 'appium:app': 'demo.apk' },
212
224
  }, undefined);
213
225
  expect(result.isError).toBeFalsy();
214
226
  expect(result.content[0].text).toContain('Attached to existing session');
215
- expect(mockAttachToSession).toHaveBeenCalledWith({
216
- sessionId: 'borrowed',
217
- protocol: 'http',
218
- hostname: 'localhost',
219
- port: 4723,
220
- path: '/',
221
- capabilities: {
222
- platformName: 'Provided',
223
- automationName: 'UiAutomator2',
224
- deviceName: 'Pixel 9 Pro XL',
225
- 'appium:app': 'demo.apk',
226
- },
227
- });
227
+ // Client created with merged caps — W3C extension wins over deprecated and caller
228
+ expect(mockAttachToSession).toHaveBeenCalledWith(expect.objectContaining({
229
+ capabilities: expect.objectContaining({ platformName: 'Android' }),
230
+ }));
228
231
  expect(mockSetSession).toHaveBeenCalledWith(expect.anything(), 'borrowed', {
229
- 'appium:app': 'demo.apk',
230
232
  platformName: 'Android',
231
233
  'appium:automationName': 'UiAutomator2',
232
234
  'appium:deviceName': 'Ignored Device',
235
+ 'appium:app': 'demo.apk',
233
236
  }, 'attached', expect.any(String));
234
237
  });
235
- test('falls back to getSession when getAppiumSessionCapabilities is unavailable', async () => {
238
+ test('falls back to deprecated session endpoint when W3C extension is unavailable', async () => {
236
239
  const tool = await getToolExecute();
237
- mockAttachToSession.mockResolvedValue({
238
- sessionId: 'attached-session-id',
239
- getAppiumSessionCapabilities: async () => {
240
- throw new Error('unsupported');
241
- },
242
- getSession: async () => ({
243
- platformName: 'Android',
244
- automationName: 'UiAutomator2',
245
- }),
240
+ mockFetch.mockImplementation(async (input) => {
241
+ const url = input.toString();
242
+ if (url.includes('appium/session_capabilities')) {
243
+ return { ok: false };
244
+ }
245
+ return {
246
+ ok: true,
247
+ json: async () => ({
248
+ value: { platformName: 'Android', automationName: 'UiAutomator2' },
249
+ }),
250
+ };
246
251
  });
247
252
  const result = await tool.execute({
248
253
  action: 'attach',
@@ -255,39 +260,33 @@ describe('appium_session_management tool', () => {
255
260
  }, undefined);
256
261
  expect(result.isError).toBeFalsy();
257
262
  expect(mockSetSession).toHaveBeenCalledWith(expect.anything(), 'borrowed', {
258
- 'appium:app': 'demo.apk',
259
263
  platformName: 'Android',
260
264
  'appium:automationName': 'UiAutomator2',
261
265
  'appium:deviceName': 'Pixel 9 Pro XL',
266
+ 'appium:app': 'demo.apk',
262
267
  }, 'attached', expect.any(String));
263
268
  });
264
- test('falls back to provided capabilities when runtime capability methods are unavailable', async () => {
269
+ test('returns error when both capability endpoints are unreachable', async () => {
265
270
  const tool = await getToolExecute();
266
- mockAttachToSession.mockResolvedValue({
267
- sessionId: 'attached-session-id',
268
- });
271
+ // mockFetch already returns ok: false for both endpoints by default
269
272
  const result = await tool.execute({
270
273
  action: 'attach',
271
274
  remoteServerUrl: 'http://localhost:4723',
272
275
  sessionId: 'borrowed',
273
- capabilities: {
274
- platformName: 'Android',
275
- 'appium:automationName': 'UiAutomator2',
276
- deviceName: 'Pixel 9 Pro XL',
277
- 'appium:app': 'demo.apk',
278
- },
276
+ capabilities: { platformName: 'Android' },
279
277
  }, undefined);
280
- expect(result.isError).toBeFalsy();
281
- expect(mockSetSession).toHaveBeenCalledWith(expect.anything(), 'borrowed', {
282
- 'appium:app': 'demo.apk',
283
- platformName: 'Android',
284
- 'appium:automationName': 'UiAutomator2',
285
- 'appium:deviceName': 'Pixel 9 Pro XL',
286
- }, 'attached', expect.any(String));
278
+ expect(result.isError).toBe(true);
279
+ expect(result.content[0].text).toContain('Failed to fetch capabilities');
280
+ expect(result.content[0].text).toContain('borrowed');
281
+ expect(mockAttachToSession).not.toHaveBeenCalled();
287
282
  });
288
283
  test('detaches an existing attached session before re-attaching the same id', async () => {
289
284
  const tool = await getToolExecute();
290
285
  mockGetSessionOwnership.mockReturnValue('attached');
286
+ mockFetch.mockResolvedValue({
287
+ ok: true,
288
+ json: async () => ({ value: { platformName: 'Android' } }),
289
+ });
291
290
  const result = await tool.execute({
292
291
  action: 'attach',
293
292
  remoteServerUrl: 'http://localhost:4723',
@@ -1 +1 @@
1
- {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/session/session.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/session/session.test.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,14 @@
2
2
  * Attach MCP Appium to an existing remote Appium session without taking
3
3
  * ownership of the underlying session lifecycle.
4
4
  *
5
+ * Session capabilities are fetched from the server before creating the
6
+ * WebDriver client so that WebDriver.attachToSession receives the full
7
+ * capability set (including platformName) and sessionEnvironmentDetector can
8
+ * correctly configure isMobile / isAndroid / isIOS on the client instance.
9
+ *
5
10
  * @param args - Remote server location, target session id, and optional
6
- * capability overrides to seed local metadata.
7
- * @returns A tool response describing whether the attach succeeded.
11
+ * capability overrides.
12
+ * @returns A tool response describing whether the attachment succeeded.
8
13
  */
9
14
  export declare function attachSessionAction(args: {
10
15
  remoteServerUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"attach-session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"AA0CA;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,GAAG,CAAC,CAsFf"}
1
+ {"version":3,"file":"attach-session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,GAAG,CAAC,CA0Gf"}
@@ -2,7 +2,7 @@ import { detachSession, getSessionOwnership, listSessions, setSession, } from '.
2
2
  import { readAllPersistedSessions } from '../../persistence.js';
3
3
  import { errorResult, textResult, toolErrorMessage } from '../tool-response.js';
4
4
  import { validateRemoteServerUrl } from './create-session.js';
5
- import { attachToRemoteSession } from '../../utils/url.js';
5
+ import { attachToRemoteSession, getPortFromUrl } from '../../utils/url.js';
6
6
  /**
7
7
  * Normalize capability payloads returned by Appium/WebdriverIO into a flat
8
8
  * capability record.
@@ -30,9 +30,14 @@ const METADATA_FIELDS = [
30
30
  * Attach MCP Appium to an existing remote Appium session without taking
31
31
  * ownership of the underlying session lifecycle.
32
32
  *
33
+ * Session capabilities are fetched from the server before creating the
34
+ * WebDriver client so that WebDriver.attachToSession receives the full
35
+ * capability set (including platformName) and sessionEnvironmentDetector can
36
+ * correctly configure isMobile / isAndroid / isIOS on the client instance.
37
+ *
33
38
  * @param args - Remote server location, target session id, and optional
34
- * capability overrides to seed local metadata.
35
- * @returns A tool response describing whether the attach succeeded.
39
+ * capability overrides.
40
+ * @returns A tool response describing whether the attachment succeeded.
36
41
  */
37
42
  export async function attachSessionAction(args) {
38
43
  try {
@@ -44,21 +49,33 @@ export async function attachSessionAction(args) {
44
49
  detachSession(args.sessionId);
45
50
  }
46
51
  validateRemoteServerUrl(args.remoteServerUrl, process.env.REMOTE_SERVER_URL_ALLOW_REGEX);
47
- const client = await attachToRemoteSession({
48
- remoteServerUrl: args.remoteServerUrl,
49
- sessionId: args.sessionId,
50
- capabilities: args.capabilities,
51
- });
52
- const [appiumCapabilities, sessionCapabilities] = await Promise.all([
53
- readClientCapabilities(client, 'getAppiumSessionCapabilities'),
54
- readClientCapabilities(client, 'getSession'),
52
+ // Fetch capabilities from the server BEFORE creating the WebDriver client.
53
+ // This ensures WebDriver.attachToSession receives platformName so that
54
+ // sessionEnvironmentDetector configures isMobile / isAndroid / isIOS
55
+ // correctly. Caller-provided capabilities take the lowest priority; the W3C
56
+ // Appium extension endpoint wins.
57
+ const [sessionCapabilities, deprecatedSessionCapabilities] = await Promise.all([
58
+ fetchCapabilitiesFromServer(args.remoteServerUrl, args.sessionId, 'appium/session_capabilities'),
59
+ fetchCapabilitiesFromServer(args.remoteServerUrl, args.sessionId),
55
60
  ]);
61
+ if (sessionCapabilities === undefined &&
62
+ deprecatedSessionCapabilities === undefined) {
63
+ return errorResult(`Failed to fetch capabilities for session ${args.sessionId} from ${args.remoteServerUrl}. ` +
64
+ `The server may be unreachable or the session may no longer exist.`);
65
+ }
56
66
  const sources = [
57
- appiumCapabilities,
58
67
  sessionCapabilities,
68
+ deprecatedSessionCapabilities,
59
69
  args.capabilities,
60
70
  ];
61
- const capabilities = Object.assign({}, args.capabilities ?? {}, sessionCapabilities ?? {}, appiumCapabilities ?? {});
71
+ const capabilities = Object.assign({}, args.capabilities ?? {}, deprecatedSessionCapabilities ?? {}, sessionCapabilities ?? {});
72
+ const client = await attachToRemoteSession({
73
+ remoteServerUrl: args.remoteServerUrl,
74
+ sessionId: args.sessionId,
75
+ capabilities,
76
+ });
77
+ // Normalize metadata fields into their canonical prefixed forms for
78
+ // local session tracking.
62
79
  for (const [plainKey, prefixedKey, targetKey] of METADATA_FIELDS) {
63
80
  const source = sources.find((candidate) => candidate?.[plainKey] !== undefined ||
64
81
  candidate?.[prefixedKey] !== undefined);
@@ -92,19 +109,40 @@ export async function attachSessionAction(args) {
92
109
  }
93
110
  }
94
111
  /**
95
- * Read capabilities from a WebdriverIO client method when available.
112
+ * Fetch session capabilities from the Appium server via a plain HTTP request.
96
113
  *
97
- * @param client - Attached WebdriverIO client for the target Appium session.
98
- * @param methodName - Capability reader to invoke on the client.
99
- * @returns Parsed capabilities, or `undefined` when the method is missing or fails.
114
+ * Making this request before WebDriver.attachToSession avoids the ordering
115
+ * problem where the client is created before platformName is known.
116
+ *
117
+ * @param remoteServerUrl - Base URL of the Appium server.
118
+ * @param sessionId - ID of the existing session to query.
119
+ * @param endpoint - Optional sub-path after `/session/{id}/`.
120
+ * @returns Parsed capabilities, or `undefined` when the request fails or the
121
+ * endpoint is not supported by the server.
100
122
  */
101
- async function readClientCapabilities(client, methodName) {
102
- const method = client[methodName];
103
- if (typeof method !== 'function') {
104
- return undefined;
105
- }
123
+ async function fetchCapabilitiesFromServer(remoteServerUrl, sessionId, endpoint) {
106
124
  try {
107
- return readCapabilities(await method.call(client));
125
+ const url = new URL(remoteServerUrl);
126
+ const port = getPortFromUrl(url);
127
+ const basePath = url.pathname.replace(/\/$/, '');
128
+ const path = `${basePath}/session/${sessionId}${endpoint ? '/' + endpoint : ''}`;
129
+ const requestUrl = `${url.protocol}//${url.hostname}:${port}${path}`;
130
+ const headers = {
131
+ 'Content-Type': 'application/json',
132
+ };
133
+ if (url.username && url.password) {
134
+ const credentials = Buffer.from(`${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`).toString('base64');
135
+ headers.Authorization = `Basic ${credentials}`;
136
+ }
137
+ const response = await fetch(requestUrl, {
138
+ headers,
139
+ signal: AbortSignal.timeout(5000),
140
+ });
141
+ if (!response.ok) {
142
+ return undefined;
143
+ }
144
+ const json = (await response.json());
145
+ return readCapabilities(json.value);
108
146
  }
109
147
  catch {
110
148
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"attach-session.js","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,UAAU,GAGX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC;IAElD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,MAA6B,CAAC;IACvC,CAAC;IAED,OAAO,MAA6B,CAAC;AACvC,CAAC;AAED,MAAM,eAAe,GAAG;IACtB,CAAC,cAAc,EAAE,qBAAqB,EAAE,cAAc,CAAC;IACvD,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC;IACpE,CAAC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,CAAC;CAChD,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAIzC;IACC,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,iBAAiB,KAAK,OAAO,EAAE,CAAC;YAClC,OAAO,WAAW,CAChB,WAAW,IAAI,CAAC,SAAS,0FAA0F,CACpH,CAAC;QACJ,CAAC;QACD,IAAI,iBAAiB,KAAK,UAAU,EAAE,CAAC;YACrC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAED,uBAAuB,CACrB,IAAI,CAAC,eAAe,EACpB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAC1C,CAAC;QAEF,MAAM,MAAM,GAAW,MAAM,qBAAqB,CAAC;YACjD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAClE,sBAAsB,CAAC,MAAM,EAAE,8BAA8B,CAAC;YAC9D,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC;SAC7C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG;YACd,kBAAkB;YAClB,mBAAmB;YACnB,IAAI,CAAC,YAAY;SAClB,CAAC;QACF,MAAM,YAAY,GAAwB,MAAM,CAAC,MAAM,CACrD,EAAE,EACF,IAAI,CAAC,YAAY,IAAI,EAAE,EACvB,mBAAmB,IAAI,EAAE,EACzB,kBAAkB,IAAI,EAAE,CACzB,CAAC;QAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI,eAAe,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,SAAS;gBACnC,SAAS,EAAE,CAAC,WAAW,CAAC,KAAK,SAAS,CACzC,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC;YAE1D,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC9B,OAAO,YAAY,CAAC,WAAW,CAAC,CAAC;YAEjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,YAAY,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,yEAAyE;QACzE,yEAAyE;QACzE,kDAAkD;QAClD,IAAI,gBAAgB,GAAqB,UAAU,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,wBAAwB,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;YACpE,IAAI,KAAK,EAAE,SAAS,KAAK,OAAO,EAAE,CAAC;gBACjC,gBAAgB,GAAG,OAAO,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;QACD,MAAM,UAAU,CACd,MAAM,EACN,IAAI,CAAC,SAAS,EACd,YAAY,EACZ,gBAAgB,EAChB,IAAI,CAAC,eAAe,CACrB,CAAC;QAEF,OAAO,UAAU,CACf,gCAAgC,IAAI,CAAC,SAAS,sBAAsB,YAAY,EAAE,CAAC,MAAM,EAAE,CAC5F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,WAAW,CAChB,4BAA4B,IAAI,CAAC,SAAS,KAAK,gBAAgB,CAAC,GAAG,CAAC,EAAE,CACvE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CACnC,MAAc,EACd,UAAyD;IAEzD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"attach-session.js","sourceRoot":"","sources":["../../../src/tools/session/attach-session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA+EvC,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6ErD"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA8EvC,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6ErD"}
@@ -34,7 +34,7 @@ const schema = z.object({
34
34
  .enum(SESSION_ACTIONS)
35
35
  .describe('Action to perform. ' +
36
36
  `create: ${CREATE_SESSION_DESCRIPTION}` +
37
- 'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId.' +
37
+ 'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId. Always pass capabilities with at least platformName (e.g. \'{"platformName":"iOS"}\' or \'{"platformName":"Android"}\') so the client is configured with the correct protocol commands.' +
38
38
  'detach: Remove an attached Appium session from MCP Appium without deleting the real remote session. Defaults to the active session.' +
39
39
  'delete: Delete a mobile session and clean up resources. If sessionId is omitted, deletes the active session.' +
40
40
  'list: List all active Appium sessions managed by this MCP server, including active flag, ownership, and current context.' +
@@ -50,9 +50,8 @@ const schema = z.object({
50
50
  .string()
51
51
  .optional()
52
52
  .describe('Optional W3C capabilities for create. Provide as a JSON string (e.g. \'{"appium:app":"/path/to/app","appium:platformVersion":"17.0"}\'). ' +
53
- 'Applied on top of defaults for ios/android, or used as-is for general. ' +
54
- 'Common: appium:app, appium:deviceName, appium:platformVersion, appium:bundleId. ' +
55
- 'When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values.'),
53
+ 'For create: applied on top of defaults for ios/android, or used as-is for general. Common: appium:app, appium:deviceName, appium:platformVersion, appium:bundleId. When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values. ' +
54
+ 'For attach: always include platformName ("iOS" or "Android") so the WebDriver client loads the correct Appium protocol commands (e.g. \'{"platformName":"iOS"}\').'),
56
55
  remoteServerUrl: z
57
56
  .string()
58
57
  .optional()
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/tools/session/session.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { type Client } from 'webdriver';
2
2
  export interface RemoteAttachOptions {
3
3
  remoteServerUrl: string;
4
4
  sessionId: string;
5
- capabilities?: Record<string, unknown>;
5
+ capabilities: Record<string, unknown>;
6
6
  }
7
7
  /**
8
8
  * Resolve the port to use for a given URL.
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAejB"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAejB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "appium-mcp",
3
3
  "mcpName": "io.github.appium/appium-mcp",
4
- "version": "1.81.7",
4
+ "version": "1.82.0",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",
package/server.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "name": "io.github.appium/appium-mcp",
4
4
  "title": "MCP Appium - Mobile Development and Automation Server",
5
5
  "description": "MCP server for Appium mobile automation on iOS and Android devices with test creation tools.",
6
- "version": "1.81.7",
6
+ "version": "1.82.0",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "appium-mcp",
11
- "version": "1.81.7",
11
+ "version": "1.82.0",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }
Binary file
@@ -10,7 +10,7 @@ import {
10
10
  import { readAllPersistedSessions } from '../../persistence.js';
11
11
  import { errorResult, textResult, toolErrorMessage } from '../tool-response.js';
12
12
  import { validateRemoteServerUrl } from './create-session.js';
13
- import { attachToRemoteSession } from '../../utils/url.js';
13
+ import { attachToRemoteSession, getPortFromUrl } from '../../utils/url.js';
14
14
 
15
15
  /**
16
16
  * Normalize capability payloads returned by Appium/WebdriverIO into a flat
@@ -44,9 +44,14 @@ const METADATA_FIELDS = [
44
44
  * Attach MCP Appium to an existing remote Appium session without taking
45
45
  * ownership of the underlying session lifecycle.
46
46
  *
47
+ * Session capabilities are fetched from the server before creating the
48
+ * WebDriver client so that WebDriver.attachToSession receives the full
49
+ * capability set (including platformName) and sessionEnvironmentDetector can
50
+ * correctly configure isMobile / isAndroid / isIOS on the client instance.
51
+ *
47
52
  * @param args - Remote server location, target session id, and optional
48
- * capability overrides to seed local metadata.
49
- * @returns A tool response describing whether the attach succeeded.
53
+ * capability overrides.
54
+ * @returns A tool response describing whether the attachment succeeded.
50
55
  */
51
56
  export async function attachSessionAction(args: {
52
57
  remoteServerUrl: string;
@@ -69,29 +74,51 @@ export async function attachSessionAction(args: {
69
74
  process.env.REMOTE_SERVER_URL_ALLOW_REGEX
70
75
  );
71
76
 
72
- const client: Client = await attachToRemoteSession({
73
- remoteServerUrl: args.remoteServerUrl,
74
- sessionId: args.sessionId,
75
- capabilities: args.capabilities,
76
- });
77
-
78
- const [appiumCapabilities, sessionCapabilities] = await Promise.all([
79
- readClientCapabilities(client, 'getAppiumSessionCapabilities'),
80
- readClientCapabilities(client, 'getSession'),
81
- ]);
77
+ // Fetch capabilities from the server BEFORE creating the WebDriver client.
78
+ // This ensures WebDriver.attachToSession receives platformName so that
79
+ // sessionEnvironmentDetector configures isMobile / isAndroid / isIOS
80
+ // correctly. Caller-provided capabilities take the lowest priority; the W3C
81
+ // Appium extension endpoint wins.
82
+ const [sessionCapabilities, deprecatedSessionCapabilities] =
83
+ await Promise.all([
84
+ fetchCapabilitiesFromServer(
85
+ args.remoteServerUrl,
86
+ args.sessionId,
87
+ 'appium/session_capabilities'
88
+ ),
89
+ fetchCapabilitiesFromServer(args.remoteServerUrl, args.sessionId),
90
+ ]);
91
+
92
+ if (
93
+ sessionCapabilities === undefined &&
94
+ deprecatedSessionCapabilities === undefined
95
+ ) {
96
+ return errorResult(
97
+ `Failed to fetch capabilities for session ${args.sessionId} from ${args.remoteServerUrl}. ` +
98
+ `The server may be unreachable or the session may no longer exist.`
99
+ );
100
+ }
82
101
 
83
102
  const sources = [
84
- appiumCapabilities,
85
103
  sessionCapabilities,
104
+ deprecatedSessionCapabilities,
86
105
  args.capabilities,
87
106
  ];
88
107
  const capabilities: SessionCapabilities = Object.assign(
89
108
  {},
90
109
  args.capabilities ?? {},
91
- sessionCapabilities ?? {},
92
- appiumCapabilities ?? {}
110
+ deprecatedSessionCapabilities ?? {},
111
+ sessionCapabilities ?? {}
93
112
  );
94
113
 
114
+ const client: Client = await attachToRemoteSession({
115
+ remoteServerUrl: args.remoteServerUrl,
116
+ sessionId: args.sessionId,
117
+ capabilities,
118
+ });
119
+
120
+ // Normalize metadata fields into their canonical prefixed forms for
121
+ // local session tracking.
95
122
  for (const [plainKey, prefixedKey, targetKey] of METADATA_FIELDS) {
96
123
  const source = sources.find(
97
124
  (candidate) =>
@@ -99,10 +126,8 @@ export async function attachSessionAction(args: {
99
126
  candidate?.[prefixedKey] !== undefined
100
127
  );
101
128
  const value = source?.[plainKey] ?? source?.[prefixedKey];
102
-
103
129
  delete capabilities[plainKey];
104
130
  delete capabilities[prefixedKey];
105
-
106
131
  if (value !== undefined) {
107
132
  capabilities[targetKey] = value;
108
133
  }
@@ -141,23 +166,49 @@ export async function attachSessionAction(args: {
141
166
  }
142
167
 
143
168
  /**
144
- * Read capabilities from a WebdriverIO client method when available.
169
+ * Fetch session capabilities from the Appium server via a plain HTTP request.
145
170
  *
146
- * @param client - Attached WebdriverIO client for the target Appium session.
147
- * @param methodName - Capability reader to invoke on the client.
148
- * @returns Parsed capabilities, or `undefined` when the method is missing or fails.
171
+ * Making this request before WebDriver.attachToSession avoids the ordering
172
+ * problem where the client is created before platformName is known.
173
+ *
174
+ * @param remoteServerUrl - Base URL of the Appium server.
175
+ * @param sessionId - ID of the existing session to query.
176
+ * @param endpoint - Optional sub-path after `/session/{id}/`.
177
+ * @returns Parsed capabilities, or `undefined` when the request fails or the
178
+ * endpoint is not supported by the server.
149
179
  */
150
- async function readClientCapabilities(
151
- client: Client,
152
- methodName: 'getAppiumSessionCapabilities' | 'getSession'
180
+ async function fetchCapabilitiesFromServer(
181
+ remoteServerUrl: string,
182
+ sessionId: string,
183
+ endpoint?: string
153
184
  ): Promise<SessionCapabilities | undefined> {
154
- const method = client[methodName];
155
- if (typeof method !== 'function') {
156
- return undefined;
157
- }
158
-
159
185
  try {
160
- return readCapabilities(await method.call(client));
186
+ const url = new URL(remoteServerUrl);
187
+ const port = getPortFromUrl(url);
188
+ const basePath = url.pathname.replace(/\/$/, '');
189
+ const path = `${basePath}/session/${sessionId}${endpoint ? '/' + endpoint : ''}`;
190
+ const requestUrl = `${url.protocol}//${url.hostname}:${port}${path}`;
191
+
192
+ const headers: Record<string, string> = {
193
+ 'Content-Type': 'application/json',
194
+ };
195
+ if (url.username && url.password) {
196
+ const credentials = Buffer.from(
197
+ `${decodeURIComponent(url.username)}:${decodeURIComponent(url.password)}`
198
+ ).toString('base64');
199
+ headers.Authorization = `Basic ${credentials}`;
200
+ }
201
+
202
+ const response = await fetch(requestUrl, {
203
+ headers,
204
+ signal: AbortSignal.timeout(5000),
205
+ });
206
+ if (!response.ok) {
207
+ return undefined;
208
+ }
209
+
210
+ const json = (await response.json()) as { value?: unknown };
211
+ return readCapabilities(json.value);
161
212
  } catch {
162
213
  return undefined;
163
214
  }
@@ -39,7 +39,7 @@ const schema = z.object({
39
39
  .describe(
40
40
  'Action to perform. ' +
41
41
  `create: ${CREATE_SESSION_DESCRIPTION}` +
42
- 'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId.' +
42
+ 'attach: Attach MCP Appium to an existing remote Appium session without taking ownership of its lifecycle. Requires remoteServerUrl and sessionId. Always pass capabilities with at least platformName (e.g. \'{"platformName":"iOS"}\' or \'{"platformName":"Android"}\') so the client is configured with the correct protocol commands.' +
43
43
  'detach: Remove an attached Appium session from MCP Appium without deleting the real remote session. Defaults to the active session.' +
44
44
  'delete: Delete a mobile session and clean up resources. If sessionId is omitted, deletes the active session.' +
45
45
  'list: List all active Appium sessions managed by this MCP server, including active flag, ownership, and current context.' +
@@ -59,9 +59,8 @@ const schema = z.object({
59
59
  .optional()
60
60
  .describe(
61
61
  'Optional W3C capabilities for create. Provide as a JSON string (e.g. \'{"appium:app":"/path/to/app","appium:platformVersion":"17.0"}\'). ' +
62
- 'Applied on top of defaults for ios/android, or used as-is for general. ' +
63
- 'Common: appium:app, appium:deviceName, appium:platformVersion, appium:bundleId. ' +
64
- 'When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values.'
62
+ 'For create: applied on top of defaults for ios/android, or used as-is for general. Common: appium:app, appium:deviceName, appium:platformVersion, appium:bundleId. When passing from a capabilitiesHint result, serialize the full object to JSON — do NOT drop boolean or numeric values. ' +
63
+ 'For attach: always include platformName ("iOS" or "Android") so the WebDriver client loads the correct Appium protocol commands (e.g. \'{"platformName":"iOS"}\').'
65
64
  ),
66
65
  remoteServerUrl: z
67
66
  .string()
package/src/utils/url.ts CHANGED
@@ -3,7 +3,7 @@ import WebDriver, { type Client } from 'webdriver';
3
3
  export interface RemoteAttachOptions {
4
4
  remoteServerUrl: string;
5
5
  sessionId: string;
6
- capabilities?: Record<string, unknown>;
6
+ capabilities: Record<string, unknown>;
7
7
  }
8
8
 
9
9
  /**