Skip to main content
Glama
y0urday

dsh-arcgis-pro-bridge

by y0urday

dsh-arcgis-pro-bridge

Позволяет моделям в DeepSeek Harness (DSH) напрямую вызывать локальный ArcGIS Pro: читать проекты, слои и структуру GDB, а также выполнять Buffer / Clip / пользовательский ArcPy.

Этот проект встраивает Python-сервис MCP из ArcGIS-Pro-Bridge-MCP-Server в плагин DSH bundle и запускает его через официальный @deepseek-ai/dsh-mcp-client из состава DSH по stdio. Имена инструментов, которые видит модель, выглядят так:

  • mcp__arcgis__ping

  • mcp__arcgis__health_check

  • mcp__arcgis__doctor

  • mcp__arcgis__detect_arcgis_environment

  • mcp__arcgis__debug_runtime_context

  • mcp__arcgis__list_gis_layers

  • mcp__arcgis__inspect_project_context

  • mcp__arcgis__inspect_gdb

  • mcp__arcgis__buffer_features

  • mcp__arcgis__clip_features

  • mcp__arcgis__execute_arcpy_code

  • mcp__arcgis__build_gis_resource_uri

  • mcp__arcgis__generate_sync_plan

Архитектура

DSH (Node.js)
  └─ 本插件 bundle(cordis.patch.yml,插入两行)
       ├─ dsh-arcgis-pro-bridge:提供 arcgisProBridge 服务(启动配方)
       └─ @deepseek-ai/dsh-mcp-client(DSH 官方内置桥接,注入该服务)
            └─ stdio: uv run --project <包内 server/> arcgis_mcp_server.py
                 └─ ArcPy 逻辑通过 ArcGIS Pro 自带 Python 子进程执行

Ключевые моменты:

  • Работает только на локальной машине, сетевые порты не открываются.

  • ArcPy всегда выполняется в собственном Python ArcGIS Pro и не загрязняет окружение Node в DSH.

  • Официальный MCP-мост DSH в настоящее время поддерживает только Tools; arcgis:// Resources из вышестоящего сервера не регистрируются. Для операций чтения используйте одноимённый Tool (например, inspect_gdb).

  • execute_arcpy_code означает выполнение кода на этой машине. Включайте его только на доверенных машинах и делайте резервную копию данных перед операциями записи.

Related MCP server: ArcGIS Pro Bridge MCP Server

Требования к окружению

  • Windows (ArcGIS Pro поддерживает только Windows)

  • ArcGIS Pro установлен и запускается без проблем

  • DeepSeek Harness (предварительная версия для разработчиков; плагин проверен с 0.1.0-rc.6; Node.js >= 22.19)

  • Рекомендуется установить uv; если uv нет, можно использовать Python 3.11+ с установленным пакетом mcp

Установка (рекомендуется: напрямую с GitHub)

Этот проект представляет собой чистый ESM JavaScript + встроенный (vendored) Python, без шагов сборки, поэтому прямая установка с GitHub не требует прав на сборку. Рекомендуется зафиксировать конкретный коммит:

dsh plugin --profile web add github:y0urday/dsh-arcgis-pro-bridge#<commit-sha>

Проверьте, что patch попал в конфигурацию:

dsh --profile web --dump-config

В выводе должна появиться строка arcgis-pro-bridge, а name должен разрешаться в этот пакет. Затем полностью перезапустите dsh web.

Альтернатива: установка после публикации в npm

В пакете уже есть белый список files, его можно сразу публиковать:

npm publish
dsh plugin --profile web add dsh-arcgis-pro-bridge@0.1.0

Почему рекомендуется установка с GitHub + без скриптов сборки

Плагины DSH распространяются тремя способами: локальный каталог, npm-пакет и прямая установка github:. Если использовать TypeScript + сборку через prepare, прямая установка с GitHub потребует от пользователя настроить allowBuilds в своём профиле, что равносильно разрешению выполнять ваш код во время установки, — порог входа выше. Этот репозиторий намеренно остаётся на чистом JavaScript, поэтому все три способа работают напрямую, а установка с GitHub даёт лучший опыт; в будущем для публикации в npm менять структуру не придётся.

Публикация на GitHub

cd dsh-arcgis-pro-bridge
git remote add origin git@github.com:y0urday/dsh-arcgis-pro-bridge.git
git push -u origin main

Рекомендуется добавить репозиторию тему dsh-plugin, чтобы его было легче найти в экосистеме. После публикации замените команду установки выше на своё owner и commit:

dsh plugin --profile web add github:y0urday/dsh-arcgis-pro-bridge#<commit-sha>

Если нужно также опубликовать в npm, белый список files уже готов, достаточно выполнить npm publish; способы установки через npm и GitHub могут сосуществовать.

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

Конфигурация по умолчанию уже записана в cordis.patch.yml, обычно менять ничего не нужно. Все поля имеют значения по умолчанию в схеме Config в index.js:

Поле

