본문으로 건너뛰기
학습 센터로 돌아가기튜토리얼

실전: AI가 실제 디바이스를 제어하도록 MCP Skills 구축하기

하드웨어 MCP 스킬(도구 함수)을 만들어 AI Agent가 실제 디바이스를 제어하도록 합니다. TuyaOpen MCP Function Call 프레임워크로 AI 스마트 오븐을 처음부터 구축합니다.

중급30분MCP

오븐을 말해주는 상상 "Preheat to 200 도 and bake for 25 분" — 그리고 그냥... 그것을. 앱 없음, 버튼 없음, 메뉴 없음. AI 에이전트에 의해 이해 된 단지 자연 언어, 실제 하드웨어에서 실행.

이 가이드는exactly 어떻게 작동하나요?Smart 오븐 프로젝트는 TuyaOpen로 제작되었습니다. 끝에, 당신은 어떤 장치를 위한 당신의 자신의 기계설비 MCP 기술을 창조하는 방법을 알고 있을 것입니다.


당신이 빌드 할 것

AI 전원 스마트 채팅 에이전트가 할 수있는 오븐 :

이름 *Agent는 무엇입니까?
"고속 오븐"oven.start 호출 → 전원 DP 설정
* "200°C에 예열"*oven.set_temperature(200)를 호출 → 온도를 쓰기 DP
* 25 분 "*oven.set_timer(1500)를 호출 → 카운트 다운 DP
* "나는 아직도?"*전화 oven.get_state() → 모든 DP를 읽고, JSON를 반환
* " 피자 요리법"*oven.run_recipe("pizza") → 세트 임시 직원 + 타이머 + 시작
"사진을 찍고 케이크가 완료되면 확인"device.camera_shot()를 호출 → JPEG를 캡처 AI를 볼 수 있습니다

마술 접착제? MCP Function Call - AI Agent 도구로 하드웨어 작업을 회전하는 프로토콜은 발견 및 호출 할 수 있습니다.


어떻게 작동 : 건축

** 중요한 통찰력: ** 모든 하드웨어 기능 (설정 온도, 읽기 상태, 캡처 이미지)는 ** MCP 도구**로 등록됩니다. AI 에이전트는 이러한 도구를보고, 사용자 의도를 기반으로 호출하는 결정, 그리고 콜백은 실제 하드웨어를 구동.


Step 1: 클라우드 생성

어떤 펌웨어 코드를 작성하기 전에 Tuya 클라우드 플랫폼**에 ** 제품이 필요합니다. 제품은 장치의 데이터 모델 (DP), AI 에이전트 및 클라우드 기능을 정의합니다. 모든 다운스트림 - 펌웨어, MCP 도구, 앱 - 이것에 따라 다릅니다.

1a. ## ## 1a. ## ## 1a. ## ## 1a. ## ## 1a. ## ## 1a. ## ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. ## 1a. 제품 만들기

  1. Tuya Developer PlatformAI 제품 > 개발요금
  2. 선택 ** 사용자 정의** 스크래치에서 사용자 정의 제품을 만들기 (Preset 카테고리를 선택 중)
  3. 생성 마법사 완료 — 당신은 ** PID** (제품 ID)

:::가격 가장 빠른 방법 : TuyaOpen IDE의 /tuya-iot-platform vibe 코딩 기술을 사용합니다. 자연적인 언어에 있는 장치를 설명하고 Agent는 제품을 창조하고, DP를 정의하고, 당신을 위한 AI Agent를 구성합니다. :::

1b. 데이터 포인트 정의 (DP)

**Data Points (DPs)**는 하드웨어의 디지털 트윈입니다. 각 DP는 controllable 또는 readable 특징에 지도합니다. 기능 정의 탭에서, Add 이 사용자 정의 DP(IDs 101–199)를 만들려면:

DP ID를 입력이름 *제품정보제품정보이름 *
101switch뚱 베어힘 온/오프
102temp_set주요 특징50–250표적 온도 (°C)
103temp_current주요 특징0–300현재 온도 (°C)
104timer주요 특징0–3600카운트다운 타이머 (seconds)

:::기사 표준 DPs (ID < 100)는 Tuya에 의해 미리 정의됩니다. 사용자 정의 DP (ID 101-199)는 정의하는 것입니다. 오븐을 위해, 모든 4는 관례입니다. :::

1c. ###1c. ###1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. ##1c. AI Agent 및 MCP 기능 추가

** 기능 정의 ** 탭 → ** 제품 AI 기능 ** → ** Agent 추가 **:

1.Model ConfigurationSkills Configuration → select Plugin → add Device Control · Bound Only (이 디바이스 DP에 MCP 툴 호출 가능) 2. Prompt Development → 각 도구를 호출 할 때, AI가 알고있는 오븐의 기능을 설명하는 시스템 프롬프트를 작성

이것은 당신이 펌웨어에 등록 MCP 도구를 발견하고 invoke 할 수있는 Cloud-side Agent를 만듭니다.

# 1d. # # # # # 1d. # # # # # 1d. # # # # 1d. # # # # 1d. # # # # # 1d. # # # # # 1d. # # # # # 1d. # # # # # 1d. # # # # # # 1d. # # # # # # 1d. # # # # # 1d. # # # 1d. # # # 1d. # # # 1d. # # # # 1d. # 1d. # # 1d. # 1d. # # 1d. # 1d. 펌웨어를 위한 DP 헤더 생성

DP가 클라우드에 정의되면 C 헤더를 생성하면 펌웨어가 포함될 것입니다.

tuyaopen dp generate --target embedded

이 생성 tuya_dp_profile.h — 클라우드와 장치 간의 계약:

// tuya_dp_profile.h — auto-generated by `tuyaopen dp generate`
#define DPID_SWITCH 101
#define DPID_TEMP_SET 102
#define DPID_TEMP_CURRENT 103
#define DPID_TIMER 104

#define DPID_TEMP_SET_MIN 50
#define DPID_TEMP_SET_MAX 250
#define DPID_TIMER_MIN 0
#define DPID_TIMER_MAX 3600

:::가격 전체 제품 생성 흐름은 제품 및 Agent에 문서화됩니다. 오븐 데모의 경우 AI Agent는 /tuya-iot-platform IDE에서 /tuya-iot-platform 기술을 사용하여 제품 및 DP를 생성합니다. :::


단계 2: Mock 하드웨어 레이어 구현

MCP 도구를 배선하기 전에, 실제 하드웨어를 시뮬레이션하는 함수가 필요합니다. 이 도구 콜백을 깨끗하게 유지:

// app_oven.h
typedef struct {
bool switch_on;
int temp_set;
int temp_current;
int timer_remaining;
} oven_state_t;

OPERATE_RET app_oven_set_switch(bool on);
OPERATE_RET app_oven_set_temp(int temp_c);
OPERATE_RET app_oven_set_timer(int seconds);
OPERATE_RET app_oven_add_timer(int seconds);
oven_state_t app_oven_get_state(void);
// app_oven.c — each setter reports DPs to the cloud + updates the LCD
static oven_state_t g_oven_state = {
.switch_on = false,
.temp_set = 180,
.temp_current = 25,
.timer_remaining = 0
};

OPERATE_RET app_oven_set_temp(int temp_c) {
if (temp_c < DPID_TEMP_SET_MIN || temp_c > DPID_TEMP_SET_MAX)
return OPRT_INVALID_PARM;
g_oven_state.temp_set = temp_c;
__oven_report_dp(); // sync to cloud + LCD
return OPRT_OK;
}

단계 3: MCP 도구 등록 (핵심 단계)

AI 에이전트가 하드웨어에 "손"을 가져옵니다. 각 도구는 다음과 같습니다:

  • 이름 - AI가 보는 것 (사용 dot-notation: oven.set_temperature) -Description — LLM-친화적인 텍스트를 호출할 때/방법
  • Parameters - 범위를 가진 유형 입력 속성
  • Callback - AI가이 도구를 호출 할 때 실행되는 함수

등록 패턴

#include "ai_mcp_server.h"
#include "tal_event_info.h"

// Called once when MQTT connects (deferred registration)
static OPERATE_RET __oven_mcp_on_mqtt_connected(void *data) {
(void)data;

// Tool 1: Start the oven
TUYA_CALL_ERR_GOTO(AI_MCP_TOOL_ADD(
"oven.start",
"Turn on the oven. Use when the user wants to start cooking, "
"preheat, or begin baking.\nParameters: none\nReturns: bool",
__oven_start_cb, NULL
));

// Tool 2: Set temperature
TUYA_CALL_ERR_GOTO(AI_MCP_TOOL_ADD(
"oven.set_temperature",
"Set the oven target temperature in Celsius (50-250).\n"
"Parameters: temperature (int)\nReturns: int (applied temp)",
__oven_set_temp_cb, NULL,
MCP_PROP_INT_RANGE("temperature", "Target temperature in °C (50-250).",
DPID_TEMP_SET_MIN, DPID_TEMP_SET_MAX),
MCP_PROP_END
));

// Tool 3: Get full state
TUYA_CALL_ERR_GOTO(AI_MCP_TOOL_ADD(
"oven.get_state",
"Get the current oven state: power, target temp, current temp, "
"timer remaining.\nParameters: none\nReturns: JSON object",
__oven_get_state_cb, NULL
));

// ... more tools
return OPRT_OK;
}

