AgentRQ
OFFICIAL SERVERTask board, chat and approvals between people and coding agents, served to them over MCP
Self-hosted project tracker where coding agents plan, claim and report work for people to verify
Official · Chorus AI-DLC TypeScript Local · Streamable HTTP ProductivityDeveloper tools
74 popularity score ★ 1.2k ↓ 483/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
claude mcp add --transport http chorus http://localhost:8637/api/mcp --header 'Authorization: Bearer <API_KEY>'{
"mcpServers": {
"chorus": {
"url": "http://localhost:8637/api/mcp",
"headers": {
"Authorization": "Bearer <API_KEY>"
}
}
}
}{
"servers": {
"chorus": {
"type": "http",
"url": "http://localhost:8637/api/mcp",
"headers": {
"Authorization": "Bearer <API_KEY>"
}
}
}
}[mcp_servers.chorus]
url = "http://localhost:8637/api/mcp"
http_headers = { "Authorization" = "Bearer <API_KEY>" }gemini mcp add --scope user --transport http --header 'Authorization: Bearer <API_KEY>' chorus http://localhost:8637/api/mcpChorus is a web app you run yourself that keeps ideas, proposals, documents and tasks for software projects. Coding agents connect to it over MCP and work through a fixed pipeline: an idea is clarified, an agent drafts a proposal holding documents and a dependency graph of tasks, a person approves it, agents claim and carry out the tasks, and a person verifies each one before it closes. The web interface shows the same records as a kanban board and a project graph.
The MCP endpoint is part of the Chorus server at /api/mcp, served over Streamable HTTP and authenticated with a per-agent API key (it begins with cho_). It is stateless: each request is checked against the key, and the list of tools an agent sees is rebuilt from that key's permissions on every call. Permissions are 15 bits (read, write and admin on ideas, proposals, documents, tasks and projects), with presets for developer, PM and admin agents. Public read tools carry no gate; approval, verification, deletion and project management need admin bits.
Version 0.23.0 names 83 tools in src/mcp/tools/permission-map.ts, more than the docs' tools reference describes. chorus_checkin, which the docs suggest at session start, returns a per-project count of the agent's active ideas rather than a list, and marks up to five unread notifications as read; chorus_get_notifications also marks what it fetches as read unless autoMarkRead is false. Session tools let a lead agent open, heartbeat and close sessions for sub-agents.
A separate chorus daemon command can keep a machine online so Chorus can start Claude Code, Codex, TRAE CLI (from 0.22.2), Kiro or Pi there for assigned work. That daemon is not part of the MCP tool surface.
| Runtime | Node.js 22+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Chorus (self-hosted) | Your own instanceYour own Chorus server; each agent needs a cho_ API key from Settings → Agents |
| Also |
|
Install the package globally (npm install -g @chorus-aidlc/chorus) and start it with chorus. It serves the web app and the MCP endpoint on port 8637 with an embedded PGlite database. Create each agent's API key in the web app under Settings → Agents (shown once), then point the client at http://localhost:8637/api/mcp with the header Authorization: Bearer <API_KEY>. The in-app Settings → Setup Guide, or chorus agents add, writes the setup for Claude Code, Codex, TRAE CLI and other clients.
There is no stdio mode: clients connect to the HTTP endpoint of a running Chorus server. What an agent can do is capped by its key's permission bits and by its owner's role in each project. A private project the owner cannot see returns not-found, and too low a role returns forbidden. Only chorus_get_my_assignments honours the X-Chorus-Project scoping headers. chorus_checkin's idea list is capped at ten and covers all projects. Project members and an existing project's visibility can only be managed in the web UI; no tool covers them. The embedded database suits a single user; the docs point to external PostgreSQL for multiple agents or production.
Suits a team or a single developer who wants several coding agents to work from one shared, permissioned task store, with a person approving plans and verifying results. It is a whole application to run and keep up (Node.js 22, and PostgreSQL 17 plus Redis for shared installs), not a thin connector to an existing tracker; if your tasks already live in another tracker, a server for that tracker fits better. Licensed AGPL-3.0, which matters if you plan to offer a modified version over a network.
22 only read, 37 change things, 1 can delete or overwrite. A ? marks an optional parameter.
chorus_checkin changeschorus_get_my_assignmentschorus_list_projectspage?: integerpageSize?: integerchorus_get_projectprojectUuid: stringchorus_get_project_groupspage?: integerpageSize?: integerchorus_get_project_groupgroupUuid: stringincludeMembers?: booleanchorus_get_group_dashboardgroupUuid: stringchorus_get_activityprojectUuid: stringpage?: integerpageSize?: integerchorus_searchquery: stringscope?: enumscopeUuid?: stringentityTypes?: arraychorus_search_mentionablesquery: stringlimit?: integerentityType?: enumentityUuid?: stringchorus_get_ideasprojectUuid: stringstatus?: enumpage?: integerpageSize?: integerchorus_get_ideaideaUuid: stringchorus_get_available_ideasprojectUuid: stringchorus_get_elaborationideaUuid: stringchorus_get_proposalsprojectUuid: stringstatus?: enumpage?: integerpageSize?: integerchorus_get_proposalproposalUuid: stringsection?: enumchorus_get_documentsprojectUuid: stringtype?: enumpage?: integerpageSize?: integerchorus_get_documentdocumentUuid: stringchorus_list_tasksprojectUuid: stringstatus?: enumpriority?: enumproposalUuids?: arraypage?: integerpageSize?: integerchorus_get_tasktaskUuid: stringchorus_get_available_tasksprojectUuid: stringproposalUuids?: arraychorus_get_unblocked_tasksprojectUuid: stringproposalUuids?: arraypage?: integerpageSize?: integerchorus_get_commentstargetType: enumtargetUuid: stringpage?: integerpageSize?: integerchorus_get_notifications changesstatus?: enumlimit?: integeroffset?: integerautoMarkRead?: booleanchorus_mark_notification_read changesnotificationUuid?: stringall?: booleanchorus_add_comment changestargetType: enumtargetUuid: stringcontent: stringchorus_answer_elaboration changesideaUuid: stringroundUuid?: stringanswers: arraychorus_create_tasks changesprojectUuid: stringproposalUuid?: stringtasks: arraychorus_update_task changestaskUuid: stringstatus?: enumsessionUuid?: stringtitle?: stringdescription?: stringpriority?: enumstoryPoints?: numberacceptanceCriteriaItems?: arrayaddDependsOn?: arrayremoveDependsOn?: arraychorus_create_report changesproposalUuid: stringtitle: stringcontent: stringforce?: booleanchorus_claim_idea changeschorus_release_idea changeschorus_pm_create_idea changeschorus_edit_idea changeschorus_move_idea changeschorus_pm_assign_idea changeschorus_pm_start_elaboration changeschorus_pm_skip_elaboration changeschorus_pm_validate_elaboration changeschorus_pm_create_proposal changeschorus_pm_add_document_draft changeschorus_pm_add_task_draft changeschorus_pm_update_task_draft changeschorus_pm_validate_proposal changeschorus_pm_submit_proposal changeschorus_admin_approve_proposal changeschorus_pm_reject_proposal changeschorus_pm_create_document changeschorus_pm_update_document changeschorus_claim_task changestaskUuid: stringchorus_release_task changestaskUuid: stringchorus_report_work changestaskUuid: stringreport: stringstatus?: enumsessionUuid?: stringchorus_report_criteria_self_check changestaskUuid: stringcriteria: arraychorus_submit_for_verify changestaskUuid: stringsummary?: stringchorus_admin_verify_task changeschorus_admin_reopen_task changeschorus_admin_delete_task deleteschorus_create_session changeschorus_session_heartbeat changeschorus_close_session changes