Skip to main content
Glama
tacps126

webdata-tools-mcp

webdata-tools-mcp

npm CI license: MIT Smithery webdata-tools-mcp MCP server

An MCP server that gives AI agents ten web-data tools: job postings, hiring signals, Google News, Trustpilot and app-store reviews, Reddit mentions, website contacts, German property listings and Shopify products.

Each tool runs a ready-made Apify Actor and returns clean JSON. You pay Apify per result (about $1–3 per 1,000 results); there is no subscription and nothing is sent anywhere except Apify.

Tools

Tool

What it returns

Cost (approx.)

Actor

search_google_news

News articles with the publisher's real URL, date, related coverage

$2 / 1,000 articles

google-news

find_hiring_companies

Which companies are hiring for given roles (buying-intent signal)

1¢ per company with a signal

hiring-signals

get_company_jobs

All open jobs from career pages (Greenhouse, Lever, Ashby, Workday, …)

$1 / 1,000 jobs

jobs-harvester

search_indeed_jobs

Indeed listings in 9 countries

$3 / 1,000 jobs

indeed-jobs

get_trustpilot_reviews

Reviews, TrustScore and company profile

$0.50 / 1,000 reviews

trustpilot-reviews

get_app_reviews

App Store and Google Play reviews

$0.20 / 1,000 reviews

app-reviews

search_reddit

Reddit posts and comments by keyword or subreddit

$1 / 1,000 items

reddit-monitor

find_website_contacts

Emails, phones, socials from websites

$2 / 1,000 sites with contacts

contact-details

search_german_property_listings

Rent/buy listings in Germany (ImmoScout24)

$1 / 1,000 listings

immobilienscout24-scraper

get_shopify_products

Prices, discounts, stock, variants from Shopify stores

$1 / 1,000 products

shopify-products

Every tool also takes an optional extra_input object for any other field the Actor documents. Every result comes back as text and as structured content (tool, count, shown, truncated, items), and every tool is marked read-only, so clients can run it without asking.

More about the tools: https://tacps126.github.io/mcp.html

Related MCP server: Steadyfetch agent tools

Setup

  1. Create a free Apify account and copy your API token from Console → Settings → API & Integrations.

  2. Add the server to your client. The token goes in APIFY_TOKEN.

Claude Desktop / Cursor / Windsurf (mcpServers config):

{
  "mcpServers": {
    "webdata": {
      "command": "npx",
      "args": ["-y", "webdata-tools-mcp"],
      "env": { "APIFY_TOKEN": "<your Apify token>" }
    }
  }
}

Claude Code:

claude mcp add webdata -e APIFY_TOKEN=<your Apify token> -- npx -y webdata-tools-mcp

Requires Node.js 18 or newer.

Try it

  • "Which of these companies are hiring data engineers right now? https://boards.greenhouse.io/stripe, https://jobs.lever.co/spotify"

  • "Show the 1 and 2 star Trustpilot reviews of example.com from the last 30 days and group the complaints."

  • "Find news from the last 7 days about open-source LLM licensing, with the real publisher links."

  • "Get contact emails for these 20 agency websites." (use only for lawful business outreach)

Settings

Environment variable

Default

Meaning

APIFY_TOKEN

required

Your Apify API token

WEBDATA_MAX_CHARGE_USD

0.5

Spend cap per tool call; Apify stops the run when it is reached

WEBDATA_TIMEOUT_SECS

150

How long one call may run (30 to 300)

Cost safety

  • Every call is capped at $0.50 of Apify spend (WEBDATA_MAX_CHARGE_USD changes it). Apify stops the run when the cap is reached.

  • max_items defaults to small numbers (20–100) and has a hard maximum per tool.

  • Long text fields are shortened to 600 characters, and one result is limited to about 60,000 characters, so a call cannot flood the agent's context.

No install: Apify's hosted MCP server

You can also use Apify's own server with these Actors selected, with nothing to install:

{
  "mcpServers": {
    "apify": { "url": "https://mcp.apify.com?tools=tacps126/google-news,tacps126/hiring-signals,tacps126/trustpilot-reviews" }
  }
}

It signs you in with OAuth. The tools take the Actors' raw input fields instead of the simplified arguments above.

Development

