markupR MCP Server
Enables AI coding agents to capture screen and voice recordings, extract timestamped frames, and receive structured Markdown reports with context for bug fixing and UI feedback.
README
<p align="center"> <img src="src/renderer/assets/logo.svg" alt="markupR" width="80" height="80"> </p>
<h1 align="center">markupR</h1>
<p align="center"> <strong>Record your screen. Say what's wrong. Your AI agent fixes it.</strong> </p>
<p align="center"> <a href="https://www.npmjs.com/package/markupr"><img src="https://img.shields.io/npm/v/markupr?style=flat-square" alt="npm version"></a> <a href="https://www.npmjs.com/package/markupr"><img src="https://img.shields.io/npm/dm/markupr?style=flat-square" alt="npm downloads"></a> <a href="https://github.com/eddiesanjuan/markupr/actions/workflows/ci.yml"><img src="https://github.com/eddiesanjuan/markupr/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="License"></a> <a href="https://github.com/eddiesanjuan/markupr/stargazers"><img src="https://img.shields.io/github/stars/eddiesanjuan/markupr?style=flat-square" alt="GitHub stars"></a> </p>
<p align="center"> <a href="#quick-start">Quick Start</a> · <a href="#context-aware-capture-what-your-agent-actually-gets">Context-Aware Capture</a> · <a href="#why-markupr">Why markupR</a> · <a href="#mcp-server">MCP Server</a> · <a href="#cli">CLI</a> · <a href="#integrations">Integrations</a> · <a href="#contributing">Contributing</a> </p>
<p align="center"> <img src="assets/demo-cli.gif" alt="markupR desktop-to-report workflow demo" width="800"> </p>
Desktop app workflow is the default: record + narrate + stop, then ship context-rich markdown (frames + cursor/window/focus hints when available) directly to your agent.
The Problem
AI coding agents can't see your screen. When you find a bug, you context-switch into writing mode -- describing the layout issue in text, manually screenshotting, cropping, and dragging images into the right spot. You speak at 150 words per minute but type at 60. The context is lost in translation.
The Solution
markupR is a desktop capture app first. You hit a hotkey, narrate what you see, and stop. Then it runs a post-session pipeline that aligns transcript timestamps with the recording, extracts the right frames, and outputs structured Markdown your agent can execute against immediately.
- Record -- press a hotkey, talk through what you see
- Process -- Whisper transcribes, ffmpeg extracts frames at the exact moments you described
- Enrich -- capture context is attached to shot markers (cursor position, active window/app, focused element hints when available)
- Output -- structured Markdown with screenshots and context your agent can trust
Cmd+Shift+F --> talk --> Cmd+Shift+F --> Cmd+V into your agent
Quick Start
Desktop App (recommended)
Download from markupr.com or GitHub Releases.
macOS install note: Apple notarization is currently rolling out. If macOS warns on first launch, use Right-click -> Open once to trust the app. If needed, run:
xattr -dr com.apple.quarantine /Applications/markupR.app
- Press
Cmd+Shift+F(macOS) orCtrl+Shift+F(Windows) to start - Narrate what you see and mark shots when needed
- Press the hotkey again to stop
- Paste the generated report path into Claude Code, Cursor, Windsurf, or any coding agent
MCP Server (for AI coding agents)
npx --package markupr markupr-mcp
CLI (for existing recordings / CI / automation)
npx markupr analyze ./recording.mov
Use this when you already have a video file. The desktop app remains the primary capture workflow.
Context-Aware Capture: What Your Agent Actually Gets
Every important frame can carry extra machine-usable context, not just pixels.
- Cursor coordinates at capture time
- Active app + window title (best-effort from OS context)
- Focused element hints (role/text/title hints when available)
- Trigger metadata (
manual,pause, orvoice-command)
This makes the report a high-signal liaison between you and your agent: what you said, what you saw, and where your attention was.
Why markupR?
Local-first. Whisper runs on your device. Your recordings, transcripts, and screenshots never leave your machine. No cloud dependency, no account required.
AI-native output. The Markdown output is structured for LLM consumption -- headings, categories, severity levels, inline screenshots, and capture-context hints. Not a raw transcript with random images.
Works everywhere. Desktop app for daily flow. CLI for scripts and CI/CD. MCP server for agent integration. GitHub Action for PR feedback. Same pipeline, four interfaces.
Open source. MIT licensed. No telemetry, no tracking, no analytics. Read the source, fork it, ship it.
What the Output Looks Like
# Feedback Session -- Feb 5, 2026
## FB-001: Button sizing issue
The submit button is way too small on mobile. I'm trying to tap it
and keep hitting the cancel link underneath. Needs more vertical
padding, maybe 12px minimum tap target.

