Skip to content
푸땡로그
Go back

Flowbite MCP UI: AI 대화창에 인터랙티브 React UI를 띄우는 오픈소스 스타터 키트

AI에게 “이번 주 매출 보여줘”라고 물으면 어떤 답변을 원하시나요? 숫자 나열이나 Markdown 표보다는, 기간 선택 버튼과 꺾은선 그래프, 지점별 테이블이 대화창 안에 직접 나타난다면 훨씬 유용할 겁니다.

먼저 결론부터 말하면, Flowbite MCP UI는 MCP 서버가 텍스트 대신 실제 React UI를 AI 클라이언트에 렌더링하도록 만드는 오픈소스 스타터 키트입니다. 아직 초기 단계의 예제 프로젝트이지만, AI 대화형 앱의 구조를 검증하는 PoC 기반으로 매우 유용합니다.

기준 작성 시점 2026-07-29 · 공식 GitHub 저장소 기준. 초기 오픈소스 프로젝트로 API와 구조가 변경될 수 있습니다.

이 글에서 다루는 내용:

공식 데모 영상(GitHub)라이브 데모에서 AI 대화창 안에서 위젯이 렌더링되는 모습을 직접 확인할 수 있습니다.


배경: 텍스트 MCP의 한계

MCP(Model Context Protocol)는 AI 클라이언트와 서버 간 통신을 표준화하는 프로토콜입니다. 일반적인 MCP 서버는 AI에게 함수나 데이터를 제공하고, 결과는 텍스트나 Markdown으로 돌아옵니다.

문제는 Markdown만으로는 표현하기 어려운 인터랙션이 많다는 점입니다. 체크박스, 날짜 선택, 차트, 상품 카드처럼 사용자가 직접 선택하고 탐색해야 하는 UI는 텍스트 응답으로 대체하기가 어렵습니다.

Generative UI 관점에서 비슷한 시도들이 있었습니다. OpenGenerativeUI는 Claude 스타일의 인터랙티브 시각화를 직접 구현하는 방법을 보여줬고, Vercel의 json-render는 JSON 스키마 기반으로 UI를 안전하게 생성하는 방식을 제안했습니다. Flowbite MCP UI는 그보다 한 단계 더 나아가, MCP 표준 위에서 직접 실행 가능한 React 앱을 AI 대화창 안에 띄우는 구조를 제시합니다.


Flowbite MCP vs Flowbite MCP UI

이름이 비슷해서 혼동하기 쉽지만 두 프로젝트는 목적이 다릅니다.

구분Flowbite MCPFlowbite MCP UI
주요 목적AI 코딩 도구에 Flowbite 문서·컴포넌트 정보 제공AI 대화창 안에 인터랙티브 앱 UI 표시
주요 사용자Cursor, Claude Code 등 코딩 에이전트MCP 앱 개발자
결과물Tailwind·Flowbite 코드 생성 지원차트, 폼, 표, 카드 등 실행 가능한 UI
대표 기능Figma→코드, 테마 생성, 컴포넌트 컨텍스트React 위젯, 사용자 입력, 시각화
사용 위치IDE와 코딩 에이전트ChatGPT·Claude·Gemini 대화 UI

Flowbite MCP Server는 60개 이상의 Flowbite 컴포넌트를 코딩 에이전트에 제공하고, Figma 디자인을 코드로 변환하거나 브랜드 테마를 생성하는 도구입니다. 반면 MCP UI는 직접적인 사용자용 AI 앱 화면을 만드는 프로젝트입니다.


동작 구조

MCP UI 앱의 전체 흐름은 다음과 같습니다.

sequenceDiagram
    participant User as 사용자
    participant AI as ChatGPT/Claude/Gemini
    participant MCP as Express MCP Server<br/>/mcp endpoint
    participant Widget as React Widget<br/>(Vite + Flowbite)

    User->>AI: "이번 주 매출 보여줘"
    AI->>MCP: MCP 도구 호출
    MCP->>MCP: 데이터 처리 & UI 리소스 결정
    MCP->>AI: structuredContent + 위젯 URL 반환
    AI->>Widget: 위젯 렌더링 요청
    Widget->>User: 대화창 안에 React UI 표시

스타터 프로젝트는 한 프로세스에서 세 가지를 함께 제공합니다.

  1. /mcp 경로의 MCP 백엔드 (Express + Skybridge)
  2. Vite 기반 React UI
  3. Flowbite로 만들어진 위젯 예제 7종

로컬에서는 기본 3000번 포트로 실행되고, ngrok 같은 HTTP 터널로 외부 AI 클라이언트에 노출한 뒤 /mcp 주소를 커넥터로 등록합니다.


제공 위젯 목록

현재 공개된 예제에는 다음 UI가 포함되어 있습니다.

컴포넌트활용 예
Basic text설명, 결과 요약
Radio group단일 조건 선택
Checkbox group복수 필터 선택
Line chart추세와 시계열 데이터
E-commerce products상품 카드, 비교 결과
QR code결제·로그인·링크 공유
Table data검색 결과, 통계, 목록

