apify-utils
apify-utils-mcp
Vier kleine Hilfsprogramme hinter einem MCP-Server: PDF-Text, Tabellen und OCR, YouTube-Thumbnail-URLs und -Dateien, Spielergebnisse und Tabellenstände und ATP/WTA-Tennis.
Jedes Tool ist ein dünner Client für einen öffentlichen Apify-Actor. Ausführungen werden von Apify Ihrem eigenen Konto in Rechnung gestellt – siehe Preise. Dieser Server leitet nie einen Aufruf weiter, sieht nie Ihr Token oder Ihre Ergebnisse und bezahlt nie eine Ausführung in Ihrem Namen.
Installation
Erfordert uv und ein kostenloses 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 | Wohin diese JSON-Datei gehört |
Claude Desktop |
|
Cursor |
|
Claude Code |
|
Related MCP server: ParseJet - Universal File & URL Parser
Tools
Tool | Was es tut | Ausgabenobergrenze | Kosten |
| Text, Markdown und linierte Tabellen pro Seite, pro Dokument oder als RAG-Chunks mit Seiten- und Zeichen-Offsets. Optionale Tesseract-OCR für Seiten ohne Textebene. |
| $0.0003/Seite, $0.003/OCR-Seite |
| Thumbnail-URLs (jpg und webp) für Video-URLs oder reine IDs, mit Verfügbarkeit pro Größe, Bytes und etag aus einem HEAD-Aufruf, sowie Titel und Kanal. Speichert optional die Dateien in Ihren eigenen Key-Value-Store. |
| $0.005/Video |
| Ergebnisse, Spielpläne, Tabellenstände, Teamverzeichnisse und Spielzusammenfassungen aus 33 Ligen. |
| $0.002/Spiel · $0.001/Tabellen- oder Teamzeile · $0.004/Zusammenfassung |
| ATP- und WTA-Spiele mit Ergebnissen pro Satz, Runde, Setzposition, Land, Platz und Ergebnistext. |
| $0.002/Spiel |
| Jedes Tool, der dahinterstehende Actor, sein genauer Preis pro Ereignis und sein Ausgabenobergrenzen-Argument. | — | kostenlos, ohne Netzwerk |
Filter (page_range, teams, status, max_pages_per_pdf) werden vor der Abrechnung angewendet, sodass eine enge Abfrage günstig ist, anstatt eine große Antwort zu erhalten, die Sie nachträglich filtern. Das Ausgabenobergrenzen-Argument ist bei jedem kostenpflichtigen Tool erforderlich — es gibt keine Möglichkeit, von hier aus eine unbegrenzte Ausführung zu starten.
Preise
Keiner der Actors erhebt eine Startgebühr, sodass eine Ausführung, die fehlschlägt oder nichts findet, nichts kostet.
Tool | Ereignis | Preis | Immer kostenlos |
| Seite | $0.0003 | Dokument-Zusammenfassungszeilen, Fehlerzeilen, Seiten außerhalb von |
| OCR-Seite | $0.003 | reine Bildseiten, wenn |
| Video | $0.005 |
|
| Spiel | $0.002 |
|
| Zeile | $0.001 | — |
| Zusammenfassung | $0.004 | — |
Rechenbeispiele: eine 2-seitige Rechnung kostet $0.0006, ein 100-seitiges Handbuch $0.03, 20 gescannte Seiten mit OCR $0.06, 100 Videos $0.50, das heutige NBA-Programm mit 8 Spielen $0.016, 500 Spielzusammenfassungen $2.00.
Die Abrechnung erfolgt auf dem Apify-Konto, das zu Ihrem eigenen APIFY_TOKEN gehört. Das Ausgabenobergrenzen-Argument ist nicht nur Dokumentation: Der Server wandelt es in maxTotalChargeUsd der Ausführung um, sodass Apify die Dollar-Obergrenze selbst durchsetzt und die Ausführung stoppt, sobald sie erreicht ist. Da OCR-Seiten auf dasselbe max_pages-Budget zum zehnfachen Preis zugreifen, bedeutet max_pages=1000 $0.30 bei deaktiviertem ocr und $3.00 bei aktiviertem; die an Apify gesendete Obergrenze richtet sich nach dem jeweils zutreffenden Fall. Apify lehnt eine Obergrenze unterhalb des eigenen Minimums eines Actors ab ($0.05 für extract_pdf, $0.10 für die übrigen). Daher verlangen sehr kleine Ausführungen diesen Mindestbetrag — eine Obergrenze, keine Gebühr: Ein 2-seitiges PDF kostet weiterhin $0.0006.
Die Ausführung wird außerdem mit timeout=290 innerhalb von Apifys synchronem 300-Sekunden-Fenster gestartet, sodass eine Ausführung den Aufruf nie überleben und im Hintergrund weiter Kosten verursachen kann.
Sportdaten: zuerst lesen
Inoffiziell. Nicht mit ESPN, The Walt Disney Company oder einer Liga verbunden, von diesen unterstützt oder gesponsert. Die Daten stammen aus den unauthentifizierten JSON-Feeds, die espn.com selbst verwendet; sie sind undokumentiert, Disneys Nutzungsbedingungen für espn.com schränken automatisierten Zugriff ein, und ESPN kann den Zugriff ohne Vorankündigung ändern oder blockieren — falls das passiert, bricht der Actor die Ausführung ab und verrechnet nichts, und wir stoppen innerhalb von 48 h nach jeder Mitteilung von ESPN oder Disney. Ergebnisse, Spielpläne und Tabellenstände sind Fakten; ESPN-Artikel, -Videos und -Bilder sind urheberrechtlich geschütztes Material von ESPN und nicht enthalten. Quoten sind die Vorspiel-Linie eines Sportwettenanbieters, die auf ESPN angezeigt wird, nur zur Information — nicht zum Wetten. Team- und Ligabezeichnungen und -logos sind Marken ihrer jeweiligen Inhaber. Entfernungsanfragen: TAKEDOWN.md — werden innerhalb von 48 h bearbeitet.
include_odds ist hier standardmäßig deaktiviert, anders als beim Actor. Aktivieren Sie es nur, wenn Sie die Vorspiel-Linie in die Zeile übernehmen möchten. timezone ist standardmäßig UTC und wirkt sich nur auf das Feld dateLocal aus; Feed-Daten sind in beiden Fällen in UTC.
Verfügbarkeit. Alle vier Actors sind öffentlich: acotr_moonie/pdf-text-extractor, acotr_moonie/youtube-thumbnail-downloader, acotr_moonie/espn-sports-scraper und acotr_moonie/tennis-scores-scraper (die beiden Sport-Auflistungen seit 2026-08-28). Jedes Tool wurde Ende-zu-Ende gegen seinen Live-Actor verifiziert.
leagues akzeptiert: 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 — oder jeden rohen ESPN-Pfad wie soccer/bra.1, der bei Unbekanntheit als kostenlose Fehlerzeile zurückkommt.
YouTube
Nur namentliche Bezugnahme: Dieses Tool liest das öffentliche Thumbnail-CDN i.ytimg.com und den öffentlichen oEmbed-Endpunkt von YouTube. Nicht mit YouTube oder Google verbunden, von diesen unterstützt oder gesponsert; der Name und das Logo von YouTube sind Marken von Google LLC. Thumbnails unterliegen dem Urheberrecht des Uploaders oder seiner Lizenzgeber — das Tool ruft sie ab, gewährt Ihnen jedoch keine Lizenz, sie erneut zu veröffentlichen.
Was es nicht tun wird
Nichts wird abgeleitet. Wo ein Wert nicht bestimmt werden kann, ist das Feld
null.extract_pdfliest PDFs, die Sie mit einem einfachen GET angeben, ohne Proxy und ohne Anmeldung. Sie sind für die Nutzungsbedingungen und Robots-Regeln der Hosting-Website verantwortlich. PDFs, deren Eigentümer das Kopieren von Text deaktiviert hat, werden immer übersprungen – mit einer kostenlosen Fehlerzeile und ohne Überschreibungsmöglichkeit.Markdown-Überschriften und -Absätze sind Heuristiken auf Basis von Schriftgröße und Zeilenabständen, kein Layoutmodell. Die Tabellenextraktion findet mit Linien gezeichnete Tabellen; Tabellen ohne Linien bleiben im Text.
youtube_thumbnailserweitert keine Playlist- oder Kanal-URLs und lädt kein Video herunter.Die Sport-Tools enthalten weder Nachrichten, Artikel, Kader, Verletzungen, Athleten-Biografien, Play-by-Play noch Videos und auch kein ITF- oder Challenger-Tennis.
Entwicklung
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-toolsLinks
Actor-Quellcode, MIT: https://github.com/moonie0201/apify-utils
Datenschutzerklärung: https://github.com/moonie0201/apify-utils/blob/main/PRIVACY.md
Entfernungsrichtlinie: https://github.com/moonie0201/apify-utils/blob/main/TAKEDOWN.md
Offenlegung
Ich habe das gebaut, und die vier dahinterstehenden Actors sind kostenpflichtig. Der Adapter-Code ist offen und MIT-lizenziert.
Available Tools
5 toolsextract_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.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | ||
| urls | Yes | ||
| max_pages | Yes | ||
| chunk_size | No | ||
| page_range | No | ||
| output_mode | No | page | |
| chunk_overlap | No | ||
| extract_tables | No | ||
| include_markdown | No | ||
| max_pages_per_pdf | No | ||
| max_ocr_pages_per_pdf | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | scoreboard | |
| teams | No | ||
| season | No | ||
| status | No | all | |
| date_to | No | ||
| leagues | Yes | ||
| timezone | No | UTC | |
| date_from | No | ||
| event_ids | No | ||
| max_items | Yes | ||
| season_type | No | ||
| include_odds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tours | No | ||
| player | No | ||
| status | No | all | |
| date_to | No | ||
| timezone | No | UTC | |
| date_from | No | ||
| max_items | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sizes | No | ||
| videos | Yes | ||
| max_videos | Yes | ||
| save_images | No | ||
| image_format | No | jpg | |
| include_metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v0.1.0- First observed
extract_pdf - First observed
list_supported_utilities - First observed
sports_scores - First observed
tennis_scores - First observed
youtube_thumbnails
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
Documents to Markdown and PDF, OCR, transcription, TTS, screenshots, domain checks, video frames.
Open-source developer, PDF, image, SEO and security tools over a stateless HTTP MCP server. No key.
PDF from HTML or Markdown, OCR, email validation, image conversion and hosting, QR and barcodes.
Unified 15-tool SEO, SERP, clean Markdown & GEO (LLM citation Share-of-Voice) MCP server.
Related MCP Servers
- FlicenseAqualityBmaintenanceSwiss-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 required185-
- AlicenseBqualityCmaintenanceParse any file or URL into structured text. Extract text from PDF, DOCX, YouTube, web pages, images, and 25+ formats via one API. Tools: parse_url, parse_file, get_youtube_transcript.36 npmMIT
- AlicenseAqualityAmaintenanceFull-stack PDF intelligence MCP server for extracting, manipulating, annotating, converting, validating, and RAG-searching PDFs through a unified tool surface and React workbench.161MIT
- AlicenseAqualityAmaintenanceConverts 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 and10AGPL 3.0