Gives AI clients ready-made scraping and search tools for Google, Amazon, TikTok, maps, jobs, travel and social platforms.
También conocido como HasData/hasdata-mcp, hasdata-mcp
- Stars
- 17
- Herramientas
- 74
- Descargas, 30 días
- —
- Última versión
- 1.0.1
- Último commit
- 9 nov 2026
- Licencia
- MIT
¿Qué es HasData MCP?
HasData es un MCP server. Gives AI clients ready-made scraping and search tools for Google, Amazon, TikTok, maps, jobs, travel and social platforms. Expone 74 herramientas, como web_scraping_web_scraping, google_serp_serp, google_serp_serp_light.
Resumen generado a partir del README del proyecto
Acerca del MCP server de HasData
Fetching real-time data from e-commerce, social media, and search engines is what HasData enables for developers using AI clients. It provides a collection of ready-to-use tools that allow models to access information from platforms like Amazon, Google Maps, TikTok, and Zillow without requiring custom scraping code or proxy management. The server functions via streamable HTTP, making it compatible with clients like Claude Desktop, Cursor, and Windsurf.
Users can connect using OAuth for a browser-based sign-in experience or provide an API key through an x-api-key header. To keep client interfaces clean, developers can use the apis query parameter to limit the server to specific categories, such as amazon or google_maps. The server includes dozens of specialized tools for tasks ranging from retrieving YouTube transcripts to searching for job postings on Indeed and Glassdoor.
Qué puedes hacer con él
- 1Monitor product pricingAsk your AI to track price changes for specific items on Amazon over a set period.
- 2Analyze local business reputationRequest a summary of customer feedback for a specific location found on Google Maps.
- 3Conduct job market researchInstruct an agent to find specific employment opportunities across multiple job boards.
- 4Extract social media contentUse the server to pull video details or comments from TikTok and Instagram profiles.
Escrito a partir del README del proyecto. Cada caso de uso se verifica con una cita del mismo.
Cómo instalar HasData MCP
Formatos verificados el 10 nov 2026Añadir a CursorAñadir a GooseInstalar HasData MCP en Claude Code
$ claude mcp add --transport http hasdata-mcp https://mcp.hasdata.com/mcpInstalar HasData MCP en Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"hasdata-mcp": {
"url": "https://mcp.hasdata.com/mcp"
}
}
}Instalar HasData MCP en VS Code
.vscode/mcp.json
{
"servers": {
"hasdata-mcp": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp"
}
}
}Instalar HasData MCP en VS Code CLI
$ code --add-mcp '{"name":"hasdata-mcp","type":"http","url":"https://mcp.hasdata.com/mcp"}'Instalar HasData MCP en Codex
$ codex mcp add hasdata-mcp --url https://mcp.hasdata.com/mcpInstalar HasData MCP en Codex config.toml
~/.codex/config.toml
[mcp_servers.hasdata-mcp] url = "https://mcp.hasdata.com/mcp"
Instalar HasData MCP en Gemini CLI
$ gemini mcp add -s user --transport http hasdata-mcp https://mcp.hasdata.com/mcpInstalar HasData MCP en Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"hasdata-mcp": {
"url": "https://mcp.hasdata.com/mcp",
"type": "http"
}
}
}Herramientas de HasData MCP 74
Detectado desde el READMEweb_scraping_web_scrapinggoogle_serp_serpgoogle_serp_serp_lightgoogle_serp_newsgoogle_serp_shoppinggoogle_serp_eventsgoogle_serp_productgoogle_serp_immersive_productgoogle_serp_ai_overviewgoogle_serp_ai_modegoogle_serp_short_videosgoogle_images_images
| web_scraping_web_scraping | — | |
| google_serp_serp | — | |
| google_serp_serp_light | — | |
| google_serp_news | — | |
| google_serp_shopping | — | |
| google_serp_events | — | |
| google_serp_product | — | |
| google_serp_immersive_product | — | |
| google_serp_ai_overview | — | |
| google_serp_ai_mode | — | |
| google_serp_short_videos | — | |
| google_images_images | — |
Mostrar las 74 herramientasMostrar menos herramientas
google_maps_searchgoogle_maps_placegoogle_maps_reviewsgoogle_maps_photosgoogle_maps_postsgoogle_maps_contributor_reviewsgoogle_scholar_scholargoogle_scholar_citegoogle_scholar_case_lawgoogle_trends_searchgoogle_finance_financegoogle_travel_flightsgoogle_travel_flights_dealsgoogle_travel_hotelsbing_serpduckduckgo_serpchatgpt_chatperplexity_chatgemini_chatamazon_searchamazon_productamazon_reviewsamazon_selleramazon_seller_productswalmart_searchwalmart_productwalmart_reviewsshopify_productsshopify_collectionszillow_listingzillow_propertyredfin_listingredfin_propertyindeed_listingindeed_jobglassdoor_listingglassdoor_jobairbnb_listingairbnb_propertybooking_searchbooking_placeyelp_searchyelp_placeyelp_reviewsyellowpages_searchyellowpages_placetripadvisor_searchtripadvisor_placetripadvisor_reviewsfacebook_profileinstagram_profileinstagram_postsinstagram_reelsinstagram_commentstiktok_profiletiktok_poststiktok_searchtiktok_commentsyoutube_searchyoutube_videoyoutube_channelyoutube_transcript
| google_maps_search | — | |
| google_maps_place | — | |
| google_maps_reviews | — | |
| google_maps_photos | — | |
| google_maps_posts | — | |
| google_maps_contributor_reviews | — | |
| google_scholar_scholar | — | |
| google_scholar_cite | — | |
| google_scholar_case_law | — | |
| google_trends_search | — | |
| google_finance_finance | — | |
| google_travel_flights | — | |
| google_travel_flights_deals | — | |
| google_travel_hotels | — | |
| bing_serp | — | |
| duckduckgo_serp | — | |
| chatgpt_chat | — | |
| perplexity_chat | — | |
| gemini_chat | — | |
| amazon_search | — | |
| amazon_product | — | |
| amazon_reviews | — | |
| amazon_seller | — | |
| amazon_seller_products | — | |
| walmart_search | — | |
| walmart_product | — | |
| walmart_reviews | — | |
| shopify_products | — | |
| shopify_collections | — | |
| zillow_listing | — | |
| zillow_property | — | |
| redfin_listing | — | |
| redfin_property | — | |
| indeed_listing | — | |
| indeed_job | — | |
| glassdoor_listing | — | |
| glassdoor_job | — | |
| airbnb_listing | — | |
| airbnb_property | — | |
| booking_search | — | |
| booking_place | — | |
| yelp_search | — | |
| yelp_place | — | |
| yelp_reviews | — | |
| yellowpages_search | — | |
| yellowpages_place | — | |
| tripadvisor_search | — | |
| tripadvisor_place | — | |
| tripadvisor_reviews | — | |
| facebook_profile | — | |
| instagram_profile | — | |
| instagram_posts | — | |
| instagram_reels | — | |
| instagram_comments | — | |
| tiktok_profile | — | |
| tiktok_posts | — | |
| tiktok_search | — | |
| tiktok_comments | — | |
| youtube_search | — | |
| youtube_video | — | |
| youtube_channel | — | |
| youtube_transcript | — |
Verificaciones automáticas
Ejecutado 12 nov 2026Informe completo →Pasó nuestras verificaciones automáticas. Esto no es una auditoría de seguridad: lee el código y dale al servidor el acceso más limitado que necesite. Cómo funcionan las verificaciones
- Repositorio de origen vinculado y accesibleAprobado
- Licencia de código abierto (OSI)Aprobado
- Commit o lanzamiento en el último añoAprobado
- El nombre del paquete no es similar a un paquete popularNo verificado
- El endpoint remoto usa HTTPSAprobado
- Las herramientas destructivas están etiquetadasAprobado
- Sin instrucciones ocultas para el modeloAprobado
- No hay avisos críticos en el paquete ni en sus dependenciasNo verificado
README
Ver en GitHubHasData MCP Server
Model Context Protocol server for HasData scraping and search APIs. Connect any MCP-compatible AI client to ready-to-use data tools across search, e-commerce, maps, travel, real estate, jobs and social, or pick a single site from the standalone servers.
Quick Start
Two ways to authenticate:
- OAuth (recommended). Connect the server and sign in with your HasData account in the browser — no key to copy around.
- API key. Send your key in the
x-api-keyheader. Get it from the HasData dashboard.
Claude Desktop / Claude.ai. Go to Settings → Connectors → Add custom connector and enter:
https://mcp.hasdata.com/mcp
You'll be prompted to sign in with OAuth. Prefer an API key? Add to claude_desktop_config.json instead:
{
"mcpServers": {
"hasdata": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp",
"headers": {
"x-api-key": "<your-api-key>"
}
}
}
}
Claude Code. With OAuth:
claude mcp add --transport http hasdata https://mcp.hasdata.com/mcp
claude mcp login hasdata
(or run /mcp inside a session and pick Authenticate). With an API key:
claude mcp add --transport http hasdata https://mcp.hasdata.com/mcp --header "x-api-key: <your-api-key>"
Cursor. Add to ~/.cursor/mcp.json or .cursor/mcp.json:
{
"mcpServers": {
"hasdata": {
"url": "https://mcp.hasdata.com/mcp",
"headers": {
"x-api-key": "<your-api-key>"
}
}
}
}
Cline. Add the hasdata server to your Cline MCP settings file:
{
"mcpServers": {
"hasdata": {
"url": "https://mcp.hasdata.com/mcp",
"type": "streamableHttp",
"headers": {
"x-api-key": "<your-api-key>"
},
"disabled": false
}
}
}
Any other MCP client that supports streamable HTTP:
| Field | Value |
|---|---|
| URL | https://mcp.hasdata.com/mcp |
| Transport | HTTP (streamable) |
| Auth | OAuth sign-in, or header x-api-key: <your-api-key> |
Requests without OAuth or a valid key return 401 Unauthorized.
Need fewer tools in your client? Limit the exposed APIs with the apis query parameter, e.g. https://mcp.hasdata.com/mcp?apis=amazon,google_maps. The apis key for every site is listed in One site per server.
What you can do with it
"Find the cheapest flights from NYC to London next month and compare prices."
"Monitor iPhone 16 prices on Amazon across the last 7 days."
"Pull all 5-star reviews for this product ASIN and summarize the common themes."
"Get me all software engineer job postings in Berlin from Indeed and Glassdoor."
"Find the top-rated Italian restaurants in Chicago using Google Maps."
"What are people searching for related to 'AI agents' on Google Trends this week?"
No scraping code. No proxies to manage. No parsing logic. Just ask.
Compatible clients
| Client | Supported |
|---|---|
| Claude Desktop | ✅ |
| Claude Code | ✅ |
| Claude.ai (web) | ✅ |
| Cursor | ✅ |
| Windsurf | ✅ |
| VS Code (GitHub Copilot) | ✅ |
| Gemini CLI | ✅ |
| Custom agents (OpenAI, LangChain, etc.) | ✅ |
Any client that supports the MCP streamable HTTP transport will work.
Tools
Tools across search, e-commerce, maps, travel, real estate, jobs, social, and more. Every group below also ships as standalone servers, one per site, with the same tools behind a shorter URL.
Web
| Tool | Description |
|---|---|
web_scraping_web_scraping |
Scrape any URL with optional parameters |
Standalone server for this group: web-scraping-mcp.
| Tool | Description |
|---|---|
google_serp_serp |
Google Search results |
google_serp_serp_light |
Google Search results (lightweight) |
google_serp_news |
Google News results |
google_serp_shopping |
Google Shopping results |
google_serp_events |
Google Events results |
google_serp_product |
Google product details |
google_serp_immersive_product |
Google immersive product details |
google_serp_ai_overview |
Google AI Overview results |
google_serp_ai_mode |
Google AI Mode results |
google_serp_short_videos |
Google Short Videos results (TikTok, Shorts, Reels) |
google_images_images |
Google Image Search results |
google_maps_search |
Google Maps search |
google_maps_place |
Place details by placeId |
google_maps_reviews |
Place reviews |
google_maps_photos |
Place photos |
google_maps_posts |
Place posts (offers, events, announcements) |
google_maps_contributor_reviews |
Reviews by contributor ID |
google_scholar_scholar |
Google Scholar search results |
google_scholar_cite |
Citation formats for a Scholar result |
google_scholar_case_law |
Full text of a Scholar case law opinion |
google_trends_search |
Google Trends data |
google_finance_finance |
Google Finance quote by ticker |
google_travel_flights |
Google Flights results |
google_travel_flights_deals |
Flight deals from a plain-language trip description |
google_travel_hotels |
Google Hotels results |
Standalone servers for this group: google-search-mcp (all google_serp_* tools), google-images-mcp, google-maps-mcp, google-scholar-mcp, google-trends-mcp, google-flights-mcp, google-flights-deals-mcp, google-hotels-mcp.
Other search engines
| Tool | Description |
|---|---|
bing_serp |
Bing Search results |
duckduckgo_serp |
DuckDuckGo Search results |
Standalone servers for this group: bing-mcp, duckduckgo-mcp.
AI answer engines
| Tool | Description |
|---|---|
chatgpt_chat |
ChatGPT answer with the web sources it cited |
perplexity_chat |
Perplexity answer with its citations |
gemini_chat |
Google Gemini answer with the web sources it cited |
Standalone server for this group: chatgpt-mcp.
E-commerce
| Tool | Description |
|---|---|
amazon_search |
Amazon search results |
amazon_product |
Amazon product details by ASIN |
amazon_reviews |
Amazon product reviews |
amazon_seller |
Amazon seller storefront profile |
amazon_seller_products |
Amazon seller catalog products |
walmart_search |
Walmart search results |
walmart_product |
Walmart product details |
walmart_reviews |
Walmart product reviews |
shopify_products |
Shopify store products |
shopify_collections |
Shopify store collections |
Standalone servers for this group: amazon-mcp, walmart-mcp, shopify-mcp.
Real Estate
| Tool | Description |
|---|---|
zillow_listing |
Zillow listing search |
zillow_property |
Zillow property details |
redfin_listing |
Redfin listing search |
redfin_property |
Redfin property details |
Standalone servers for this group: zillow-mcp, redfin-mcp.
Jobs
| Tool | Description |
|---|---|
indeed_listing |
Indeed job listings |
indeed_job |
Indeed job details |
glassdoor_listing |
Glassdoor job listings |
glassdoor_job |
Glassdoor job details |
Standalone servers for this group: indeed-mcp, glassdoor-mcp.
Travel & Local
| Tool | Description |
|---|---|
airbnb_listing |
Airbnb listings by location and dates |
airbnb_property |
Airbnb listing details |
booking_search |
Booking.com accommodation search |
booking_place |
Booking.com property details |
yelp_search |
Yelp search results |
yelp_place |
Yelp place details |
yelp_reviews |
Yelp place reviews |
yellowpages_search |
YellowPages search results |
yellowpages_place |
YellowPages place details |
tripadvisor_search |
Tripadvisor search for places |
tripadvisor_place |
Tripadvisor place details |
tripadvisor_reviews |
Tripadvisor place reviews |
Standalone servers for this group: airbnb-mcp, booking-mcp, yelp-mcp, yellowpages-mcp.
Social & Video
| Tool | Description |
|---|---|
facebook_profile |
Facebook public page or profile details |
instagram_profile |
Instagram public profile details |
instagram_posts |
Instagram public account posts |
instagram_reels |
Instagram public account reels |
instagram_comments |
Comments on an Instagram post |
tiktok_profile |
TikTok public profile details |
tiktok_posts |
TikTok account videos |
tiktok_search |
TikTok search for videos or users |
tiktok_comments |
TikTok video comments |
youtube_search |
YouTube search results |
youtube_video |
YouTube video details |
youtube_channel |
YouTube channel data |
youtube_transcript |
YouTube video transcript |
Standalone servers for this group: facebook-mcp, instagram-mcp, tiktok-mcp, youtube-mcp.
Prompts and resources
The server ships 20 prompts, ready-made workflows a client can offer instead of making the user compose a tool call.
| Prompt | What it does |
|---|---|
google_search |
Search Google and summarize the top organic results. |
google_news |
Find recent news coverage on a topic. |
google_shopping |
Compare product offers from Google Shopping. |
google_short_videos |
Find short videos about a topic. |
google_ai_mode |
Get Google AI Mode's answer with its sources. |
google_maps_search |
Find businesses and places on Google Maps. |
google_maps_reviews |
Summarize what reviewers say about a place. |
zillow_listings |
Find homes for sale, for rent or sold in an area. |
zillow_property |
Get the full details of one Zillow property. |
google_trends |
See how interest in a topic changes over time. |
instagram_profile |
Look up a public Instagram profile. |
scrape_web_page |
Fetch any public web page and summarize its content. |
indeed_hiring_map |
See where a role is being hired for and at what salary. |
youtube_search |
Find YouTube videos and channels about a topic. |
youtube_transcript |
Summarize what is said in a YouTube video. |
tiktok_trend |
See what is being posted on TikTok about a topic. |
tiktok_profile |
Look up a public TikTok profile. |
amazon_product_research |
Compare Amazon offers for a product by price, rating and review count. |
yelp_reputation |
Pull a business's rating and recent review themes. |
google_flights |
Compare flight options between two airports. |
Alongside them the server exposes 159 resources, one per parameter whose accepted values are a fixed list, across 30 services. Reading one is cheaper than learning the vocabulary from a rejected call, and it costs no credits. Each URI is hasdata://<service>/<parameter>, and resources/list returns the current set.
| Service | Parameters with a fixed list |
|---|---|
redfin |
30 |
booking |
16 |
zillow |
11 |
google_serp |
10 |
youtube |
10 |
amazon |
7 |
google_travel |
7 |
bing |
5 |
duckduckgo |
5 |
glassdoor |
5 |
google_images |
5 |
google_trends |
5 |
google_maps |
4 |
google_scholar |
4 |
google_travel_flights |
4 |
indeed |
4 |
google_travel_flights_deals |
3 |
walmart |
3 |
web_scraping |
2 |
yellowpages |
2 |
yelp |
2 |
amazon_reviews |
1 |
amazon_search |
1 |
facebook |
1 |
google_travel_hotels |
1 |
tiktok |
1 |
walmart_reviews |
1 |
walmart_search |
1 |
Both lists are served without an API key, so a client can read them before a user has signed up.
One site per server
If your agent only needs one site, use its standalone server instead of the full set. Each one is the same hosted endpoint filtered with the apis parameter, so the tools, the schemas and the billing are identical, and the model sees a short tool list. Every standalone server also ships as an npm and a PyPI package for clients that want a local stdio launcher, and is listed in the official MCP registry under com.hasdata/<name>.
| Site | Repository | npm | PyPI | apis key |
|---|---|---|---|---|
| Airbnb | airbnb-mcp | @hasdata/airbnb-mcp |
hasdata-airbnb-mcp |
airbnb |
| Amazon | amazon-mcp | @hasdata/amazon-mcp |
hasdata-amazon-mcp |
amazon |
| Bing | bing-mcp | @hasdata/bing-mcp |
hasdata-bing-mcp |
bing |
| Booking.com | booking-mcp | @hasdata/booking-mcp |
hasdata-booking-mcp |
booking |
| DuckDuckGo | duckduckgo-mcp | @hasdata/duckduckgo-mcp |
hasdata-duckduckgo-mcp |
duckduckgo |
| facebook-mcp | @hasdata/facebook-mcp |
hasdata-facebook-mcp |
facebook |
|
| Glassdoor | glassdoor-mcp | @hasdata/glassdoor-mcp |
hasdata-glassdoor-mcp |
glassdoor |
| Google Flights | google-flights-mcp | @hasdata/google-flights-mcp |
hasdata-google-flights-mcp |
google_travel_flights |
| Google Hotels | google-hotels-mcp | @hasdata/google-hotels-mcp |
hasdata-google-hotels-mcp |
google_travel_hotels |
| Google Images | google-images-mcp | @hasdata/google-images-mcp |
hasdata-google-images-mcp |
google_images |
| Google Maps | google-maps-mcp | @hasdata/google-maps-mcp |
hasdata-google-maps-mcp |
google_maps |
| Google Scholar | google-scholar-mcp | @hasdata/google-scholar-mcp |
hasdata-google-scholar-mcp |
google_scholar |
| Google Search | google-search-mcp | @hasdata/google-search-mcp |
hasdata-google-search-mcp |
google_serp |
| Google Trends | google-trends-mcp | @hasdata/google-trends-mcp |
hasdata-google-trends-mcp |
google_trends |
| Indeed | indeed-mcp | @hasdata/indeed-mcp |
hasdata-indeed-mcp |
indeed |
| instagram-mcp | @hasdata/instagram-mcp |
hasdata-instagram-mcp |
instagram |
|
| Redfin | redfin-mcp | @hasdata/redfin-mcp |
hasdata-redfin-mcp |
redfin |
| Shopify | shopify-mcp | @hasdata/shopify-mcp |
hasdata-shopify-mcp |
shopify |
| TikTok | tiktok-mcp | @hasdata/tiktok-mcp |
hasdata-tiktok-mcp |
tiktok |
| Walmart | walmart-mcp | @hasdata/walmart-mcp |
hasdata-walmart-mcp |
walmart |
| Web Scraping | web-scraping-mcp | @hasdata/web-scraping-mcp |
hasdata-web-scraping-mcp |
web_scraping |
| Yellow Pages | yellowpages-mcp | @hasdata/yellowpages-mcp |
hasdata-yellowpages-mcp |
yellowpages |
| Yelp | yelp-mcp | @hasdata/yelp-mcp |
hasdata-yelp-mcp |
yelp |
| YouTube | youtube-mcp | @hasdata/youtube-mcp |
hasdata-youtube-mcp |
youtube |
| Zillow | zillow-mcp | @hasdata/zillow-mcp |
hasdata-zillow-mcp |
zillow |
The remote URL for any of them is https://mcp.hasdata.com/mcp?apis=<key>, and keys can be combined with commas.
Why HasData
A lot of scraping APIs hand you back raw HTML and call it a day. With JavaScript-heavy sites, half of them just time out. HasData's tools return parsed JSON specific to each site, so the model gets structured fields it can actually work with, not a blob of markup to wade through.
A few things worth knowing before you start:
- Each tool is site-specific.
amazon_productknows about ASINs, variants, and seller data.google_maps_placeknows about hours, coordinates, and ratings. You're not calling a generic scraper and hoping for the best. - It's a remote server. Nothing runs locally. No Node process, no version pinning, no cold starts on your machine.
- Credits work the same as the REST API. If you're already a HasData customer, your existing balance and rate limits apply here too.
- Two ways to authenticate. Sign in once with OAuth, or send the
x-api-keyheader on every call — both work against the same endpoint.
Use cases
Competitive intelligence. Point amazon_search and google_serp_shopping at the same query and let the model compare pricing, ranking, and review counts across both. Runs in one prompt.
Lead generation. google_maps_search by keyword and city returns business names, addresses, phone numbers, and ratings. Stack it with yellowpages_search for broader coverage.
Market research. google_trends_search plus google_serp_news in the same session gives you both the search volume signal and the editorial context behind it.
Real estate. zillow_listing accepts filters for beds, baths, price range, and listing type. The model can pull a filtered list and summarize it without you touching a browser.
Recruiting. indeed_listing and glassdoor_listing both take location and keyword. Run both and the model can deduplicate and rank by recency.
Travel. google_travel_flights returns structured itineraries with prices, stops, and duration. Combine it with airbnb_listing for a full trip plan in one conversation.
Billing
Each tool call uses HasData credits the same way a direct API call would. See Credits and Concurrency for details.
Resources
Preguntas sobre HasData MCP
¿Cómo agrego HasData MCP a Claude Code?
Ejecuta claude mcp add --transport http hasdata-mcp https://mcp.hasdata.com/mcp en tu terminal. Añade --scope user para que esté disponible en todos los proyectos.
¿Cómo agrego HasData MCP a Cursor?
Abre ~/.cursor/mcp.json y añade el servidor en mcpServers, usando la configuración de Cursor que se muestra en la sección de instalación de arriba.
¿Qué herramientas proporciona HasData MCP?
Expone 74 herramientas, incluidas web_scraping_web_scraping, google_serp_serp, google_serp_serp_light, google_serp_news, google_serp_shopping.
How do I authenticate with the HasData MCP server?
You can sign in with OAuth using your HasData account, or send an API key in the x-api-key header.
Can I limit which APIs the server exposes?
Yes, use the apis query parameter to restrict exposed APIs, for example apis=amazon,google_maps.
What tools does the HasData MCP server offer?
It provides 74 tools across web scraping, Google search and maps, e-commerce, real estate, jobs, travel and social media platforms.
