appium-mcp 1.85.9 → 1.85.10

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.10](https://github.com/appium/appium-mcp/compare/v1.85.9...v1.85.10) (2026-06-18)
2
+
3
+ ### Bug Fixes
4
+
5
+ * add escape for ui ([#411](https://github.com/appium/appium-mcp/issues/411)) ([e222bbb](https://github.com/appium/appium-mcp/commit/e222bbbd6fe2b656a320efcd143563f08061a83d))
6
+
1
7
  ## [1.85.9](https://github.com/appium/appium-mcp/compare/v1.85.8...v1.85.9) (2026-06-18)
2
8
 
3
9
  ### Bug Fixes
@@ -8,10 +8,10 @@ export type ScrollDistancePreset = (typeof SCROLL_DISTANCE_PRESETS)[number];
8
8
  export declare const LOCATOR_STRATEGIES: readonly ["accessibility id", "id", "-ios predicate string", "-ios class chain", "-android uiautomator", "xpath", "name", "class name", "css selector"];
9
9
  export declare const gestureSchema: z.ZodObject<{
10
10
  action: z.ZodEnum<{
11
+ scroll: "scroll";
11
12
  tap: "tap";
12
13
  double_tap: "double_tap";
13
14
  long_press: "long_press";
14
- scroll: "scroll";
15
15
  swipe: "swipe";
16
16
  pinch_zoom: "pinch_zoom";
17
17
  scroll_to_element: "scroll_to_element";
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-ui-utils.d.ts","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,WAAW,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CASA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,EACF,QAAQ,EAAE,SAAS,GAAG,KAAK,EAC3B,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,GAChC,MAAM,CAyLR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,CAsMR;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE;IACpD,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CA8OT;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,GACD,MAAM,CAyLR;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0KtE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAsJR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CAgNR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAe,GACxB,MAAM,CAsJR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EAC7D,UAAU,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAC9C;IAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CAAE,CAQzB"}
1
+ {"version":3,"file":"mcp-ui-utils.d.ts","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,WAAW,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CASA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,EACF,QAAQ,EAAE,SAAS,GAAG,KAAK,EAC3B,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,GAChC,MAAM,CAyLR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,CAsMR;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE;IACpD,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CA8OT;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,GACD,MAAM,CAmMR;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0KtE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,CAsJR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CAgNR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAe,GACxB,MAAM,CAsJR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EAC7D,UAAU,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GAC9C;IAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CAAE,CAQzB"}
@@ -659,23 +659,23 @@ export function createLocatorGeneratorUI(locators) {
659
659
  .map((element, index) => `
660
660
  <div class="locator-card" data-index="${index}">
661
661
  <div class="locator-header">
662
- <h3>${element.tagName}</h3>
662
+ <h3>${escapeHtml(element.tagName)}</h3>
663
663
  <div class="badges">
664
664
  ${element.clickable ? '<span class="badge badge-clickable">Clickable</span>' : ''}
665
665
  ${element.enabled ? '<span class="badge badge-enabled">Enabled</span>' : ''}
666
666
  ${element.displayed ? '<span class="badge badge-displayed">Displayed</span>' : ''}
667
667
  </div>
668
668
  </div>
669
- ${element.text ? `<p class="element-text"><strong>Text:</strong> ${element.text}</p>` : ''}
670
- ${element.contentDesc ? `<p class="element-text"><strong>Content Desc:</strong> ${element.contentDesc}</p>` : ''}
671
- ${element.resourceId ? `<p class="element-text"><strong>Resource ID:</strong> <code>${element.resourceId}</code></p>` : ''}
669
+ ${element.text ? `<p class="element-text"><strong>Text:</strong> ${escapeHtml(element.text)}</p>` : ''}
670
+ ${element.contentDesc ? `<p class="element-text"><strong>Content Desc:</strong> ${escapeHtml(element.contentDesc)}</p>` : ''}
671
+ ${element.resourceId ? `<p class="element-text"><strong>Resource ID:</strong> <code>${escapeHtml(element.resourceId)}</code></p>` : ''}
672
672
  <div class="locators-list">
673
673
  ${Object.entries(element.locators)
674
674
  .map(([strategy, selector]) => `
675
675
  <div class="locator-item">
676
- <span class="strategy">${strategy}</span>
677
- <code class="selector">${selector}</code>
678
- <button class="test-btn" onclick="testLocator('${strategy}', \`${selector.replace(/`/g, '\\`')}\`)">Test</button>
676
+ <span class="strategy">${escapeHtml(strategy)}</span>
677
+ <code class="selector">${escapeHtml(selector)}</code>
678
+ <button class="test-btn" data-strategy="${escapeHtml(strategy)}" data-selector="${escapeHtml(selector)}">Test</button>
679
679
  </div>
680
680
  `)
681
681
  .join('')}
@@ -830,6 +830,16 @@ export function createLocatorGeneratorUI(locators) {
830
830
  }
831
831
  }, '*');
832
832
  }
833
+
834
+ document.addEventListener('click', (event) => {
835
+ const target = event.target;
836
+ const button = target instanceof Element ? target.closest('.test-btn') : null;
837
+ if (!button) {
838
+ return;
839
+ }
840
+
841
+ testLocator(button.dataset.strategy || '', button.dataset.selector || '');
842
+ });
833
843
  </script>
834
844
  </body>
835
845
  </html>
@@ -1543,4 +1553,12 @@ export function addUIResourceToResponse(response, uiResource) {
1543
1553
  content: [...response.content, uiResource],
1544
1554
  };
1545
1555
  }
1556
+ function escapeHtml(value) {
1557
+ return String(value)
1558
+ .replace(/&/g, '&amp;')
1559
+ .replace(/</g, '&lt;')
1560
+ .replace(/>/g, '&gt;')
1561
+ .replace(/"/g, '&quot;')
1562
+ .replace(/'/g, '&#039;');
1563
+ }
1546
1564
  //# sourceMappingURL=mcp-ui-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-ui-utils.js","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-ui-utils.js","sourceRoot":"","sources":["../../src/ui/mcp-ui-utils.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.9",
4
+ "version": "1.85.10",
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.9",
6
+ "version": "1.85.10",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "appium-mcp",
11
- "version": "1.85.9",
11
+ "version": "1.85.10",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  }
@@ -720,24 +720,24 @@ export function createLocatorGeneratorUI(
720
720
  (element, index) => `
721
721
  <div class="locator-card" data-index="${index}">
722
722
  <div class="locator-header">
723
- <h3>${element.tagName}</h3>
723
+ <h3>${escapeHtml(element.tagName)}</h3>
724
724
  <div class="badges">
725
725
  ${element.clickable ? '<span class="badge badge-clickable">Clickable</span>' : ''}
726
726
  ${element.enabled ? '<span class="badge badge-enabled">Enabled</span>' : ''}
727
727
  ${element.displayed ? '<span class="badge badge-displayed">Displayed</span>' : ''}
728
728
  </div>
729
729
  </div>
730
- ${element.text ? `<p class="element-text"><strong>Text:</strong> ${element.text}</p>` : ''}
731
- ${element.contentDesc ? `<p class="element-text"><strong>Content Desc:</strong> ${element.contentDesc}</p>` : ''}
732
- ${element.resourceId ? `<p class="element-text"><strong>Resource ID:</strong> <code>${element.resourceId}</code></p>` : ''}
730
+ ${element.text ? `<p class="element-text"><strong>Text:</strong> ${escapeHtml(element.text)}</p>` : ''}
731
+ ${element.contentDesc ? `<p class="element-text"><strong>Content Desc:</strong> ${escapeHtml(element.contentDesc)}</p>` : ''}
732
+ ${element.resourceId ? `<p class="element-text"><strong>Resource ID:</strong> <code>${escapeHtml(element.resourceId)}</code></p>` : ''}
733
733
  <div class="locators-list">
734
734
  ${Object.entries(element.locators)
735
735
  .map(
736
736
  ([strategy, selector]) => `
737
737
  <div class="locator-item">
738
- <span class="strategy">${strategy}</span>
739
- <code class="selector">${selector}</code>
740
- <button class="test-btn" onclick="testLocator('${strategy}', \`${selector.replace(/`/g, '\\`')}\`)">Test</button>
738
+ <span class="strategy">${escapeHtml(strategy)}</span>
739
+ <code class="selector">${escapeHtml(selector)}</code>
740
+ <button class="test-btn" data-strategy="${escapeHtml(strategy)}" data-selector="${escapeHtml(selector)}">Test</button>
741
741
  </div>
742
742
  `
743
743
  )
@@ -895,6 +895,16 @@ export function createLocatorGeneratorUI(
895
895
  }
896
896
  }, '*');
897
897
  }
898
+
899
+ document.addEventListener('click', (event) => {
900
+ const target = event.target;
901
+ const button = target instanceof Element ? target.closest('.test-btn') : null;
902
+ if (!button) {
903
+ return;
904
+ }
905
+
906
+ testLocator(button.dataset.strategy || '', button.dataset.selector || '');
907
+ });
898
908
  </script>
899
909
  </body>
900
910
  </html>
@@ -1633,3 +1643,12 @@ export function addUIResourceToResponse(
1633
1643
  content: [...response.content, uiResource],
1634
1644
  };
1635
1645
  }
1646
+
1647
+ function escapeHtml(value: unknown): string {
1648
+ return String(value)
1649
+ .replace(/&/g, '&amp;')
1650
+ .replace(/</g, '&lt;')
1651
+ .replace(/>/g, '&gt;')
1652
+ .replace(/"/g, '&quot;')
1653
+ .replace(/'/g, '&#039;');
1654
+ }