콘텐츠로 이동

MCP 도구 카탈로그

에이전트는 Chorus의 MCP(Model Context Protocol) 도구를 통해 Chorus를 조작합니다. 이 페이지는 이 도구들을 범주별로 안내합니다. 클라이언트가 어떻게 연결하는지, 프로젝트 범위 지정이 어떻게 작동하는지, 각 도구가 언제 표시되는지, 그리고 각 단계에서 에이전트가 자주 쓰는 도구를 다룹니다. 엔티티가 거쳐 가는 상태와 각 단계의 인계는 엔티티 라이프사이클 참고를, 댓글, 멘션, 알림은 협업 참고를 보세요.

Chorus는 Streamable HTTP로 하나의 MCP 엔드포인트를 노출합니다.

POST https://chorus.example.com/api/mcp
Authorization: Bearer cho_REDACTED

이 엔드포인트는 무상태입니다. 각 요청은 에이전트 키로 인증되고 요청마다 새로운 서버 인스턴스가 처리합니다. 서버 측 세션이 없고, initialize → 킵얼라이브 → 만료 흐름도 없으며, 유휴 타임아웃도 없습니다. 클라이언트는 “session not found” 상태를 복구할 필요 없이, 요청마다 키를 보내기만 하면 됩니다. 여기서 두 가지 결론이 따라옵니다.

  • 권한은 요청마다 다시 계산됩니다. UI에서 에이전트의 권한을 변경하면 다음 호출부터 즉시 적용되며, 재연결이 필요 없습니다.
  • 에이전트 키만으로 도구 목록이 결정됩니다. tools/list가 반환하는 도구 집합은 요청 시점에 그 키가 가진 유효 권한에서 도출됩니다.

클라이언트의 MCP 설정에서 이것을 http 유형의 서버로 설정합니다. 최소한의 .mcp.json 블록:

{
"mcpServers": {
"chorus": {
"type": "http",
"url": "https://chorus.example.com/api/mcp",
"headers": {
"Authorization": "Bearer cho_REDACTED"
}
}
}
}

셸에서는 chorus mcp call <tool> 명령이 같은 에이전트 인증 정보로 이 도구들 중 무엇이든 호출합니다. 스크립트나 일회성 호출을 위한, 모델 토큰을 쓰지 않는 경로입니다. chorus CLI를 참고하세요.

여러 프로젝트에 걸쳐 일하는 에이전트는 MCP 연결에 범위 지정 헤더를 보내, 범위 지정을 지원하는 결과를 해당 프로젝트로 좁힐 수 있습니다.

헤더값효과
X-Chorus-Project단일 프로젝트 UUID, 또는 쉼표로 구분한 여러 개결과를 그 프로젝트로 제한한다.
X-Chorus-Project-Group프로젝트 그룹 UUID결과를 그 그룹 내 모든 프로젝트로 제한한다.

chorus_get_my_assignments는 범위 헤더로 결과를 필터링합니다. 헤더가 없으면 접근 가능한 프로젝트 전체를 포함하며 둘 다 있으면 X-Chorus-Project-Group이 우선합니다. chorus_checkin은 이 헤더로 필터링하지 않습니다. activeProjects 분포는 필터링되지 않으며(최근 아이디어 목록도 아닙니다), 헤더로 선택한 프로젝트는 projectTeams에 추가될 뿐입니다. 다른 도구는 각자의 명시적 범위 인수를 사용합니다. 이 헤더는 일반적인 프로젝트 접근 필터가 아닙니다.

{
"mcpServers": {
"chorus": {
"type": "http",
"url": "https://chorus.example.com/api/mcp",
"headers": {
"Authorization": "Bearer cho_REDACTED",
"X-Chorus-Project": "uuid-a,uuid-b"
}
}
}
}

도구 가시성은 세분화된 권한 모델로 결정됩니다. 5개 자원 (idea, proposal, document, task, project) × 3개 동작 (read, write, admin) = 15개 권한 비트입니다. 통제되는 각 도구는 필요한 권한을 정확히 하나 선언합니다. 통제되는 도구는 에이전트의 유효 권한 집합이 그 비트를 포함하는 경우에만 에이전트의 tools/list에 나타납니다. 공용 도구는 통제되지 않고 항상 나타납니다.

에이전트의 유효 집합은 역할 프리셋과 그 위에 추가된 임의의 사용자 지정 권한의 합집합입니다.

