npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

vite-plugin-ai-annotator

v1.14.13

Published

AI-powered element annotator for Vite - Pick elements and get instant AI code modifications

Readme

vite-plugin-ai-annotator

AI-powered element annotator for Vite - Pick elements and get instant AI code modifications.

Watch the Tutorial

📺 Watch the Tutorial Video - See the plugin in action!

What is this?

Point at any element on your webapp, type a request, and AI modifies your code instantly.

  • Point directly at any element on your webapp
  • Type a short request like "make it bigger", "center it", "change color to blue"
  • Wait for AI to modify your code - it automatically finds and updates the source files
  • See instant results - your changes appear immediately in the browser

Save cognitive load, because it's precious.

Why use it?

Traditional workflow: inspect element → find source file → locate the code → make changes → check results.

With this plugin: point → describe → done.

Works with all Vite-supported frameworks:

  • ⚛️ React - Detects components, props, and state
  • 🟢 Vue - Understands composition/options API
  • 🅰️ Angular - Recognizes components and directives
  • 🟠 Svelte - Identifies components and stores
  • 📄 Vanilla JS - Works with plain HTML/CSS/JS
  • 🟦 Nuxt.js - Full support via Nuxt module (Nuxt 4+)

Installation

Option 1: Automatic Setup (Recommended)

Install the Claude Code plugin and let AI set everything up for you:

/plugin marketplace add nguyenvanduocit/claude-annotator-plugin
/plugin install claude-annotator-plugin@claude-annotator-plugin

Then ask Claude: "Set up ai-annotator for my project" - it handles the rest!

Option 2: Manual Setup

For Vite Projects

Step 1: Install the package
bun add -d vite-plugin-ai-annotator
Step 2: Add to your Vite config
import { defineConfig } from 'vite';
import annotator from 'vite-plugin-ai-annotator';

export default defineConfig({
  plugins: [
    annotator(),
  ],
});

For Nuxt.js Projects (Nuxt 4+)

Step 1: Install the package
bun add -d vite-plugin-ai-annotator
Step 2: Add to your nuxt.config.ts
export default defineNuxtConfig({
  modules: [
    'vite-plugin-ai-annotator/nuxt'
  ],
  // Optional: Configure the annotator
  aiAnnotator: {
    port: 7318,
    autoSetupMcp: true,
    verbose: false,
  }
})

That's it! Nuxt handles the rest automatically.

Configure MCP (Vite and Nuxt)

Option A: Auto Setup (Recommended)

Enable automatic MCP configuration in your Vite config:

annotator({
  autoSetupMcp: true,
})

For Nuxt, configure in nuxt.config.ts:

export default defineNuxtConfig({
  modules: ['vite-plugin-ai-annotator/nuxt'],
  aiAnnotator: {
    autoSetupMcp: true,
  }
})

This automatically creates/updates .mcp.json, .cursor/mcp.json, and .vscode/mcp.json based on your project.

Option B: Manual Setup

claude mcp add annotator -- npx vite-plugin-ai-annotator mcp -s http://localhost:7318

Step 3: Start your dev server

bun dev

The annotator toolbar will automatically appear in your application.

Usage

  1. Click the inspect button on the toolbar to enter feedback mode
  2. Click on any element(s) you want to provide feedback on
  3. Ask Claude Code to modify them - it will use annotator_get_feedback to get the selected feedback with their source locations
  4. Claude modifies the source code directly

Example prompt: "Make the selected button larger and change its color to blue"

Configuration

annotator({
  port: 7318,              // Server port (default: 7318)
  autoSetupMcp: true,      // Auto-configure MCP files (default: false)
  autoSetupSkills: true,   // Auto-write AI tool skill files (default: true)
  verbose: false,          // Enable detailed logging (default: false)
})

Auto MCP Setup

When autoSetupMcp: true, the plugin automatically:

  1. Detects your package manager from lockfile:

    • bun.lockb / bun.lock → uses bunx
    • pnpm-lock.yaml → uses pnpm dlx
    • Otherwise → uses npx
  2. Creates/updates MCP config files:

    • .mcp.json - Claude Code, Cline, Roo Code
    • .cursor/mcp.json - Cursor (only if .cursor/ exists)
    • .vscode/mcp.json - VS Code (only if .vscode/ exists)
  3. Preserves existing config - merges with other MCP servers, doesn't overwrite

Auto AI Skills Setup

When autoSetupSkills: true (default), the plugin writes skill/instruction files on every dev server start with the correct server address baked in. This means AI tools automatically know how to call the REST API:

| AI Tool | File | Format | |---------|------|--------| | Claude Code | .claude/skills/ai-annotator/SKILL.md | YAML frontmatter (name, description) | | Cursor | .cursor/rules/ai-annotator.mdc | alwaysApply: true | | Windsurf | .windsurf/rules/ai-annotator.md | trigger: always_on | | Codex | AGENTS.md | Marker-delimited section | | Copilot | .github/instructions/ai-annotator.instructions.md | applyTo: "**" | | Cline | .clinerules/ai-annotator.md | Plain markdown |

Files are updated on every server restart, so the address is always correct.

REST API

The server exposes a plain HTTP REST API at /api/*, usable by any HTTP client — no MCP required.

# List sessions
curl http://localhost:7318/api/sessions

# Get feedback
curl http://localhost:7318/api/sessions/<id>/feedback

# Inject JS
curl -X POST http://localhost:7318/api/sessions/<id>/inject-js \
  -H 'Content-Type: application/json' \
  -d '{"code": "document.title"}'

| Method | Endpoint | Body/Query | Description | |--------|----------|------------|-------------| | GET | /api/sessions | — | List connected browser sessions | | GET | /api/sessions/:id/page-context | — | Page URL, title, selection count | | POST | /api/sessions/:id/select | {mode?, selector?, selectorType?} | Trigger feedback selection | | GET | /api/sessions/:id/feedback | ?fields=xpath,attributes,styles,children | Get selected feedback items | | DELETE | /api/sessions/:id/feedback | — | Clear all selections | | POST | /api/sessions/:id/screenshot | {type?, selector?, quality?} | Capture screenshot | | POST | /api/sessions/:id/inject-css | {css} | Inject CSS into page | | POST | /api/sessions/:id/inject-js | {code} | Execute JS in page context | | GET | /api/sessions/:id/console | ?clear=true | Get captured console logs |

Happy coding! 🚀