완성된 SaaS라기보다는 AI 대화형 앱을 만드는 개발용 템플릿과 UI 예제 모음에 가깝습니다.


시작하기

기본 실행

# 저장소 클론
git clone https://github.com/themesberg/mcp-ui-starter.git
cd mcp-ui-starter

# 의존성 설치
npm install

# 개발 서버 실행
npm run dev --use-forwarded-host
# ngrok으로 외부 접근 허용
ngrok http 3000

생성된 주소에 /mcp를 붙여 AI 클라이언트에 등록합니다.

https://xxxx.ngrok-free.app/mcp

AI 클라이언트별 연결

Claude Code:

claude mcp add --transport http "https://xxxx.ngrok-free.app/mcp"

Cursor (mcp.json):

{
  "mcpServers": {
    "my-mcp-app": {
      "type": "http",
      "url": "https://xxxx.ngrok-free.app/mcp"
    }
  }
}

Codex:

codex mcp add --url "https://xxxx.ngrok-free.app/mcp"

ChatGPT, Claude Web, Gemini CLI, VS Code, Mistral AI 연결 예제도 공식 문서에 제공됩니다.


위젯 직접 만들기

새 위젯은 서버 컴포넌트와 웹 컴포넌트 두 파일로 구성됩니다.

서버 컴포넌트

// server/src/widgets/basic-text-server.tsx
// from: https://flowbite.com/docs/getting-started/mcp-ui/
import { z } from "zod";

export const basicTextWidget = {
  name: "basic-text" as const,
  metadata: {
    description: "Basic Text",
  },
  toolConfig: {
    description: "Show a text message based on a question.",
    inputSchema: {
      question: z.string().describe("The user's question."),
    },
  },
  handler: async () => {
    try {
      const answer = "Hello, world!";
      return {
        structuredContent: { answer },
        content: [],
        isError: false,
      };
    } catch (error) {
      return {
        content: [{ type: "text" as const, text: `Error: ${error}` }],
        isError: true,
      };
    }
  },
};

웹 컴포넌트

// web/src/widgets/basic-text.tsx
// from: https://flowbite.com/docs/getting-started/mcp-ui/
import "@/index.css";
import { mountWidget } from "skybridge/web";
import { useToolInfo } from "../helpers";

function BasicTextWidget() {
  const { input, output } = useToolInfo<"basic-text">();

  if (!output) {
    return <div>Loading...</div>;
  }

  return (
    <div>
      <p>Question: {input.question}</p>
      <p>Answer: {output.answer}</p>
    </div>
  );
}

export default BasicTextWidget;
mountWidget();

서버에 위젯 등록

// server.ts
import { McpServer } from "skybridge/server";
import { basicTextWidget } from "./widgets/basic-text-server.js";

const server = new McpServer(
  { name: "mcp-ui-components", version: "0.0.1" },
  { capabilities: {} }
).registerWidget(
  basicTextWidget.name,
  basicTextWidget.metadata,
  basicTextWidget.toolConfig,
  basicTextWidget.handler
);

실전 적용 사례

검색 서비스 인터랙션

AI 답변 아래에 다음을 직접 표시할 수 있습니다.

단순 자연어 답변보다 사용자가 정보를 탐색하고 선택하기 훨씬 쉬워집니다.

사내 운영 도구

자연어 명령과 기존 관리 도구 UI의 중간 형태를 만들 때 특히 유용합니다.

커머스·예약

AI가 추천만 하는 것이 아니라 실제 선택 흐름까지 이어갈 수 있습니다.


주의사항

클라이언트별 UI 렌더링 보장 없음 MCP 자체는 도구와 리소스를 연결하는 프로토콜입니다. 실제 위젯 렌더링 방식은 각 호스트의 SDK와 지원 기능에 따라 달라집니다. 모든 MCP 클라이언트가 동일한 UI 렌더링을 보장하지 않습니다.

실제 서비스에 적용하기 전에 반드시 검증해야 할 항목:

PoC 기반으로 활용 권장 신규 서비스를 처음부터 이 프로젝트에 강하게 종속시키기보다, MCP 앱 구조와 호스트 연동 방식을 검증하는 PoC 기반으로 활용하는 것이 적합합니다.

마무리

Flowbite MCP UI의 핵심 가치는 “AI에게 도구만 제공하는 MCP”에서 “AI 내부에서 직접 실행되는 미니 웹앱”으로 확장하는 참고 구현이라는 점입니다.

프로젝트의 실체를 정확히 표현하면 다음 조합입니다.

MCP 서버 스타터
+ React 위젯 실행 구조 (Skybridge)
+ Flowbite 디자인 컴포넌트
+ 여러 AI 클라이언트 연결 예제

검색 결과나 사내 AI 에이전트에 차트·필터·선택형 UI를 붙이려는 경우, 상당히 좋은 출발점입니다. 아직 위젯 수가 7종으로 제한적이므로 실제 서비스에서는 디자인 시스템, 상태 관리, 인증, 오류 처리, 접근성을 별도로 강화해야 합니다.

관련 포스트:


참고 자료


Share this post on:

Previous Post
SDUI, json-render, A2UI: AI가 UI를 설계하는 방식이 바뀌는 중