Atlas / MCP servers / heggria / claude-taskflow

claude-taskflowSAFE

mcp/heggria/taskflow

DAG runtime for coding-agent workflows with verification, resume, replay, and effect checks.

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
76 60r · 15w · 1d
Transport
—
License
MIT
Stars
76
01

Overview

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

[](https://github.com/heggria/taskflow/actions/workflows/ci.yml) [](https://nodejs.org) [](./LICENSE) [](#host-adapters)

English · 简体中文

1.0 overview · Quickstart · Docs · Examples · Changelog

taskflow is a declarative runtime for coding-agent workflows. It turns a graph into a verifiable execution contract, runs phases in isolation, and keeps intermediate work out of the host conversation. In Taskflow 1.0, the contract also describes the effects a phase is allowed to propose.

Taskflow 1.0.0 includes the DAG runtime, trusted filesystem effects and complete Control Plane (CLI/MCP/WebUI). GitHub Releases and npm establish publication; see the acceptance scoreboard for verified scope and limits.

The declared-effect contract

An agent can propose content. It should not become the mutation authority merely because it can run a command.

For admitted, declared filesystem-write targets, taskflow 1.0 makes the path explicit and routes the final mutation through the resources transaction:

flow / .tf.ts
│
▼
validate + verify ──► EffectIR + FlowIR hash
│                         │
│                         ▼
│        
Read from source at commit 726f3e89df8eOBSERVED · 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 taskflow-website --env TASKFLOW_E2E_TOKEN=${TASKFLOW_E2E_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "taskflow-website": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "TASKFLOW_E2E_TOKEN": "${TASKFLOW_E2E_TOKEN}"
      }
    }
  }
}
03

Exposed tools (76)