OPERATE_RET app_oven_mcp_init(void) {
return tal_event_subscribe(
EVENT_MQTT_CONNECTED, "oven_mcp_tools",
__oven_mcp_on_mqtt_connected, SUBSCRIBE_TYPE_ONETIME);
}

콜백 패턴

각 콜백은 properties에서 AI-supplied 인수를 읽고 하드웨어 기능을 호출하고 결과를 반환합니다.

static OPERATE_RET __oven_set_temp_cb(const MCP_PROPERTY_LIST_T *properties,
MCP_RETURN_VALUE_T *ret_val,
void *user_data) {
// 1. Read the AI-supplied parameter
int temp = properties->properties[0]->value.int_val;

// 2. Call the hardware function
OPERATE_RET rt = app_oven_set_temp(temp);

// 3. Return the result to the AI
ai_mcp_return_value_set_int(ret_val,
(rt == OPRT_OK) ? temp : -1);
return OPRT_OK;
}

JSON 반환 (KEPTERM0X와 같은):

static OPERATE_RET __oven_get_state_cb(const MCP_PROPERTY_LIST_T *properties,
MCP_RETURN_VALUE_T *ret_val,
void *user_data) {
oven_state_t s = app_oven_get_state();
cJSON *json = cJSON_CreateObject();
cJSON_AddBoolToObject(json, "switch_on", s.switch_on);
cJSON_AddNumberToObject(json, "temp_set", s.temp_set);
cJSON_AddNumberToObject(json, "temp_current", s.temp_current);
cJSON_AddNumberToObject(json, "timer_remaining", s.timer_remaining);
ai_mcp_return_value_set_json(ret_val, json);
return OPRT_OK;
}

단계 4: 철사 그것은 시동 순서에

app_chat_bot.c에서 MCP initright를 호출합니다 ai_mcp_init():

#if defined(ENABLE_COMP_AI_MCP) && (ENABLE_COMP_AI_MCP == 1)
TUYA_CALL_ERR_RETURN(ai_mcp_init());
TUYA_CALL_ERR_RETURN(app_oven_mcp_init()); // ← your tools
#endif

MQTT가 연결할 때 자동으로 도구 등록. 그게 다.


단계 5: 빌드 및 테스트

cd source/embedded
tos.py build

도구는 에이전트 도구 목록에 나타납니다, 다음이 상호 작용을 시도:

당신은Agent 통화제품정보
"25 분 동안 200 및 베이브로 예열"oven.set_temperature(200)oven.set_timer(1500)oven.start()오븐 열, 타이머 카운트 다운
"닭고기"oven.run_recipe("roast")200°C, 40 분, 자동 시작
"나는 여전히에? 어떻게 뜨거운?oven.get_state(){switch_on: true, temp_set: 200, ...} 반환
"사진을 찍고 케이크가 완료되면 확인"device.camera_shot()AI는 JPEG를 받고 시각적으로 검사할 수 있습니다

완전한 공구 세트

다음은 스마트 오븐을위한 MCP 도구의 전체 세트입니다.

제품 정보이름 *기타 제품제품정보
oven.start한국어힘에
oven.stop한국어힘 떨어져
oven.set_temperaturetemperature (int, 50-250)뚱 베어설정 대상 온도
oven.set_timerseconds (int, 0–3600)뚱 베어설정 카운트 다운
oven.add_timeseconds (int)뚱 베어타이머에 시간을 추가
oven.get_stateJSON를모든 DP를 읽으십시오
oven.list_recipesJSON 배열사전 설정 프로그램
oven.run_reciperecipe (문자)JSON를요리법 + 시작
device.camera_shot이미지/jpeg사진 캡처

# 붙박이 조리법

뚱 베어사이트맵(주)제품 정보
bake180°C에30분케이크, 빵, 카사
roast200°C의40분고기와 야채
broil230°C의10분빠른 갈색
pizza220°C의15분높은 열 피자
grill250°C의8분숙박 약관
reheat120°C에5 분좌로
warm80°C에30분따뜻한 유지

AI 코딩 Prompts : 개발자를위한 팁

AI 코딩 조수 (Cursor, Claude Code, Copilot)를 사용하여 하드웨어 MCP 기술을 구축 할 때이 신속한 패턴은 개발 가속화됩니다.

Prompt 패턴 0 : 설명에서 전체 클라우드 제품을 생성

/tuya-iot-platform
Create a new AI product for a smart oven with these capabilities:
- Power on/off (bool)
- Temperature setting 50-250°C (value)
- Current temperature readback 0-300°C (value, read-only)
- Countdown timer 0-3600 seconds (value)

