scrapeunblocker-mcp 0.11.1 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +237 -4
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -16,7 +16,7 @@ You bring your **own** API key. Nothing is shared or proxied through us.
16
16
  | `browse_page` | Run interactive browser `steps` on a page (click, type, select, scroll, wait), then return the resulting HTML. Not read-only: it acts on the website. |
17
17
  | `list_elements` | List a page's notable elements with a ready-to-use selector for each (selector discovery). |
18
18
  | `fetch_parsed` | Fetch a page and return AI-parsed structured JSON. |
19
- | `google_search` | Run a Google search and return organic results as JSON. |
19
+ | `google_search` | Run a Google search and return the results page as JSON: organic results with real URLs, ads, AI Overview, People also ask, related searches, knowledge panel, news, videos, local and shopping results. |
20
20
  | `fetch_markdown` | Fetch a page and return it as clean Markdown: the main content with absolute links, without scripts, styles, navigation or footer. Usually 2-25% the size of the HTML, so it is the cheap way for a model to read a page. |
21
21
  | `search_and_read` | Search Google and read the top results in one call: Google's AI Overview (when there is one), the first 1-5 result pages as Markdown, and the other results as title, URL and snippet. Billed as one search plus one request per page read. |
22
22
  | `list_plugins` | List the ready-made site plugins (100+: Amazon, Walmart, Zillow, Booking.com, Indeed, Google Trends, YouTube, App Store, Ahrefs, ...) with their parameters. Free - it calls nothing. |
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import { APIError, ScrapeUnblockerClient, errorForStatus } from "scrapeunblocker
10
10
  import { z } from "zod";
11
11
 
12
12
  // src/plugin-catalog.ts
