Atlas / MCP servers / webmcp-org / @mcp-b

@mcp-bBLOCK

mcp/webmcp-org/npm-packages

NPM packages for MCP-B: Transport layers, React hooks, and browser tools for the Model Context Protocol

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
200 186r · 13w · 4d
Transport
stdio
License
MIT
Stars
104
01

Overview

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

Polyfill and MCP bridge for the [Web Model Context API](https://webmachinelearning.github.io/webmcp/) (`document.modelContext`)

The Web Standard

The Web Model Context API is a W3C Community Group draft spec. It makes every browser tab a tool source — web pages register tools that AI agents can discover and call:

document.modelContext
├── .registerTool(tool, { signal })  Register a tool for AI agents
├── .getTools()                      Dis
Read from source at commit 5eb2f4276a63OBSERVED · 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 webmcp-types --env SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN} -- npx -y @mcp-b/[email protected]
claude-desktop
{
  "mcpServers": {
    "webmcp-types": {
      "command": "npx",
      "args": [
        "-y",
        "@mcp-b/[email protected]"
      ],
      "env": {
        "SENTRY_AUTH_TOKEN": "${SENTRY_AUTH_TOKEN}"
      }
    }
  }
}
03

Exposed tools (200)

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

ToolRiskDescription
a_toolreada_tool
aborted_publicationreadAborts while cloning its output schema
acceptedreadAccepted asynchronously
actionreadv1
added_laterread
afterreadUpdated tool
aliasedreadForwarded upstream inference
already_cancelledwriteDoes not run
always_failreadThrow a runtime error every time it is invoked.
annotatedreadHas annotations
annotated_toolreadA tool with annotations
another_toolreadAnother tool
array_input_toolreadAccepts a WebMCP array input
asyncreadAsync tool
async_rejected_native_toolreadNative registration rejects asynchronously
bad_ann_toolreadHas bad annotations
batch_toolreadBatch test
beforereadInitial tool
big_responsereadReturns large data
blocked_calculatereadBlocks the iframe registration
boomreadThrows
browser_closeread
browser_committed_executewriteUses only committed closures
browser_connectread
browser_dependencyreadUses explicit deps
browser_greetreadGreets a person
browser_invalid_outputreadReturns invalid structured output
browser_latest_executewriteUses the latest closure
browser_layout_executewritePublishes at commit
browser_navigateread
browser_post_unmountwriteSettles after unmount
browser_raw_jsonreadReturns raw JSON
browser_responsereadReturns an MCP response
browser_screenshotread
browser_standard_schemareadUses Standard JSON Schema
browser_totalreadAdds two numbers
browser_voidreadReturns nothing
cached_schemareadKeeps schema preparation stable
cached_toolread
calc_addwriteAdd two numbers
calc_multiplyreadMultiply two numbers
calculatereadAdds two numbers after an optional delay
cancel_executionreadHandles cancellation
cancellablereadReads the cancellation signal
cancelled_execution_toolreadWaits for cancellation
circular_schemareadReports unserializable schemas
close_race_toolreadCloses while registration is pending
closedreadClosed with its server
code-reviewreadReview code for best practices
complex_toolreadComplex schema
counter_decrementreadDecrement the counter by a specified amount
counter_getreadGet the current counter value
counter_incrementreadIncrement the counter by a specified amount
counter_resetdestructiveReset the counter to zero. This action cannot be undone.
decrementCounterreadDecrement the counter by 1
destructured_register_toolreadRegistered via destructured method
disabled_toolreadA conditionally registered tool
dom_extract_contentread
dom_extract_interactiveread
dom_extract_regionread
dom_extract_structureread
doubleCounterreadDouble the counter value
dupreadFrame tool
duplicate_ownerreadFirst owner
dynamicreadDynamically registered tool
dynamic-summaryreadA dynamically registered prompt for summarization
e2e_guard_toolreadVerifies single invocation
echoreadEcho a string value back to the caller.
empty_description_toolread
evolving_toolreadEvolves
execution_failurereadReports execution failures
extendedreadExtended
extended_hintreadExtended
extension_child_scriptreadEcho a value from a same-origin child document.
extension_dynamicreadA dynamically registered extension fixture tool.
extension_echoreadEcho a value from the extension E2E fixture.
extension_failreadFail so the extension can verify MCP error propagation.
extension_set_dynamicdestructiveRegister or remove the dynamic extension fixture tool.
extra_toolreadExtra
failreadFail
failurereadThrows
frame_onlyreadFrame only
framed_toolreadRegistered in a frame without allow=
from_framereadRegistered by a child frame
full_toolreadFully specified
getCounterreadGet the current counter value
get_statusreadReturns app status
get_user_profilereadRead user profile
good_toolreadValid
greetreadGreet someone
greetingreadA simple greeting prompt
halveCounterreadHalve the counter value
helpreadGet help with using the application
hiddenreadNot readable
iframe_echoreadEcho tool registered in iframe via registerTool (Bucket A)
iframe_timestampreadTimestamp tool registered in iframe via registerTool (Bucket B)
incrementCounterreadIncrement the counter by 1
initialread
input_no_type_toolreadTool with input schema missing root type
invalid_summaryreadInvalid summary
invalid_wrapped_summaryreadInvalid wrapped summary
latereadRegistered after the relay connected
lookupreadLook up an item
mcp_agent_cancellationreadPreserves cancellation through error formatting
mcp_agent_failurereadPreserves agent and local error contracts
mcp_transformedreadAdds a numeric count to a limit
mcp_validation_failurereadFormats invalid input for agents
metadata_updatesreadUpdates metadata
missing_execute_toolwriteMissing execute callback
modern_toolread
multi_roundreadRequires another input round
my_toolreadA tool
native_abort_rejected_toolreadNative registration rejects on cleanup abort
native_cancelledreadNative cancellation
native_close_race_toolreadNative registration closes the wrapper
native_corereadNative WebMCP core
native_event_toolreadAdded after initialization
native_optionsreadForwards options
native_shape_toolreadNative shape tool
native_toolreadConflicts with the browser registration
native_voidreadReturns nothing
no_args_toolreadTool with no arguments
not_allowedreadDenied by the platform
notification_toolreadNotification test
object_output_without_root_type_toolreadReturns object structured content with a rootless schema
oldreadOld snapshot
open_issuereadv1
open_toolreadNo allowlist
original_toolread
output_no_type_toolreadTool with output schema missing root type
parent_greetreadGreeting tool registered in parent via registerTool (Bucket A)
parent_onlyreadParent tool
parent_timereadTime tool registered in parent via registerTool (Bucket B)
pending_abort_toolreadAborted before registration settles
posts_likewriteLike a post by ID. Increments the like count.
posts_searchreadSearch posts by keyword
pre_registered_toolreadregistered before wrapper init
preaborted_toolreadNever registers
primitive_output_toolreadReturns primitive structured content in the browser surface
probereadProbes cross-origin registration
promoted_toolreadTool after promotion
receiverreadCaptures its receiver
remote_close_toolread
render_executionreadTracks pending work
render_metadatareadRevision ${revision}
render_resetdestructiveResets state
render_stable_toolreadUses the latest committed callback
resetCounterdestructiveReset the counter to 0
restored_native_toolreadOriginal wrapper registration
restricted_toolreadOnly for the named embedder
resultreadReturns a value
review_codereadReview code for best practices and potential issues
runtimereadRuntime schema
same_batch_callsreadCombines completion updates
say_helloreadReturns a hello message
searchreadSearch items
search_docsreadSearch docs
search_summaryreadSearch with summary
sharedreadchild
signal_only_native_toolreadNative signal cleanup tool
slowreadWait until aborted
slow_toolreadNever responds
ssrreadServer rendering
ssr_extendedreadExtended server rendering
stableread
stable_connectionread
stable_toolread
standardreadStandard tool
standard_schemareadUses a validator
standard_schema_native_mirrorreadMirrors converted schema metadata
state_machinereadManage a state machine
still_callableread
strict_mode_toolread
structuredreadReturns structured content
structured_counterreadGet counter value with structured output
subjectreadSubject to summarize
subscribed_recoveryread
sumwriteAdd two numbers.
summarizereadSummarize a piece of text
syncwriteSync tool
test_contextreadCurrent value
timerwriteStart/stop/check timer
timer_controlwriteControl a timer (start/stop/check)
todo_addwriteAdd a new todo item
todo_completereadMark a todo as complete
todo_listreadList all todos
tool_areadFrom A
tool_breadFrom B
tool_creadC
undefinedreadReturns no JSON value
undefined_schemareadRequires serializable metadata
unserializable_resultreadReturns non-JSON
unsupportedreadNo API
untypedreadInput schema without a type
upstream_core_smokereadExercises object-input execution from the upstream WebMCP polyfill
upstream_executionreadRuns through the official polyfill
validation_abort_toolreadAborted while validating origins
void_resultreadReturns nothing
waitreadRuns until aborted
webmcp_input_requiredreadAttempts an unsupported multi-round WebMCP flow
04