npm install
npm test                                  # offline: mapping, errors, size limits, MCP handshake
node scripts/sync-actor-inputs.mjs        # refresh test/fixtures from the published Actors
APIFY_TOKEN=... node scripts/smoke.mjs    # live check, a few cents

test/fixtures/actor-inputs.json lists the input fields of each published Actor; the tests fail if a tool sends a field the Actor does not accept.

Responsible use

The Actors read publicly available pages. You are responsible for following each site's terms and the law that applies to you (GDPR, CAN-SPAM) when you use the data, especially contact details.

License

MIT

Available Tools

10 tools
find_hiring_companiesFind companies hiring for given rolesA
Read-onlyIdempotent

Buying-intent signal: which companies are hiring for the roles you care about, how many roles, how fresh, and seniority/locations. Give target accounts (their jobs-page URLs on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Personio, Teamtailor) and/or job-search phrases to discover companies. Runs the Apify Actor tacps126/hiring-signals on your Apify account (about $0.01 per company with a matching signal; companies without one are free; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
searchesNoJob-search phrases to discover companies you do not know yet, e.g. "head of security".
companiesNoTarget accounts' jobs-page URLs, e.g. "https://boards.greenhouse.io/stripe".
locationsNoKeep roles in these locations.
max_itemsNoMaximum results to return (default 50, max 500). Cost scales with this.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
role_keywordsNoA role counts when its title contains any of these words, e.g. ["data engineer","security"]. Empty = every role.
posted_within_daysNoOnly roles posted in the last N days.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/open-world, but the description goes further with billing and safety context: it runs a specific Apify Actor on the caller's own Apify account, costs ~$0.01 per company with a matching signal, companies without a signal are free, and spend is capped at $0.5 per call. That is exactly the cost/auth/limit disclosure annotations cannot 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?

Front-loaded with the value proposition and the key scoping fact (which companies are hiring) before inputs and cost. It is a single dense paragraph; the 'Buying-intent signal' opener is slightly marketing-flavored, but little of the text is 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?

With an output schema present, annotations covering the safety profile, and full schema description coverage, the description supplies everything else an agent needs: the two discovery modes, supported ATS sources, and the cost ceiling. Nothing required 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?

Schema description coverage is 100%, so the baseline is 3 and the schema already documents all seven parameters. The description adds meaning by enumerating the supported ATS boards (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Personio, Teamtailor), which constrains what the 'companies' URL values may be — a modest but real addition.

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?

States a specific verb+resource — discovering which companies are hiring — and enumerates the output dimensions (how many roles, freshness, seniority/locations), so the agent knows this returns companies rather than job listings. The 'discover companies you do not know yet' framing implicitly separates it from a single-company job fetch like get_company_jobs.

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?

Explains the two input modes clearly: pass target-account jobs-page URLs for known accounts, and/or job-search phrases to discover unknown companies. It gives context for when each mode applies but names no alternative sibling tool and states no exclusions.

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

find_website_contactsFind emails, phones and social profiles on websitesA
Read-onlyIdempotent

Finds business emails, phone numbers, addresses and social profiles (LinkedIn, X, Facebook, Instagram, YouTube) on any list of websites; it visits the contact and about pages itself. Use only for lawful business outreach (GDPR / CAN-SPAM). Runs the Apify Actor tacps126/contact-details on your Apify account (about $0.002 per website with contacts found; nothing found, no charge; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
websitesYesWebsite addresses or domains, e.g. "apify.com".
max_itemsNoMaximum results to return (default 50, max 1000). Cost scales with this.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
require_emailNoDrop sites where no email was found.
max_pages_per_siteNoPages read per website; contact, imprint and about pages are picked first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so safety is covered. The description goes further with genuinely useful operational detail: the backing Apify Actor, per-site pricing with no charge when nothing is found, and a $0.5 per-call spend cap. It still omits what a partial/failed crawl looks like, but the cost and execution model are well disclosed.

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?

Two dense sentences that lead with what is found and where, then follow with legality and execution economics. Every clause carries information, though the second sentence packs legality, Actor identity, unit pricing, free-miss policy and a cap into one run-on that could be split.

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?

With an output schema present, return values need no explanation, and annotations cover the safety profile. The description supplies the remaining agent-relevant context (legal use, crawl behavior, cost model), leaving only minor gaps around error/partial-result handling.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with websites, max_items, max_pages_per_site, require_email and extra_input all self-documented, including defaults, ranges and the cost-scaling note on max_items. The description adds no parameter-level meaning beyond this, so the baseline 3 applies.

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?

Specific verb (Finds) plus the exact resources (business emails, phone numbers, addresses, social profiles on named platforms) and mechanism (visits contact and about pages itself). This makes it trivially distinguishable from siblings like search_google_news or get_company_jobs, which are single-source retrieval tools rather than website contact scrapers.

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

Usage Guidelines3/5

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

Provides a usage constraint ('Use only for lawful business outreach (GDPR / CAN-SPAM)') and cost framing, which implies the appropriate context. However, it never names an alternative or states when a different sibling tool would be the better choice for a related need, so selection guidance is only implied.

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

get_app_reviewsGet App Store and Google Play reviewsA
Read-onlyIdempotent

Reviews from the Apple App Store and Google Play in one dataset: rating, text, author, date, app version, developer reply, sentiment. Mix both stores and several countries. Runs the Apify Actor tacps126/app-reviews on your Apify account (about $0.0002 per review; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
appsYesApp Store / Google Play links, App Store ids ("id324684580") or Android package names ("com.spotify.music").
countriesNoTwo-letter store countries, e.g. ["us","gb"].
max_itemsNoMaximum results to return (default 100, max 2000). Cost scales with this.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
star_ratingsNoOnly these ratings, e.g. ["1","2"].

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), so the description is free to add operational context, which it does: it runs the Apify Actor tacps126/app-reviews on the caller's account, costs ~$0.0002 per review, and caps spend at $0.5 per call. That cost/execution detail is genuinely additive beyond the annotations, though latency and pagination behavior remain unstated.

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?

Two tight sentences that front-load what the dataset contains and then the execution/cost note. The 'Mix both stores and several countries' clause is slightly redundant with the opening clause but overall there is no wasted prose.

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?

With an output schema present, the description need not explain return values, and annotations carry the safety profile; the added cost and Actor-execution context rounds it out well. Minor gap: it doesn't reconcile the max_items ceiling with the $0.5 spend cap or mention result limits in practice.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the schema; baseline is 3. The description's mention of mixing stores and countries loosely maps to the countries parameter but adds no syntax or format detail beyond the 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?

States a specific verb and resource ('Reviews from the Apple App Store and Google Play'), names the two data sources, and enumerates the returned fields. This is immediately distinguishable from the sibling get_trustpilot_reviews because the store sources are explicit.

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

Usage Guidelines3/5

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

The description implies usage ('Mix both stores and several countries') but never states when to prefer this tool over the similar sibling get_trustpilot_reviews or any exclusion criteria. Usage is inferable from the resource rather than stated.

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

get_company_jobsGet all open jobs from company career pagesA
Read-onlyIdempotent

All open jobs from company career pages in one normalized format (title, company, location, remote/hybrid, seniority, salary, apply URL, posted date). Paste career-page URLs from Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Workday, Personio or Teamtailor; the board type is detected automatically. Runs the Apify Actor tacps126/jobs-harvester on your Apify account (about $0.001 per job; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
max_itemsNoMaximum results to return (default 50, max 500). Cost scales with this.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
remote_onlyNoOnly remote jobs.
title_includesNoKeep jobs whose title contains any of these.
career_page_urlsYesCareer page URLs, e.g. "https://jobs.lever.co/spotify".
location_includesNoKeep jobs in these locations.
posted_within_daysNoOnly jobs posted in the last N days.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint). The description adds genuinely new context beyond them: the tool runs the Apify Actor tacps126/jobs-harvester on the user's Apify account, costs about $0.001 per job, and spend is capped at $0.5 per call. That cost/ownership disclosure is exactly the kind of extra behavioral value that matters here.

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?

Two dense sentences that are front-loaded with the outcome, then the input format, then the cost model; nothing is redundant. It is slightly list-heavy but every clause earns its place.

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 scraper with a full input schema, output schema, and annotations covering the safety profile, the description adds the missing operational context (provider support, auto-detection, cost and per-call cap). Only the explicit when-to-use-this-versus-siblings guidance is absent, which keeps it just shy of complete.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and an output schema exists, so the schema already documents all 7 parameters including defaults, ranges and cost scaling. The description adds no parameter-specific syntax or format detail beyond what the schema provides, so the baseline 3 applies.

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?

States a specific verb (get) and resource (all open jobs from company career pages) and names the nine supported board providers. It also enumerates the normalized output fields, which clearly separates it from siblings like search_indeed_jobs and find_hiring_companies without opening either schema.

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?

Gives clear operational context: paste career-page URLs from a specific list of ATS providers and the board type is auto-detected, which tells the agent exactly what input this tool expects. However, it never explicitly contrasts itself against alternatives such as search_indeed_jobs or find_hiring_companies, so the choice between them is left to inference.

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

get_shopify_productsGet products from Shopify storesA
Read-onlyIdempotent

Products from any Shopify store: prices, sale prices, discounts, stock, variants, SKUs, images and descriptions. Whole stores, collections or single products. Useful for price and stock monitoring. Runs the Apify Actor tacps126/shopify-products on your Apify account (about $0.001 per product; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
storesYesStore domains, collection links or product links, e.g. "allbirds.com".
keywordsNoOnly products matching any of these words.
max_itemsNoMaximum results to return (default 100, max 1000). Cost scales with this.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
only_on_saleNoOnly products with a sale price.
only_availableNoOnly products that are in stock.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/destructive=false, so safety is covered. The description adds genuinely new behavioral context beyond structured data: it runs the external Actor tacps126/shopify-products on the caller's Apify account, at ~$0.001 per product with a $0.5 per-call spend cap. It omits runtime/latency and pagination behavior, keeping it short of a 5.

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?

Four short sentences with the payload front-loaded: what you get, at what scope, what it's for, and what it costs/how it runs. No sentence is filler, and the cost caveat is placed last where it reads as a constraint rather than the headline.

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?

With an output schema present, return values need no explanation, and all six parameters are documented in the schema. The description supplies the missing economics (per-product cost, per-call cap) and execution model (external Apify Actor), which is everything an agent needs to decide whether and how to call it.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains stores, keywords, max_items, only_on_sale, only_available, and extra_input. The description restates scope (store/collection/product links) and cost scaling but adds no syntax or format detail beyond what the schema already documents. Baseline 3 applies.

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?

States a concrete verb+resource ('Products from any Shopify store') and enumerates the returned data (prices, sale prices, discounts, stock, variants, SKUs, images, descriptions) plus the three scopes it supports (whole stores, collections, single products). None of the sibling tools overlap, so no sibling disambiguation is needed.

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?

'Useful for price and stock monitoring' names a concrete use case, and the scope sentence tells the agent it can pass store domains, collection links, or product links. There is no explicit when-not guidance or named alternative, but no sibling competes for this task, so the gap is minor.

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

get_trustpilot_reviewsGet Trustpilot reviews and company ratingA
Read-onlyIdempotent

Trustpilot reviews for one or more companies (rating, title, text, reviewer, country, date, company reply) plus the company's TrustScore and review counts. Filter by stars, language, verified and date period. Runs the Apify Actor tacps126/trustpilot-reviews on your Apify account (about $0.0005 per review; company profile free; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoNewest reviews first (recency) or most relevant first.recency
searchNoOnly reviews containing this text.
companiesYesCompany domains or Trustpilot URLs, e.g. "apify.com".
date_periodNoOnly reviews from this period.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
max_reviewsNoMaximum results to return (default 50, max 500). Cost scales with this.
star_ratingsNoOnly these ratings, e.g. ["1","2"] for complaints.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/openWorld, but the description adds genuinely useful context beyond them: it runs the Apify Actor tacps126/trustpilot-reviews on the caller's own Apify account, costs ~$0.0005 per review, and caps spend at $0.5 per call. It stops short of describing latency or async/polling behavior, so not a full 5.

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?

Three compact sentences, front-loaded with what is returned before filters and cost. Dense and mostly waste-free, though the parenthetical field list is long and the actor/cost sentence could be tightened.

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?

With an output schema present and 100% schema description coverage, the description need not explain return values, and it does supply the missing operational context (cost, spend cap, backing actor). The only gap is the absent guidance on choosing this tool over review-related siblings.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 and the schema already documents every parameter. The description's mention of 'language' and 'verified' filters is slightly out of step with the top-level schema (those would have to go through extra_input), and it only adds marginal semantics such as cost scaling with max_reviews.

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?

States a specific verb and resource (get Trustpilot reviews for one or more companies) and enumerates the returned fields (rating, title, text, reviewer, country, date, company reply) plus TrustScore and review counts. This clearly separates it from siblings like get_app_reviews and search_reddit without needing the schema.

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

Usage Guidelines3/5

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

The description implies its domain (Trustpilot company reviews) and lists the available filter dimensions, which hints at when it applies. However, it never names an alternative tool or states when NOT to use it (e.g., app-store reviews belong to get_app_reviews), so routing is left to inference.

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

search_german_property_listingsSearch German property listings (ImmoScout24)A
Read-onlyIdempotent

Apartments and houses for rent or sale in Germany: price, rent, area, rooms, address with coordinates, energy class, features, agent, photos and dates. Germany only. Runs the Apify Actor tacps126/immobilienscout24-scraper on your Apify account (about $0.001 per listing; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
min_areaNoMinimum area in m2.
locationsYesCities, districts or regions in plain words, e.g. ["Berlin","München Schwabing"].
max_itemsNoMaximum results to return (default 50, max 500). Cost scales with this.
max_priceNoMaximum price in EUR (monthly rent or purchase price).
min_priceNoMinimum price in EUR (monthly rent or purchase price).
min_roomsNoMinimum number of rooms.
offer_typeNoRent or buy listings.rent
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
property_typeNoApartments or houses.apartment

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds real operational context annotations cannot: it runs a specific Apify Actor on the caller's account, costs roughly $0.001 per listing, and hard-caps spend at $0.5 per call.

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?

Two dense sentences: result scope first, geographic constraint second, then billing/implementation. Every clause carries information and nothing is repeated, though the field enumeration is long and sits closer to an output summary than to purpose.

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 read-only search tool with a full output schema and complete parameter descriptions, the definition covers the remaining gaps an agent needs: geographic restriction and the monetary cost ceiling that governs whether it is safe to call with a large max_items.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters (locations, price/area/room bounds, offer_type, property_type, max_items, extra_input) are already documented inline. The description adds no parameter syntax or format detail beyond what the schema provides; the cost note merely reinforces max_items, which the schema already flags.

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?

States the resource (apartments and houses for rent or sale), the geography (Germany only), and enumerates the returned fields (price, area, rooms, coordinates, energy class, agent, photos). No sibling tool overlaps this vertical, so an agent can route to it unambiguously.

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

Usage Guidelines3/5

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

Usage is implied by the content (property search) and there is one exclusion ("Germany only"), but the description never states when to prefer this over alternatives or what a caller should do if listings are needed outside Germany. Adequate but no explicit routing guidance.

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

search_google_newsSearch Google NewsA
Read-onlyIdempotent

Search Google News (any language and country) and return articles with the publisher's real article URL, publisher, date and related coverage. Supports Google operators ("exact phrase", -exclude, OR, intitle:) and site filters. Runs the Apify Actor tacps126/google-news on your Apify account (about $0.002 per article; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query, e.g. "generative AI" or "tesla -musk".
sitesNoLimit to these publisher domains, e.g. ["reuters.com"].
countryNoTwo-letter edition country, e.g. US, GB, DE.US
languageNoLanguage code, e.g. en, de, fr.en
max_itemsNoMaximum results to return (default 20, max 200). Cost scales with this.
timeframeNoOnly articles newer than this.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds genuinely useful operational context: it runs on the user's Apify account, costs ~$0.002/article, and spend per call is capped at $0.5. It stops short of describing failure modes or how the cap is enforced.

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?

Three tight sentences that are front-loaded with purpose, then capabilities, then cost. Dense but every clause earns its place; 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?

With an output schema present, return details need not be spelled out, and the description covers scope, cost, and account context for a 7-param nested-schema tool. Minor gaps remain around pagination or behavior when a query returns nothing.

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 coverage is 100%, so baseline is 3, but the description adds real semantic value by enumerating supported Google operators ("exact phrase", -exclude, OR, intitle:) that the plain query schema does not document, and it ties cost scaling to max_items.

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?

States a specific verb+resource ('Search Google News') plus the exact return payload (article URL, publisher, date, related coverage), which separates it cleanly from sibling search tools like search_indeed_jobs or search_reddit.

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?

Conveys how to use it (Google operators, site filters, language/country scope) and flags the cost model, giving clear context for invocation. It does not, however, state when to prefer this over a sibling news/review source or any exclusions.

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

search_indeed_jobsSearch Indeed jobsA
Read-onlyIdempotent

Search Indeed job listings by keyword and location in 9 countries (us, uk, ca, au, ie, de, fr, nl, sg): title, company, location, salary, job type, benefits, skills and apply link. Runs the Apify Actor tacps126/indeed-jobs on your Apify account (about $0.003 per job; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesJob title, skill or company, e.g. "react developer".
countryNoIndeed country site.us
job_typeNoOnly this employment type.
locationNoCity, state, postcode or "Remote". Empty = whole country.
max_itemsNoMaximum results to return (default 30, max 500). Cost scales with this.
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
date_posted_daysNoOnly jobs posted in the last N days.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the description doesn't need to restate safety. It does add meaningful non-obvious behavior: it runs a specific Apify Actor on the user's own Apify account, costs about $0.003 per job, and caps spend per call at $0.5. That cost/credential context is valuable beyond the annotations; it stops short of describing return shape or pagination, but the output schema exists.

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?

Two tight sentences, front-loaded with the core purpose and field list, then operational context (Actor, cost, cap). No filler, though the long parenthetical could be trimmed slightly.

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 read-only search over 7 params with full schema coverage and an output schema, the description covers purpose, scope, return fields, cost and spend cap. The only meaningful omission is guidance on choosing it over sibling job tools and any account/auth prerequisite.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already documented with types, enums and defaults, setting the baseline at 3. The description adds little parameter-level meaning beyond confirming keyword/location search and the country list; it does not explain how max_items interacts with the $0.5 cap, which would have been useful.

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?

States a specific verb (Search) and resource (Indeed job listings) plus the exact scope: by keyword and location across nine named countries, and enumerates the fields returned. An agent can distinguish it from siblings like find_hiring_companies or get_company_jobs without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied by the query/location framing, but the description never states when to pick this over sibling job tools (find_hiring_companies, get_company_jobs) or any prerequisites such as needing an Apify account/API key. No exclusions are given.

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

search_redditSearch Reddit posts and commentsA
Read-onlyIdempotent

Reddit posts (and optionally comments) by keyword, subreddit or user: title, text, author, subreddit, score, links and dates. Good for brand and topic monitoring. Runs the Apify Actor tacps126/reddit-monitor on your Apify account (about $0.001 per post or comment; spend per call is capped at $0.5).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoResult order.new
timeNoTime window for keyword searches.week
keywordsNoSearch all of Reddit; "exact phrase" works.
max_itemsNoMaximum results to return (default 50, max 500). Cost scales with this.
subredditsNoSubreddit names, e.g. ["webscraping"].
extra_inputNoAdvanced: extra Actor input fields, merged over the defaults.
include_commentsNoAlso return comments of the matched posts (more results, higher cost).

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesName of the tool that produced the result.
countYesNumber of records the Actor returned.
itemsYesThe records. Long text fields are shortened to 600 characters.
shownYesNumber of records included in `items` (can be lower than count when the result is long).
truncatedYesTrue when records were left out to keep the result short; ask for fewer items.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: it runs the third-party Actor tacps126/reddit-monitor on the caller's Apify account, costs roughly $0.001 per item, and is capped at $0.5 per call. It does not cover auth prerequisites or failure behavior, so not a 5.

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?

Three compact sentences that lead with scope and filters before moving to cost and execution model. The field list (title, text, author, subreddit, score, links, dates) is somewhat redundant given an output schema exists, but the overall density is high.

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?

With an output schema present, return values need not be explained, and the description correctly spends its words on cost, execution environment, and filter scope instead. The main gap is the absence of any note on authentication or what happens when the spend cap is hit mid-call.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (sort, time, keywords, subreddits, max_items, include_comments, extra_input) is already documented in the schema. The description restates the filter dimensions but adds no format or syntax detail beyond what the schema provides, so the baseline of 3 applies.

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?

States a specific verb and resource (Reddit posts and optionally comments) with the filter dimensions (keyword, subreddit, user) and the fields returned. It is clearly distinguishable from siblings like search_google_news or get_trustpilot_reviews, which target entirely different sources.

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

Usage Guidelines3/5

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

"Good for brand and topic monitoring" implies a use case but gives no when-not guidance, no prerequisites, and does not route to any alternative sibling. The agent can infer intent but gets no decision boundary.

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. 10 tool updatesv0.1.1
    • Changedfind_hiring_companies1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedfind_website_contacts2 fields changed
      • addedInput schema / properties / max_pages_per_site / description
        Added value: +"Pages read per website; contact, imprint and about pages are picked first."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedget_app_reviews1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedget_company_jobs1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedget_shopify_products3 fields changed
      • addedInput schema / properties / only_available / description
        Added value: +"Only products that are in stock."
      • addedInput schema / properties / only_on_sale / description
        Added value: +"Only products with a sale price."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedget_trustpilot_reviews3 fields changed
      • addedInput schema / properties / date_period / description
        Added value: +"Only reviews from this period."
      • addedInput schema / properties / sort / description
        Added value: +"Newest reviews first (recency) or most relevant first."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_german_property_listings6 fields changed
      • addedInput schema / properties / max_price / description
        Added value: +"Maximum price in EUR (monthly rent or purchase price)."
      • addedInput schema / properties / min_price / description
        Added value: +"Minimum price in EUR (monthly rent or purchase price)."
      • addedInput schema / properties / min_rooms / description
        Added value: +"Minimum number of rooms."
      • addedInput schema / properties / offer_type / description
        Added value: +"Rent or buy listings."
      • addedInput schema / properties / property_type / description
        Added value: +"Apartments or houses."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_google_news1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_indeed_jobs2 fields changed
      • addedInput schema / properties / job_type / description
        Added value: +"Only this employment type."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_reddit4 fields changed
      • addedInput schema / properties / include_comments / description
        Added value: +"Also return comments of the matched posts (more results, higher cost)."
      • addedInput schema / properties / sort / description
        Added value: +"Result order."
      • addedInput schema / properties / time / description
        Added value: +"Time window for keyword searches."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Number of records the Actor returned.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The records. Long text fields are shortened to 600 characters.",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "shown": {
        +      "description": "Number of records included in `items` (can be lower than count when the result is long).",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "tool": {
        +      "description": "Name of the tool that produced the result.",
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "description": "True when records were left out to keep the result short; ask for fewer items.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "tool",
        +    "count",
        +    "shown",
        +    "truncated",
        +    "items"
        +  ],
        +  "type": "object"
        +}
  2. 10 tool updatesv0.1.0
    • First observedfind_hiring_companies
    • First observedfind_website_contacts
    • First observedget_app_reviews
    • First observedget_company_jobs
    • First observedget_shopify_products
    • First observedget_trustpilot_reviews
    • First observedsearch_german_property_listings
    • First observedsearch_google_news
    • First observedsearch_indeed_jobs
    • First observedsearch_reddit

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a clearly distinct data source and action (news, hiring signals, company jobs, Indeed jobs, Trustpilot, app reviews, Reddit, contacts, German property, Shopify). The three job-related tools are differentiated by source and output type, so an agent can easily select the right one.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (search_, find_, get_), with descriptive and predictable names. The use of multiple verbs is not inconsistent because the overall structure is uniform.

Tool Count5/5

10 tools is well-scoped for a multi-source web data scraping server. Each tool represents a distinct scraper/source, and there is no redundancy or filler.

Completeness3/5

While each tool is self-contained, the server leaves notable gaps for a general web data domain: no Twitter/X, LinkedIn, generic web search, Amazon, or real estate outside Germany. Agents needing those sources would hit dead ends and require other servers.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with real-time web capabilities including live search results, markdown web scraping, business lead generation, and detailed company information. It enables agents to bypass knowledge cutoffs by accessing current web data through a monetized Apify Actor.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to access 30 pay-per-event Apify actors for ad, video, reel, and audio transcripts; Google Trends and keyword demand; job boards; Amazon product data; and Instagram data, charging only per delivered item.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to search the web with clean page text, crawl websites into Markdown, extract articles and structured data, and monitor Google News and press releases for LLM context and RAG pipelines. It works with MCP clients and uses the user's own Apify API token for pay-per-result data retrieval.
    6
    MIT