로봇이나 AI 에이전트에 새로운 기능을 추가하려면 개발자가 매번 소스 코드를 수정하고 시스템 전체를 재배포해야 하는 운영상의 불편함이 존재했다. Reachy Mini는 이러한 제약을 해결하기 위해 MCP(Model Context Protocol)를 도입하여 Gradio Space 기반의 원격 도구를 프로필 설정만으로 추가할 수 있는 체계를 구축했다. 개발자는 이제 하드웨어 제어 코드를 직접 수정하지 않고도 외부 서버에 공개된 MCP 엔드포인트를 통해 최신 API 기능을 로봇의 역량으로 즉시 통합할 수 있다. 이는 로봇의 기능 확장 속도를 내부 개발 주기가 아닌 외부 API 생태계의 업데이트 속도에 동기화시킨 결과다.
MCP 기반 원격 도구의 설치 및 활성화 프로세스
개발자는 단 한 줄의 명령어를 통해 새로운 원격 도구를 시스템에 이식한다.
python main.py add <space_name>이 명령어를 실행하면 시스템은 허브에서 해당 Gradio Space의 유효성을 검증하고 MCP 엔드포인트를 탐색하여 사용 가능한 도구 목록을 자동으로 찾아낸다. 탐색이 완료된 도구의 ID는 활성 프로필의 `tools.txt` 파일에 즉시 추가되며, `REACHY_MINI_CUSTOM_PROFILE` 설정이 없는 경우 기본 프로필에 저장된다. 이번 업데이트의 검증을 위해 웹 검색(web search)과 날씨(weather) 기능을 수행하는 두 종류의 캐너리(Canary) 도구가 우선 적용됐다. 모델은 각 도구의 이름과 짧은 설명을 읽고 대화 맥락에 따라 적절한 도구를 스스로 선택해 호출하는 방식으로 작동한다.
tools.txt와 네임스페이스 기반의 도구 관리 구조
Reachy Mini의 도구 제어권은 프로필 폴더 내의 `instructions.txt`(프롬프트)와 `tools.txt`(활성화 도구 목록)라는 두 개의 파일이 결정한다. `tools.txt`는 게이트키퍼 역할을 수행하며, 이 파일에 ID가 명시되지 않은 도구는 모델이 인식하거나 호출할 수 없다. 원격 도구는 로컬 도구와의 이름 충돌을 방지하기 위해 더블 언더스코어(`__`)를 사용하는 네임스페이스 방식을 채택했다. 설치된 Space의 슬러그(slug)에서 하이픈, 점, 슬래시는 모두 언더스코어로 치환되어 로컬 별칭으로 저장되며, 이를 통해 여러 Space의 도구가 하나의 프로필 내에서 공존한다.
시스템 안정성을 위해 레지스트리 수준에서 `Tool.name` 값의 유일성을 검사한다. 서로 다른 소스에서 동일한 이름을 가진 도구가 발견되면 앱은 실행을 즉시 중단하는 페일 패스트(Fail-fast) 전략을 취한다. 시스템은 이름 중복을 피하기 위해 불필요한 Space 이름 접두사를 제거해 간결한 ID를 생성하지만, 이 과정에서 충돌이 예상될 경우 전체 네임스페이스 이름을 그대로 유지해 안전성을 확보한다. 설치된 모든 소스 정보는 `~/.reachy_mini/installed_spaces` 경로에 영구적으로 저장된다.
로컬 파이썬 도구와 원격 MCP 도구의 역할 분리
Reachy Mini는 도구의 성격을 하드웨어 제어용 로컬 도구와 정보 획득용 원격 도구로 완전히 분리했다. 로컬 도구는 머리 움직임(`move_head`)이나 감정 표현(`play_emotion`)처럼 하드웨어를 직접 제어하는 기능으로, 프로필 폴더나 `external_tools/` 경로에 파이썬 파일 형태로 구현되어 앱 내부에 배포된다. 하드웨어 제어는 물리적 충돌 위험과 지연 시간 민감도가 높기 때문에 내부망에서 즉각 처리하는 구조를 유지한다.
반면 원격 도구는 웹 검색이나 날씨 조회와 같이 하드웨어와 무관한 외부 데이터 획득 및 정보 처리를 전담한다. 이 도구들은 외부 Gradio Space에서 호스팅되며, 네트워크를 통해 효율적으로 작동하도록 상태를 저장하지 않는 stateless 방식으로 설계되었다. 개발자는 외부 API 연동을 위한 복잡한 인증 로직이나 라이브러리 의존성을 로봇 본체에 심지 않고도 클라우드 환경의 MCP 서버 기능을 호출할 수 있다. 이를 통해 도구의 업데이트 주기를 하드웨어 펌웨어 업데이트 주기와 완전히 분리했다.
신뢰 코어 유지와 프롬프트 기반의 오케스트레이션
Reachy Mini는 신뢰할 수 있는 핵심 코어(Trusted Core)를 최소 단위로 유지하고, 가변적인 외부 기능은 외곽에 배치하는 전략을 취했다. 개발자는 앱 자체를 수정하거나 재배포하는 위험을 감수하지 않고도 새로운 기능을 추가, 테스트, 교체할 수 있다. 이러한 구조는 소프트웨어의 전체 배포 주기와 개별 기능의 확장 주기를 분리하여 운영 효율을 극대화한다.
기능 확장 시 발생하는 응답 지연 문제는 프롬프트 지시어를 통해 최적화한다. 모델이 웹 검색과 날씨 조회를 순차적으로 호출해 지연 시간이 늘어나는 것을 방지하기 위해, 프롬프트를 통해 도구들의 병렬 호출을 유도한다. 다만 실행 순서가 엄격해야 하는 결정론적 오케스트레이션이 필요한 경우에는 해당 로직을 프롬프트가 아닌 코드로 직접 이동시켜 구현해야 한다. 이는 확률적인 프롬프트 제어와 확정적인 코드 제어의 경계를 명확히 구분한 설계다.
Embodied AI를 위한 모듈형 도구 생태계 확장 기준
하드웨어 제어 로직을 건드리지 않고 최신 API 기능을 빠르게 이식하는 방식은 로봇 운영의 실질적인 기준을 '코드 수정'에서 '도구 오케스트레이션'으로 전환시킨다. 외부 개발자가 자신의 도구를 공유하고 싶다면 표준 MCP 엔드포인트를 노출하는 공개 Gradio Space로 발행하고, 다른 사용자가 찾을 수 있도록 `reachy-mini-tool`과 `mcp` 태그를 부착해야 한다.
물리적 반응과 정보 제공의 결합은 `tools.txt`라는 하나의 통합 목록에서 제어된다. 로봇이 원격 도구로 웹 검색 결과를 출력하는 동시에 로컬 도구로 고개를 끄덕이는 동작을 수행함으로써, 물리적 하드웨어의 제약을 외부 API의 확장성으로 보완한다. 결과적으로 로봇의 기능 확장 속도는 개발자의 코딩 능력이 아니라 인터페이스의 개방성과 최적의 도구 조합을 구성하는 설계 능력에 의해 결정된다. 이는 펌웨어 엔지니어의 영역이 AI 에이전트 오케스트레이터의 영역으로 확장되는 구조적 변화를 의미한다.




