# Mocco를 에이전트에 연결하기

Mocco는 Model Context Protocol을 지원합니다. 이미 쓰고 있는 코딩 어시스턴트가 터미널을 떠나지 않고도 "배포가 멈췄다면 어디에서 멈췄지?"라는 질문에 답할 수 있습니다.

서버는 **원격이며 Mocco가 호스팅합니다.** 설치할 것도, 업데이트할 것도 없습니다.
브라우저에서 한 번 로그인하면 클라이언트가 토큰을 보관합니다.

```
https://www.mocco.club/api/mcp
```

> 읽기 도구와 결정 도구가 모두 들어 있습니다. 승인 요청에 투표하기, 멈춘 실행을 재개하거나 거부하기, 알림이 가는 곳 바꾸기, 메신저 인박스와 설정 다루기, 피드백 보드 설정하기, 피드백 게시물을 쓰고 옮기고 댓글 달고 투표하고 병합하고 변환하고 GitHub에 연결하고 릴리스에서 출시됨으로 표시하기, 변경 로그 항목 쓰고 게시하기, 헬프 센터 글을 쓰고 게시하고 번역하기, 플래그를 만들고 플래그 변경을 제안하기까지 할 수 있습니다. 계획은
> [설계 문서](https://github.com/fi-workers/mocco/blob/main/docs/specs/2026-10-02-mcp-and-cli-design.md)에 있습니다.

## 할 수 있는 것

**사용자 본인으로서 읽습니다.** 속한 워크스페이스에서 Mocco 역할이 허용하는 것만 볼 수 있습니다. 서버 자체에는 권한이 없으므로 그 이상은 보이지 않습니다.

| 도구 | 답해 주는 것 |
|---|---|
| `mocco_runs_search` | 실행 중이거나 대기 중이거나 실패한 실행. `awaiting_gate`로 필터링하면 "막혀 있는 것"을 볼 수 있습니다 |
| `mocco_runs_get` | 실행 하나. 단계, 실행을 붙잡고 있는 게이트(`itemIndex` 포함), 게이트를 풀 조건 |
| `mocco_approvals_search` | 지금 사람의 결정을 기다리는 것. 각 요청에는 무엇에 관한 것인지 짧은 레이블이 붙습니다("Production", "production channel", "Shopper (iOS)") |
| `mocco_approvals_get` | 요청 하나. 고정된 변경, 요구 조건, 지금까지의 투표 |
| `mocco_flags_search` | 프로젝트의 기능 플래그. 키나 설명 텍스트, 수명 주기, 저장소가 정의한 플래그인지로 찾을 수 있고, 각 플래그가 어디에서 켜져 있는지도 보여 줍니다 |
| `mocco_flags_get` | 플래그 하나. 변형, 환경별로 제공하는 값, `.mocco/flags.yml`이 관리하는지 여부 |
| `mocco_flags_changesets_search` | 보호된 환경에서 승인을 기다리는 플래그 변경. 각 변경을 결정하는 승인 요청이 함께 나옵니다 |
| `mocco_flags_changesets_get` | 플래그 변경 하나. 바뀌는 내용, 상태, 승인하면 적용될 내용, 지금까지의 투표 |
| `mocco_flags_environments_list` | 프로젝트의 플래그 환경, 그중 보호된 환경, 각 환경의 현재 버전 |
| `mocco_flags_segments_search` | 환경의 세그먼트. 키나 이름으로 찾을 수 있고, 포함하는 대상과 제외하는 대상이 나옵니다 |
| `mocco_flags_preview` | 특정 사용자나 컨텍스트에 대해 환경의 플래그가 무엇을 제공할지. 지금 상태나 저장하지 않은 변경을 반영한 상태 모두 볼 수 있습니다 |
| `mocco_flags_ruleset_get` | SDK가 환경에 대해 읽는 룰셋. 버전, ETag, 각 플래그의 상태(detailed로 요청하면 문서 전체) |
| `mocco_flags_deploy_check` | 플래그를 켜기 전에, 환경이 마지막으로 배포한 코드에 그 플래그의 키가 있는지 |
| `mocco_flags_timeline_search` | 환경의 플래그 변경과 파이프라인 실행을 최신순으로. 배포 전후에 무엇이 바뀌었는지 볼 수 있습니다 |
| `mocco_flags_usage_search` | 최근 며칠 동안 SDK가 각 플래그를 얼마나 자주 평가했는지, 각 플래그가 마지막으로 확인된 시점 |
| `mocco_flags_stale_search` | 제거해도 될 것 같은 플래그. 사용하지 않거나, 한 번도 평가되지 않았거나, 모두에게 같은 변형 하나만 제공하는 플래그입니다 |
| `mocco_flags_file_syncs_search` | 최근 `.mocco/flags.yml` 동기화, 각 동기화의 결과, 파일이 거부된 이유 |
| `mocco_ota_channels_search` | 각 OTA 채널이 지금 제공하는 것. 플랫폼과 런타임 버전별 릴리스, 진행 중인 롤아웃과 그 비율, 일시 중지나 롤백 여부 |
| `mocco_ota_releases_search` | CI가 업로드한 OTA 릴리스를 최신순으로. 메시지나 커밋, 런타임 버전, 상태, 플랫폼으로 찾을 수 있습니다 |
| `mocco_ota_adoption_get` | 최근 24시간 동안 체크인한 기기 수(채널과 릴리스별), 앱의 월간 활성 기기 수 |
| `mocco_ota_version_policies_search` | 각 iOS·Android 앱의 최소 지원 버전, 권장 버전, 차단 버전, 이를 강화할 때 승인이 필요한지 여부 |
| `mocco_desktop_releases_search` | 데스크톱 앱의 릴리스를 최신순으로. 상태, 버전 접두사, 해당 릴리스를 제공하는 채널로 찾을 수 있습니다 |
| `mocco_desktop_releases_get` | ID나 버전으로 찾은 데스크톱 릴리스 하나. 상태(실패하거나 철회된 이유 포함), 파일과 크기, SHA-256, 서명 키 ID, 릴리스를 제공하는 채널 |
| `mocco_desktop_releases_channels` | 데스크톱 앱의 각 채널이 지금 플랫폼별로 제공하는 것 |
| `mocco_desktop_releases_stats` | 각 버전이 하루에 몇 번 다운로드되었는지. 사람과 업데이터로 나누어 보여 줍니다 |
| `mocco_projects_search` | 워크스페이스의 프로젝트와 그 앱, 워크스페이스에서 켜 둔 제품 라인 |
| `mocco_projects_create` | 워크스페이스에 프로젝트를 만듭니다 |
| `mocco_projects_apps_add` | 프로젝트에 앱(React Native, iOS, Android, 웹, 서버)을 추가합니다 |
| `mocco_products_enable` | OTA 같은 제품 라인을 워크스페이스에서 켭니다 |
| `mocco_ota_setup_get` | 프로젝트의 React Native 앱. Mocco가 호스팅하는 앱마다 매니페스트 URL과 `expo.updates` 블록, 채널, 서명 인증서, 신뢰하는 저장소, 첫 업데이트 전에 아직 빠져 있는 것 |
| `mocco_ota_apps_host` | React Native 앱의 OTA 업데이트를 Mocco에서 호스팅하고, 매니페스트 URL을 알려 줍니다 |
| `mocco_ota_channels_create` | 호스팅하는 앱에 `staging` 같은 보호되지 않은 채널을 추가합니다 |
| `mocco_ota_certificates_add` | 앱에 내장된 코드 서명 인증서를 등록해, 그 키로 서명한 업데이트를 Mocco가 받아들이게 합니다 |
| `mocco_ota_trust_policies_create` | 저장된 키 없이 Actions에서 배포할 수 있도록 GitHub 저장소를 신뢰하고, 그 저장소가 승격할 수 있는 보호되지 않은 채널을 지정합니다 |
| `mocco_status_pages_get` | 상태 페이지가 지금 말하는 내용. 각 컴포넌트와 표시 중인 상태, 진행 중인 인시던트와 점검 수를 포함합니다 |
| `mocco_status_incidents_search` | 열려 있는(또는 열려 있었던) 인시던트를 최신순으로. 상태, 심각도, 페이지, 제목 텍스트로 찾을 수 있고, 사람이 열었는지 모니터가 열었는지 배포 감시가 열었는지도 알려 줍니다 |
| `mocco_status_incidents_get` | 인시던트 하나. 출처, 배포 감시가 의심하는 실행(링크 포함), 게시된 모든 업데이트, 영향받는 컴포넌트와 그 정도, 포스트모템, 연결된 배포 |
| `mocco_status_maintenances_search` | 예정되었거나 진행 중인 점검 시간과 각각이 다루는 컴포넌트 |
| `mocco_status_monitors_search` | 프로젝트의 HTTP, TCP, 하트비트 모니터. 각 모니터가 확인하는 대상(호스트만), 상태(예: 중단된 모니터)와 그 시작 시점, 보고하는 컴포넌트가 나오고, 하트비트라면 주기, 유예 시간, 마지막 핑, 마지막 실행도 나옵니다 |
| `mocco_status_monitors_get` | 모니터 하나. 최근 상태 변경과 그 이유, 최근 라운드, 아직 열려 있는 인시던트 |
| `mocco_status_locations_search` | 모니터가 실행되는 위치. Mocco가 호스팅하는 리전, 프라이빗 위치, 내장 프로브와 각 에이전트가 마지막으로 확인된 시점 |
| `mocco_status_run_incidents_list` | 프로젝트 전체에서 실행에 연결된 상태 인시던트 |
| `mocco_status_gate_maintenances_search` | 상태 페이지에 점검을 알리는 파이프라인 게이트와 각 게이트가 알리는 내용 |
| `mocco_help_articles_search` | 질문과 일치하는 게시된 헬프 센터 글(모든 단어 일치, 고객 메시지라면 일부 단어 일치), 또는 모든 글을 순서대로. 번역된 언어가 있으면 그 언어로 보여 줍니다 |
| `mocco_help_articles_get` | 게시된 헬프 센터 글 하나의 Markdown(번역된 언어가 있으면 요청한 언어로), 게시된 언어 목록, 최근 30일 동안 독자가 "Was this helpful?"에 답한 결과(detailed로 요청하면 최신 댓글 포함) |
| `mocco_help_translations_list` | 헬프 센터의 번역 진행 상황. 언어별로 검수됨, 기계 번역, 오래됨, 실패, 번역 안 됨 글의 수와 주의가 필요한(또는 오래되거나 실패한, 또는 전체) 글이 나옵니다. git, 사람, 기계 중 어디에서 온 텍스트인지로 좁힐 수 있고, 언어별로 각 글의 상태와 출처가 나옵니다 |
| `mocco_help_translation_get` | 한 언어로 된 글 하나. 검수한 사람과 시점, 기다리고 있는 기계 초안이 있는지, 번역된 뒤 원문에서 정확히 어떤 문장이 바뀌었는지(detailed로 요청하면 텍스트 포함) |
| `mocco_help_glossary_list` | 모든 번역이 따르는 헬프 센터 용어집. 모든 언어에서 표기 그대로 두는 이름과 언어별로 하나의 방식으로 고정해 번역하는 단어. 텍스트, 규칙, 언어로 찾을 수 있습니다 |
| `mocco_help_site_get` | 편집자가 보는 헬프 센터. 주소, 언어, 콘텐츠를 git에서 관리하는지와 어디에서 관리하는지, 컬렉션과 섹션 및 각각의 글 수 |
| `mocco_help_drafts_list` | 게시 여부와 관계없이 모든 헬프 센터 글. 초안 제목과 아직 게시하지 않은 변경이 초안에 있는지 나옵니다. 상태, 컬렉션, 섹션, 제목으로 찾을 수 있습니다 |
| `mocco_help_draft_get` | 편집기가 보여 주는 대로의 헬프 센터 글 하나. 초안의 Markdown과 게시된 리비전 |
| `mocco_help_revisions_list` | 글의 이력을 최신순으로, 또는 이전 리비전 하나를 전체로 |
| `mocco_messenger_conversations_search` | 열려 있는(또는 닫힌) 메신저 대화를 최근 활동순으로. 담당자(본인, 특정인, 담당자 없음)나 연락처(ID, 이메일, 앱의 사용자 ID)로 찾을 수 있고, 마지막 메시지 미리보기와 읽었는지 여부가 나옵니다 |
| `mocco_messenger_conversation_get` | 대화 하나의 스레드. 사용자와 팀이 보낸 모든 메시지(내부 메모는 표시됨)와 각 첨부 파일의 이름, 유형, 크기 |
| `mocco_messenger_settings_get` | 프로젝트의 메신저가 설정되었는지, 사용자가 고르는 카테고리, 로그인하지 않은 사람도 글을 쓸 수 있는지. ID 시크릿은 절대 나오지 않습니다 |
| `mocco_messenger_inbox_members_list` | 새 대화를 맡는 사람(라운드 로빈)을 순서대로, 각자가 응대 가능한지 자리 비움인지 |
| `mocco_feedback_boards_list` | 프로젝트의 피드백 보드, 각 보드의 공개 여부, 순서대로 나열한 카테고리 |
| `mocco_feedback_posts_search` | 보드의 게시물. 상태(검토 중, 계획됨, 진행 중, 출시됨, 종료)나 최신순, 카테고리로 찾을 수 있고, 한 번에 한 페이지씩 나옵니다 |
| `mocco_feedback_post_get` | 피드백 게시물 하나와 그것이 거친 모든 상태와 시점 |
| `mocco_feedback_ship_suggestions_list` | 피드백 게시물을 출시됨으로 표시하라고 기다리는 릴리스. 커밋, 승인한 사람, 게시물, 변경 로그 초안 항목이 나옵니다 |
| `mocco_feedback_votes_list` | 피드백 게시물에 투표한 사람(최종 사용자마다 앱의 ID), 각 투표가 이미 집계되는지 이메일 확인을 기다리는지 |
| `mocco_feedback_comments_list` | 팀이 보는 대로의 피드백 게시물 댓글. 최종 사용자의 댓글, 공식 답변, 표시된 내부 메모 |
| `mocco_feedback_board_get` | 피드백 보드 하나. 공개 여부, 카테고리, 이 보드의 게시물을 출시하는 릴리스 |
| `mocco_feedback_subscribers_list` | 피드백 게시물을 팔로우하는 사람. 한 번에 한 페이지씩 나옵니다 |
| `mocco_feedback_duplicates_list` | 아직 결정하지 않은 보드의 중복 의심 건과 두 게시물 |
| `mocco_feedback_intake_preview` | 메신저 대화를 피드백 게시물로 바꿀 때 시작점이 되는 것. 제목, 고객의 말, 중복일 수 있는 보드의 게시물 |
| `mocco_feedback_source_posts_list` | 메신저 대화가 변환된 피드백 게시물 |
| `mocco_feedback_post_sources_list` | 피드백 게시물의 출처가 된 메신저 대화와 고객의 말 |
| `mocco_changelog_entries_search` | 피드백 보드의 변경 로그 항목. 초안, 예약됨, 게시됨이 있고 한 번에 한 페이지씩 나옵니다 |
| `mocco_changelog_entry_get` | 변경 로그 항목 하나. 상태, 태그, 이 항목이 알리는 게시물, 본문 |
| `mocco_feedback_links_list` | 피드백 게시물에 연결된 GitHub 이슈와 풀 리퀘스트. 열림, 닫힘, 병합됨 여부, 병합 커밋, 연결된 이슈를 닫는 풀 리퀘스트가 나옵니다 |
| `mocco_feedback_github_search` | 프로젝트에 연결된 GitHub 저장소의 이슈나 풀 리퀘스트를 단어나 번호로 찾아, 게시물에 연결할 수 있게 합니다 |
| `mocco_notifications_channels_search` | Mocco가 게시하는 Discord 채널과, 비활성화된 채널이 비활성화된 이유 |
| `mocco_notifications_rules_search` | 어떤 이벤트가 어떤 채널로 가는지. 각 규칙의 이벤트 유형, 소스, 필터 |
| `mocco_notifications_activity_search` | 각 웹훅과 Mocco 이벤트가 어떻게 되었는지. 채널별로 전송됨 또는 실패(오류 포함), 또는 아무것도 받지 못한 이유 |
| `mocco_inbound_sources_search` | 워크스페이스가 가진 Sentry, Vercel, GitHub 웹훅 소스, 각 소스가 전송을 받는지, 가장 최근 전송이 어떻게 되었는지 |

읽기 도구는 `responseFormat`을 받습니다. 기본값은 `concise`이고, 에이전트가 커밋과 게이트 요구 조건까지 필요로 할 때는 `detailed`를 씁니다. 이렇게 하면 요청하지 않은 행이 컨텍스트를 차지하지 않습니다.

**어느 워크스페이스인가요?** 속한 워크스페이스가 하나라면 아무 말도 하지 않아도 됩니다. 여러 개라면 도구가 어느 것인지 묻고 이름을 알려 줍니다. 속하지 않은 워크스페이스는 존재 여부와 관계없이 거부됩니다.

**어느 프로젝트인가요?** 플래그 도구는 프로젝트 하나를 읽습니다. 워크스페이스에 프로젝트가 하나라면 아무 말도 하지 않아도 됩니다. 그렇지 않으면 도구가 고를 수 있는 프로젝트의 이름을 알려 줍니다. 콘솔과 마찬가지로 워크스페이스에서 기능 플래그를 켜 둔 경우에만 응답합니다. 환경은 `production` 같은 키로 지정합니다. 알 수 없는 환경은 거부되며, 프로젝트가 가진 키가 함께 안내됩니다. 미리보기는 변경을 포함하더라도 아무것도 저장하지 않습니다. 사용 횟수는 SDK가 보고한 것만 집계하므로, 어떤 SDK도 평가하지 않은 플래그는 목록에 없습니다. 플래그를 바꾸려면 아래 **플래그 변경하기**를 보세요. `.mocco/flags.yml`이 관리하는 플래그는 저장소에서만 바꿀 수 있습니다.

OTA 도구도 같은 방식으로 프로젝트를 고르며, OTA를 켜 둔 경우에만 응답합니다. 채널, 릴리스, 도입 도구는 호스팅하는 앱 하나를 읽습니다. 프로젝트가 앱 하나를 호스팅한다면 `appId`를 생략하고, 그렇지 않으면 도구가 고를 수 있는 앱의 이름을 알려 줍니다. 이 도구들은 읽기만 합니다. 승격, 롤아웃, 일시 중지, 롤백, 버전 정책 변경은 콘솔이나 `mocco ota`로 하세요.

상태 페이지 도구도 같은 방식으로 프로젝트를 고르며, 상태 페이지를 켜 둔 경우에만 응답합니다. `mocco_status_pages_get`은 페이지 하나를 읽습니다. 프로젝트에 페이지가 하나라면 `pageId`를 생략하고, 그렇지 않으면 도구가 고를 수 있는 페이지의 이름을 알려 줍니다. 인시던트와 점검 검색은 페이지를 지정하지 않으면 프로젝트의 모든 페이지를 읽습니다. 모니터는 확인하는 호스트만 보여 줍니다. 전체 URL, 요청 본문, 키워드에는 자격 증명이 들어 있을 수 있으므로 서버에만 남습니다. 하트비트는 주기, 유예 시간, 작업이 마지막으로 핑을 보낸 시점, 마지막 실행에 걸린 시간을 보여 주며 핑 토큰은 절대 보여 주지 않습니다. 위치 도구는 어느 멤버에게든 워크스페이스 전체를 읽어 주고 위치의 토큰은 절대 반환하지 않습니다. 인시던트에는 사람이 열었는지, 모니터가 열었는지, 배포 감시가 열었는지가 나옵니다. 배포 감시가 연 인시던트라면 의심하는 실행의 이름을 알려 주고 콘솔의 해당 링크를 보여 줍니다. 지금 모니터 확인하기(아래)를 제외하면 읽기만 합니다. 인시던트 선언, 업데이트 게시, 점검 예약, 모니터나 위치 추가·일시 중지·변경은 콘솔에서 하세요.

메신저 도구도 같은 방식으로 프로젝트를 고르며, 메신저를 켜 둔 경우에만 워크스페이스의 어느 멤버에게든 응답합니다. 인박스와 마찬가지입니다. 팀이 인박스에서 내부 메모를 보기 때문에 내부 메모도 읽습니다. 첨부 파일은 이름, 유형, 크기로만 돌아오며 파일 링크는 주지 않습니다. 파일을 보려면 콘솔에서 대화를 여세요. 사용자의 이메일, 앱에서 쓰는 사용자 ID, 특성, 글을 쓴 기기는 `detailed` 응답에만 들어 있습니다.

피드백 도구도 같은 방식으로 프로젝트를 고르며, 피드백을 켜 둔 경우에만 워크스페이스의 어느 멤버에게든 응답합니다. 게시물 본문은 `detailed` 응답을 요청하지 않으면 짧게 잘려 나옵니다. `detailed` 응답에는 작성자와 각 상태를 바꾼 사람도 (사용자 ID로) 나옵니다.

알림과 웹훅 소스 도구는 고를 프로젝트 없이 워크스페이스 전체를 읽으며, 콘솔과 마찬가지로 어느 멤버에게든 응답합니다. 서명 시크릿이나 토큰은 절대 반환하지 않습니다. 소스는 시크릿이 있는지만 알려 주고, detailed 응답은 벤더에 설정한 ingest URL을 알려 줍니다. 모든 전송은 서명도 되어 있어야 하므로 이 URL만으로는 자격 증명이 되지 않습니다. 알림이 도착하지 않은 이유를 알아보려면 소스나 채널을 지정해 활동 추적을 요청하세요. 이 도구들은 읽기만 합니다. 채널 연결, 규칙 편집, 소스 추가는 콘솔이나 아래의 변경 도구로 하세요. `SECRETS_ENCRYPTION_KEYS`가 없는 자체 호스팅 서버에서는 소스 도구가 웹훅 소스가 설정되지 않았다고 알려 줍니다.

**결정은 따로 분리되어 있고 기본값은 꺼짐입니다.**

| 도구 | 하는 일 |
|---|---|
| `mocco_approvals_vote` | 대기 중인 요청을 본인으로서 승인하거나 거부합니다. 이유는 선택입니다 |
| `mocco_gates_resume` | 실행이 멈춘 게이트를 본인으로서 재개하거나 거부합니다. 이유는 선택입니다 |
| `mocco_notifications_channels_connect` | 워크스페이스 서버의 Discord 채널을 알림 채널로 연결합니다. Mocco가 테스트 메시지를 게시합니다 |
| `mocco_notifications_channels_reenable` | 봇이 다시 접근할 수 있게 되면, 비활성화된 알림 채널을 다시 켭니다 |
| `mocco_notifications_rules_add` | 이벤트 유형(한 소스 또는 모든 소스에서, 필요하면 이벤트 값으로 필터링)을 채널로 보냅니다 |
| `mocco_notifications_rules_remove` | 규칙을 제거해 그 규칙의 이벤트가 채널로 가지 않게 합니다 |
| `mocco_notifications_presets_apply` | 채널에 준비된 규칙 세트(`mocco`, `sentry`, `vercel`, `github`)를 추가합니다. 이미 있는 규칙은 건너뜁니다 |
| `mocco_inbound_sources_create` | GitHub 웹훅 소스를 추가합니다. 서명 시크릿은 에이전트에게 절대 보이지 않습니다 |
| `mocco_inbound_sources_pause` / `_resume` | 웹훅 소스를 일시 중지하거나(전송이 거부됨) 재개합니다 |
| `mocco_inbound_sources_delete` | 웹훅 소스와 그 소스가 받은 전송 기록을 삭제합니다 |
| `mocco_monitors_check` | 간격을 기다리지 않고, 예를 들어 배포 직후에, HTTP 또는 TCP 모니터의 다음 라운드를 지금 실행합니다 |
| `mocco_status_incident_create` | 본인으로서 상태 페이지에 인시던트를 엽니다. 즉시 공개되고 페이지 구독자에게 발송됩니다 |
| `mocco_status_incident_update_post` | 본인으로서 인시던트에 업데이트를 게시하고 상태를 옮깁니다(resolved까지 올리면 인시던트가 닫힙니다) |
| `mocco_status_incident_components_set` | 인시던트가 영향을 주는 컴포넌트와 그 정도를 교체합니다 |
| `mocco_status_incident_postmortem_set` | 인시던트의 포스트모템을 설정하거나 지웁니다 |
| `mocco_status_incident_run_link` / `_run_unlink` | 배포를 인시던트에(또는 해결책으로) 연결하거나 연결을 제거합니다 |
| `mocco_status_incident_runs_correlate` | 인시던트에 대해 Mocco가 제안하는 배포를 다시 계산합니다. 사람이 연결한 배포는 그대로 남습니다 |
| `mocco_status_maintenance_schedule` / `_cancel` | 점검 시간을 예약하거나 취소합니다(진행 중인 기간은 지금 끝납니다) |
| `mocco_status_component_status_set` | 컴포넌트가 보고하는 상태를 직접 설정합니다 |
| `mocco_status_page_create` / `_page_update` | 상태 페이지를 만들거나 제목이나 주소를 바꿉니다 |
| `mocco_status_group_create` / `_update` / `_delete` | 컴포넌트 그룹을 추가하고, 이름을 바꾸거나 옮기고, 삭제합니다(컴포넌트는 그룹 없이 남습니다) |
| `mocco_status_component_create` / `_update` / `_delete` | 컴포넌트를 추가하고, 바꾸고, 삭제합니다 |
| `mocco_status_monitor_create` / `_update` | HTTP 또는 TCP 모니터를 만들거나, URL을 다시 읽지 않고 모니터의 설정을 바꿉니다 |
| `mocco_status_monitor_pause` / `_resume` / `_delete` | 모니터를 일시 중지하거나, 재개하거나, 삭제합니다 |
| `mocco_status_gate_maintenance_set` / `_delete` | 파이프라인 게이트가 페이지에 점검을 알리게 하거나 중단합니다 |
| `mocco_messenger_reply` | 본인으로서 메신저 대화에 텍스트 답장을 보냅니다. 사용자는 앱에서 읽습니다 |
| `mocco_messenger_assign` | 메신저 대화를 워크스페이스 멤버(본인 또는 다른 사람) 또는 담당자 없음으로 넘깁니다 |
| `mocco_messenger_note_create` | 본인으로서 대화에 내부 메모를 남깁니다. 팀만 볼 수 있습니다 |
| `mocco_messenger_conversation_set_status` | 본인으로서 대화를 닫거나 닫힌 대화를 다시 엽니다 |
| `mocco_messenger_contact_set_blocked` | 사용자가 팀에 글을 쓰지 못하게 하거나(읽기는 가능) 다시 쓸 수 있게 합니다 |
| `mocco_messenger_categories_set` | 사용자가 대화를 시작할 때 고르는 카테고리를 교체합니다 |
| `mocco_messenger_guest_access_set` | 로그인하지 않은 사람도 (이메일을 남기고) 글을 쓸 수 있게 하거나, 로그인한 사용자만 받습니다 |
| `mocco_messenger_inbox_members_add` / `_remove` | 워크스페이스 멤버를 라운드 로빈 순환에 넣거나 뺍니다 |
| `mocco_messenger_inbox_members_set_availability` | 본인(또는 순환에 있는 다른 사람)을 응대 가능 또는 자리 비움으로 표시합니다 |
| `mocco_feedback_post_set_status` | 본인으로서 피드백 게시물을 다른 상태로 옮기고 이력에 기록합니다 |
| `mocco_feedback_ship_suggestions_accept` | 본인으로서 릴리스가 출시한 게시물을 출시됨으로 표시합니다. 이메일 투표자에게 메일이 갑니다 |
| `mocco_feedback_ship_suggestions_dismiss` | 본인으로서 릴리스의 출시 제안을 치워 둡니다. 게시물은 그대로 남습니다 |
| `mocco_feedback_comment_create` | 본인으로서 피드백 게시물에 댓글을 답니다. 공개 댓글, 공식 답변, 팀만 보는 내부 메모 중 하나입니다 |
| `mocco_feedback_post_vote` | 본인으로서 최종 사용자를 대신해 피드백 게시물에 투표를 기록합니다. 즉시 집계됩니다 |
| `mocco_feedback_post_merge` | 본인으로서 중복된 피드백 게시물을 원래 게시물에 병합합니다. 투표와 팔로워가 옮겨 갑니다 |
| `mocco_feedback_board_create` / `_update` | 본인으로서 피드백 보드를 만들거나, 이름을 바꾸거나, 주소를 옮기거나, 공개 또는 비공개로 바꿉니다 |
| `mocco_feedback_board_release_policy_set` | 본인으로서 보드의 게시물을 출시하는 릴리스와 먼저 물어볼지 여부를 설정합니다 |
| `mocco_feedback_category_create` / `_update` / `_delete` | 본인으로서 보드의 카테고리를 추가하고, 바꾸고, 삭제합니다. 삭제된 카테고리의 게시물은 카테고리 없이 남습니다 |
| `mocco_feedback_post_create` / `_update` | 본인으로서 팀 명의로 피드백 게시물을 쓰거나 제목, 세부 내용, 카테고리를 편집합니다 |
| `mocco_feedback_post_unvote` | 본인으로서 최종 사용자를 대신해 피드백 게시물의 투표를 제거합니다 |
| `mocco_feedback_duplicate_dismiss` | 본인으로서 중복으로 제안된 한 쌍을 서로 다른 요청으로 표시합니다 |
| `mocco_feedback_intake_convert` | 본인으로서 메신저 대화를 새 피드백 게시물로 바꾸거나 기존 게시물에 추가합니다 |
| `mocco_changelog_entry_create` / `_update` | 본인으로서 변경 로그 초안 항목을 시작하거나 편집합니다 |
| `mocco_changelog_entry_publish` / `_schedule` / `_unpublish` | 본인으로서 변경 로그 항목을 지금 또는 지정한 시각에 게시하거나, 초안으로 되돌립니다 |
| `mocco_changelog_entry_delete` | 본인으로서 변경 로그 항목을 삭제합니다 |
| `mocco_feedback_post_link` | 본인으로서 GitHub 이슈나 풀 리퀘스트를 피드백 게시물에 연결합니다 |
| `mocco_feedback_post_unlink` | 본인으로서 피드백 게시물의 GitHub 연결을 제거합니다. GitHub에서는 아무것도 바뀌지 않습니다 |
| `mocco_help_translation_accept` | 본인으로서, 오래된 검수 번역 옆에서 기다리는 기계 초안을 검수된 텍스트로 받아들입니다 |
| `mocco_help_translation_retranslate` | 헬프 센터 글의 한 언어를 기계가 다시 번역하게 합니다. 사람이 검수한 언어는 정확히 그것을 확인했을 때만 교체됩니다 |
| `mocco_help_glossary_set` | 모든 번역이 따르는 헬프 센터 용어집의 용어를 추가, 변경, 제거합니다 |
| `mocco_help_site_enable` | 프로젝트의 헬프 센터를 설정합니다. 주소와 언어를 정합니다 |
| `mocco_help_site_release` | 콘텐츠를 git에서 관리하는 헬프 센터를 소유자나 관리자가 콘솔로 돌려줍니다. 글은 그대로 남고, 다음 `mocco help push`가 다시 가져갑니다 |
| `mocco_help_collection_create` / `mocco_help_section_create` | 컬렉션을 추가하거나 컬렉션에 섹션을 추가합니다 |
| `mocco_help_article_create` | 헬프 센터 글을 게시하지 않은 초안으로 만듭니다. 본문이 주어지면 함께 넣습니다 |
| `mocco_help_draft_save` / `mocco_help_draft_restore` | 글의 초안을 교체하거나, 이전 리비전을 다시 초안으로 만듭니다 |
| `mocco_help_article_publish` / `_unpublish` / `_delete` | 글의 초안을 게시하거나, 사이트에서 내리거나, 완전히 삭제합니다 |
| `mocco_flags_create` | 기능 플래그를 만듭니다(불리언, 또는 직접 정한 변형을 가진 문자열, 숫자, JSON). 모든 환경에 비활성화된 상태로 추가됩니다 |
| `mocco_flags_environments_create` | 보호되지 않은 플래그 환경을 만듭니다. 모든 플래그가 비활성화된 상태입니다 |
| `mocco_flags_changesets_create` | 환경의 플래그를 변경합니다. 보호되지 않은 환경에서는 즉시 적용되고, 보호된 환경에서는 승인 요청이 됩니다 |
| `mocco_flags_changesets_withdraw` / `_rebase` | 본인이 제안한 대기 중인 플래그 변경을 철회하거나, 환경의 현재 버전을 기준으로 다시 제안합니다 |
| `mocco_flags_set_client_visible` | 브라우저와 앱이 플래그를 평가할 수 있게 하거나 막습니다 |
| `mocco_flags_environments_link_pipeline` | 환경의 타임라인과 배포 확인을 위해 환경을 저장소의 파이프라인에 연결하거나 연결을 해제합니다 |
| `mocco_flags_stale_dismiss` | 오래된 플래그 발견 항목을 지정한 날짜까지 숨기거나 다시 보여 줍니다 |

결정은 소유자나 관리자가 워크스페이스별로 켭니다(아래). 켜기 전까지 에이전트는 변경이 두 번째 승인을 기다리고 있다고 알려 줄 수는 있어도, 그 승인이 될 수는 없습니다.

결정을 켜 두면 모든 결정은 먼저 사용자에게 확인을 구합니다. 투표라면 클라이언트가 곧 일어날 일을 보여 줍니다. 승인인지 거부인지, 요청의 종류, 무엇에 관한 것인지, 통과시킬 정확한 변경, 그리고 사용자의 이유입니다. 멈춘 실행이라면 재개인지 거부인지(거부하면 실행이 중단됩니다), 저장소, 브랜치와 함께 커밋, 게이트와 그 요구 조건, 그리고 사용자의 이유를 보여 줍니다. 사용자가 yes라고 답하기 전에는 아무것도 기록되지 않습니다. 거절하거나 프롬프트를 닫으면 투표는 기록되지 않습니다. 이 확인은 Mocco가 만든 프롬프트가 아니라 프로토콜 자체의 단계입니다. 에이전트가 어딘가에서 읽은 텍스트가 프로덕션 배포로 이어지는 것을 막아 주는 장치입니다. 확인은 5분 동안만, 그리고 보여 준 결정에 대해서만 유효합니다. 결정이나 이유를 바꾸면 다시 확인을 구합니다.

알림 변경은 무엇이 바뀌는지 정확히 보여 줍니다. 연결할 서버와 채널, 다시 켤 채널과 꺼져 있는 이유, 추가하거나 제거할 규칙의 이벤트 유형, 소스, 필터, 채널, 또는 프리셋의 모든 규칙입니다. 콘솔과 마찬가지로 알림 설정은 소유자나 관리자만 바꿀 수 있으며, 일반 멤버는 확인을 구하기 전에 거부됩니다.
연결할 채널을 찾으려면 `mocco_notifications_discord_channels_search`를 쓰세요. Mocco 봇이 서버에서 볼 수 있는 텍스트 채널과 이미 연결된 채널을 보여 줍니다. 읽기 도구이지만 공용 봇의 Discord 호출을 쓰기 때문에 소유자와 관리자만 쓸 수 있습니다.
Discord 서버에 봇을 설치하는 일과 채널을 제거하는 일은 당분간 콘솔에서 합니다.

**플래그 변경하기.** 플래그 도구는 콘솔과 같은 방식으로 플래그를 변경하며, 무엇도 승인하지 않습니다. 보호되지 않은 환경의 변경은 즉시 적용됩니다. 보호된 환경의 변경은 콘솔이 여는 것과 같은 승인 요청을 열고, 요구되는 역할을 가진 사람이 콘솔이나 `mocco_approvals_vote`로 결정합니다. 이렇게 플래그 변경에 투표하면 클라이언트가 그 diff(`flag new-checkout enabled: false → true`)를 보여 줍니다. 승인은 정확히 그 변경을 적용하거나 아무것도 적용하지 않습니다. 플래그를 변경하기 전에 클라이언트는 환경, 보호 여부, 승인해야 하는 사람, 바뀌는 모든 값, 그리고 사용자의 이유를 보여 줍니다. 답하기 전에 환경이 바뀌면 답은 거부되고 새로운 상태로 다시 확인을 구합니다. 대기 중인 변경은 편집할 수 없습니다. 철회하고 새로 제안하거나, 현재 버전을 기준으로 같은 변경을 다시 제안하세요(이전 투표는 넘어가지 않습니다). 변경을 제안한 사람만 철회하거나 리베이스할 수 있습니다. `.mocco/flags.yml`이 관리하는 플래그는 거부됩니다. 저장소에서 바꾸세요. 이 도구들은 별도의 권한이 필요하며, 처음 쓸 때 요청합니다. **Create feature flags and propose flag changes as you; protected environments still wait for approval**. 에이전트가 쓸 수 없는 것은 킬 스위치(승인을 건너뛰므로 에이전트가 쓰게 할지는 아직 정하는 중입니다), 플래그를 끌 수 있는 사람 정하기, 환경을 보호하거나 변경을 승인할 사람 바꾸기입니다. 이 일은 콘솔에서 하세요.

**지금 모니터 확인하기.** `mocco_monitors_check`는 파이프라인 단계가 `POST /v1/monitors/{id}/check`로 하는 일과 같습니다. 프로브가 서비스를 즉시 확인하고, 프로브가 보고하면 `mocco_status_monitors_get`이 결과를 보여 줍니다. 모니터의 다음 라운드를 앞당기므로 다른 변경과 같은 규칙을 따릅니다. 워크스페이스가 에이전트의 변경을 허용해야 하고, 클라이언트가 먼저 모니터, 확인하는 대상, 상태, 다음 라운드 예정 시각을 보여 줍니다. yes라고 답하기 전에는 아무것도 실행되지 않습니다. 이 도구는 별도의 권한이 필요하며, 처음 쓸 때 요청합니다. **Change your status pages as you**(아래). 프로젝트의 어느 멤버든 콘솔과 마찬가지로 모니터를 확인할 수 있습니다. 하트비트(작업이 핑을 보냅니다)와 일시 중지된 모니터는 아무것도 묻기 전에 거부됩니다.

**에이전트에서 인시던트 운영하기.** 같은 권한과 같은 워크스페이스 스위치로 에이전트가 상태 페이지의 인시던트와 점검 화면에서 하는 일을 할 수 있습니다. 인시던트 열기, resolved까지 업데이트 게시, 영향받는 컴포넌트 변경, 포스트모템 설정, 원인이나 해결책이 된 배포 연결, 점검 예약과 취소, 컴포넌트 상태 설정입니다. 이 권한은 그중 하나를 처음 쓸 때 요청합니다. **Change your status pages as you: incidents, maintenance, components and monitors, and run your monitors' checks**. 콘솔과 마찬가지로 프로젝트의 어느 멤버든 쓸 수 있으며, 각 작업은 사용자의 이름과 함께 감사 기록에 남습니다.

에이전트가 게시된 인시던트에 쓰는 내용은 고객이 읽는 내용입니다. 그래서 클라이언트는 항상 실제로 보일 모습 그대로 먼저 보여 주고, 페이지와 구독자에게 나가는 경우에는 **PUBLIC**이라고 표시합니다. 새 인시던트라면 페이지, 제목, 심각도, 상태, 영향받는 컴포넌트, 첫 업데이트가 나옵니다. 업데이트라면 인시던트의 현재 상태와 최신 업데이트, 업데이트가 옮기는 상태, 사용자의 텍스트가 나옵니다. 초안 인시던트(모니터가 열었고 팀만 볼 수 있는 인시던트)에 대한 업데이트는 콘솔에만 남는다고 알려 줍니다. yes라고 답하기 전에는 아무것도 게시되지 않습니다. 각 확인은 보여 준 내용에 대해서만 유효합니다. 답하기 전에 동료가 업데이트를 게시하거나 컴포넌트를 바꾸거나 포스트모템을 편집하면 답은 거부되고, 지금의 내용으로 다시 확인을 구합니다. 같은 확인에 두 번 답해도 변경은 한 번만 일어납니다. 인시던트가 할 수 없는 이동(investigating으로 되돌리기, resolved 이후의 모든 이동)은 확인을 구하기 전에 거부되고, 가능한 이동이 안내됩니다.

같은 권한이 페이지 설정도 포함합니다. 페이지, 컴포넌트 그룹과 컴포넌트, 모니터, 점검을 알리는 게이트입니다. 모니터의 URL에는 자격 증명이나 토큰이 들어 있을 수 있으므로 에이전트는 URL을 다시 읽지 않습니다. 확인과 응답에는 호스트만 나오며, 모니터의 설정을 바꿀 때 새 확인 대상을 주지 않으면 기존 확인이 유지됩니다.

일부는 의도적으로 콘솔에만 남겨 둡니다. 상태 페이지 삭제(페이지의 모든 것이 삭제되며 되돌릴 수 없습니다), 하트비트 만들기, 위치의 토큰이나 하트비트의 핑 URL 발급과 교체(자격 증명은 한 번만 보여 주며 에이전트에게는 절대 보여 주지 않습니다), 위치 비활성화입니다.

**메신저에서 답장하고 담당자 지정하기.** `mocco_messenger_reply`는 인박스의 **Send**가 하는 일을 합니다. 사용자는 앱에서 답장을 읽고, 푸시 알림을 켜 두었다면 푸시 알림도 받습니다. 클라이언트가 먼저 받는 사람과 정확한 텍스트를 보여 주며, yes라고 답하기 전에는 아무것도 전송되지 않습니다. 확인은 대화의 마지막 메시지 이후의 답장에 대해서만 유효하므로 두 번 답해도 한 번만 전송되고, 답하기 전에 사용자가 다시 글을 쓰면 다시 확인을 구합니다. 텍스트만 보내며 파일 첨부는 콘솔에서 하세요. `mocco_messenger_assign`은 인계입니다. 클라이언트가 지금 대화를 맡은 사람과 새로 맡을 사람을 보여 주며, 워크스페이스 밖의 사람은 확인을 구하기 전에 거부됩니다. 새 대화는 시작될 때 여전히 라운드 로빈이 배정합니다.

**메모, 닫기, 차단.** `mocco_messenger_note_create`는 팀만 볼 수 있는 메모를 남깁니다. 클라이언트가 먼저 정확한 텍스트를 보여 주며, 사용자에게는 알림이 가지 않습니다. `mocco_messenger_conversation_set_status`는 대화를 닫거나 다시 엽니다(닫힌 대화에 사용자가 글을 쓰면 저절로 다시 열립니다). `mocco_messenger_contact_set_blocked`는 사용자가 글을 쓰지 못하게 합니다. 이미 있는 내용은 계속 읽을 수 있습니다. 각 확인은 보여 준 상태에 대해서만 유효합니다. 답하기 전에 동료가 대화를 닫거나, 대화에 글을 쓰거나, 사용자를 차단하면 다시 확인을 구합니다. 이미 그 상태인 것을 요청하면 묻지 않고 답합니다.

**메신저 설정과 순환.** `mocco_messenger_categories_set`은 지금의 카테고리와 바꾼 뒤의 카테고리를 보여 주고, 앱이 아직 보낼 수 있는 키를 제거하면 경고합니다. `mocco_messenger_guest_access_set`은 게스트 접근을 켜거나 끕니다. 순환 도구는 **Round robin** 설정과 마찬가지로 사람을 추가하거나 제거하고 응대 가능 또는 자리 비움으로 표시합니다. 워크스페이스 밖의 사람은 확인을 구하기 전에 거부됩니다. 메신저 설정과 ID 시크릿 교체는 콘솔에서 합니다. 둘 다 시크릿을 보여 주기 때문입니다. 사용자 삭제도 마찬가지이며, 되돌릴 수 없습니다.

이 모든 도구는 다른 변경과 같은 규칙을 따르고, 워크스페이스가 에이전트의 변경을 허용해야 하며, 별도의 권한이 필요합니다. 권한은 처음 쓸 때 요청합니다. **Reply to, note, assign, close and block in your messenger conversations, and change its rotation and settings, as you**. 인박스와 마찬가지로 워크스페이스의 어느 멤버든 쓸 수 있습니다.
담당자 지정, 닫기, 다시 열기, 차단, 카테고리, 게스트 접근, 순환 참여와 탈퇴는 사용자의 이름과 함께 감사 기록에 남습니다. 응대 가능 여부는 콘솔과 마찬가지로 기록되지 않습니다.

**피드백 게시물 옮기기.** `mocco_feedback_post_set_status`는 보드에서 게시물의 상태를 바꾸는 것과 같은 일을 합니다. 게시물이 새 상태를 갖고(출시됨으로 옮기면 출시 시점이 기록되고, 다른 상태로 옮기면 그 기록이 지워집니다), 변경은 게시물의 이력과 감사 기록에 사용자의 이름과 함께 남습니다. 클라이언트가 먼저 게시물, 현재 상태, 바뀔 상태를 보여 주며, yes라고 답하기 전에는 아무것도 바뀌지 않습니다. 확인은 질문을 받았을 때 게시물이 가진 상태에서 옮기는 것에 대해서만 유효합니다. 답하기 전에 다른 사람이 게시물을 옮기면 답은 거부되고 다시 확인을 구하며, 같은 확인에 두 번 답해도 한 번만 옮깁니다. 게시물이 이미 가진 상태를 요청하면 묻지 않고 답합니다. 다른 변경과 같은 규칙을 따르고, 워크스페이스가 에이전트의 변경을 허용해야 하며, 별도의 권한이 필요합니다. 권한은 처음 쓸 때 요청합니다. **Set up your feedback boards, write, move, comment on, vote on, merge and link your feedback posts to GitHub, decide which ones a release shipped, and write and publish your changelog, as you**. 보드와 마찬가지로 워크스페이스의 어느 멤버든 게시물을 옮길 수 있습니다.

**피드백에 댓글 달기, 투표하기, 병합하기.** 같은 권한과 같은 워크스페이스 스위치가 세 가지 변경을 더 다룹니다. 각각 먼저 클라이언트에서 확인합니다.

- `mocco_feedback_comment_create`는 게시물, 댓글의 종류(공개, 공식 답변, 내부 메모), 정확한 텍스트를 보여 줍니다. 공식 답변은 내부 메모일 수 없습니다.
- `mocco_feedback_post_vote`는 이메일이나 통화로 요청한 경우를 위해, 앱이 사용자를 아는 ID로 앱 사용자 한 명의 투표를 기록합니다. 즉시 집계되며 그 사용자가 게시물을 팔로우합니다. 이미 집계되는 투표는 묻지 않고 답합니다. 답하기 전에 그 사람이 직접 투표하면 답은 거부되고 다시 확인을 구합니다.
- `mocco_feedback_post_merge`는 두 게시물과 각각의 투표를 보여 줍니다. 중복 게시물의 투표와 팔로워가 다른 게시물로 옮겨 가고(두 곳에 모두 투표한 사람은 한 번으로 집계됩니다), 중복 게시물은 댓글과 이력을 유지한 채 닫힙니다. 병합은 되돌릴 수 없습니다. 답하기 전에 어느 한쪽 게시물에 투표가 생기면 새 집계로 다시 확인을 구하고, 어느 한쪽이 다른 곳에 병합되었다면 병합은 거부됩니다.

**피드백을 GitHub에 연결하기.** 같은 권한과 스위치로 게시물 페이지의 **GitHub** 섹션처럼 게시물을 이슈나 풀 리퀘스트에 연결할 수 있습니다. `mocco_feedback_github_search`는 프로젝트에 연결된 저장소(전부 또는 지정한 저장소)에서 이슈나 풀 리퀘스트를 찾습니다. Mocco 서버의 GitHub App이 필요하며, 프로젝트에 연결된 저장소가 없으면 그렇게 알려 줍니다. `mocco_feedback_post_link`는 게시물, 저장소, 이슈나 풀 리퀘스트의 제목과 상태(열림, 닫힘, 병합됨)를 보여 줍니다. 답하기 전에 GitHub에서 상태가 바뀌면 새 상태로 다시 확인을 구합니다. 병합된 게시물, 프로젝트에 연결되지 않은 저장소, 저장소에 없는 번호, 게시물이 이미 연결한 이슈는 확인을 구하기 전에 거부됩니다. `mocco_feedback_post_unlink`는 연결과 그 상태를 보여 주고 게시물에서만 연결을 제거합니다. GitHub에서는 아무것도 바뀌지 않습니다.

**헬프 센터 쓰기와 번역하기.** 헬프 센터의 모든 변경은 하나의 권한을 공유하며, 그중 하나를 처음 쓸 때 요청합니다. **Set up your help center, write, publish and delete its articles, review its translations and change its glossary, as you**. 각 변경은 워크스페이스가 에이전트의 변경을 허용해야 하고 먼저 클라이언트에서 확인하며, 콘솔과 마찬가지로 프로젝트의 어느 멤버든 할 수 있습니다.

- `mocco_help_translation_accept`는 기계 초안과 그것이 대체할 검수된 텍스트의 담당자를 보여 줍니다. 답하기 전에 더 새로운 초안이 도착하거나 글이 다시 게시되면 답은 거부되고 다시 확인을 구합니다.
- `mocco_help_translation_retranslate`는 기계에게 한 언어를 다시 요청합니다. 원문에서 시작하며 이전 번역은 재사용하지 않습니다. 사람이 검수한 언어라면 확인에 그렇게 표시되고 그 사람의 이름이 나옵니다. 그 텍스트는 이력에 남습니다. 답하기 전에 누군가 그 언어를 검수하거나 편집하면 그 텍스트에 대해 다시 확인을 구합니다. 이미 번역 중인 언어는 묻지 않고 답합니다.
- `mocco_help_glossary_set`은 용어의 현재 모습과 바뀐 뒤의 모습을 보여 줍니다. 그러면 번역이 그 용어가 들어 있는 문장을 다시 만듭니다(검수된 언어는 기존 텍스트 옆에 초안이 생깁니다). 답하기 전에 용어가 바뀌면 다시 확인을 구합니다.

- `mocco_help_article_create`, `mocco_help_draft_save`, `mocco_help_draft_restore`는 초안만 바꿉니다. 독자는 사용자가 게시하기 전까지 게시된 텍스트를 계속 봅니다. 저장은 변경 전후의 제목과 길이, 새 텍스트의 시작 부분을 보여 줍니다. 답하기 전에 초안이 편집되면 다시 확인을 구합니다.
- `mocco_help_article_publish`는 게시할 초안을 보여 주고, 독자가 보는 내용을 대체하는지 알려 줍니다. 답하기 전에 초안이 바뀌면 다시 확인을 구하므로, 공개되는 내용은 사용자가 본 내용입니다. 그러면 사이트의 다른 언어가 그 초안에서 번역됩니다.
- `mocco_help_article_unpublish`는 글을 사이트에서 내리되 모든 것을 보존합니다. 다시 게시하면 돌아옵니다. `mocco_help_article_delete`는 글을 이력과 번역까지 함께 삭제하며 되돌릴 수 없습니다.

직접 번역 쓰기, 이미지 업로드, 다른 도구에서 가져오기, AI 학습 크롤러 허용, 사이트의 주소나 언어 변경은 콘솔에서 합니다.

**릴리스에서 피드백을 출시됨으로 표시하기.** 릴리스에 게시물에 연결된 작업이 들어 있으면 보드의 인박스가 출시됨으로 표시하자고 제안합니다. 같은 권한과 스위치로 인박스 배너처럼 에이전트가 보드별로 릴리스를 하나씩 결정할 수 있습니다.
`mocco_feedback_ship_suggestions_list`는 기다리는 각 릴리스를 보여 줍니다. 커밋, 승인한 사람, 게시물, 변경 로그 초안 항목입니다. `mocco_feedback_ship_suggestions_accept`는 릴리스와 각 게시물에 일어날 일을 보여 줍니다. 그 사이에 병합되었거나 출시된 게시물은 그대로 두고, 게시물의 이메일 투표자에게 메일이 가며, 초안은 사용자가 게시하도록 초안으로 남습니다. `mocco_feedback_ship_suggestions_dismiss`는 게시물을 그대로 둡니다. 답하기 전에 누군가 게시물 중 하나를 옮기거나 병합하면 답은 거부되고 다시 확인을 구합니다. 누군가 먼저 릴리스를 결정했다면 답은 거부됩니다.

**보드 설정하고 게시물 쓰기.** 같은 권한과 스위치로 보드를 설정하고 팀 명의로 게시물을 쓸 수 있으며, 각각 먼저 클라이언트에서 무엇이 바뀌는지 정확히 확인합니다. `mocco_feedback_board_create`와 `_update`는 보드를 만들거나, 이름을 바꾸거나, 주소를 옮기거나(공개 페이지도 함께 옮겨 갑니다), 공개 또는 비공개로 바꿉니다. 지정한 것만 바뀝니다. `mocco_feedback_board_release_policy_set`은 어느 저장소의 릴리스가 보드의 게시물을 출시하는지와 먼저 물어볼지를 설정합니다. 묻지 않고 게시물을 출시됨으로 표시하게 되는 경우에는 확인에 그 사실이 분명히 적힙니다. `mocco_feedback_category_create`, `_update`, `_delete`는 카테고리를 관리합니다. 삭제된 카테고리의 게시물은 카테고리 없이 보드에 남으며, 확인에 그 수가 나옵니다. `mocco_feedback_post_create`는 팀 명의로 게시물을 쓰고 `mocco_feedback_post_update`는 제목, 세부 내용, 카테고리를 편집합니다. 다른 보드나 카테고리가 이미 쓰는 주소는 확인을 구하기 전에 거부됩니다. 답하기 전에 누군가 보드, 카테고리, 게시물을 바꾸면 답은 거부되고 다시 확인을 구합니다.
보드 삭제는 의도적으로 콘솔에 맡겨 둡니다. 보드의 모든 게시물, 투표, 댓글, 변경 로그 항목이 삭제되며 되돌릴 수 없기 때문입니다.

**중복, 대화, 투표.** `mocco_feedback_duplicate_dismiss`는 중복으로 제안된 한 쌍을 영구히 치워 둡니다. 두 게시물은 그대로 남습니다(하나를 병합하려면 `mocco_feedback_post_merge`를 쓰세요). `mocco_feedback_intake_convert`는 **Convert to feedback**처럼 메신저 대화를 새 게시물로 바꾸거나 기존 게시물에 추가합니다. 확인에는 고객의 말이 인용되며(내부 메모는 절대 포함되지 않습니다), 고객이 그 게시물에 투표하는지도 나옵니다. 고객이 앱에 로그인한 상태였다면 투표합니다. 이미 게시물이 된 대화는 두 번째 게시물로 만들어지지 않습니다. `mocco_feedback_post_unvote`는 최종 사용자가 요청했거나 실수로 기록된 경우를 위해 한 명의 투표를 제거합니다. 그 사용자는 게시물을 계속 팔로우합니다.

**변경 로그 쓰기.** 같은 권한과 스위치가 보드의 변경 로그도 다룹니다. `mocco_changelog_entry_create`는 팀 밖의 누구도 볼 수 없는 초안을 시작하고, `mocco_changelog_entry_update`는 어떤 상태의 항목이든 편집합니다(게시된 항목의 페이지는 즉시 바뀌며, 확인에 그렇게 적힙니다). `mocco_changelog_entry_publish`는 항목을 공개 변경 로그와 RSS 피드에 지금 올리고, `_schedule`은 지정한 시각에 올리며, `_unpublish`는 초안으로 되돌립니다. `mocco_changelog_entry_delete`는 항목 하나를 삭제하며, 확인에는 공개 상태인지와 되돌릴 수 없다는 점이 적힙니다. 각 확인은 항목과 그 상태를 알려 주고, 답하기 전에 누군가 항목을 편집하거나 게시하거나 예약하면 답은 거부되고 다시 확인을 구합니다.

**프로젝트 설정하기.** 빈 워크스페이스에서 시작하면 `mocco_projects_create`가 프로젝트를 만들고, `mocco_projects_apps_add`가 앱을 추가하고, `mocco_products_enable`이 제품 라인을 켭니다. 각각 먼저 클라이언트에서 확인하며, 워크스페이스가 에이전트의 변경을 허용해야 하고 별도의 권한이 필요합니다. 권한은 처음 쓸 때 요청합니다. **Create projects, add apps to them and turn products on, as you**. 콘솔과 마찬가지로 어느 멤버든 할 수 있습니다.
프로젝트 보관, 앱 제거, 제품 끄기는 콘솔에서 합니다.

**OTA 호스팅 설정하기.** 앱의 저장소에서 작업하는 에이전트가 **Hosted by Mocco** 탭과 같은 방식으로 앱을 연결할 수 있습니다. `mocco_ota_setup_get`은 앱에 무엇이 있고 무엇이 빠졌는지 알려 주고, `mocco_ota_apps_host`는 앱을 호스팅하고 `app.json`에 넣을 매니페스트 URL을 알려 주며, `mocco_ota_channels_create`는 채널을 추가하고, `mocco_ota_certificates_add`는 인증서(`certs/certificate.pem`)를 등록하고, `mocco_ota_trust_policies_create`는 배포하는 저장소를 신뢰합니다. 각각 먼저 클라이언트에서 정확히 무엇이 바뀌는지 확인하며, 워크스페이스가 에이전트의 변경을 허용해야 하고 별도의 권한이 필요합니다. 권한은 처음 쓸 때 요청합니다. **Set up OTA hosting as you**. 앱 호스팅과 채널 추가는 어느 멤버든 할 수 있지만, 인증서 등록과 저장소 신뢰는 콘솔과 마찬가지로 소유자나 관리자가 해야 합니다. 기기가 누구의 코드를 실행할지를 정하는 일이기 때문입니다. 개인 키는 아예 거부됩니다. 개인 키는 CI에만 둡니다. 이 도구들은 업데이트를 배포하지 않습니다. 승격, 롤아웃, 롤백은 CI와 콘솔에 남아 있습니다. 이렇게 만든 채널은 보호되지 않으므로, 승격에 승인이 필요하다면 콘솔에서 보호하세요.

웹훅 소스 변경도 같은 규칙을 따르며, 서명 시크릿은 에이전트를 거치지 않습니다. `mocco_inbound_sources_create`는 GitHub 소스를 추가하지만 Mocco가 생성한 시크릿은 반환하지 않습니다. GitHub에 붙여 넣을 시크릿이 필요하면 콘솔에서 **Notifications → Sources**를 열고 소스의 시크릿을 교체하세요. Sentry나 Vercel 소스는 그 서비스가 보여 주는 시크릿이 필요하므로, 도구가 거부하고 콘솔로 안내합니다. 시크릿은 콘솔에서 붙여 넣습니다. 시크릿 교체와 소스 이름 변경도 콘솔에 남아 있습니다.

그러면 결정은 콘솔에서 직접 클릭한 것과 똑같이 기록됩니다. 요청이나 게이트 자체의 규칙은 그대로 적용됩니다. 요청이 요구하는 역할 중 하나가 있어야 하고, 금지되어 있다면 본인이 요청한 변경을 승인하거나 본인이 시작한 실행을 재개할 수 없으며, 투표는 한 번만 할 수 있습니다. 여러 사람이 필요한 게이트는 모두 투표할 때까지 멈춰 있으며, 도구가 현재 상황을 알려 줍니다.

## 절대 하지 않는 것

- **본인이 아닌 누군가로 행동하는 것.** 모든 작업은 콘솔과 같은 검사를 사용자의 신원으로 거칩니다. 에이전트는 사용자가 승인할 수 없는 것을 승인할 수 없습니다.
- **결정에 API 키를 받는 것.** 키는 사람이 아니라 프로젝트이며, 승인은 요청받을 수 있었던 누군가의 이름이 있어야 합니다. 키는 읽기 도구만 쓸 수 있습니다.
- **감사 기록에서 무엇이든 숨기는 것.** 에이전트를 통한 투표, 재개, 알림 변경은 콘솔에서 한 것과 똑같이 체인에 나타나며 사용자의 이름이 남습니다.

## 추가하기

### Claude Code

```bash
claude mcp add --transport http mocco https://www.mocco.club/api/mcp
```

그다음 `/mcp`를 실행하고 **mocco**를 골라 로그인합니다. 제대로 추가되었는지는 다음으로 확인합니다.

```bash
claude mcp list
```

### Claude Desktop과 claude.ai

**Settings → Connectors → Add custom connector**를 열고 위의 URL을 붙여 넣습니다. 브라우저 로그인은 그 자리에서 진행됩니다.

### Cursor

프로젝트의 `.cursor/mcp.json`, 또는 모든 프로젝트에 적용하려면 `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "mocco": {
      "url": "https://www.mocco.club/api/mcp"
    }
  }
}
```

Cursor는 로그인을 위해 브라우저를 알아서 엽니다. 헤더는 넣지 마세요. 이 서버는 OAuth를 쓰며, 붙여 넣는 토큰을 쓰지 않습니다.

### VS Code

`.vscode/mcp.json`:

```json
{
  "servers": {
    "mocco": {
      "type": "http",
      "url": "https://www.mocco.club/api/mcp"
    }
  }
}
```

VS Code가 OAuth 흐름을 직접 실행하므로 `headers`나 `inputs`에 넣을 것이 없습니다.

### 그 밖의 클라이언트

**2026-07-28** MCP 리비전을 지원하는 클라이언트라면 모두 쓸 수 있습니다. URL을 지정하고 나머지는 클라이언트가 찾게 하세요. 인증되지 않은 호출에는 `401`로 응답하며, 보호된 리소스 메타데이터(`/.well-known/oauth-protected-resource/api/mcp`)를 가리킵니다. 이 메타데이터가 인증 서버를 알려 주고, 인증 서버의 메타데이터는 `/.well-known/oauth-authorization-server/api/auth`에 있습니다. 규격을 따르는 클라이언트는 별도 안내 없이 두 곳을 모두 따라갑니다.

이 서버는 해당 리비전만 `POST`로 제공합니다. 이전의 HTTP+SSE 전송 방식을 쓰는 클라이언트는 연결되지 않습니다. 클라이언트를 업그레이드하거나, 그동안은 `mocco` CLI를 쓰세요.

## 연결 승인하기

클라이언트가 처음 연결하면 브라우저에서 Mocco가 열립니다. 아직 로그인하지 않았다면 로그인하세요. 그러면 Mocco가 그 앱이 사용자로서 읽는 것을 허용할지 묻습니다.

![동의 화면: 앱의 이름, 앱이 대신 행동할 계정, 앱이 할 수 있게 되는 일, Allow와 Deny](https://fi-workers-mocco-storage.s3.ap-northeast-2.amazonaws.com/pub/w/93e11fe8-0494-4e3d-b1cb-fe4dffd3ee7e/p/d64785b8-9a23-4fa1-a81d-550af30e203a/helpcenter/b63ce45d-c80d-4cfe-9ae3-d5d2c9674e14/mcp-consent.png)

**Allow**를 누르면 클라이언트로 돌아가고, 클라이언트가 연결을 알아서 마칩니다. **Deny**를 누르면 클라이언트에 거절했다고 알리며, 클라이언트는 아무것도 받지 못합니다. 한 번 앱을 허용하면 Mocco가 기억하므로, 나중에 다시 연결할 때는 묻지 않습니다.

방금 연결을 시작한 앱만 허용하세요. 아무것도 시작하지 않았는데 이 화면이 나타나면 Deny를 고르세요.

### 앱이 투표하도록 허용하기

연결만으로는 앱이 투표하거나 재개할 수 없습니다. 에이전트가 처음 시도하면 Mocco가 연결에 권한이 하나 더 필요하다고 답하고, 클라이언트가 같은 화면을 다시 엽니다. 새 줄이 하나 추가되어 있습니다. **Approve or reject changes as you, in workspaces that allow agents to decide**. 허용하면 클라이언트가 결정을 이어서 진행하며, 결정은 여전히 사용자에게 확인을 구합니다. 거부하면 앱은 이전처럼 읽기만 합니다. 투표와 재개에는 같은 권한이 쓰입니다. 무엇을 결정할 수 있는지는 여전히 사용자의 역할이 정합니다.

권한은 앱마다 한 번만 묻습니다. 이 권한은 에이전트의 결정을 허용하지 않은 워크스페이스에서는 아무 효과가 없고, 어디에서도 사용자의 역할이 허용하는 범위를 넘지 않습니다.

## 결정 도구 켜기

소유자나 관리자가 워크스페이스별로 켭니다. **Settings → Agents → Allow agents to decide**입니다. 켜면 누가 켰는지 기록되며, 이 스위치가 여는 모든 도구는 호출하는 사람의 역할에 여전히 묶여 있습니다.

에이전트가 보고만 하면 되는 워크스페이스에서는 꺼 두세요. 대부분의 워크스페이스가 그렇습니다.

## 연결되지 않을 때

| 보이는 증상 | 의미 |
|---|---|
| 클라이언트가 토큰이나 헤더를 요구합니다 | 이 서버를 키로 인증하는 서버로 취급하고 있습니다. 헤더를 제거하세요. 이 서버는 OAuth를 씁니다 |
| 연결할 때 `405 Method Not Allowed`가 납니다 | 클라이언트가 `GET`이나 `DELETE`를 시도하고 있습니다. 이전 전송 방식을 쓰는 클라이언트이므로 업그레이드하세요 |
| "Agents may not vote in this workspace" | 그 워크스페이스에서 결정이 꺼져 있습니다. 소유자나 관리자가 **Settings → Agents**에서 켤 수 있습니다 |
| "This connection may not vote" | 앱이 투표를 허용받은 적이 없습니다. 다시 연결하고, 묻는 화면에서 투표 권한을 허용하세요 |
| "This connection may not run checks" | 앱이 확인 실행을 허용받은 적이 없습니다. 다시 연결하고, 묻는 화면에서 확인 권한을 허용하세요 |
| "Agents may not run checks in this workspace" | 그 워크스페이스에서 변경이 꺼져 있습니다. 소유자나 관리자가 **Settings → Agents**에서 켤 수 있습니다 |
| "… is a heartbeat; its job pings it" | 하트비트에는 실행할 라운드가 없습니다. 마지막 핑은 `mocco_status_monitors_search`에서 볼 수 있습니다 |
| "… is paused; resume it in the console to check it" | 먼저 콘솔에서 모니터를 재개하세요 |
| "This connection may not open incidents"(또는 인시던트 업데이트 게시, 점검 예약 등) | 앱이 상태 페이지 변경을 허용받은 적이 없습니다. 다시 연결하고, 묻는 화면에서 상태 권한을 허용하세요 |
| "Agents may not open incidents in this workspace"(또는 인시던트 업데이트 게시 등) | 그 워크스페이스에서 변경이 꺼져 있습니다. 소유자나 관리자가 **Settings → Agents**에서 켤 수 있습니다 |
| 상태 페이지를 변경한 뒤 "That confirmation was for a different change" | 답하기 전에 누군가 인시던트, 점검 시간, 컴포넌트를 바꿨습니다. 다시 호출하면 지금의 내용으로 확인을 구합니다 |
| "An incident can't go from … to …" | 인시던트 수명 주기가 그 이동을 허용하지 않습니다. 메시지에 허용되는 이동이 나옵니다 |
| "Status incident … was not found"(또는 페이지, 컴포넌트, 점검) | 다른 프로젝트나 워크스페이스에 있거나 ID가 잘못되었습니다. ID는 `mocco_status_incidents_search`와 `mocco_status_pages_get`에서 알 수 있습니다 |
| "This connection may not reply in the messenger" 또는 "… may not assign conversations" | 앱이 답장이나 담당자 지정을 허용받은 적이 없습니다. 다시 연결하고, 묻는 화면에서 메신저 권한을 허용하세요 |
| "Agents may not reply in the messenger in this workspace" | 그 워크스페이스에서 변경이 꺼져 있습니다. 소유자나 관리자가 **Settings → Agents**에서 켤 수 있습니다 |
| "… isn't a member of this workspace" | 대화는 워크스페이스 멤버에게만 넘길 수 있습니다. `mocco_messenger_conversations_search`가 지금 대화가 있는 사람들의 이름을 알려 줍니다 |
| "Conversation … was not found" | 다른 프로젝트나 워크스페이스에 있거나 ID가 잘못되었습니다. 먼저 인박스를 검색하세요 |
| "The messenger isn't set up for this project" | 콘솔에서 프로젝트의 **Inbox**에서 설정하세요. ID 시크릿이 한 번 표시됩니다 |
| "… is not in this inbox's rotation" | 먼저 `mocco_messenger_inbox_members_add`로 추가하세요 |
| "This connection may not change feedback statuses"(또는 댓글, 투표 기록, 피드백 게시물 병합) | 앱이 피드백 변경을 허용받은 적이 없습니다. 다시 연결하고, 묻는 화면에서 피드백 권한을 허용하세요 |
| "Agents may not change feedback statuses in this workspace"(또는 댓글, 투표 기록, 병합) | 그 워크스페이스에서 변경이 꺼져 있습니다. 소유자나 관리자가 **Settings → Agents**에서 켤 수 있습니다 |
| 게시물을 옮긴 뒤 "That confirmation was for a different change" | 답하기 전에 누군가 게시물을 옮겼습니다. 다시 호출하면 지금의 상태에서 옮기는 것으로 확인을 구합니다 |
| 투표나 병합 뒤 "That confirmation was for a different change" | 답하기 전에 최종 사용자가 투표했거나 게시물 중 하나에 투표가 생겼습니다. 다시 호출하면 지금의 집계로 확인을 구합니다 |
| "… was merged into … already" | 병합된 게시물은 다시 병합하거나, 다른 게시물이 병합해 오거나, 투표할 수 없습니다. 병합된 대상 게시물을 쓰세요 |
| "Posts can only be merged on the same board" | 게시물을 먼저 한 보드로 옮기거나, 각 보드 안에서 병합하세요 |
| "Feedback board … was not found" 또는 "Feedback post … was not found" | 다른 프로젝트나 워크스페이스에 있거나 ID가 잘못되었습니다. ID는 `mocco_feedback_boards_list`와 `mocco_feedback_posts_search`에서 알 수 있습니다 |
| "not in a role authorized to approve" | 사용자의 역할이 이 요청을 다루지 않습니다. `mocco_approvals_get`이 알려 주는 역할 중 하나를 가진 사람이 투표해야 합니다 |
| "Agents may not resume or reject runs in this workspace" | 그 워크스페이스에서 결정이 꺼져 있습니다. 소유자나 관리자가 **Settings → Agents**에서 켤 수 있습니다 |
| "No pending gate at index …" | 실행이 더 이상 그 게이트에서 멈춰 있지 않습니다. 이미 진행되었거나, 결정되었거나, 다른 워크스페이스에 있습니다. `mocco_runs_get`이 지금 무엇을 기다리는지 보여 줍니다 |
| "cannot resume a gate on a run you triggered" | 이 게이트는 실행을 시작한 사람이 직접 풀 수 없게 합니다. 게이트의 역할을 가진 다른 사람이 풀어야 합니다 |
| "not in a role authorized to resume" | 사용자의 역할이 이 게이트를 다루지 않습니다. `mocco_runs_get`이 알려 주는 역할 중 하나를 가진 사람이 재개해야 합니다 |
| "Agents may not change notification settings in this workspace" | 그 워크스페이스에서 변경이 꺼져 있습니다. 소유자나 관리자가 **Settings → Agents**에서 켤 수 있습니다 |
| "Agents may not change webhook sources in this workspace" | 웹훅 소스에 대한 같은 스위치입니다 |
| "a secret must never pass through an agent" | Sentry와 Vercel 소스는 콘솔에서 추가하며, 거기에서 시크릿을 붙여 넣습니다 |
| "Only an owner or admin of workspace … can do this" | 알림 설정은 콘솔에서나 여기에서나 소유자와 관리자만 바꿀 수 있습니다 |
| 투표를 허용할 때 브라우저가 잘못된 스코프라고 알립니다 | 투표 기능이 생기기 전에 앱이 연결되었고, Mocco가 앱이 요청할 수 있는 범위를 아직 갱신하지 않았습니다. 한 시간 안에 갱신되니 그때 다시 시도하세요 |
| 브라우저가 Mocco의 로그인 화면을 연 뒤 클라이언트가 아니라 워크스페이스 목록으로 갑니다 | 클라이언트의 요청이 주소에 없는 채로 페이지가 열렸습니다. 클라이언트에서 연결을 다시 시작하세요 |
| 엉뚱한 워크스페이스의 도구가 나옵니다 | 여러 워크스페이스에 속해 있습니다. 에이전트에게 워크스페이스를 바꾸라고 하거나, 클라이언트 설정에서 하나를 고정하세요 |
