메인 콘텐츠로 건너뛰기
성공하면 get-screen-image를 제외한 모든 도구가 결과를 두 번 반환합니다. 하나는 structuredContent(도구의 게시된 출력 스키마로 검증됨)이고, 다른 하나는 구조화된 콘텐츠를 읽지 않는 클라이언트를 위해 같은 객체를 텍스트 블록 { type: "text", text: "<json-string>" }으로 직렬화한 것입니다. get-screen-image는 MCP 이미지 블록 { type: "image", data: "<base64>", mimeType: "image/png" }만 반환합니다. 실패하면 isError: true가 설정되고, 텍스트 블록에 짧은 오류 메시지가 담깁니다. 직접 조치할 수 있는 오류(삭제 시 이름 불일치, 잘못된 Figma 링크, 잘못된 디자인 가이드라인, 첨부 파일 문제, 생성 시간 초과)는 해결 방법을 설명합니다. 그 밖의 실패는 Failed to list files처럼 일반적인 메시지를 반환합니다.
가격: 세 가지 AI 디자인 도구(ai-design-screens, ai-generate-screen-variant, ai-edit-screen-variant)는 Flowstep 앱과 같은 메시지 사용량 한도를 사용합니다. 다른 모든 도구는 무료입니다. 사용 한도를 참고하세요.
각 도구는 클라이언트가 동작을 파악할 수 있도록 MCP 주석도 게시합니다. delete-file, delete-screen, delete-design-guidelines, replace-screen-jsx, ai-design-screens, ai-edit-screen-variant는 기존 콘텐츠를 제거하거나 덮어쓰므로 파괴적(destructive)으로 표시됩니다.

파일 도구

list-files

Flowstep 파일의 메타데이터를 나열합니다. 관련 파일이 이미 있는지 확인하려면 먼저 이 도구를 호출하세요. 화면 콘텐츠는 반환되지 않습니다. 콘텐츠가 필요하면 get-screen-image 또는 get-screen-jsx를 사용하세요. 입력 출력 — { files }.
  • owner — 파일을 만들었다면 true입니다.
  • shared_with_me — 조직을 거치지 않고 직접 공유된 파일이면 true입니다.
  • url — Flowstep 편집기에서 파일을 엽니다.

get-file

단일 파일의 메타데이터를 가져옵니다. 파일 콘텐츠는 의도적으로 제외됩니다. 화면을 확인하려면 get-screen-image 또는 get-screen-jsx를 사용하고, 첨부된 가이드라인을 가져오려면 get-design-guidelines를 사용하세요. 파일에 대기 중인 초대가 있다면 get-file을 호출하면 수락됩니다. 입력 출력 — { file, user_access_level }.
  • access_level — private, read, write 중 하나입니다.
  • visibility — 일반 액세스 설정으로, private(제한됨), member(멤버 전용), public(공개) 중 하나입니다.
  • user_access_level — 파일에 대한 사용자의 액세스 권한으로, read 또는 write입니다.

create-file

화면이 없는 빈 Flowstep 파일을 만듭니다. 파일을 만들면서 한 단계에서 화면도 생성하려면 fileId 없이 ai-design-screens를 호출하세요. 코드 우선 워크플로에는 create-file을 사용한 뒤 add-screen-jsx를 호출하세요. 입력 출력 — { file, user_access_level }이며, get-file과 같은 형태입니다. owner는 항상 true이고 user_access_level은 항상 write입니다. 이후 도구 호출에서 반환된 file.id를 fileId로 사용하세요.

update-file

파일 이름을 바꿉니다. 입력 출력 — { file, user_access_level }이며, get-file과 같은 형태입니다.

delete-file

파일을 영구적으로 삭제합니다. 전달한 name은 삭제 전에 파일의 현재 표시 이름과 대조됩니다. 일치하지 않으면 삭제가 중단되어, 잘못된 파일을 실수로 지우는 일을 막습니다. 에이전트는 먼저 사용자에게 확인하도록 지시받습니다. 입력 출력 — { "deleted": true }
이 작업은 되돌릴 수 없습니다. 파일의 모든 화면이 삭제됩니다.

화면 도구

list-screens