Add an AI Agent with device control MCP plugin.
Generate the DP definitions and the embedded DP header.

왜 작동: /tuya-iot-platform 기술은 클라우드 제품을 만들고, DP를 정의하고, AI Agent를 구성하고, 펌웨어 DP 헤더를 생성합니다. 이것은 아이디어에서 코드로가는 가장 빠른 방법입니다.

Prompt 패턴 1 : 장치 설명, 코드 없음

I have a smart oven with these features:
- Power on/off
- Temperature control (50-250°C)
- Timer (0-3600 seconds)
- Current temperature sensor
- Camera for visual inspection

Create MCP tool registrations for each feature.
Use the AI_MCP_TOOL_ADD macro pattern from the otto_robot example.

왜 작동: AI는 도구 이름, 설명 및 매개 변수에 직접 장치 설명을 표시합니다.

Prompt 패턴 2 : DP 매핑 지정

My oven DPs are:
- DP 101: switch (bool, rw)
- DP 102: temp_set (value, 50-250, rw)
- DP 103: temp_current (value, 0-300, ro)
- DP 104: timer (value, 0-3600, rw)

Generate the tuya_dp_profile.h header and the MCP tool callbacks
that read/write these DPs.

왜 작동: Explicit DP 정의는 모수 유형과 범위에 관하여 주변성을 삭제합니다.

# Prompt 패턴 3 : LLM-Friendly 설명 요청

For each MCP tool, write descriptions that help an LLM understand:
1. WHEN to use this tool (what user intent triggers it)
2. WHAT parameters it takes (with units and ranges)
3. WHAT it returns (type and meaning)

Example: "Set the oven target temperature in Celsius (50-250).
Use when the user says 'preheat', 'set temp', or 'bake at X degrees'."

왜 작동: 좋은 도구 설명은 AI에 #1 요소가 올바른 도구입니다.

# Prompt 패턴 4 : 오류 처리에 대한 질문

Add input validation to each MCP tool callback:
- Clamp temperature to the DP range (50-250)
- Return -1 on invalid parameters
- For run_recipe, return {ok: false, available: [...]} on unknown recipe names

왜 작동: AI는 구조화된 오류 응답을 얻을 때 각자 정확한 할 수 있습니다.

# Prompt 패턴 5 : 한 번에 전체 스택 생성

/tuyaopen-dev-loop
Create a complete Smart Oven project:
1. Cloud product with DPs (switch, temp_set, temp_current, timer)
2. Embedded firmware with mock hardware (app_oven.c)
3. MCP tools for all oven features (app_oven_mcp.c)
4. LVGL UI showing oven state on the T5-AI board display
5. Wire everything in app_chat_bot.c

왜 작동: /tuyaopen-dev-loop 기술은 전체 클라우드 장치 워크플로우를 올렸습니다.


키 테이크아웃

  1. ** 클라우드 제품으로 시작 ** - 제품을 만들고, DP를 정의하고, 펌웨어를 터치하기 전에 클라우드 플랫폼에서 AI Agent를 추가합니다. 제품은 기초입니다.
  2. **DP는 계약 ** - 클라우드에 정의, 헤더를 생성, 다른 모든은 다음과 같습니다.
  3. ** 도구 설명 문제 ** - LLMs에 대한 쓰기 : 사용할 때, 어떤 params, 어떤 반환.
  4. ** MQTT 연결에 등록 ** - tal_event_subscribe(EVENT_MQTT_CONNECTED, ..., SUBSCRIBE_TYPE_ONETIME)를 사용하여 클라우드 링크가 준비 될 때 도구 등록.
  5. ** MCP ** - 당신의 app_oven.c는 기계설비를 취급합니다; app_oven_mcp.c는 공구 등록을 취급합니다. 깨끗한 분리.
  6. ** 구조화 된 데이터 ** - ok: false + 사용 가능한 옵션과 JSON 응답은 AI 자동 수정을하자.

다음 단계

  • 제품 및 Agent - 클라우드 제품, DP, AI Agent를 만들기 위한 전체 가이드
  • [사용자 정의 장치 MCP (Hardware Skills 가이드)] (/docs/tclaw/custom-device-mcp) - API 도구 개발을위한 전체 API 참조
  • [Hardware Peripheral Skills] (/docs/tclaw/hardware-skill) - 내장 GPIO, ADC, I2C, UART, PWM 도구
  • MCP Server API - MCP 서버 문서 완료
  • [Designing Device MCP Tools] (/docs/cloud/device-ai/concepts/designing-device-mcp-tools) - 도구 디자인을위한 모범 사례