프리셋유효 권한 집합
developer_agent*:read + task:write(6비트)
pm_agent*:read + idea:write, proposal:write, document:write, task:write, project:write(10비트)
admin_agent전체 15비트(*:read + *:write + *:admin)

보이는 것과 인가된 것은 같지 않습니다. 도구가 보이더라도 서버가 특정 호출을 거부할 수 있습니다. 예를 들어 작업의 상태 전이는, 누가 그 도구를 볼 수 있는지와 무관하게 호출자가 그 작업의 담당자일 것을 요구합니다.

권한 비트는 에이전트가 어떤 도구를 가지는지를 정합니다. 프로젝트 액세스는 그 도구를 어디서 쓸 수 있는지를 정합니다. 에이전트는 각 프로젝트에 대해 소유자의 액세스로 행동하며(프로젝트를 볼 수 있는 사람 관리 참조), 소유자가 없는 에이전트는 공개 프로젝트만 사용할 수 있습니다. 두 검사는 모든 호출에 적용됩니다.

  • 숨겨진 것은 찾을 수 없는 것입니다. 소유자가 액세스할 수 없는 비공개 프로젝트와 그 안의 모든 아이디어, 제안, 문서, 작업, 댓글은 목록과 검색에서 제외되며, 존재하지 않는 ID와 같은 not-found 오류를 반환합니다.
  • 역할이 너무 낮으면 금지됩니다. 소유자의 역할이 너무 낮은 곳에서는(예: 뷰어가 쓰기를 하거나, 비공개 프로젝트에서 편집자가 관리자 전용 작업을 하는 경우) 호출이 forbidden 오류로 실패하며, 읽기는 계속 작동합니다. 소유자의 역할이 바뀔 때까지는 다시 시도해도 소용없습니다.
  • chorus_get_project는 프로젝트의 visibility와 호출자의 accessLevel(viewer, editor, admin)을 알려 줍니다.
  • chorus_admin_create_project와 chorus_admin_create_project_group은 visibility(public 또는 private)를 받습니다. 에이전트 소유자가 생성된 프로젝트나 그룹의 관리자가 됩니다. 비공개 그룹 안에서 만든 프로젝트는 비공개입니다.
  • chorus_admin_update_project_group은 그룹의 visibility를 바꾸고, 명시적인 그룹 멤버를 한 번에 한 명씩 관리할 수 있습니다(memberAction: add, update, remove와 함께 userUuid, role). chorus_admin_move_project_to_group은 프로젝트를 이동하거나 그룹에서 뺍니다. 그룹의 visibility를 바꾸거나 프로젝트를 이동할 때는, 먼저 preview: true로 도구를 호출해 액세스 영향과 confirmationToken을 받은 다음, 그 토큰과 함께 같은 변경을 반복하세요. 멤버 변경은 미리 보기 없이 바로 적용됩니다.
  • 그룹의 공개 범위나 멤버를 바꾸려면 소유자가 그룹 관리자여야 합니다. 비공개 프로젝트의 이동, 비공개 그룹으로 또는 비공개 그룹에서의 이동, 누군가의 액세스를 넓히는 이동에는 관리자가 필요하며, 그 밖의 이동에는 편집자가 필요합니다.
  • chorus_search_mentionables는 선택적으로 entityType과 entityUuid를 받습니다. 아이디어, 제안, 문서, 작업에서 멘션할 때 이를 전달하면 해당 항목을 볼 수 있는 사람만 추천됩니다.
  • 프로젝트 멤버와 기존 프로젝트의 공개 범위는 웹 UI에서 관리합니다. 이를 위한 MCP 도구는 없습니다.
범주통제무엇을 다루는가
공용(Public)없음, 항상 보임탐색과 조회(chorus_get_*, chorus_list_*, chorus_search*), chorus_checkin, chorus_get_my_assignments, 댓글, 요구사항 구체화 답변, 알림, 그리고 chorus_create_tasks와 chorus_update_task.
세션(Session)없음, 항상 보임스웜 모드 작업자를 위한 에이전트 세션 수명 주기: chorus_create_session, chorus_session_checkin_task / chorus_session_checkout_task, chorus_session_heartbeat, chorus_close_session, chorus_reopen_session, chorus_list_sessions, chorus_get_session.
개발자(Developer)task:write작업 가져가기, 해제, 보고, 그리고 검증에 제출.
PMidea:write, proposal:write, document:write, project:write아이디어, 요구사항 구체화, 제안, 문서, 참고 자료 작성과 진행.
관리자(Admin)*:admin(프로젝트/그룹 생성은 project:write)제안 승인, 작업 검증/다시 열기/닫기, 수락 기준 표시, 엔티티 삭제, 프로젝트와 그룹 관리.

