Skip to main content
Glama
moonie0201
by moonie0201

apify-utils-mcp

Four small utilities behind one MCP server: PDF text, tables and OCR, YouTube thumbnail URLs and files, sports scores and standings, and ATP/WTA tennis.

Each tool is a thin client over a public Apify Actor. Runs are billed by Apify to your own account — see Pricing. This server never proxies a call, never sees your token or your results, and never pays for a run on your behalf.

Install

Requires uv and a free Apify token.

{
  "mcpServers": {
    "apify-utils": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/moonie0201/apify-utils-mcp", "apify-utils-mcp"],
      "env": { "APIFY_TOKEN": "apify_api_..." }
    }
  }
}

Client

Where that JSON goes

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) · %APPDATA%\Claude\claude_desktop_config.json (Windows)

Cursor

~/.cursor/mcp.json, or .cursor/mcp.json in a project

Claude Code

claude mcp add apify-utils --env APIFY_TOKEN=apify_api_... -- uvx --from git+https://github.com/moonie0201/apify-utils-mcp apify-utils-mcp

Related MCP server: PDF Tools MCP Server

Tools

Tool

What it does

Spend cap

Cost

extract_pdf(urls, max_pages, output_mode?, page_range?, max_pages_per_pdf?, include_markdown?, extract_tables?, ocr?, max_ocr_pages_per_pdf?, chunk_size?, chunk_overlap?)

Text, markdown and ruled tables per page, per document, or as RAG chunks with page and character offsets. Optional Tesseract OCR for pages with no text layer.

max_pages

$0.0003/page, $0.003/OCR page

youtube_thumbnails(videos, max_videos, sizes?, image_format?, include_metadata?, save_images?)

Thumbnail URLs (jpg and webp) for video URLs or bare IDs, with per-size availability, bytes and etag from a HEAD probe, plus title and channel. Optionally saves the files to your own key-value store.

max_videos

$0.005/video

sports_scores(leagues, max_items, mode?, date_from?, date_to?, teams?, status?, season?, season_type?, event_ids?, include_odds?, timezone?)

Scores, schedules, standings, team directories and game summaries across 33 leagues.

max_items

$0.002/game · $0.001/standings or team row · $0.004/summary

tennis_scores(max_items, tours?, date_from?, date_to?, player?, status?, timezone?)

ATP and WTA matches with per-set scores, round, seeds, country, court and result text.

max_items

$0.002/match

list_supported_utilities()

Every tool, the Actor behind it, its exact per-event price and its spend-cap argument.

free, no network

Filters (page_range, teams, status, max_pages_per_pdf) are applied before billing, so a narrow query is cheap rather than a big response you post-filter. The spend-cap argument is required on every paid tool — there is no way to start an unbounded run from here.

Pricing

No Actor here charges a start fee, so a run that fails or finds nothing costs nothing.

Tool

Event

Price

Free, always

extract_pdf

page

$0.0003

document summary rows, error rows, pages outside page_range/max_pages_per_pdf, refused downloads

extract_pdf

ocr-page

$0.003

image-only pages when ocr is off (delivered empty with needsOcr)

youtube_thumbnails

video

$0.005

not_found, invalid_input, duplicate, removed, playlist_not_supported, budget_exhausted

sports_scores, tennis_scores

game

$0.002

league_summary and error rows, games dropped by teams/status, off-season windows, unknown leagues or event ids

sports_scores

row

$0.001

sports_scores

summary

$0.004

Worked examples: a 2-page invoice is $0.0006, a 100-page manual $0.03, 20 scanned pages with OCR $0.06, 100 videos $0.50, today's NBA slate of 8 games $0.016, 500 game summaries $2.00.

Billing lands on the Apify account behind your own APIFY_TOKEN. The spend-cap argument is not just documentation: the server turns it into the run's maxTotalChargeUsd, so Apify enforces the dollar ceiling itself and stops the run when it is reached. Because OCR pages draw on the same max_pages budget at ten times the price, max_pages=1000 means $0.30 with ocr off and $3.00 with it on, and the ceiling sent to Apify follows whichever applies. Apify refuses a ceiling below an Actor's own minimum ($0.05 for extract_pdf, $0.10 for the rest), so very small runs ask for that floor — a ceiling, not a charge: a two-page PDF still costs $0.0006.

The run is also started with timeout=290, inside Apify's 300 s synchronous window, so a run can never outlive the call and keep charging in the background.

Sports data: read this first

