Skip to main content
Glama
WeChat Mini Program Dev MCP

WeChat Mini Program Dev MCP

by yfmeii

MCP-сервер для WeChat Mini Program

Сервер на базе FastMCP, автоматизирующий WeChat Developer Tools через miniprogram-automator. Сервер предоставляет инструменты MCP, позволяющие ИИ-ассистентам перемещаться, проверять и взаимодействовать со страницами мини-программ — аналогично playwright-mcp, но специально адаптировано для экосистемы WeChat.

Предварительные требования

  • Установлены WeChat Developer Tools с поддержкой доступа через командную строку (cli / cli.bat)

  • Локально установлены Node.js 18+ и npm

  • Наличие проекта мини-программы, который можно открыть в Developer Tools

Related MCP server: miniprogram-automator-mcp

Быстрый старт (npm-пакет)

@yfme/weapp-dev-mcp опубликован в npm, обычным пользователям не нужно клонировать репозиторий или вручную запускать node dist/index.js.

Запуск через npx

npx -y @yfme/weapp-dev-mcp

Установка в проект/глобально

npm install -g @yfme/weapp-dev-mcp
weapp-dev-mcp

Или как зависимость проекта:

npm install --save-dev @yfme/weapp-dev-mcp
npx weapp-dev-mcp

Прямой запуск node dist/index.js рекомендуется только при разработке внутри этого репозитория. Обычным пользователям следует запускать пакет через npm, как описано выше.

Интеграция с MCP-клиентом

Конфигурация

Чтобы использовать этот сервер в Claude Desktop или другом MCP-клиенте, добавьте в файл конфигурации:

{
  "mcpServers": {
    "weapp-dev": {
      "command": "npx",
      "args": [
        "-y",
        "@yfme/weapp-dev-mcp"
      ],
      "env": {
        "WEAPP_WS_ENDPOINT": "ws://localhost:9420"
      }
    }
  }
}

Автоматическое одобрение прав инструментов в Claude Code

Поскольку при вызове инструментов MCP через Claude Code запрашиваются права доступа, это может привести к потере состояния подключения между MCP и WeChat Developer Tools. Поскольку получение вывода консоли сильно зависит от состояния подключения, получение логов может стать нестабильным, поэтому рекомендуется вручную добавить права:

Создайте файл .claude/settings.local.json в директории проекта или добавьте следующее содержимое в существующий файл, чтобы вызывать инструменты без подтверждения (или добавьте только те инструменты, которые хотите разрешить):

{
  "permissions": {
    "allow": [
      "mcp__weapp-dev-mcp__mp_ensureConnection",
      "mcp__weapp-dev-mcp__mp_navigate",
      "mcp__weapp-dev-mcp__mp_screenshot",
      "mcp__weapp-dev-mcp__mp_callWx",
      "mcp__weapp-dev-mcp__mp_getLogs",
      "mcp__weapp-dev-mcp__mp_currentPage",
      "mcp__weapp-dev-mcp__mp_listProjects",
      "mcp__weapp-dev-mcp__mp_setDefaultProject",
      "mcp__weapp-dev-mcp__page_getElement",
      "mcp__weapp-dev-mcp__page_getElements",
      "mcp__weapp-dev-mcp__page_waitElement",
      "mcp__weapp-dev-mcp__page_waitTimeout",
      "mcp__weapp-dev-mcp__page_getData",
      "mcp__weapp-dev-mcp__page_setData",
      "mcp__weapp-dev-mcp__page_callMethod",
      "mcp__weapp-dev-mcp__element_tap",
      "mcp__weapp-dev-mcp__element_input",
      "mcp__weapp-dev-mcp__element_callMethod",
      "mcp__weapp-dev-mcp__element_getData",
      "mcp__weapp-dev-mcp__element_setData",
      "mcp__weapp-dev-mcp__element_getInnerElement",
      "mcp__weapp-dev-mcp__element_getInnerElements",
      "mcp__weapp-dev-mcp__element_getWxml",
      "mcp__weapp-dev-mcp__element_getStyles",
      "mcp__weapp-dev-mcp__element_scrollTo",
      "mcp__weapp-dev-mcp__element_getAttributes",
      "mcp__weapp-dev-mcp__element_getBoundingClientRect"
    ]
  }
}

Примечание: Формат имени инструмента: mcp__<имя_сервера>__<имя_инструмента>. Убедитесь, что имя сервера совпадает с именем в вашей конфигурации MCP.