## FB-002: Loading state feels janky
After the spinner disappears, the content pops in with no transition.
There's a visible layout shift -- the sidebar jumps left by about
20 pixels.

Each screenshot is extracted from the exact video frame matching your narration timestamp, with context hints attached when available. See full examples in examples/.
MCP Server
Give your AI coding agent eyes and ears. Add markupR as an MCP server and it can capture screenshots, record your screen with voice, and receive structured reports -- all mid-conversation.
Setup
Claude Code (~/.claude/settings.json):
{
"mcpServers": {
"markupR": {
"command": "npx",
"args": ["--yes", "--package", "markupr", "markupr-mcp"]
}
}
}
Cursor / Windsurf -- same config in your MCP settings.
Tools
| Tool | Description |
|---|---|
capture_screenshot |
Grab the current screen and attach context metadata (cursor + active app/window + focus hints when available). |
capture_with_voice |
Record screen + mic for a set duration. Returns a structured report. |
analyze_video |
Process any existing .mov or .mp4 into Markdown with extracted frames (fallback path for externally captured recordings). |
analyze_screenshot |
Run a screenshot through the AI analysis pipeline. |
start_recording |
Begin an interactive recording session. |
stop_recording |
End the session and run the full pipeline. |
Example
You: "The sidebar is overlapping the main content on mobile. Can you see it?"
Agent: [calls capture_screenshot]
"I can see the issue -- the sidebar has position: fixed but no z-index,
and it's 280px wide with no responsive breakpoint. Let me fix the CSS..."
[fixes the code]
No copy-pasting screenshots. No rewriting what you already know. The agent gets structured report context and acts.
Full MCP documentation: README-MCP.md
CLI
Installation
# Run without installing
npx markupr analyze ./recording.mov
# Or install globally
npm install -g markupr
Commands
markupr analyze <video> -- Process an existing screen recording into structured Markdown.
markupr analyze ./bug-demo.mov
markupr analyze ./recording.mov --output ./reports
markupr analyze ./recording.mov --template github-issue
markupr analyze ./recording.mov --no-frames # transcript only
markupr watch [directory] -- Watch for new recordings and auto-process them.
markupr watch ~/Desktop --output ./reports
markupr push github <report> -- Create GitHub issues from a feedback report.
markupr push github ./report.md --repo myorg/myapp
markupr push github ./report.md --repo myorg/myapp --dry-run
markupr push linear <report> -- Create Linear issues from a feedback report.
markupr push linear ./report.md --team ENG
Output Templates
markdown (default) | json | github-issue | linear | jira | html
Requirements
- Node.js 18+
- ffmpeg on your PATH (
brew install ffmpeg/apt install ffmpeg/choco install ffmpeg)
Integrations
GitHub Action
Run markupR in CI to get visual feedback on pull requests:
- uses: eddiesanjuan/markupr-action@v1
with:
video-path: ./recordings/
github-token: ${{ secrets.GITHUB_TOKEN }}
Desktop App Workflow (Primary)
- Press
Cmd+Shift+F(macOS) orCtrl+Shift+F(Windows) - Narrate what you see and mark shots as needed
- Press the hotkey again to stop
- Paste the file path from your clipboard into Claude Code, Cursor, or any AI agent
How It Works
+-----------+
Screen + Voice -> | Whisper | -> Timestamped transcript
+-----------+
|
+-----------+
| Analyzer | -> Key moments identified
+-----------+
|
+-----------+
| ffmpeg | -> Frames extracted at exact timestamps
+-----------+
|
+-----------+
| Generator | -> Structured Markdown with inline screenshots
+-----------+
The pipeline degrades gracefully. No ffmpeg? Transcript-only output. No Whisper model? Timer-based screenshots. No API keys? Everything runs locally.
Desktop app capture remains the default path. CLI/MCP analyze_video remains available when you need to process an existing recording.
For architecture details, see CLAUDE.md.
Development
git clone https://github.com/eddiesanjuan/markupr.git
cd markupR
npm install
npm run dev
| Command | Description |
|---|---|
npm run dev |
Development mode with hot reload |
npm run build |
Build everything (desktop + CLI + MCP) |
npm test |
Run all tests |
npm run lint |
Lint |
npm run typecheck |
Type check |
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Run tests:
npm test && npm run lint && npm run typecheck - Open a Pull Request
See CONTRIBUTING.md for full guidelines.
License
MIT -- see LICENSE.
<p align="center"> Built by <a href="https://github.com/eddiesanjuan">Eddie San Juan</a><br> <a href="https://markupr.com">markupr.com</a> </p>
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。