pywebview-mcp
Click on "Install 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., "@pywebview-mcplaunch the app and take a screenshot"
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.
pywebview-mcp
Playwright-style MCP server for pywebview apps — lets AI assistants see, control, and debug your Python desktop web UI without modifying your app's source code.
AI assistant → MCP tools → pywebview-mcp server → HTTP bridge → pywebview appFeatures
Screenshot the webview page via CDP (edgechromium/qt)
Inspect the full DOM tree (tag, id, role, text, bounds)
Click, type, scroll, press keys — full page interaction
Find elements by CSS selector, text, role, or tag
call_api — invoke
js_apimethods directly from Python (great for BAML)eval_js / eval_python — run code in the page or app process
Read Python logs captured from the app
Launch and stop the app directly from Claude
Zero changes to your app's source code required.
Related MCP server: qt-mcp
Requirements
Python 3.11+
pywebview 6.0+
uv (recommended)
Windows (tested with WebView2), Linux/macOS (should work with supported renderers)
Installation
Component | Where it runs | Needs pywebview? |
MCP server ( | AI client's MCP process | No |
Bridge (via | Inside your pywebview app | Uses project's existing pywebview |
No changes to the target project. launch_app(cwd=…) runs
uv run --with pywebview-mcp@git python -m pywebview_mcp main.py — the bridge
is injected at runtime; nothing is added to pyproject.toml.
MCP server — Cursor
Add to %USERPROFILE%\.cursor\mcp.json or project .cursor/mcp.json:
{
"mcpServers": {
"pywebview": {
"command": "uvx",
"args": ["--from", "git+https://github.com/com55/pywebview-mcp", "pywebview-mcp"]
}
}
}Local development:
{
"mcpServers": {
"pywebview": {
"command": "uv",
"args": ["run", "--directory", "I:/_CodingWorkspace/pywebview-mcp", "pywebview-mcp"]
}
}
}Optional custom port:
"env": { "PYWEBVIEW_MCP_PORT": "7891", "PYWEBVIEW_MCP_CDP_PORT": "9222" }MCP server — Claude Code
claude mcp add -s user pywebview -- uvx --from git+https://github.com/com55/pywebview-mcp pywebview-mcpOr install the plugin (MCP + skill):
claude plugin install github:com55/pywebview-mcpRunning your app with the bridge
From MCP (recommended — zero project setup):
launch_app(cwd="/path/to/project", app_args=["--after-update"])Manual equivalent:
cd your-pywebview-project
uv run --with "pywebview-mcp @ git+https://github.com/com55/pywebview-mcp" \
python -m pywebview_mcp main.pyStandard workflow
launch_app(cwd="/path/to/project", app_args=["--after-update"])screenshot()+get_dom_tree()Interact via
click,type_text, orcall_api("get_ui_state")get_logs()/get_app_output()to debug
Ports
Env var | Default | Purpose |
| 7891 | HTTP bridge (differs from pyside6-mcp's 7890) |
| 9222 | Chrome DevTools for screenshots |
Limitations
Screenshots require
edgechromiumorqtrenderer (CDP). Set automatically by the launcher.Native file dialogs block automation — use
call_apito set paths instead.Element IDs reset on every app restart — call
get_dom_tree()again.uvx cache — after updating the package, clear uv cache or use a local path.
Architecture
pywebview_mcp/server.py— FastMCP stdio server (no pywebview dependency)pywebview_mcp/bridge.py— in-process HTTP bridgepywebview_mcp/__main__.py— monkey-patcheswebview.startfor zero-config injection
License
MIT
This server cannot be installed
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/com55/pywebview-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server