YouTube Video Search (by Keyword)
omnial/youtube-web-search-video
Given a search keyword, returns a page of matching YouTube videos with title, uploading channel name, view count, duration, publish time, and thumbnail sizes, plus a continuation token to fetch the next page. When the search finds nothing, returns a `message` ("Query[...] is not valid") instead of a videos list, without error.
Price
Up to $0.00205 per call; you pay what the call used
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.
Data source
Data from YouTube.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/youtube-web-search-video" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/youtube-web-search-video" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/youtube-web-search-video", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/youtube-web-search-video", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.00205 |
- Updated
- Oct 25, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"search_query"
],
"properties": {
"order_by": {
"type": "string",
"default": "this_month",
"description": "Order by"
},
"country_code": {
"type": "string",
"default": "us",
"description": "Country code"
},
"search_query": {
"type": "string",
"examples": [
"Minecraft"
],
"description": "Search keyword"
},
"language_code": {
"type": "string",
"default": "en",
"description": "Language code"
},
"continuation_token": {
"type": "string",
"description": "Pagination token"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"lang": {
"type": "string",
"description": "Language code used for the search, e.g. 'en'."
},
"query": {
"type": "string",
"description": "The search keyword this result set is for."
},
"videos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Typically 'NORMAL'; other values (e.g. shorts, live) are not documented."
},
"title": {
"type": "string"
},
"author": {
"type": "string",
"description": "The uploading channel's public display name."
},
"category": {
"type": [
"string",
"null"
],
"description": "Usually `null`; the shape of a populated value is not documented."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Usually empty."
},
"video_id": {
"type": "string",
"description": "The YouTube video id, e.g. 'JCy5R45b7k0'."
},
"channel_id": {
"type": "string",
"description": "The uploading channel's YouTube channel id."
},
"thumbnails": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "Withheld -- the thumbnail image address is stripped before delivery; only whether a thumbnail exists at that size is observable."
},
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": true
},
"description": "The same video thumbnail at multiple resolutions."
},
"description": {
"type": "string",
"description": "The video's own description snippet."
},
"video_length": {
"type": "string",
"description": "e.g. '19:53', '2:12:13'."
},
"published_time": {
"type": "string",
"description": "Relative, e.g. '8 days ago', '2 weeks ago' -- not an absolute timestamp."
},
"is_live_content": {
"type": [
"boolean",
"null"
],
"description": "Usually `null` -- whether this is ever populated true/false (for a livestream) is not documented."
},
"number_of_views": {
"type": "number"
}
},
"additionalProperties": true
},
"description": "One entry per matching video on this page."
},
"country": {
"type": "string",
"description": "Country code used for the search, e.g. 'US'."
},
"message": {
"type": "string",
"description": "A short status message from the search endpoint, present instead of `videos` when a search matches nothing. Observed value: \"Query[...] is not valid\"-style text for a query string the endpoint could not match against anything -- treat its presence as 'no results', not as a thrown error (the call itself still completes normally)."
},
"timezone": {
"type": "string",
"description": "IANA timezone the result timestamps are interpreted in, e.g. 'America/New_York'."
},
"number_of_videos": {
"type": "number",
"description": "Count of videos included in this page of results."
},
"estimated_results": {
"type": "number",
"description": "The search engine's own estimated total match count across all pages."
},
"continuation_token": {
"type": "string",
"description": "Opaque pagination token. Pass it back as this tool's `continuation_token` input to fetch the next page of results."
}
},
"description": "The search-result document. When the search query matches no videos, there is no `videos` field and only a `message` field is present.",
"additionalProperties": true
}