Запуск WeChat Developer Tools

Перед использованием MCP-сервера необходимо запустить WeChat Developer Tools и включить службу WebSocket.

💡 Перед началом:

  1. Откройте WeChat Developer Tools

  2. Перейдите в Настройки → Безопасность → Порт службы

  3. Включите "HTTP-отладка" и "Автоматизированное тестирование"

Запуск через командную строку

Используйте командную строку для запуска WeChat Developer Tools с автоматическим включением службы WebSocket:

macOS/Linux:

/Applications/wechatwebdevtools.app/Contents/MacOS/cli auto --project /path/to/your/project --auto-port 9420

Windows:

"C:\Program Files (x86)\Tencent\微信web开发者工具\cli.bat" auto --project C:\path\to\your\project --auto-port 9420

Где:

  • Параметр --project указывает путь к директории проекта мини-программы (замените на реальный путь)

  • Параметр --auto-port указывает порт службы WebSocket (по умолчанию 9420)

⚠️ Предупреждение Из-за механизмов песочницы некоторые клиенты не позволяют MCP получать доступ к CLI WeChat Developer Tools вне директории проекта, поэтому здесь описан только способ использования службы WebSocket.

Конфигурация переменных окружения

Управляйте тем, как инструмент автоматизации подключается к WeChat Developer Tools, с помощью переменных окружения:

Переменная

Описание

WEAPP_WS_ENDPOINT

【Рекомендуется】 WebSocket-эндпоинт уже запущенного Developer Tools. Если задано, сервер использует режим connect вместо запуска нового экземпляра. Пример: ws://localhost:9420

WECHAT_DEVTOOLS_CLI_PATH

Путь к CLI WeChat Developer Tools (опционально, если путь по умолчанию работает).

WEAPP_AUTOMATOR_MODE

Принудительное использование режима launch или connect. По умолчанию launch, если не предоставлен WEAPP_WS_ENDPOINT.

WEAPP_DEVTOOLS_PORT

Предпочтительный порт при запуске Developer Tools (откат к доступному порту).

WEAPP_DEVTOOLS_TIMEOUT

Тайм-аут запуска (мс, по умолчанию 30000).

WEAPP_AUTO_ACCOUNT

Передается в --auto-account для автоматического входа.

WEAPP_DEVTOOLS_TICKET

Передается в --ticket при запуске.

WEAPP_TRUST_PROJECT

Установите true для включения --trust-project при запуске.

WEAPP_DEVTOOLS_ARGS

Дополнительные аргументы CLI при запуске (через пробел).

WEAPP_DEVTOOLS_CWD

Рабочая директория, передаваемая процессу Developer Tools.

WEAPP_AUTOCLOSE

Если true, закрывает сессию Developer Tools после каждого вызова инструмента.

WEAPP_AUTOLAUNCH

Если true, автоматически обнаруживает и запускает Developer Tools

WEAPP_LAUNCH_TIMEOUT

Тайм-аут запуска (мс, по умолчанию 45000)

WEAPP_CONNECT_TIMEOUT

Тайм-аут подключения (мс, по умолчанию 45000)

WEAPP_PROJECT_PATH

Путь к проекту мини-программы (опционально)

Примечание: При запуске Developer Tools (режим launch) необходимо предоставить директорию проекта мини-программы через параметры инструмента MCP: укажите через connection.projectPath перед выполнением операций (например, через mp_ensureConnection). Это значение будет сохраняться в последующих вызовах.

Большинство этих значений по умолчанию можно переопределить через объект connection при вызове инструментов.

Доступные инструменты

Инструменты приложения (Application Tools)

  • mp_ensureConnection – гарантирует готовность сессии автоматизации; опционально принудительное переподключение или переопределение настроек подключения

  • mp_navigate – навигация внутри мини-программы, поддерживает navigateTo, redirectTo, reLaunch, switchTab или navigateBack

  • mp_screenshot – делает скриншот и возвращает его (или сохраняет на диск)

  • mp_callWx – вызов методов API WeChat Mini Program (например, wx.showToast)

  • mp_getLogs – получение логов консоли мини-программы, опционально с очисткой после получения

  • mp_currentPage – получение информации о текущей странице (путь, параметры запроса, размеры, позиция прокрутки), при withData: true дополнительно возвращает данные страницы

  • mp_listProjects – список недавних проектов в WeChat Developer Tools для удобного выбора директории проекта

  • mp_setDefaultProject – установка пути к проекту мини-программы по умолчанию, после чего он будет автоматически использоваться при следующем подключении

