Skip to main content
Glama
Shivanshvyas1729

Real-Time YouTube Script Generator MCP Server

šŸŽ¬ Real-Time YouTube Script Generator & MCP Server

šŸš€ Live Demo: Real-Time YouTube Script Generator

project structure

An AI-powered application that retrieves real-time web information using Tavily Search and converts it into high-retention, production-ready short video scripts (YouTube Shorts / Instagram Reels) using Gemini LLM.

The project features both a Streamlit Web App interface and a FastMCP (Model Context Protocol) Server for seamless integration with AI assistants (Claude, Cursor, etc.).


✨ Features

  • šŸ” Real-Time Web Search: Integrates Tavily API for fetching up-to-date web data.

  • šŸ“Œ AI Summarization: Automatically synthesizes search snippets into concise, structured summaries.

  • šŸ“œ Production-Ready Script Generation: Formats context into short-video scripts complete with visual cues, verbal hooks, and call-to-actions.

  • šŸ’» Interactive Streamlit Web UI: Simple web browser interface to search, preview, and download scripts as .txt.

  • šŸ”Œ Model Context Protocol (FastMCP): Exposes search and script generation tools as standard MCP endpoints for external AI clients.


Related MCP server: AITuber MCP Server

🧠 Key Learnings & Important Takeaways

  1. Real-Time Grounding Eliminates Hallucination:

    • Standard LLMs suffer from knowledge cutoff dates. Combining Tavily real-time web search with Gemini allows the generator to craft accurate scripts on breaking news and trending topics.

  2. Fault-Tolerant Fallback Architecture:

    • If the LLM summarization call fails (rate limits, network glitches), the pipeline gracefully falls back to displaying raw web search snippets, ensuring the user never receives a blank page or error crash.

  3. Decoupled Architecture with FastMCP:

    • By separating the core utility functions (app.py) from the transport interface (mcp_server.py), the exact same business logic powers both an interactive web application (Streamlit) and external IDE/Assistant workflows (Claude Desktop, Cursor).

  4. Structured Short-Form Script Prompting:

    • Short-video scripts (Shorts/Reels) require immediate engagement. Using structured prompt directives (Visual Cues [...] vs. Spoken Words (...) and Hook → Frame → Payload → CTA layout) produces production-grade output.

  5. Multi-Provider Compatibility:

    • Utilizing standard client abstractions (such as the OpenAI SDK with custom base_url for AICredits or official Google Gemini SDK) allows switching between underlying model backends effortlessly.


šŸ› ļø Project Structure

ā”œā”€ā”€ app.py              # Streamlit web application & core logic (Tavily + LLM)
ā”œā”€ā”€ mcp_server.py       # FastMCP server exposing tool endpoints
ā”œā”€ā”€ assests/            # Project diagrams & images
│   └── 3242.png
ā”œā”€ā”€ pyproject.toml      # Project configuration & dependencies
ā”œā”€ā”€ .env                # API keys configuration (not committed)
└── README.md           # Project documentation

šŸ”‘ Environment Setup

Create a .env file in the root directory:

AICREDITS_API_KEY=your_aicredits_or_openai_key
TAVILY_API_KEY=your_tavily_api_key
GEMINI_API_KEY=your_google_gemini_api_key

šŸ“¦ Installation

Using uv (recommended):

uv sync

šŸš€ Usage

1. Run the Streamlit Web Application

To launch the interactive web interface:

uv run streamlit run app.py

Open your browser at http://localhost:8501.

2. Test/Dev MCP Server with FastMCP Inspector

To test the MCP tools (get_latest_info_mcp and get_video_script_mcp) in an interactive browser UI:

uv run mcp dev mcp_server.py

3. Connect MCP Server to Claude / Cursor

Add the server definition to your MCP client configuration (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "youtube-script-generator": {
      "command": "uv",
      "args": ["run", "python", "C:/Users/DELL/Desktop/New folder/mcp_server.py"]
    }
  }
}

šŸ› ļø MCP Tools Offered

Tool Name

Description

get_latest_info_mcp(query)

Performs a real-time web search and returns an AI summary.

get_video_script_mcp(query)

Fetches real-time web search data and generates a production-ready script.

user workflow


šŸ’» API Code Examples, Parameters & Incoming Result Formats

Below is complete reference code to interact with all the APIs integrated into this project, including parameter definitions and sample response payloads.


1. Tavily Search API (tavily-python)

Used to retrieve real-time web search results and snippets.

Code Example

import os
from tavily import TavilyClient

# Initialize client
tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))

# Execute web search
response = tavily_client.search(
    query="Latest developments in AI agents",
    max_results=3,
    topic="general",
    search_depth="advanced"
)

print("Search Response:", response)

Input Parameters

Parameter

Type

Description

query

str

Search topic or query string.

max_results

int

Maximum number of search results to return (e.g., 3).

topic

str

Category of search ("general", "news").

search_depth

str

Level of search detail ("basic", "advanced").

Incoming Result Format (JSON Response)

{
  "query": "Latest developments in AI agents",
  "follow_up_questions": null,
  "answer": null,
  "images": [],
  "results": [
    {
      "title": "Autonomous AI Agents in 2026: Trends & Breakthroughs",
      "url": "https://example.com/ai-agents-2026",
      "content": "AI agents are transforming software engineering with multi-agent orchestration and tool calling capabilities...",
      "score": 0.9821,
      "raw_content": null
    },
    {
      "title": "Open Source AI Agent Frameworks Overview",
      "url": "https://example.com/agent-frameworks",
      "content": "A comprehensive review of modern agent frameworks built for fast model context protocol (MCP) integration...",
      "score": 0.9543,
      "raw_content": null
    }
  ],
  "response_time": 0.84
}