chorus_create_tasks와 chorus_update_task는 실제로 공용입니다. 어떤 에이전트든 작업의 필드, 의존 관계, 수락 기준을 편집할 수 있지만, 작업을 in_progress나 to_verify로 옮길 수 있는 것은 그 작업의 담당자뿐입니다.

대표적인 부분집합을 입력, 반환 형태, 필요한 권한과 함께 제시합니다. 모든 도구의 완전한 명세는 이 페이지 끝의 안내를 확인하세요.

개요에는 최대 10개 프로젝트가 포함되며 각 프로젝트에서 가장 최근에 수정된 활성 아이디어 순으로 정렬됩니다. 포함된 프로젝트의 활성 아이디어 수는 잘리지 않습니다. 전체 트래커는 chorus_get_my_assignments를 사용하세요.

신원, 소유자, 유효 권한, 페르소나와 activeProjects를 반환합니다. 프로젝트 UUID별 이름과 activeIdeaCount가 있으며 활성 아이디어 총수는 잘리지 않습니다. 개별 아이디어나 작업은 포함하지 않습니다. 최근 미읽음 알림을 최대 다섯 개 반환하고 자동으로 읽음 처리합니다. notifications.unread는 처리 후 남은 미읽음 수입니다. 범위 헤더로 좁혀지지 않습니다.

projectTeams는 각 프로젝트 UUID를 그 프로젝트에서의 소유자 에이전트 팀에 대응시키며, 팀이 없으면 null입니다. activeProjects의 프로젝트와 범위 헤더로 선택한 프로젝트를 다루며, 소유자가 없거나 project:read가 없는 에이전트는 {}를 받습니다. 다른 프로젝트에는 chorus_get_project_team을 사용하세요.

{ checkinTime, agent: { uuid, name, permissions, persona, systemPrompt, owner },
activeProjects: { <projectUuid>: { name, activeIdeaCount } },
projectTeams: { <projectUuid>: ProjectTeam | null },
notifications: { unread, recent[] } }

활성 아이디어/작업의 전체 추적기를 프로젝트별로 반환하며 범위 헤더를 따릅니다. ideaTracker에는 개별 아이디어의 파생 상태와 제안/작업 수가, taskTracker에는 종료 상태가 아닌 작업과 수락 기준 진행률이 들어 있습니다. 전체 목록에는 activeProjects 대신 이 도구를 사용하세요.

{ ideaTracker: { <projectUuid>: { name, ideas[] } },
taskTracker: { <projectUuid>: { name, tasks[] } } }

Quick Task를 아이디어에 연결하기

섹션 제목: “Quick Task를 아이디어에 연결하기”

Quick Task(proposalUuid 없이 만든 작업)는 같은 프로젝트의 아이디어 하나에 직접 연결할 수 있습니다. 그러면 아이디어의 파생 상태가 이 작업을 승인된 제안의 작업과 함께 계산합니다. 테마 아이디어는 거부되며, 한 작업이 proposalUuid와 ideaUuid를 함께 가질 수 없습니다. 제안 작업은 제안을 통해 아이디어에 속합니다. 연결해도 아이디어에 저장된 상태는 바뀌지 않습니다.

연결 설정은 공용입니다. chorus_create_tasks와 chorus_update_task에는 권한 제한이 없습니다(프로젝트 편집자 권한은 필요합니다). 읽기에는 권한이 필요합니다. chorus_list_tasks와 chorus_get_task에는 task:read, chorus_get_idea에는 idea:read가 필요합니다.

  • chorus_create_tasks는 Quick Task 모드에서 선택적인 최상위 ideaUuid를 받아 배치의 모든 작업을 연결합니다. proposalUuid와 함께 보내면 거부되고, 연결이 유효하지 않으면 호출 전체가 거부되며, tasks[] 항목 안에 ideaUuid를 넣으면 검증 오류가 납니다.
  • chorus_update_task는 ideaUuid: string | null을 받습니다. 아이디어 UUID를 보내면 연결을 설정하거나 바꾸고, null이면 해제하며, 생략하면 그대로 둡니다. 제안 작업에서는 거부됩니다.
  • chorus_list_tasks는 선택적인 ideaUuid 필터를 받아 그 아이디어에 연결된 Quick Task만 반환합니다. 아이디어의 제안 작업은 포함되지 않으므로 proposalUuids로 조회하세요.
  • chorus_get_task와 다른 작업 응답은 ideaUuid를 반환합니다(연결되지 않았으면 null, 제안 작업은 항상 null).
  • chorus_get_idea는 서버가 계산한 derivedStatus(todo, in_progress, human_conduct_required, done 중 하나)와 badgeHint(예: building, verify_work, done)를 반환합니다. 보드와 같은 규칙으로 승인된 제안의 작업과 연결된 Quick Task를 대상으로 하며, 테마는 하위 아이디어에서 집계됩니다.
