DEV Community

Cover image for osFoundry 작업을 연결된 Claude 채팅에 넘기는 방법
BBT for BBT 한국어

Posted on

osFoundry 작업을 연결된 Claude 채팅에 넘기는 방법

목표는 이렇다. Claude 대화 하나가 osFoundry 쪽에 링크 ID를 갖게 된다. osFoundry에 작업을 적고, 그 Claude 채팅을 열어서 "osFoundry 작업 확인해 줘"라고 하면 Claude가 작업을 가져가서 처리하고 결과를 돌려준다. osFoundry 화면에서는 작업이 "Waiting for Claude" → "Claimed by host chat" → "Completed"로 넘어가고, 그 아래에 결과가 뜬다. 이 구성 어디에도 Anthropic API 키는 안 나온다. 추론은 이미 돈 내고 쓰고 있는 Claude 대화가 맡는다.

누가 뭘 맡나

Claude 쪽 osFoundry 쪽
Claude 로그인과 대화 자체를 가진다 osFoundry 로그인, 워크스페이스, 프로젝트를 가진다
커스텀 커넥터로 osFoundry에 한 번만 로그인한다(OAuth) 연결을 발급하고, 그 연결이 볼 수 있는 프로젝트를 정한다
부탁받으면 link_current_chat, read_linked_chat_tasks, claim_linked_chat_task, submit_linked_chat_result를 호출한다 작업, claim, 결과를 저장하고 호출할 때마다 프로젝트 권한을 확인한다
대화 안에서 추론한다 작업 상태를 보여 주고 취소를 받는다
채팅을 열고 부탁했을 때만 움직인다 Claude 대화를 열거나, 목록을 보거나, 읽지 않는다

나머지를 다 결정하는 건 마지막 줄이다. MCP 서버는 툴 호출에 답할 수는 있다. 하지만 누군가의 개인 Claude 대화에서 턴을 시작시킬 수는 없고, Claude에도 그걸 가능하게 하는 범용 이벤트 트리거가 없다. 그래서 전달 방식은 우편함이다. osFoundry가 작업을 넣어 두고, 사용자가 말하면 Claude 채팅이 그걸 꺼내 간다.

설정

  1. osFoundry에서 열쇠 아이콘을 누르고 "Connected" 탭을 연다. "Assistant"에서 Claude를 고르고 표시 이름(예: "Research assistant")을 넣은 다음 "Add assistant"(어시스턴트 추가)를 누른다. 패널에 "Server address"와 Copy 버튼이 뜬다. 프로덕션 빌드 주소는 이거다.
   https://api.osfoundry.io/api/v1/external-mcp
Enter fullscreen mode Exit fullscreen mode

Add assistant 직후의 Connected 탭. 서버 주소와 대기 중인 연결

예시: Add assistant 직후의 Connected 탭. 서버 주소와 대기 중인 연결

  1. Claude에서 Customize > Connectors로 가서 "+ Add" → "Add custom connector"를 누른다. 이름을 붙이고 서버 주소를 붙여 넣은 뒤 "Continue". 로그인하라고 나오면 osFoundry에 로그인한다. Team이나 Enterprise 플랜이라면 먼저 오너가 Organization settings > Connectors에서 커넥터를 추가하고, 멤버는 "Connect"만 누르면 된다.

  2. osFoundry로 돌아와서 새 연결을 선택한다. "Projects"에서 프로젝트를 고르고 "Add to project"를 누른다. 이 단계 전까지 연결은 아무것도 못 본다. 일부러 그렇게 돼 있다. 프로젝트에 들어가 있지 않은 Claude 대화에는 가져갈 작업도, 읽을 데이터도 없다.

프로젝트에 추가한 연결과 그 아래의 연결된 채팅

예시: 프로젝트에 추가한 연결과 그 아래의 연결된 채팅

  1. 작업을 넘기고 싶은 Claude 대화를 연다. 그 대화에서 커넥터를 켜고(왼쪽 아래 "+" 버튼 → "Connectors") 이렇게 부탁한다.
   Use osFoundry to link this chat to my project as an agent.
Enter fullscreen mode Exit fullscreen mode

Claude가 프로젝트와 라벨을 넣어서 link_current_chat을 호출한다. 그러면 osFoundry의 "Linked chats"에 그 채팅이 라벨, 프로젝트 이름, "Project access active", "Link ID"와 함께 뜬다. 링크는 대화마다 따로라서, 다른 종류의 일을 맡길 두 번째 채팅을 따로 연결해도 된다.

  1. osFoundry에서 연결된 채팅 옆의 "Tasks"를 누른다. "Task for this chat"에 할 일을 적고 "Assign task"를 누른다. 작업에는 "Waiting for Claude", 24시간 뒤의 만료 시각, "Cancel" 버튼이 표시된다. 같은 수신함은 Message의 연결된 에이전트 페이지에도 있고, "Work with a linked chat"의 "Send work to"에서 쓸 수 있다.

