Skip to main content
Glama
apify-utils
by moonie0201

apify-utils-mcp

一个 MCP 服务器背后的四个小工具:PDF 文本、表格和 OCR、YouTube 缩略图 URL 和文件、体育比分和排名,以及 ATP/WTA 网球。

每个工具都是公共 Apify Actor 之上的一个轻量客户端。运行费用由 Apify 计入您自己的账户——请参阅定价。此服务器从不代理调用,从不查看您的令牌或结果,也从不代您支付任何运行费用。

安装

需要 uv 和一个免费的 Apify 令牌。

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

客户端

该 JSON 的放置位置

Claude Desktop

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

Cursor

~/.cursor/mcp.json,或项目中的 .cursor/mcp.json

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: ParseJet - Universal File & URL Parser

工具

工具

功能

支出上限

费用

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?)

按页、按文档提取文本、Markdown 和带框线表格,或作为带有页码和字符偏移量的 RAG 分块。可为没有文本层的页面提供可选的 Tesseract OCR。

max_pages

$0.0003/页,$0.003/OCR 页

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

为视频 URL 或裸 ID 提供缩略图 URL(jpg 和 webp),并通过 HEAD 探测给出每种尺寸的可用性、字节数和 etag,以及标题和频道。可选地将文件保存到您自己的键值存储中。

max_videos

$0.005/视频

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

覆盖 33 个联赛的比分、赛程、排名、球队名录和比赛摘要。

max_items

$0.002/场比赛 · $0.001/排名或球队行 · $0.004/摘要

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

ATP 和 WTA 比赛,包含每盘比分、轮次、种子、国家、场地和结果文本。

max_items

$0.002/场比赛

list_supported_utilities()

每个工具、其背后的 Actor、精确的每事件价格及其支出上限参数。

—

免费,无网络请求

过滤器(page_range、teams、status、max_pages_per_pdf)在计费之前应用,因此范围狭窄的查询很便宜,而不是先返回大响应再自行过滤。每个付费工具都必须提供支出上限参数——这里无法启动无上限的运行。

定价

这里的任何 Actor 都不收取启动费,因此失败或一无所获的运行不产生任何费用。

工具

事件

价格

始终免费

extract_pdf

页

$0.0003

文档摘要行、错误行、page_range/max_pages_per_pdf 之外的页面、被拒绝的下载

extract_pdf

OCR 页

$0.003

当 ocr 关闭时仅含图片的页面(交付为空,并带有 needsOcr 标记)

youtube_thumbnails

视频

$0.005

not_found、invalid_input、duplicate、removed、playlist_not_supported、budget_exhausted

sports_scores, tennis_scores

比赛

$0.002

league_summary 和 error 行、被 teams/status 过滤掉的比赛、休赛期窗口、未知联赛或事件 ID

sports_scores

行

$0.001

—

sports_scores

摘要

$0.004

—

实际示例:一份 2 页发票为 $0.0006,一本 100 页手册为 $0.03,20 页扫描件加 OCR 为 $0.06,100 个视频为 $0.50,今日 NBA 的 8 场比赛为 $0.016,500 场比赛摘要为 $2.00。

计费计入您自己的 APIFY_TOKEN 背后的 Apify 账户。支出上限参数不只是文档说明:服务器会将其转换为运行的 maxTotalChargeUsd,因此 Apify 会自行执行美元上限,并在达到上限时停止运行。由于 OCR 页面以十倍价格消耗同一个 max_pages 预算,max_pages=1000 在 ocr 关闭时意味着 $0.30,开启时意味着 $3.00,发送给 Apify 的上限会随之取对应值。Apify 拒绝低于 Actor 自身最低限额的上限(extract_pdf 为 $0.05,其余为 $0.10),因此非常小的运行会请求该下限——这是一个上限,而非收费:一份 2 页 PDF 仍然只需 $0.0006。

运行还会以 timeout=290 启动,位于 Apify 的 300 秒同步窗口内,因此运行绝不会比调用存活更久并在后台继续计费。

