电影音乐会活动搜索MCP服务

面向AI助手的MCP服务,用于搜索和查看全球电影音乐会的实时演出活动、详情及购票链接。

  • by aaldere1
  • TypeScript
  • 混合部署
  • 3 星标
  • 更新于
在 GitHub 查看 aaldere1/cineconcerts-mcp

使用说明

🎬🎻 CineConcerts MCP Server

Real-time film-concert events, piped straight into your AI.

Ask Claude, ChatGPT, Cursor, or any MCP client where Harry Potter, The Godfather, or Gladiator are playing live with a full symphony orchestra — and get back real shows, real dates, real ticket links.

https://cineconcerts.digital/mcp/

No API key. No signup. No config file required. Just connect and start asking.

Both …/mcp and …/mcp/ work, with or without the trailing slash. The server answers plain JSON or SSE depending on what your client asks for, so no special Accept or Content-Type handling is needed on your side.


⚡ Connect in 30 seconds

If you use Claude Code, that's one command:

claude mcp add --transport http cineconcerts https://cineconcerts.digital/mcp/

Then just ask:

"What Harry Potter concerts are coming up near London?"

Using a different client? Jump to Setup below — every major one is covered.


🎥 See it in action

You ask:

Find Harry Potter concerts

Claude calls search_shows("Harry Potter") and gets back:

Found 20 show(s) matching "Harry Potter":

**Harry Potter and the Prisoner of Azkaban™ In Concert**
Date: 03/06/2026 to 03/07/2026
Location: Popejoy Hall, Albuquerque, New Mexico, United States
Show Code: HP3
Poster: https://cineconcerts.com/posters/hp3.jpg
Tickets: https://tickets.example.com/hp3

---

**Harry Potter and the Goblet of Fire™ In Concert**
Date: 04/18/2026
Location: Benaroya Hall, Seattle, Washington, United States
Show Code: HP4
Tickets: https://tickets.example.com/hp4

...

Your assistant turns that into a clean, conversational answer — with live links to buy tickets. No copy-pasting from a website, no out-of-date scraping.


📋 Table of contents


💡 Why use it

🔴 Live data Pulls from the same event database that powers cineconcerts.com, the mobile app, and the interactive concert map. Always current.
🌍 Search how humans think By film, by city, by venue, or "anything near me." Natural-language geocoding handles the rest.
🔓 Zero friction No key, no auth, no account. Add one URL and go.
🧰 Works everywhere One server, every MCP client — Claude, ChatGPT, Cursor, VS Code, and more.
🪶 Read-only & safe Every tool is read-only. Nothing it touches can change your data or the catalog.

🔌 Setup

One URL, every client: https://cineconcerts.digital/mcp/

Claude Code

Add it to the current project:

claude mcp add --transport http cineconcerts https://cineconcerts.digital/mcp/

Make it available across all your projects:

claude mcp add --transport http --scope user cineconcerts https://cineconcerts.digital/mcp/

Share it with your team — commit a .mcp.json to the project root:

{
  "mcpServers": {
    "cineconcerts": {
      "type": "http",
      "url": "https://cineconcerts.digital/mcp/"
    }
  }
}

Verify with claude mcp list, or type /mcp inside Claude Code.

Codex CLI
codex mcp add cineconcerts --url https://cineconcerts.digital/mcp/

Or edit ~/.codex/config.toml directly:

[mcp_servers.cineconcerts]
url = "https://cineconcerts.digital/mcp/"

Verify with codex mcp list.

On older Codex builds, URL-based servers are ignored unless the RMCP client is enabled. If codex mcp list doesn't show it, upgrade Codex or add experimental_use_rmcp_client = true at the top level of ~/.codex/config.toml.

Claude Desktop
  1. Open Settings (gear icon) → Connectors
  2. Click Add custom connector
  3. Paste the URL: https://cineconcerts.digital/mcp/
  4. Click Add

Requires a Pro, Max, Team, or Enterprise plan.

ChatGPT
  1. Settings → Apps & Connectors → Advanced settings → toggle Developer Mode on
  2. Settings → Connectors → Create
  3. Enter:
    • Name: CineConcerts
    • URL: https://cineconcerts.digital/mcp/
  4. Click Create
  5. In any chat: + → More → select CineConcerts

Requires a Pro, Team, Enterprise, or Edu plan.

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "cineconcerts": {
      "url": "https://cineconcerts.digital/mcp/"
    }
  }
}

Or open Cursor Settings (Cmd+,) and search MCP to add it via the UI.

