Atlas / MCP servers / pipefy / Pipefy Toolkit

Pipefy ToolkitBLOCK

mcp/pipefy/pipefy-toolkit

MCP server, CLI, and agent skills for Pipefy.

Verdict
BLOCK
Grade
F
Trust score
59 /100
Exposed tools
9 8r · 0w · 1d
Transport
stdio · streamable-http
License
Apache-2.0
Stars
49
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

<img src="docs/images/pipefy-developers-banner.png" alt="Pipefy Developers — AI Toolkit (MCP Server, Pipefy CLI, GraphQL SDK, Agent Skills)" width="100%" />

Overview • Installation • Repository layout • MCP server • CLI • Agent skills • Documentation • Development • Contributing • Legal

Overview

Read from source at commit b66076a1a7fdOBSERVED · 2026-10-08
Advertisement
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 pipefy-workspace --env PIPEFY_TOKEN=${PIPEFY_TOKEN} -- uvx pipefy-workspace
claude-desktop
{
  "mcpServers": {
    "pipefy-workspace": {
      "command": "uvx",
      "args": [
        "pipefy-workspace"
      ],
      "env": {
        "PIPEFY_TOKEN": "${PIPEFY_TOKEN}"
      }
    }
  }
}
03

Exposed tools (9)

8 read · 0 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
boomreadraise RuntimeError(
delete_probedestructivereturn {
deniedreadreturn
echoreadreturn f
failed_requestreadreturn tool_error(message, code=
failingreadreturn tool_error(message, code=code, details=details)
foreign_mcp_toolreadPre-existing tool; the lifespan must not touch the tool table.
foreign_probereadreturn
probereadreturn {
04

Trust audit

BLOCKgrade F · trust 59/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)FAIL
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (10 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/api-troubleshoot/pipefy-api-fallback/SKILL.md:40
TOKEN=$(curl -s -X POST https://app.pipefy.com/oauth/token \
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/ipaas/pipefy-ipaas/SKILL.md:36
- **Service account must be a pipe member.** When a flow runs under a service account, that account must be a member of the target pipe, or pipe-scoped calls under its identity fail with a permission
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/members-email-webhooks/pipefy-members-email-webhooks/SKILL.md:46
1. **Get the service account's email.** Either create one with `create_service_account(organization_uuid, name, role)` — which returns the account's email plus its OAuth2 client secret and token endpo
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/members-email-webhooks/pipefy-members-email-webhooks/SKILL.md:96
> **Header values are secrets.** `get_webhooks` returns each webhook's `headers` unmasked, and they usually hold authorization tokens or API keys. In a reply, name only the header keys (for example `A
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
packages/sdk/src/pipefy_sdk/skills/__init__.py:32
data = yaml.load("\n".join(lines[1:end]), Loader=UniqueKeyLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/sdk/tests/services/test_llm_provider_service.py:28
SECRET = "sk-SUPER-SECRET-TOKEN"
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_probe
Why it matters. 1 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
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.symlink · CWE-1104
packages/mcp/CLAUDE.md
packages/mcp/CLAUDE.md
Why it matters. link not followed
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/infra/tests/test_security.py:90
(socket.AF_INET, socket.SOCK_STREAM, 0, "", ("169.254.169.254", 0)),
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/infra/tests/test_security.py:103
"::ffff:169.254.169.254",  # AWS IMDS (link-local)
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/infra/tests/test_security.py:131
"::ffff:169.254.169.254",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/mcp/tests/test_settings.py:101
monkeypatch.setenv("PIPEFY_BASE_URL", "https://169.254.169.254")
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/sdk/tests/services/pipefy/test_observability_export_csv.py:224
location="http://169.254.169.254/latest/meta-data/",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/auth/tests/test_discovery.py:56
jwks = "http://127.0.0.1:8080/certs"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/auth/tests/test_jwt_validation_settings.py:103
settings = JwtValidationSettings(issuer_url="http://127.0.0.1:8080/realms/x")
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/auth/tests/test_jwt_validation_settings.py:105
assert settings.issuer_url == "http://127.0.0.1:8080/realms/x"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/auth/tests/test_verification.py:219
jwks_uri="https://127.0.0.1/certs",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/auth/tests/test_verification.py:241
jwks_uri="http://127.0.0.1/certs",
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
docs/mcp/tools/knowledge-bases.md:82
- **Clean-gate contract.** The probe can return a success that still carries a `problem` — when the API returns partial data alongside GraphQL errors, it surfaces the classified error rather than disc
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
docs/mcp/tools/llm-providers.md:86
- **Clean-gate contract.** The probe can return a success that still carries a `problem` — when the API returns partial data alongside GraphQL errors, the probe surfaces the classified error rather th
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/cli/auth.md:169
- **Keychain read failed and nothing was deleted** — presence could not be established, so the command claims neither removal nor a clean machine: stderr `Could not read the keychain to check for a st
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/config.md:3
`pipefy` and `pipefy-auth` read an optional TOML file in addition to environment variables. The file lets operators pin defaults (base URLs, org IDs, service-account credentials, ...) per host without
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/mcp/tools/service-accounts.md:17
- The secret is returned to the caller because it is needed to authenticate the account (mint access tokens via the OAuth2 client-credentials grant against the token endpoint). It is never logged.
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
packages/auth/README.md:16
`pipefy-cli` and `pipefy-mcp-server` both depend on this package and read the same keychain entry, so a single `pipefy auth login` serves both binaries.
Why it matters. asks the agent to read credentials

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-10-08 · audit v0.4.1 · source sha b66076a1a7fdfull audit observations/trust-audit/mcp-server/pipefy__pipefy-toolkit.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-08b66076a1a7fdBLOCKF59first audit
06

Questions

What is the Pipefy Toolkit MCP server?

MCP server, CLI, and agent skills for Pipefy.

What tools does Pipefy Toolkit expose?

9 in total: 8 read-only, 0 that write, and 1 that can delete or overwrite (delete_probe). Every one is listed on this page with its risk.

Is Pipefy Toolkit safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (59/100) and found 5 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: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Pipefy Toolkit need?

It reads PIPEFY_TOKEN 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 Pipefy Toolkit run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as pipefy-workspace.

How current is this page?

The grade is for one exact copy of the source (b66076a1a7fd), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement