{"name":"io.github.Raffaele86/seo-stack-mcp","slug":"raffaele86-seo-stack-mcp","title":null,"description":"The complete open-source SEO data stack for AI agents: 7 sources, 86 tools, one MCP server","url":"https://mcp.market/server/raffaele86-seo-stack-mcp","rating":null,"grade":"B","score":78,"certified":false,"status":"active","category":"seo","tags":["seo"],"presence":{"score":21,"stars":1,"forks":0,"downloads_week":46,"last_push_at":"2026-07-19T16:26:14.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Raffaele86/seo-stack-mcp","website":null,"version":"0.2.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"seo-stack-mcp","version":"0.2.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Path to a Google service-account JSON key (enables GSC + GA4)","name":"GOOGLE_APPLICATION_CREDENTIALS"},{"description":"Path to a Google OAuth desktop client secrets JSON (alternative to service account)","name":"SEO_STACK_OAUTH_CLIENT"},{"description":"Default GA4 property ID","name":"GA4_PROPERTY_ID"},{"description":"Default Search Console property (e.g. sc-domain:example.com)","name":"GSC_SITE_URL"},{"description":"AdSense account (accounts/pub-XXXX...) — enables AdSense tools on top of the Google credentials","name":"ADSENSE_ACCOUNT_ID"},{"description":"Reporting currency for AdSense tools (default USD)","name":"ADSENSE_CURRENCY"},{"description":"Bing Webmaster Tools API key (enables Bing tools)","isSecret":true,"name":"BING_WEBMASTER_API_KEY"},{"description":"Default Bing site URL","name":"BING_SITE_URL"},{"description":"Microsoft Clarity Data Export API token (enables Clarity tools)","isSecret":true,"name":"CLARITY_API_TOKEN"},{"description":"Google Ads developer token (enables Keyword Planner tools; needs the google-ads extra)","isSecret":true,"name":"GOOGLE_ADS_DEVELOPER_TOKEN"},{"description":"Google Ads OAuth client id","name":"GOOGLE_ADS_CLIENT_ID"},{"description":"Google Ads OAuth client secret","isSecret":true,"name":"GOOGLE_ADS_CLIENT_SECRET"},{"description":"Google Ads OAuth refresh token (adwords scope)","isSecret":true,"name":"GOOGLE_ADS_REFRESH_TOKEN"},{"description":"Google Ads customer id (10 digits)","name":"GOOGLE_ADS_CUSTOMER_ID"},{"description":"Manager account id, if the customer is under an MCC","name":"GOOGLE_ADS_LOGIN_CUSTOMER_ID"},{"description":"Open PageRank API key (enables the pagerank_score tool)","isSecret":true,"name":"OPENPAGERANK_API_KEY"}]}],"tools":[{"name":"adsense_alerts","description":"Active alerts on the AdSense account (severity, type, message).","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_by_ad_unit","description":"Performance per ad unit: earnings, impressions, clicks, CTR, eCPM.","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_by_country","description":"Revenue breakdown by country, sorted by earnings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_by_platform","description":"Revenue breakdown by device platform (Desktop, Mobile, Tablet).","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_compare_periods","description":"Compare two periods with percentage deltas on key metrics. Period 1 = current, period 2 = baseline. Dates in YYYY-MM-DD.","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_earnings_by_date","description":"Daily AdSense earnings with total, average and trend. Pass start_date/end_date (YYYY-MM-DD) or days (default 28).","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_earnings_overview","description":"AdSense earnings overview: estimated earnings, page views, impressions, clicks, RPM and CTR, aggregated over the last N days (default 28).","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_payments","description":"Recent payments on the AdSense account (date, amount, id).","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_sites","description":"Sites linked to the AdSense account (domain, state, auto-ads).","write_action":false,"price_micros":0,"input_schema":null},{"name":"adsense_top_pages","description":"Top URL channels by revenue (dimension: URL_CHANNEL_NAME). Requires URL channels configured in AdSense.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_crawl_issues","description":"URLs with crawl problems (4xx/5xx errors, redirects, etc.). site_url: site URL. limit: max results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_crawl_stats","description":"Bing crawl statistics: crawled pages, errors, redirects, etc. site_url: site URL (default: BING_SITE_URL env var).","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_keyword","description":"Bing impression volume for an exact query (impressions + broad). query: exact term. days: lookback period in days. Note: country must be lowercase (e.g. \"us\", not \"US\"); language is a locale code (e.g. \"en-US\").","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_keyword_stats","description":"Historical statistics for a keyword on Bing: impressions and trend. keyword: term to analyze. country: lowercase country code (e.g. \"us\"). language: locale code (e.g. \"en-US\").","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_link_counts","description":"Pages with the highest number of backlinks according to Bing. site_url: site URL (default: BING_SITE_URL env var).","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_pages_for_query","description":"Pages that rank for a specific query on Bing. query: search term to analyze.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_queries_for_page","description":"Search queries that drive traffic to a specific page. page: full page URL (e.g. https://example.com/some-page).","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_query_page_detail","description":"Detailed statistics for a specific query + page combination. query: search term. page: full page URL.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_query_traffic","description":"Daily traffic trend for a specific query on Bing. query: search term to analyze.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_related_keywords","description":"Keywords related to a search term on Bing, with impression data. keyword: seed term. days: lookback period in days.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_sitemaps","description":"List all sitemaps/feeds submitted to Bing. site_url: site URL (default: BING_SITE_URL env var).","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_sites","description":"List all sites verified in the Bing Webmaster Tools account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_submission_quota","description":"Check the URL submission quota for Bing. Shows the daily and monthly quotas (limits).","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_submit_sitemap","description":"Submit a new sitemap/feed to Bing. feed_url: sitemap URL (e.g. https://example.com/sitemap.xml).","write_action":true,"price_micros":0,"input_schema":null},{"name":"bing_submit_url","description":"Submit a URL to Bing for indexing. url: full URL to submit.","write_action":true,"price_micros":0,"input_schema":null},{"name":"bing_submit_urls_batch","description":"Submit a batch of URLs to Bing for indexing (max 500). urls: list of full URLs to submit.","write_action":true,"price_micros":0,"input_schema":null},{"name":"bing_top_pages","description":"Top pages on Bing with clicks, impressions and average position. site_url: site URL (default: BING_SITE_URL env var). limit: max results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_top_queries","description":"Top Bing search queries with clicks, impressions and average position. site_url: site URL (default: BING_SITE_URL env var). limit: max results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_traffic_stats","description":"Daily Bing traffic statistics: clicks and impressions over time. site_url: site URL. days: last N days to show.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_url_info","description":"Indexing status of a specific URL on Bing. url: full URL to check.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_url_links","description":"Inbound backlinks to a specific URL according to Bing. url: full URL to find backlinks for.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bing_url_traffic","description":"Traffic data for a specific URL on Bing. url: full URL to analyze.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_breakdown","description":"Free-form raw breakdown (1-3 dimensions). Power-user — costs 1 quota unit if not already cached.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_dead_clicks","description":"Top URLs with dead clicks (clicks on non-interactive elements — a UX problem signal).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_engagement","description":"Engagement Time + Scroll Depth per URL (or another dimension).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_excessive_scroll","description":"Top URLs with excessive scrolling (users hunting for info they can't easily find).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_popular_pages","description":"Top URLs by visits over the last days (Popular Pages metric, dimension=URL).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_quickback_clicks","description":"Top URLs with quickback clicks (user goes back immediately — page not relevant).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_quota_status","description":"Daily quota status (local counter, does not call the API).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_rage_clicks","description":"Top URLs with rage clicks (fast repeated clicks — user frustration).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_script_errors","description":"Top URLs with JS errors + error clicks (technical problems on the page).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clarity_traffic","description":"Traffic breakdown from Microsoft Clarity (sessions, bot %, pages per session).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_compare_periods","description":"Compare two periods with percentage delta on key metrics. Period 1 is the current period, Period 2 is the comparison (previous) one. Dates in YYYY-MM-DD format. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_conversion_paths","description":"User paths: acquisition source → landing page with sessions and users. Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_events","description":"Top GA4 events with count and number of users. Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_landing_pages","description":"Entry pages (landing pages) with sessions, users and bounce rate. Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_overview","description":"Site overview: users, sessions, pageviews, bounce rate, average session duration. Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_page_performance","description":"Detailed performance of a single page with device and source breakdown. page_path: page path (e.g. '/pricing'). Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_realtime","description":"Realtime report: pages currently being viewed and active users. No date parameters required. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_top_pages","description":"Top pages by traffic with full metrics (pageviews, users, duration, bounce rate). Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_traffic_sources","description":"Traffic breakdown by source/medium (e.g. google/organic, direct/none). Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ga4_user_demographics","description":"User demographics breakdown: country, device, browser, language. Dates in YYYY-MM-DD format or 'NdaysAgo', 'yesterday', 'today'. property_id: GA4 property ID (e.g. '123456789'); defaults to GA4_PROPERTY_ID env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_bulk_inspect_urls","description":"Inspect multiple URLs in batch via the URL Inspection API. Max 50 URLs per call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_bulk_request_indexing","description":"Request indexing for multiple URLs via the Google Indexing API. Max 50 URLs. WARNING: Google enforces a daily limit of ~200 requests. Requires the indexing scope.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_cannibalization_check","description":"Find queries where multiple pages compete (keyword cannibalization). Shows queries with 2+ ranking pages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_compare_periods","description":"Compare two periods: shows deltas of clicks, impressions, CTR and position per item. Useful for month-over-month or week-over-week comparisons.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_content_gap_analysis","description":"Content gap analysis: queries where the competitor ranks but you don't (or you are far behind). Requires the competitor property to be verified in your GSC account (e.g. another of your properties).","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_country_performance","description":"Performance by country: clicks, impressions, CTR and average position. Default: last 28 days.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_daily_stats","description":"Aggregated daily site statistics: clicks, impressions, CTR and average position per day.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_declining_queries","description":"Queries losing clicks/positions: compares last N days vs the equivalent previous period.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_delete_sitemap","description":"Remove a sitemap from Google Search Console. Requires write scope on the credentials.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gsc_device_performance","description":"Compare performance across MOBILE vs DESKTOP vs TABLET. Default: last 28 days.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_indexing_status_summary","description":"Indexing status summary for multiple URLs: how many indexed, not indexed, and errored.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_inspect_url","description":"Inspect a URL via the Google Search Console URL Inspection API.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_keyword_opportunities","description":"Queries with high impressions but low CTR in position 5-20: optimization opportunities. These keywords have visibility but don't get clicked — improve title/meta description.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_list_sitemaps","description":"List all sitemaps of a site in Google Search Console.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_list_sites","description":"List all Google Search Console properties available to the configured credentials.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_low_hanging_fruit","description":"Queries in position 3-10 with high impression volume: small optimizations can push them into the top 3. Sorted by potential extra clicks.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_page_trend","description":"Daily trend for a specific page over the last N days (default 90).","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_pages_for_query","description":"Which pages rank for a specific query? Shows all pages with performance data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_queries_for_page","description":"Which queries drive traffic to a specific page? Shows all keywords with performance data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_query_trend","description":"Daily trend for a specific query over the last N days (default 90).","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_request_indexing","description":"Request indexing of a URL via the Google Indexing API. Requires the indexing scope on the credentials.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_rising_queries","description":"Rising queries: compares last N days vs the equivalent previous period.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_search_analytics","description":"Query Search Analytics: clicks, impressions, CTR and position for the requested dimensions. Available dimensions: query, page, country, device, searchAppearance, date.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_search_analytics_filtered","description":"Search Analytics with advanced filters. Filters: query_contains, query_regex, page_contains, page_regex, country (e.g. 'ita'), device (MOBILE/DESKTOP/TABLET).","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_search_appearance","description":"Performance by SERP result type (rich snippet, video, FAQ, etc.). Default: last 28 days.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_submit_sitemap","description":"Submit a sitemap to Google Search Console. Requires write scope on the credentials.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gsc_top_pages","description":"Top pages by clicks or impressions. order_by: clicks, impressions, ctr, position. Default: last 28 days.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_top_queries","description":"Top queries by clicks or impressions. order_by: clicks, impressions, ctr, position. Default: last 28 days.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gsc_weekly_report","description":"Automatic weekly report: last 7 days vs previous 7 days metrics with deltas and top queries/pages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kp_historical_metrics","description":"REAL historical Keyword Planner metrics for a list of known keywords.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kp_keyword_ideas","description":"Keyword ideas with REAL Google Keyword Planner metrics.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kp_status","description":"Keyword Planner source status: google-ads library, credential completeness (masked) and a live connection test. Never fakes data: it states explicitly what is configured and what is not.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kp_suggest_geo_target","description":"Resolve a location name to its geo target constant ID (use the ID as location_id in the other kp_* tools).","write_action":false,"price_micros":0,"input_schema":null},{"name":"pagerank_score","description":"Domain authority score (0-10) via Open PageRank.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":78,"grade":"B","scanned_at":"2026-09-25T17:25:21.994Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T17:25:21.958Z","components":{"code":{"score":25,"max":25,"notes":["27 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 68 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"seo-stack-mcp","version":"0.2.0","found":true,"weeklyDownloads":46,"license":"MIT","dependencyCount":7,"publishedAt":"2026-07-19T04:55:54.543101Z","repositoryUrl":"https://github.com/Raffaele86/seo-stack-mcp"}],"repo":{"found":true,"owner":"Raffaele86","repo":"seo-stack-mcp","archived":false,"pushedAt":"2026-07-19T16:26:14Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/121450661?v=4","ownerCreatedAt":"2022-12-26T16:38:13Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/121450661?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":46,"license":"MIT","lastPushAt":"2026-07-19T16:26:14.000Z","score":21}}}},"grade_history":[],"reviews":[]}