60 read · 15 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
areadtest agent
alphareadfirst
analystreadbuilt-in analyst
audit-endpointsreadaudit endpoints for auth
auditorreadaudits code
breadtest agent b
bad-thinkingreadtest
barereadminimal
betareadsecond
builder-agentreadbuilder
builtinreadpackage agent
csvreadcsv tools
deepreadfound deep
defaultreadtest
emptyreadno body
executorreadtest executor
fullreadfully specced
gammareadthird
goodreadreadable
gp-agentreadfrom grandparent
judgereadjudge agent
largereadx
linkedreadvia symlink
literal-agentreadliteral
my-flowreaddesc
nomodel-agentreadno model
okreadfine
preadproj
packedreadpacked
parent-agentreadfrom parent
pathcheckreadcheck
plannerreadtest
probereadHarmless compatibility probe
reviewerreadtest
role-agentreadrole
roundtripreadfull fidelity
scoutreadfinds things
scout-agentreadscout
spacesreadspaced tools
stallreadd
treadt
taskflowreadTaskflow
taskflow_analyticsreadSummarize the last N runs of a flow: status histogram, p50/p95 duration, per-phase fail and cache-hit rates. Zero tokens, no writes, no auto-tune.
taskflow_compilereadRender a flow
taskflow_control_approval_decidewriteApprove, reject, or edit a pending approval with its expected run version. Edit requires a staged artifact and editKind.
taskflow_control_approval_stage_editwriteStage bounded output or plan text as a ledger-reachable approval edit artifact. Refresh status before deciding.
taskflow_control_approvalsreadList durable approval requests in the authorized project.
taskflow_control_cancelwriteCancel a run through the Host
taskflow_control_coordinatorreadRead user-global capacity and only this project
taskflow_control_force_releasedestructiveExplicit operator only: release capacity without proving execution stopped; permanently marks operator-overridden. Requires acknowledgement and an audit reason.
taskflow_control_projectsreadList projects authorized for this local session.
taskflow_control_receiptwriteRead the authorized evidence receipt for a terminal run.
taskflow_control_resultwriteRead the authorized run result, including final output only.
taskflow_control_resumewriteResume a recoverable run through Host admission and authority checks.
taskflow_control_runswriteList durable run status in the authorized project.
taskflow_control_set_max_active_runswriteExplicit operator only: set the user-global admitted-run limit. Reuse commandId for exact retries.
taskflow_control_statusreadRead durable status without phase transcripts.
taskflow_control_submitwriteSubmit a flow to the authenticated Host. Reuse commandId when retrying the same request.
taskflow_control_whywriteExplain authorized durable run evidence and effect causes.
taskflow_lintwriteRun built-in and project-local pluggable verifiers (script-lint, custom checks) on a flow WITHOUT executing it. Discovers verifiers from .pi/taskflows/verifiers/. Provide
taskflow_listreadList the saved taskflows discoverable from the current working directory (user + project scope).
taskflow_planreadTerraform-plan for taskflows: bind typed args, verify structure, project phase order + dynamic/unresolved bindings, and compute a worst-case agent-call bound — WITHOUT spawning any agent. Provide
taskflow_replaywriteRe-evaluate a stored run
taskflow_runwriteRun a taskflow DAG and return its final output. Provide EITHER
taskflow_runswriteList recent background runs, inspect one run, wait for completion without losing it when the MCP request ends, or request cancellation. Use after taskflow_run with mode:
taskflow_showreadShow a saved flow
taskflow_verifyreadStatically verify a flow (cycles, missing deps, undefined refs, ...) WITHOUT executing it. Provide
taskflow_versionwriteReport the engine package version, the git commit the dist was built from, the bound host identity (codex/claude/opencode/grok/hermes), and the run-state schema version. Zero tokens, no execution. Use to verify which taskflow build a host is running.
taskflow_why_effectreadGiven a runId + effectId (+ optional phaseId): explain authorization and lifecycle from the durable resource intent ledger. Zero tokens and read-only. A declaration without matching principal/capability/intent evidence is unauthorized.
taskflow_why_stalereadGiven a runId (+ optional phaseId seed): with no seed, prints the observed dependency graph; with a seed, computes the transitive stale frontier — exactly which phases would need re-running and why (observed ∪ declared edges). Zero tokens. Read-only.
testread
tooledreadhas tools
ureaduser
unkreadunknown
workerreadtest worker
writerreadtest
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (1 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (17)

MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
taskflow_control_force_release
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
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/charterarc/test/experimental-release.test.ts:9
} from "../../../scripts/verify-published-package.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/charterarc/test/experimental-release.test.ts:11
const repo = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/charterarc/test/fixtures/plain-taskflow-baseline.ts:16
} from "../../src/project/types.ts";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/charterarc/test/packed-consumer-contract.test.ts:7
const repo = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/charterarc/test/phase-docs-example.test.ts:14
} from "../../../examples/charterarc-phase-docs.ts";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CHANGELOG.md:181
- **Flow hooks (`hooks.onComplete` / `onFail` / `onBlocked`).** Fire-and-forget `webhook` | `file` | `command` (argv only) with summary payload `taskflow.hook.v1` (never transcripts). `https` and `htt
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/internal/minor-0.2.7-alpha-beta-plan.md:247
- `url` must be `https:` (or `http://127.0.0.1` for local dev — document)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/internal/minor-0.2.7-alpha-beta-plan.md:463
| 2 | Webhook localhost | **Allow** `https:` and `http://127.0.0.1` / `http://localhost` (other `http:` rejected) |
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/internal/minor-0.2.7-alpha-beta-plan.md:488
- Allow: `https://...`, `http://127.0.0.1...`, `http://localhost...` (and `[::1]` if we parse IPv6 loopback)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/rfc-library-reuse.md:244
"url": "http://127.0.0.1:8123/v1/embeddings",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/node, typebox, typescript
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/charterarc/package.json
typescript
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/taskflow-dsl/package.json
typescript
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/taskflow-hosts/package.json
typescript
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
website/package.json
@types/mdx, zod
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
website/content/docs/en/blog/claude-code-mcp-workflow.mdx:6
Claude Code is a powerful coding agent on its own. But when a job needs a **repeatable pipeline** — review every changed file, gate on risk, and set an observed-usage stop-loss — ad-hoc prompting runs
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

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 726f3e89df8efull audit observations/trust-audit/mcp-server/heggria__taskflow.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-12726f3e89df8eSAFEB89first audit
06

Questions

What is the claude-taskflow MCP server?

DAG runtime for coding-agent workflows with verification, resume, replay, and effect checks.

What tools does claude-taskflow expose?

76 in total: 60 read-only, 15 that write, and 1 that can delete or overwrite (taskflow_control_force_release). Every one is listed on this page with its risk.

Is claude-taskflow safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. 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 claude-taskflow need?

It reads TASKFLOW_E2E_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 current is this page?

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

Advertisement