# Directory Structure ``` ├── .gitignore ├── .python-version ├── Makefile ├── pyproject.toml ├── README.md ├── scripts │ ├── img_1.png │ ├── img_2.png │ ├── img_3.png │ ├── img_4.png │ ├── img.png │ ├── old.py │ ├── output.json │ └── run.sh ├── storm_mcp_server │ ├── __init__.py │ ├── core │ │ ├── __init__.py │ │ ├── file_manager.py │ │ └── internal_api.py │ ├── main.py │ └── tools │ ├── __init__.py │ ├── tool_definitions.py │ ├── tool_handlers.py │ └── tool_upload_file.py └── uv.lock ``` # Files -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- ``` 3.12 ``` -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- ``` .idea storm_mcp_server/__pycache__/ storm_mcp_server/core/__pycache__/ storm_mcp_server/tools/__pycache__/ ``` -------------------------------------------------------------------------------- /storm_mcp_server/__init__.py: -------------------------------------------------------------------------------- ```python ``` -------------------------------------------------------------------------------- /storm_mcp_server/core/__init__.py: -------------------------------------------------------------------------------- ```python ``` -------------------------------------------------------------------------------- /storm_mcp_server/tools/__init__.py: -------------------------------------------------------------------------------- ```python ``` -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- ```toml [project] name = "storm-mcp-server" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [ "fastapi>=0.115.11", "mcp>=1.3.0", "requests>=2.32.3", "uvicorn>=0.34.0", ] ``` -------------------------------------------------------------------------------- /storm_mcp_server/core/internal_api.py: -------------------------------------------------------------------------------- ```python import os import requests from typing import Any, Dict, List def call_internal_api( method: str, endpoint: str, base_url: str = "https://live-stargate.sionic.im", params: Dict[str, Any] = None, data: Dict[str, Any] = None, files: Dict[str, Any] = None, ) -> Dict[str, Any]: storm_api_key = os.getenv("STORM_API_KEY") url = f"{base_url}{endpoint}" headers = {"Content-Type": "application/json", "storm-api-key": storm_api_key} if method.upper() == "GET": resp = requests.get(url, headers=headers, params=params, timeout=30) elif method.upper() == "POST": if files: # 멀티파트 resp = requests.post( url, headers=headers, data=data, files=files, timeout=60 ) else: resp = requests.post( url, headers=headers, json=data, params=params, timeout=30 ) elif method.upper() == "DELETE": resp = requests.delete(url, headers=headers, params=params, timeout=30) else: raise ValueError(f"Unsupported HTTP method: {method}") if resp.status_code >= 400: raise Exception(f"API error: {resp.status_code} - {resp.text}") # text/plain 응답 대비 try: return resp.json() except Exception: return {"status": "success", "data": resp.text} def call_chat_api( question: str, bucket_ids: List[str] = None, thread_id: str = None, webhook_url: str = None, base_url: str = "https://live-stargate.sionic.im", ) -> Dict[str, Any]: """ /api/v2/answer (non-stream) 호출 예시 - header: storm-api-key: {api_key} - body: { "question": "...", "bucketIds": [...], "threadId": "...", "webhookUrl": "..." } """ url = f"{base_url}/api/v2/answer" storm_api_key = os.getenv("STORM_API_KEY") headers = { "Content-Type": "application/json", "storm-api-key": storm_api_key, } body = { "question": question, } if bucket_ids: body["bucketIds"] = bucket_ids if thread_id: body["threadId"] = thread_id if webhook_url: body["webhookUrl"] = webhook_url response = requests.post(url, headers=headers, json=body, timeout=30) if response.status_code >= 400: raise Exception(f"API error: {response.status_code} - {response.text}") return response.json() ``` -------------------------------------------------------------------------------- /storm_mcp_server/tools/tool_upload_file.py: -------------------------------------------------------------------------------- ```python import mimetypes from mcp.server import Server from mcp.types import Resource, Tool, TextContent from typing import List, Dict from storm_mcp_server.core.file_manager import FileSystemManager class FileServer: def __init__(self, base_path): self.fs = FileSystemManager(base_path) self.server = Server("file-server") def setup_handlers(self): """MCP 핸들러 설정""" @self.server.list_resources() async def list_resources() -> List[Resource]: items = await self.fs.list_directory() return [ Resource( uri=f"file:///{item['path']}", name=item["name"], mimeType=( "inode/directory" if item["type"] == "directory" else mimetypes.guess_type(item["name"])[0] or "text/plain" ), description=f"{'Directory' if item['type'] == 'directory' else 'File'}: {item['path']}", ) for item in items ] @self.server.read_resource() async def read_resource(uri: str) -> str: path = uri.replace("file:///", "") content, _ = await self.fs.read_file(path) return content @self.server.list_tools() async def list_tools() -> List[Tool]: return [ Tool( name="upload_file", description="파일 업로드(Base64 인코딩된 컨텐츠)", inputSchema={ "type": "object", "properties": { "path": { "type": "string", "description": "업로드할 파일 경로(서버 내)", }, "fileContent": { "type": "string", "description": "Base64 인코딩된 파일 내용", }, }, "required": ["path", "fileContent"], }, ), Tool( name="search_files", description="파일 검색", inputSchema={ "type": "object", "properties": { "pattern": { "type": "string", "description": "검색할 키워드", } }, "required": ["pattern"], }, ), ] @self.server.call_tool() async def call_tool(name: str, arguments: Dict) -> List[TextContent]: if name == "upload_file": # 파일 업로드 path = arguments["path"] b64_content = arguments["fileContent"] await self.fs.upload_file(path, b64_content) return [ TextContent(type="text", text=f"File uploaded successfully: {path}") ] elif name == "search_files": # 파일 검색 pattern = arguments["pattern"] results = await self.fs.search_files(pattern) if not results: return [TextContent(type="text", text="No files found")] text_output = "\n".join(f"[{r['type']}] {r['path']}" for r in results) return [TextContent(type="text", text=text_output)] raise ValueError(f"Unknown tool: {name}") ``` -------------------------------------------------------------------------------- /storm_mcp_server/tools/tool_handlers.py: -------------------------------------------------------------------------------- ```python import asyncio import base64 import json from io import BytesIO from typing import List, Dict, Any from mcp.types import Tool, TextContent from storm_mcp_server.core.internal_api import call_internal_api, call_chat_api from storm_mcp_server.tools.tool_definitions import TOOLS_DEFINITION async def handle_list_tools() -> List[Tool]: """ MCP에서 'tools/list' 이벤트가 오면, 우리가 보유한 툴(TOOLS_DEFINITION)을 반환. """ tool_objects: List[Tool] = [] for tdef in TOOLS_DEFINITION: tool_objects.append( Tool( name=tdef["name"], description=tdef["description"], inputSchema=tdef["inputSchema"], ) ) return tool_objects async def handle_call_tool(name: str, arguments: Dict[str, Any]) -> List[TextContent]: """ MCP에서 'tool/call' 이벤트로 특정 툴(name)을 호출하면, 여기서 그 이름에 맞게 실제 비즈니스 로직(call_chat_api, call_internal_api 등)을 실행. 반환값은 List[TextContent] 형태여야 하며, MCP에 문자열 형태로 전달된다. """ try: if name == "send_nonstream_chat": # -------------------------------------------------------- # (1) /api/v2/answer (non-stream) - Storm API Key 기반 # -------------------------------------------------------- question = arguments.get("question", "").strip() bucket_ids = arguments.get("bucketIds", None) thread_id = arguments.get("threadId", None) webhook_url = arguments.get("webhookUrl", None) if not question: raise ValueError("question is required") # 실제 호출 response_data = await asyncio.to_thread( call_chat_api, question=question, bucket_ids=bucket_ids, thread_id=thread_id, webhook_url=webhook_url, ) result_text = json.dumps(response_data, ensure_ascii=False, indent=2) return [TextContent(type="text", text=result_text)] elif name == "list_agents": page = arguments.get("page", None) size = arguments.get("size", None) params = {} if page is not None: params["page"] = page if size is not None: params["size"] = size response_data = await asyncio.to_thread( call_internal_api, method="GET", endpoint="/api/v2/agents", params=params, ) result_text = json.dumps(response_data, ensure_ascii=False, indent=2) return [TextContent(type="text", text=result_text)] elif name == "list_buckets": # -------------------------------------------------------- # (3) /api/v2/buckets (GET) - Storm API Key # -------------------------------------------------------- agent_id = arguments.get("agent_id", "").strip() if not agent_id: raise ValueError("agent_id is required") page = arguments.get("page", None) size = arguments.get("size", None) params = {"agentId": agent_id} if page is not None: params["page"] = page if size is not None: params["size"] = size response_data = await asyncio.to_thread( call_internal_api, method="GET", endpoint="/api/v2/buckets", params=params, ) result_text = json.dumps(response_data, ensure_ascii=False, indent=2) return [TextContent(type="text", text=result_text)] elif name == "upload_document_by_file": # -------------------------------------------------------- # /api/v2/documents/by-file (POST) # - file_path (로컬 경로) # - file_base64 (Base64) # - file_name (Base64 시 파일명) # -------------------------------------------------------- bucket_id = arguments.get("bucket_id", "").strip() file_path = arguments.get("file_path", "").strip() file_base64 = arguments.get("file_base64", None) file_name = arguments.get("file_name", None) webhook_url = arguments.get("webhook_url", None) if not bucket_id: raise ValueError("bucket_id is required") # file_path, file_base64 둘 다 없으면 에러 if not file_path and not file_base64: raise ValueError("Either file_path or file_base64 must be provided") data = {"bucketId": bucket_id} if webhook_url: data["webhookUrl"] = webhook_url # --------------------------- # 1) file_path 있는 경우 → 로컬 파일 열기 # --------------------------- if file_path: # 로컬 파일 읽어 multipart 전송 with open(file_path, "rb") as f: # MIME 타입은 일단 "application/octet-stream"으로 가정 files = {"file": (file_path, f, "application/octet-stream")} response_data = await asyncio.to_thread( call_internal_api, method="POST", endpoint="/api/v2/documents/by-file", data=data, files=files, ) # --------------------------- # 2) file_base64 있는 경우 → 메모리에서 BytesIO # --------------------------- else: # file_name이 없으면 기본 이름 "uploaded_file" if not file_name: file_name = "uploaded_file" raw_data = base64.b64decode(file_base64) file_obj = BytesIO(raw_data) # 마찬가지로 MIME 타입은 "application/octet-stream" 기본 files = {"file": (file_name, file_obj, "application/octet-stream")} response_data = await asyncio.to_thread( call_internal_api, method="POST", endpoint="/api/v2/documents/by-file", data=data, files=files, ) result_text = json.dumps(response_data, ensure_ascii=False, indent=2) return [TextContent(type="text", text=result_text)] else: raise ValueError(f"Tool '{name}' not found.") except Exception as e: # 에러 발생 시 MCP 쪽에 오류 메시지를 전달하기 위해 RuntimeError로 래핑 raise RuntimeError(f"Tool call error: {str(e)}") from e ``` -------------------------------------------------------------------------------- /scripts/output.json: -------------------------------------------------------------------------------- ```json { "openapi": "3.0.0", "info": { "title": "Storm API", "description": "Description", "version": "1.0.0" }, "servers": [ { "url": "http://localhost:3000/", "description": "Local server" }, { "url": "https://dev.sionicstorm.ai/api/", "description": "Development server" } ], "paths": { "/": { "get": { "description": "", "responses": { "default": { "description": "" } } } }, "/health": { "get": { "description": "", "responses": { "default": { "description": "" } } } }, "/auth/login": { "get": { "tags": [ "Auth" ], "description": "Email 로그인", "parameters": [ { "name": "email", "in": "query", "schema": { "type": "string" } }, { "name": "password", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } }, "post": { "tags": [ "Auth" ], "description": "Email 로그인", "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "email": { "example": "any" }, "password": { "example": "any" } } } } } } } }, "/auth/cipher-login": { "get": { "description": "", "parameters": [ { "name": "userId", "in": "query", "schema": { "type": "string" } }, { "name": "cipher", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/auth/signup": { "post": { "tags": [ "Auth" ], "description": "Email 회원가입", "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postAuthSignup" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postAuthSignup" } } } } } }, "/auth/check": { "get": { "description": "", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/auth/sso/slack/": { "get": { "tags": [ "Auth" ], "description": "", "parameters": [ { "name": "state", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/auth/sso/slack/callback": { "get": { "tags": [ "Auth" ], "description": "", "parameters": [ { "name": "code", "in": "query", "schema": { "type": "string" } }, { "name": "state", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/auth/sso/google/": { "get": { "tags": [ "Auth" ], "description": "", "parameters": [ { "name": "state", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/auth/sso/google/callback": { "get": { "tags": [ "Auth" ], "description": "", "parameters": [ { "name": "code", "in": "query", "schema": { "type": "string" } }, { "name": "state", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/playground/clova": { "get": { "tags": [ "Playground" ], "description": "클로바 사용량 확인", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "post": { "tags": [ "Playground" ], "description": "클로바 사용", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/slack/install/": { "get": { "tags": [ "Slack" ], "description": "", "responses": { "default": { "description": "" } } } }, "/slack/install/callback": { "get": { "tags": [ "Slack" ], "description": "", "parameters": [ { "name": "code", "in": "query", "schema": { "type": "string" } } ], "responses": { "400": { "description": "Bad Request" } } } }, "/slack/event/": { "post": { "tags": [ "Slack" ], "description": "", "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "token": { "example": "any" }, "team_id": { "example": "any" }, "payload": { "example": "any" }, "challenge": { "example": "any" }, "type": { "example": "any" }, "api_app_id": { "example": "any" }, "event": { "example": "any" }, "event_id": { "example": "any" } } } } } } } }, "/slack/interactive/": { "post": { "tags": [ "Slack" ], "description": "", "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "token": { "example": "any" }, "team_id": { "example": "any" }, "payload": { "example": "any" } } } } } } } }, "/slack/command/": { "post": { "tags": [ "Slack" ], "description": "", "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "token": { "example": "any" }, "team_id": { "example": "any" }, "payload": { "example": "any" }, "user_id": { "example": "any" }, "channel_id": { "example": "any" }, "text": { "example": "any" } } } } } } } }, "/channeltalk/event/": { "post": { "tags": [ "ChannelTalk" ], "description": "", "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "refers": { "example": "any" }, "event": { "example": "any" }, "type": { "example": "any" }, "entity": { "example": "any" } } } } } } } }, "/kakaotalk/event/": { "post": { "tags": [ "KakaoTalk" ], "description": "", "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "bot": { "example": "any" }, "userRequest": { "example": "any" } } } } } } } }, "/pylon/callback/agents": { "post": { "description": "", "parameters": [ { "name": "c", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "example": "any" } } } } } } } }, "/pylon/callback/buckets": { "post": { "description": "", "parameters": [ { "name": "c", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "example": "any" } } } } } } } }, "/pylon/callback/documents": { "post": { "tags": [ "Pylon" ], "description": "", "parameters": [ { "name": "c", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "example": "any" }, "result": { "example": "any" } } } } } } } }, "/pylon/callback/advices": { "post": { "tags": [ "Pylon" ], "description": "", "parameters": [ { "name": "c", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "example": "any" }, "result": { "example": "any" } } } } } } } }, "/pylon/callback/query": { "post": { "tags": [ "Pylon" ], "description": "", "parameters": [ { "name": "c", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "task_id": { "example": "any" }, "status": { "example": "any" } } } } } } } }, "/pylon/callback/deployments": { "post": { "tags": [ "Pylon" ], "description": "", "parameters": [ { "name": "c", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "example": "any" }, "result": { "example": "any" } } } } } } } }, "/pylon/callback/write": { "post": { "tags": [ "Pylon" ], "description": "", "parameters": [ { "name": "c", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "example": "any" }, "result": { "example": "any" } } } } } } } }, "/me/": { "get": { "tags": [ "Me" ], "description": "내 정보 확인", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/me/teams": { "get": { "tags": [ "Me" ], "description": "내가 속한 팀의 리스트 확인", "parameters": [ { "$ref": "#/components/parameters/search" }, { "$ref": "#/components/parameters/order" }, { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/take" } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/me/teams/invite": { "post": { "tags": [ "Me" ], "description": "팀 초대 수락", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postMeTeamInvite" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postMeTeamInvite" } } } } } }, "/teams/": { "post": { "tags": [ "Team" ], "description": "팀 생성", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postTeam" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postTeam" } } } } } }, "/teams/{teamId}": { "get": { "tags": [ "Team" ], "description": "팀 정보 획득", "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "patch": { "tags": [ "Team" ], "description": "팀 속성 변경", "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/patchTeam" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/patchTeam" } } } } } }, "/teams/{teamId}/members": { "get": { "tags": [ "Team" ], "description": "팀 멤버 리스트 획득", "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string" } }, { "$ref": "#/components/parameters/search" }, { "$ref": "#/components/parameters/order" }, { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/take" } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/teams/{teamId}/members/{userId}": { "patch": { "tags": [ "Team" ], "description": "팀 멤버의 속성 변경", "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/patchTeamMembers" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/patchTeamMembers" } } } } } }, "/teams/{teamId}/invites": { "post": { "tags": [ "Team" ], "description": "팀 멤버 초대", "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postTeamInvites" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postTeamInvites" } } } } } }, "/teams/{teamId}/agents": { "get": { "tags": [ "Team" ], "description": "팀 에이전트 리스트 획득", "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string" } }, { "$ref": "#/components/parameters/search" }, { "$ref": "#/components/parameters/order" }, { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/take" } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "post": { "tags": [ "Team" ], "description": "팀 에이전트 등록", "parameters": [ { "name": "teamId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postTeamAgents" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postTeamAgents" } } } } } }, "/agents/{agentId}": { "get": { "tags": [ "Agent" ], "description": "에이전트 정보 획득", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "patch": { "tags": [ "Agent" ], "description": "팀 에이전트 수정", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/patchTeamAgents" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/patchTeamAgents" } } } } }, "delete": { "tags": [ "Agent" ], "description": "팀 에이전트 삭제", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/knowledges": { "get": { "tags": [ "Agent" ], "description": "에이전트의 Knowledges 리스트 획득", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "$ref": "#/components/parameters/search" }, { "$ref": "#/components/parameters/order" }, { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/take" } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/instructions": { "delete": { "tags": [ "Agent" ], "description": "에이전트의 Knowledges 삭제", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/deleteAgentKnowledges" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/deleteAgentKnowledges" } } } } } }, "/agents/{agentId}/documents/url": { "post": { "tags": [ "Agent" ], "description": "에이전트에 문서 URL 등록", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postAgentDocumentsUrl" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postAgentDocumentsUrl" } } } } } }, "/agents/{agentId}/documents/file": { "post": { "tags": [ "Agent" ], "description": "에이전트에 문서 File 등록", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/files" } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/deployments": { "post": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "memo": { "example": "any" }, "agentVersionId": { "example": "any" } } } } } } }, "get": { "tags": [ "Agent" ], "description": "에이전트의 배포 히스토리 목록 조회", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "agentVersionStatus", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/channels": { "post": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "type": { "example": "any" }, "name": { "example": "any" }, "kakaoBotId": { "example": "any" } } } } } } }, "get": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/buckets": { "get": { "tags": [ "Agent" ], "description": "에이전트의 버킷 리스트 획득", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "$ref": "#/components/parameters/search" }, { "$ref": "#/components/parameters/order" }, { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/take" } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "post": { "tags": [ "Agent" ], "description": "에이전트에 버킷 등록", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postAgentBuckets" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postAgentBuckets" } } } } }, "put": { "tags": [ "Agent" ], "description": "에이전트의 버킷 일괄 변경", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postAgentBuckets" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postAgentBuckets" } } } } } }, "/agents/{agentId}/threads/report": { "get": { "tags": [ "Agent" ], "description": "에이전트의 스레드 로그 임시!! 획득", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "googleDriveFolderId", "in": "query", "schema": { "type": "string" } }, { "name": "fileName", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/versions": { "get": { "tags": [ "Agent" ], "description": "에이전트의 배포 히스토리 목록 조회", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/threads": { "post": { "tags": [ "Agent" ], "description": "에이전트에 스레드 등록", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/basic-instructions": { "get": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "post": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "patch": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "delete": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/agents/{agentId}/advices": { "post": { "tags": [ "Agent" ], "description": "에이전트에 피드백 등록", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "qnas": { "example": "any" } } } } } } } }, "/agents/{agentId}/configs": { "post": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "promptTemplateRecipe": { "example": "any" }, "systemConfig": { "example": "any" } } } } } } }, "get": { "description": "", "parameters": [ { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/documents/{documentId}": { "get": { "tags": [ "Document" ], "description": "문서 정보 획득", "parameters": [ { "name": "documentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "put": { "tags": [ "Document" ], "description": "문서 내용 수정 (URL로 등록한 문서)", "parameters": [ { "name": "documentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "patch": { "tags": [ "Document" ], "description": "문서 정보 수정", "parameters": [ { "name": "documentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "description": { "example": "any" }, "bucketIds": { "example": "any" } } } } } } } }, "/documents/{documentId}/download": { "get": { "description": "", "parameters": [ { "name": "documentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/documents/": { "delete": { "tags": [ "Agent" ], "description": "여러 개의 document 삭제", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/deleteAgentKnowledges" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/deleteAgentKnowledges" } } } } } }, "/buckets/{bucketId}": { "patch": { "tags": [ "Bucket" ], "description": "버킷 정보 수정", "parameters": [ { "name": "bucketId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/patchBucket" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/patchBucket" } } } } }, "delete": { "tags": [ "Bucket" ], "description": "버킷 삭제", "parameters": [ { "name": "bucketId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/threads/{threadId}/chats": { "post": { "tags": [ "Thread" ], "description": "스레드에 질문 등록", "parameters": [ { "name": "threadId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postThreadReply" } }, "application/xml": { "schema": { "$ref": "#/components/schemas/postThreadReply" } } } } } }, "/chats/": { "get": { "description": "", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/chats/download": { "post": { "description": "", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/chats/{chatId}": { "get": { "tags": [ "Chat" ], "description": "챗 조회", "parameters": [ { "name": "chatId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "patch": { "description": "", "parameters": [ { "name": "chatId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/chats/{chatId}/sources": { "get": { "tags": [ "Chat" ], "description": "관련 소스 조회", "parameters": [ { "name": "chatId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/chats/{chatId}/chat-advices": { "post": { "description": "", "parameters": [ { "name": "chatId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "type": { "example": "any" }, "qna": { "example": "any" }, "bucketId": { "example": "any" } } } } } } } }, "/chats/{chatId}/chat-advices/{chatAdviceId}": { "patch": { "description": "", "parameters": [ { "name": "chatId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "chatAdviceId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "qna": { "example": "any" }, "bucketId": { "example": "any" } } } } } } }, "delete": { "description": "", "parameters": [ { "name": "chatId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "chatAdviceId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/chat-advices/{chatAdviceId}": { "get": { "description": "", "parameters": [ { "name": "chatAdviceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/chat-advices/": { "delete": { "description": "", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "chatAdviceIds": { "example": "any" } } } } } } } }, "/sse/": { "post": { "tags": [ "SSE" ], "description": "테스트 페이지 접속시 SSE connection 생성", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "delete": { "tags": [ "SSE" ], "description": "SSE connection 해제", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/admin/teams": { "post": { "description": "", "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "example": "any" }, "users": { "example": "any" } } } } } } } }, "/admin/documents": { "post": { "description": "", "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "example": "any" } } } } } } } }, "/advices/{adviceId}": { "get": { "tags": [ "Advice" ], "description": "피드백 정보 조회", "parameters": [ { "name": "adviceId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "patch": { "tags": [ "Advice" ], "description": "피드백 정보 수정", "parameters": [ { "name": "adviceId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/advices/": { "delete": { "tags": [ "Advice" ], "description": "여러 개의 피드백 삭제", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "adviceIds": { "example": "any" } } } } } } } }, "/api-keys/": { "post": { "description": "", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "example": "any" } } } } } } } }, "/deployments/{deploymentId}": { "delete": { "description": "", "parameters": [ { "name": "deploymentId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/api/guest/test/": { "post": { "description": "", "responses": { "default": { "description": "" } } } }, "/api/guest/sessions/": { "post": { "description": "", "parameters": [ { "name": "x-storm-guest-id", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } }, "delete": { "description": "", "parameters": [ { "name": "agentId", "in": "query", "schema": { "type": "string" } }, { "name": "ttl", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/api/guest/documents/": { "post": { "tags": [ "API v1" ], "description": "학습 요청", "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "example": "any" }, "urls": { "example": "any" }, "postActions": { "example": "any" } } } } } } } }, "/api/guest/documents/{documentId}": { "get": { "tags": [ "API v1" ], "description": "문서 정보 획득", "parameters": [ { "name": "documentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/api/guest/contexts/": { "post": { "description": "", "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "question": { "example": "any" } } } } } } } }, "/api/{version}/buckets/": { "post": { "tags": [ "API v1" ], "description": "에이전트에 버킷 등록", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/api/{version}/buckets/{bucketId}": { "patch": { "tags": [ "API v1" ], "description": "버킷 정보 수정", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "bucketId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/api/{version}/documents/": { "post": { "tags": [ "API v1" ], "description": "학습 요청", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "example": "any" }, "urls": { "example": "any" }, "postActions": { "example": "any" } } } } } } } }, "/api/{version}/documents/{documentId}": { "get": { "tags": [ "API v1" ], "description": "문서 정보 획득", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "documentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/api/{version}/threads/": { "post": { "tags": [ "API v1" ], "description": "스레드 등록", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/api/{version}/threads/{threadId}/chats": { "post": { "tags": [ "API v1" ], "description": "채팅 전송", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "threadId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "question": { "example": "any" }, "bucketIds": { "example": "any" }, "isStreaming": { "example": "any" }, "isContextOnly": { "example": "any" }, "webhookUrl": { "example": "any" }, "engine": { "example": "any" } } } } } } } }, "/api/{version}/answer/": { "post": { "tags": [ "API v1" ], "description": "채널 API 연동으로 질문 등록", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "question": { "example": "any" }, "bucketIds": { "example": "any" }, "isStreaming": { "example": "any" }, "isContextOnly": { "example": "any" }, "webhookUrl": { "example": "any" }, "engine": { "example": "any" } } } } } } } }, "/api/{version}/agents/{agentId}/deployments": { "post": { "description": "", "parameters": [ { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "agentId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "memo": { "example": "any" }, "agentVersionId": { "example": "any" } } } } } } } }, "/channels/{channelId}": { "get": { "description": "", "parameters": [ { "name": "channelId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] }, "patch": { "description": "", "parameters": [ { "name": "channelId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "type": { "example": "any" }, "name": { "example": "any" }, "kakaoBotId": { "example": "any" } } } } } } }, "delete": { "description": "", "parameters": [ { "name": "channelId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/channels/{channelId}/renew-token": { "post": { "description": "", "parameters": [ { "name": "channelId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/write/": { "post": { "tags": [ "Write" ], "description": "기사 생성", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "testId": { "example": "any" }, "text": { "example": "any" }, "metadata": { "example": "any" } } } } } } } }, "/write/refine/title": { "post": { "tags": [ "Write" ], "description": "기사 제목 정제", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "testId": { "example": "any" }, "text": { "example": "any" }, "metadata": { "example": "any" } } } } } } } }, "/write/refine/subtitle": { "post": { "tags": [ "Write" ], "description": "기사 부제목 정제", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "testId": { "example": "any" }, "text": { "example": "any" }, "title": { "example": "any" }, "metadata": { "example": "any" } } } } } } } }, "/write/refine/lead": { "post": { "tags": [ "Write" ], "description": "기사 리드문 정제", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "testId": { "example": "any" }, "text": { "example": "any" }, "title": { "example": "any" }, "subtitle": { "example": "any" }, "metadata": { "example": "any" } } } } } } } }, "/write/refine/body": { "post": { "tags": [ "Write" ], "description": "기사 바디문 정제", "parameters": [ { "name": "sse-connection-key", "in": "header", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "testId": { "example": "any" }, "text": { "example": "any" }, "title": { "example": "any" }, "subtitle": { "example": "any" }, "metadata": { "example": "any" } } } } } } } }, "/write/report": { "get": { "tags": [ "Agent" ], "description": "write report 생성", "parameters": [ { "name": "testId", "in": "query", "schema": { "type": "string" } }, { "name": "googleDriveFolderId", "in": "query", "schema": { "type": "string" } }, { "name": "fileName", "in": "query", "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } }, "/models/": { "get": { "description": "", "responses": { "default": { "description": "" } }, "security": [ { "bearerAuth": [], "ApiKeyAuth": [] } ] } } }, "components": { "parameters": { "search": { "in": "query", "name": "search", "schema": { "type": "string" } }, "order": { "in": "query", "name": "order", "schema": { "type": "string" } }, "cursor": { "in": "query", "name": "cursor", "schema": { "type": "string" } }, "take": { "in": "query", "name": "take", "schema": { "type": "integer", "minimun": 1 } }, "files": { "in": "formData", "name": "files", "schema": { "type": "array", "items": { "type": "string", "format": "binary" } } } }, "schemas": { "postAuthSignup": { "type": "object", "properties": { "email": { "type": "string", "example": "" }, "name": { "type": "string", "example": "" }, "password": { "type": "string", "example": "" }, "code": { "type": "string", "example": "" } }, "xml": { "name": "postAuthSignup" } }, "postTeam": { "type": "object", "properties": { "name": { "type": "string", "example": "newTeamName" } }, "xml": { "name": "postTeam" } }, "patchTeam": { "type": "object", "properties": { "name": { "type": "string", "example": "newTeamName" } }, "xml": { "name": "patchTeam" } }, "patchTeamMembers": { "type": "object", "properties": { "role": { "type": "string", "example": "member" } }, "xml": { "name": "patchTeamMembers" } }, "postTeamInvites": { "type": "array", "items": { "type": "object", "properties": { "email": { "type": "string", "example": "[email protected]" }, "role": { "type": "string", "example": "member" } } }, "xml": { "name": "postTeamInvites" } }, "postTeamAgents": { "type": "object", "properties": { "name": { "type": "string", "example": "newAgentName" }, "language": { "type": "string", "example": "ko" } }, "xml": { "name": "postTeamAgents" } }, "patchTeamAgents": { "type": "object", "properties": { "name": { "type": "string", "example": "newAgentName" }, "language": { "type": "string", "example": "ko" } }, "xml": { "name": "patchTeamAgents" } }, "postTeamWorkspaceIntegrations": { "type": "object", "properties": { "workspaceType": { "type": "string", "example": "channeltalk" }, "workspaceId": { "type": "string", "example": "123456" }, "accessToken": { "type": "string", "example": "651xx3f16d1a110a3c11" }, "accessKey": { "type": "string", "example": "123123" }, "accessSecret": { "type": "string", "example": "7d607xxxxxxxxxxxxxxxxxxxx" } }, "xml": { "name": "postTeamWorkspaceIntegrations" } }, "postMeTeamInvite": { "type": "object", "properties": { "code": { "type": "string", "example": "" } }, "xml": { "name": "postMeTeamInvite" } }, "deleteAgentKnowledges": { "type": "object", "properties": { "documentIds": { "type": "array", "example": [ "123456" ], "items": { "type": "string" } }, "adviceIds": { "type": "array", "example": [ "123456" ], "items": { "type": "string" } } }, "xml": { "name": "deleteAgentKnowledges" } }, "postAgentDocumentsUrl": { "type": "object", "properties": { "documentUrls": { "type": "array", "example": [ "https://examples.com" ], "items": { "type": "string" } }, "bucketIds": { "type": "array", "example": [ "123456" ], "items": { "type": "string" } } }, "xml": { "name": "postAgentDocumentsUrl" } }, "postAgentDocumentsFile": { "type": "object", "properties": { "bucketIds": { "type": "array", "example": [ "123456" ], "items": { "type": "string" } } }, "xml": { "name": "postAgentDocumentsFile" } }, "postAgentBuckets": { "type": "object", "properties": { "type": { "type": "string", "example": "default" }, "name": { "type": "string", "example": "newBucketName" } }, "xml": { "name": "postAgentBuckets" } }, "putAgentBuckets": { "type": "object", "properties": { "create": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string", "example": "default" }, "name": { "type": "string", "example": "newBucketName" } } } }, "update": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "example": "123456" }, "type": { "type": "string", "example": "optional" }, "name": { "type": "string", "example": "newBucketName" } } } }, "delete": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "example": "123456" } } } } }, "xml": { "name": "putAgentBuckets" } }, "patchBucket": { "type": "object", "properties": { "type": { "type": "string", "example": "optional" }, "name": { "type": "string", "example": "newBucketName" } }, "xml": { "name": "patchBucket" } }, "postThreadReply": { "type": "object", "properties": { "question": { "type": "string", "example": "질문 텍스트" } }, "xml": { "name": "postThreadReply" } } }, "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" }, "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "X-Storm-Token" } } } } ```