По умолчанию

Описание

serverName

arcgis

Префикс инструментов на стороне модели mcp__<serverName>__*

launcher

uv

uv: запуск через pyproject + lock из пакета; python: запуск скрипта напрямую через pythonExecutable (в этом интерпретаторе должен быть установлен mcp)

pythonExecutable

python

Используется только при launcher: python; это обычный Python для запуска MCP-сервиса, ArcPy по-прежнему обнаруживается сервисом автоматически

extraArgs

[]

Дополнительные аргументы для процесса Python-сервиса

env

{}

Дополнительные переменные окружения, например ARCGIS_PRO_PYTHON / ARCGIS_PRO_INSTALL_DIR

toolCallTimeoutMs

300000

Таймаут одного вызова инструмента ArcGIS (мс)

failOnStartupError

false

Должна ли активация плагина завершаться ошибкой при первом сбое подключения

reconnect.*

см. ниже

Стратегия повторного подключения с экспоненциальной задержкой после разрыва дочернего процесса

Значения по умолчанию reconnect: enabled: true, initialDelayMs: 500, maxDelayMs: 30000, maxAttempts: 10.

Пример переопределения пользователем

В $DSH_HOME/profiles/web/cordis.patch.yml (или с помощью --patch при запуске) переопределите конфигурацию по id:

- id: arcgis-pro-bridge
  config:
    serverName: arcgis
    launcher: python
    pythonExecutable: python
    failOnStartupError: true
    env:
      ARCGIS_PRO_PYTHON: C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe

Примечание: переопределение через patch заменяет блок config целиком, а не выполняет глубокое слияние; неуказанные поля возвращаются к значениям по умолчанию из схемы.

Порядок первого тестирования

  1. Попросите модель вызвать mcp__arcgis__ping, чтобы убедиться, что она действительно вошла в цепочку инструментов.

  2. Вызовите mcp__arcgis__health_check, затем mcp__arcgis__doctor, чтобы убедиться, что ArcGIS Pro Python обнаруживается и ArcPy можно импортировать.

  3. Прочитайте текущий проект: mcp__arcgis__list_gis_layers (или передайте путь .aprx).

  4. Прочитайте GDB: mcp__arcgis__inspect_gdb.

  5. И только в конце пробуйте mcp__arcgis__buffer_features / clip_features / execute_arcpy_code; перед записью делайте резервную копию.

Можно скопировать этот промпт модели:

Не используйте shell, не пишите тестовых скриптов. Напрямую вызовите доступный mcp__arcgis__ping, затем mcp__arcgis__health_check и полностью сообщите мне результаты обоих вызовов.

Устранение неполадок

  • Инструменты не появляются: сначала выполните dsh --profile web --dump-config, убедитесь, что строка arcgis-pro-bridge присутствует и нет ошибок загрузки; убедитесь, что dsh web перезапущен.

  • uv не найден: where uv (CMD) / Get-Command uv (PowerShell) — проверьте, что он в PATH; иначе переключитесь на launcher: python и установите pip install "mcp[cli]>=1.9.4".

  • ArcGIS Pro не обнаруживается: вызовите detect_arcgis_environment; или укажите явно через env.ARCGIS_PRO_PYTHON / ARCGIS_PRO_INSTALL_DIR.

  • Не удаётся прочитать текущий проект: ArcGISProject("CURRENT") зависит от контекста запуска ArcGIS Pro; при сбое передайте инструменту путь .aprx напрямую.

  • Ошибка блокировки ArcPy: закройте редактируемые слои/сеансы или завершите внешние программы, занимающие данные, и повторите попытку.

  • Журналы: dsh выводит журналы подключения и переподключения arcgis-pro-bridge и mcp-client(arcgis); при сбое подключения и failOnStartupError: false mcp-client запускается, но временно не регистрирует инструменты и повторяет попытки по стратегии reconnect.

Локальная проверка

npm run check          # node --check index.js
npm test               # vendored 文件清单一致性测试
uv run --project server server/arcgis_mcp_server.py   # 直接启动服务,应进入等待状态

Синхронизация с вышестоящим репозиторием

В server/ находится встроенная (vendored) копия кода вышестоящего репозитория под лицензией MIT; источник и номер коммита указаны в NOTICE. При обновлении:

npm run sync-upstream

Скрипт заново клонирует последний код вышестоящего репозитория, перезаписывает server/*.py, pyproject.toml, uv.lock и автоматически обновляет номер коммита в NOTICE. После синхронизации сначала запустите указанную выше проверку, затем выполните смоук-тест ping → health_check → doctor на Windows + ArcGIS Pro.

Лицензия

Этот репозиторий распространяется под лицензией MIT. Включённый (vendored) код Python-сервиса взят из Sangwxx/ArcGIS-Pro-Bridge-MCP-Server (MIT); полная лицензия доступна в server/UPSTREAM_LICENSE, пояснения — в NOTICE.

Related MCP Connectors

Related MCP Servers