파일의 화면을 캔버스 순서대로 나열합니다. list-files 다음에 호출해 파일에 이미 있는 내용을 확인하세요. 반환된 screenId 값은 다른 화면 도구와 AI 디자인 도구에 사용하세요. 입력 출력 — { screens }.
  • prompt — 화면의 마지막 생성 프롬프트입니다. 생성된 적이 없다면(예: add-screen-jsx로 추가한 화면) 빈 문자열입니다.
  • fidelity — lofi, hifi, ui 중 하나입니다.

get-screen-image

화면을 PNG로 렌더링해 인라인 이미지로 반환합니다. 이미지 콘텐츠 블록을 지원하는 클라이언트가 필요합니다. AI 디자인 도구, add-screen-jsx, replace-screen-jsx, import-figma가 반환한 각 screenId에 대해 한 번씩 호출하세요. 입력 출력 — MCP 이미지 콘텐츠 블록(image/png). data는 데이터 URI가 아니라 PNG 바이트의 표준 base64입니다. 이 도구에는 structuredContent가 없습니다.

get-screen-jsx

화면을 JSX와 메타데이터로 가져옵니다. 코드베이스에서 구현하거나, 편집한 뒤 replace-screen-jsx로 다시 쓸 수 있습니다. 시각적 미리보기가 필요하면 대신 get-screen-image를 사용하세요. 입력 출력 — { fileId, screenId, name, prompt, fidelity, screenType, colorTheme, jsx, fragments }.
  • jsx — 마크업만 포함합니다. data-id 속성은 includeIds가 true일 때만 포함됩니다.
  • prompt — 마지막 생성 프롬프트입니다. 생성된 적이 없다면 빈 문자열입니다.
  • fragments — 화면에 저장된 공용 크롬(내비게이션 바, 헤더, 로고 등)으로, { purpose, markup } 객체입니다. 없으면 비어 있습니다. 유지하거나 업데이트하려면 replace-screen-jsx에 다시 전달하세요.
fidelity, screenType, colorTheme 값은 화면 필드 값을 참고하세요.

add-screen-jsx

직접 작성한 JSX로 파일에 새 화면을 추가합니다. 코드 우선 방식이며 무료입니다. Flowstep의 AI가 화면을 디자인하게 하려면 ai-design-screens를 사용하세요. add-screen-jsx는 항상 새 화면을 만듭니다. 기존 화면을 덮어쓰려면 replace-screen-jsx를 사용하세요. 업로드한 이미지를 표시하려면 JSX의 이미지를 참고하세요. 새 화면이 기존 화면을 기반으로 한다면, get-screen-jsx(includeIds 없이)에서 name, fidelity, screenType, colorTheme, jsx를 가져온 다음 달라야 할 부분만 바꾸세요. 입력 출력 — { fileId, screenId }. 결과를 보려면 screenId로 get-screen-image를 호출하세요.

replace-screen-jsx

직접 작성한 JSX로 기존 화면을 덮어씁니다. 화면은 screenId와 캔버스 위치를 유지하고, 중첩된 요소는 새 ID를 받습니다. 코드 우선 방식이며 무료입니다. AI로 변경하려면 ai-design-screens 또는 ai-edit-screen-variant를 사용하고, 새 화면을 만들려면 add-screen-jsx를 사용하세요. get-screen-jsx(includeIds 없이)에서 시작한 다음, 달라야 할 부분만 바꾸세요. 업로드한 이미지를 표시하려면 JSX의 이미지를 참고하세요. 입력 출력 — { fileId, screenId }. 결과를 보려면 screenId로 get-screen-image를 호출하세요.
이 작업은 화면의 콘텐츠를 제자리에서 교체합니다.

rename-screen

화면의 캔버스 라벨을 바꿉니다. 이는 list-screens와 편집기에 표시되는 이름입니다. 라벨만 바뀌며 레이아웃, 크기, 콘텐츠는 바뀌지 않습니다. 그런 변경에는 ai-design-screens를 사용하세요. 입력 출력 — { screenId, name }.

delete-screen

파일에서 화면을 영구적으로 삭제합니다. 전달한 name은 화면의 현재 표시 이름과 대조되며, 일치하지 않으면 삭제가 중단됩니다. 에이전트는 먼저 사용자에게 확인하도록 지시받습니다. 입력 출력 — { "deleted": true }

JSX의 이미지

add-screen-jsx와 replace-screen-jsx는 img의 src나 className의 bg-[url(...)] 배경으로 이미지를 받습니다. alt 텍스트를 작성하고, 각 이미지의 용도에 맞게 크기를 지정하세요. 직접 만든 이미지를 배치하려면 다음을 따르세요.
  1. 모드 A(mimeType + fileName)로 upload-attachment를 사용해 이미지를 업로드하고, 반환된 uploadCommand를 실행하세요.
  2. 응답의 type이 "image"이면, 반환된 assetUrl을 그대로 img src 또는 bg-[url(assetUrl)]에 넣으세요.
다른 이미지 URL은 get-screen-jsx가 반환한 그대로 두세요. src에 path, signedUrl, uploadCommand를 넣으면 안 됩니다.

화면 필드 값

get-screen-jsx가 반환하고, add-screen-jsx와 replace-screen-jsx가 허용하는 값은 다음과 같습니다.

디자인 가이드라인 도구

디자인 가이드라인은 파일에 저장된 DESIGN.md 텍스트입니다. 설정되면 해당 파일의 모든 AI 생성에 주입됩니다. 디자인 가이드라인을 참고하세요.

get-design-guidelines

파일에 첨부된 디자인 가이드라인을 가져옵니다. 입력 출력 — { guidelines }.
설정된 가이드라인이 없으면 guidelines는 null입니다.

update-design-guidelines

파일의 디자인 가이드라인을 설정하거나 교체합니다. 가이드라인은 객체나 JSON이 아니라, Google의 DESIGN.md 형식을 따르는 일반 문자열로 전달하세요. 파일에서 읽는 경우에는 그 파일의 텍스트를 전달하세요. 입력 검증 규칙
  • 프런트매터는 올바르게 열리고 닫혀야 합니다
  • 프런트매터 줄은 올바른 블록 스타일 YAML이어야 합니다
  • 마크다운 본문에 중복된 ## 섹션 제목이 있으면 안 됩니다
검증에 실패하면 Invalid design guidelines:로 시작하는 오류가 반환됩니다. 출력 — { updated, warnings? }.
warnings에는 허용되었지만 AI가 무시할 수 있는 소프트 검증 문제(알 수 없는 키, 16진수가 아닌 색상)가 나열됩니다. 없으면 생략됩니다. 이 내용을 사용자에게 알리세요.

delete-design-guidelines

파일의 디자인 가이드라인을 지웁니다. 존재하지 않는 가이드라인을 삭제해도 아무 작업도 일어나지 않습니다. 입력 출력 — { "deleted": true }

채팅 도구

get-chat-history

파일과 연결된 디자인 대화를 가져옵니다. 이는 MCP 클라이언트의 대화가 아니라 파일의 Flowstep 채팅입니다. 파일에서 이전 작업을 이어가려면 이 도구를 사용하세요. 입력 출력 — { messages }. 파일에 디자인 대화가 없으면 messages는 비어 있습니다. 각 메시지에는 type("request" 또는 "response"), author("human" 또는 "ai"), content_type이 있습니다. 응답 메시지는 "text", "summary", "followup"을 사용합니다.

첨부 파일 도구

upload-attachment

