PacaBLOCK
AI-native, free, open-source alternative to Jira, Trello, ClickUp & Monday. Built for Scrum teams where humans and AI agents collaborate as equals — on the same board, the same sprints, the same goals. Self-hosted. Fully customizable via config and plugins.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Paca
AI-native. Free. Lightweight. Open-source.The fully customizable alternative to Jira, Trello, ClickUp, and Monday.
✨ Sponsored by
Getting Started · <
f5e3f3a389b4OBSERVED · 2026-10-12Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add paca-realtime --env E2E_AGENT_API_KEY=${E2E_AGENT_API_KEY} --env E2E_PASSWORD=${E2E_PASSWORD} --env PACA_API_KEY=${PACA_API_KEY} -- npx -y [email protected]{
"mcpServers": {
"paca-realtime": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"E2E_AGENT_API_KEY": "${E2E_AGENT_API_KEY}",
"E2E_PASSWORD": "${E2E_PASSWORD}",
"PACA_API_KEY": "${PACA_API_KEY}"
}
}
}
}Exposed tools (96)
47 read · 34 write · 15 destructive. Blast radius: 15 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
Admin | read | Runs the project |
Alpha | read | desc |
Backup | read | |
DEVELOPER | read | |
Developer | read | Dev role |
EDITOR | write | Can edit tasks |
LEAD | read | keeps tasks moving |
Lead | read | |
REVIEWER | read | reads everything |
ROOT | read | Everything |
Reader | read | |
SUPER_ADMIN | read | |
add_doc_comment | write | Add a comment to a document. ${MENTION_NOTE} |
add_project_member | write | Add a member to a project |
add_task_comment | write | Add a comment to a task |
bulk_move_tasks | write | Bulk move tasks in a view |
clone_repository | read | Clone a repository into your workspace so you can read and |
complete_sprint | read | Mark a sprint as completed |
create_automation | write | Create a new automation, optionally building out its whole graph in one call: nodes (triggers/conditions/actions) and edges between them. Starts in |
create_custom_field | write | Create a new custom field definition |
create_project | write | Create a new project |
create_project_role | write | Create a new project role |
create_sprint | write | Create a new sprint |
create_task | write | Create a new task |
create_task_link | write | Create a link between two tasks. Use |
create_task_status | write | Create a new task status |
create_task_type | write | Create a new task type |
create_view | write | Create a new view. For a plugin-provided view (e.g. a plugin |
delete_automation | destructive | Permanently delete an automation. |
delete_custom_field | destructive | Delete a custom field definition |
delete_doc | destructive | Delete a document or folder by path. |
delete_doc_comment | destructive | Delete a document comment. |
delete_project | destructive | Delete a project |
delete_project_role | destructive | Delete a project role |
delete_sprint | destructive | Delete a sprint |
delete_task | destructive | Delete a task |
delete_task_attachment | destructive | Delete an attachment from a task |
delete_task_comment | destructive | Delete a task comment |
delete_task_link | destructive | Remove a link between two tasks |
delete_task_status | destructive | Delete a task status |
delete_task_type | destructive | Delete a task type |
delete_view | destructive | Delete a view |
get_annotation | read | Get full detail for one page comment: the commented-on element, the full reply thread, and any captured console errors / failed network requests |
get_attachment_download_url | read | Get a download URL for an attachment |
get_automation | read | Get information about automations in a project. Pass automationId to fetch one automation |
get_custom_field | read | Get details of a custom field definition |
get_my_project_permissions | read | Get the IAM actions (e.g. |
get_project | read | Get details of a specific project |
get_sprint | read | Get details of a specific sprint |
get_task | read | Get comprehensive details of a specific task including all properties, subtasks, attachments, and activities - everything that users can see in the task detail component of the web app |
get_task_by_number | read | Get comprehensive details of a task by its number within a project including all properties, subtasks, attachments, and activities |
get_view | read | Get details of a specific view |
list_annotations | read | List page comments (annotations pinned to elements of a page via the browser extension) in a project, across every environment and port forward unless filtered |
list_custom_fields | read | List all custom field definitions in a project |
list_doc_activities | read | List all activity for a document (comments and system events), oldest first. Each entry includes actor_name and actor_username. |
list_docs | read | List the documentation tree for a project, showing folders and documents in a filesystem-like hierarchy. |
list_project_members | read | List all members of a project |
list_project_roles | read | List all roles in a project |
list_projects | read | List all projects accessible to the authenticated user |
list_repositories | read | List all available repositories from all repository plugins |
list_sprints | read | List all sprints in a project |
list_task_activities | read | List all activities for a task |
list_task_attachments | read | List all attachments for a task |
list_task_links | read | List all links for a task, showing how it relates to other tasks (blocks, is blocked by, relates to, duplicates, is duplicated by) |
list_task_positions | read | List task positions in a view |
list_task_statuses | read | List all task statuses in a project |
list_task_types | read | List all task types in a project |
list_tasks | read | List tasks in a project with optional filters |
list_views | read | List all views in a project. Use context= |
move_doc | write | Move or rename a document or folder by specifying a source path and destination path. |
move_task | write | Move a task within a view |
push_branch | write | Push the current local branch to the remote repository. Call |
read_conversation | read | Read another conversation |
read_doc | read | Read the Markdown content of a document, either by its path (e.g. |
read_task_attachment | read | Download and read the contents of a task attachment. Text-based files |
remove_project_member | destructive | Remove a member from a project |
reorder_views | read | Reorder views in a project |
search_docs | read | Search a project |
search_tasks | read | Search a project |
set_default_task_status | write | Set a task status as the default for the project |
set_default_task_type | write | Set a task type as the default for the project |
update_automation | write | Update an automation: rename/describe it, change its lifecycle status, and/or edit its graph (nodes, edges) — all in one call. Use get_automation first to see the automation |
update_custom_field | write | Update a custom field definition |
update_doc_comment | write | Update a document comment. |
update_project | write | Update an existing project |
update_project_member_role | write | Replace the set of roles a project member holds in the project |
update_project_role | write | Update an existing project role |
update_sprint | write | Update an existing sprint |
update_task | write | Update an existing task |
update_task_comment | write | Update a task comment |
update_task_status | write | Update an existing task status |
update_task_type | write | Update an existing task type |
update_view | write | Update an existing view |
upload_task_attachment | write | Upload a local file as an attachment on a task. Reads the file at |
write_doc | write | Create or update a document at the given path. |
x | read |
Trust audit
BLOCKgrade F · trust 49/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (11 observation(s))
- Network
- declared (10 observation(s))
- Shell
- declared (4 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
func (m *Manager) Exec(ctx context.Context, containerID string, cmd []string) (output string, exitCode int, err error) {func (m *Manager) Exec(ctx context.Context, containerID string, cmd []string) (output string, exitCode int, err error) {Exec(ctx context.Context, containerID string, cmd []string) (output string, exitCode int, err error)
func (n *Node) Eval(attrs map[string][]string) bool {command={`ssh -i ~/.ssh/id_ed25519 -p ${sshPort} root@${host ?? "<bastion-host>"}`}# authorized_keys, no server-side change needed there. Each environment's
environmentAuthorizedKeysName = ".ssh_authorized_keys"
return fmt.Errorf("sandbox: write authorized_keys tar: %w", err)return fmt.Errorf("sandbox: write authorized_keys tar: %w", err)# Default: postgres://paca:POSTGRES_PASSWORD@postgres:5432/paca?sslmode=disable
DATABASE_URL: postgres://paca:paca@postgres:5432/paca?sslmode=disable
DATABASE_URL: postgres://paca:paca@postgres:5432/paca
DATABASE_URL: postgres://paca:e2e-postgres-password@postgres:5432/paca?sslmode=disable
DATABASE_URL: postgres://paca:e2e-postgres-password@postgres:5432/paca
? provider.callback_url
callback_url: string;
CallbackURL string `json:"callback_url"`
delete_automation, delete_custom_field, delete_doc, delete_doc_comment, delete_project, delete_project_role, delete_sprint, delete_task, delete_task_attachment, delete_task_comment, delete_task_link,
.env.dev.example
.env.production.example
.helmignore
.air.toml
.golangci.yml
exec(`INSERT INTO users (id, username, password_hash, full_name, role_id, email) VALUES ($1,'alice','x','Alice A',$2,'[email protected]')`, alice, userRole)
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"Gates applied: no_behavioural_pass.
f5e3f3a389b4full audit observations/trust-audit/mcp-server/paca-ai__paca.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | f5e3f3a389b4 | BLOCK | F | 49 | first audit |
Questions
What is the @paca-ai/paca-mcp MCP server?
AI-native, free, open-source alternative to Jira, Trello, ClickUp & Monday. Built for Scrum teams where humans and AI agents collaborate as equals — on the same board, the same sprints, the same goals. Self-hosted. Fully customizable via config and plugins.
What tools does @paca-ai/paca-mcp expose?
96 in total: 47 read-only, 34 that write, and 15 that can delete or overwrite (delete_automation, delete_custom_field, delete_doc, delete_doc_comment, delete_project). Every one is listed on this page with its risk.
Is @paca-ai/paca-mcp safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (49/100) and found 14 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 15 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does @paca-ai/paca-mcp need?
It reads E2E_AGENT_API_KEY, E2E_PASSWORD and PACA_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does @paca-ai/paca-mcp run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as paca-realtime at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (f5e3f3a389b4), read on 2026-10-12. The repository is watched and re-audited when it changes.