io.github.YawLabs/mcp
NPM · @YAWLABS/MCP · SCANNED SEP 20
One install, every MCP server, managed from yaw.sh/mcp. Runs locally: no account, no sign-in.
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 Security86
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Install-script check failed: the install command fetches or executes arbitrary code (inline_eval). An install hook runs on every machine, in CI, and on transitive installs, whether or not you ever run the server. View diagnostics → Fail
- 31 of 102 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency10
- 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 (SEE LICENSE IN LICENSE.md) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 2 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3241 tokens (~294/item across 11 items; 11 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 Management88
- Stability check failed: the tool surface changed between 0.75.4 and 1.0.8: 0 tool removals, 1 breaking changes, 1 additions. See how to fix → Fail
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
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 11 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 io.github.YawLabs/mcp server?
io.github.YawLabs/mcp runs locally as an npm package, launched with npx -y @yawlabs/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 · @yawlabs/mcp
claude mcp add yawlabs-mcp -- npx -y @yawlabs/mcp
{
"mcpServers": {
"yawlabs-mcp": {
"command": "npx",
"args": [
"-y",
"@yawlabs/mcp"
]
}
}
} {
"servers": {
"yawlabs-mcp": {
"command": "npx",
"args": [
"-y",
"@yawlabs/mcp"
]
}
}
} codex mcp add yawlabs-mcp -- npx -y @yawlabs/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"yawlabs-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@yawlabs/mcp"
],
"enabled": true
}
}
} openclaw mcp add yawlabs-mcp --command npx --arg -y --arg @yawlabs/mcp
mcp_servers:
yawlabs-mcp:
command: "npx"
args: ["-y", "@yawlabs/mcp"] {
"McpServers": {
"yawlabs-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@yawlabs/mcp"
]
}
}
} assistant mcp add yawlabs-mcp -t stdio -c npx -a -y @yawlabs/mcp
{
"mcpServers": {
"yawlabs-mcp": {
"command": "npx",
"args": [
"-y",
"@yawlabs/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.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 82 to 85.
- 17 Sept 26 +1
- Stability: fail → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ 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
- Package version: 1.0.6 → 1.0.8 functional
- Package version: 1.0.6 → 1.0.7 functional
- 16 Sept 26 +12
- Malware scan: unverified → pass ▲ security
- 15 Sept 26 0
- Stability: fail → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ 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
- Package version: 1.0.4 → 1.0.6 functional
- Package version: 1.0.4 → 1.0.5 functional
- 14 Sept 26 +12
- Known CVEs: unverified → pass ▲ security
- Dependency health: unverified → 0.86 ▲ functional
- Package version: 1.0.3 → 1.0.4 functional
- 13 Sept 26 −11
- Known CVEs: pass → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- Dependency health: 0.86 → unverified ▼ functional
- Package version: 1.0.1 → 1.0.3 functional
- Package version: 1.0.1 → 1.0.2 functional
- 12 Sept 26 +2
- Stability: fail → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Security disclosure: unverified → pass ▲ 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
- Package version: 1.0.0 → 1.0.1 functional
- 11 Sept 26 −18
- Malware scan: pass → unverified ▼ security
- Schema quality: 2690 → 3241 ▼ functional
- Security disclosure: pass → unverified ▼ functional
- Package version: 0.80.0 → 1.0.0 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/@yawlabs/mcp@1.0.8
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 →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| preinstall | dangerous | node -e "const major=Number(process.versions.node.split('.')[0]);if(major<20){console.error('@yawlabs/mcp requires Node 20 or newer; this is Node '+process.versions.node+'. Upgrade Node, then re-run the install.');process.exit(1);}" |
Background: Why install scripts are a supply-chain risk →
Dependencies 102 packages
| Packages resolved | 102 |
|---|---|
| Stale | 31 |
| 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 →
mcp_connect_activate ~275
Load one or more installed MCP servers' tools into the current session by namespace. Each server adds its tools to your context, so load only what the current task needs. When you move on, unload servers you're done with via `mcp_connect_deactivate` before loading new ones. Tools are prefixed by namespace (e.g., "gh_create_issue"). Pass "server" for one or "servers" for multiple. Optionally pass `tools: [...]` to expose only those tools by name — the rest stay proxyable via mcp_connect_dispatch. If `YAW_MCP_MIN_COMPLIANCE` is set, activation refuses servers whose reported grade is below the floor (ungraded servers always pass); the refusal message names the grade and the env var to unset.
| Name | Type | Req | Description |
|---|---|---|---|
| server | string | – | Single server namespace to activate (e.g., "gh") |
| servers | array | – | Multiple server namespaces to activate at once (e.g., ["gh", "slack"]) |
| tools | array | – | Optional per-server tool filter (bare tool names, not namespace-prefixed). When set, only the listed tools surface in tools/list — others stay reachable via mcp_connect_dispatch. Omit (or re-activate… |
No output schema declared.
No examples provided.
mcp_connect_bundles ~299
List curated multi-server 'bundles' — presets like `pr-review` (github + linear) or `devops-incident` (github + pagerduty + slack) that commonly ship together. Routing order is `mcp_connect_dispatch` > this > `mcp_connect_discover`: when the task is one concrete action ("file a github issue"), dispatch still comes first. Reach for bundles when the intent maps to a known multi-server WORKFLOW (on-call triage, PR review, data pipeline debugging) rather than a single call, and before `mcp_connect_discover` — it returns a ready-to-run `mcp_connect_activate namespaces=[...]` call per bundle. With `action="match"` (recommended after the user's installed list is known) the response partitions bundles into READY (every namespace already in the user's bundles.json — activate now) and PARTIAL (some present, some missing — names the missing namespaces so you can tell the user to run `yaw-mcp add <slug>`; the slug catalog is at https://yaw.sh/mcp/catalog/). With `action="list"` (default) it returns the full curated catalog. Bundles are static client-side data, not a network call.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | Either "list" (return the full curated catalog; default) or "match" (partition bundles against installed servers into ready-to-activate vs partially-installed). |
No output schema declared.
No examples provided.
mcp_connect_deactivate ~152
Unload one or more MCP servers' tools from the current session to free context. The server stays configured in ~/.yaw-mcp/bundles.json and can be reloaded via `mcp_connect_activate` when needed again. Unload servers you're done with; yaw-mcp also auto-unloads a server after a stretch of tool calls to other servers (baseline set by YAW_MCP_IDLE_THRESHOLD, raised for a server used in bursts). Pass "server" for one or "servers" for multiple.
| Name | Type | Req | Description |
|---|---|---|---|
| server | string | – | The namespace of the server to deactivate |
| servers | array | – | Multiple server namespaces to deactivate at once (e.g., ["gh", "slack"]) |
No output schema declared.
No examples provided.
mcp_connect_discover ~443
List the MCP servers configured in the user's local ~/.yaw-mcp/bundles.json and ready to use. Call this when browsing what's available or when the task isn't specific yet. If the task is already clear ("file a github issue", "query postgres", "post to slack"), prefer `mcp_connect_dispatch` — it picks the right server and loads its tools in one call. Load only the servers the CURRENT task needs; each one adds tools to your context. Shows names, namespaces, tool counts, a token-cost estimate per server (e.g. "22 tools, ~2.8k tokens") so you can budget context before activating — tilde values are estimates based on cached tool metadata, unprefixed values reflect live tool schemas. Tool-name lists are truncated to the first few names per server; pass `server` to see the full list for one server. Scored servers carry an inline `[A]`–`[F]` compliance grade from the Yaw MCP test suite — treat it as a trust signal and prefer higher-graded alternatives when otherwise equivalent (ungraded servers are unmarked, not penalized). Also surfaces whether each server is loaded, any local CLI it shadows (prefer the MCP tools over the CLI when a shadow is listed), and usage hints ("used Nx" or "often loaded with X") when the signals are present (counts persist across yaw-mcp restarts). Recurring packs that have been loaded together ≥2 times get their own block at the top with a ready-to-run `activate` call — skip the extra `mcp_connect_suggest` round-trip when the signal is already there. If a `yaw-mcp://guide` resource is listed, read it FIRST: it carries project/user-specific routing rules and credential conventions that override generic defaults.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional: describe the current task or conversation context. Servers will be sorted by relevance to help you pick the right one. |
| server | string | – | Optional: one namespace to report on in full. Returns just that server's card with its complete tool list, and none of the cross-server blocks. |
No output schema declared.
No examples provided.
mcp_connect_dispatch ~388
PREFERRED entry point when the task is already concrete. Picks the best-matching installed MCP server(s) for a natural-language task and loads their tools in ONE call — no separate discover + load step. Describe what you want to do ("create a github issue for the login bug", "post a summary to slack", "query the prod postgres") and yaw-mcp will rank the user's installed servers with BM25, load the top match into the session, and expose its tools so you can call them. Use `mcp_connect_discover` only when browsing what's installed without a specific task. When an installed MCP server shadows a local CLI (e.g. npmjs shadows `npm`, tailscale shadows `tailscale`, github shadows `gh`), prefer dispatching to the server over running the CLI via Bash. Default budget is 1 to keep the tool list focused; raise it only if the task genuinely spans multiple servers. If `yaw-mcp://guide` is listed as a resource, read it first — the project may have explicit routing rules (e.g. "use `gh` not bash for GitHub").
| Name | Type | Req | Description |
|---|---|---|---|
| budget | integer | – | How many top-ranked servers to load into the session. Defaults to 1. Cap is 10. Raise only when one task genuinely spans multiple servers. |
| intent | string | yes | What you want to accomplish, in plain English (e.g., "file a github issue titled Fix login bug") |
| routeEffort | string | – | Per-call override of the routing-effort dial. "off" never asks the client LLM to break ranking ties; "auto" (the default) asks once only on genuine ambiguity; "aggressive" samples best-of-3 on milder… |
No output schema declared.
No examples provided.
mcp_connect_exec ~661
Run a short DECLARATIVE pipeline of upstream tool calls in a single round-trip. Use this when you already know the exact 2-4 tool calls to make and one call's output feeds another's args — e.g. `a = gh_list_prs(); b = gh_get_pr(a[0].number); return b`. NOT a code sandbox: there is no expression language, no loops, no branching, no arithmetic. The only control flow is sequential step execution; the only data-flow primitive is `{"$ref": "<stepId>[.path.to.value]"}` which substitutes a prior step's output (or a nested field of it) into the next step's args. Paths support dot keys and `[N]` / `.N` array indexing. Each step's `tool` is a namespaced upstream tool name: an already-loaded server is called directly, and a not-yet-loaded server whose tools are known from cache is loaded on first use exactly as a direct tools/call would be — that adds its tools to this session, and can still be refused. A POLICY refusal (server disabled, project profile, compliance floor) is decided before step 0 runs and refuses the whole pipeline with nothing done, so fixing it and re-running costs no repeated side effect; a server-cap refusal is only knowable when the step is reached and fails it there, with `partial` holding what already ran. A name that is neither loaded nor cached also fails the step. Max 16 steps per exec. If any step fails, the whole pipeline fails and returns `{ ok: false, failedStep, error, partial: { ...completed outputs } }`. On success the shape depends on whether you named a `return`: WITH one you get `{ ok: true, result: <that step's output>, stepKeys: [...] }` — plus `steps` as well while the intermediate outputs stay small (about 4 KB), so a created issue's id survives while a long list you skipped is not replayed at you; WITHOUT one you get `{ ok: true, result: <last step's output>, steps: { ...all outputs } }`. Name a `return` whenever you only need one value: it is what stops a LARGE intermediate output (a long list you only wanted one element of) from bei…
| Name | Type | Req | Description |
|---|---|---|---|
| return | string | – | Optional: id of the step whose output should be surfaced as `result`. Defaults to the last step's id (or its positional index). Naming a step is NOT just a selection: it also adds `stepKeys`, and onc… |
| steps | array | yes | Ordered list of tool calls to run. Each step is `{ id?: string, tool: string, args?: object }`. `args` values may be `{"$ref": "<stepId>.path"}` to inject a prior step's output. |
No output schema declared.
No examples provided.
mcp_connect_find_tool ~253
Search for a TOOL across every configured server by what it DOES, when you do not know which server has it. Ranks tool names and descriptions from all servers -- loaded and not -- and returns the matches with the namespace to activate. Nothing is loaded and no server is contacted, so this costs no context beyond the reply. Use it when the capability is clear but its home is not ("something that can resize an image", "a way to list pull requests"); use `mcp_connect_dispatch` instead when you want the right server LOADED in one step, and `mcp_connect_read_tool` when you already know both the server and the tool and just want its schema. A match on a loaded server carries its full input schema; a match on a server that has never been loaded carries name and description only, from cache -- activate it, or call `mcp_connect_read_tool`, to see the arguments.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum matches to return. Default 10. |
| query | string | yes | What the tool should DO, in plain words -- "create a github issue", "query postgres", "resize an image". Matched against every configured server tool name and description. |
No output schema declared.
No examples provided.
mcp_connect_health ~92
Show health stats for MCP servers loaded in the current session: total calls, error count, average latency, and last error. Per-call telemetry covers LOADED servers only; installed-but-unloaded servers with a poor persisted success rate (<80% across sessions) are listed in a separate cross-session reliability block — do NOT load a server just to see its history, loading it resets the in-session counters to zero.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
mcp_connect_read_tool ~202
Return one tool's full input schema without loading its server into the session. Use this when you need to inspect an MCP tool's arguments before deciding whether to activate its server, or to compare schemas across two tools. For already-loaded servers this is free (schema is in memory). For not-loaded servers yaw-mcp spawns a transient upstream connection, reads the schema, and tears the connection down — no tools are added to your context, and `mcp_connect_health` will not show the server as loaded. When you're ready to actually call the tool, pass the server namespace to `mcp_connect_activate` (or use `mcp_connect_dispatch` with the task intent).
| Name | Type | Req | Description |
|---|---|---|---|
| server | string | yes | Namespace of the server that exposes the tool (e.g., "gh", "slack"). |
| tool | string | yes | Tool name. The namespace prefix is optional — both "create_issue" and "gh_create_issue" are accepted. |
No output schema declared.
No examples provided.
mcp_connect_secrets ~281
List, per installed server, which local-vault secrets its `${secret:NAME}` env references resolve to — by NAME only, never a value. Use this to confirm a server will get the credentials it needs before activating it, or to spot a typo'd / un-set secret reference. `injectedSecrets` are the names the local vault HAS and the server references; `missing` are names the server references but the vault LACKS (set them via `yaw-mcp secrets set <name>`); `malformed` are `${secret:` references that do not PARSE (a space in the name, a missing `}`), quoted in bounded form behind a `<malformed ref>` marker -- yaw-mcp refuses to start the server over one exactly as over a missing name, so the fix is editing the reference in the server's env. This is a values-free preview: it reads the vault's KEY LIST and the server's env-reference NAMES, and never decrypts or returns any secret value. Servers with no `${secret:...}` references (well-formed or malformed) are omitted. Requires no passphrase (no decryption happens).
| Name | Type | Req | Description |
|---|---|---|---|
| server | string | – | Optional: restrict the report to a single server namespace (e.g. "gh"). Omit to report every installed server that references a vault secret. |
No output schema declared.
No examples provided.
mcp_connect_suggest ~195
Surface recurring multi-server tool-call patterns as suggested 'packs' to activate in one step. Observation-only — this never loads or unloads anything. When the same 2-3 servers get used together in short bursts more than once, the pattern is surfaced here so the next workflow can call `mcp_connect_activate` once with the whole pack's namespaces instead of juggling discover + load for each server. Patterns persist across yaw-mcp restarts (via ~/.yaw-mcp/state.json) so a fresh process already knows what you usually use together. As a general rule: prefer loaded MCP servers over matching local CLIs (a loaded `npmjs` server replaces `npm audit`, `tailscale` replaces the `tailscale` CLI, etc.) — see `mcp_connect_discover` for which CLIs each installed server shadows. Returns a friendly 'no patterns yet' message when nothing has recurred.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the io.github.YawLabs/mcp server?
io.github.YawLabs/mcp is listed in the public MCP registry as io.github.YawLabs/mcp. One install, every MCP server, managed from yaw.sh/mcp. Runs locally: no account, no sign-in. This page covers its npm package (@yawlabs/mcp).
Is the io.github.YawLabs/mcp server safe to use?
io.github.YawLabs/mcp scores 70 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares an install script we flagged as high risk. 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 io.github.YawLabs/mcp server expose?
io.github.YawLabs/mcp exposes 11 tools: mcp_connect_discover, mcp_connect_activate, mcp_connect_deactivate, mcp_connect_health, mcp_connect_dispatch, and 6 more. Their descriptions and schemas cost roughly 3,241 tokens of context every time the server is loaded.
Is the io.github.YawLabs/mcp server still maintained?
io.github.YawLabs/mcp 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.