FocusBox MCP — 도구 레퍼런스

커넥터 URL: https://focusbox.io/mcp/api. 설정 방법은 /mcp 에서 확인하세요.

list_today

사용자가 오늘 일정으로 등록한 작업(미완료만)을 반환합니다.

인자

없음.

반환값

배열 항목 타입: { taskId, name, durationSeconds, projectId }.

응답 예시

[
  { "taskId": "abc", "name": "Write spec", "durationSeconds": 1500, "projectId": "mytasks" }
]

next_task

다음에 시작할 작업 하나를 반환합니다. 다음 캘린더 일정까지 남은 시간에 맞는지, 이전 날짜에서 미뤄졌는지, 바로 시작할 만큼 작은지를 기준으로 고릅니다. 선택 이유와 대안 두 개, 바로 시작할 수 있는 링크가 함께 제공됩니다.

인자

availableMinutes (1-480, 선택).

반환값

{ task, alternatives, freeWindowMinutes, busyNow, message }.

응답 예시

{
  "task": {
    "taskId": "abc", "name": "Finish pricing page", "projectId": "work",
    "estimateMinutes": 35, "source": "rollover",
    "reason": "Carried over from 2 days ago; fits the 47 min you have before your next meeting.",
    "startUrl": "https://focusbox.io/now?id=work&taskId=abc"
  },
  "alternatives": [],
  "freeWindowMinutes": 47, "busyNow": false,
  "message": "Start here: Finish pricing page (35 min)."
}

get_streams

사용자의 FocusBox 프로젝트 목록을 반환합니다(작업을 담는 컨테이너로, 과거 명칭에 따라 API에서는 "streams"라고 부릅니다). 보관된 프로젝트와 today/mytasks 버킷은 제외됩니다.

인자

없음.

반환값

배열 항목 타입: { streamId, name }.

add_task

프로젝트에 새 작업을 추가하거나 오늘 일정에 등록합니다. 기본 시간은 25분입니다.

인자

필드타입필수설명
streamIdstring필수get_streams에서 가져온 대상 프로젝트 id. 오늘 일정에 등록하려면 "today"(또는 "mytasks")를 사용하세요.
namestring필수작업 제목(1-500자).
durationSecondsnumber선택60-14400(1분 — 4시간). 기본값 1500.
dueDatestring선택작업 일정의 선택적 Unix-seconds 타임스탬프. Today 뷰는 사용자 시간대 기준으로 오늘 범위에 속하는 due를 가진 작업을 표시합니다.
clientRequestIdstring선택멱등성 키. 동일한 키로 5분 이내 재요청 시 캐시된 결과를 반환합니다.

반환값

{ taskId, streamId, name, durationSeconds }.

update_task

기존 작업의 하나 이상의 필드(name, durationSeconds 또는 dueDate)를 수정합니다.

인자

필드타입필수설명
streamIdstring필수get_streams에서 가져온 streamId. 받은편지함의 경우 "today" 또는 "mytasks"를 사용하세요.
taskIdstring필수list_today 또는 get_streams에서 가져온 taskId.
namestring선택새 작업 제목(1-500자).
durationSecondsnumber선택새 지속 시간(초 단위, 60-14400). durSecInit이 새 값으로 재설정됩니다.
dueDatenumber선택새 마감일(Unix-seconds 타임스탬프).
clientRequestIdstring선택멱등성 키. 동일한 키로 5분 이내 재요청 시 캐시된 결과를 반환합니다.

반환값

{ taskId, streamId, name, durationSeconds, dueDate }.

delete_task

작업을 영구 삭제합니다. 멱등성: 이미 삭제된 작업을 다시 삭제해도 오류가 아닙니다.

인자

필드타입필수
streamIdstring필수
taskIdstring필수

반환값

{ taskId, streamId, deleted, reason? }.

complete_task

FocusBox 작업을 완료 처리합니다.

인자

필드타입필수
streamIdstring필수
taskIdstring필수

반환값

{ taskId, streamId, completed: true }.

get_insights_30d

최근 30일간 사용자가 완료한 작업의 요약 집계입니다.

인자

없음.

반환값

{ totalTasks, totalFocusMinutes, topStreams[{streamId, name, tasks}, days: 30 }].

인증

OAuth (Claude에 권장)

Claude Desktop과 claude.ai 웹은 OAuth 플로우를 자동으로 완료합니다. API key를 직접 다룰 필요가 없습니다.

Bearer (Cursor, Inspector, 커스텀 클라이언트)

API key는 다음에서 발급받으세요: /account/api-keys (apikey_로 시작). 모든 요청에 Authorization: Bearer apikey_xxx로 전송하세요.

레이트 리밋

API key당 2분에 300회 도구 호출. IP당 2분에 60회 미인증 프로브. 둘 중 하나라도 초과하면 Retry-After 헤더와 함께 HTTP 429를 반환합니다.

FAQ

인증: OAuth와 Bearer 중 무엇을 써야 하나요?

둘 다 가능합니다. 가장 매끄러운 설정을 위해서는 OAuth(Claude Desktop과 claude.ai 웹에서 자동 처리)를 사용하세요. Cursor, MCP Inspector 또는 커스텀 클라이언트의 경우, /account/api-keys에서 발급한 apikey_<uuid>로 Bearer 인증을 사용하세요.

레이트 리밋은 어떻게 되나요?

API key당 2분에 300회 도구 호출. IP당 2분에 60회 미인증 프로브. 둘 중 하나라도 초과하면 Retry-After 헤더와 함께 HTTP 429를 반환합니다.

OAuth 토큰의 유효 기간은 얼마나 되나요?

발급일로부터 30일입니다. 이후에는 Claude가 자동으로 재인증을 트리거합니다. 토큰은 불투명(at_*) 형식이며 서버 측에 저장되므로 refresh token은 필요하지 않습니다.

배포 후 Claude 세션이 다시 연결되는 이유는 무엇인가요?

MCP 세션 맵은 단일 ECS 태스크 내 인메모리에 보관됩니다. 롤링 배포 시 이 맵이 초기화됩니다. Claude는 자동으로 재연결하여 세션을 재개하므로, 짧은 새로고침 외에는 사용자가 인지할 만한 중단이 없어야 합니다.

스트리밍 응답(SSE)을 사용할 수 있나요?

네. 트랜스포트는 MCP 사양의 streamable HTTP 변형이므로, 각 도구 호출은 최종 결과 이전에 진행 상황 이벤트를 스트리밍할 수 있습니다. 세션은 주기적인 ping 프레임으로 유지됩니다.