by santoshyadavdev
Inspect Angular component trees, signals, dependency injection, and routes during development, build time, or through coding agents.
Angular DevTools provides deep inspection capabilities for Angular applications, allowing developers to explore component hierarchies, signal graphs, DI providers, routes, NgRx stores, and forms directly in the browser or via a standalone tooling interface.
npm install @santoshyadavdev/ng-devtools devframe/__ng-devtools/.npx @santoshyadavdev/ng-devtools dev # live dev server with RPC
npx @santoshyadavdev/ng-devtools build --outDir dist-report # static HTML report
npx @santoshyadavdev/ng-devtools mcp # start MCP server for agents
ng-devtools entry that runs the above npx command.viteDevframeHub plugin to mount the tools as a dock panel.@santoshyadavdev/ng-devtools/popup and call createDevtoolsPopup() to get a floating FAB that opens the UI.#tab=signals)Q: Which Angular versions are supported?
Q: Are sensitive form values sent to the server?
[redacted] before transmission.Q: How does the MCP server expose tools?
ng-devtools: prefix, e.g., ng-devtools:get-routes, ng-devtools:inspect-signals, etc., and can be called by any MCP‑compatible client.Q: Can I use the devtools without an internet connection?
npx @santoshyadavdev/ng-devtools build --outDir <dir> and open the generated HTML offline.Q: How do I add the devtools to a Vite project?
@devframes/vite and add viteDevframeHub({ devframes: [ngDevtools], ui: createUi({ branding: { productName: 'Angular DevTools' } }) }) to vite.config.ts.Q: What licensing applies?
Inspect Angular component trees, signals, dependency injection, and routes — at dev time, build time, or through a coding agent. Built with Devframe so the same tool runs as an embedded panel, standalone CLI, static report, MCP server, or Chrome DevTools extension.
@ngrx/store (actions, reducers, effects, selectors) and @ngrx/signals (signalStore, signalState, signalMethod) patterns from source; live state & action log via Redux DevTools protocol#tab=signals)npm install @santoshyadavdev/ng-devtools devframe
MCP agent support (@devframes/agentic) is included.
Add the devframe middleware to your Express server:
// server.ts
import { initDevframe } from 'devframe/initiate';
import ngDevtools from '@santoshyadavdev/ng-devtools/devframe';
const devtools = initDevframe(ngDevtools, { base: '/__ng-devtools/' });
app.use(devtools.nodeMiddleware);
Open http://localhost:4000/__ng-devtools/ to see the devtools UI.
# Dev server with live RPC
npx @santoshyadavdev/ng-devtools dev
# Static report (offline HTML)
npx @santoshyadavdev/ng-devtools build --outDir dist-report
# MCP server for coding agents
npx @santoshyadavdev/ng-devtools mcp
Claude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"ng-devtools": {
"command": "npx",
"args": ["@santoshyadavdev/ng-devtools", "mcp"]
}
}
}
VS Code — add to .vscode/mcp.json:
{
"servers": {
"ng-devtools": {
"command": "npx",
"args": ["@santoshyadavdev/ng-devtools", "mcp"]
}
}
}
When embedded in Express, the MCP endpoint is also available over HTTP at /__ng-devtools/__mcp.
MCP clients see these with an underscore, as ng-devtools_get-routes.
| Tool | Description |
|---|---|
ng-devtools:get-routes |
List Angular routes from source |
ng-devtools:get-components |
Discover components and directives, with inputs and outputs |
ng-devtools:get-signals |
Signal declarations from source |
ng-devtools:get-providers |
DI providers from source |
ng-devtools:build-meta |
Angular/TS versions, SSR status |
ng-devtools:highlight |
Highlight a component in the page |
ng-devtools:inspect-signals |
Signal graph a connected page reported |
ng-devtools:inspect-providers |
Injector tree a connected page reported |
ng-devtools:get-ngrx-store |
Scan source for NgRx store patterns |
ng-devtools:inspect-forms |
Forms on the page with every field's state and errors |
ng-devtools:explain-form-invalid |
Which fields make a form invalid, and why |
The Forms tab and the forms tools read Signal Forms, reactive forms and template-driven forms from the running page, in development builds only. Signal Forms need Angular 21 or later. The live change timeline for reactive and template-driven forms uses control.events (Angular 18+); on Angular 17 changes are picked up every few seconds instead, without submit and reset events.
min, max, minLength, maxLength, pattern), a pending debounce, submitting, and disabled reasons; for reactive and template-driven forms, whether validators and async validators are attached, the value reset() goes back to, updateOn, and the bound ControlValueAccessor.ng-devtools:explain-form-invalid is the tool to reach for first: without arguments it lists every form that is invalid or waiting on async validation, with each failing field's current value, the validator that failed, its message and whether it was touched. Pass form (an id like form-1, or part of a label like SignupComponent) to explain one form.ng-devtools:inspect-forms lists the forms with their status and error counts. Pass form for a field tree, plus path (e.g. address.city), onlyInvalid or includeValues: false to narrow it down.Form values leave the page: they are sent to the devtools server, shown in the Forms tab and returned to agents. Values of password fields, fields with a password, one-time-code or credit-card autocomplete, and fields whose name looks secret (password, token, card, cvv and similar) are replaced with [redacted]. Other values are sent as they are, so keep real credentials out of forms you inspect, and don't expose the dev server beyond localhost.
| Resource | Content |
|---|---|
ng-devtools:component-tree |
Live component hierarchy |
ng-devtools:signal-graph |
Signal dependency graph |
ng-devtools:injector-tree |
DI injector hierarchy |
ng-devtools:ngrx-store |
Live NgRx state & action log |
ng-devtools:forms |
Live forms and recent changes |
Mount as a dock panel inside Vite DevTools:
// vite.config.ts
import { viteDevframeHub } from '@devframes/vite/hub';
import { createUi } from '@devframes/hub-ui';
import ngDevtools from '@santoshyadavdev/ng-devtools/devframe';
export default defineConfig({
plugins: [
viteDevframeHub({
devframes: [ngDevtools],
ui: createUi({ branding: { productName: 'Angular DevTools' } }),
}),
],
});
See the Chrome Extension section below for how to package this as a Chrome extension.
The overlay runs inside the user's Angular page and collects live component, signal, DI, and NgRx data. Importing the module starts it, so in most apps that import is all that is needed:
import '@santoshyadavdev/ng-devtools/overlay';
It looks for the devframe connection next to the page and then at
/__ng-devtools/.
initOverlay is exported for a devtools mounted somewhere else. Importing the
module has already started an overlay on the default URLs by then, so dispose of
that one before starting another, or the page ends up with two connections and
two polling intervals:
import { initOverlay } from '@santoshyadavdev/ng-devtools/overlay';
const dispose = await initOverlay({ baseURL: '/__my-devtools/' });
The devtools can appear as a floating popup directly on your page — no browser extension needed:
import { createDevtoolsPopup } from '@santoshyadavdev/ng-devtools/popup';
createDevtoolsPopup();
This adds a purple FAB button (bottom-right) that opens the full devtools UI in an iframe. Supports three dock modes (float, bottom, right), dragging, resizing, and persists position via localStorage. The popup is automatically loaded in development when using the demo app.
The repository includes a demo Angular app (src/) that showcases the devtools with a product catalog built using @ngrx/signals:
signal()signalStore with withState, withComputed, and withMethodsRun pnpm start and click the purple FAB button to open the devtools popup and see all inspectors in action.
# Install dependencies
pnpm install
# Dev server for the devtools UI (with live RPC)
pnpm devtools:dev
# Build the devtools UI SPA
pnpm devtools:build
# Build the publishable package (library + UI in dist/)
pnpm devtools:build-pkg
# Run the Angular host app (builds the package first, includes in-page devtools popup)
pnpm start
The devtool ships as one npm package, @santoshyadavdev/ng-devtools: Node-side logic, RPC, CLI, overlay, popup, and the built UI in dist/public.
# Builds on prepack, then publishes
pnpm devtools:publish
To distribute this as a Chrome DevTools extension, you need a thin Chrome extension shell that opens the devtools UI in a DevTools panel. The built SPA already works standalone — the extension just embeds it.
Create an extension/ directory:
extension/
manifest.json
devtools.html
devtools.js
panel.html
extension/manifest.json{
"manifest_version": 3,
"name": "Angular DevTools",
"version": "0.0.1",
"description": "Inspect Angular components, signals, DI, and routes.",
"devtools_page": "devtools.html",
"permissions": ["scripting"],
"host_permissions": [
"http://localhost/*",
"https://localhost/*",
"http://127.0.0.1/*",
"https://127.0.0.1/*"
],
"icons": {
"128": "icon-128.png"
}
}
extension/devtools.html and extension/devtools.js<!-- devtools.html -->
<!doctype html>
<script src="devtools.js"></script>
// devtools.js — creates the panel in Chrome DevTools
chrome.devtools.panels.create('Angular', 'icon-128.png', 'panel.html');
extension/panel.htmlThis is where the built SPA loads. Copy the built assets (dist/devtools-ui/) into the extension and point panel.html at the SPA's index.html:
<!-- panel.html — the devtools SPA loads here -->
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<iframe src="ui/index.html" style="width:100%;height:100vh;border:none;"></iframe>
</body>
</html>
# Build the devtools SPA
pnpm devtools:build
# Copy into the extension
mkdir -p extension/ui
cp -r dist/devtools-ui/* extension/ui/
chrome://extensionsextension/ directoryextension/ directoryThe extension panel loads the SPA in static mode by default. To connect it to a live dev server for real-time RPC, the extension's content script or background service worker needs to detect the devframe's __connection.json on the inspected page and pass the connection to the panel. This is the same pattern the official Angular DevTools Chrome extension uses — a content script bridges the inspected page and the DevTools panel via chrome.runtime.connect.
MIT
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by headroomlabs-ai
Compress tool outputs, logs, files, RAG chunks, and conversation history before they reach the LLM, keeping answers identical while saving up to 95% of tokens for JSON payloads.
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
{
"mcpServers": {
"ng-devtools": {
"command": "npx",
"args": [
"@santoshyadavdev/ng-devtools",
"mcp"
],
"env": {}
}
}
}claude mcp add ng-devtools npx @santoshyadavdev/ng-devtools mcp