体育数据:请先阅读

非官方。 与 ESPN、华特迪士尼公司或任何联赛均无关联,未获其认可或赞助。数据来自 espn.com 自身使用的未认证 JSON 数据源;这些数据源没有文档,迪士尼关于 espn.com 的使用条款限制自动化访问,ESPN 可能随时更改或阻止访问,恕不另行通知——如果发生这种情况,Actor 会使运行失败且不收取任何费用,我们会在收到 ESPN 或迪士尼任何通知后的 48 小时内停止。比分、赛程和排名是事实;ESPN 的文章、视频和图片是 ESPN 的受版权保护内容,不包含在内。赔率是 ESPN 上显示的某家博彩公司的赛前盘口,仅供参考——不可用于投注。球队和联赛的名称及标志是其所有者的商标。移除请求: TAKEDOWN.md —— 48 小时内处理。

与 Actor 不同,这里的 include_odds 默认关闭。仅当您希望将赛前盘口复制到行中时才将其开启。timezone 默认为 UTC,且仅影响 dateLocal 字段;数据源的日期无论如何都是 UTC。

可用性。 所有四个 Actor 都是公开的:acotr_moonie/pdf-text-extractor、acotr_moonie/youtube-thumbnail-downloader、acotr_moonie/espn-sports-scraper 和 acotr_moonie/tennis-scores-scraper(两个体育列表自 2026-08-28 起)。每个工具都已针对其在线 Actor 进行了端到端验证。

leagues 接受: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——或任何原始 ESPN 路径,例如 soccer/bra.1,如果未知则会作为免费错误行返回。

YouTube

仅作名义引用:本工具读取公共的 i.ytimg.com 缩略图 CDN 和 YouTube 的公共 oEmbed 端点。与 YouTube 或 Google 无关联,未获其认可或赞助;YouTube 名称和标志是 Google LLC 的商标。缩略图的版权归上传者或其许可方所有——本工具仅获取它们,并不授予您重新发布的许可。

它不会做什么

  • 不做任何推断。 无法确定的值,字段为 null。

  • extract_pdf 通过普通 GET 读取您指定的 PDF,无代理、无登录。您需自行遵守托管网站的条款和 robots 规则。所有者禁止复制文本的 PDF 始终会被跳过,并返回免费错误行,且无法覆盖。

  • Markdown 标题和段落是基于字体大小和行间距的启发式判断,而非布局模型。表格提取只能识别带框线绘制的表格;无框线表格会保留在文本中。

  • youtube_thumbnails 不展开播放列表或频道 URL,也不下载视频。

  • 体育工具不包含新闻、文章、球员名单、伤病信息、运动员简介、逐回合文字直播或视频,也不包含 ITF 或挑战者网球。

开发

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

链接

披露

我构建了此项目,其背后的四个 Actor 是付费的。适配器代码是开放的,采用 MIT 许可。

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.

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

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.

NameRequiredDescriptionDefault

No parameters

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

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

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

NameRequiredDescriptionDefault
toursNo
playerNo
statusNoall
date_toNo
timezoneNoUTC
date_fromNo
max_itemsYes

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

NameRequiredDescriptionDefault
sizesNo
videosYes
max_videosYes
save_imagesNo
image_formatNojpg
include_metadataNo

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

  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

Scored across 5 tools

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

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    B
    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
    18
    5
    -
  • A
    license
    A
    quality
    A
    maintenance
    Full-stack PDF intelligence MCP server for extracting, manipulating, annotating, converting, validating, and RAG-searching PDFs through a unified tool surface and React workbench.
    16
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Converts documents to clean Markdown for AI agents from a URL or base64 — no API key, built for remote hosting. Supports PDF (tables preserved as Markdown/CSV/JSON), DOCX, PPTX, XLSX, EPUB, HTML and CSV; scanned PDFs and images go through offline OCR. Includes full-text search, page-range reading, metadata inspection, PDF split/merge and image export, with SSRF-protected fetching, 30 MB limits and
    10
    AGPL 3.0