Unofficial. Not affiliated with, endorsed by or sponsored by ESPN, The Walt Disney Company or any league. Data comes from the unauthenticated JSON feeds that espn.com itself uses; they are undocumented, Disney's Terms of Use for espn.com restrict automated access, and ESPN may change or block access without notice — if that happens the Actor fails the run and charges nothing, and we stop within 48 h of any notice from ESPN or Disney. Scores, schedules and standings are facts; ESPN's articles, video and images are ESPN's copyrighted content and are not included. Odds are one sportsbook's pregame line shown on ESPN, for information only — not for wagering. Team and league names and logos are trademarks of their owners. Removal requests: TAKEDOWN.md — honoured in 48 h.

include_odds defaults to off here, unlike the Actor. Turn it on only if you want the pregame line copied into the row. timezone defaults to UTC and only affects the dateLocal field; feed dates are UTC either way.

Availability. All four Actors are public: acotr_moonie/pdf-text-extractor, acotr_moonie/youtube-thumbnail-downloader, acotr_moonie/espn-sports-scraper and acotr_moonie/tennis-scores-scraper (the two sports listings since 2026-08-28). Every tool was verified end to end against its live Actor.

leagues accepts: nfl, ncaaf, nba, wnba, ncaab, ncaaw, mlb, nhl, mls, nwsl, epl, championship, fa-cup, la-liga, serie-a, bundesliga, ligue-1, eredivisie, primeira-liga, liga-mx, saudi-pro-league, wsl, ucl, uel, uecl, nations-league, world-cup, copa-libertadores, atp, wta, pga, f1, ufc — or any raw ESPN path such as soccer/bra.1, which comes back as a free error row if unknown.

YouTube

Nominative reference only: this reads the public i.ytimg.com thumbnail CDN and YouTube's public oEmbed endpoint. Not affiliated with, endorsed by or sponsored by YouTube or Google; the YouTube name and logo are trademarks of Google LLC. Thumbnails are the copyright of the uploader or their licensors — the tool retrieves them, it does not grant you a licence to republish them.

What it will not do

  • Nothing is inferred. Where a value cannot be determined the field is null.

  • extract_pdf reads PDFs you point it at with a plain GET, no proxy and no login. You are responsible for the hosting site's terms and robots rules. PDFs whose owner disabled text copying are always skipped, with a free error row and no override.

  • Markdown headings and paragraphs are heuristics over font size and line gaps, not a layout model. Table extraction finds tables drawn with ruling lines; borderless tables stay in the text.

  • youtube_thumbnails does not expand playlist or channel URLs, and does not download video.

  • The sports tools carry no news, articles, rosters, injuries, athlete bios, play-by-play or video, and no ITF or Challenger tennis.

Development

uv venv && uv pip install -e ".[dev]"
python -m pytest tests -q       # offline: httpx is monkeypatched, nothing is billed
ruff check . && ruff format --check .
python -m apify_utils_mcp --list-tools

Disclosure

I built this, and the four Actors behind it are paid. The adapter code is open and MIT licensed.

Available Tools

5 tools
extract_pdfA

Extract text, markdown and ruled tables from PDFs at a URL, with optional Tesseract OCR for scanned pages. output_mode 'page' gives one row per page, 'document' one row per PDF with a pages array, 'chunk' gives RAG chunks of chunk_size characters with page and character offsets. page_range ('1-5', '8', '12-') and max_pages_per_pdf keep unwanted pages from ever being charged. Billed to your own Apify account at $0.0003 per delivered page and $0.003 per OCR page; max_pages is the hard spend cap for the whole run (1000 pages = $0.30, or $3.00 if ocr is on — OCR pages spend the same max_pages budget at 10x the price). That ceiling is also sent to Apify as the run's maximum total charge. Document summary rows, error rows and pages outside the range are free.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNo
urlsYes
max_pagesYes
chunk_sizeNo
page_rangeNo
output_modeNopage
chunk_overlapNo
extract_tablesNo
include_markdownNo
max_pages_per_pdfNo
max_ocr_pages_per_pdfNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and meets it: it reveals the two-tier billing model ($0.0003/page, $0.003/OCR page), the hard spend-cap semantics of max_pages with a concrete example (1000 pages = $0.30 or $3.00 with OCR), that the ceiling is forwarded to Apify as the run's maximum charge, and that summary/error/out-of-range rows are free. This is exactly the behavioral context an agent needs before spending money.

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?

