monteslu_vibe_eyes

monteslu_vibe_eyes

by monteslu
An MCP server enabling LLMs to visualize and debug browser-based games through vectorized canvas snapshots and real-time debug data.

Vibe-Eyes MCP Server for Browser Game Debugging

Overview

Vibe-Eyes is an MCP server that enables LLMs to "see" what's happening in browser-based games and applications through vectorized canvas visualization and debug information. It uses a client-server architecture to capture, vectorize, and provide visual and debug data to LLMs via the Model Context Protocol (MCP).

Vibe-Eyes Logo

Key Capabilities

  • Captures and vectorizes canvas elements from browser games
  • Collects console logs and errors in real-time
  • Catches unhandled exceptions with full stack traces
  • Makes the visual and debug information available to LLMs via MCP
  • Creates a seamless debugging experience for developers working with LLMs

How It Works

  1. A lightweight client runs in the browser game/application
  2. The client captures canvas snapshots, console logs/errors, and unhandled exceptions
  3. Data is sent to the Vibe-Eyes server via WebSocket (avoiding CORS issues)
  4. The server vectorizes the canvas images and stores them with the debug information
  5. LLMs connect via the Model Context Protocol to access the latest data
  6. LLMs can "see" what's happening and help debug issues with full context

Components

1. Vibe-Eyes MCP Server (mcp.js)

The core server that:
- Receives canvas snapshots via Socket.IO
- Vectorizes images to compact SVG representation (rough approximation)
- Stores debug information (logs, errors, exceptions, timing)
- Exposes the data via Model Context Protocol (MCP)
- Provides HTTP endpoints for direct access
- Processes images sequentially to manage resources

2. Browser Client

The browser client is available at vibe-eyes-client repository.

A lightweight browser integration that:
- Finds canvas elements in the page
- Captures canvas content as data URLs
- Intercepts console logs and errors
- Catches global unhandled exceptions with stack traces
- Sends data to the Vibe-Eyes server via WebSockets
- Minimizes performance impact on games
- Supports explicit initialization to control when capturing starts

3. Vectorization Engine (vectorizer.js)

A high-quality SVG vectorization library that:
- Converts raster images to vector SVGs
- Optimizes SVGs for size and clarity
- Preserves visual information while reducing data size

Getting Started

Installation

# Clone the repository
git clone https://github.com/monteslu/vibe-eyes.git
cd vibe-eyes

# Install dependencies
npm install

Using with LLM Agents

Register the MCP server with your AI agent:

# For Claude Code
claude mcp add

Integrating with Games/Applications

Add the client to your browser application by including the required scripts:

<!-- Include Socket.IO client -->
<script src="https://cdn.socket.io/4.7.4/socket.io.min.js"></script>

<!-- Include Vibe-Eyes client -->
<script src="https://cdn.jsdelivr.net/npm/vibe-eyes-client/dist/index.min.js"></script>

<!-- Initialize the client -->
<script>
  const vibeEyes = initializeVibeEyes({
    serverUrl: 'ws://localhost:8869',
    captureDelay: 1000,
    autoCapture: true
  });
</script>

Using with Claude or Other LLMs

The MCP server exposes a tool for LLMs to access the latest visual and debug information via Model Context Protocol (MCP):

getGameDebug({ includeSvg: true/false })

The LLM will receive:
- Recent console logs and errors from the application
- Unhandled exceptions with full stack traces (if any occurred)
- Vectorized SVG approximation of the canvas (if includeSvg is true)
- Timing and correlation information to connect visual state with logs

Example MCP Config (for Claude Code)

{
  "name": "vibe-eyes",
  "url": "http://localhost:8869",
  "tools": [
    {
      "name": "getGameDebug",
      "description": "Retrieves the most recent canvas visualization and debug information from a browser game or application"
    }
  ]
}

How Vibe-Eyes Helps with "Vibe Coding"

  1. Providing Visual Context: LLMs can see the actual visual state of the game/app
  2. Correlating Visual and Code Issues: Console logs are paired with visual state
  3. Reducing Manual Work: No need to manually capture and upload screenshots
  4. Enabling Real-Time Debugging: LLMs can observe changes as they happen
  5. Optimizing Data Transfer: Vector representation is more compact than screenshots

Performance Considerations

  • The browser client is designed to minimize impact on application performance
  • Creating canvas data URLs can be CPU-intensive, so capturing frequency is configurable
  • WebSocket transport avoids CORS issues common in cross-domain setups
  • The server processes images sequentially to prevent overload
  • SVG vectorization balances visual accuracy with size optimization

Direct SVG Access

For applications that want to reuse the vectorized SVG output:

  1. WebSocket Response: The server includes the SVG directly in WebSocket responses:

    js socket.on('debugCapture', (data, callback) => { callback({ success: true, id: "capture_123", svg: "<svg>...</svg>", stats: { /* stats data */ } }); });

  2. HTTP Endpoint: Access the latest capture via the /latest endpoint:

    js fetch('http://localhost:8869/latest') .then(res => res.json()) .then(data => { const svg = data.vectorized?.svg; });

API Reference

Browser Client

const vibeEyes = initializeVibeEyes({
  serverUrl: 'ws://localhost:8869',
  captureDelay: 1000,
  maxLogs: 10,
  maxErrors: 10,
  autoCapture: true
});

vibeEyes.startCaptureLoop();
vibeEyes.stopCaptureLoop();
vibeEyes.captureAndSend();

MCP Tool

getGameDebug({
  includeSvg: true
})

// Returns
{
  success: true,
  capture: {
    id: "capture_123456789",
    timestamp: 1616161616161,
    console_logs: [
      { timestamp: 1616161616000, data: ["Player position:", {x: 10, y: 20}] }
    ],
    console_errors: [],
    unhandled_exception: {
      timestamp: 1616161616100,
      message: "Uncaught SyntaxError: Unexpected token ';'",
      stack: "SyntaxError: Unexpected token ';'\n    at game.js:42:10\n...",
      type: "SyntaxError",
      source: "game.js",
      line: 42,
      column: 10
    },
    vectorized: {
      svg: "<svg>...</svg>",
      imageType: "png",
      stats: {
        vectorizeTime: 120,
        optimizeTime: 30,
        originalSize: 50000,
        finalSize: 15000,
        sizeReduction: 70
      }
    }
  }
}

Standalone Vectorizer CLI

# Install CLI globally
npm install -g vibe-eyes

# Use the CLI
vibe-eyes-vectorize input.png output.svg

# With options
vibe-eyes-vectorize photo.jpg --color-precision 10 --max-iterations 100

License

ISC

About

An MCP server that enables LLMs to 'see' what's happening in browser-based games and applications through vectorized canvas visualization and debug information.

Resources

Readme

Activity

Stars

22 stars

Watchers

2 watching

Forks

2 forks

Report repository

Releases


No releases published

Packages 0


No packages published

Languages

Features & Capabilities

Categories
mcp_server model_context_protocol javascript llm claude vectorization browser_games api_integration websockets

Implementation Details

Stats

0 Views
22 GitHub Stars

Repository Info

monteslu Organization

Similar MCP Servers

continuedev_continue by continuedev
25049
21423
9300
SunMonTueWedThuFriSat
303112345678910111213141516171819202122232425262728293012345678910
:
PM
SunMonTueWedThuFriSat
303112345678910111213141516171819202122232425262728293012345678910
:
PM