Atlas / MCP servers / paca-ai / Paca

PacaBLOCK

mcp/paca-ai/paca

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.

Verdict
BLOCK
Grade
F
Trust score
49 /100
Exposed tools
96 47r · 34w · 15d
Transport
stdio · streamable-http
License
Apache-2.0
Stars
1,916
01

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 · <

Read from source at commit f5e3f3a389b4OBSERVED · 2026-10-12
02

Connect

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-code
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]
claude-desktop
{
  "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}"
      }
    }
  }
}
03

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.

ToolRiskDescription
AdminreadRuns the project
Alphareaddesc
Backupread
DEVELOPERread
DeveloperreadDev role
EDITORwriteCan edit tasks
LEADreadkeeps tasks moving
Leadread
REVIEWERreadreads everything
ROOTreadEverything
Readerread
SUPER_ADMINread
add_doc_commentwriteAdd a comment to a document. ${MENTION_NOTE}
add_project_memberwriteAdd a member to a project
add_task_commentwriteAdd a comment to a task
bulk_move_taskswriteBulk move tasks in a view
clone_repositoryreadClone a repository into your workspace so you can read and
complete_sprintreadMark a sprint as completed
create_automationwriteCreate a new automation, optionally building out its whole graph in one call: nodes (triggers/conditions/actions) and edges between them. Starts in
create_custom_fieldwriteCreate a new custom field definition
create_projectwriteCreate a new project
create_project_rolewriteCreate a new project role
create_sprintwriteCreate a new sprint
create_taskwriteCreate a new task
create_task_linkwriteCreate a link between two tasks. Use
create_task_statuswriteCreate a new task status
create_task_typewriteCreate a new task type
create_viewwriteCreate a new view. For a plugin-provided view (e.g. a plugin
delete_automationdestructivePermanently delete an automation.
delete_custom_fielddestructiveDelete a custom field definition
delete_docdestructiveDelete a document or folder by path.
delete_doc_commentdestructiveDelete a document comment.
delete_projectdestructiveDelete a project
delete_project_roledestructiveDelete a project role
delete_sprintdestructiveDelete a sprint
delete_taskdestructiveDelete a task
delete_task_attachmentdestructiveDelete an attachment from a task
delete_task_commentdestructiveDelete a task comment
delete_task_linkdestructiveRemove a link between two tasks
delete_task_statusdestructiveDelete a task status
delete_task_typedestructiveDelete a task type
delete_viewdestructiveDelete a view
get_annotationreadGet 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_urlreadGet a download URL for an attachment
get_automationreadGet information about automations in a project. Pass automationId to fetch one automation
get_custom_fieldreadGet details of a custom field definition
get_my_project_permissionsreadGet the IAM actions (e.g.
get_projectreadGet details of a specific project
get_sprintreadGet details of a specific sprint
get_taskreadGet 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_numberreadGet comprehensive details of a task by its number within a project including all properties, subtasks, attachments, and activities
get_viewreadGet details of a specific view
list_annotationsreadList 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_fieldsreadList all custom field definitions in a project
list_doc_activitiesreadList all activity for a document (comments and system events), oldest first. Each entry includes actor_name and actor_username.
list_docsreadList the documentation tree for a project, showing folders and documents in a filesystem-like hierarchy.
list_project_membersreadList all members of a project
list_project_rolesreadList all roles in a project
list_projectsreadList all projects accessible to the authenticated user
list_repositoriesreadList all available repositories from all repository plugins
list_sprintsreadList all sprints in a project
list_task_activitiesreadList all activities for a task
list_task_attachmentsreadList all attachments for a task
list_task_linksreadList all links for a task, showing how it relates to other tasks (blocks, is blocked by, relates to, duplicates, is duplicated by)
list_task_positionsreadList task positions in a view
list_task_statusesreadList all task statuses in a project
list_task_typesreadList all task types in a project
list_tasksreadList tasks in a project with optional filters
list_viewsreadList all views in a project. Use context=
move_docwriteMove or rename a document or folder by specifying a source path and destination path.
move_taskwriteMove a task within a view
push_branchwritePush the current local branch to the remote repository. Call
read_conversationreadRead another conversation
read_docreadRead the Markdown content of a document, either by its path (e.g.
read_task_attachmentreadDownload and read the contents of a task attachment. Text-based files
remove_project_memberdestructiveRemove a member from a project
reorder_viewsreadReorder views in a project
search_docsreadSearch a project
search_tasksreadSearch a project
set_default_task_statuswriteSet a task status as the default for the project
set_default_task_typewriteSet a task type as the default for the project
update_automationwriteUpdate 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_fieldwriteUpdate a custom field definition
update_doc_commentwriteUpdate a document comment.
update_projectwriteUpdate an existing project
update_project_member_rolewriteReplace the set of roles a project member holds in the project
update_project_rolewriteUpdate an existing project role
update_sprintwriteUpdate an existing sprint
update_taskwriteUpdate an existing task
update_task_commentwriteUpdate a task comment
update_task_statuswriteUpdate an existing task status
update_task_typewriteUpdate an existing task type
update_viewwriteUpdate an existing view
upload_task_attachmentwriteUpload a local file as an attachment on a task. Reads the file at
write_docwriteCreate or update a document at the given path.
xread
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
services/agent-runner/internal/sandbox/docker/manager.go:544
func (m *Manager) Exec(ctx context.Context, containerID string, cmd []string) (output string, exitCode int, err error) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
services/agent-runner/internal/sandbox/k8s/manager.go:511
func (m *Manager) Exec(ctx context.Context, containerID string, cmd []string) (output string, exitCode int, err error) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
services/agent-runner/internal/sandbox/sandbox.go:139
Exec(ctx context.Context, containerID string, cmd []string) (output string, exitCode int, err error)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
services/api/internal/platform/authz/iam/scope.go:135
func (n *Node) Eval(attrs map[string][]string) bool {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
apps/web/src/components/projects/environments/environment-connect.tsx:489
command={`ssh -i ~/.ssh/id_ed25519 -p ${sshPort} root@${host ?? "<bastion-host>"}`}
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
deploy/docker-compose.prod.yml:45
# authorized_keys, no server-side change needed there. Each environment's
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
services/agent-runner/internal/sandbox/environmentssh.go:48
environmentAuthorizedKeysName = ".ssh_authorized_keys"
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
services/agent-runner/internal/sandbox/environmentssh.go:90
return fmt.Errorf("sandbox: write authorized_keys tar: %w", err)
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
services/agent-runner/internal/sandbox/environmentssh.go:93
return fmt.Errorf("sandbox: write authorized_keys tar: %w", err)
Why it matters. touches a credential store
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
deploy/.env.production.example:43
# Default: postgres://paca:POSTGRES_PASSWORD@postgres:5432/paca?sslmode=disable
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
deploy/docker-compose.dev.yml:121
DATABASE_URL: postgres://paca:paca@postgres:5432/paca?sslmode=disable
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
deploy/docker-compose.dev.yml:345
DATABASE_URL: postgres://paca:paca@postgres:5432/paca
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
deploy/docker-compose.e2e.yml:47
DATABASE_URL: postgres://paca:e2e-postgres-password@postgres:5432/paca?sslmode=disable
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
deploy/docker-compose.e2e.yml:232
DATABASE_URL: postgres://paca:e2e-postgres-password@postgres:5432/paca
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
apps/web/src/components/admin/settings/SsoProviderDialog.tsx:113
? provider.callback_url
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
apps/web/src/lib/sso-api.ts:27
callback_url: string;
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
services/api/internal/transport/http/dto/sso_dto.go:54
CallbackURL     string    `json:"callback_url"`
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
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,
Why it matters. 15 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
deploy/.env.dev.example
.env.dev.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
deploy/.env.production.example
.env.production.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
deploy/helm/paca/.helmignore
.helmignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
services/agent-runner/.air.toml
.air.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
services/agent-runner/.golangci.yml
.golangci.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
services/api/test/integration/accounts_migration_test.go:46
exec(`INSERT INTO users (id, username, password_hash, full_name, role_id, email) VALUES ($1,'alice','x','Alice A',$2,'[email protected]')`, alice, userRole)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/e2e/scripts/stack-down.sh:6
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha f5e3f3a389b4full audit observations/trust-audit/mcp-server/paca-ai__paca.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12f5e3f3a389b4BLOCKF49first audit
06

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.

Advertisement