2. AICredits API (OpenAI Client Interface)

Used in app.py to route model requests through OpenAI-compatible proxy endpoints.

Code Example

import os
from openai import OpenAI

# Initialize client pointing to AICredits endpoint
client = OpenAI(
    base_url="https://api.aicredits.in/v1",
    api_key=os.getenv("AICREDITS_API_KEY")
)

# Request completion
completion = client.chat.completions.create(
    model="gemini-2.0-flash-lite-001",
    messages=[
        {"role": "user", "content": "Summarize key features of quantum computing."}
    ],
    temperature=0.3
)

print(completion.choices[0].message.content)

Input Parameters

Parameter

Type

Description

model

str

Model identifier (e.g., "gemini-2.0-flash-lite-001").

messages

list[dict]

Chat history array of `{"role": "user"

temperature

float

Sampling randomness (0.0 for deterministic, 0.7 for creative).

Incoming Result Format (ChatCompletion JSON Object)

{
  "id": "chatcmpl-8x92a01bf982",
  "object": "chat.completion",
  "created": 1772500000,
  "model": "gemini-2.0-flash-lite-001",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Key features of quantum computing include:\n- **Superposition**: Qubits exist in multiple states simultaneously.\n- **Entanglement**: Interconnected qubit states enable exponentially faster calculations.\n- **Quantum Interference**: Amplifies correct paths to solve complex optimization problems."
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 42,
    "completion_tokens": 88,
    "total_tokens": 130
  }
}

3. Official Google Gemini API (google-genai SDK)

Used to call Gemini models directly via Google's official client library (google-genai).

Code Example

import os
from google import genai
from google.genai import types

# Initialize official Gemini client
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))

# Generate content call
response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents="Write a 30-second YouTube Short hook on space exploration.",
    config=types.GenerateContentConfig(
        temperature=0.7,
        max_output_tokens=500
    )
)

print("Generated Output:", response.text)

Input Parameters

Parameter

Type

Description

model

str

Model selection ("gemini-2.0-flash", "gemini-1.5-pro").

contents

str / list

Text prompt or multi-modal input.

config

GenerateContentConfig

Generation settings (temperature, max_output_tokens, system_instruction).

Incoming Result Format (GenerateContentResponse Object)

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "[Visual Cue: Fast zoom onto Mars surface]\n(Voiceover): Did you know we just found proof of liquid water under the Martian crust?"
          }
        ],
        "role": "model"
      },
      "finish_reason": "STOP",
      "index": 0,
      "safety_ratings": []
    }
  ],
  "usage_metadata": {
    "prompt_token_count": 28,
    "candidates_token_count": 45,
    "total_token_count": 73
  }
}

4. Core Internal Functions (app.py Interface)

Core helper functions combining real-time web retrieval and AI script generation.

Code Example

from app import get_realtime_info, generate_video_script

query = "Latest SpaceX Launch"

# Step 1: Get real-time summary & raw search backup
summary_text, raw_search_backup = get_realtime_info(query)

# Step 2: Generate production script using context
script = generate_video_script(summary_text or raw_search_backup)

print("--- SUMMARY ---")
print(summary_text)

print("\n--- SCRIPT ---")
print(script)

Input & Output Signatures

def get_realtime_info(query: str) -> tuple[str, str]:
    """
    Inputs:
        query (str): The search topic or keyword string.

    Returns:
        tuple[str, str]: (llm_summary_text, raw_source_info_markdown)
    """

def generate_video_script(info_text: str) -> str:
    """
    Inputs:
        info_text (str): Summarized or raw information context.

    Returns:
        str: Production-ready YouTube Short / Reel script.
    """

Available Tools

2 tools
get_latest_info_mcpD
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

D1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Tool has no description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness1/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Tool has no description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has no description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has no description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

Tool has no description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tool has no description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_video_script_mcpD
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

D1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Tool has no description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness1/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Tool has no description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has no description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has no description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

Tool has no description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tool has no description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

C2/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: one fetches latest information, the other generates a video script. There is no overlap or ambiguity between them.

Naming Consistency5/5

Both tools follow the same verb_noun pattern (get_latest_info, get_video_script) with consistent snake_case. The '_mcp' suffix is uniform, maintaining a predictable convention.

Tool Count3/5

With only two tools, the server feels slightly thin for a broad 'Real-Time YouTube Script Generator' purpose. However, the tools cover the core pipeline, making the count borderline but acceptable.

Completeness4/5

The two tools cover the essential workflow: gathering latest info and generating a script. Minor gaps exist, such as customization or options for script variations, but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    This MCP fetches trending data from platforms like YouTube, TikTok, and Instagram Reels using various scraping and API techniques. It's designed to run under FastMCP and exposes tools that can be consumed via a local CLI or claude.
    25
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that automates short-form video production for TikTok, Instagram Reels, and YouTube Shorts, using AI agents and behavioral science to generate production-ready videos from a topic and vibe.
    1

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Shivanshvyas1729/Real-Time-YouTube-Script-Generator-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server