Trust audit

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

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

What the source does

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

Findings (22)

HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
.agents/skills/release/SKILL.md:103
the user's approved interactive flow; do not read, print, or shell-evaluate `.env` files.
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
apps/documentation-website/start-here/metadata.mdx:101
<Note>MCP support in ChatGPT requires a paid plan with Developer Mode enabled.</Note>
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
counter_reset, extension_set_dynamic, render_reset, resetCounter
Why it matters. 4 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.actrc
.actrc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.syncpackrc.cjs
.syncpackrc.cjs
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
e2e/web-standards-showcase/src/main.ts:253
eval(code);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
e2e/test-app/src/runtime-contract-globals.d.ts:1
import type { RuntimeContractController } from '../../runtime-contract/core.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
e2e/test-app/src/runtime-contract-iframe-child.ts:2
import { installModelContextRuntimeContract } from '../../runtime-contract/model-context-contract.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
e2e/test-app/src/runtime-contract.ts:4
import { installModelContextRuntimeContract } from '../../runtime-contract/model-context-contract.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
e2e/web-standards-showcase/src/components/ui/badge.tsx:5
import { cn } from '../../lib/utils';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/global/conformance/global-runtime.e2e.test.ts:1
import { runRuntimeCoreConformanceSuite } from '../../../conformance/runtime-core-conformance.shared.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/documentation-website/packages/webmcp-extension/reference.mdx:55
"matches": ["https://*/*", "http://localhost/*", "http://127.0.0.1/*"],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/documentation-website/packages/webmcp-extension/reference.mdx:61
"matches": ["https://*/*", "http://localhost/*", "http://127.0.0.1/*"],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/documentation-website/reference/webmcp/codex-site-tools.mdx:38
| Test page      | `http://127.0.0.1:41739` top-level page with `window.isSecureContext === true`              |
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/research/codex-site-tools-2026-08-27/README.md:11
- `http://127.0.0.1:41739`, where `window.isSecureContext === true`
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/research/codex-site-tools-2026-08-27/README.md:23
Open `http://127.0.0.1:41739` in ChatGPT's built-in browser. The server maps
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/smart-dom-reader/test/local-playwright-runner.mjs:95
<img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIwMCIgZmlsbD0iI2RkZCIvPjx0ZXh0IHg9IjUwJSIg
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
apps/documentation-website/package.json
mintlify
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
apps/landing-page/package.json
@astrojs/check, @astrojs/react, @astrojs/sitemap, @mcp-b/design-tokens, @sentry/astro, @sentry/cloudflare, @tailwindcss/vite, @types/react
Why it matters. 20 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
e2e/package.json
@playwright/test
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
e2e/react-webmcp-test-app/package.json
@vitejs/plugin-react
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
e2e/web-standards-showcase/package.json
@radix-ui/react-collapsible, @radix-ui/react-slot, @rjsf/core, @rjsf/shadcn, @rjsf/utils, @rjsf/validator-ajv8, class-variance-authority, clsx
Why it matters. 21 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 5eb2f4276a63full audit observations/trust-audit/mcp-server/webmcp-org__npm-packages.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-125eb2f4276a63BLOCKD69first audit
06

Questions

What is the @mcp-b/webmcp-ts-sdk MCP server?

NPM packages for MCP-B: Transport layers, React hooks, and browser tools for the Model Context Protocol

What tools does @mcp-b/webmcp-ts-sdk expose?

200 in total: 186 read-only, 13 that write, and 4 that can delete or overwrite (counter_reset, extension_set_dynamic, render_reset, resetCounter). Every one is listed on this page with its risk.

Is @mcp-b/webmcp-ts-sdk safe to connect to an agent?

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

What credentials does @mcp-b/webmcp-ts-sdk need?

It reads SENTRY_AUTH_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 does @mcp-b/webmcp-ts-sdk run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @mcp-b/webmcp-types at 6.0.0.

How current is this page?

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

Advertisement