MCP server
Let your AI assistant find the footage.
Add one address to Claude, ChatGPT, Cursor or your own chatbot, and it can search the TBO Studios library in plain words. Every result comes back with a description, a thumbnail and a link that plays exactly the right scene.
- Claude
- ChatGPT
- Cursor
- VS Code
- Your own chatbot
MCP server address
https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp- library
- What the library covers
- search
- Search travel footage
- Streamable HTTP
- No sign-in
- Read-only
- Any language
Connect
Add it to your assistant.
Each assistant needs the same thing: the address above. Pick yours, and you'll be searching in a minute or two.
Claude Code
- Run this once in a terminal. The tools are there in your next session.
Terminal claude mcp add --transport http tbo-studios https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcpCursor
- Press the button to add the server, or paste the lines below into ~/.cursor/mcp.json.
- Cursor lists the two tools under Settings → MCP once it has connected.
~/.cursor/mcp.json { "mcpServers": { "tbo-studios": { "url": "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp" } } }VS Code
- Press the button to add the server, or save the lines below as .vscode/mcp.json in your project.
- Open the chat in Agent mode, and the tools appear in its tool list.
.vscode/mcp.json { "servers": { "tbo-studios": { "type": "http", "url": "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp" } } }Claude on the web and desktop
- Open Settings, then Connectors, and choose Add custom connector.
- Name it TBO Studios, paste the address and save. No sign-in is needed.
- In a chat, turn the connector on from the tools menu.
ChatGPT
- Open Settings, then Apps, and turn on Developer mode under Advanced settings. It's offered on some plans only.
- Create an app, paste the address, and choose No authentication.
- Pick the app in a chat when you want to search footage.
Any other MCP client
- Add a remote server that uses Streamable HTTP, and give it this address.
- There's no sign-in, header or key to set.
Address https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp
Your own chatbot
Build it into your product.
Most model providers can use an MCP server directly. Give the model the address, and it decides when to search and what to show.
Claude API
Claude connects to the server for you. Name the server once, and switch its tools on with a matching toolset.
TypeScript · @anthropic-ai/sdk import Anthropic from "@anthropic-ai/sdk"; const TBO_MCP = "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp"; const question = "Three short elephant clips from Kenya, with links"; const client = new Anthropic(); const response = await client.beta.messages.create({ model: "claude-opus-5-5", max_tokens: 4096, betas: ["mcp-client-2025-11-20"], mcp_servers: [ { type: "url", url: TBO_MCP, name: "tbo-studios" }, ], tools: [ { type: "mcp_toolset", mcp_server_name: "tbo-studios" }, ], messages: [{ role: "user", content: question }], });OpenAI Responses API
OpenAI's servers call ours. Read-only tools are safe to run without asking for approval each time.
TypeScript · openai import OpenAI from "openai"; const TBO_MCP = "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp"; const question = "Three short elephant clips from Kenya, with links"; const client = new OpenAI(); const response = await client.responses.create({ model: "gpt-5", tools: [{ type: "mcp", server_label: "tbo-studios", server_url: TBO_MCP, require_approval: "never", }], input: question, }); console.log(response.output_text);Gemini, or any model, with the MCP library
Your code connects to the server and hands the tools to the model. This runs where your code runs, so it works with a local address too.
TypeScript · @google/genai + @modelcontextprotocol/sdk import { GoogleGenAI, mcpToTool } from "@google/genai"; import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport, } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const TBO_MCP = "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp"; const question = "Three short elephant clips from Kenya, with links"; const mcp = new Client({ name: "my-chatbot", version: "1.0.0" }); const transport = new StreamableHTTPClientTransport(new URL(TBO_MCP)); await mcp.connect(transport); const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY }); const response = await ai.models.generateContent({ model: "gemini-3.6-flash", contents: question, config: { tools: [mcpToTool(mcp)] }, }); console.log(response.text);Plain HTTP, from any language
Every call is one POST with a small JSON body. There's no session to open first, so a single request is enough.
Terminal · curl curl -s https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "search", "arguments": {"query": "elephants at a waterhole", "limit": 3}}}'
Tools
Two tools, and nothing to configure.
Assistants read these descriptions when they connect, and choose the tool themselves. Both only read, so they're safe to run without asking you each time.
library
What the library covers
Lists the countries, the places with the most footage and the common activities, with how many videos and hours the library holds. Assistants call it when they aren't sure a place is covered.
Takes no input.
search
Search travel footage
Finds footage from a plain description, best match first. It reads places, kinds of shot, time of day, what to leave out and how many results you want from the words themselves.
- querytext, required
- What to find, in any language. “Aerial shots of the Maasai Mara at sunset, no text on screen”.
- limitnumber, optional
- How many results to return, from 1 to 25. Ten if left out.
Results
What a search sends back.
Every answer comes twice: as text the assistant reads and repeats, and as structured data for your code. Each result is a chapter of a video, with the scenes in it that match.
Search: "lions at sunrise"
Understood as: Looking for lions at sunrise. Filters: golden hour.
Found 2 matching chapters. Showing 2, best first.
1. Wildlife safari at Mara Porini Camp
Mara Porini Camp, Narok, Kenya · 50 s · from "MARA PORINI"
Footage showcases a variety of African wildlife including hyenas, wildebeest, warthogs, jackals, vultures, zebras, giraffes, elephants, and lions. Tourists enjoy a game drive in a safari vehicle, spotting and photographing animals across the open savanna at sunset.
Video: https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/video.mp4#t=0,50.1
Thumbnail: https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/thumbs/0015.jpg
Scenes:
- 0:24 to 0:27 (wide): A male lion with a dark mane walks along a rocky riverbank at golden hour, with rushing water and a vehicle roof edge visible.
Video: https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/video.mp4#t=24.2,27.2 · Thumbnail: https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/thumbs/0015.jpg{
"query": "lions at sunrise",
"understoodAs": "Looking for lions at sunrise. Filters: golden hour.",
"status": "found",
"total": 2,
"notices": [],
"results": [
{
"id": "chp_01M75H7ZDRJZZ7H4HG5V9M16RX_000",
"title": "Wildlife safari at Mara Porini Camp",
"url": "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/video.mp4#t=0,50.1",
"description": "Footage showcases a variety of African wildlife…",
"place": "Mara Porini Camp",
"state": "Narok",
"country": "Kenya",
"countryCode": "KE",
"locationMatch": "certain",
"startSec": 0,
"endSec": 50.4,
"durationSec": 50.4,
"thumbnailUrl": "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/thumbs/0015.jpg",
"videoUrl": "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/video.mp4#t=0,50.1",
"sourceVideo": { "id": "ast_01M75H7ZDRJZZ7H4HG5V9M16RX", "name": "MARA PORINI" },
"shareWithoutTextOrLogo": 0.93,
"score": 0.759,
"scenes": [
{
"id": "scn_01M75H7ZDRJZZ7H4HG5V9M16RX_0014",
"description": "A male lion with a dark mane walks along a rocky riverbank at golden hour, with rushing water and a vehicle roof edge visible.",
"startSec": 24.2,
"endSec": 27.5,
"durationSec": 3.3,
"thumbnailUrl": "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/thumbs/0015.jpg",
"videoUrl": "https://tb-2c589b78305542d6a875961451701159.ecs.us-east-1.on.aws/m/ast_01M75H7ZDRJZZ7H4HG5V9M16RX/video.mp4#t=24.2,27.2",
"shotType": "wide",
"timeOfDay": "golden_hour",
"people": null,
"textOrLogoOnScreen": false,
"matchesSearch": true
}
]
}
],
"closest": [],
"closestKind": null
}| title, description | What the chapter shows, written from the footage itself. |
|---|---|
| place, state, country | Where it was filmed, when that's on record. |
| locationMatch | When you named a place: certain, right country with the state unknown, or location unknown. |
| startSec, endSec, durationSec | Where the chapter sits in its source video, and how long it runs. |
| thumbnailUrl | A still from the chapter. |
| videoUrl | A link that plays only this chapter of the 480p preview. |
| sourceVideo | The id and name of the video it comes from. |
| shareWithoutTextOrLogo | How much of the chapter is free of added titles and logos, from 0 to 1. |
| scenes | Up to three scenes that match, each with its own description, times, thumbnail, video link, shot type, time of day and how many people are in it. |
| understoodAs | How the search was read, so the assistant can confirm it with you. |
|---|---|
| status, total | Whether anything matched, and how many chapters did in all. |
| notices | Anything worth passing on, such as a filter that was dropped to find something. |
| closest | Only when nothing matched: the nearest footage the library has. It's never a match, and assistants are told so. |
How the links behave
They play the right moment
A scene link opens the preview at the scene's first second and pauses at its last, in any browser.
They don't expire
Each link asks our server for a fresh copy when it's opened, so a link in an old chat still works next month.
They're previews
Links open the 480p copy of the footage. The original files are never linked.
Chats show them as links
Claude and ChatGPT don't draw pictures from tool results into the chat, so thumbnails arrive as links you can open.
Try asking
Ask the way you'd ask a colleague.
Each of these was tried against the library. Here's what the assistant did.
“Find me three short clips of elephants in Kenya for a reel, with links.”
One search, and three scene links: a herd at sunset in the Mara, two elephants playing in Samburu, and an aerial view of a herd in a riverbed.
“Do you have any footage of Bali?”
The search finds nothing, so the assistant checks the library and tells you which places it does cover.
“Show me a luxury tent interior and a sunset over the savanna.”
Two searches, one for each, with the tents and the sunsets listed separately.
“Aerial shots of the Maasai Mara at sunset, no text on screen”
Read as aerial, golden hour and clean footage in the Maasai Mara, and searched that way.
“kenya mein hathi paani peete hue”
Read as elephants drinking water in Kenya. Any language works.
“Breakfast at Giraffe Manor”
Giraffe Manor is in the library but has no breakfast footage, so it says that and shows the Manor's nearest footage, marked as not a match.
Good to know
Questions, answered.
Do I need an account or a key?
Not today. Anyone who can reach the address can search. Sign-in and keys come later, and connected assistants will be asked to sign in once.
What does the library cover?
Ask your assistant “what does the TBO Studios library cover?”. The library tool answers from the live library, so the list is always current.
How fast is a search?
Usually three to five seconds, because each search is read by AI before it runs. Assistants often run two or three searches for one request.
What happens when nothing matches?
The answer says so plainly. When the library has something close, it's listed separately and marked as not a match, and assistants are told not to present it as one.
Can I get the full-quality files?
Not through these links, which play 480p previews. Licensed downloads come with accounts. Tell us what you need through early access.
Who wrote the descriptions?
AI, from watching the footage. They're usually right about what's in the picture, and they can be wrong about names and places.
Are searches recorded?
Yes. The words of every search are kept so we can see what people look for and what the library is missing. Please don't put personal details in a search.
Building something with travel footage?
Tell us what you're making, and we'll help you get the most out of the library.