13
- var CATEGORIES = ["Travel", "Google", "AI", "Search engines", "E-commerce", "Classifieds & Resale", "Groceries", "Real estate", "Vehicles", "Jobs", "Reviews & Companies", "Local & Maps", "Apps", "Video & Music", "SEO & Ads"];
13
+ var CATEGORIES = ["Travel", "Google", "AI", "Search engines", "E-commerce", "Classifieds & Resale", "Groceries", "Real estate", "Vehicles", "Jobs", "Reviews & Companies", "Local & Maps", "Apps", "Video & Music", "Sports", "SEO & Ads"];
14
14
  var PLUGINS = [
15
15
  {
16
16
  "name": "skyscanner_flights",
@@ -8036,7 +8036,7 @@ var PLUGINS = [
8036
8036
  "name": "format",
8037
8037
  "type": "string",
8038
8038
  "required": false,
8039
- "description": "Output shape: text, segments. 'segments' returns timestamps; 'text' returns only the joined plaintext.",
8039
+ "description": "Output shape: segments, text. 'segments' returns timestamps; 'text' returns only the joined plaintext.",
8040
8040
  "default": "segments"
8041
8041
  },
8042
8042
  {
@@ -8220,6 +8220,239 @@ var PLUGINS = [
8220
8220
  }
8221
8221
  ]
8222
8222
  },
8223
+ {
8224
+ "name": "sofascore_events",
8225
+ "title": "SofaScore matches of a sport on a day, or live now",
8226
+ "category": "Sports",
8227
+ "path": "/sports/sofascore-events",
8228
+ "fixed": {},
8229
+ "description": "Lists a sport's matches from sofascore.com for one day in your time zone (or `live=true` for those in progress), biggest competitions first, as JSON: `id`, `url`, `tournament` (id, name, url, category / country, stage), `season`, `round`, `status` (type notstarted, inprogress, finished, postponed, canceled, with its description such as '2nd half'), `startTime` (ISO, UTC) and `startTimestamp`, `homeTeam` / `awayTeam` (id, name, short name, code, country, url), `homeScore` / `awayScore` (current plus per-period and normal-time scores), `winner`, red cards, seeds and first server (tennis), venue and referee when known. Narrow with `country` (a country or category) or `tournament` (id, link or name), and `status`. Pass a match `id` to `/sports/sofascore-match` for its stats and lineups. Motorsport and cycling are races, not matches, and have no day list.",
8230
+ "params": [
8231
+ {
8232
+ "name": "sport",
8233
+ "type": "string",
8234
+ "required": false,
8235
+ "description": "The sport: football, basketball, tennis, ice-hockey, american-football, baseball, handball, volleyball, cricket, rugby, futsal, table-tennis, esports, darts, snooker, mma, aussie-rules, waterpolo, floorball, bandy, badminton, beach-volley, minifootball, padel, motorsport, cycling (soccer, hockey, nba, nfl and the like are accepted).",
8236
+ "default": "football"
8237
+ },
8238
+ {
8239
+ "name": "date",
8240
+ "type": "string",
8241
+ "required": false,
8242
+ "description": "Day as YYYY-MM-DD, or today / yesterday / tomorrow (in `timezone`). Default today."
8243
+ },
8244
+ {
8245
+ "name": "timezone",
8246
+ "type": "string",
8247
+ "required": false,
8248
+ "description": "Time zone the day is read in: an IANA name ('Europe/London', 'America/New_York') or a UTC offset ('+02:00'). Default UTC."
8249
+ },
8250
+ {
8251
+ "name": "live",
8252
+ "type": "boolean",
8253
+ "required": false,
8254
+ "description": "true for the matches in progress right now (date is then ignored).",
8255
+ "default": false
8256
+ },
8257
+ {
8258
+ "name": "status",
8259
+ "type": "string",
8260
+ "required": false,
8261
+ "description": "Keep only: all, live, upcoming, finished.",
8262
+ "default": "all"
8263
+ },
8264
+ {
8265
+ "name": "country",
8266
+ "type": "string",
8267
+ "required": false,
8268
+ "description": "Only one country or category, by name, slug, ISO code or id: 'england', 'Spain', 'US', and for tennis 'ATP', 'WTA'."
8269
+ },
8270
+ {
8271
+ "name": "tournament",
8272
+ "type": "string",
8273
+ "required": false,
8274
+ "description": "Only one competition: an id, a sofascore.com tournament link or a name such as 'Premier League' or 'NBA'."
8275
+ },
8276
+ {
8277
+ "name": "max_results",
8278
+ "type": "integer",
8279
+ "required": false,
8280
+ "description": "Matches to return (1-500), the biggest competitions first.",
8281
+ "default": 100
8282
+ }
8283
+ ]
8284
+ },
8285
+ {
8286
+ "name": "sofascore_match",
8287
+ "title": "One SofaScore match with stats, lineups and incidents",
8288
+ "category": "Sports",
8289
+ "path": "/sports/sofascore-match",
8290
+ "fixed": {},
8291
+ "description": "Fetches one match from sofascore.com: `event` (teams, score by period, status, start time, tournament, season, round, venue, referee) plus the `include` sections: `statistics` (per period and group, e.g. possession, expected goals, shots, with home / away text and numbers), `lineups` (formation, every player with position, shirt number, rating and match statistics, missing players), `incidents` (goals, cards, substitutions, VAR, periods, oldest first), `h2h` (team and manager records plus the last 10 meetings), `odds` (markets with decimal and fractional odds), `momentum`, `pregame_form`, `votes`, `managers`, `best_players` (player of the match and best rated per side), `shotmap` (every shot with xG, xGOT, body part and coordinates), `commentary` and `highlights`. Sections the site does not have for the match (e.g. statistics before kick-off) are named in `unavailable`.",
8292
+ "params": [
8293
+ {
8294
+ "name": "match",
8295
+ "type": "string",
8296
+ "required": true,
8297
+ "description": "The match: its id (e.g. 16363904, from the search or events endpoints) or a sofascore.com match link. A link without '#id:' names the pairing; the match in progress, else the next, else the latest is used."
8298
+ },
8299
+ {
8300
+ "name": "include",
8301
+ "type": "string",
8302
+ "required": false,
8303
+ "description": "Sections to add, comma separated: statistics, lineups, incidents, h2h, odds, momentum, pregame_form, votes, managers, best_players, shotmap, commentary, highlights (or all / none). Default statistics,lineups,incidents.",
8304
+ "join": ","
8305
+ }
8306
+ ]
8307
+ },
8308
+ {
8309
+ "name": "sofascore_search",
8310
+ "title": "Search SofaScore teams, players, tournaments and matches",
8311
+ "category": "Sports",
8312
+ "path": "/sports/sofascore-search",
8313
+ "fixed": {},
8314
+ "description": "Searches sofascore.com for `query` and returns the matches as JSON, best first. Each result has `rank` (its place in the list), `type` (team, player, tournament, match, manager, referee or venue), `id`, `name`, `slug`, a sofascore.com `url`, `sport`, `country` and `followers`; a player adds `position`, `jerseyNumber` and its `team`, a tournament its `category`, a match the same fields as `/sports/sofascore-events`. `sport` keeps to one sport, `type` to one kind of result. Feed an `id` to `/sports/sofascore-team`, `-player`, `-tournament` or `-match`.",
8315
+ "params": [
8316
+ {
8317
+ "name": "query",
8318
+ "type": "string",
8319
+ "required": true,
8320
+ "description": "What to look for: a team, player, competition, match, manager, referee or venue name, e.g. 'real madrid', 'sinner', 'premier league', 'arsenal chelsea'."
8321
+ },
8322
+ {
8323
+ "name": "sport",
8324
+ "type": "string",
8325
+ "required": false,
8326
+ "description": "The sport: football, basketball, tennis, ice-hockey, american-football, baseball, handball, volleyball, cricket, rugby, futsal, table-tennis, esports, darts, snooker, mma, aussie-rules, waterpolo, floorball, bandy, badminton, beach-volley, minifootball, padel, motorsport, cycling (soccer, hockey, nba, nfl and the like are accepted). Optional; narrows the search or name lookup to one sport."
8327
+ },
8328
+ {
8329
+ "name": "type",
8330
+ "type": "string",
8331
+ "required": false,
8332
+ "description": "Kind of result: all, teams, players, tournaments, matches, managers, referees, venues (all mixes them, best match first).",
8333
+ "default": "all"
8334
+ },
8335
+ {
8336
+ "name": "page",
8337
+ "type": "integer",
8338
+ "required": false,
8339
+ "description": "1-based results page to start from (1-5); the site serves 20 per page.",
8340
+ "default": 1
8341
+ },
8342
+ {
8343
+ "name": "max_results",
8344
+ "type": "integer",
8345
+ "required": false,
8346
+ "description": "Results to collect across pages (1-100).",
8347
+ "default": 20
8348
+ }
8349
+ ]
8350
+ },
8351
+ {
8352
+ "name": "sofascore_team",
8353
+ "title": "A SofaScore team with matches, squad and transfers",
8354
+ "category": "Sports",
8355
+ "path": "/sports/sofascore-team",
8356
+ "fixed": {},
8357
+ "description": "Fetches a team from sofascore.com (tennis players and other individual competitors are teams there too): `team` (name, short name, code, country, category, main tournament, manager, venue with capacity, foundation date, followers, url) plus the `include` sections: `last_matches` (most recent first) and `next_matches` (soonest first) in the events shape, `squad` (players with position, shirt number, birth date, height, foot, country, market value, contract), `tournaments` the team plays and `transfers` (in and out with fee and date). `team` takes an id, a link or a name.",
8358
+ "params": [
8359
+ {
8360
+ "name": "team",
8361
+ "type": "string",
8362
+ "required": true,
8363
+ "description": "The team (or a tennis player, MMA fighter and other individual competitors): its id (e.g. 2829), a sofascore.com team link, or a name such as 'Real Madrid' (best search match)."
8364
+ },
8365
+ {
8366
+ "name": "sport",
8367
+ "type": "string",
8368
+ "required": false,
8369
+ "description": "The sport: football, basketball, tennis, ice-hockey, american-football, baseball, handball, volleyball, cricket, rugby, futsal, table-tennis, esports, darts, snooker, mma, aussie-rules, waterpolo, floorball, bandy, badminton, beach-volley, minifootball, padel, motorsport, cycling (soccer, hockey, nba, nfl and the like are accepted). Optional; narrows the search or name lookup to one sport."
8370
+ },
8371
+ {
8372
+ "name": "include",
8373
+ "type": "string",
8374
+ "required": false,
8375
+ "description": "Sections to add, comma separated: last_matches, next_matches, squad, tournaments, transfers (or all / none). Default last_matches,next_matches.",
8376
+ "join": ","
8377
+ }
8378
+ ]
8379
+ },
8380
+ {
8381
+ "name": "sofascore_player",
8382
+ "title": "A SofaScore player with season stats and matches",
8383
+ "category": "Sports",
8384
+ "path": "/sports/sofascore-player",
8385
+ "fixed": {},
8386
+ "description": "Fetches a player from sofascore.com: `player` (name, team, position and detailed positions, shirt number, birth date, height, preferred foot, country, market value, contract end, followers, url) plus the `include` sections: `season_stats` (every statistic SofaScore keeps for one competition and season, e.g. rating, goals, expected goals, assists, passes, duels, saves), `seasons` (each competition with its seasons, to pick `tournament` and `season`), `last_matches` (most recent first, with the player's rating, minutes and goals or assists in each), `transfers`, `attributes` (attacking, technical, tactical, defending, creativity scores) and `national_team` (caps, goals, debut). `player` takes an id, a link or a name.",
8387
+ "params": [
8388
+ {
8389
+ "name": "player",
8390
+ "type": "string",
8391
+ "required": true,
8392
+ "description": "The player: id (e.g. 12994), a sofascore.com player link, or a name such as 'Lionel Messi' (best search match)."
8393
+ },
8394
+ {
8395
+ "name": "sport",
8396
+ "type": "string",
8397
+ "required": false,
8398
+ "description": "The sport: football, basketball, tennis, ice-hockey, american-football, baseball, handball, volleyball, cricket, rugby, futsal, table-tennis, esports, darts, snooker, mma, aussie-rules, waterpolo, floorball, bandy, badminton, beach-volley, minifootball, padel, motorsport, cycling (soccer, hockey, nba, nfl and the like are accepted). Optional; narrows the search or name lookup to one sport."
8399
+ },
8400
+ {
8401
+ "name": "include",
8402
+ "type": "string",
8403
+ "required": false,
8404
+ "description": "Sections to add, comma separated: seasons, season_stats, last_matches, transfers, attributes, national_team (or all / none). Default season_stats,last_matches.",
8405
+ "join": ","
8406
+ },
8407
+ {
8408
+ "name": "tournament",
8409
+ "type": "string",
8410
+ "required": false,
8411
+ "description": "For season_stats: the competition id (see the seasons section). Default the player's first listed competition."
8412
+ },
8413
+ {
8414
+ "name": "season",
8415
+ "type": "string",
8416
+ "required": false,
8417
+ "description": "For season_stats: a season id or its year as SofaScore writes it ('26/27', '2026'). Default the latest."
8418
+ }
8419
+ ]
8420
+ },
8421
+ {
8422
+ "name": "sofascore_tournament",
8423
+ "title": "A SofaScore competition with standings and fixtures",
8424
+ "category": "Sports",
8425
+ "path": "/sports/sofascore-tournament",
8426
+ "fixed": {},
8427
+ "description": "Fetches a competition and season from sofascore.com: `tournament` (name, category / country, tier, title holder and record holders, divisions above and below, dates, followers, url) and `season`, plus the `include` sections: `standings` (every table: position, team, played, won, drawn, lost, scored, conceded, difference, points, promotion or relegation note), `rounds`, `last_matches` (most recent first) and `next_matches` (soonest first) in the events shape, `top_players` and `top_teams` (the top 10 in each statistic, e.g. rating, goals, assists, expected goals) and `seasons` (every season with its id). `tournament` takes an id, a link or a name.",
8428
+ "params": [
8429
+ {
8430
+ "name": "tournament",
8431
+ "type": "string",
8432
+ "required": true,
8433
+ "description": "The competition: id (e.g. 17), a sofascore.com tournament link (its '#id:' picks the season), or a name such as 'Premier League' or 'NBA' (best search match)."
8434
+ },
8435
+ {
8436
+ "name": "sport",
8437
+ "type": "string",
8438
+ "required": false,
8439
+ "description": "The sport: football, basketball, tennis, ice-hockey, american-football, baseball, handball, volleyball, cricket, rugby, futsal, table-tennis, esports, darts, snooker, mma, aussie-rules, waterpolo, floorball, bandy, badminton, beach-volley, minifootball, padel, motorsport, cycling (soccer, hockey, nba, nfl and the like are accepted). Optional; narrows the search or name lookup to one sport."
8440
+ },
8441
+ {
8442
+ "name": "season",
8443
+ "type": "string",
8444
+ "required": false,
8445
+ "description": "A season id or its year as SofaScore writes it ('26/27', '2026'). Default the current one."
8446
+ },
8447
+ {
8448
+ "name": "include",
8449
+ "type": "string",
8450
+ "required": false,
8451
+ "description": "Sections to add, comma separated: seasons, standings, rounds, last_matches, next_matches, top_players, top_teams (or all / none). Default standings,last_matches,next_matches.",
8452
+ "join": ","
8453
+ }
8454
+ ]
8455
+ },
8223
8456
  {
8224
8457
  "name": "similarweb_overview",
8225
8458
  "title": "Get a website's Similarweb traffic overview",
@@ -8715,7 +8948,7 @@ ${body}`);
8715
8948
  }
8716
8949
 
8717
8950
  // src/index.ts
8718
- var VERSION = "0.11.1";
8951
+ var VERSION = "0.12.1";
8719
8952
  var DEFAULT_BASE_URL = "https://api.scrapeunblocker.com";
8720
8953
  var API_KEY_HEADER = "x-scrapeunblocker-key";
8721
8954
  function resolveApiKey() {
@@ -9106,7 +9339,7 @@ server.registerTool(
9106
9339
  {
9107
9340
  title: "Google search results",
9108
9341
  annotations: { title: "Google search results", readOnlyHint: true, openWorldHint: true, destructiveHint: false },
9109
- description: "Run a Google search through ScrapeUnblocker and return the organic results as structured JSON. Use this to discover URLs before fetching them.",
9342
+ description: "Run a Google search through ScrapeUnblocker and return the results page as structured JSON: organic results with their real URLs, ads, the AI Overview, People also ask, related searches, the knowledge panel, top stories, videos, local and shopping results. Use this to discover URLs before fetching them.",
9110
9343
  inputSchema: {
9111
9344
  keyword: z3.string().min(1).describe("The search query."),
9112
9345
  proxy_country: z3.string().length(2).optional().describe("Optional ISO country code to search from, e.g. 'US'."),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrapeunblocker-mcp",
3
- "version": "0.11.1",
3
+ "version": "0.12.1",
4
4
  "mcpName": "com.scrapeunblocker/scrapeunblocker-mcp",
5
5
  "description": "Model Context Protocol (MCP) server for ScrapeUnblocker - lets Claude fetch any web page's HTML (or AI-parsed JSON) and run 100+ site plugins that return structured JSON, through the ScrapeUnblocker anti-bot API, using your own API key.",
6
6
  "keywords": [