ai-design-screens의 첨부 파일로 사용할 참고 파일이나, add-screen-jsx 또는 replace-screen-jsx로 직접 만든 JSX에 넣을 이미지를 업로드합니다. ai-generate-screen-variant와 ai-edit-screen-variant는 첨부 파일을 받지 않습니다. 파일 바이트는 모델을 거치지 않으며, 서버는 사용자를 대신해 URL을 가져오지 않습니다. 웹페이지를 참조하려면 대신 ai-design-screens의 message에 URL을 넣으세요. 두 가지 모드가 있습니다. 하나만 사용하고, 둘을 함께 사용하지 마세요. 모드 A — 파일과 이미지(mimeType + fileName) 이미지, PDF, 크기가 큰 텍스트 파일에는 다음 세 단계 흐름이 필요합니다.
  1. mimeType과 fileName만 넣어 upload-attachment를 호출하세요(예: image/png와 dog.png). 응답은 저장된 파일이 아니라 준비된 업로드입니다.
  2. uploadCommand의 LOCAL_FILE_PATH를 파일의 절대 경로로 바꾸고, 그 명령을 셸에서 그대로 실행하세요. 명령이 0으로 종료되어야 합니다. signedUrl의 토큰은 이 단일 업로드만 허용합니다. 이 단계를 건너뛰면 저장소가 비어 있게 되고, 디자인 도구의 사전 점검이 실패합니다.
  3. ai-design-screens의 attachments 배열에는 { id, path, type }만 전달하세요. signedUrl, uploadCommand, nextStep은 전달하면 안 됩니다. 대신 직접 만든 JSX에 이미지를 넣으려면 assetUrl을 add-screen-jsx 또는 replace-screen-jsx에 전달하는 JSX의 img src 또는 bg-[url(...)]에 넣으세요. JSX의 이미지를 참고하세요.
원격 파일을 첨부하려면 먼저 직접 로컬 경로로 내려받은 다음(예: curl 사용), 같은 세 단계를 따르세요. upload-attachment에는 절대 URL을 전달하지 마세요. 모드 B — 짧은 텍스트(text + mimeType) 이미 컨텍스트에 있는 텍스트를 업로드합니다. 셸 명령은 필요하지 않습니다. 응답은 바로 사용할 수 있습니다.
결과로 얻은 { id, path, type }을 ai-design-screens의 attachments 배열에 전달하세요. 두 모드 모두 최대 파일 크기는 3 MB이며, PDF는 100페이지로 제한됩니다. 출력 — { id, path, assetUrl, type, mimeType, signedUrl?, uploadCommand?, nextStep? }.
  • type — 이미지 파일은 "image", PDF와 텍스트 파일은 "document"입니다.
  • assetUrl — 업로드된 파일의 URL이며, 두 모드 모두에서 반환됩니다. type이 "image"이고 모드 A의 uploadCommand를 실행한 후에만 add-screen-jsx 또는 replace-screen-jsx의 JSX에 사용하세요.
  • signedUrl, uploadCommand, nextStep — 모드 A에서만 설정됩니다. 디자인 도구에는 전달하지 마세요.

Figma 도구

import-figma

Figma 프레임을 Flowstep 파일의 캔버스에 편집 가능한 요소로 가져옵니다. 가져올 때마다 새 화면이 추가되므로, 같은 프레임을 두 번 가져오면 화면이 두 개 생깁니다. 교체하려던 것이라면 delete-screen으로 이전 화면을 삭제하세요. 파일이 속한 조직에서 Flowstep 설정으로 Figma가 연결되어 있어야 합니다. 입력 출력 — { fileId, screenId, frameCount? }. screenId는 가져온 화면입니다. 결과를 보려면 이 값을 get-screen-image에 전달하세요. 페이지 URL이 여러 프레임을 가져오면 screenId는 null이 되고 대신 frameCount가 반환됩니다. 이 경우 list-screens를 호출한 다음, 새 화면마다 get-screen-image를 호출하세요.

요금제 및 청구 도구

get-plan-details

조직의 Flowstep 요금제, 구독 상태, 사용량, 남은 할당량을 가져옵니다. 입력은 필요하지 않습니다. 조직은 로그인한 사용자에게서 확인됩니다. AI 디자인 도구를 호출하기 전에 사용량 한도를 확인하는 데 사용하세요. 출력 — { plan, subscription, limits, usage, remaining }. 한도는 요금제마다 다릅니다. 요금과 사용 한도를 참고하세요.

AI 디자인 도구

이 세 도구는 설명이나 프리셋으로 디자인합니다. JSX를 받거나 재사용하지 않습니다. 각 호출은 Flowstep 앱과 같은 메시지 사용량 한도를 사용하며, 생성이 완료되거나 시간이 초과(180초)될 때까지 기다립니다. 세 도구 모두 { status, fileId, screenIds, designGuidelinesUpdated }를 반환합니다. 결과를 보려면 각 screenId에 대해 get-screen-image를 한 번씩 호출하세요.
  • designGuidelinesUpdated — 이번 턴에 파일의 DESIGN.md 가이드라인이 자동으로 업데이트되었을 때 변경 사항을 짧게 요약합니다. 그렇지 않으면 null입니다.

