Skip to main content
Glama
gil906

SmartThings MCP Server

by gil906

SmartThings MCP Server

MCP-сервер для Samsung SmartThings, который предоставляет доступ к устройствам, сценам, уведомлениям и полный CRUD для правил (Rules) и рутин (Routines) через streamable-HTTP.

Работает на FastMCP. OAuth2 с автоматическим обновлением токена — никаких истекающих Personal Access Tokens.

Зачем

Большинство MCP-серверов для SmartThings умеют только читать устройства и запускать сцены. Этот же сервер умеет создавать, обновлять, удалять и выполнять Rules — движок автоматизации, который лежит в основе Routines. А это именно то, что нужно, чтобы LLM могла создавать домашние автоматизации.

Related MCP server: SmartThingsMCP

⚠️ Rules vs Routines — прочитайте перед тем, как заводить баг

Объект

Видим через API?

Управление

Rules, созданные этим сервером (create_routine)

✅ полный CRUD + выполнение

Routines, созданные в мобильном приложении SmartThings

❌ никогда

❌ только в приложении

Возврат [] из list_rulesожидаемое поведение, если вы создавали Routines только в мобильном приложении. Это не сбой аутентификации. Это задокументированное ограничение платформы Samsung, которое не может обойти ни один клиент:

"Автоматические routines ("rules"), созданные в приложении SmartThings, — это надмножество того, что можно создать через Rules API. Routines, созданные в приложении, не появятся при отправке GET-запроса на https://api.smartthings.com/v1/rules/." — документация SmartThings

Инструменты

Группа

Инструменты

Устройства

list_devices, get_device_status, control_device

Сцены

list_scenes, execute_scene

Локации

list_locations

Уведомления

send_notification, create_alert_switch

Rules

list_rules, get_rule, create_routine, update_routine, delete_routine, execute_routine

Сцены по своей природе доступны только для чтения. SmartThings не предоставляет никакого scope на запись сцен (w:scenes отклоняется сразу), поэтому сцены можно перечислять и запускать, но нельзя создавать через API.

Просмотр и управление устройствами

Создание автоматизации

Имена устройств, их API ID и правила в этих примерах вымышлены.

Установка

  1. Создайте OAuth SmartApp со следующими scope:

    r:devices:* x:devices:* r:scenes:* x:scenes:* r:locations:*
    r:rules:* w:rules:* x:rules:*
  2. Настройте учётные данные:

    cp .env.example .env
    # fill in SMARTTHINGS_CLIENT_ID and SMARTTHINGS_CLIENT_SECRET
  3. Авторизуйтесь один раз, чтобы создать refresh-токен:

    python oauth_setup.py

    При этом будет запущен локальный loopback-слушатель (по умолчанию порт 9444) и записан файл data/tokens.json. Если вашему SmartThings-приложению вместо этого нужен публичный HTTPS-callback, используйте oauth_capture.py с установленной переменной OAUTH_REDIRECT_URI.

  4. Запустите сервер:

    docker compose up -d --build

    Сервер слушает на http://localhost:8085/mcp.

Конфигурация клиента

{
  "mcpServers": {
    "smartthings": {
      "type": "http",
      "url": "http://localhost:8085/mcp"
    }
  }
}

Сервер работает по stateless streamable-HTTP: отправляется POST JSON-RPC с заголовком Accept: application/json, text/event-stream. Заголовок mcp-session-id не нужен; ответы возвращаются через SSE (event: message\ndata: {...}).

Написание правил

rule_json — это JSON-строка, содержащая только массив actions из Rules API — а name и locationId добавляет сам инструмент. Схема: https://developer.smartthings.com/docs/rules/rules-api

Безопасное правило, которое можно использовать для проверки execute_routine:

[{"if": {"equals": {"left": {"integer": 1}, "right": {"integer": 1}},
  "then": [{"sleep": {"duration": {"value": {"integer": 1}, "unit": "Second"}}}]}}]

Настоящее правило — когда один выключатель включается, выключить другой:

[{"if": {"equals": {
    "left": {"device": {"devices": ["<deviceId>"], "component": "main",
             "capability": "switch", "attribute": "switch"}},
    "right": {"string": "on"}},
  "then": [{"command": {"devices": ["<otherDeviceId>"],
            "commands": [{"component": "main", "capability": "switch", "command": "off"}]}}]}}]

⚠️ execute_routine выполняет действия правила по-настоящему и немедленно. Он ничего не моделирует. Если какие-то из ваших устройств — это силовые выключатели для важной техники, проверяйте на правиле sleep выше, а не на действии command.

Заметки об аутентификации

Только OAuth2. В data/tokens.json должны быть все три ключа: access_token, refresh_token и реальное значение expires_at в будущем. Фоновый keep-alive цикл (KEEPALIVE_HOURS, по умолчанию 12 часов) заранее обновляет токен, чтобы refresh-токен никогда не становился недействительным из-за бездействия.

Personal Access Tokens намеренно не поддерживаются. С декабря 2024 года SmartThings PAT истекают через 24 часа после создания, что делает их бесполезными для долго работающего сервера. Никакого резервного PAT или настройки PAT нет — каждый запрос, включая все вызовы Rules, использует автоматически обновляемый OAuth-токен.

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

Ошибка 401 при вызовах rules. По порядку:

  1. Проверьте, что в data/tokens.json есть все три ключа и expires_at указывает на будущее.

  2. Убедитесь, что locationId передаётся — SmartThings возвращает “голый” HTML-ответ с 401 (а не 400), когда locationId отсутствует в запросах /rules, из-за чего простая нехватка параметра выглядит как сбой аутентификации.

  3. Перезапустите контейнер, чтобы принудительно обновить токен.

  4. Крайний случай: запустите oauth_setup.py заново.

Особенности эндпоинтов (уже учтены — не нужно «переделывать» их обратно):

  • создать: POST /rules?locationId=...

  • выполнить: POST /rules/execute/{ruleId}?locationId=... (не /rules/{id}/execute)

Контейнер показывает unhealthy. MCP-эндпоинт отвечает только на POST, поэтому HTTP-проверка на / возвращает 404. Используйте TCP-проверку из docker-compose.yml.

Изменения env не применяются. Запустите docker compose up -d --force-recreate — обычный docker restart не станет перечитать .env.

Лицензия

MIT

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables comprehensive interaction with SmartThings devices, locations, scenes, and automation rules through the SmartThings API. It features intelligent two-level caching and supports multiple transport options including HTTP, SSE, and STDIO.
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables control of ECHONETLite home automation devices like air conditioners and sensors via MCP, supporting HVAC management and real-time monitoring.
    14
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.

  • Create and manage CodeQR short links, QR codes, and analytics from any MCP client.

  • An authenticated remote MCP server for user-owned devices and one-shot capability invocation.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gil906/samrtthings-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server