grazer-mcp
grazer-mcp
Multi-platform content discovery for AI agents, over the Model Context Protocol (MCP).
Grazer lets an agent graze worthy content across platforms — starting with BoTTube and an extensible set of sources — returning a normalized result shape regardless of backend.
Part of the Elyan Labs agent ecosystem (RustChain, BoTTube,
Beacon). Sibling of rustchain-mcp.
Tools
Tool | What it does |
| List supported platforms and their status |
| Trending content on a platform |
| Search / discover worthy content (paged, filterable) |
| Discovery feed — popularity ranker (with explanation) or newest |
Every tool returns a stable contract: {"ok": true, ...} on success, or a
predictable {"ok": false, "error": {code, message, retryable, source, details}}
on failure — never a silent empty result, so clients treat upstream failures as
verification failures, not zero values.
Related MCP server: bottube-mcp-server
Install
pip install grazer-mcpQuick start (Claude Desktop)
Add to claude_desktop_config.json:
{
"mcpServers": {
"grazer": { "command": "grazer-mcp" }
}
}Configuration
Env var | Default | Purpose |
|
| Discovery backend base URL |
|
| Per-request timeout (seconds) |
Platforms
Platform | Status |
| live |
More sources resolve through the same backend as Grazer grows. Status in
graze_platforms() is kept honest — only live platforms are backed today.
Live BoTTube endpoints (verified): trending → /api/trending, discover → /api/search, feed → /api/v2/feed (ranked) / /api/feed (newest). Video objects are normalized to {id, title, agent, views, likes, category, url, thumbnail, duration_sec, created_at, tags}.
Development
python3 -m pytest -q # or: python3 tests/test_client.pyThe discovery logic lives in grazer_mcp/client.py (pure, network-mocked tests,
no MCP dependency); grazer_mcp/server.py is a thin MCP wrapper over it.
License
MIT — see LICENSE. © 2026 Scott Boudreaux / Elyan Labs LLC.
Available Tools
4 toolsgraze_discoverB
Search/discover worthy content matching query.
platform: see graze_platforms(). page: pagination (1+). Optional filters: sort (e.g. "views", "recent"), category, min_views. Returns normalized items plus total/pages.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| sort | No | ||
| query | Yes | ||
| category | No | ||
| platform | No | bottube | |
| min_views | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the return shape ("normalized items plus total/pages") and pagination ("page: pagination (1+)"), which is genuinely useful, but says nothing about permissions, rate limits, or whether the call is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the remaining parameter notes are terse with zero filler. The telegraphic style is efficient though slightly clipped at points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema and no annotations, the description covers the essentials: purpose, platform lookup, pagination, filter names, and return contents. It stops short of explaining what "worthy/normalized" content means, valid sort or category vocabularies beyond one example, or any safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it explains page (1+), points platform at graze_platforms(), gives sort examples ("views", "recent"), and names category and min_views. It still leaves min_views and category semantics to inference, but the coverage is far better than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb phrase "Search/discover worthy content matching `query`" states a concrete action and resource, so the tool's function is unambiguous. However, it gives no differentiation from siblings graze_trending or graze_feed, leaving the agent to guess which discovery surface applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that platform values come from graze_platforms(), which is a useful prerequisite, but it never states when to choose graze_discover over graze_trending or graze_feed. There are no exclusions or selection conditions, only parameter-level hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graze_feedC
Discovery feed. ranked=True -> popularity ranker (with explanation); ranked=False -> newest. limit 1-50.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| ranked | No | ||
| platform | No | bottube |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that ranked=True uses a popularity ranker that includes an explanation and ranked=False returns newest, plus the limit bound of 1-50. It omits pagination behavior, default ordering, what the 'explanation' contains, and whether any auth is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, delivering the tool's identity first and then the parameter semantics with no filler. It is terse to the point of being fragmentary, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no annotations, no output schema, and 0% schema description coverage, the description should explain the platform parameter and the shape of what comes back. It covers the ranked and limit behavior but leaves a full third of the interface — and the return format — undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does well for two of three parameters — both branches of ranked and the 1-50 range of limit (the schema only shows a default) — but says nothing about the platform parameter or its 'bottube' default, leaving that third parameter fully opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('Discovery feed') and explains its two modes of operation via the ranked flag, which is more than a tautology. However, it never uses a distinct verb and does not differentiate the tool from close siblings like graze_discover or graze_trending, so an agent cannot confidently tell which feed tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives such as graze_discover or graze_trending. The ranked semantics imply a use case (popular vs chronological browsing) but the agent must infer when this feed is preferable to its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graze_platformsB
List the content platforms grazer can discover across, with status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose that status information is included in the output, which is useful context. However, it says nothing about whether this is a read-only listing, any rate limits, or the shape of the status field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the verb and object, no wasted words. Appropriately sized for a no-parameter listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-param listing tool, this is close to adequate. But with no annotations and no output schema, the description should at least clarify what 'status' means or how the list relates to sibling discovery tools. It leaves a small gap an agent might need to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. There are no parameters to describe and the description appropriately doesn't invent any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('content platforms grazer can discover across') with added scope ('with status'). It's clear what the tool returns, though it doesn't differentiate itself from siblings like graze_trending or graze_discover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool versus graze_trending, graze_discover, or graze_feed. The description simply states what it returns without any routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graze_trendingB
Return trending content on a platform. platform: see graze_platforms(); limit 1-50.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| platform | No | bottube |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and no output schema are provided, so the description carries the full burden: it says nothing about return shape, pagination, ordering of trending items, rate limits, or authentication. The only behavioral hint is the implicit read-only nature of 'Return'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with the core verb leading and parameter notes trailing; nothing is wasted. The telegraphic phrasing ('limit 1-50') is efficient but slightly clipped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should say more about what trending content looks like when returned. The parameter guidance is adequate, but the return-value gap and absence of any behavioral context leave it only minimally complete for an agent calling it cold.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to compensate, and it does useful work: it bounds 'limit' to 1-50 (the schema only shows a default of 10) and tells the agent where valid 'platform' values come from via graze_platforms(). It omits defaults and the platform string format, so it is not fully complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Return trending content') with a scoping qualifier ('on a platform'), so an agent can tell it fetches trending items rather than a feed or discovery results. It stops short of naming the sibling tools (graze_feed, graze_discover) to sharpen the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the word 'trending'; there is no explicit statement of when to pick this over graze_feed or graze_discover. The 'see graze_platforms()' pointer is a parameter hint, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.2.0- First observed
graze_discover - First observed
graze_feed - First observed
graze_platforms - First observed
graze_trending
TDQS
Scored across 4 tools
graze_trending and graze_feed can overlap, since both surface ranked or popular content, but trending is platform-scoped while feed is a general discovery stream with a ranked/newest toggle. graze_discover is clearly query-based, and graze_platforms is distinct. The descriptions help distinguish them, though an agent might still hesitate between trending and feed.
All tools use the same graze_ prefix followed by a clearly descriptive noun or noun phrase in snake_case. The pattern is predictable throughout, with no mixing of conventions.
Four tools is a reasonable, focused set for a content discovery server, covering platforms, trending, search, and a feed. It is slightly lean, but each tool has a distinct role and none appears redundant.
The core discovery workflows are covered: listing platforms, browsing trending content, searching by query, and fetching a ranked or newest feed. Minor gaps exist, such as no direct tool to retrieve a specific content item by ID or to inspect detailed platform-level metrics.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
Agents-first viral-hook engine: generate, score, and remix short-form hooks over MCP.
Social network for AI builders: agents post, reply, search, remix and compose in styles over MCP.
Agent-to-agent referral network. Discover, recommend, and refer users between AI agents via MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for extracting structured intelligence from YouTube channels and videos — transcripts, topics, and competitive signals for AI-powered research workflows.1599 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server for the BoTTube AI Agent Video Platform. Provides tools to browse, search, upload videos, and interact with comments and votes.-
- AlicenseNot gradedqualityBmaintenanceViral-content intelligence for AI agents — 7 read-only MCP tools for TikTok/YouTube hook scoring, virality prediction, trend analysis, and viral template search, with evidence-layer scoring.MIT
- AlicenseNot gradedqualityBmaintenanceBrings social media analytics and content intelligence into any MCP-compatible AI agent, enabling analysis of your own videos, competitor research, and creator discovery via a hosted OAuth-authenticated server.10MIT