MCP server that watches web animations like a human tester β detects jank, stuttering, visual artifacts using AI vision.
Built with FastMCP leveraging the latest MCP spec (2025-11-25) features.
YOU: "Watch the modal animation on this page"
β
ANIMAWATCH:
1. Records browser interaction as video (Playwright)
2. Sends video to Vision AI (Gemini FREE or Ollama local)
3. AI watches the recording like a human would
β
RESULT: "Jank detected at 1.2s - fade-in stutters for 180ms"
| Feature | Description |
|---|---|
| π₯ Video Recording | Records browser interactions using Playwright |
| ποΈ AI Vision Analysis | Uses Gemini 2.0 Flash (FREE) or Ollama (local) |
| π Animation Diagnosis | Detects jank, stuttering, timing issues, visual artifacts |
| πΈ Screenshot Analysis | Fast static analysis for non-animated issues |
| βΏ Accessibility Checks | Visual accessibility analysis (contrast, readability) |
| πΎ Resources | Access recordings and analyses via MCP resources |
| π Prompts | Pre-defined prompt templates for different analysis types |
| π 100% FREE | Uses Gemini's free tier or runs locally with Ollama |
| Tool | Description |
|---|---|
watch |
π¬ Record and analyze animations (main tool) |
screenshot |
πΈ Fast static page analysis with image return |
analyze_video |
π₯ Analyze an existing video file |
record |
βΊοΈ Just record without analysis |
check_accessibility |
βΏ Visual accessibility analysis |
| URI | Description |
|---|---|
animawatch://recordings/{id} |
Access stored video recordings |
animawatch://analyses/{id} |
Access stored analysis results |
animawatch://config |
Current server configuration |
| Prompt | Description |
|---|---|
animation_diagnosis |
Comprehensive animation analysis template |
page_analysis |
Static page visual analysis template |
accessibility_check |
Accessibility-focused analysis template |
cd ~/github/animawatch
uv sync
uv run playwright install chromium- Go to Google AI Studio
- Click "Get API Key" β Create API key
- Copy your key
cp .env.example .env
# Edit .env and add your GEMINI_API_KEYClaude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"animawatch": {
"command": "uv",
"args": ["--directory", "/Users/YOUR_USER/github/animawatch", "run", "animawatch"],
"env": {
"GEMINI_API_KEY": "your-api-key-here"
}
}
}
}Augment Code (settings):
{
"mcpServers": {
"animawatch": {
"command": "uv",
"args": ["--directory", "/Users/YOUR_USER/github/animawatch", "run", "animawatch"],
"env": {
"GEMINI_API_KEY": "your-api-key-here"
}
}
}
}"Watch the modal animation on https://example.com for any jank"
"Click the hamburger menu on https://example.com and watch the slide-in animation"
"Watch https://example.com with focus on scroll behavior"
"Check accessibility on https://example.com"
"Show me the analysis from animawatch://analyses/abc123"
| Environment Variable | Default | Description |
|---|---|---|
GEMINI_API_KEY |
- | Google Gemini API key (FREE) |
VISION_PROVIDER |
gemini |
gemini or ollama |
VISION_MODEL |
gemini-2.0-flash |
Vision model to use |
BROWSER_HEADLESS |
true |
Run browser headless |
VIDEO_WIDTH |
1280 |
Recording width |
VIDEO_HEIGHT |
720 |
Recording height |
MAX_RECORDING_DURATION |
30 |
Max recording seconds |
To run entirely locally (no API calls):
# Install Ollama
brew install ollama
ollama serve
# Pull a vision model
ollama pull qwen2.5-vl:7b
# Configure
export VISION_PROVIDER=ollama
export OLLAMA_MODEL=qwen2.5-vl:7bNote: Ollama doesn't support direct video analysis, so it will analyze screenshots/frames instead.
| Provider | Cost |
|---|---|
| Gemini (AI Studio) | FREE (15 req/min, 1M tokens/day) |
| Ollama | FREE (runs locally) |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AnimaWatch β
β (FastMCP Server) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Lifespan Context (AppContext) β
β βββ BrowserRecorder (Playwright) β
β βββ VisionProvider (Gemini/Ollama) β
β βββ recordings: dict[id, Path] β
β βββ analyses: dict[id, str] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Tools β Resources β Prompts β
β βββββββββ β βββββββββββββββββββββ β ββββββββββββββ β
β watch β animawatch://recordingsβ animation_diagnosisβ
β screenshot β animawatch://analyses β page_analysis β
β record β animawatch://config β accessibility_checkβ
β analyze_videoβ β β
β check_accessβ β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
MIT