harness-fe
Works with Astro via the React-compatible JSX runtime to provide source-aware instrumentation and runtime capture.
Enables edge runtime capture in Cloudflare Workers using HTTP-batch transport, allowing server-side events to flow into the same gateway as Node routes.
Supports multi-window Electron apps with unified session tracking so the agent gets a single cross-window timeline.
Provides source-aware instrumentation and server-side capture (errors, route durations, uncaught exceptions) for Next.js applications via dedicated packages.
Collects server-side error and performance data (Server Component errors, Route Handler durations, uncaught exceptions) from Node.js runtimes.
Instruments React applications with source location attributes (file:line:column) via build plugins or a custom JSX runtime, enabling precise agent feedback.
Works with Remix via the React-compatible JSX runtime to provide source-aware instrumentation and runtime capture.
Supports multi-window Tauri apps with unified session tracking so the agent gets a single cross-window timeline.
Enables edge runtime capture in Vercel Edge routes using HTTP-batch transport, allowing server-side events to flow into the same gateway as Node routes.
Injects source location attributes into components during Vite builds via a dedicated plugin.
Injects source location attributes into components during Webpack builds via a dedicated plugin.
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., "@harness-fefind and fix the runtime error on the current page"
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.
Features
Source-Aware Instrumentation — Injects
data-morphix-locanddata-morphix-compattributes into JSX / Vue elements (via build plugin OR@harness-fe/react-jsxjsxImportSource), giving AI agents precise file:line:column references for every UI element.MCP Gateway — Connects AI agents (Claude, Cursor, Kiro) to browser + server runtimes via WebSocket / HTTP. Solo mode auto-spawns a shared loopback gateway; team mode (
harness --governed) adds RBAC tokens, project→agent binding, and audit. Bidirectional command/event communication with a unified timeline per page-load.Browser Runtime + Overlay — A lightweight browser SDK that captures console / network / errors / DOM (rrweb), exposes an in-page "H" overlay so users can file annotated screenshots (arrow + text on a snapdom-captured PNG), and surfaces a "My reports" view to manage their submissions. The overlay is extensible — add custom action buttons via
registerOverlayPluginto send the current scene/logs to your own system (issue tracker, Slack, webhook). See docs/overlay-plugins.md.Server-Side Capture (Next.js) —
@harness-fe/node-runtimecollects Server Component errors, Route Handler / Server Action durations, and uncaught Node exceptions.<HarnessScript>is a Server Component that uses Reactcache()to bind the same sessionId across SSR and the client runtime — one refresh = onesessions/{id}/timeline.jsonl.Edge Runtime Compatible — When Next emits an Edge worker bundle the SDK auto-switches to an HTTP-batch transport (
POST /eventson the gateway) so Cloudflare Workers / Vercel Edge routes flow into the same gateway as Node routes.Visitor Identity — Anonymous, stable per-browser identifier (
localStorage) + optionaluserIdfrom the app's auth layer. Lets agents build a real user journey across refreshes, tabs, and same-origin iframes.Annotated Feedback Loop — Users file tasks through the overlay; the screenshot's arrow + text annotations are flattened into the PNG so vision models read the annotations directly off pixels. Agents fetch the image via
tasks_get_attachmentas a native MCP image-content block.Multi-Bundler & Multi-Framework — Stable on Vite + React, Webpack + React, Vite/Webpack + Vue 3, Next.js (App + Pages Router, webpack + Turbopack). Any React 17+ toolchain via
@harness-fe/react-jsxjsxImportSource.Zero Production Overhead — All instrumentation, WebSocket / HTTP connections, the overlay, and the Node SDK are gated behind
NODE_ENV === 'development'.
Related MCP server: Kaboom Browser AI Devtools MCP
How It Works
Harness-FE uses a three-layer architecture to connect AI agents with your running application:
graph LR
Agent["🤖 AI Agent<br/>(Claude / Kiro)"]
GW["⚡ Gateway<br/>(harness)"]
Plugin["🔧 Build Plugin<br/>(Vite / Webpack)"]
Runtime["🌐 Runtime Client<br/>(Browser)"]
Agent <-->|stdio or HTTP-MCP| GW
GW <-->|WebSocket /ws| Plugin
GW <-->|WebSocket /ws| RuntimeLayer | Role | Communication |
Build Plugin | Transforms source files at dev-time, injecting location and component metadata into JSX/Vue templates. Sends HMR and error events to the gateway. | WebSocket |
Runtime Client | Runs in the browser, captures DOM snapshots, executes commands (click, type, query), and renders annotation overlays. | WebSocket |
Gateway | The central bridge. Exposes tools to AI agents via stdio MCP (solo) or HTTP MCP (team), stores events, and routes commands/events between agents and browser/plugin peers. | stdio or HTTP-MCP ↔ AI Agent, WebSocket ↔ Peers |
Data flow: Bundler transforms source → Browser renders instrumented DOM → Runtime captures state → Gateway relays to AI Agent → Agent sends commands back through the same path.
Supported Environments
Environment | Version | Status |
Vite + React | 5.x – 7.x | ✅ Stable ( |
Webpack + React | 5.x | ✅ Stable ( |
Vite + Vue 3 | 5.x – 7.x | ✅ Stable |
Webpack + Vue 3 | 5.x | ✅ Stable |
Next.js (App + Pages Router) | 13+ | ✅ Stable ( |
Any React toolchain (Remix, Astro, Turbopack, …) | React 17+ | ✅ Stable via |
Getting Started
In a hurry? Jump to the 90-second Quickstart.
Prerequisites
Node.js >= 20
pnpm >= 8 (recommended), npm >= 9, or yarn >= 1.22
Installation
pnpm (recommended):
pnpm add -D @harness-fe/vite @harness-fe/runtimenpm:
npm install -D @harness-fe/vite @harness-fe/runtimeyarn:
yarn add -D @harness-fe/vite @harness-fe/runtimeWhich path are you on?
You are… | Use | Auth | Setup |
Solo dev — one app, local |
| none (loopback trusted) | Quick start below + |
A team — many apps sharing one gateway |
| scoped token per agent |
Whichever path: install the skill first (npx @harness-fe/skill install) so your agent knows how to use harness-fe without you spelling out each tool. See docs/agent-setup.md.
Quick start — Vite + React (6 steps)
Install packages:
pnpm add -D @harness-fe/vite @harness-fe/runtimeConfigure Vite — add the plugin to your
vite.config.ts:import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import { harnessFE } from '@harness-fe/vite'; export default defineConfig({ plugins: [react(), harnessFE()] });Install the agent skill (recommended — do this first) — teach your agent how to drive harness-fe so you don't have to hand-hold it:
npx @harness-fe/skill install # auto-detects Claude Code / Cursor / KiroThe skill drops a curated playbook (mental model + tool catalog + decision flows) into your IDE. Your agent then knows which tool to reach for from a plain-English bug report — you describe the problem, it drives the app.
Wire the MCP server — add harness-fe to your agent's
.mcp.json(solo / local — no token, trusted on loopback):{ "mcpServers": { "harness-fe": { "type": "stdio", "command": "npx", "args": ["-y", "@harness-fe/cli", "mcp"] } } }harness mcpauto-spawns a shared gateway on127.0.0.1:47729and proxies MCP traffic to it. Multiple IDE windows share the same gateway automatically. Sharing across a team? Use governed mode instead. Phone / second-machine debugging: docs/lan-mode.md.Start your dev server —
pnpm dev.Describe a problem to your agent — "the increment button does nothing" — and it uses the skill + tools to inspect console/network, locate the source (
file:line), fix, and verify. The agent that built it never leaves.
Adopting in legacy Vue projects? See docs/vue2-compat.md — the plugin will never break your build, but you may want to dry-run first to see which files miss out on source-aware tagging.
Embedding in Electron / Tauri / multi-window hosts? See docs/electron.md for how to make every renderer share one sessionId so the agent gets a unified cross-window timeline.
Quick start — Next.js (App or Pages Router)
For Next.js the recommended path is plugin-less (via react-jsx for source tagging + next for SSR session continuity). Two file touches.
Install:
pnpm add -D @harness-fe/next @harness-fe/react-jsx @harness-fe/runtime @harness-fe/node-runtimetsconfig.json— enable the source-tag JSX runtime:{ "compilerOptions": { "jsxImportSource": "@harness-fe/react-jsx" } }next.config.mjs— wrap withwithHarness():import { withHarness } from '@harness-fe/next/config'; export default withHarness({/* …your config… */}, { projectId: 'my-app' });app/layout.tsx— drop in the Server Component (yes, no'use client'needed):import { HarnessScript } from '@harness-fe/next'; import { getCurrentUser } from '@/lib/auth'; export default async function RootLayout({ children }) { const user = await getCurrentUser().catch(() => null); return ( <html><body> <HarnessScript projectId="my-app" userId={user?.id} buildId={process.env.NEXT_PUBLIC_GIT_SHA} /> {children} </body></html> ); }pnpm dev. Twopeer connectedlines should show in the gateway log per refresh — onerole=node-runtime, onerole=runtime-client, same sessionId.
Optional — structured logs with @harness-fe/log
For explicit logs (instead of relying on auto-captured console.*), use the isomorphic logger. Same import works in Server Components, Route Handlers, Server Actions, and Client Components — events from both server and client land in the same session timeline.
pnpm add @harness-fe/logimport { log } from '@harness-fe/log';
// Anywhere — Server Component, Route Handler, Client Component, shared util
log.info('Cart loaded', { items: items.length });
log.scope('checkout').warn('Stripe latency high', { ms: latency });
log.error('Webhook failed', err);Agents can ask "show me all log.warn(...) in this session" because log events are tagged app-log — distinct from auto-captured server-log / browser console. See packages/log/README.md for details.
User feedback (in-page overlay)
When the runtime loads in dev a discreet "H" mark appears bottom-right. Clicking opens the info card. From there users can:
Copy snapshot — markdown block with project / build / session / tab / url ready to paste to an agent.
Report a problem — picks an element →
snapdomcaptures it with 32 px context → user draws arrows + text → flattened PNG ships as part of atask.submitevent. Vision-capable agents read the annotations directly off the pixels.My reports — list of this visitor's tasks across all sessions: status, agent's resolution note, inline edit, copy-for-agent, delete with two-click confirm.
Packages
Package | Description |
Shared types, Zod schemas, message + wire definitions | |
Core library — WS bridge, event store, recording/replay, caller identity + per-project tenant isolation. No HTTP server; gateway owns all transports. | |
Gateway — MCP (stdio + HTTP, per-session), | |
| |
React SPA served at | |
Standalone browser sandbox + interceptor lib ( | |
Browser SDK — capture(via | |
Node SDK — Server Component / Route Handler / uncaught error capture. Dual transport: WS in Node runtime, HTTP-batch in Edge runtime | |
Next.js integration — | |
Isomorphic structured logger — same | |
| |
Vite plugin | |
Webpack plugin | |
Core unplugin (shared by all bundler plugins) | |
⭐ Start here — curated agent playbook; |
Documentation
VISION.md — Why this project exists; the three deployment directions that drive the roadmap
docs/agent-setup.md — ⭐ Connect your agent: install the skill first, then wire
.mcp.json(solo or governed)docs/gateway-team-mode.md — Share one gateway across a team: governed mode, scope RBAC, project→agent binding, audit
ARCHITECTURE.md — Package responsibilities, data flow diagrams, sessionId resolution chain, and protocol reference
docs/architecture/sandbox.md — The
@harness-fe/sandboxlib (browser API patching + interceptor middleware) — design + safety contract + 9-channel matrixROADMAP.md — Milestones, organised by mission direction
docs/troubleshooting.md — Events not showing? sessionId mismatch? Where do timeline files live? Start here
CONTRIBUTING.md — Development setup, commit conventions, and PR process
License
MIT © 2026 MorphixAI
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/Morphicai/harness-fe'
If you have feedback or need assistance with the MCP directory API, please join our Discord server