Workflow to MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Workflow to MCPrun the support ticket lookup workflow for TICKET-1001"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Workflow to MCP
Record a permitted browser task, review it, replace samples with typed inputs, verify it in isolated Chromium, and expose the exact verified revision as an MCP tool. Local SQLite, stdio transport, no telemetry or generated-code execution.
The product lives in apps/, packages/, tests/ and scripts/. See implementation evidence for results and incomplete release gates. This is an MVP implementation, not a universally compatible or independently approved public release. Unrelated NNI sources and tooling have been removed; their original history and MIT attribution remain available.
Install from source
Use Node 24.21.0 (pinned in .node-version) or the tested Node 26 runtime, with pnpm 12.16.1:
npm install --global pnpm@12.16.1
pnpm install --frozen-lockfile
pnpm browser:install
pnpm build
pnpm typecheck
pnpm lint
pnpm test
node dist/cli.js doctorTests need local loopback sockets and sandboxed Chromium. Linux also needs pnpm exec playwright install --with-deps chromium and working Chromium sandbox support. Do not disable the browser sandbox. macOS ARM64 is validated locally; Linux/Windows jobs are configured but platform support awaits executed CI results.
For an end-user installation from the locally generated package:
pnpm release:artifacts
npm install --global ./artifacts/workflow-to-mcp-0.1.0.tgz
workflow-to-mcp doctorInstall its exact browser too: pnpm browser:install from source, or npm exec --package=playwright@1.64.1 -- playwright install chromium. The package has not been published to npm. pnpm package:smoke tests an actual clean tarball installation, CLI import/trust/verify/publish and MCP calls outside the checkout.
Related MCP server: webpilot
Record your own lookup
Run
pnpm demo:serve; openhttp://127.0.0.1:4173/ticketsin Chrome.Open
chrome://extensions, enable developer mode, and loaddist/extensionunpacked (or extract the release ZIP).Open the extension from its toolbar button on the demo tab and press Permit this origin & record. This uses a temporary
activeTabgrant, not permanent access to all sites.Press Choose an input to permit, dismiss the popup, then click Ticket ID. Enter synthetic
TICKET-1001and click Search. Unknown text fields are private by default, and sensitive fields remain excluded even if selected.Reopen the popup and use Choose an output element to select the “Ticket found” heading. Repeat separately for status and summary. Select one more output with Shift-click on the summary to choose its surrounding stable results container. The container will be used only as a readiness condition.
Press Stop & review. Set the captured input parameter to
ticket_id. Name the first three outputsfound,status,summary; select Visible (boolean) forfound. Keep Allow missing enabled.On the fourth output (the results container), press Wait until visible and leave its field name empty. This waits for completed results including “No matching ticket.” Select Read only after reviewing that the flow has no side effects.
Review every step, sample, origin and output, check the confirmation and export
.workflow.json. Export does not execute or publish.
The UI supports pause/resume, safe timeline rendering, step removal/reordering, value removal/redaction, typed parameterization, explicit extraction and visible assertions. No keyboard transcript, cookies or passwords are collected. One tab and one origin are supported. Opening popup.html directly does not grant activeTab; use the toolbar.
Import, review, verify, publish
Keep the demo server running. The bundled example reproduces runtime behavior independently of recording; replace its import path with your downloaded recording to use your own flow.
node dist/cli.js policy allow --origin http://127.0.0.1:4173 --fixture
node dist/cli.js workflow import examples/demo-crm-lookup/workflow.json
node dist/cli.js workflow inspect lookup_support_ticketReview the full IR, literal samples, origins, risk and schemas, then copy its exact SHA-256 from inspect:
node dist/cli.js workflow trust lookup_support_ticket --hash REVIEWED_SHA256
node dist/cli.js workflow verify lookup_support_ticket --suite examples/demo-crm-lookup/cases.json
node dist/cli.js workflow publish lookup_support_ticket --version 1.0.0
node dist/cli.js workflow run lookup_support_ticket --input examples/demo-crm-lookup/input.json
node dist/cli.js serve --stdioYour recording must use the suite's input/output names. The suite checks two ticket IDs and a missing ticket. TICKET-1001 returns:
{"found":true,"status":"open","summary":"A synthetic example ticket"}Every command accepts --home DIRECTORY (or WORKFLOW_MCP_HOME) and --json. State defaults to ~/.workflow-to-mcp. Import never executes or grants permission. Origin grants and workflow review are separate. Changing installation policy invalidates prior verification/publication. Edits require a new immutable workflow version and re-verification.
Connect an MCP client
For a host using common mcpServers configuration, use absolute paths:
{
"mcpServers": {
"workflow-to-mcp": {
"command": "/ABSOLUTE/PATH/TO/node",
"args": ["/ABSOLUTE/PATH/TO/Workflow-to-MCP/dist/cli.js", "serve", "--stdio"]
}
}
}The tool is wf_lookup_support_ticket, with required ticket_id: string and no extra properties. Call {"ticket_id":"TICKET-1002"} to get {"found":true,"status":"closed","summary":"A second synthetic ticket"}. Outputs are untrusted application data. Tool-list additions/updates require a server restart; disabling or revoking policy blocks new calls immediately. pnpm test:mcp uses the actual official SDK v2 client, child-process stdio, real Chromium and invalid arguments. MCP integration records host-validation boundaries. There is no HTTP MCP listener.
Writes and approvals
The synthetic write example is in examples/demo-crm-create-ticket/. Import and review its hash as above. Verification requests a local terminal approval per case; restart the disposable demo before verifying its suite (which expects CREATED-1). After verification/publication, approve one exact invocation in a trusted interactive local terminal:
node dist/cli.js approval grant create_support_ticket --input examples/demo-crm-create-ticket/input.jsonReview the displayed workflow hash, origins and inputs; type the workflow slug. Invoke the matching MCP tool or workflow run within 60 seconds using the exact input. Approval is server-side, bound to the OS principal, policy, content hash and input digest, and consumed once. No approved argument exists. Missing/reused/expired approval fails before browser allocation. Unknown/destructive workflows are disabled.
Failure after a potentially mutating interaction yields OUTCOME_UNKNOWN. Inspect the application and run inspect RUN_ID; no automatic retry occurs. Browser automation is not a rollback-capable database transaction.
Limits, errors and removal
Actions: navigate, click, fill, select, check, allowlisted keys, visibility/exact-URL waits, visible/text assertions, explicit text/visibility/count extraction. Locators must match exactly one element. No scripts, shell steps, CSS programs or automatic repair.
Frames, popups, uploads/downloads, WebSockets, authenticated profiles and secret storage are unsupported.
secretRefvalidates as a future reference but execution explicitly returnsSECRET_NOT_CONFIGURED. The runner never uses a primary Chrome profile.Recorded IR URLs exclude query, fragment and credentials to avoid URL-secret capture. Runtime app requests may have queries. Remote sites require approved HTTPS origins and public IPv4 answers. IPv6/private networks are blocked;
--fixturegrants only the exact HTTP IPv4 loopback origin/port.Missing browser: run the pinned installation command and use the same
PLAYWRIGHT_BROWSERS_PATH, if set, during install, verification and MCP serving.PERMISSION_DENIED: authorize the origin and trust the reviewed hash separately.WORKFLOW_NOT_VERIFIED: reverify after a content/policy/runtime change.LOCATOR_AMBIGUOUS: select a unique semantic target; there is no first-match fallback.Use Delete recording to clear the draft. Drafts expire on the next extension interaction after 24 hours.
workflow delete SLUGremoves revisions/approvals/runs;privacy erase-auditdeletes audit entries with SQLite secure deletion/checkpointing.Remove the extension in Chrome and run
npm uninstall --global workflow-to-mcp. Stop the server before deleting the entire selected application data directory. User-managed downloads/backups remain separate.
Read privacy, security, upstream audit, workflow format, dependencies and notices.
This server cannot be deployed
Maintenance
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Run multi-step tasks in a real Chrome browser: persistent environments, live view, human takeover.
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables browser automation through MCP with native Playwright operations, deterministic assertions, and natural-language grounded actions, structured extraction, and bounded agent workflows over live page elements.13Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables MCP clients such as Claude Desktop, Claude Code and IDE agents to call a tool that drives a real Playwright browser to complete web tasks, with sensitive actions automatically refused when no human is available to approve them.MIT
- AlicenseAqualityBmaintenanceEnables MCP-speaking AI agents to operate a desktop and browser through structured UI inspection, mouse/keyboard gestures, tab-scoped browsing, and approved local screen recording with editing.31MIT
- AlicenseNot gradedqualityBmaintenanceEnables an AI agent to learn a Chromium browser task once and then replay it deterministically without spending LLM tokens, handing off logins and CAPTCHAs to a human while keeping credentials out of the model. Every step is de-identified for privacy and written to a hash-chained audit log, available as both an MCP server and a CLI.Apache 2.0