연결된 채팅에 배정된 작업. Claude를 기다리는 중

예시: 연결된 채팅에 배정된 작업. Claude를 기다리는 중

  1. Claude 채팅을 열고 osFoundry 연결된 채팅 작업을 확인하라고 부탁한다. 이게 트리거다. 이걸 하기 전까지 Claude 쪽에서는 아무 일도 안 일어난다.

실제로 돌려 보면

아래 대화 기록은 예시다. 툴 이름과 인자 필드는 커넥터 그대로고, ID와 작업 문구, 답변은 설명용이다.

예시

사용자:  osFoundry 연결된 채팅 작업 확인해서 기다리는 거 처리해 줘.

Claude → read_linked_chat_tasks   { "chat_link_id": "5b1e…a07" }
       ← [ { "id": "c39d…41f", "status": "queued",
             "goal": "이 프로젝트의 런치 노트를 읽고 열려 있는 질문을
                      한 줄에 하나씩 전부 적어 줘." } ]

Claude → claim_linked_chat_task   { "chat_link_id": "5b1e…a07", "task_id": "c39d…41f" }
       ← { "claim_id": "e8a2…9c0", … }

         (Claude가 커넥터로 노트를 읽고 목록을 작성)

Claude → submit_linked_chat_result { "chat_link_id": "5b1e…a07", "task_id": "c39d…41f",
                                     "claim_id": "e8a2…9c0", "status": "completed",
                                     "result": "1. 가격 문구는 누가 최종 승인하나?\n2. …" }
       ← { "ok": true }

Claude:  완료했어요. 런치 노트에서 열린 질문 네 개를 찾아서
         osFoundry에 올려 뒀습니다.
Enter fullscreen mode Exit fullscreen mode

osFoundry에서는 카드가 "Waiting for Claude" → "Claimed by host chat" → "Completed"로 바뀐다. "Result"를 펼치면 본문을 읽을 수 있다. Claude가 파일도 첨부했다면 "Show returned files"에 종류와 크기와 함께 나온다.

툴 계약에서 알아 두면 좋은 게 두 가지 있다. 작업이 살아 있는 동안 같은 채팅에서 claim을 두 번 하면 같은 claim이 돌아온다. 그래서 Claude 턴이 재시도해도 워커가 둘로 늘지 않는다. 그리고 submit에는 claim ID가 붙기 때문에, 답은 claim한 그 작업에만 들어간다.

어디까지 보이나

osFoundry는 Claude 대화를 못 본다. 라벨과 대화 참조는 링크할 때 Claude가 알려 준 값 그대로고, 패널에도 그렇게 적혀 있다("Labels are self reported"). Claude가 받는 건 작업 카드의 "Shared with this linked chat"에 적힌 것뿐이다. 작업 문구, 그리고 그 작업에 붙은 이미지나 에디터 액션이다.

Claude가 워크스페이스 전체를 받는 것도 아니다. claim이든 결과든 매번 OAuth 연결과 링크가 속한 프로젝트를 기준으로 확인한다. 연결을 프로젝트에서 빼면 수신함은 그 연결의 작업을 더 이상 불러오지 않는다. "Unlink"는 채팅 하나를 정리하고, "Revoke connection"은 전부 끊는다.

Claude가 자기 판단으로 osFoundry 액션을 실행할 수도 없다. 작업에 에디터 액션이 제시돼 있으면 Claude는 제시된 것만 요청할 수 있고, 실행은 osFoundry가 기존 권한과 승인 절차 안에서 한다.

작업량에도 한도가 있다. 작업 본문은 100,000자, 결과는 20,000자까지고, 반환 파일은 하나에 8 MiB, 작업당 8개까지다. claim되지 않았거나 끝나지 않은 작업은 24시간 뒤 만료된다. 취소한 작업은 나중에 완료할 수 없다. 이미 그 작업을 하던 Claude 턴이라도 마찬가지다.

그리고 타이밍은 사용자가 쥔다. Claude에는 이 용도의 이벤트 트리거가 없으니까, 작업은 채팅을 열 때까지 기다린다. 구독이 없을 때 패널에도 대놓고 이렇게 나온다. "Open the host conversation to start each task."

다음으로는 텍스트 대신 파일을 돌려받는 작업을 해 보면 좋다. 짧은 Markdown 브리프 같은 걸 부탁하면서 제출 전에 업로드하라고 하고, 완료된 카드에서 "Show returned files"를 열어 보면 된다. 앱 안의 osFoundry 에이전트가 같은 툴을 어떻게 쓰는지는 osFoundry 에이전트, 커넥터 프로토콜 자체는 MCP란 무엇인가에 정리돼 있다.

Top comments (0)