github Python re-analysis due

psyb0t/rankrat

github

Read Search Console, Bing Webmaster, GA4 and PageSpeed data through one self-hosted MCP server.

maintainer
psyb0t
license
WTFPL
first seen
2026-08-03
last seen
2026-08-22
releases · 30d
13
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio · streamable-http · http verified reported listed in the official MCP registry counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit c942b75 · analyzer v33 · 3w ago

skills & prompt files 1

danger signals2

code evidence vv0.19.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 200

filesystem 83

  • fs (weak) psyb0t-rankrat-c942b75/scripts/generate_openapi.py :7 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/scripts/init_indexnow.py :7 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/scripts/run_live_http_image.py :9 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/scripts/verify_indexnow_public_key.py :8 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/cli.py :11 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/config.py :6 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/constants.py :5 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/logging.py :13 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/models/boundaries.py :8 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/models/common.py :8 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/operator/guided_setup.py :10 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/operator/indexnow.py :14 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/operator/site_onboarding.py :11 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/policy/boundaries.py :6 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/base.py :8 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/bing.py :13 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/clarity.py :10 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/cloudflare.py :8 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/cloudflare_performance.py :14 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/crux.py :10 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/google_analytics.py :9 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/google_analytics_admin.py :8 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/google_oauth.py :19 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/google_search_console.py :14 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/indexnow.py :7 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/lighthouse.py :9 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/providers/pagespeed.py :11 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/state/sqlite.py :16 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/transports/auth.py :8 from pathlib import Path
  • fs psyb0t-rankrat-c942b75/src/rankrat/transports/runtime.py :266 SQLiteStateRepository.open(settings.state_database, settings.state_retention_days)
  • fs (weak) psyb0t-rankrat-c942b75/tests/conftest.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/contract/test_http.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/contract/test_openapi_snapshot.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_google_account_discovery.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_google_oauth_operator.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_indexnow_operator.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_live_http_image.py :8 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_monitoring_state.py :7 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_runtime.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_site_onboarding.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_stdio_process.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/integration/test_upload_indexnow_export.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/security/test_cpython_stdlib_vex.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/security/test_regressions.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/operator/test_guided_setup.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/operator/test_indexnow.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/operator/test_monitoring.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/operator/test_site_onboarding.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_bing.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_clarity.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_cloudflare.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_cloudflare_edge_redirects.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_cloudflare_performance.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_crux.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_analytics.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_analytics_admin.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_analytics_admin_reads.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_indexing.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_oauth.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_search_console.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_site_verification.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_site_writes.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_sitemap_writes.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_tag_manager.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_indexnow.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_lighthouse.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_pagespeed.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/state/test_sqlite.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_bing_content_service.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_boundaries_and_models.py :8 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_cli.py :5 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_config_services_and_logging.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_google_analytics_service.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_google_indexing_service.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_google_search_console_service.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_google_site_service.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_google_sitemap_service.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_lighthouse_service.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_make_runtime.py :3 import shutil
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_openapi_source.py :4 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_openclaw_bridge.py :6 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_seo_platform_expansion.py :3 from pathlib import Path
  • fs (weak) psyb0t-rankrat-c942b75/tests/unit/test_site_audit_diagnostics.py :3 from pathlib import Path

shell / exec 5

  • shell (weak) psyb0t-rankrat-c942b75/tests/integration/test_indexnow_operator.py :4 import subprocess
  • shell (weak) psyb0t-rankrat-c942b75/tests/integration/test_live_http_image.py :5 import subprocess
  • shell (weak) psyb0t-rankrat-c942b75/tests/integration/test_upload_indexnow_export.py :3 import subprocess
  • shell (weak) psyb0t-rankrat-c942b75/tests/unit/test_make_runtime.py :4 import subprocess
  • shell (weak) psyb0t-rankrat-c942b75/tests/unit/test_openclaw_bridge.py :5 import subprocess