chorus_create_tasks Input: { projectUuid, ideaUuid?, tasks[] } // no proposalUuid
chorus_update_task Input: { taskUuid, ideaUuid?: string | null, ... }
chorus_list_tasks Input: { projectUuid, ideaUuid?, status?, priority?, proposalUuids?, page?, pageSize? }

open 작업을 가져가 assigned로 옮기고 호출자를 담당자로 설정합니다.

입력: { taskUuid }
반환: 업데이트된 Task

chorus_submit_for_verify — task:write(담당자만)

섹션 제목: “chorus_submit_for_verify — task:write(담당자만)”

작업을 사람의 검증에 제출하고 in_progress → to_verify로 옮깁니다.

입력: { taskUuid, summary? }
반환: { uuid, status: "to_verify" }

status 없는 chorus_report_work로 완료를 보고하고 chorus_report_criteria_self_check를 기록한 뒤 chorus_get_task로 in_progress를 확인하고 명시적으로 제출하세요. 먼저 status: "to_verify"를 보고하면 제출이 실패합니다. 잘못 옮긴 작업을 in_progress로 돌리면 개발자와 관리자 양쪽 판정과 근거가 지워지므로 자체 점검을 다시 하세요. 정상 제출된 작업은 다시 열지 마세요. 작업 실행을 참고하세요.

chorus_pm_create_proposal — proposal:write

섹션 제목: “chorus_pm_create_proposal — proposal:write”

빈 제안 컨테이너를 만든 뒤 chorus_pm_add_document_draft와 chorus_pm_add_task_draft로 내용을 채웁니다. inputType이 idea일 때 각 입력 아이디어는 제안으로 만들 수 있는 아이디어여야 합니다. 테마(컨테이너) 아이디어는 거부되므로, 자식 아이디어를 파생시켜 그 아이디어로 제안을 만드세요.

입력: { projectUuid, title, description?, inputType: "idea" | "document",
inputUuids[], references?[] }
반환: 생성된 Proposal(status: draft)

chorus_pm_add_task_draft — proposal:write

섹션 제목: “chorus_pm_add_task_draft — proposal:write”

초안 제안에 작업 초안 하나를 추가합니다. 수락 기준은 필수입니다. 비어 있지 않은 description을 가진 항목이 최소 하나 있어야 하며, 없으면 호출이 거부됩니다.

입력: { proposalUuid, title, description?, priority?, storyPoints?, kind?,
acceptanceCriteriaItems: [{ description, required? }], // 필수, 비어 있지 않음
dependsOnDraftUuids?[] }
반환: 업데이트된 Proposal

chorus_pm_add_task_draft와 chorus_pm_update_task_draft는 선택적 kind로 implementation, verification, docs, other를 받습니다. 편집 후 chorus_pm_validate_proposal을 호출한 다음 chorus_pm_submit_proposal로 제출하세요. 제출 시 서버가 다시 검사합니다. 결과는 { valid, issues[] }이며 수준은 error, warning, info입니다. 오류가 있을 때만 valid가 false입니다.

  • E-DEP-UNKNOWN: 의존성이 같은 제안의 작업 초안이 아닙니다.
  • E-DEP-SELF: 자기 의존성입니다.
  • E-DEP-CYCLE: 의존성 순환입니다.
  • I-KIND: 유형 지정이 없어 구현 범위를 확인할 수 없습니다.
  • W-IMPL: 유형 지정은 있지만 implementation이 없습니다. 권고일 뿐입니다. 기존 구현이나 문서 전용 범위를 설명하고 가상의 작업을 만들지 마세요. 의존성이 없다는 경고(W4)도 권고입니다.

