Narrator MCP

Narrator MCP

Captures screenshots, analyzes changes with Gemini, generates humorous narrations with sound effects, and plays them as speech via ElevenLabs, optionally integrating with a Minecraft mod for in-game events.

Category
访问服务器

README

Narrator MCP

A fun MCP server that takes screenshots, describes what changed, generates hilarious narration, and plays it back as audio!

Datathon2025

We made this product in Texas A&M's DATATHON 2025 - A hackathon with the focus of AI, ML, Computer Science, Data Science, and Statistics! <br></br>

Results:

Agent: 2nd Place 🏆

MCP(this repo): Best use of ElevenLabs 🏆

<br></br>

Contributors:

Jonathan Kalsky '29 (CS):

www.linkedin.com/in/jonathan-kalsky

Aaron Yang '29 (CS):

https://www.linkedin.com/in/nianjin-yang/

Ethan Hince '29 (CS):

https://www.linkedin.com/in/ethan-hince-a831a5381/

<br></br>

Brief Demo:

https://youtu.be/umaCNd4jPfY?si=QRRDb36p3LI-7tyr <br></br>

License

We do not allow the reproducing, forking, or stealing of our idea, code, or intellectual property. For information email jonathan.kalsky@gmail.com

<br></br> <br></br>

Features

Connected to our custom made and simultaneously programmed Minecraft Mod that updates a the HTTP port with data

View: https://github.com/nianjindev/MinecraftMCPSender

There is a UI to view the data on the port. To host the UI, run:

python3 minecraft_reciever.py
python minecraft_reciever.py (windows)

Otherwise

  • Get Screenshot: Retrieves the last two screenshots from a directory
  • Describe: Uses Gemini to analyze screenshots and describe changes
  • Narrate: Generates funny, sarcastic narration about what you're doing
  • Sound Effects: Automatically adds comedic sound effects from MyInstants API
  • TTS: Converts narration to speech with ElevenLabs TTS
  • Auto-cleanup: Only keeps the last 5 screenshots <br></br>

Setup

  1. Install dependencies:
pip install -r requirements.txt
  1. Create a .env file with your API keys:
cp .env.example .env
# Edit .env and add your API keys
  1. Get API keys:

    • Gemini API key: https://aistudio.google.com/app/apikey (FREE!)
    • ElevenLabs API key: https://elevenlabs.io/app/settings/api-keys (10k chars/month free)
  2. In config/mcp/servers.json:

    • You may need to switch "Python3" to "Python" in the command field

Usage

Run the Client

Minecraft Mod Integration (Preferred)

To include Minecraft gameplay events in the narration:

  1. Install the Minecraft Fabric mod (see MinecraftMCP.java)
  2. Run the screenshot client (it automatically starts the receiver):
python mincraft_client_only.py
  1. Launch Minecraft - the mod will send events automatically

The narrator will describe both what's happening on screen AND in-game events like:

  • Blocks placed/broken
  • Damage taken
  • Biome changes
  • Day/night cycle

Alternate Screenshot Context-based Client

The client takes screenshots every 5 seconds and generates narrated audio:

python screenshot_client.py

This will:

  1. Take a screenshot every 5 seconds
  2. After 2 screenshots, compare them
  3. Generate a funny narration about what changed
  4. Convert to speech and play it automatically

Note: The Minecraft receiver runs automatically in the background. No need to start it separately!

┌─────────────────┐<br></br> │ Minecraft Mod │ (Java)<br></br> │ (in game) │<br></br> └────────┬────────┘<br></br> │ HTTP POST<br></br> ▼<br></br> ┌─────────────────────┐<br></br> │ minecraft_receiver │ (Flask HTTP server)<br></br> │ Port 8080 │ Saves to minecraft_data.json<br></br> └────────┬────────────┘<br></br> │ File write<br></br> ▼<br></br> ┌─────────────────────┐<br></br> │ minecraft_data.json │ (Shared file)<br></br> └────────┬────────────┘<br></br> │ File read<br></br> ▼<br></br> ┌─────────────────────┐<br></br> │ screenshot_client │ Reads file, calls MCP tool<br></br> └────────┬────────────┘<br></br> │ MCP call<br></br> ▼<br></br> ┌─────────────────────┐<br></br> │ mcp_server.py │ Processes data via get_minecraft_input tool<br></br> └─────────────────────┘<br></br>

Use as MCP Server

You can also use this as an MCP server in Kiro or other MCP clients:

