음성 비서에서 텍스트 비서로: MCP 개인 비서 재구축기

2025년 캡스톤으로 만든 음성 비서를, 2026년에 MCP 기반으로 다시 짰다. 음성은 뺐고, 판단과 실행을 나누는 구조는 그대로 가져갔다.

7/4/2026 · 6 min read


프로젝트 레포는 여기서 볼 수 있다.

"카카오톡 켜줘", "뉴스 페이지 열어줘" 같은 말 한마디로 PC를 대신 조작해주는 개인 비서. 2025년 캡스톤 4인 팀 프로젝트로 처음 만들었고, 2026년에 이 구조를 그대로 다시 짰다.

2025년 캡스톤 프로젝트로 시작

원래 버전은 PC에서 동작하는 시리와 빅스비와 비슷한 음성 비서였다. 마이크로 말하면 OpenAI의 Whisper로 STT를 처리하고, 명령 결과를 전달해서 MCP를 실행하는 "말로 시키면 PC가 알아서 움직인다"는 게 이 프로젝트의 재미였다.

이 프로젝트를 진행했을 당시에 구현적인 부분이나 디자인 및 MCP의 다양성 등 아쉬웠던 부분들이 많았고 이번에 개선을 진행했다.

2026년, 음성을 걷어내다

다시 열어보고 손을 대면서 제일 먼저 뺀 게 음성이었다.

음성을 뺀 이유는 단순히 내가 STT를 결합하고 테스트할 때 음성이...굳이 필요한가?란 생각이 들어서 일단은 음성에 관련된 부분은 제외한 상태이다.

나중에 생각이 바뀌면 다시 넣을 예정.

음성을 뺀 다음에 프로젝트 구조 자체를 다시 짰다.

에이전트 팀을 새로 짰고 디자인도 내가 요새 자주 쓰는 클로드와 비슷한 느낌을 가지게 새로 디자인했다.

그래서 아래와 같이 텍스트를 기반으로 한 깔끔한 디자인을 가지게 되었다.

그리고 다시 작성한 아키텍쳐는 아래와 같다.

클라이언트가 명령 입력창에서 문장을 보내면 Agent 백엔드의 API가 이를 받는다.

Planner 에이전트가 어떤 도구를 어떤 순서로 부를지 계획을 세우면, Executor 에이전트가 그 계획대로 MCP 서버의 도구를 하나씩 호출한다. 실행 결과는 SSE를 타고 다시 클라이언트로 흘러간다.

구조: 판단과 실행을 나눈다

이 프로젝트의 뼈대는 "무엇을 할지 정하는 부분"과 "실제로 실행하는 부분"을 분리한 것이다.

  • Agent 백엔드 (FastAPI + AutoGen + Gemini): 사용자 문장을 받아 어떤 도구를 어떤 순서로 호출할지 계획만 세운다.
  • MCP 서버 (Python, stdio): 계획을 받아 실제로 프로그램을 켜고, 브라우저를 열고, 유튜브를 재생하는 실행을 맡는다.

MCP 서버가 제공하는 도구는 이렇다.

  • launch_program — 설치된 프로그램 실행
  • open_url — 브라우저에서 URL 열기
  • play_youtube — 유튜브 검색·재생
  • control_media — 볼륨/미디어 제어
  • close_program — 실행 중인 프로그램 종료
  • open_folder — 주요 폴더 열기

클라이언트(Next.js)가 POST /command로 문장을 보내면, 백엔드는 진행 상황을 Server-Sent Events로 스트리밍해준다.

그래서 "계획 수립 중 → 도구 호출 중 → 완료"가 화면에 그대로 보인다.

판단(Agent 백엔드)과 실행(MCP 서버)을 나눠 둔 덕분에, MCP 서버는 이 프로젝트가 아닌 다른 LLM 클라이언트에서도 그대로 재사용할 수 있다.

2025년에 진행한 부분에선 없던 부분인 MCP를 등록하는 부분을 새로 추가해보았는데 UI를 이용해서 로컬 서버(command + args)나 원격 서버(url)를 등록하기만 하면 된다.

이 부분은 2025년에는 없던 부분인데 이번에 재구축하면서 새로 추가했다.

돌아보며

음성을 빼고 나니 오히려 이 프로젝트가 원래 하려던 일이 더 또렷해졌다. "말을 알아듣는다"는 화려함 뒤에 가려져 있던 진짜 핵심은 언제나 "의도를 계획으로, 계획을 실행으로 옮기는 파이프라인"이었다.

실행 방법

# .env.example을 참고해 agent-backend/.env, client/.env.local 작성
./run.ps1                       # 백엔드 + MCP 서버 기동
 
npm --prefix client install
npm --prefix client run dev     # http://localhost:3000

Windows 전용이라 프로그램 실행·미디어 제어에 Windows 네이티브 API를 쓴다. Gemini API 키가 필요하다.

개선해야할 사항

지금은 단순하게 이전에 입력한 명령들이 보이지 않는데 이걸 좀 개선해서 진짜 클로드나 GPT처럼 대화형으로 이전 대화를 기억하도록 만들 예정이다

관련 글