ai-design-screens

텍스트 설명으로 새 화면을 하나 이상 생성하거나, 기존 화면을 제자리에서 변경하거나, 한 번의 호출에서 둘 다 수행합니다. 새 흐름, 테마, 문구, 레이아웃, 여러 화면에 걸친 조정된 변경이 여기에 포함됩니다. Flowstep 편집기의 채팅과 같은 디자인 에이전트이며, message와 elementIds를 바탕으로 무엇을 만들고 무엇을 바꿀지 결정합니다. 새 파일을 시작하려면 fileId를 생략하고, 기존 파일에서 작업하려면 fileId를 전달하세요. 요청이 이미 가진 파일에 적용될 수 있다면, 에이전트는 먼저 list-files와 list-screens를 확인해야 합니다. 화면 하나의 다음 단계, 오류 또는 빈 상태, 플랫폼 버전이 필요하면 ai-generate-screen-variant를 사용하세요. 화면 하나에 프리셋 편집이나 재디자인을 적용하려면 ai-edit-screen-variant를 사용하세요. 이미 JSX가 있다면 대신 add-screen-jsx 또는 replace-screen-jsx를 사용하세요. 입력 예시 — 한 번의 호출로 화면 하나를 편집하고 다른 화면을 추가합니다.
출력 — { status, fileId, screenIds, designGuidelinesUpdated, reply? }.
  • status — 화면이 만들어지거나 변경되면 "generated"입니다. Flowstep이 만들지 않고 답변만 하면 "chat"이며, 이때 reply에 답변이 담기고 screenIds는 비어 있습니다. 요청이 모호하다면 에이전트가 사용자에게 명확히 해 달라고 요청한 다음 도구를 다시 호출해야 합니다.
  • screenIds — 호출 중에 만들었거나 변경한 모든 화면으로, 제자리에서 편집한 화면도 포함됩니다. 일부 화면이 만들어진 뒤 호출이 시간 초과되면, 오류 대신 그 화면들을 반환합니다.
편집하도록 요청한 화면은 제자리에서 덮어쓰입니다.

ai-generate-screen-variant

기존 화면 하나에서 파생된 새 화면을 추가합니다. 흐름의 다음 단계, 오류 또는 빈 상태, 다른 플랫폼용 버전이 해당합니다. 원본 화면은 바뀌지 않습니다. 기존 화면의 변형이 아닌 화면(예: 설정 화면)을 추가하려면 fileId와 함께 ai-design-screens를 사용하세요. 입력 출력 — { status, fileId, screenIds, designGuidelinesUpdated }. status는 항상 "generated"입니다.

ai-edit-screen-variant

프리셋을 사용해 기존 화면 하나를 제자리에서 변경합니다. 테마를 바꾸거나 다듬고, 다른 레이아웃이나 시각 스타일을 시도하거나, 처음부터 다시 디자인할 수 있습니다. 새 화면, 자유 형식 지시, 개별 요소의 정밀한 편집에는 ai-design-screens를 사용하세요. 입력 출력 — { status, fileId, screenIds, designGuidelinesUpdated }. status는 항상 "generated"입니다.
이 작업은 화면의 콘텐츠를 제자리에서 덮어씁니다.

이름이 바뀐 도구

도구 이름은 2026년 9월과 10월에 변경되었습니다. 이전 이름을 사용하는 프롬프트, 스크립트, 에이전트 지침이 있다면 업데이트하세요. 입력도 바뀌었습니다. AI 디자인 도구는 targets 대신 elementIds를 받고(변형 도구는 단일 screenId를 받음), add-screen-jsx는 메타데이터 주석이 있는 jsxContent 대신 jsx와 명시적인 메타데이터 필드를 받습니다. create-file은 title 대신 name을 받고, 디자인 가이드라인 도구는 resourceId와 linkedTo 대신 fileId를 받습니다.