Purpose is front-loaded in the first sentence, then modes, cost-protection, and billing follow in logical order. The description is long, but every sentence carries non-obvious information — the pricing paragraph is essential for a paid tool and would be risky to trim. There is zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter paid tool with no annotations, the description covers the high-risk dimensions thoroughly: output shape per mode, page-range formats, the hard spend cap, and what is free vs billed. An output schema exists so return values need not be detailed, and the unmentioned parameters are low-risk booleans or bounded integers with obvious names.

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 compensates. It adds real meaning to the semantically complex parameters: output_mode (return shape per mode), page_range (explicit format examples '1-5', '8', '12-'), max_pages (spend cap), and max_pages_per_pdf (charge avoidance). A few parameters (chunk_overlap, extract_tables, include_markdown, max_ocr_pages_per_pdf) are left to their names and defaults, which are largely self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'Extract text, markdown and ruled tables from PDFs at a URL', plus an optional capability (Tesseract OCR for scanned pages). The scope is unambiguous and naturally differentiates it from the unrelated siblings (youtube_thumbnails, sports_scores, tennis_scores, list_supported_utilities).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides strong contextual guidance: when to enable OCR (scanned pages), how output_mode shapes the result ('page' one row per page, 'chunk' RAG chunks), and when page_range/max_pages_per_pdf apply (avoiding charges for unwanted pages). It stops short of explicit when-not-to-use statements, but no sibling tool competes with PDF extraction, so exclusions are not needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_supported_utilitiesA

List the utilities this server exposes, the Apify Actor behind each, the exact per-event price billed to your own Apify account, which argument is the hard spend cap, and whether the Actor is reachable yet. Also returns the league keys sports_scores accepts. No network, no cost.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'No network, no cost,' which tells the agent this tool has no side effects and will not trigger charges, an important safety property for an agent choosing which tool to invoke. It also clarifies that the tool reports reachability and pricing rather than performing those operations.

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?

The description is two sentences with no filler. The first sentence front-loads the purpose and the full list of returned details; the second adds the league-keys note and the crucial no-cost/no-network guarantee. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a zero-parameter introspection tool with an output schema, so the description only needs to explain what the tool lists and any behavioral caveats. It covers the utilities, actors, pricing, spend cap, reachability, league keys, and the fact that it is free and offline. Nothing needed for correct invocation is missing.

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?

The tool has zero parameters, so there are no parameter semantics for the description to clarify. The baseline of 4 applies because the description successfully explains what the tool does and what it returns, leaving no ambiguity about invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and resource ('utilities this server exposes'), then enumerates exactly what will be returned: the Apify Actor, per-event price, hard spend cap argument, reachability, and league keys. This clearly distinguishes it from the sibling tools, which are the actual utilities being listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's role as a discovery/introspection endpoint clear: it lists server utilities and key details such as cost and reachability. It also notes that league keys for sports_scores are returned here, giving a concrete reason to use this tool. It does not explicitly state when not to use it or compare against alternatives, but the context is strong enough for an agent to infer when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sports_scoresA

Scores, schedules, standings, team directories and game summaries for 33 leagues — NFL, NBA, WNBA, MLB, NHL, NCAA football and basketball, MLS, NWSL, 18 more soccer competitions, ATP and WTA tennis, PGA Tour, Formula 1 and UFC. mode: scoreboard (games by date_from/date_to), schedule (a team's season), standings, teams, or summary (box-score rows for event_ids from an earlier scoreboard run). teams and status filter before billing, so a narrow query is cheap. include_odds is off by default here, unlike the Actor; turn it on for the pregame line. Dates are UTC unless you set timezone, which only affects the dateLocal field. Billed to your own Apify account at $0.002 per game/match/session row, $0.001 per standings or team row and $0.004 per summary row; max_items is the hard spend cap (500 games = $1.00; 500 summary rows = $2.00), and that ceiling is also sent to Apify as the run's maximum total charge. Filtered-out games, off-season windows and error rows are free. Unofficial. Not affiliated with, endorsed by or sponsored by ESPN, The Walt Disney Company or any league. Data comes from the unauthenticated JSON feeds that espn.com itself uses; they are undocumented, Disney's Terms of Use for espn.com restrict automated access, and ESPN may change or block access without notice — if that happens the run fails and charges nothing, and we stop within 48 h of any notice from ESPN or Disney. Scores, schedules and standings are facts; ESPN's articles, video and images are ESPN's copyrighted content and are not included. Odds are one sportsbook's pregame line shown on ESPN, for information only — not for wagering. Team and league names and logos are trademarks of their owners.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoscoreboard
teamsNo
seasonNo
statusNoall
date_toNo
leaguesYes
timezoneNoUTC
date_fromNo
event_idsNo
max_itemsYes
season_typeNo
include_oddsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and excels: it discloses unofficial status, ESPN terms-of-use restrictions, possible feed changes/blocking, failure means no charge, billing row rates, max_items hard spend cap, UTC timezone behavior, odds limitations, and trademark/copyright caveats. This is far beyond what structured annotations would normally provide.

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 dense and front-loaded with the main purpose before billing and legal details, and every clause adds operational value. It is however a single long paragraph; bullet points or short labeled sections would make it easier for an agent to parse, so it is not maximally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-mode tool with 12 parameters, no annotations, and 0% schema coverage, the description covers modes, filters, billing, spending limits, timezone behavior, data source risks, and legal constraints. An output schema exists, so return-value documentation is not the description's job. Nothing essential an agent needs to select and invoke this tool correctly is missing.

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 each mode value, teams/status filtering before billing, include_odds default, date_from/date_to scope, timezone affecting only dateLocal, max_items as a hard cap, and event_ids for summary mode. However, some parameters such as season_type and exact date string formats are left undescribed, preventing a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states specific outputs (scores, schedules, standings, team directories, game summaries) and enumerates 33 leagues with concrete examples, making the tool's scope unmistakable. It also distinguishes itself from the sibling tennis_scores by covering multiple sports and explicitly noting a change in include_odds default versus the Actor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear mode-based usage: scoreboard for date-range games, schedule for a team's season, summary for event_ids from an earlier scoreboard run, and filtering by teams/status before billing. It does not explicitly state when to prefer the sibling tennis_scores, but the league list makes the boundary reasonably inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tennis_scoresA

ATP and WTA tennis: every match on the same ESPN feed — tour events and all four Grand Slams including qualifying — with per-set scores, round, seeds, country, court and the one-line result. Defaults to both tours for today; player is a name substring ('Alcaraz') applied before billing. Dates are UTC unless you set timezone, which only affects the dateLocal field. Same Actor family as sports_scores with tennis defaults; standings and schedule modes return a free notice for tennis. Billed to your own Apify account at $0.002 per delivered match row; max_items is the hard spend cap (100 matches = $0.20), and that ceiling is also sent to Apify as the run's maximum total charge. Filtered-out matches, empty days and error rows are free. Unofficial. Not affiliated with, endorsed by or sponsored by ESPN, The Walt Disney Company or any league. Data comes from the unauthenticated JSON feeds that espn.com itself uses; they are undocumented, Disney's Terms of Use for espn.com restrict automated access, and ESPN may change or block access without notice — if that happens the run fails and charges nothing, and we stop within 48 h of any notice from ESPN or Disney. Scores, schedules and standings are facts; ESPN's articles, video and images are ESPN's copyrighted content and are not included. Odds are one sportsbook's pregame line shown on ESPN, for information only — not for wagering. Team and league names and logos are trademarks of their owners.

ParametersJSON Schema
NameRequiredDescriptionDefault
toursNo
playerNo
statusNoall
date_toNo
timezoneNoUTC
date_fromNo
max_itemsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so extensively. It covers data source reality, billing and max_items as a hard spend cap, free rows, failure behavior if ESPN blocks access, date/time UTC handling, and legal/copyright restrictions. This is far beyond typical descriptions.

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 long, but the length is largely justified by billing, legal, and data-source caveats that are essential for correct use. Core functionality is front-loaded. It loses one point because the dense single-block structure and legal boilerplate could be organized more readably, but no sentence feels wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what data is returned, defaults, filtering semantics, billing implications, failure modes, timezone behavior, and legal constraints. An output schema exists, so return values do not need enumeration. For a tool with billing and legal sensitivity, this is exceptionally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/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 does. It explains that player is a name substring, that dates are UTC unless a timezone is set which only affects dateLocal, that max_items is a billing cap, and that tours default to both. These details add significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as an ATP and WTA tennis match data retriever covering tour events and Grand Slams, with explicit detail about the fields returned such as per-set scores, round, seeds, and court. It distinguishes itself from the sibling sports_scores by positioning itself as the tennis-default version of the same Actor family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: for tennis scores from ESPN feeds, with both tours defaulting to today. It also warns that standings and schedule modes return a free notice for tennis, implying those are not supported. It stops short of explicitly stating 'use sports_scores for non-tennis sports,' but the 'same Actor family' reference provides enough implicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

youtube_thumbnailsA

Resolve YouTube video URLs or bare 11-character video IDs to their thumbnail image URLs, with per-size availability, byte size and etag from a HEAD probe — never guessed. sizes takes 'best', 'all', 'oar' or explicit names (maxresdefault, sddefault, hqdefault, mqdefault, default). save_images stores the picked sizes in the run's key-value store on your own account; turn it off for URLs and metadata only, at the same price. Billed to your own Apify account at $0.005 per delivered video; max_videos is the hard spend cap (100 videos = $0.50), and that ceiling is also sent to Apify as the run's maximum total charge. not_found, invalid_input, playlist_not_supported, duplicate, removed and budget_exhausted rows are free. Nominative reference to YouTube only; not affiliated with or endorsed by YouTube or Google.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizesNo
videosYes
max_videosYes
save_imagesNo
image_formatNojpg
include_metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it excels: it discloses that URLs are derived from a HEAD probe ('never guessed'), that save_images writes to the run's key-value store on the user's account, exact billing per video, the max_videos hard spend cap sent to Apify, and free row types. This is unusually transparent about side effects, costs, and edge cases.

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?

The description is dense but not bloated; every sentence earns its place. The core operation is front-loaded, followed by parameter guidance, pricing/spend cap, free-row behavior, and a legal disclaimer. It is long only because it packs genuinely useful operational and financial details with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-paramter tool with no annotations, the description is remarkably complete: it covers input format, output fields, storage side effect, billing, spend cap, free rows, unsupported playlists, and legal status. The only real gap is the lack of explicit guidance on image_format and include_metadata, though the output schema and self-explanatory names partly fill that gap.

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. It explains the main parameters well: videos (URLs or IDs), sizes (with allowed values), save_images (storage behavior), and max_videos (cost cap). However, image_format and include_metadata are not described, leaving two parameters to rely on schema enum/name inference. Still, the description adds substantial meaning for the most behaviorally significant parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Resolve YouTube video URLs or bare 11-character video IDs to their thumbnail image URLs.' It clearly distinguishes this tool from the unrelated siblings (extract_pdf, sports_scores, tennis_scores, list_supported_utilities) and specifies the exact output artifacts. The scope and function are immediately identifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: when you need thumbnail URLs/metadata, how to choose sizes, and when to toggle save_images off for URL/metadata-only results. It does not explicitly name an alternative tool or state 'when not to use this tool,' but the context is strong enough for an agent to select it appropriately among the listed siblings.

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. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observedextract_pdf
    • First observedlist_supported_utilities
    • First observedsports_scores
    • First observedtennis_scores
    • First observedyoutube_thumbnails

TDQS

A4.4/5.0
Disambiguation3/5

Most tools are distinct, but sports_scores and tennis_scores both consume the same ESPN feed and overlap on tennis coverage, creating real selection ambiguity. The descriptions clarify the difference, but an agent could reasonably choose either tool for a tennis query.

Naming Consistency3/5

Names are all snake_case and readable, but conventions are mixed: extract_pdf and list_supported_utilities are verb_noun, while youtube_thumbnails, sports_scores, and tennis_scores are noun phrases. There is no consistent verb_noun pattern across the set.

Tool Count4/5

Five tools is a reasonable size for a utility aggregator, and most tools cover substantial functionality. The sports/tennis duplication makes one tool feel slightly redundant, but the count is not bloated or thin.

Completeness5/5

Relative to the advertised utilities, the tool surface is well covered: PDF extraction has multiple output modes and OCR, YouTube thumbnails cover sizes and storage, and sports data includes scoreboards, schedules, standings, teams, and summaries. list_supported_utilities prevents dead ends by exposing league keys, pricing, and reachability.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Swiss-army-knife utility MCP server for AI agents. 18 tools for JSON validation/formatting, base64 encode/decode, hash generation, UUID generation, URL parsing, regex testing, markdown↔HTML conversion, text stats, slug generation, datetime conversion, cron parsing, text diffing, CSV↔JSON conversion, and JWT decoding. Zero API Key required
    5
    -
  • A
    license
    A
    quality
    D
    maintenance
    A comprehensive tool server for reading, merging, and extracting content from PDF files via local paths or direct URLs. It enables metadata retrieval, regex searching, and page-specific text extraction with built-in caching and workspace-restricted security.
    9
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Multi-tool MCP server for AI agents with 29 tools across web scraping, SEO analysis, screenshot and PDF generation, domain intelligence, content extraction, multi-chain EVM blockchain queries, and security toolkit. Free tier available with no auth required.
    22
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/moonie0201/apify-utils-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server