Skip to main content
Glama

Link Scan MCP Server πŸš€

링크λ₯Ό μŠ€μΊ”ν•˜κ³  μš”μ•½μ„ μ œκ³΅ν•˜λŠ” 포괄적인 Model Context Protocol (MCP) μ„œλ²„μž…λ‹ˆλ‹€. YouTube, Instagram Reels λ“± λΉ„λ””μ˜€ 링크와 λΈ”λ‘œκ·Έ, 기사 λ“± ν…μŠ€νŠΈ 링크λ₯Ό μžλ™μœΌλ‘œ κ°μ§€ν•˜κ³  λΆ„μ„ν•˜μ—¬ 3λ¬Έμž₯ μ΄λ‚΄μ˜ κ°„κ²°ν•œ μš”μ•½μ„ μ œκ³΅ν•©λ‹ˆλ‹€. API ν‚€ 없이 λͺ¨λ“  κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

Link Scan MCP Server - A comprehensive Model Context Protocol (MCP) server for scanning and summarizing links. Automatically detects and analyzes video links (YouTube, Instagram Reels) and text links (blogs, articles) to provide concise 3-sentence summaries. All features work without requiring API keys!

Python 3.11+ | MCP Compatible | License: MIT

✨ Features

  • YouTube Support

    • Comprehensive metadata extraction (title, description)

    • Subtitle extraction for first 7 seconds (yt-dlp)

    • Audio transcription using OpenAI Whisper

    • Integrated summarization combining all text sources

  • Instagram Reels Support

    • Audio download and transcription (first 7 seconds)

    • Automatic content summarization

  • Smart Link Detection

    • Automatic video/text link type detection

    • Error handling for unsupported URLs

  • Web Content Extraction

    • BeautifulSoup-based HTML parsing

    • Main content area detection

    • Automatic navigation/ad removal

  • Intelligent Summarization

    • Llama3-powered text summarization

    • 3-sentence limit enforcement

    • Natural Korean output

πŸ€– AI-Powered Summarization

  • Llama3 Integration

    • Local LLM via Ollama (no API keys required)

    • Separate prompts for video and text content

    • Fallback to original text on errors

  • Whisper Transcription

    • High-quality speech-to-text conversion

    • Optimized for speed and accuracy

    • Supports multiple languages

🐳 Docker Support

  • One-Command Setup

    • Docker Compose configuration

    • Automatic Ollama service setup

    • Llama3 model auto-download

    • Development mode with hot reload

πŸ”§ Developer-Friendly

  • Type-safe with Pydantic models

  • Async/await support for better performance

  • Comprehensive error handling

  • Extensible architecture

  • Hot reload in development mode

πŸš€ Quick Start

Installation

# Clone the repository
git clone https://github.com/your-username/mcp-link-scan.git
cd mcp-link-scan

# Install dependencies
pip install -r requirements.txt

System Dependencies

ffmpeg (required for audio processing):

Ollama (required for summarization):

Configuration

Create a .env file:

# μ„œλ²„ μ„€μ •
PORT=8000                    # μ„œλ²„ 포트 (κΈ°λ³Έκ°’: 8000)
HOST=0.0.0.0                 # μ„œλ²„ 호슀트 (κΈ°λ³Έκ°’: 0.0.0.0)
DEBUG=False                  # 디버그 λͺ¨λ“œ (κΈ°λ³Έκ°’: False)

# API 경둜 prefix (선택)
# 같은 μ„œλ²„μ— μ—¬λŸ¬ MCP μ„œλ²„λ₯Ό ν˜ΈμŠ€νŒ…ν•  λ•Œ μ‚¬μš©
# κΈ°λ³Έκ°’: /link-scan
API_PREFIX=/link-scan

# Ollama μ„€μ • (선택)
# Docker Composeλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 μžλ™μœΌλ‘œ 섀정됨
OLLAMA_API_URL=http://localhost:11434    # Ollama API URL (κΈ°λ³Έκ°’: http://localhost:11434)
OLLAMA_MODEL=llama3:latest                # μ‚¬μš©ν•  Ollama λͺ¨λΈ (κΈ°λ³Έκ°’: llama3)

ν™˜κ²½ λ³€μˆ˜ μ„€λͺ…

λ³€μˆ˜λͺ…

ν•„μˆ˜

κΈ°λ³Έκ°’

μ„€λͺ…

PORT

❌

8000

μ„œλ²„κ°€ μ‚¬μš©ν•  포트 번호

HOST

❌

0.0.0.0

μ„œλ²„κ°€ 바인딩할 호슀트 μ£Όμ†Œ

DEBUG

❌

False