{
  "mcpServers": {
    "screenshot-narrator": {
      "command": "python",
      "args": ["mcp_server.py"],
      "env": {
        "GEMINI_API_KEY": "your_key",
        "ELEVENLABS_API_KEY": "your_key",
        "SCREENSHOT_DIR": "./screenshots"
      }
    }
  }
}

Available MCP Tools

  • get_screenshot: Get the last N screenshots
  • get_minecraft_input: Receive Minecraft gameplay events
  • describe: Analyze screenshots and/or Minecraft data
  • narrate: Generate funny narration from a description
  • describe_for_narration: Combined tool (faster) - analyze and narrate in one step
  • summarize_narrations: Combine multiple narrations into one sentence
  • get_sfx: Search for sound effects from MyInstants API
  • tts: Convert text to speech with ElevenLabs

How It Works

  1. Screenshots: Uses macOS screencapture to grab screenshots
  2. Analysis: Gemini 2.5 Flash analyzes images and describes changes (fast & free!)
  3. Narration + SFX Keyword: Gemini generates sarcastic commentary AND extracts the best sound effect keyword in ONE API call (super fast!)
  4. Sound Effect Search: Searches MyInstants API with the AI-selected keyword and randomly picks from top results
  5. Speech: ElevenLabs TTS converts text to audio with high-quality voice
  6. Playback: Plays sound effect and narration audio in parallel for perfect timing

Example Output

📸 Screenshot saved: screenshots/screenshot_20251108_143022.png
📸 Screenshot saved: screenshots/screenshot_20251108_143027.png

==================================================
🎬 Processing screenshots...
==================================================
📋 Getting screenshots...
🔍 Describing changes...
Description: The user has switched from their code editor to a web browser,
apparently giving up on debugging to search Stack Overflow instead.

🎭 Generating funny narration...
Narration: And here we observe the developer in their natural habitat,
abandoning all hope of solving the problem themselves and turning to the
ancient wisdom of strangers on the internet. Truly magnificent.

🎤 Converting to speech...
🔊 Playing audio: screenshots/narration_20251108_143030.mp3

Documentation

Notes

  • Cross-platform: Works on macOS, Windows, and Linux
  • Costs: Gemini is FREE + ElevenLabs has 10k chars/month free tier
  • Gemini 2.5 Flash is super fast for vision tasks
  • ElevenLabs voices are incredibly realistic and expressive
  • MyInstants API provides free sound effects
  • Press Ctrl+C to stop the client

Platform-specific details:

  • macOS: Uses native screencapture and afplay commands
  • Windows: Uses PIL for screenshots and pygame for audio
  • Linux: Uses scrot/gnome-screenshot for screenshots, various audio players

License & Attribution

This project uses sound effects from:

  • MyInstants API by abdiputranar: https://github.com/abdipr/myinstants-api
  • MyInstants.com: https://www.myinstants.com

Sound effects are obtained via web scraping from MyInstants.com. This project:

  • Provides proper attribution to the MyInstants API and MyInstants.com
  • Is used for non-commercial, educational, and entertainment purposes only
  • Complies with the MyInstants API usage requirements
  • Does not abuse the API for personal commercial benefits

If you use this project, please maintain this attribution and follow the same guidelines.

Customization

  • Change INTERVAL in screenshot_client.py to adjust screenshot frequency
  • Modify the narration prompt in mcp_server.py for different comedy styles
  • Change TTS voice in mcp_server.py (ElevenLabs voices: Adam, Antoni, Arnold, Bella, Domi, Elli, Josh, Rachel, Sam, and more)
  • Customize SFX selection logic in the get_sfx_for_narration() function to match different keywords

Sound Effects

The system uses AI to automatically select the perfect sound effect for each narration:

  1. AI Keyword Extraction: Gemini analyzes the narration and extracts the single best keyword for a sound effect (e.g., "crash", "laugh", "explosion", "oof", "bruh", "scream", etc.)
  2. MyInstants Search: Searches the MyInstants API with that keyword
  3. Random Selection: Picks a random sound from the top 10 results for variety
  4. Parallel Playback: Plays sound effect and narration simultaneously for perfect comedic timing

This gives unlimited variety - every narration gets a unique, contextually appropriate sound effect!

Example keywords extracted by AI: crash, laugh, explosion, scream, bell, drum, bruh, oof, yikes, gasp, applause, horn, punch, falling, and many more!

Credits

Sound effects are provided by:

  • MyInstants API: https://github.com/abdipr/myinstants-api (by abdiputranar)
  • MyInstants.com: https://www.myinstants.com (original sound library)

Sounds are obtained via web scraping from MyInstants.com. This project complies with the API's usage requirements by providing proper attribution and is used for non-commercial, educational purposes only.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选