Percher
NPM · @PERCHER/MCP · 2 COMPONENTS · SCANNED SEP 20
MCP-native hosting: publish and operate AI-built web apps live at name.percher.run.
Available components
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 Security98
- 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
- 65 of 234 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency6
- Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (FSL-1.1-MIT) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability59
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 14266 tokens (~264/item across 54 items; 54 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 Management87
- Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage75
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 25% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "percher_publish" implies "publish" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 55 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Percher MCP server?
Percher runs locally as an npm package, launched with npx -y @percher/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @percher/mcp
claude mcp add app-percher-percher -- npx -y @percher/mcp
{
"mcpServers": {
"app-percher-percher": {
"command": "npx",
"args": [
"-y",
"@percher/mcp"
]
}
}
} {
"servers": {
"app-percher-percher": {
"command": "npx",
"args": [
"-y",
"@percher/mcp"
]
}
}
} codex mcp add app-percher-percher -- npx -y @percher/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"app-percher-percher": {
"type": "local",
"command": [
"npx",
"-y",
"@percher/mcp"
],
"enabled": true
}
}
} openclaw mcp add app-percher-percher --command npx --arg -y --arg @percher/mcp
mcp_servers:
app-percher-percher:
command: "npx"
args: ["-y", "@percher/mcp"] {
"McpServers": {
"app-percher-percher": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@percher/mcp"
]
}
}
} assistant mcp add app-percher-percher -t stdio -c npx -a -y @percher/mcp
{
"mcpServers": {
"app-percher-percher": {
"command": "npx",
"args": [
"-y",
"@percher/mcp"
]
}
}
} 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.
- 20 Sept 26 +11
- Known CVEs: unverified → pass ▲ security
- Dependency health: unverified → 0.87 ▲ functional
- 19 Sept 26 −13
- Known CVEs: pass → unverified ▼ security
- Stability: 0.80 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Schema quality: 236 → 264 ▼ functional
- Schema quality: 236 → 263 ▼ functional
- Dependency health: 0.81 → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Capabilities: pass → unverified ▼ functional
- License: pass → fail ▼ functional
- Dependency health: 0.81 → 0.87 ▲ functional
- Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
- Licence: MIT → FSL-1.1-MIT functional
- Package version: 0.6.15 → 1.0.3 functional
- Package version: 0.6.15 → 1.0.2 functional
- 18 Sept 26 −2
- Stability: pass → 0.80 functional
- 17 Sept 26 0
- Stability: 0.97 → pass security
- 16 Sept 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.
- 14 Sept 26 0
- Dependency health: 0.87 → 0.81 ▼ functional
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 −2
- Stability: pass → 0.83 functional
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 20 Sept 2026 · Analysed npm/@percher/mcp@1.0.3
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 234 packages
| Packages resolved | 234 |
|---|---|
| Stale | 65 |
| 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 →
percher_wait_for_auth ~479
Only use when `recovery.nextAction = 'wait_auth'` — i.e. percher_publish returned `status: 'auth_pending'` because the MCP session has no token. Pre-fetched device-code is in flight; this tool short-polls the exchange and, once a token lands, runs the original publish for the FIRST time (the auth_pending percher_publish call did NOT pack a tarball — that work is preserved entirely for the resume here, so the whole flow packs exactly one bundle). Inputs: - `deviceCode` — opaque string from `recovery.args.deviceCode` on the auth_pending response. Pass verbatim. - `publishArgs` — original `percher_publish` input flags from `recovery.args.publishArgs`. Pass verbatim. - `pollIntervalSec` — server-requested poll interval from `recovery.args.pollIntervalSec`. Pass verbatim when present; defaults to 5. Returns one of two shapes: - On success: the same `PublishResult` shape as percher_publish (status='live'/'queued'/'failed'/etc., recovery, url, deployId, ...). Follow `recovery.nextAction` exactly, same as a fresh percher_publish response. - On failure: `{ status: 'auth_failed', reason: 'expired'|'error', detail, recovery }`. `recovery.nextAction = 'open_login'` — call percher_publish again to start a fresh auth flow with a new device-code (do NOT call this tool again with the old code; it's dead). Polls at the server-requested interval (default ~5s, clamped to 1-30s) with a 2-minute total budget. Don't shorten the polling interval client-side — Percher's exchange endpoint enforces it server-side.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceCode | string | yes | Opaque device-code returned by percher_publish. |
| pollIntervalSec | number | – | Server-requested device-code poll interval in seconds. Echoed verbatim from the auth_pending recovery.args.pollIntervalSec. Defaults to 5 when absent; clamped to 1-30. |
| publishArgs | object | – | Original percher_publish input flags to resume with after login. Echoed verbatim from the auth_pending recovery.args.publishArgs. |
No output schema declared.
No examples provided.
percher_wait_for_deploy ~814
Only use when `recovery.nextAction = 'wait_deploy'` (e.g. percher_publish returned status='queued', or percher_doctor pointed here), or when you already have a deployId and need to know whether the deploy is live yet. Never starts a new deploy — for that use percher_publish. Short-polls a single deploy and returns within `timeoutSeconds` (default 30, max 720). The default keeps each call short so the agent can resume; the bumped max equals the platform's full publish poll budget for callers that want to ride a single build to completion. Returns one of five statuses; in every case follow `result.recovery.nextAction` literally: - `live` → deploy is up; surface result.url to the user. recovery.nextAction='none'. - `failed` → terminal failure; result.error + result.recovery describe what to do. After FUTURE12 Phase 4 ambiguous build failures (generic build_failed, missing_dependency, runtime_crash, oom_killed without file-located problems) emit recovery.nextAction='run_doctor' as the primary action — call percher_doctor with recovery.args (carries `mode='deploy'` + `deployId`) and follow doctor's recovery recursively. Direct-action recoveries still emit when publish/wait already knows the answer: `set_env_vars` (missing_env with extracted keys), `fix_problems` (build problems with file/line), `retry` (infra_unavailable), `fix_config` (config_invalid), `ask_user` (quota_exceeded / unknown). `inspect_build_log` only appears when doctor explicitly hands off after classification yielded nothing. - `replaced` → terminal-but-not-failed: this row was superseded. Resolver looked at the latest deploy and the recovery field tells you what to do next: `nextAction: 'none'` with `result.url` set means the app is currently live at that URL via a newer deploy; `nextAction: 'wait_deploy'` means a newer deploy is still in flight (call percher_wait_for_deploy with the args); `nextAction: 'run_doctor'` or `nextAction: 'ask_user'` means resolution was ambiguous (no other deploys,…
| Name | Type | Req | Description |
|---|---|---|---|
| app | string | yes | App name (the value of [app].name in percher.toml) |
| deployId | string | yes | Deploy id returned by percher_publish (e.g. dep_abc123) |
| pollIntervalSeconds | integer | – | Seconds between polls (default 2). |
| timeoutSeconds | integer | – | Maximum wall-clock seconds to wait before returning still_running (default 30, max 720). Keeping this short is the point — the agent can resume in another short call without holding a long-lived conn… |
No output schema declared.
No examples provided.
percher_webhook ~288
Your account's single outbound event webhook (account-level — one URL receives every event for every app you own: deploy.failed, deploy.succeeded, app.crashed, app.unhealthy, app.recovered, domain.expiring, security.finding). There is no per-app routing and no event filter — surface that honestly before saving. Use when the user says 'set up a webhook', 'notify my CI when a deploy succeeds', 'send deploy events to <url>', or after percher_publish when the user wants async deploy notifications instead of polling percher_wait_for_deploy. action='add' sets or replaces the URL. Each delivery is signed HMAC-SHA256 with a per-account secret; `result.signingSecret` carries that secret and is shown EXACTLY ONCE (null when the URL was unchanged and the existing secret was kept) — relay it verbatim, tell the user to store it on their receiver, and if the transcript could be archived recommend rotating via the dashboard after testing. The URL must be a public HTTPS endpoint — private IPs, localhost, link-local and metadata endpoints are rejected (SSRF guard). action='list' returns the current URL + whether a secret is set (never the secret itself). action='remove' clears the URL and stored secret (idempotent).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| url | string | – | – |
No output schema declared.
No examples provided.
percher_whoami ~17
Show the signed-in user
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the Percher MCP server?
Percher is an MCP server listed in the public MCP registry as app.percher/percher. MCP-native hosting: publish and operate AI-built web apps live at name.percher.run. This page covers its npm package (@percher/mcp).
Is the Percher MCP server safe to use?
Percher scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. 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 Percher MCP server expose?
Percher exposes 54 tools: percher_publish, percher_wait_for_deploy, percher_redeploy, percher_reproduce, percher_login, and 49 more. Their descriptions and schemas cost roughly 13,843 tokens of context every time the server is loaded.
Is the Percher MCP server still maintained?
Percher is still listed as active in the MCP registry. We last reached this channel on 20 September 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 Percher MCP server under?
Percher declares the FSL-1.1-MIT licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.