Ears everywhere in your stack.
AI-native developer observability MCP — browser, terminal, and process, all in one.
Fennec is an MCP (Model Context Protocol) server that bridges the gap between AI agents and your development environment. Instead of you copy-pasting errors between terminal, browser, and AI, Fennec gives your AI agent direct access to all three simultaneously.
When a developer asks an AI agent "why is my login broken?", the agent is essentially blind:
What agent sees: What developer sees:
───────────────── ──────────────────────────────────
"I can't access Browser Console:
your terminal" ✗ TypeError: jwt.sign is undefined
"Please paste the Terminal:
error message" ✗ Error: JWT_SECRET not set in env
"I don't have Network Tab:
browser access" ✗ POST /api/login -> 500
The developer ends up being a copy-paste bridge between their tools and the AI. Fennec eliminates this bottleneck.
Bug appears
→ AI checks browser console + network + server log simultaneously
→ AI correlates: "Server missing JWT_SECRET, set it in .env"
→ Fix. Done.
Fennec supports Chromium, Firefox, and WebKit — not just Chromium like many tools. Configure via:
{ "browser": { "type": "firefox" | "webkit" | "chromium" } }Or environment variable: FENNEC_BROWSER_TYPE=firefox
Fennec's signature feature correlates browser errors with server logs to identify root causes automatically. The correlation engine has been tested with 7 integration scenarios covering real-world patterns:
| Pattern | Example | Confidence |
|---|---|---|
| Server 500 + stderr Error | POST /api/login → 500 + DB timeout | 0.90 |
| Auth token issue | 401 + JWT verification failed | 0.92 |
| Missing file/env | ENOENT + .env not found | 0.88 |
| Network failure + TypeError | request failed + JS TypeError | 0.85 |
✅ The confidence scores above are derived from actual inference rules with unit-tested pattern matching, not fabricated illustrations.
| Category | Tools | What You Can Do |
|---|---|---|
| Navigation | 6 | Navigate, go back/forward, reload, wait for navigation |
| Interaction | 10 | Click, type, select, hover, scroll, upload file, drag-drop |
| DOM | 9 | Screenshot, DOM snapshot, accessibility tree, find elements |
| DevTools Console | 5 | Console logs, JS errors, watch console |
| DevTools Network | 9 | Network monitoring, intercept, mock, wait for request |
| DevTools Performance | 6 | Performance metrics, memory, profiling, simulate network |
| Storage | 12 | localStorage, cookies, IndexedDB, session export/import |
| Auth | 6 | Auto-fill login, save/load sessions, check auth state |
| Tabs | 7 | Multi-tab, multi-context, tab switching |
| Process | 10 | Spawn, monitor, attach by PID/port, kill, restart |
| Terminal | 7 | Watch files/pipes, filter logs by level/keyword |
| Diagnostic | 6 | diagnose_page, diagnose_fullstack, diagnose_auth, etc. |
| Scheduler | 7 | Auto-trigger workflows, manage rules, view history |
| Smart | 7 | Smart wait, smart fill form, annotated screenshots, diff |
| Planner | 5 | Execute multi-step goals, plan preview, plan management |
| Mobile (NEW) | 11 | List devices, tap, type, swipe, logcat, screenshot, install APK, launch/stop apps via ADB |
💡 Token-Efficient: Tools are categorized into 16 groups (including Mobile). MCP clients can request only specific categories to reduce context window usage. Use the
_categoriesfield in ListTools response to discover available categories.
Save and load browser auth states across conversations:
# In one session
AI: auth_fill_login_form("admin@example.com", "password", submitAfter: true)
AI: auth_save_session("myapp-prod")
# In another conversation
AI: auth_load_session("myapp-prod") # skip login entirely!Three ways to connect:
# 1. Pipe output (recommended)
npm run dev 2>&1 | fennec pipe --name "dev-server"
# 2. Attach by PID
fennec attach-pid 12345
# 3. Attach by port
fennec attach-port 3000Fennec monitors its own performance — track tool call durations, memory usage, error rates. Use the PerformanceMetrics API to check Fennec's health:
Total tool calls: 1,234 | Avg duration: 45ms | Error rate: 2.3% | Memory: 128MB
- Sandbox mode ON by default — blocks dangerous operations
- Permission per tool — process spawn, kill, JS evaluation independently configurable
- Domain allowlist/blocklist — restrict browser navigation
- Spawn allowlist — only allow specific commands (npm, node, etc.)
- Audit log — every tool call is logged with timestamp, session, and result
- See Security Model for details
# Install globally
npm install -g @plumpslabs/fennec-cli
# (Optional) Install browser engines — only needed for browser automation
fennec install-browsers
# Generate config (optional)
fennec initNote: Playwright (browser automation) is an optional peer dependency. If you only need terminal/process monitoring, Fennec works without it. Add browser support when needed:
npm install playwright fennec install-browsers
Add to your MCP client config:
{
"mcpServers": {
"fennec": {
"command": "fennec",
"args": ["start"]
}
}
}Supported clients: Claude Desktop, Claude Code, Cline, Cursor, Windsurf, Continue.dev
# Terminal: Start your app with Fennec watching
npm run dev 2>&1 | fennec pipe --name "my-app"Then ask your AI agent:
"Check why my app is broken"
The AI will automatically:
- Open the browser to your app
- Check console errors
- Inspect failed network requests
- Correlate with server logs
- Report the root cause
- Getting Started Guide
- Full Tool Reference — all 123 tools documented
- Configuration Reference — all options + env vars
- Security Model — sandbox, allowlists, best practices
- Auth Flows Guide — login forms, session persistence
- Full-Stack Debugging Guide
- Multi-Session Testing Guide
- Debugging SPAs Guide
- Usage Examples
| Requirement | Version |
|---|---|
| Node.js | >= 20.0.0 |
| npm / pnpm / yarn | Latest stable |
| OS | macOS, Linux, Windows (native + WSL2) |
| Browser | Chromium (auto-installed), Firefox/WebKit (optional) |
We welcome contributions! See CONTRIBUTING.md for guidelines.
MIT — see LICENSE for details.
Built with ❤️ for AI-native development