선택적 Pi 게이트는 로컬 재조회/검사 순서를 추적하며 서버 권한 검사가 아닙니다. 제안 검토를 참고하세요.

제출된 작업을 검증하고 to_verify → done으로 옮깁니다. 작업에 구조화된 수락 기준이 있으면, 모든 필수 기준이 (chorus_mark_acceptance_criteria를 통해) 이미 passed로 표시되어 있어야 하며, 그렇지 않으면 검증이 차단됩니다.

입력: { taskUuid }
반환: 업데이트된 Task(수락 기준 게이트가 차단하면 오류)

이 도구들로 에이전트는 소유자 개인의 에이전트 팀을 읽고 그에 따라 움직일 수 있습니다. 팀은 권한을 부여하지 않으며 스스로 일을 배정하지도 않습니다. 모든 호출은 여전히 에이전트의 권한과 소유자의 프로젝트 액세스로 확인됩니다. 에이전트는 팀을 바꾸거나 아이디어 인계를 확인할 수 없습니다. 연결, 역할별 재정의, 연결 해제, 인계는 웹 UI에서 합니다.

아이디어는 그 소유자(사람)가 프로젝트에 팀을 연결한 뒤 자신의 에이전트에게 배정했을 때, 또는 그 에이전트가 팀이 관리하는 아이디어 아래에서 파생 아이디어를 배정했을 때 팀이 관리하는 아이디어가 됩니다. 그 담당자가 아이디어를 총괄하며 리드 역할은 필요 없습니다. 수명 주기 인계 (제안 제출이나 승인, 작업의 검증 제출)는 총괄자에게 알려지며, 총괄자는 깨어날 때마다 아이디어의 팀 컨텍스트를 다시 읽어야 합니다.

호출한 에이전트의 소유자가 한 프로젝트에서 가진 팀을 읽습니다. 프로젝트에 최소 뷰어 액세스가 필요합니다. 소유자가 그 프로젝트에 팀이 없거나 에이전트에 소유자가 없으면 { team: null }을 반환합니다. 다른 사용자의 팀은 절대 반환되지 않습니다.

Input: { projectUuid }
Return: { team: { projectUuid, templateUuid, templateName, frozen, revision,
overrides, roles: { product[], development[], review[], lead[] },
myRoles[], handoffWarning } | null }

각 역할 멤버에는 agentUuid, agentName, eligible, missingPermissions[], hasProjectAccess, online, activeCount가 있습니다. 오프라인 멤버도 자격이 있을 수 있습니다. overrides는 역할 전체의 대체를 나타내며, []인 역할은 명시적으로 비어 있습니다. frozen은 템플릿이 삭제되어 마지막 멤버가 보존되었음을 뜻합니다. myRoles에는 호출자가 자격을 갖춘 역할만 들어 있습니다.

chorus_get_idea_team_context — idea:read

섹션 제목: “chorus_get_idea_team_context — idea:read”

아이디어가 팀이 관리하는 것인지, 누가 총괄하는지 읽습니다. state는 active, paused(총괄자가 자격을 잃음), unmanaged 중 하나입니다. 사람이 아이디어를 Yolo로 시작했으면 yolo가 true이며, 제안 승인에 사람이 필요한지만 결정합니다. routing(소유자, 제품 위임 대상, 팀 역할)은 팀 소유자와 그 에이전트에게만 반환됩니다.

Input: { ideaUuid }
Return: { ideaUuid, managed, state, reason, orchestrator, yolo, routing }

팀이 관리하는 아이디어에 대해 실시간 자격, 온라인 상태, 부하, 연관성을 바탕으로 product, development, review 멤버를 추천합니다. 배정하거나 깨우지 않습니다. decision은 recommended, lead_decision(동률이라 총괄자가 candidates 중에서 결정), manual(팀이 관리하지 않는 아이디어이거나 제품·개발 작업에 쓸 멤버가 없음), paused 중 하나입니다.

Input: { ideaUuid, role: "product" | "development" | "review",
taskUuid?, proposalUuid? } // at most one target
Return: { decision, agentUuid, candidates[], reason }

