Leporello

by philphilphil

Not rated
GitHub

About

Remote MCP for Opera & Classical Music Event Schedules

Details

Author
philphilphil
Categories
Web Scraping, Other, Media

Setup

Install Leporello in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/philphilphil/leporello-mcp

Follow the installation instructions in the repository README, then restart your MCP client.

Opera & classical music event schedule remote MCP.
Also available as a web app atleporello.app.

Missing your favorite venue? PRs welcome! ReadCONTRIBUTING.mdfor step-by-step instructions on adding a new venue scraper.

Venue-specific scrapers fetch schedule pages (HTML or JSON) from opera houses and concert halls, parse them with Cheerio, and store the events in a local SQLite database. A node-cron scheduler re-scrapes all venues daily at 03:00 UTC, replacing each venue's events with the latest data. The server exposes the data via aModel Context Protocol(MCP) endpoint, so any MCP-compatible AI assistant can query upcoming performances. A static Astro frontend reads the same database at build time and serves a filterable event listing atleporello.app.

The hosted instance atleporello.applogs aggregate MCP usage (tool name, arguments, response time, User-Agent, and a daily-rotating salted hash of the client IP) so I can see what's working and what isn't. No raw IPs, no personal data, no auth tokens.

npm install npm test # run scraper tests npm run scrape # one-off scrape all venues #or npm run scrape -- wiener-staatsoper # scrape a single venue npm run dev # start server on http://localhost:3000 # or npm run dev:fresh # scrape, then serve

Scrapes daily at 03:00 UTC. Runnpm run scrapeto populate the database on first use.

Two containers:web(HTTP server + MCP + static frontend) andscraper(fetches venue data into SQLite). They share a data volume. The web stack isdocker-compose.yml; the scraper is a one-shot job indocker-compose.scrape.ymlunder its own compose project (leporello-scrape) so its exited container is never counted against the web stack's health. Schedule it with a host cron job.

# Start the web server docker compose up -d # Run all scrapers (one-off, container stops when done) docker compose -f docker-compose.scrape.yml run --rm scraper # Scrape a single venue docker compose -f docker-compose.scrape.yml run --rm scraper node dist/scrape.js wiener-staatsoper # Rebuild the Astro frontend (e.g. after a manual scrape) docker compose exec web node -e " import { execFile } from 'node:child_process'; import { promisify } from 'node:util'; await promisify(execFile)('npm', ['run', 'build', '--prefix', 'web'], { cwd: '/app', timeout: 60000 }); console.log('done'); " # Tail logs docker compose logs -f web

The web container rebuilds the Astro frontend on every start. To run scrapers on a schedule, add a host cron job that scrapes then restarts web:

0 3   * cd /home/phil/docker/lep && docker compose -f docker-compose.scrape.yml build && docker compose -f docker-compose.scrape.yml run --rm scraper && docker compose restart web

一个基于 Model Context Protocol (MCP) 构建的智能电影和电视剧资源搜索工具,支持多源搜索和链接验证。An intelligent movie and TV series resource search tool based on Model Context Protocol (MCP), supporting multi-source search and link verification.

MCP server for Al Jazeera 360 — Connect AI assistants to Al Jazeera's streaming catalog. Search, browse, and retrieve Arabic video content with direct watch links.

Interact with the Bilibili video website, enabling actions like searching for videos, retrieving video information, and accessing user data.

A Model Context Protocol (MCP) server that enables AI applications to search and download audio resources from the Freesound platform via natural language commands.

An MCP server for the Kakuyomu novel posting site, enabling users to search for works, retrieve episode lists, and read content.

A server for downloading and optimizing images from the web.

Opengraph data, web scraping, screenshot features in a handy MCP tool

Trending content from Hacker News, Dev.to, IMDb, podcasts, and Eventbrite

YouTube data MCP server for AI agents to search videos, fetch transcripts, read comments, and inspect channels, playlists, and video details.

Access YouTube video data and transcripts using the YouTube Data API.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.