Nofax
NPM · NOFAX
Human-in-the-loop approvals and notifications for AI coding agents through a local stdio MCP server.
Available components
Last scanned (11 hours ago)
Scores higher than 99% of npm servers
Category Workflow Automation
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 0 of 3 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to AKzar1el/nofax). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 5 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability83
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 827 tokens (~118/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 31 Oct 26 0
- Stability: 0.97 → pass security
- 30 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- Stability: pass → 0.97 functional
- Package version: 0.2.46 → 0.2.48 functional
- Package version: 0.2.46 → 0.2.47 functional
- 29 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 0.2.45 → 0.2.46 functional
- 25 Oct 26 +15
- Stability: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- Package version: 0.2.44 → 0.2.45 functional
- 24 Oct 26 −10
- CVE-2023-54404 affects this package: high ▼ security
- Malware scan: pass → unverified ▼ security
- CVE-2026-111770 no longer affects this package ▲ security
- CVE-2026-111768 no longer affects this package ▲ security
- CVE-2026-111771 no longer affects this package ▲ security
- Known CVEs: fail → pass ▲ security
- Package version: 0.2.43 → 0.2.44 functional
- 21 Oct 26 −5
- CVE-2026-111771 affects this package: high ▼ security
- CVE-2026-111770 affects this package: high ▼ security
- CVE-2026-111768 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- Stability: 0.97 → pass security
- 20 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/nofax@0.2.48
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | AKzar1el/nofax |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/AKzar1el/nofax/.github/workflows/publish.yml@refs/tags/v0.2.48 |
| Rekor log index | 3584580921 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:b9d223ca7d6beb69ec8eaeaf4933d6c08f5927867d7b1a40136e69d78ec811ea4f34a53c633bf6acbfbeb19830a714dfdbe8f4cc4565d954c3b5c6e5d |
Background: How many MCP packages publish verified provenance →
Dependencies 3 packages
| Packages resolved | 3 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
nofax_get_request Get Nofax request ~82
Inspect safe metadata and terminal state for one known durable requestId without waiting. Use nofax_wait_for_response when the caller must wait for a human decision, or nofax_list_pending to recover requestIds after interruption. Secret response topics are never returned.
| Name | Type | Req | Description |
|---|---|---|---|
| requestId | string | yes | Durable Nofax request handle to inspect without exposing its secret response topic. |
| Name | Type | Req | Description |
|---|---|---|---|
| request | object | yes | Safe request metadata and terminal state; secret response topics are omitted. |
| status | string | yes | The durable request was read successfully. |
No examples provided.
nofax_list_pending List pending Nofax requests ~55
List a bounded set of unresolved Nofax request handles for recovery after client or conversation interruption. Secret response topics are never returned.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of unresolved requests to return; defaults to 20. |
| Name | Type | Req | Description |
|---|---|---|---|
| requests | array | yes | Bounded unresolved request projections with no secret response topics. |
| status | string | yes | The pending-request scan completed successfully. |
No examples provided.
nofax_notify Send Nofax notification ~71
Send a one-way phone notification. This tool is informational and does not create a human-response wait. Notification transport success never counts as approval.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Notification body shown to the human. |
| title | string | – | Optional notification title shown to the human; defaults to "Nofax". |
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | yes | The notification transport call completed successfully; this is never approval. |
No examples provided.
nofax_request_approval Request human approval ~141
Send Allow/Deny to the phone and return a durable pending requestId. IMPORTANT: after this tool returns pending, call nofax_wait_for_response and repeat while it remains pending. Never continue the guarded action without a terminal Allow response. Set allowRefine when the human should also be able to send refinement text.
| Name | Type | Req | Description |
|---|---|---|---|
| allowRefine | boolean | – | When true, also let the human return free-text refinement instead of only Allow or Deny. |
| message | string | yes | Guarded action or decision context shown to the human. |
| title | string | – | Optional approval prompt title shown to the human; defaults to "Nofax approval". |
| Name | Type | Req | Description |
|---|---|---|---|
| instruction | string | yes | Fail-closed next-step instruction for the caller. |
| mustWait | boolean | yes | Signals that the caller must keep waiting for a terminal human response. |
| requestId | string | yes | Durable Nofax request handle. |
| status | string | yes | The request is unresolved and must not be treated as approval. |
No examples provided.
nofax_request_choice Request human choice ~104
Send up to three explicit options to the phone and return a durable pending requestId. IMPORTANT: call nofax_wait_for_response and repeat while pending; do not choose on the human's behalf.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Question or decision context shown to the human. |
| options | array | yes | One to three explicit choices to present to the human. |
| title | string | – | Optional choice prompt title shown to the human; defaults to "Nofax choice". |
| Name | Type | Req | Description |
|---|---|---|---|
| instruction | string | yes | Fail-closed next-step instruction for the caller. |
| mustWait | boolean | yes | Signals that the caller must keep waiting for a terminal human response. |
| requestId | string | yes | Durable Nofax request handle. |
| status | string | yes | The request is unresolved and must not be treated as approval. |
No examples provided.
nofax_request_refinement Request human refinement ~116
Ask the human for free-text refinement through the configured Nofax Refine iOS Shortcut. Use this when free-text edits are needed; use nofax_request_approval for Allow/Deny or nofax_request_choice for predefined options. Returns a durable pending requestId; call nofax_wait_for_response and repeat while pending.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Context or draft the human should refine with free text. |
| title | string | – | Optional refinement prompt title shown to the human; defaults to "Nofax refinement". |
| Name | Type | Req | Description |
|---|---|---|---|
| instruction | string | yes | Fail-closed next-step instruction for the caller. |
| mustWait | boolean | yes | Signals that the caller must keep waiting for a terminal human response. |
| requestId | string | yes | Durable Nofax request handle. |
| status | string | yes | The request is unresolved and must not be treated as approval. |
No examples provided.
nofax_wait_for_response Wait for Nofax human response ~123
Long-poll a durable Nofax request for up to 240 seconds. If the result is pending, you MUST call this tool again with the same requestId. Repeat indefinitely until a terminal response is returned or the user explicitly changes/cancels the goal. Do not continue the guarded action while pending.
| Name | Type | Req | Description |
|---|---|---|---|
| requestId | string | yes | Durable request handle returned by a nofax_request_* tool. |
| waitSeconds | integer | – | Maximum seconds to long-poll during this call; defaults to 240. A timeout still returns pending, never approval. |
| Name | Type | Req | Description |
|---|---|---|---|
| decision | string | – | Terminal human decision when resolved, such as allow, deny, refine, or an explicit choice value. |
| instruction | string | yes | Safety-preserving instruction describing what the caller may do next. |
| mustWait | boolean | – | Present and true while the request remains pending. |
| requestId | string | yes | Durable Nofax request handle. |
| status | string | yes | Whether the human request is still pending or has reached a terminal response. |
| text | string | – | Human free-text refinement when the terminal decision is refine. |
No examples provided.
How do I install the Nofax MCP server?
Nofax runs locally as an npm package, launched with npx -y nofax. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · nofax
claude mcp add akzar1el-nofax -- npx -y nofax
What is the Nofax MCP server?
Nofax is an MCP server listed in the public MCP registry as io.github.AKzar1el/nofax. Human-in-the-loop approvals and notifications for AI coding agents through a local stdio MCP server. This page covers its npm package (nofax).
Is the Nofax MCP server safe to use?
Nofax scores 97 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Nofax MCP server expose?
Nofax exposes 7 tools: nofax_notify, nofax_request_approval, nofax_request_choice, nofax_request_refinement, nofax_wait_for_response, and 2 more. Their descriptions and schemas cost roughly 692 tokens of context every time the server is loaded.
Is the Nofax MCP server still maintained?
Nofax is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Nofax MCP server under?
Nofax declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.