디버그 λͺ¨λ“œ ν™œμ„±ν™” (True/False)

API_PREFIX

❌

/link-scan

API μ—”λ“œν¬μΈνŠΈ 경둜 prefix

OLLAMA_API_URL

❌

http://localhost:11434

Ollama API μ„œλ²„ URL

OLLAMA_MODEL

❌

llama3

μ‚¬μš©ν•  Ollama λͺ¨λΈ 이름

Running as MCP Server

Local Mode (stdio):

python -m src.server

Remote Mode (HTTP):

python run_server.py

Or with uvicorn directly:

uvicorn src.server_http:app --host 0.0.0.0 --port 8000

Using Docker Compose:

# Start all services (link-scan + Ollama)
docker-compose up -d

# Check logs
docker-compose logs -f

# Stop services
docker-compose down

Docker Compose automatically:

  • Sets up Ollama service with 8GB memory

  • Downloads Llama3 model

  • Configures link-scan service

  • Enables development mode with hot reload

Development Mode: The docker-compose.yml is configured for development with:

  • Source code volume mounting

  • Hot reload enabled (DEBUG=True)

  • Automatic code changes detection

Testing with MCP Inspector

You can test the server using the MCP Inspector tool:

# Test with Python
npx @modelcontextprotocol/inspector python run_server.py

# Or test stdio mode
npx @modelcontextprotocol/inspector python -m src.server

The MCP Inspector provides a web interface to:

  • View available tools and their schemas

  • Test tool execution with sample inputs

  • Debug server responses and error handling

  • Validate MCP protocol compliance

πŸ› οΈ Available Tools

1. scan_video_link

Scan and summarize video links (YouTube, Instagram Reels, etc.).

Parameters:

  • url (string, required): Video URL to scan

Example:

{
  "name": "scan_video_link",
  "arguments": {
    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  }
}

Process:

  1. Detects link type (YouTube, Instagram, etc.)

  2. For YouTube: Extracts title, description, subtitles (first 7s)

  3. Downloads audio (first 7 seconds)

  4. Transcribes audio with Whisper

  5. Combines all text sources

  6. Summarizes with Llama3 (3 sentences max)

2. scan_text_link

Scan and summarize text links (blogs, articles, etc.).

Parameters:

  • url (string, required): Text URL to scan

Example:

{
  "name": "scan_text_link",
  "arguments": {
    "url": "https://example.com/blog/article"
  }
}

Process:

  1. Fetches HTML content

  2. Extracts main text content

  3. Removes navigation, ads, and noise

  4. Summarizes with Llama3 (3 sentences max)

πŸ“Š Example Outputs

Input: YouTube video URL

Output:

이 μ˜μƒμ€ Python ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ κΈ°λ³Έ κ°œλ…μ„ μ†Œκ°œν•©λ‹ˆλ‹€. 
λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“± 핡심 문법을 μ‹€μŠ΅ μ˜ˆμ œμ™€ ν•¨κ»˜ μ„€λͺ…ν•©λ‹ˆλ‹€. 
μ΄ˆλ³΄μžλ„ μ‰½κ²Œ 따라할 수 μžˆλ„λ‘ λ‹¨κ³„λ³„λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Input: Blog article URL

Output:

이 글은 Docker μ»¨ν…Œμ΄λ„ˆ 기술의 μž₯단점을 λΆ„μ„ν•©λ‹ˆλ‹€. 
가상화 기술과 λΉ„κ΅ν•˜μ—¬ λ¦¬μ†ŒμŠ€ νš¨μœ¨μ„±κ³Ό 배포 νŽΈμ˜μ„±μ„ κ°•μ μœΌλ‘œ μ œμ‹œν•©λ‹ˆλ‹€. 
λ‹€λ§Œ λ³΄μ•ˆκ³Ό λ³΅μž‘μ„± μΈ‘λ©΄μ—μ„œ μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€κ³  μ‘°μ–Έν•©λ‹ˆλ‹€.

πŸ—οΈ Architecture

mcp-link-scan/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ server.py              # Local server (stdio)
β”‚   β”œβ”€β”€ server_http.py         # Remote server (HTTP)
β”‚   β”œβ”€β”€ tools/                  # MCP tools
β”‚   β”‚   β”œβ”€β”€ link_scanner.py     # Main tool definitions
β”‚   β”‚   β”œβ”€β”€ media_handler.py    # Video processing (Whisper)
β”‚   β”‚   └── text_handler.py    # Text extraction
β”‚   β”œβ”€β”€ utils/                  # Utilities
β”‚   β”‚   β”œβ”€β”€ link_detector.py    # Link type detection
β”‚   β”‚   β”œβ”€β”€ youtube_extractor.py # YouTube metadata/subtitles
β”‚   β”‚   └── llm_summarizer.py   # Llama3 integration
β”‚   └── prompts/                # LLM prompts
β”‚       └── __init__.py         # Video/text prompt templates
β”œβ”€β”€ docker/
β”‚   └── init-ollama.sh          # Ollama initialization script
β”œβ”€β”€ docker-compose.yml          # Docker services
β”œβ”€β”€ Dockerfile                  # Container build config
β”œβ”€β”€ requirements.txt            # Python dependencies
└── run_server.py               # Server entry point