Инструменты страницы (Page Tools)

  • page_getElement – получение элемента страницы по селектору, возвращает сводную информацию об элементе (tagName, text, value, size, offset); установка withWxml: true дополнительно возвращает полный outerWxml; поддерживает синтаксис [index=N] для выбора N-го элемента

  • page_getElements – получение массива элементов страницы по селектору, возвращает сводную информацию; установка withWxml: true дополнительно возвращает полный outerWxml для каждого элемента; поддерживает синтаксис [index=N]

  • page_waitElement – ожидание появления элемента на странице (⚠️ не работает для элементов внутри пользовательских компонентов); поддерживает синтаксис [index=N]; добавлены параметры тайм-аута и интервала повторных попыток

  • page_waitTimeout – ожидание указанного количества миллисекунд

  • page_getData – получение объекта данных текущей страницы, можно указать путь (поддерживает вложенные пути, например 'user.name')

  • page_setData – обновление данных текущей страницы с помощью setData; добавлена опция verify для проверки успешности обновления данных

  • page_callMethod – вызов метода, экспонированного в экземпляре текущей страницы

Инструменты элементов (Element Tools)

  • element_tap – имитация нажатия на WXML-элемент через CSS-селектор; поддерживает синтаксис [index=N]; поддерживает смещение координат x/y; повышенная стабильность: ожидание интерактивного состояния элемента, автоматическая проверка изменения пути страницы после нажатия

  • element_input – ввод текста в элемент (для компонентов input и textarea)

  • element_callMethod – вызов метода экземпляра пользовательского компонента

  • element_getData – получение данных рендеринга экземпляра пользовательского компонента

  • element_setData – установка данных рендеринга экземпляра пользовательского компонента

  • element_getInnerElement – получение элемента внутри элемента (аналог element.$(selector)), возвращает сводную информацию; установка withWxml: true дополнительно возвращает полный outerWxml

  • element_getInnerElements – получение массива элементов внутри элемента (аналог element.$$(selector)), возвращает сводную информацию; установка withWxml: true дополнительно возвращает полный outerWxml для каждого элемента

  • element_getWxml – получение WXML элемента (внутреннего или внешнего)

  • element_getStyles – получение значений CSS-стилей элемента, параметр names — массив имен стилей (например, ['color', 'fontSize'])

  • element_scrollTo – прокрутка компонента scroll-view в указанную позицию (x, y)

  • element_getAttributes – получение значений атрибутов элемента, параметр names — массив имен атрибутов (например, ['class', 'id', 'data-index'])

  • element_getBoundingClientRect – получение информации о прямоугольнике границ элемента относительно области просмотра (left, top, width, height, right, bottom), учитывая CSS-трансформации (в настоящее время поддерживаются только селекторы ID и классов)

Каждый инструмент принимает опциональный блок connection для переопределения значений по умолчанию (путь к проекту, путь к CLI, WebSocket-эндпоинт и т.д.).

Советы по использованию

Общие советы

  • Перед подключением включите автоматизацию в WeChat Developer Tools (Настройки → Безопасность → Порт службы)

  • Рекомендуется сначала вызвать mp_ensureConnection для проверки подключения и просмотра сведений о системе/странице

  • Использование WEAPP_AUTOCLOSE=true подходит для одноразовых взаимодействий без сохранения состояния

  • Всегда используйте абсолютные пути при навигации (начинающиеся с /): /pages/mine/mine

  • Используйте switchTab для страниц tabBar и navigateTo для обычных страниц

Работа с пользовательскими компонентами

При работе с пользовательскими компонентами есть два способа:

Способ 1: Использование параметра innerSelector (рекомендуется)

Подходит для инструментов element_tap, element_input, element_getWxml и др.:

{
  "selector": "#my-component",
  "innerSelector": ".inner-button"
}
  • selector: селектор пользовательского компонента

  • innerSelector: селектор элемента внутри компонента

Способ 2: Использование инструментов поиска внутри элемента

Подходит для element_getInnerElement и element_getInnerElements:

{
  "selector": "#my-component",
  "targetSelector": ".inner-button"
}

Ограничения

  • page_waitElement не работает для элементов внутри пользовательских компонентов. Используйте page_waitTimeout в сочетании с инструментами поиска элементов для циклической проверки.

