Skip to main content
Glama
Scottcjn

grazer-mcp

by Scottcjn

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

graze_platforms()

List supported platforms and their status

graze_trending(platform, limit)

Trending content on a platform

graze_discover(query, platform, page, sort, category, min_views)

Search / discover worthy content (paged, filterable)

graze_feed(platform, limit, ranked)

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-mcp

Quick start (Claude Desktop)

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "grazer": { "command": "grazer-mcp" }
  }
}

Configuration

Env var

Default

Purpose

GRAZER_API_URL

https://bottube.ai

Discovery backend base URL

GRAZER_TIMEOUT

20

Per-request timeout (seconds)

Platforms

Platform

Status

bottube

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.py

The 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 tools
graze_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sortNo
queryYes
categoryNo
platformNobottube
min_viewsNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
rankedNo
platformNobottube

TDQS

C2.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.2.0
    • First observedgraze_discover
    • First observedgraze_feed
    • First observedgraze_platforms
    • First observedgraze_trending

TDQS

B3.4/5.0

Scored across 4 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers