appium-mcp 1.85.7 → 1.85.8

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.85.8](https://github.com/appium/appium-mcp/compare/v1.85.7...v1.85.8) (2026-06-17)
2
+
3
+ ### Bug Fixes
4
+
5
+ * require session id to get persistent session ([#409](https://github.com/appium/appium-mcp/issues/409)) ([f224459](https://github.com/appium/appium-mcp/commit/f224459cf6b8774927236d5ce3cf07a819241766))
6
+
1
7
  ## [1.85.7](https://github.com/appium/appium-mcp/compare/v1.85.6...v1.85.7) (2026-06-16)
2
8
 
3
9
  ### Miscellaneous Chores
package/README.md CHANGED
@@ -158,7 +158,7 @@ This will automatically configure the MCP server for use with Claude Code. Make
158
158
  | `AI_VISION_IMAGE_MAX_WIDTH` | Optional | Max image width in pixels before compression (default: `1080`) |
159
159
  | `AI_VISION_IMAGE_QUALITY` | Optional | JPEG quality 1–100 for compressed screenshots sent to the vision API (default: `80`) |
160
160
  | `SENTENCE_TRANSFORMERS_MODEL` | Optional | Hugging Face model used for semantic search in Appium documentation queries (default: `Xenova/all-MiniLM-L6-v2`) |
161
- | `APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH` | Optional | Absolute file path to persist attached remote session info across server restarts (JSON format) |
161
+ | `APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH` | Optional | Directory path for persisted attached remote session info. When set, attached remote sessions are stored as JSON files in that directory and can be rehydrated after restart. |
162
162
  | `APPIUM_MCP_EVIDENCE` | Optional | Set to `true` or `1` to attach a structured **action evidence record** (locator, resolved element id, context, timing, normalized error code) to `appium_find_element` and `appium_gesture` responses as an `application/vnd.appium.evidence+json` resource block, for CI/debugging. Disabled by default; responses are unchanged when unset. |
163
163
  | `APPIUM_MCP_OTEL_ENABLED` | Optional | Set to `true` to enable OpenTelemetry tracing (disabled by default). |
164
164
  | `APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES` | Optional | Set to `true` to include sanitized non-sensitive argument values in spans; disabled by default because values may contain sensitive data. |
@@ -182,6 +182,8 @@ OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://127.0.0.1:4318/v1/traces
182
182
  OTEL_TRACES_SAMPLER=parentbased_always_on
183
183
  ```
184
184
 
185
+ (Please check the [official document](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/) as well)
186
+
185
187
  When enabled, appium-mcp creates spans for MCP tool calls, prompt loads, resource reads, and resource template reads. Error status is recorded for thrown operation errors and MCP tool results marked with `isError`. Span attributes intentionally avoid raw screenshots, XML page source, prompts, credentials, and other high-cardinality or sensitive payloads.
186
188
 
187
189
  For local trace inspection, use the Jaeger setup in `tools/telemetry`:
@@ -237,7 +239,11 @@ For **CI**, **device farms**, or **multi-session** setups:
237
239
 
238
240
  #### Multi-session and `sessionId`
239
241
 
240
- The process keeps one **active** Appium session; tools use it when **`sessionId` is omitted**. If more than one session exists (see **`appium_session_management`** with **`action=list`**), pass **`sessionId` on every tool call** that must target a specific session. Do not assume the active session is stable if other clients or flows can create, select, or delete sessions.
242
+ The process keeps one **active** Appium session; tools use it when **`sessionId` is omitted**. If a tool call does not include a `sessionId`, it will target the active session instead of a specific one. If more than one session exists (see **`appium_session_management`** with **`action=list`**), pass **`sessionId` on every tool call** that must target a specific session. Do not assume the active session is stable if other clients or flows can create, select, or delete sessions.
243
+
244
+ #### Session persistence
245
+
246
+ If **`APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH`** is set, MCP Appium persists **attached remote sessions** to that directory as JSON files. The path may be absolute or relative to the current working directory. Each session is stored under a canonical filename derived from a hash of the `sessionId`; older legacy filenames are migrated, and duplicate files for the same session are removed when the directory is read. When a persisted attached session is used again, the server tries to reattach to the remote Appium session; unreachable entries are pruned automatically.
241
247
 
242
248
  #### Client disconnect
243
249
 
@@ -1 +1 @@
1
- {"version":3,"file":"tool-response.d.ts","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAW7B,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAEzC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEtD;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,aAAa,CAIf;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEvD;AAED,gGAAgG;AAChG,wBAAgB,4BAA4B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAE7E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,aAAa,CAIf"}
1
+ {"version":3,"file":"tool-response.d.ts","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAW7B,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAEzC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEtD;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,aAAa,CAIf;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAEvD;AAED,gGAAgG;AAChG,wBAAgB,4BAA4B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAE7E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,aAAa,CAIf"}
@@ -67,6 +67,10 @@ export function noActiveDriverSessionResult(sessionId) {
67
67
  export async function resolveDriver(sessionId) {
68
68
  let driver = getDriver(sessionId);
69
69
  if (!driver) {
70
+ if (!sessionId) {
71
+ // No active session or no sessionId specified.
72
+ return { ok: false, result: noActiveDriverSessionResult() };
73
+ }
70
74
  const rehydrated = await rehydrateAttachedSession(sessionId);
71
75
  if (rehydrated) {
72
76
  driver = getDriver(sessionId ?? rehydrated.sessionId);
@@ -89,9 +93,7 @@ async function rehydrateAttachedSession(sessionId) {
89
93
  if (persisted.length === 0) {
90
94
  return null;
91
95
  }
92
- const candidates = sessionId
93
- ? persisted.filter((p) => p.sessionId === sessionId)
94
- : persisted;
96
+ const candidates = persisted.filter((p) => p.sessionId === sessionId);
95
97
  for (const entry of candidates) {
96
98
  try {
97
99
  const client = await attachToRemoteSession({
@@ -1 +1 @@
1
- {"version":3,"file":"tool-response.js","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-response.js","sourceRoot":"","sources":["../../src/tools/tool-response.ts"],"names":[],"mappings":"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"}
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.85.7",
4
+ "version": "1.85.8",
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.85.7",
6
+ "version": "1.85.8",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "appium-mcp",
11
- "version": "1.85.7",
11
+ "version": "1.85.8",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }
@@ -95,6 +95,10 @@ export async function resolveDriver(
95
95
  ): Promise<DriverOrError> {
96
96
  let driver = getDriver(sessionId);
97
97
  if (!driver) {
98
+ if (!sessionId) {
99
+ // No active session or no sessionId specified.
100
+ return { ok: false, result: noActiveDriverSessionResult() };
101
+ }
98
102
  const rehydrated = await rehydrateAttachedSession(sessionId);
99
103
  if (rehydrated) {
100
104
  driver = getDriver(sessionId ?? rehydrated.sessionId);
@@ -121,15 +125,13 @@ export function platformMismatch(
121
125
  }
122
126
 
123
127
  async function rehydrateAttachedSession(
124
- sessionId?: string
128
+ sessionId: string
125
129
  ): Promise<{ sessionId: string } | null> {
126
130
  const persisted = await readAllPersistedSessions();
127
131
  if (persisted.length === 0) {
128
132
  return null;
129
133
  }
130
- const candidates = sessionId
131
- ? persisted.filter((p) => p.sessionId === sessionId)
132
- : persisted;
134
+ const candidates = persisted.filter((p) => p.sessionId === sessionId);
133
135
  for (const entry of candidates) {
134
136
  try {
135
137
  const client = await attachToRemoteSession({