Функция автоматического запуска (AutoLaunch)

При настройке WEAPP_AUTOLAUNCH=true MCP-сервер может автоматически обнаруживать и запускать WeChat Developer Tools:

  1. Автоматическое обнаружение порта: проверка наличия службы на порту 9420

  2. Запуск при отсутствии службы: если порт не занят, автоматический вызов CLI для запуска Developer Tools

  3. Выбор проекта:

    • Если есть конфигурация проекта по умолчанию, используется автоматически

    • Если проекта по умолчанию нет, автоматически выводится список недавних проектов для выбора

    • Поддерживается ввод номера проекта (например, 1) или полного пути

Пример конфигурации

{
  "mcpServers": {
    "weapp-dev": {
      "command": "npx",
      "args": ["-y", "weapp-dev-mcp"],
      "env": {
        "WEAPP_AUTOLAUNCH": "true",
        "WEAPP_PROJECT_PATH": "D:\\path\\to\\your\\project"
      }
    }
  }
}

Рабочий процесс

  1. При первом подключении обнаруживается WEAPP_AUTOLAUNCH=true

  2. Проверяется наличие службы на порту 9420

  3. Если службы нет, Developer Tools запускается автоматически (используется cli.bat auto --project <path> --auto-port 9420)

  4. Ожидание 45 секунд до готовности Developer Tools

  5. Установка WebSocket-соединения

  6. Последующие подключения автоматически используют существующее соединение

Совет: После установки проекта по умолчанию через mp_setDefaultProject при следующем подключении не нужно будет снова выбирать проект.

Available Tools

27 tools
element_callMethodB

调用组件实例指定方法,仅自定义组件可以使用。

Inputs: selector (required), method (required), connection, innerSelector, +1 more.

element_getAttributesC

获取元素的特性值。names 为特性名数组(如 ['class', 'id', 'data-index'])。

Inputs: selector (required), names (required), connection, innerSelector.

element_getBoundingClientRectA

获取元素相对于视口的边界矩形信息(left、top、width、height、right、bottom)。此方法返回的是考虑 CSS transform 变换后的实际渲染尺寸和位置。支持跨组件查询:若需获取自定义组件内部元素,可将 selector 设为组件选择器,innerSelector 设为内部元素选择器。注意:目前仅支持 ID 选择器、类选择器。

Inputs: selector (required), connection, innerSelector.

element_getDataC

获取组件实例渲染数据,仅自定义组件可以使用。

Inputs: selector (required), connection, innerSelector, path.

element_getInnerElementD

在元素范围内获取元素,相当于 element.$(selector)。设置 withWxml 为 true 可额外返回每个元素的完整 outerWxml。

Inputs: selector (required), targetSelector (required), connection, innerSelector, +1 more.

element_getInnerElementsC

在元素范围内获取元素数组,相当于 element.$$(selector)。设置 withWxml 为 true 可额外返回每个元素的完整 outerWxml。

Inputs: selector (required), targetSelector (required), connection, innerSelector, +1 more.

element_getStylesC

获取元素的样式值。names 为样式名数组(如 ['color', 'fontSize', 'backgroundColor'])。

Inputs: selector (required), names (required), connection, innerSelector.

element_getWxmlC

获取元素 WXML。默认获取内部 WXML(element.wxml()),设置 outer 为 true 可获取包含元素本身的 WXML(element.outerWxml())。

Inputs: selector (required), connection, innerSelector, outer.

element_inputC

向指定元素输入文本。

Inputs: selector (required), value (required), connection, innerSelector.

element_scrollToA

滚动 scroll-view 组件到指定位置。仅适用于 scroll-view 组件。

Inputs: selector (required), x (required), y (required), connection, +1 more.

element_setDataB

设置组件实例渲染数据,仅自定义组件可以使用。

Inputs: selector (required), data (required), connection, innerSelector.

element_tapA