VS Code + GitHub Copilot

Requires VS Code 1.99+ with the GitHub Copilot extension. Add to .vscode/mcp.json:

{
  "servers": {
    "cineconcerts": {
      "type": "http",
      "url": "https://cineconcerts.digital/mcp/"
    }
  }
}

⚠️ VS Code uses "servers" as the top-level key (not "mcpServers"). Tools show up in Copilot's Agent mode.

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "cineconcerts": {
      "serverUrl": "https://cineconcerts.digital/mcp/"
    }
  }
}

⚠️ Windsurf uses "serverUrl" (not "url").

Cline

Open Cline's MCP panel → Remote Servers → Edit Configuration:

{
  "mcpServers": {
    "cineconcerts": {
      "type": "streamableHttp",
      "url": "https://cineconcerts.digital/mcp/",
      "disabled": false
    }
  }
}

⚠️ Cline needs "type": "streamableHttp" — camelCase, no hyphen. Leave it out and Cline falls back to the legacy SSE transport, which this server does not speak.

Continue

Add to .continue/config.yaml:

mcpServers:
  - name: cineconcerts
    type: streamable-http
    url: https://cineconcerts.digital/mcp/

Tools are available in Continue's Agent mode.


🛠 Tools

Five read-only tools. Your AI picks the right one automatically from your question.

Tool What it does Parameters
🔍 search_shows Search by keyword — film title, city, venue, anything query (string, required)
📍 find_nearby_shows Find shows near a place — city, address, or landmark location (string, required), radius_km (number, default 500)
📅 list_upcoming_shows Browse everything coming up limit (number, default 20, max 60)
🎟 get_show_details Full details for one show by its code show_code (string, required)
🖼 render_upcoming_shows_widget Render already-fetched shows as a visual widget shows (array, required), title (string), source (string)

Example prompts

🔍  "Find Harry Potter concerts"
🔍  "Any shows in Prague?"
🔍  "Gladiator in concert"

📍  "Shows near New York"
📍  "Concerts within 200km of London"
📍  "Anything near Tokyo Tower?"

📅  "What CineConcerts shows are coming up?"
📅  "List the next 10 events"

🎟  "Get details for show HP3"
🎟  "Tell me about HP8"

render_upcoming_shows_widget

Renders the shows you just fetched as a visual card list, for clients that support MCP UI resources (such as the ChatGPT Apps SDK).

🖼  "Render the search results as a widget"
🖼  "Show these nearby events in UI"

It deliberately does not fetch anything itself — data and presentation stay separate. Two steps:

  1. Call a data tool (search_shows, find_nearby_shows, or list_upcoming_shows).
  2. Pass that tool's structuredContent.shows straight into render_upcoming_shows_widget.

All four data tools now return structuredContent alongside their text, so the hand-off needs no reshaping.


📦 What you get back

Every event comes back with:

Field Example
Title Harry Potter and the Prisoner of Azkaban™ In Concert
Date 03/06/2026 to 03/07/2026
Location Popejoy Hall, Albuquerque, New Mexico, United States
Show Code HP3
Poster Link to the event poster image
Tickets Direct link to buy tickets

get_show_details returns the complete record — adding pre-sale status, "coming soon" flags, country flag, property, and any other field on the event.


🚦 Rate limits

Generous limits keep the service fast and free for everyone. Normal usage — even a long, query-heavy conversation — will never come close.

Limit Value
Requests / minute 240 per IP
Concurrent sessions 500
Idle session timeout 30 minutes

Standard RateLimit headers (draft-7) are included on every response, so well-behaved clients can self-pace.


🩺 Troubleshooting

The server is deliberately forgiving — it accepts any Accept header, any Content-Type, either URL form, and hands back a session even if your client still has a stale one cached. If something still isn't working:

1. Check the server is up

curl https://cineconcerts.digital/mcp/health

You should get {"status":"ok", ...} and a list of 5 tools. If you don't, it's us — not you.

2. Do a full handshake by hand

curl -sD - https://cineconcerts.digital/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"x","version":"1"}}}'

A working server replies 200 with an mcp-session-id header.

3. Still failed_to_load or 0 tools?

Almost always the client config, not the connection. Check the snippet for your client above — key names differ (url vs serverUrl, mcpServers vs servers) and a couple of clients need an explicit transport type or they quietly fall back to the wrong protocol. If it's still failing, open an issue with your client name and version.

Contributors can replay every known client request shape against any deployment:

./scripts/client-matrix.sh https://cineconcerts.digital/mcp   # 17 request shapes
node scripts/verify-client.mjs https://cineconcerts.digital/mcp   # real MCP SDK client

⚙️ How it works

  Your AI client                CineConcerts MCP                   Data sources
 ┌──────────────┐   MCP /    ┌───────────────────┐   query    ┌────────────────────┐
 │ Claude /     │  Streamable│  Express server    │──────────► │ Live event catalog │
 │ ChatGPT /    │◄──HTTP────►│  5 read-only tools │            │                    │
 │ Cursor / ... │  JSON-RPC  │  rate-limited      │──────────► │ Geocoding          │
 └──────────────┘            └───────────────────┘            └────────────────────┘
  • Transport: Streamable HTTP — the modern MCP transport, with proper session management and SSE notifications.
  • Stack: TypeScript · Express · the official MCP SDK · express-rate-limit.
  • Event data: live event catalog — the same public catalog that powers cineconcerts.com, the mobile app, and the interactive map.
  • Location search: OpenStreetMap geocoding turns "near Tokyo Tower" into coordinates, then does a radius search.
  • Health check: GET /health returns server status, version, active session count, and the tool list — handy for uptime monitoring.

All data is public and read-only. The server is just an AI-friendly window onto it.


🎞 Events catalog

Live event catalog of currently on-sale events (typically dozens at a time) — the same public catalog that powers cineconcerts.com. Full company history spans 4,379 performances across 491 venues in 55 countries (as of Sep 16, 2026).

Active and historical titles include:

  • 🦉 Harry Potter — all 8 films in concert (Philosopher's/Sorcerer's Stone, Chamber of Secrets, Prisoner of Azkaban, Goblet of Fire, Order of the Phoenix, Half-Blood Prince, Deathly Hallows – Part 1, Deathly Hallows – Part 2)
  • 🎄 Elf in Concert
  • ⚔️ Gladiator in Concert
  • 🎩 The Godfather Live
  • 🐉 DreamWorks Animation in Concert
  • 🚂 The Polar Express in Concert
  • 🔔 It's a Wonderful Life in Concert
  • 💎 Breakfast at Tiffany's in Concert
  • 🏈 Rudy in Concert
  • 🖖 Star Trek: The Ultimate Voyage (historical)
  • …and more (including historical titles such as The Da Vinci Code and The Passion of the Christ)

❓ FAQ

Do I need an API key or account? No. The server is open and unauthenticated — just add the URL.

Is it free? Yes. It's rate-limited to keep infrastructure costs sane, but there's no charge.

Can it book tickets or change anything? No. Every tool is strictly read-only. It returns ticket links you can follow yourself.

My client isn't listed — will it still work? Almost certainly. Any client that speaks MCP over Streamable HTTP can connect using the URL above.

How fresh is the data? Live. It queries the production event index directly, so what you see is what's on sale right now.

Why am I getting rate-limited? You're sending more than 240 requests/minute from one IP. Back off briefly — the RateLimit response headers tell you exactly when to retry.


📄 License

MIT — free to use, fork, and build on.


🎼 About CineConcerts

CineConcerts produces film-concert experiences worldwide: a full symphony orchestra performs a film's entire score, live to picture, on a giant screen. As of Sep 16, 2026, company records show 4,379+ performances across 491 venues in 55 countries, with 6.6M+ tickets sold (where reported in performance history).

All-time (as of Sep 16, 2026)
Performances 4,379
Venues 491
Countries 55
Tickets sold 6,640,879 of 9,087,863 seats (~73.1% on performances with sales reported)

1,049 performances carry no sales figure and are excluded from sold totals. The upcoming book on the same date: 117 engagements · 315 performances; ~438,786 seats capacity where sales reported (36.1% sold on those).

Find your next show. Just ask your AI.

Tests

npm test           # everything — spawns the server, needs .env for the tool checks
npm run test:unit  # pure logic only, no credentials, instant

25 tests:

  • tests/unit.test.ts — show mapping, and the widget's URL guard. The guard runs in the browser, so it is lifted out of the widget source and exercised directly: shows[] arrives from the model rather than straight from the live event catalog, so a manipulated tool call could otherwise put javascript: on an href.
  • tests/http.test.ts — the built server in a spawned process over real HTTP. All three MCP paths (/, /mcp, /mcp/), the client-quirk header matrix, every tool returning real data, and a check that the README documents every registered tool.

A trailing slash once 301'd here, turning a client's POST into a GET, and it presented as failed_to_load, 0 tools. That is why routing is asserted rather than assumed.