Skip to main content

webnav-mcp

⚠️ Deprecated — do not use this package. Use webnav-ts-mcp from the npm registry instead (claude mcp add webnav -- npx webnav-ts-mcp). It is a TypeScript port with the same tools and environment variables, needs only Node.js (no Python or uv), and is the only version that will receive updates.

An MCP server that gives AI agents JS/TS/HTML/CSS navigation, plus a cross-file index of CSS custom properties and #id/.class selectors that single-file language servers can't provide. It's the front-end counterpart to codenav-mcp.

Quick start

You need uv (or pipx) and Node.js ≥ 18:

uvx webnav-mcp

Register it with your MCP host. For Claude Code, from the project root:

claude mcp add webnav -- uvx webnav-mcp

Or add it to a project .mcp.json (Claude Code) or .cursor/mcp.json (Cursor):

{
	"mcpServers": {
		"webnav": {
			"command": "uvx",
			"args": ["webnav-mcp"]
		}
	}
}

In Cursor, also set "env": {"WEBNAV_MCP_WORKSPACE": "${workspaceFolder}"}, because Cursor may start MCP servers with your home directory as the working directory.

Language servers

Requests are routed to three Node language servers by file extension:

Extension Backend
.js / .mjs / .cjs / .jsx / .ts / .mts / .cts / .tsx TypeScript 7 native LSP: tsc --lsp --stdio (JS via allowJs / jsconfig.json)
.html vscode-html-language-server
.css vscode-css-language-server

Resolution order for tsc / HTML / CSS binaries: navigated project's node_modules/.bin/ → webnav's own package-local install (see Development) → PATH → npx --yes (JS/TS: npx -p typescript@7 tsc --lsp --stdio). webnav does not use typescript-language-server — TypeScript 7 no longer ships classic tsserver.js.

To skip downloads, install in the project (or under this package for standalone):

npm install --save-dev typescript@^7 vscode-langservers-extracted

Tools

For JS/TS, start with the name-based tools:

Tool Answers
symbol_info What is this? Header, hover, definition and references in one call
outline What's in this file? (source order; locals left out unless detailed=true)
search_symbol JS/TS workspace symbol search (ranked, capped; optional kind= / path= filters; fuzzy-only hits summarised unless fuzzy=true)
workspace Which directory is being navigated, and why

Then use the position tools once you have a path:line:col:

Tool Answers
hover Type and docs at a position
definition Go to definition (CSS/HTML tokens answer from the index below)
references All usages (CSS/HTML tokens answer from the index below)
diagnostics Language-server diagnostics; CSS/HTML also get unreferenced-selector and undefined-variable warnings

Cross-file CSS/HTML index (a Python scanner, not the language servers):

Tool Answers
css_var Where is --name defined and used?
selector Where is #id or .class defined and used (CSS, HTML, JS)?

search_symbol, symbol_info and outline are JS/TS only. Use css_var and selector for markup and stylesheets.

name and query are accepted as aliases of each other on the name-based tools. A missing parameter gets a short hint back instead of a validation error.

Positions are 1-indexed. column is a UTF-16 character offset (a leading tab counts as one character).

Environment

Variable Default Purpose
WEBNAV_MCP_WORKSPACE unset: follows the client's MCP roots when they name a worktree of the same git repository, else CLAUDE_PROJECT_DIR, else the working directory Pins the project root (never overridden). See the workspace tool
WEBNAV_MCP_ROOTS the whole workspace as one root, labelled web Comma-separated label=relative/path pairs to index separately, e.g. app=src,prototypes=design when two trees define their own values
WEBNAV_MCP_EXCLUDE nothing Comma-separated workspace-relative paths of generated script output (e.g. the JS a TS build emits). These aren't opened, are hidden from search_symbol, and are rejected by the position tools. The CSS/selector index still reads them
WEBNAV_MCP_PUBLIC nothing Comma-separated workspace-relative stylesheets (files or directories) that are a public API, e.g. a design-token file consumed by other projects. diagnostics stops reporting their custom properties as "declared but never used" and their selectors as "never referenced"; undefined var() usages are still reported

Requirements

  • Python ≥ 3.11
  • Node.js ≥ 18 (for TypeScript 7's tsc shim and the HTML/CSS servers)
  • Installed automatically: mcp, mcp-nav-shared

Development

Source: github.com/illescasDaniel/webnav-mcp. From a checkout: uv sync --group dev, then npm ci in this directory (owns typescript@^7 + vscode-langservers-extracted for standalone launch), then uv run webnav-mcp.

License

MIT. See LICENSE.

Metadata

Release files for webnav-mcp 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for webnav-mcp 0.1.3
File Size Uploaded Provenance Actions
webnav_mcp-0.1.3.tar.gz 25.8 kB Without provenance Details for webnav_mcp-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for webnav-mcp 0.1.3
File Interpreter ABI Platform Actions
webnav_mcp-0.1.3-py3-none-any.whl Python 3 none any Details for webnav_mcp-0.1.3-py3-none-any.whl

Total release size: 54.3 kB

Release files / webnav_mcp-0.1.3.tar.gz

Download URL webnav_mcp-0.1.3.tar.gz
Size 25.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e49a0a82fcb21c253557ccdb14e50d91ed9c71851be7919680a652cf6a209af0
BLAKE2b-256 checksum
How to use checksums
12c3c71bbd02de837fa41a746c462a4dd5b91ef08ebbb8a3c9a14d6a6866ccae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / webnav_mcp-0.1.3-py3-none-any.whl

Download URL webnav_mcp-0.1.3-py3-none-any.whl
Size 28.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dac673aed835ff9d02eaeecf5f297bb76c490eb06669e45e2d481a4e63ddb422
BLAKE2b-256 checksum
How to use checksums
f7e12b633ade318fbde1cc21804a08c0f62582927103c9a6a3c5d0eff821fb09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Security for webnav-mcp 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page