通过 CSS 选择器模拟点击 WXML 元素。支持 [index=N] 语法选择第 N 个元素。如需点击自定义组件内部的元素,请使用 innerSelector 参数:selector 设为组件 ID 选择器(如 #my-component)或标签选择器,innerSelector 设为组件内部元素的选择器。

Inputs: selector (required), connection, innerSelector, waitMs.

mp_callWxC

调用微信小程序 API 方法,(如 wx.pageScrollTo)。

Inputs: method (required), connection, args.

mp_currentPageA

获取当前页面的信息,包括路径、查询参数、尺寸和滚动位置。通常在 mp_ensureConnection 成功后立即调用,用于确认当前页面。withData 为 true 时额外返回页面数据。

Inputs: connection, withData.

mp_ensureConnectionA

检查小程序自动化会话是否就绪。先调用这个工具,再调用 mp_screenshot、page_* 或 element_* 工具。若失败,优先用 reconnect=true 重试一次;若返回项目选择提示,则传 projectSelection。

Inputs: connection, reconnect, projectSelection.

mp_getLogsC

获取小程序控制台日志。可选择在获取后清空日志。

Inputs: connection, clear.

mp_listProjectsB

列出微信开发者工具中的最近项目,方便在 mp_ensureConnection 返回项目选择提示后继续选择项目。

Inputs: no named parameters.

mp_navigateC

在小程序内导航,支持 navigateTo、redirectTo、reLaunch、switchTab 和 navigateBack。

Inputs: connection, path, query, transition, +1 more.

mp_screenshotA

截取当前小程序视口的截图。需要已有活动会话;若提示没有活动会话,请先调用 mp_ensureConnection。默认返回内联图片,或保存到文件路径。

Inputs: connection, path.

mp_setDefaultProjectA

设置默认的小程序项目路径,设置后下次连接会优先使用该项目。通常用于修复项目选择失败后的后续重试。

Inputs: projectPath (required).

page_callMethodC

调用当前页面实例上暴露的方法。参数可以作为数组提供。

Inputs: method (required), connection, args.

page_getDataC

获取当前页面的数据对象,可选择指定子数据路径。

Inputs: connection, path.

page_getElementB

通过选择器获取页面元素,相当于 page.$(selector)。返回每个元素的摘要信息(tagName、text、value、size、offset);设置 withWxml 为 true 可额外返回元素的完整 outerWxml。支持 [index=N] 语法选择第 N 个元素。

Inputs: selector (required), connection, innerSelector, withWxml.

page_getElementsA

通过选择器获取页面元素数组,相当于 page.$$(selector)。返回每个元素的摘要信息(tagName、text、value、size、offset);设置 withWxml 为 true 可额外返回每个元素的完整 outerWxml。支持 [index=N] 语法选择第 N 个元素。

Inputs: selector (required), connection, withWxml.

page_setDataC

使用 setData 更新当前页面的数据。

Inputs: data (required), connection.

page_waitElementC

等待指定选择器的元素出现在页面上。支持 [index=N] 语法选择第 N 个元素。增强版:增加了超时和重试间隔参数。

Inputs: selector (required), connection, timeout, retryInterval.

page_waitTimeoutC

等待指定的毫秒数。

Inputs: milliseconds (required), connection.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 27 tools

    Disambiguation5/5

    Each tool targets a distinct action within its category (element, mp, page). Within each group, operations like getAttributes, getBoundingClientRect, getData are clearly different. No two tools overlap in purpose.

    Naming Consistency5/5

    All tools follow a consistent pattern: category_verbNoun (e.g., element_tap, mp_navigate, page_setData). Underscore separation and camelCase for the verb+noun are uniform across all 27 tools.

    Tool Count4/5

    With 27 tools, the count is on the higher side but well-justified by the broad scope (element manipulation, page control, and mini-program API calls). It's reasonably scoped for a comprehensive development assistant.

    Completeness4/5

    The tool set covers core operations: element querying/interaction, page data management, and mini-program API invocation. Minor gaps like gesture simulation or file operations exist, but the essential CRUD and lifecycle actions are present.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      C
      maintenance
      Enables automated testing of WeChat mini-programs via Model Context Protocol, providing tools for connecting to WeChat Developer Tools, querying and interacting with page elements, making assertions, navigating, and debugging.
      20
      32 npm
      78
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to automate WeChat mini-programs via launch or connect modes, providing a stable interaction tree for observation and operation.
      17 npm
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      Enables AI assistants to control WeChat mini-programs running in WeChat Developer Tools through MCP tools. Provides automation capabilities for launching, navigating, querying, and interacting with pages and elements.
      61
      26 npm
      1
      MIT
    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables AI agents to debug and control WeChat Mini Programs through WeChat DevTools, including direct automator operations and CLI-backed features like screenshots, logs, previews, and uploads.
      -