πŸ”§ Development

Setting up Development Environment

# Clone and install
git clone https://github.com/your-username/mcp-link-scan.git
cd mcp-link-scan
pip install -r requirements.txt

# Set up environment variables
cp .env.example .env
# Edit .env with your settings

# Start Ollama (if not using Docker)
ollama serve
ollama pull llama3:latest

Development Mode with Docker

# Start in development mode (hot reload enabled)
docker-compose up -d

# View logs
docker-compose logs -f link-scan

# Code changes are automatically reloaded

Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=src

# Run specific test file
pytest tests/test_link_scanner.py

Customizing Prompts

Edit src/prompts/__init__.py to customize LLM prompts:

# Video summarization prompt
VIDEO_SUMMARIZE_SYSTEM = """
Your custom system prompt here...
"""

# Text summarization prompt
TEXT_SUMMARIZE_SYSTEM = """
Your custom system prompt here...
"""

Configuring Whisper Model

Edit src/tools/media_handler.py:

# Change model size (tiny, base, small, medium, large)
_whisper_model = whisper.load_model("base")  # Default: "base"

πŸ“‹ Requirements

  • Python 3.11+

  • ffmpeg - Audio processing

  • Ollama - LLM runtime (for summarization)

  • yt-dlp - Video/audio download

  • openai-whisper - Speech-to-text

  • torch - PyTorch (for Whisper)

  • aiohttp - Async HTTP client

  • beautifulsoup4 - HTML parsing

  • fastapi - HTTP server framework

  • uvicorn - ASGI server

  • mcp - Model Context Protocol SDK

🌐 Deployment

PlayMCP Registration

  1. Deploy Server: Deploy to cloud hosting (Render, Railway, Fly.io, AWS, GCP, etc.)

  2. Get Server URL: Example: https://your-server.railway.app

  3. Register in PlayMCP: Use URL https://your-server.railway.app/messages

Important: Server URL must be publicly accessible and support HTTPS for production use.

Using with MCP Clients

Amazon Q CLI:

{
  "mcpServers": {
    "link-scan": {
      "command": "python",
      "args": ["run_server.py"],
      "cwd": "/path/to/mcp-link-scan"
    }
  }
}

Other MCP Clients:

{
  "mcpServers": {
    "link-scan": {
      "url": "https://your-server.com/messages"
    }
  }
}

🀝 Contributing

We welcome contributions! Please follow these steps:

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Make your changes

  4. Add tests for new functionality

  5. Ensure all tests pass (pytest)

  6. Commit your changes (git commit -m 'Add amazing feature')

  7. Push to the branch (git push origin feature/amazing-feature)

  8. Open a Pull Request

Development Workflow

# Install in development mode
pip install -e .

# Run tests
pytest

# Format code (if using formatters)
black src/ tests/
isort src/ tests/

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

  • yt-dlp team for the excellent YouTube extraction library

  • OpenAI Whisper team for the speech-to-text model

  • Ollama team for the local LLM runtime

  • MCP team for the Model Context Protocol specification

  • Pydantic team for the data validation library

πŸ“ž Support

πŸ—ΊοΈ Roadmap

  • Batch processing for multiple links

  • Caching layer for improved performance

  • Export functionality (JSON, CSV, etc.)

  • Advanced analytics (sentiment analysis, topic extraction)

  • Support for more video platforms (TikTok, Vimeo, etc.)

  • WebSocket support for real-time updates

  • Integration examples with popular MCP clients

  • Custom prompt templates via API

  • Multi-language support for summaries

  • Video thumbnail extraction

πŸ“ Notes

  • Audio downloads are temporarily stored and automatically cleaned up

  • Whisper model is loaded once and reused for better performance

  • Processing time depends on video length and Whisper model size

  • YouTube videos are processed for first 7 seconds only to reduce processing time

  • All text sources (title, description, subtitles, transcription) are combined for YouTube videos

  • Summaries are limited to 3 sentences maximum

  • For production, consider using GPU for faster Whisper conversion

  • Ollama timeout is set to 5 minute for tool calls

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/chweyun/mcp-link-scan'

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