network 83

  • net (weak) psyb0t-rankrat-c942b75/scripts/run_live_http_image.py :12 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/models/boundaries.py :10 from urllib.parse import urlparse, urlunparse
  • net psyb0t-rankrat-c942b75/src/rankrat/operator/content_opportunities.py :9 from urllib.parse import urljoin
  • net psyb0t-rankrat-c942b75/src/rankrat/operator/indexnow.py :17 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/operator/internal_links.py :8 from urllib.parse import unquote, urljoin, urlsplit
  • net psyb0t-rankrat-c942b75/src/rankrat/operator/site_onboarding.py :12 from urllib.parse import urlparse
  • net psyb0t-rankrat-c942b75/src/rankrat/operator/site_ownership.py :7 from urllib.parse import urlparse
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/base.py :11 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/bing.py :14 from urllib.parse import urlparse
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/clarity.py :13 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/cloudflare.py :10 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/cloudflare_performance.py :16 from urllib.parse import urlsplit
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/connectivity.py :19 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/crux.py :12 from urllib.parse import urlsplit
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/dns.py :11 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/google_analytics.py :11 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/google_analytics_admin.py :10 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/google_oauth.py :21 from urllib.parse import parse_qs, urlencode, urlsplit
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/google_search_console.py :15 from urllib.parse import quote
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/google_site_verification.py :10 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/google_tag_manager.py :12 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/indexnow.py :9 from urllib.parse import unquote, urlparse, urlunparse
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/lighthouse.py :10 from urllib.parse import urlsplit
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/pagespeed.py :14 import httpx
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/schema_fetch.py :10 from urllib.parse import urlparse
  • net psyb0t-rankrat-c942b75/src/rankrat/providers/site_fetch.py :7 from urllib.parse import urlparse
  • net psyb0t-rankrat-c942b75/src/rankrat/services/bing.py :13 from urllib.parse import urlparse
  • net psyb0t-rankrat-c942b75/src/rankrat/services/cross_provider.py :8 from urllib.parse import urlsplit
  • net psyb0t-rankrat-c942b75/src/rankrat/services/edge_redirects.py :6 from urllib.parse import urlsplit
  • net psyb0t-rankrat-c942b75/src/rankrat/services/indexnow.py :11 from urllib.parse import quote, unquote, urlparse, urlunparse
  • net psyb0t-rankrat-c942b75/src/rankrat/services/site_audit.py :10 from urllib.parse import urljoin, urlparse
  • net psyb0t-rankrat-c942b75/src/rankrat/transports/mcp.py :10 from urllib.parse import unquote
  • net (weak) psyb0t-rankrat-c942b75/tests/conftest.py :7 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_bing_opportunity_matrix.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_cross_provider.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_free_seo_platform.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_ga4_search_console_comparison.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_google_account_discovery.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_google_analytics_admin.py :3 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_google_indexing.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_http.py :8 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_lighthouse.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_mcp.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_onboarding_guide.py :90 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_openapi_snapshot.py :7 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_pagespeed_core_web_vitals.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_search_engine_comparison.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_search_engine_traffic_health.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_seo_intelligence.py :8 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_seo_platform.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/contract/test_site_onboarding.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/integration/test_google_account_discovery.py :7 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/integration/test_google_oauth_operator.py :6 from urllib.parse import parse_qs, urlparse
  • net (weak) psyb0t-rankrat-c942b75/tests/integration/test_live_http_image.py :11 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/integration/test_runtime.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/integration/test_site_onboarding.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/security/test_regressions.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/operator/test_indexnow.py :8 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_base.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_bing.py :7 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_clarity.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_cloudflare.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_cloudflare_edge_redirects.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_cloudflare_performance.py :8 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_connectivity.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_crux.py :7 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_dns.py :3 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_analytics.py :7 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_analytics_admin.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_analytics_admin_reads.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_indexing.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_oauth.py :7 from urllib.parse import parse_qs, urlparse
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_search_console.py :7 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_site_verification.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_site_writes.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_sitemap_writes.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_google_tag_manager.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_indexnow.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_lighthouse.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_pagespeed.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_schema_fetch.py :6 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/providers/test_site_fetch.py :5 import httpx
  • net (weak) psyb0t-rankrat-c942b75/tests/unit/test_lighthouse_service.py :5 import httpx

secrets 1

  • secrets psyb0t-rankrat-c942b75/src/rankrat/operator/guided_setup.py :5 import getpass

database 2

  • db psyb0t-rankrat-c942b75/src/rankrat/state/sqlite.py :7 import sqlite3
  • db (weak) psyb0t-rankrat-c942b75/tests/integration/test_monitoring_state.py :3 import sqlite3

declared dependencies 9

  • mcp@==1.28.1
  • fastapi@==0.139.2
  • httpcore@==1.0.9
  • httpx@==0.28.1
  • pydantic@==2.12.5
  • pydantic-settings@==2.10.1
  • pyyaml@==6.0.3
  • starlette@==1.3.1
  • uvicorn@==0.35.0