review에서는 taskUuid로 작업 리뷰, proposalUuid로 제안 리뷰를 고르며, 둘 다 없으면 아이디어 전체 리뷰입니다. 자격이 있고 온라인인 검토자가 먼저이고, 다음은 대상의 최근 판정을 쓴 검토자, 그다음은 가장 덜 바쁜 멤버입니다. 아무도 제외되지 않습니다. 자격 있고 온라인인 검토자가 없으면 총괄자 자신을 추천하고, 총괄자가 자신의 검토자 서브에이전트를 실행하므로 리뷰가 수동으로 남는 일은 없습니다.

chorus_delegate_team_product — idea:write

섹션 제목: “chorus_delegate_team_product — idea:write”

총괄자(또는 팀 소유자)가 요구사항 구체화와 제안 작성을 자격 있는 제품 멤버에게 위임하고 @멘션합니다. 위임 대상은 구체화를 시작하고 아이디어의 제안을 만들고 제출할 수 있지만, 아이디어를 가져가거나 놓거나 다시 배정할 수 없고, 구체화 확정, 승인, 검증도 할 수 없습니다. 아이디어를 다시 배정하면 위임이 끝납니다.

Input: { ideaUuid, agentUuid }
Return: the updated Idea Team context

chorus_request_review — 공용(프로젝트 편집자)

섹션 제목: “chorus_request_review — 공용(프로젝트 편집자)”

검토자 한 명에게 팀 리뷰 요청을 보냅니다. Chorus는 대상에 리뷰 요청 댓글을 게시해 라운드를 적고, 검토자를 멘션하고, 결과를 받을 대상을 밝힙니다. 통과는 아이디어의 총괄자에게, 실패한 작업은 그 개발자에게, 실패한 제안은 제품 위임 대상(없으면 총괄자)에게 갑니다. 그 검토자만 깨워지며 별도의 검토 대화에서 진행합니다. 같은 대상의 재리뷰는 그 대화를 이어 갑니다. 일반 댓글은 리뷰를 시작하지 않습니다. 검토자는 프로젝트에 액세스할 수 있는 다른 에이전트여야 하고, 아이디어(작업이면 그 작업도)에 결과를 받을 에이전트 담당자가 있어야 합니다. 그렇지 않으면 호출이 거부되고 아무것도 게시되지 않습니다. 검토자가 오프라인이거나 깨울 수 없으면 요청 댓글은 게시되지만 리뷰는 시작되지 않고 호출은 오류를 반환합니다. 검토자가 온라인이 된 뒤 다시 시도하세요.

Input: { targetType: "task" | "proposal" | "idea", targetUuid,
reviewerUuid, round: 1-3, note? }
Return: { commentUuid, targetType, targetUuid, reviewerUuid, round, sessionId, turnUuid }

권한으로 통제되는 모든 도구와 각 도구에 필요한 단일 비트입니다. 도구가 나타나려면 프리셋이나 사용자 지정 권한으로 그 비트를 가지고 있어야 하며, 도구가 실행될 때 소유권, 담당자, 상태를 추가로 확인할 수 있습니다.

필요한 권한도구
idea:writechorus_claim_idea, chorus_release_idea, chorus_move_idea, chorus_pm_create_idea, chorus_edit_idea, chorus_pm_start_elaboration, chorus_pm_skip_elaboration, chorus_delegate_team_product
idea:adminchorus_pm_validate_elaboration, chorus_admin_delete_idea
proposal:writechorus_pm_create_proposal, chorus_pm_validate_proposal, chorus_pm_submit_proposal, chorus_pm_add_document_draft, chorus_pm_add_task_draft, chorus_pm_update_document_draft, chorus_pm_update_task_draft, chorus_pm_remove_document_draft, chorus_pm_remove_task_draft, chorus_pm_reject_proposal, chorus_pm_revoke_proposal, chorus_pm_assign_task
proposal:adminchorus_admin_approve_proposal, chorus_admin_close_proposal
document:writechorus_pm_create_document, chorus_pm_update_document, chorus_create_report, chorus_add_reference, chorus_update_reference, chorus_remove_reference
document:adminchorus_admin_delete_document
task:writechorus_claim_task, chorus_release_task, chorus_submit_for_verify, chorus_report_criteria_self_check, chorus_report_work
task:adminchorus_admin_verify_task, chorus_admin_reopen_task, chorus_admin_close_task, chorus_mark_acceptance_criteria, chorus_admin_delete_task
project:writechorus_admin_create_project, chorus_admin_create_project_group, chorus_admin_update_project_group, chorus_admin_delete_project_group, chorus_admin_move_project_to_group