gemini-vision-mcp

gemini-vision-mcp

MCP server for describing video, image, audio, and text using the Gemini 3.1 Flash Live API with persistent WebSocket sessions.

Category
Visit Server

README

gemini-vision-mcp

MCP server for describing video, image, audio, and text using the Gemini 3.1 Flash Live API.

Uses a persistent WebSocket session (Google GenAI Live API) to describe media content through FastMCP.

Requirements

  • Python 3.11+
  • Google API key with Gemini access

Install

uv pip install gemini-vision-mcp

Or run directly with uvx:

uvx gemini-vision-mcp

Configuration

Copy .env.example to .env and fill in your API key:

cp .env.example .env
Variable Default Description
GOOGLE_API_KEY Required. Your Google Gemini API key
GEMINI_MODEL gemini-3.1-flash-live-preview Gemini model to use (More models to be tested.)
GEMINI_TPM_LIMIT 4000000 Tokens per minute limit for auto-refresh
RATE_LIMIT_WINDOW_SECONDS 60 Rate limit window in seconds
RATE_LIMIT_REQUESTS 10 Max requests per rate window

Usage

Run with uvx:

uvx --no-cache --from . gemini-vision-mcp

This project uses uvx for running and venv for development.

MCP Client Configuration

Add to your MCP client (e.g. opencode opencode.json):

{
  "mcp": {
    "gemini-vision": {
      "environment": {
        "GOOGLE_API_KEY": "your-api-key",
        "GEMINI_MODEL": "gemini-3.1-flash-live-preview",
        "RATE_LIMIT_WINDOW_SECONDS": "60",
        "RATE_LIMIT_REQUESTS": "10"
      },
      "enabled": true,
      "type": "local",
      "cwd": ".",
      "command": [
        "uvx",
        "--no-cache",
        "--from",
        ".",
        "gemini-vision-mcp"
      ]
    }
  }
}

Tools

Tool Description
vision_from_file Describe a single file (image, audio, video, or text)
from_file Alias for vision_from_file
vision_from_files Describe multiple files in one request
from_files Alias for vision_from_files
vision_from_files_mixed Multiple files with different media types
from_files_mixed Alias for vision_from_files_mixed
vision_from_resource Describe a URL resource
from_resource Alias for vision_from_resource
vision_from_resources Describe multiple URL resources
from_resources Alias for vision_from_resources
vision_from_resources_mixed Multiple URLs with different media types
from_resources_mixed Alias for vision_from_resources_mixed
new_vision Force a fresh Gemini Live session (loses context)
compact Summarize history via model, reconnect with summary
gemini_usage Report current token usage and TPM status

Parameters

  • type: Media category — text, image, audio, or video
  • prompt: Instructions to the model (what to describe/extract)
  • path: Local file path (file tools)
  • resource: URL to fetch (resource tools)
  • compact: If true, auto-compact history after this request (vision tools only)

Example: describe an image

vision_from_file(type="image", path="/path/to/photo.jpg", prompt="Describe the scene in detail")

Example: extract text from a screenshot

vision_from_file(type="image", path="/path/to/screenshot.png", prompt="Extract all visible text")

Example: batch describe images

vision_from_files(type="image", paths=["/a.jpg", "/b.jpg", "/c.jpg"], prompt="Describe each image")

Example: describe a URL resource

vision_from_resource(type="image", resource="https://example.com/photo.png", prompt="What is in this image?")

Session management

The server maintains a conversation history across tool calls and uses a two-tier TPM management strategy:

  • 70% TPM — Auto-compaction: the model summarizes the conversation history, then reconnects with the summary as context. History shrinks, session continues.
  • 75% TPM — Hard refresh: reconnects with whatever compacted history exists. Use new_vision to reset completely (loses all context).

You can also trigger compaction manually:

compact()

Or pass compact=true to any vision tool to compact after that request:

vision_from_file(type="image", path="photo.jpg", prompt="Describe this", compact=true)

Call new_vision to force a clean reset (no history carried over). Call gemini_usage to inspect current token consumption and rate limit status.

Architecture

  • src/server.py — FastMCP server, tool registration, rate limiting
  • src/gemini_live.py — Persistent Gemini Live WebSocket client with auto-reconnect, history tracking, and self-compaction
  • src/rate_limiter.py — Sliding window rate limiter
  • src/tool/ — Tool implementations (compact, file, files, files_mixed, gemini_usage, new_vision, resource, resources, resources_mixed)
  • src/event/ — Background TPM monitoring

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured