{
  "name": "DASHR MCP Server — 🇬🇷 Greece",
  "version": "1.5.0",
  "country": "GR",
  "country_name": "Greece",
  "description": "Public read-only MCP server for the Greek social media & business intelligence database. NOT just TikTok — this is a MULTI-PLATFORM intelligence tool. 6,200+ Greek accounts (influencers, media, politicians, brands, podcasts). Call get_stats for the exact live count — never quote this figure as precise. DATA PER ACCOUNT: TikTok (followers, engagement, views, posts), Instagram (followers, posts, engagement rate, avg likes/comments), Facebook Page (followers, category, recent posts with reactions, email, website), YouTube (subscribers, views, videos), LinkedIn (followers, employees, industry). FOR BRANDS: company financials from GEMI (revenue, profit, assets, equity — iXBRL/PDF), Meta Ads (active campaigns, reach, demographics, payer, creatives from Facebook Ad Library), media campaigns (TV + digital tracking), brand news with sentiment, SimilarWeb website traffic, Diavgeia public decisions, board of directors. ALSO: Google Trends, X/Twitter Trends (hourly), live stream monitoring, ad tracking. Use get_creator to get ALL data for any account. Use get_ad_intelligence for Meta/Facebook ads. Use get_media_campaigns for TV/digital ad campaigns.",
  "protocol": "MCP Streamable HTTP (JSON-RPC 2.0 over HTTP POST)",
  "endpoint": "https://dashr.live/mcp",
  "discovery": "https://dashr.live/.well-known/mcp.json",
  "all_endpoints": {
    "GR": "https://dashr.live/mcp",
    "CZ": "https://dashr.live/mcp-cz",
    "AT": "https://dashr.live/mcp-at",
    "UK": "https://dashr.live/mcp-uk"
  },
  "usage": {
    "method": "POST",
    "content_type": "application/json",
    "accept": "application/json, text/event-stream",
    "authentication": {
      "required_for": "All tools EXCEPT get_capabilities, get_categories, get_stats",
      "method": "Pass token via the `x-dashr-token` HTTP header or `?token=` query param",
      "get_token": "https://dashr.live/account/mcp",
      "grace_period_until": "1970-01-01T00:00:00.000Z",
      "enforcement_active": true,
      "notes": "During the grace period (until 2026-06-04) calls without a valid token succeed but include a deprecation warning. After that date, gated tools return error -32001."
    },
    "example_init": {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "initialize",
      "params": {
        "protocolVersion": "2025-03-26",
        "capabilities": {},
        "clientInfo": {
          "name": "your-agent",
          "version": "1.0"
        }
      }
    }
  },
  "tools": [
    {
      "name": "get_capabilities",
      "description": "CALL THIS FIRST. Returns a complete guide to every DASHR tool and what data it provides. Essential for discovering the full power of the DASHR platform — social media analytics, company financials, advertising intelligence, website traffic (SimilarWeb visits/ranking for any Greek domain), news, trends. Now supports non-TikTok accounts (Instagram-only, YouTube-only). Start here to learn what tools are available.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "search_creators",
      "description": "Search Greek accounts (influencers, media, politicians, brands, podcasts) by keyword. Returns basic metrics (TikTok; accounts without TikTok activity show Instagram engagement or \"—\", never a TikTok 0 — see metrics_platform; missing or invalid TikTok engagement/likes/videos also show \"—\" with metrics_note). Trust score = the SAME calculation as dashr.live (TikTok-based when the TikTok engagement is reliably measured, otherwise Instagram-based if Instagram data exists — see trust_platform, which can differ from metrics_platform); trust_score null + trust_label \"N/A\" = no score (insufficient data), NOT a low score. Each result also carries `benchmark` = like rate vs PEERS, the SAME calculation as dashr.live, for the platform of the main metrics (TikTok when the account has TikTok activity, otherwise Instagram): \"<avg likes> likes ανά βίντεο/ανάρτηση · <x>% των ακολούθων · κάτω/κοντά/πάνω από τον μέσο όρο των <same account_type> <size band>\" (politicians are compared only with politicians, influencers with influencers). benchmark.status \"unknown\" (e.g. hidden likes) = no measurement, NOT below average. ⚡ IMPORTANT: For full cross-platform data (Instagram, Facebook, YouTube, LinkedIn, company financials, Meta Ads), use get_creator(username) on any result. 🚇 RELAY: if a DASHR tool you need is missing from your tool list (your catalogue may be cached from an older connection), you can still run it here: pass `dashr:run <tool_name> {\"param\":\"value\"}` as this parameter and the result of that tool is returned instead. Example: `dashr:run get_front_page {\"date\":\"2026-09-14\"}`. Call get_capabilities to see every available tool name.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "description": "Search keyword (matches username, display name, bio, category)"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max results (1-50, default 20)"
          },
          "include_non_tiktok": {
            "type": "boolean",
            "default": false,
            "description": "Include non-TikTok accounts (Instagram-only, YouTube-only, etc). Default: false (TikTok accounts only)"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_creator",
      "description": "THE MOST POWERFUL TOOL — get full cross-platform profile for any Greek account. Returns ALL data: TikTok + Instagram + Facebook + YouTube + LinkedIn metrics (accounts without TikTok activity show Instagram engagement or \"—\" in the main metric fields, never a TikTok 0 — see metrics_platform / metrics_note), AI analysis, trust score (same calculation as dashr.live — TikTok when the TikTok engagement is reliably measured, otherwise Instagram if Instagram data exists; trust_platform says which, and can differ from metrics_platform; trust_score null = \"χωρίς βαθμολογία\", not a low score; tiktok_eng_rate null = TikTok engagement missing or invalid, never 0; ig_avg_likes/ig_avg_comments/ig_eng_rate null = not measured; the thresholds quoted in trust_flags are internal scoring limits per size band, the same for every account type — NOT a peer average), like rate vs PEERS (same calculation as dashr.live: ig_like_rate + ig_benchmark for Instagram, benchmarks.{instagram,tiktok,x} for every platform — e.g. \"845 likes ανά ανάρτηση · 2,7% των ακολούθων · κάτω από τον μέσο όρο των πολιτικών 10–50 χιλ. (διάμεσος 3,9%)\"; peers = same account_type and size band, so politicians are compared only with politicians; status \"unknown\" = no measurement (e.g. hidden likes), never \"below average\"; ig_like_rate counts likes only, ig_eng_rate is likes+comments; similar_creators, category_top_creators and competitors_comparison rows carry `benchmark`), collaborations, ad tracking, competitors comparison. FOR BRANDS: company financials (revenue, profit, assets from GEMI/iXBRL), board of directors, Diavgeia decisions, Meta Ads (Facebook/Instagram ad campaigns), media campaigns (TV + digital), brand news with sentiment, Facebook Page posts. Use this whenever you need Instagram followers, Facebook data, YouTube subscribers, company financials, or any detailed information about an account. For Greek accounts: estimated audience demographics (gender, age, location, Greek regions) based on GWI research data and AI comment analysis.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Account username (without @ prefix). Returns multi-platform data: TikTok + Instagram + Facebook + YouTube + LinkedIn followers/posts, company financials, Meta Ads, brand news."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "list_creators",
      "description": "List and filter Greek accounts (6,200+ accounts). Filter by account_type, category, tier, engagement, followers. Returns basic metrics (TikTok; accounts without TikTok activity show Instagram engagement or \"—\", never a TikTok 0 — see metrics_platform; missing or invalid TikTok engagement/likes/videos also show \"—\" with metrics_note). Trust score = the SAME calculation as dashr.live (TikTok-based when the TikTok engagement is reliably measured, otherwise Instagram-based if Instagram data exists — see trust_platform, which can differ from metrics_platform); trust_score null + trust_label \"N/A\" = no score (insufficient data), NOT a low score. Each result also carries `benchmark` = like rate vs PEERS, the SAME calculation as dashr.live, for the platform of the main metrics (TikTok when the account has TikTok activity, otherwise Instagram): \"<avg likes> likes ανά βίντεο/ανάρτηση · <x>% των ακολούθων · κάτω/κοντά/πάνω από τον μέσο όρο των <same account_type> <size band>\" (politicians are compared only with politicians, influencers with influencers). benchmark.status \"unknown\" (e.g. hidden likes) = no measurement, NOT below average. ⚡ IMPORTANT: For full cross-platform data (Instagram, Facebook, YouTube, financials, Meta Ads), use get_creator(username) on any result.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sort": {
            "type": "string",
            "enum": [
              "followers",
              "engagement",
              "avg_views",
              "total_likes",
              "growth"
            ],
            "default": "followers",
            "description": "Sort field"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Max results (1-100, default 20)"
          },
          "category": {
            "type": "string",
            "description": "Filter by category (e.g. Food, Comedy, Travel)"
          },
          "account_type": {
            "type": "string",
            "description": "Filter by account type: influencer, media, politician, brand, podcast"
          },
          "tier": {
            "type": "string",
            "description": "Filter by tier (top, mega, mid, mini, people)"
          },
          "min_followers": {
            "type": "integer",
            "description": "Minimum follower count"
          },
          "min_engagement": {
            "type": "number",
            "description": "Minimum TikTok engagement rate (%) — only measured TikTok engagement of accounts with TikTok activity counts (the value shown in `engagement`); accounts without TikTok activity do not pass this filter"
          },
          "include_non_tiktok": {
            "type": "boolean",
            "default": false,
            "description": "Include non-TikTok accounts (Instagram-only, YouTube-only, etc). Default: false (TikTok accounts only)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_stats",
      "description": "Get database overview statistics for Greece (total creators, followers, engagement, categories, tiers)",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "search_companies",
      "description": "Αναζήτηση στο ελληνικό Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.) — 1.690.007 εταιρείες, 1.053.786 ενεργές. Ψάξε με ΑΦΜ, ΑΡ.ΓΕΜΗ, επωνυμία, ΚΑΔ ή νομό. Επιστρέφει νομική μορφή, κατάσταση, έδρα, κεφάλαιο, υποκαταστήματα — και σύνδεση με προφίλ DASHR όπου υπάρχει. Πηγή: Γ.Ε.ΜΗ.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Επωνυμία, ΑΦΜ (9 ψηφία) ή ΑΡ.ΓΕΜΗ. Αναγνωρίζεται αυτόματα."
          },
          "afm": {
            "type": "string",
            "description": "ΑΦΜ εταιρείας (9 ψηφία)"
          },
          "ar_gemi": {
            "type": "string",
            "description": "Αριθμός ΓΕΜΗ"
          },
          "kad": {
            "type": "string",
            "description": "ΚΑΔ ή πρόθεμά του (π.χ. 47 = λιανικό εμπόριο)"
          },
          "prefecture": {
            "type": "string",
            "description": "Νομός (π.χ. ΑΤΤΙΚΗΣ, ΘΕΣΣΑΛΟΝΙΚΗΣ)"
          },
          "legal_type": {
            "type": "string",
            "description": "ΑΕ | ΙΚΕ | ΕΠΕ | ΟΕ | ΕΕ | ΑΤΟΜΙΚΗ"
          },
          "include_inactive": {
            "type": "boolean",
            "default": false,
            "description": "Να περιληφθούν διαγραμμένες/πτωχευμένες. Προεπιλογή: μόνο ενεργές."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Πλήθος (1-100)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_company",
      "description": "Πλήρης καρτέλα εταιρείας από το Γ.Ε.ΜΗ. με ΑΡ.ΓΕΜΗ ή ΑΦΜ: ταυτότητα, έδρα, επικοινωνία, σκοπός, κεφάλαιο και μετοχές, ΟΛΕΣ οι δραστηριότητες (ΚΑΔ) με ιστορικό, υποκαταστήματα, πλήθος δημοσιευμένων εγγράφων — και οικονομικά στοιχεία (τζίρος, κέρδη, εργαζόμενοι) όπου έχουν εξαχθεί. Πηγή: Γ.Ε.ΜΗ.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ar_gemi": {
            "type": "string",
            "description": "Αριθμός ΓΕΜΗ"
          },
          "afm": {
            "type": "string",
            "description": "ΑΦΜ (9 ψηφία) — εναλλακτικά του ar_gemi"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_company_people",
      "description": "Εταίροι και διοίκηση μιας εταιρείας από το Γ.Ε.ΜΗ. — χωρισμένα σε ΙΔΙΟΚΤΗΣΙΑ (εταίροι με ποσοστά) και ΔΙΟΙΚΗΣΗ (ΔΣ, διαχειριστές), με ποιος δεσμεύει νομικά την εταιρεία μόνος ή από κοινού. Δέχεται ar_gemi/afm. Ανάστροφη αναζήτηση (σε ποιες εταιρείες συμμετέχει ένα πρόσωπο) απαιτεί ΠΛΗΡΕΣ ονοματεπώνυμο. Μόνο ρόλοι σε εταιρείες — κανένα άλλο προσωπικό στοιχείο. Πηγή: Γ.Ε.ΜΗ.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ar_gemi": {
            "type": "string",
            "description": "ΑΡ.ΓΕΜΗ — δίνει εταίρους και διοίκηση της εταιρείας"
          },
          "afm": {
            "type": "string",
            "description": "ΑΦΜ — το ίδιο με ar_gemi"
          },
          "person_name": {
            "type": "string",
            "description": "ΠΛΗΡΕΣ ονοματεπώνυμο (≥2 λέξεις) για ανάστροφη αναζήτηση. Μερικά ονόματα απορρίπτονται."
          },
          "include_former": {
            "type": "boolean",
            "default": false,
            "description": "Να περιληφθούν όσοι αποχώρησαν"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_industry",
      "description": "Ανάλυση κλάδου με βάση τον ΚΥΡΙΟ τρέχοντα ΚΑΔ — κάθε εταιρεία μετριέται μία φορά. Χωρίς παράμετρο: επισκόπηση όλων των κλάδων με πλήθος εταιρειών και μέσο κεφάλαιο. Με kad: οι μεγαλύτερες εταιρείες του κλάδου. Ομαδοποίηση σε 2/4/6/8 ψηφία, προαιρετικά ανά νομό. Πηγή: Γ.Ε.ΜΗ.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kad": {
            "type": "string",
            "description": "ΚΑΔ ή πρόθεμα. Χωρίς αυτό: επισκόπηση όλων των κλάδων."
          },
          "digits": {
            "type": "integer",
            "description": "Επίπεδο ομαδοποίησης: 2 (τομέας), 4 (κλάδος), 6, 8 (ειδικότητα)"
          },
          "prefecture": {
            "type": "string",
            "description": "Περιορισμός σε νομό"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Πλήθος (1-100)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_categories",
      "description": "Get all creator categories with counts and average metrics for Greece",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "niche_insights",
      "description": "Deep analytics for a specific niche/category in Greece — top creators, content types, benchmarks, brand activity",
      "inputSchema": {
        "type": "object",
        "properties": {
          "niche": {
            "type": "string",
            "minLength": 1,
            "description": "Niche or category to analyze (e.g. Food, Comedy, Travel, Beauty, Fitness)"
          }
        },
        "required": [
          "niche"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "suggest_creators_for_brief",
      "description": "Given a campaign brief (niche, budget, objective), returns ranked creator recommendations with reasoning, estimated reach, and collaboration tips. Uses multi-platform data (TikTok + Instagram + Facebook). Each suggestion carries `benchmark` = like rate vs PEERS (influencers of the same size; same calculation as dashr.live; display only — the ranking is unchanged).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "niche": {
            "type": "string",
            "minLength": 1,
            "description": "Campaign niche or industry (e.g. Food, Beauty, Fashion, Tech, Travel)"
          },
          "objective": {
            "type": "string",
            "enum": [
              "awareness",
              "engagement",
              "conversions",
              "content"
            ],
            "default": "engagement",
            "description": "Campaign objective: awareness (max reach), engagement (max interaction), conversions (brand-ready creators), content (best content quality)"
          },
          "budget": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "default": "medium",
            "description": "Budget tier: low (nano/micro), medium (mid-tier), high (mega/top)"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Max creators to suggest (1-20, default 10)"
          },
          "min_engagement": {
            "type": "number",
            "description": "Minimum TikTok engagement rate filter (%) — only measured TikTok engagement of accounts with TikTok activity counts; accounts without TikTok activity do not pass this filter"
          }
        },
        "required": [
          "niche"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_creator_intelligence",
      "description": "Get cached intelligence analysis for a creator — content analysis, comment sentiment, and video analysis results. ⚠️ Καλύπτει ΜΟΝΟ όσους έχουν περάσει από βαθιά ανάλυση περιεχομένου (λίγες εκατοντάδες). Ένα «no intelligence data» ΔΕΝ σημαίνει ότι η DASHR δεν ξέρει τον λογαριασμό — η περίληψη AI και τα βασικά στοιχεία υπάρχουν για χιλιάδες προφίλ στο get_creator.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "TikTok username (without @ prefix)"
          },
          "type": {
            "type": "string",
            "enum": [
              "content",
              "comments",
              "video",
              "all"
            ],
            "default": "all",
            "description": "Intelligence type: content, comments, video, or all"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_live_now",
      "description": "Get currently live Greek creators on TikTok — who is streaming right now with viewer counts, duration, and titles",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "get_google_trends",
      "description": "Get Google Trends — trending searches in Greece right now. Returns top 10 trending queries with search volume and categories. Supports historical data (up to 30 days).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Date in YYYY-MM-DD format (default: today)"
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 30,
            "default": 1,
            "description": "Number of days of history (1-30, default 1)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_live_history",
      "description": "Get TikTok live stream history — past lives for a specific creator or all recent lives today. Shows peak viewers, total viewers, new followers, duration, title, co-host, battle info. Use this to check who went live and what numbers they had.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "TikTok username — if provided, returns live history for that creator. If omitted, returns all recent lives."
          },
          "date": {
            "type": "string",
            "description": "Date in YYYY-MM-DD format (default: today)"
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 30,
            "default": 1,
            "description": "Number of days to look back (1-30, default 1)"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Max results (1-100, default 20)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_x_trends",
      "description": "Get X (formerly Twitter) trends in Greece — real-time trending topics, hashtags, and keywords from X/Twitter. DASHR tracks these hourly. Use this when asked about \"X trends\", \"Twitter trends\", \"τι γίνεται trend στο Twitter\", \"trending topics\". Periods: \"now\" (current top 50), \"24h\" (last 24h), \"7d\" (last 7 days), \"30d\" (last 30 days), \"month\" (current calendar month). Includes analytics labels and rank history.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "period": {
            "type": "string",
            "enum": [
              "now",
              "24h",
              "7d",
              "30d",
              "month"
            ],
            "default": "now",
            "description": "Period: \"now\" for current top 50, \"24h\" last 24 hours, \"7d\" last 7 days, \"30d\" last 30 days, \"month\" current calendar month"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_x_trend_intelligence",
      "description": "Deep intelligence on X/Twitter trending topics in Greece — persistence scores, peak rank, total appearances, streaks, and trend lifecycle analytics. Use when asked about \"ποιο trend αντέχει περισσότερο\", \"top persistent X trends\", \"trend leaderboard\", or drilling into a specific hashtag's history. Omit trend= for the full leaderboard; pass trend= for a single topic's analytics. Source: DASHR hourly X trend tracking.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_x_top_tweets",
      "description": "Top tweets from DASHR-tracked Greek X/Twitter accounts — most liked, most viewed, most retweeted, or most recent. Filter by tweet type (original/reply/quote/retweet) and look-back window (1-365 days). Use when asked about \"top tweets\", \"viral tweets Greece\", \"most liked tweets\", \"best X posts\". Permalink: https://x.com/<username>/status/<tweet_id>. Source: DASHR (refreshed every 12h).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "all",
              "media",
              "politician",
              "brand",
              "creator"
            ],
            "default": "all",
            "description": "Filter by account type"
          },
          "sort": {
            "type": "string",
            "enum": [
              "views",
              "likes",
              "retweets"
            ],
            "default": "views",
            "description": "Sort metric"
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 90,
            "description": "Look-back window in days"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_collaborations",
      "description": "ΚΑΘΕ tag ή αναφορά μάρκας από creator, δηλωμένη ή όχι — το ΕΥΡΥ στρώμα (~387K). Μόνο ~1% φέρει ρητή δήλωση. Για ΜΟΝΟ τις δηλωμένες πληρωμένες συνεργασίες, χρησιμοποίησε το get_creator_campaigns. Every brand tag or mention by a creator, whether or not disclosed as advertising. Pass a TikTok/IG/X username.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Creator handle (TikTok username, IG username, or X username). DASHR resolves it across platforms."
          },
          "month": {
            "type": "string",
            "description": "Optional YYYY-MM filter (e.g. \"2026-05\") — returns only collaborations from posts made in that month."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_greek_news_topics",
      "description": "Latest Greek news feed snapshot per topic (SPORTS/WORLD/TECHNOLOGY/BUSINESS/HEALTH/top-headlines/local). Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic": {
            "type": "string",
            "description": "Optional topic filter (case-insensitive): SPORTS, WORLD, TECHNOLOGY, BUSINESS, HEALTH, top-headlines, local. Omit to get the latest snapshot for every topic."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Max headlines to surface per topic (1-50). Default 10."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_news_for_profile",
      "description": "Greek news articles linked to a brand/profile (keyword-matched, relevance-scored), newest first, with sentiment. Pass a TikTok/IG/X username or display name. Αντλεί από το ΑΡΧΕΙΟ ανά παρακολουθούμενη μάρκα και καλύπτει πολλαπλάσια άρθρα από τις αυτόματες αντιστοιχίσεις του get_media_pulse — μη συγκρίνεις τα νούμερα των δύο.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Brand/creator handle (TikTok, IG, X, or display name). DASHR resolves it to a profile and returns the news articles linked to that profile."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 30,
            "description": "Look-back window in days over the article published date (1-365). Default 30."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Max articles to return (1-100). Default 25. Newest first."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_media_pulse",
      "description": "Media Pulse — brands/profiles ranked by how many Greek news articles mentioned them in a window, with sentiment tilt + latest headline. Optional account_type filter. ⚠️ Στηρίζεται στις ΑΥΤΟΜΑΤΕΣ αντιστοιχίσεις άρθρου↔προφίλ και δίνει πολύ μικρότερα πλήθη ανά μάρκα από το αρχείο. Για τα άρθρα ΕΝΟΣ προφίλ χρησιμοποίησε το get_news_for_profile· τα νούμερα των δύο εργαλείων ΔΕΝ συγκρίνονται.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 90,
            "default": 7,
            "description": "Look-back window in days (1-90). Default 7."
          },
          "account_type": {
            "type": "string",
            "description": "Optional filter on the profile account_type: brand, media, politician, personal, podcast. Omit for all types."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max profiles in the leaderboard (1-50). Default 20."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_outlet_leaderboard",
      "description": "Greek news outlet leaderboard. view='outlets' ranks sources by article volume; view='stories' ranks stories by outlet coverage.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "view": {
            "type": "string",
            "enum": [
              "outlets",
              "stories"
            ],
            "default": "outlets",
            "description": "'outlets' (default) ranks news outlets by article volume in the window. 'stories' ranks individual stories by how many outlets covered them."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 90,
            "default": 7,
            "description": "Look-back window in days (1-90). Default 7."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Max rows to return (1-100). Default 25."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_brand_radar",
      "description": "360° Brand Radar Score (0-100) for a Greek brand — coverage-aware across 6 pillars (buzz/sentiment, news/media, search/AI, advertising, business health, digital). Computed daily from DASHR data, no external API. Includes pillar breakdown + 14-day trend.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "minLength": 1,
            "description": "Brand handle/username (e.g. \"skroutz_official\", \"sephoragreece\")."
          }
        },
        "required": [
          "brand"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_facebook_content",
      "description": "Facebook reels & videos performance for a DASHR account — views/reactions/comments, top content, trends. Source DASHR.LIVE. Είναι το ΠΛΗΡΕΣ αρχείο Facebook· το get_posts_archive κρατά μικρό μόνο κλάσμα των αναρτήσεων FB.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR account username/handle (e.g. \"mancity\"). The Facebook page is resolved from influencers.fb_page_url."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_youtube_content",
      "description": "YouTube videos performance for a DASHR account — views, likes, comments, top videos, latest videos, and daily channel history trend. Resolved via influencers.yt_channel_id. Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR account username/handle (e.g. \"pewdiepie\"). The YouTube channel is resolved from influencers.yt_channel_id."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_linkedin_content",
      "description": "LinkedIn posts performance for a DASHR account — total & average engagement (likes+comments+shares), breakdown by content type (post/article/video/image), top posts by engagement and latest posts. Archived from li_content (no external API at read time). LinkedIn does not expose per-post views. Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR account username/handle (e.g. \"megatvnews\"). LinkedIn posts resolved from influencers.li_company_id / li_urn."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ig_stories",
      "description": "Instagram Stories intelligence for a DASHR account — permanent archive of ephemeral 24h stories. Covers cadence heatmap (day-of-week × hour), photo vs video mix, sticker usage (links/location/music/polls/questions), collab/mention network (sponsor tags via ig_story detected_via), link destinations (campaign URLs), location geography, and recent timeline. No views/reach — strategy reverse-engineering only. Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR account username/handle (e.g. \"olympiakosbc\"). The IG user_id is resolved from influencers.ig_user_id."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_tiktok_activity",
      "description": "TikTok activity intelligence for a Greek DASHR account — ephemeral Stories archive (with @mention/collab network via tiktok_story detected_via), Reposts (content the account amplifies, grouped by author), and Liked posts (taste/engagement signal, only when the account keeps likes public). Optional kind=stories|reposts|liked (default all). Read-only local archive, no external API at read time. Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR account username/handle (e.g. \"trannos.west\")."
          },
          "kind": {
            "type": "string",
            "enum": [
              "all",
              "stories",
              "reposts",
              "liked"
            ],
            "description": "Which slice to return (default \"all\")."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_market_jobs",
      "description": "GREEK JOB MARKET — job postings across the WHOLE Greek market via JSearch (Kariera.gr, Skywalker, Randstad.gr, Jooble and more), NOT limited to companies in the DASHR database. Per posting: title, employer (as TEXT), employer website, publisher, employment type, remote flag, location, apply link, full description. Set employers_only=true for a \"who is hiring in Greece\" leaderboard. IMPORTANT: this is DIFFERENT from get_linkedin_jobs (which covers DASHR companies via LinkedIn). The employer is free text and matched_username is only filled after human review — never assume an employer equals a DASHR profile. The source gives only relative posting time; use first_seen_at for chronology. Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Αναζήτηση σε τίτλο ή εργοδότη (μερική αντιστοίχιση)."
          },
          "employer": {
            "type": "string",
            "description": "Φίλτρο εργοδότη (μερική αντιστοίχιση)."
          },
          "remote_only": {
            "type": "boolean",
            "default": false,
            "description": "Μόνο θέσεις τηλεργασίας."
          },
          "new_since_days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 90,
            "description": "Μόνο όσες πρωτοεμφανίστηκαν τις τελευταίες N ημέρες."
          },
          "employers_only": {
            "type": "boolean",
            "default": false,
            "description": "Επιστρέφει ΚΑΤΑΛΟΓΟ ΕΡΓΟΔΟΤΩΝ με πλήθος αγγελιών αντί για αγγελίες — χρήσιμο για «ποιος προσλαμβάνει στην Ελλάδα»."
          },
          "include_closed": {
            "type": "boolean",
            "default": false,
            "description": "Και όσες έκλεισαν."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Μέγιστα αποτελέσματα."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_job_market",
      "description": "GREEK LABOUR MARKET OVERVIEW — aggregated statistics published on https://dashr.live/digital-greece. Sections: workplace (remote/hybrid/on-site split, LinkedIn-based), roles (most in-demand standardised roles with median monthly salary where reliable), employment (full-time/part-time split), publishers (which job board hosts the most Greek listings). IMPORTANT: the remote/hybrid split comes ONLY from LinkedIn because JSearch does not flag remote jobs for Greece (310/310 marked on-site, and its work_from_home filter returns zero) — a remote percentage from JSearch would describe the provider, not the market. Deliberately does NOT return an employer leaderboard: the top JSearch employers are job boards and placeholder labels. For individual postings use get_market_jobs or get_linkedin_jobs. Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "section": {
            "type": "string",
            "enum": [
              "all",
              "workplace",
              "roles",
              "employment",
              "publishers"
            ],
            "default": "all",
            "description": "Ποιο τμήμα: workplace (τηλεργασία/υβριδικό/στον χώρο), roles (ζητούμενες ειδικότητες), employment (τύπος απασχόλησης), publishers (πού δημοσιεύονται), ή all."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 15,
            "description": "Μέγιστες γραμμές ανά πίνακα."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_salary_benchmark",
      "description": "GREEK SALARY BENCHMARKS — median monthly pay by standardised ROLE and CITY (Athens, Thessaloniki, Patras, Heraklion, Larissa). Source: Glassdoor via JSearch, refreshed monthly, archived with history. Each entry carries sample_size and confidence; reliable=true means sample >=10 AND high confidence. median_monthly_eur is ALWAYS normalised to a month (the source mixes monthly and yearly figures). IMPORTANT: this is a MARKET benchmark by role+city — NOT the salary of a specific job posting and NOT per-company (per-company salary is unavailable for Greek employers). Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "description": "Ρόλος — ελληνικά ή αγγλικά, μερική αντιστοίχιση (π.χ. \"developer\", \"Λογιστής\")."
          },
          "city": {
            "type": "string",
            "description": "Πόλη: athens, thessaloniki, patras, heraklion, larissa."
          },
          "reliable_only": {
            "type": "boolean",
            "default": true,
            "description": "Μόνο δείκτες με δείγμα ≥10 και υψηλή εμπιστοσύνη (προεπιλογή: ναι)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 50,
            "description": "Μέγιστα αποτελέσματα."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_linkedin_jobs",
      "description": "LinkedIn JOB POSTINGS for Greek companies — permanent DASHR archive (li_jobs), append-only, no external API at read time. Per job: title, location, workplace type (On-site/Hybrid/Remote), employment status, seniority level, job functions, industries, benefits, salary when disclosed, full description, apply URL, expiry. Three modes: username=X → that company's postings + stats; new_since_days=N → NEWLY DISCOVERED postings across ALL companies (hiring signals); trend=true → hiring index (open postings per day, or leaderboard of most actively hiring companies). IMPORTANT: posted_at is the TRUE first publication; relisted_at changes every time LinkedIn re-promotes the ad; first_seen_at is when DASHR first saw it — that is what defines \"new\". Source DASHR.LIVE",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "DASHR username (χωρίς @) για τις αγγελίες μιας συγκεκριμένης μάρκας."
          },
          "new_since_days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 90,
            "description": "Επιστρέφει ΝΕΕΣ αγγελίες (πρώτη εμφάνιση) των τελευταίων N ημερών σε ΟΛΕΣ τις μάρκες. Αγνοεί το username."
          },
          "trend": {
            "type": "boolean",
            "default": false,
            "description": "Δείκτης προσλήψεων: πλήθος ανοιχτών αγγελιών ανά ημέρα. Με username = μία μάρκα, χωρίς = οι πιο ενεργές."
          },
          "include_closed": {
            "type": "boolean",
            "default": false,
            "description": "Να συμπεριληφθούν και αγγελίες που έκλεισαν."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 25,
            "description": "Μέγιστα αποτελέσματα."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_content_breakdown",
      "description": "Per-platform content count AND average engagement per content type (photos/videos/reels/posts) for a Greek account over 30/60/180/365 days. Instagram (photos/videos+stories), TikTok (videos), Facebook (reels/videos), YouTube (videos), LinkedIn (posts). Each type carries count + *_eng (avg interactions/post) + where available *_views. Facebook/YouTube/LinkedIn archived (accurate); Instagram/TikTok recent snapshots. For per-post detail use get_facebook_content/get_youtube_content/get_linkedin_content. Pass a DASHR username. Source DASHR.LIVE. ⚠️ Τα πλήθη βγαίνουν από στήλη-ΣΤΙΓΜΙΟΤΥΠΟ με λίγες πρόσφατες αναρτήσεις — ΔΕΝ είναι ο συνολικός αριθμός αναρτήσεων της περιόδου. Για πραγματικά πλήθη χρησιμοποίησε το get_posts_archive ή το ανά πλατφόρμα εργαλείο.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR account username/handle (e.g. \"chefantonis\"). Case-insensitive, leading @ stripped."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_brand_serp",
      "description": "Google organic SERP visibility for a Greek brand — best organic position (gl=gr/hl=el), top competitors, knowledge panel, position-history sparkline, related-keyword cloud. Captured daily by DASHR. Pass a brand handle or name.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "minLength": 1,
            "description": "Brand handle/username or display name (e.g. \"skroutz_official\", \"Skroutz\", \"sephoragreece\"). DASHR resolves it to a profile and returns its Google SERP visibility."
          },
          "history_days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 180,
            "default": 30,
            "description": "Look-back window (days) for the position history sparkline (1-180). Default 30."
          },
          "keyword_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max related keywords to return from the latest capture (1-50). Default 20."
          },
          "cycle": {
            "type": "string",
            "description": "Optional captured_date (YYYY-MM-DD) to view a specific past SERP snapshot instead of the latest. Available dates are listed in the \"editions\" array."
          }
        },
        "required": [
          "brand"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ai_visibility",
      "description": "Is a Greek brand mentioned/cited inside the Google AI Overview answer? Latest snapshot + history + mentioned/cited rates. Pass a brand handle. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "minLength": 1,
            "description": "Brand handle/username (e.g. \"skroutz_official\"). DASHR resolves it to its AI-visibility tracking."
          },
          "engine": {
            "type": "string",
            "enum": [
              "ai_overview",
              "ai_mode"
            ],
            "description": "AI engine to read (default ai_overview = Google AI Overview)."
          }
        },
        "required": [
          "brand"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ai_citation_leaderboard",
      "description": "Which domains the Greek Google AI Overview cites most across DASHR-tracked brand/category queries (citation-share leaderboard, best_rank). Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "description": "Lookback window in days (default 30)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "How many cited domains to return (default 25)."
          },
          "engine": {
            "type": "string",
            "enum": [
              "ai_overview",
              "ai_mode"
            ],
            "description": "AI engine (default ai_overview)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_who_owns_ai",
      "description": "For a brand category, which DASHR brands the Greek Google AI Overview currently mentions/cites (who owns the AI answer). Source: DASHR Live Analytics. ⚠️ ΜΟΝΟ το Google AI Overview — ΟΧΙ Gemini/Claude/Perplexity. Για κατάταξη σε ΟΛΕΣ τις μηχανές χρησιμοποίησε το get_ai_visibility_leaderboard· για μία μάρκα, το get_ai_visibility.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "minLength": 1,
            "description": "Brand category in Greek/English as used by DASHR (e.g. \"Beauty\", \"Food\", \"Automotive\"). Matches the AI query \"καλύτερο <category> brand Ελλάδα\"."
          },
          "engine": {
            "type": "string",
            "enum": [
              "ai_overview",
              "ai_mode"
            ],
            "description": "AI engine (default ai_overview)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Max brands to return (default 30)."
          }
        },
        "required": [
          "category"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ai_visibility_leaderboard",
      "description": "Rank Greek brands in a category by AI Visibility Score (mentioned% of each brand’s latest cycle across Gemini/Claude/Google AI/Perplexity). Pass a category (e.g. Beauty, Food) or leave empty for cross-category top + list of available categories. Source: DASHR Live Analytics. Καλύπτει ΚΑΙ ΤΙΣ ΤΕΣΣΕΡΙΣ μηχανές· το get_who_owns_ai δείχνει ΜΟΝΟ το Google AI Overview.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Brand category as used by DASHR (e.g. \"Beauty\", \"Food\", \"Fashion\", \"Business\", \"Sports\"). Leave empty for a cross-category top list. Categories that actually have data are returned in \"categories\"."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Max brands to return (default 30)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ai_visibility_compare",
      "description": "Head-to-head AI Visibility comparison of two Greek brands across Gemini + Claude + Google AI Overview + Perplexity (mentioned/cited %, per-engine, per-question side-by-side, winner). Pass brand + vs handles. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "minLength": 1,
            "description": "First brand handle/username (e.g. \"skroutz_official\")."
          },
          "vs": {
            "type": "string",
            "minLength": 1,
            "description": "Second brand handle/username to compare against (the competitor)."
          }
        },
        "required": [
          "brand",
          "vs"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_greece_now",
      "description": "Greece Now — what is hot in Greece now, uniting X/Twitter trends + Google Trends + Greek news into one dashboard with a Hotness Score 0-100 (a topic in >=2 sources gets a boost, cross_source=true). Pass trend= for Trend Anatomy. Read-only from DASHR data, no external call.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "trend": {
            "type": "string",
            "description": "Optional. If set, returns the Trend Anatomy dossier for THIS topic (its Greek news, related searches, representative tweets, and which live sources it appears in). Omit for the unified Greece Now dashboard."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Max hot topics to return in dashboard mode (default 25)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_news_sov",
      "description": "News Share-of-Voice from brand_news (same source as site UI). Two modes: (1) brands=comma-separated handles for explicit comparison; (2) account_type=politician/brand/media for auto-discovery of all influencers of that type. Returns article_count, sentiment split, sov_pct. Source: DASHR Live Analytics. ⚠️ Άλλη πηγή από το get_media_pulse (αρχείο ανά μάρκα vs αυτόματες αντιστοιχίσεις) — οι δύο κατατάξεις ΔΕΝ συγκρίνονται.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brands": {
            "type": "string",
            "description": "Comma-separated brand handles OR Greek/Latin display names to compare, e.g. \"skroutz_official,public_gr\" or \"Γεωργιάδης,Κυριάκος Μητσοτάκης\". Names are resolved to the underlying handle automatically. 2-50 entries. When omitted, account_type auto-discovery is used."
          },
          "account_type": {
            "type": "string",
            "description": "Auto-discover all influencers of this type (politician, brand, media, personal, podcast). Used only when brands is not provided. Default: politician."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 30,
            "description": "Look-back window in days (1-365). Default 30."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 50,
            "description": "Max profiles to return in auto-discovery mode (1-200). Default 50. Ignored when brands= is explicit."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_daily_brief",
      "description": "DASHR Daily Greek Brief — journalist-style summary of Greek current affairs (politics, economy, sports, society, X buzz, weather), built only from DASHR data, published 3×/day. Returns plain Greek prose in \"content\" (and \"speakable_text\", cleaned for voice) that you can READ ALOUD to the user if they ask to hear it (use your TTS / voice output). Optional date=YYYY-MM-DD and slot (0=morning/1=noon/2=evening) for any past edition; \"editions\" lists the full stored history. Generated by Claude + DASHR AI. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Optional YYYY-MM-DD to fetch that day's brief. Omit for the latest brief."
          },
          "slot": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2,
            "description": "Optional edition of the day: 0=morning (Πρωινό), 1=noon (Μεσημεριανό), 2=evening (Βραδινό). Requires date. Omit for the latest edition."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_content_gap",
      "description": "Content Gap Finder for a Greek brand — related search keywords around the brand that it does NOT yet cover in its own news article titles → content ideas. Pass a brand handle. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "minLength": 1,
            "description": "Brand handle/username (e.g. \"skroutz_official\"). DASHR finds related keywords it does not yet cover."
          }
        },
        "required": [
          "brand"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_brand_creators",
      "description": "Reverse: creators who tagged a brand (each tagged post with creator + paid flag + date). Pass a brand handle/name. Καλύπτει ΚΑΘΕ tag προς τη μάρκα, δηλωμένο ή όχι — το ΕΥΡΥ στρώμα. Για ΜΟΝΟ τις δηλωμένες πληρωμένες συνεργασίες της μάρκας, χρησιμοποίησε το get_creator_campaigns.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string",
            "minLength": 1,
            "description": "Brand handle or name (e.g. \"geely_greece\", \"Geely\"). DASHR matches by handle across platforms or by display name."
          },
          "month": {
            "type": "string",
            "description": "Optional YYYY-MM filter (e.g. \"2026-05\") — returns only creators who tagged the brand in that month."
          }
        },
        "required": [
          "brand"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_news_propagation",
      "description": "Χρονογραμμή διάδοσης μιας ελληνικής είδησης: ποιο μέσο εμφανίστηκε πρώτο, ποια ακολούθησαν, με πόση διαφορά. Δώσε λέξεις-κλειδιά στα ελληνικά. Κάθε γραμμή έχει βαθμίδα βεβαιότητας ώρας, και το verdict ΑΡΝΕΙΤΑΙ να ανακηρύξει πρώτο όταν δεν τεκμηριώνεται (αβέβαιη ώρα, κοινή πηγή, ή διαφορά μικρότερη από το 10λεπτο βήμα δειγματοληψίας). 16 μέσα με προβληματικό feed δεν διεκδικούν πρωτιά αλλά παραμένουν ορατά. ΜΕΤΑΦΕΡΕ ΠΑΝΤΑ την επιφύλαξη του verdict στον χρήστη. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "description": "Λέξεις-κλειδιά της είδησης στα ελληνικά, π.χ. \"απεργία ΜΜΜ\" ή \"τιμές σούπερ μάρκετ\". Ψάχνει στους τίτλους των ιστοριών των τελευταίων 3 ημερών."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "default": 1,
            "description": "Πόσες ιστορίες να επιστραφούν (1-5). Default 1."
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_outlet_speed",
      "description": "Πόσο γρήγορο είναι ένα ελληνικό μέσο: σε πόσες ιστορίες εμφανίστηκε πρώτο και πόσα λεπτά πίσω από τον πρώτο κατά μέσο όρο. Περιλαμβάνει την ΥΓΕΙΑ ΤΟΥ ΡΟΛΟΓΙΟΥ του (9 ελληνικά μέσα στέλνουν λάθος ζώνη ώρας) και αν είναι επιλέξιμο για κατατάξεις πρωτιάς. Αν eligible_for_first_place=false, ΜΗΝ το παρουσιάσεις ως γρήγορο ή αργό — η ώρα του δεν μετριέται αξιόπιστα. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "outlet": {
            "type": "string",
            "minLength": 3,
            "description": "Domain του μέσου, π.χ. \"protothema.gr\" ή \"in.gr\"."
          }
        },
        "required": [
          "outlet"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_first_publisher_leaderboard",
      "description": "Ποια ελληνικά μέσα βγάζουν πιο συχνά πρώτα τις ειδήσεις (τελευταίες 3 ημέρες). ⚠️ ΔΕΝ είναι επίσημη κατάταξη ταχύτητας: «πρώτο» σημαίνει «πρώτο εντοπίστηκε», όχι «έσπασε την είδηση» — site που αναδημοσιεύει δελτίο τύπου σε δευτερόλεπτα βγαίνει πρώτο χωρίς ρεπορτάζ. ΑΝΑΦΕΡΕ ΤΟ ΠΑΝΤΑ. Τα μέσα με προβληματικό feed επιστρέφονται χωριστά στο excluded_from_ranking. ➡️ «Ποιο μέσο είναι το ΚΑΛΥΤΕΡΟ/γρηγορότερο συνολικά;» → **get_media_scores** (σταθμίζει τις πρωτιές με το αν τις ΑΚΟΛΟΥΘΗΣΕ κανείς — χωρίς αυτό, επαρχιακό site με 941 πρωτιές που δεν πήρε κανείς βγαίνει «πρώτο»). ➡️ «Πόσο γρήγορο είναι το ΣΥΓΚΕΚΡΙΜΕΝΟ μέσο Χ;» → **get_outlet_speed**. Αυτό εδώ μετράει ΣΥΧΝΟΤΗΤΑ πρωτιάς, τίποτε άλλο. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "min_stories": {
            "type": "integer",
            "minimum": 20,
            "maximum": 100,
            "default": 20,
            "description": "Ελάχιστες ιστορίες για να μπει ένα μέσο στην κατάταξη. ΔΕΝ επιτρέπεται κάτω από 20: μέσο με 3 ιστορίες μπορεί να δείχνει 100% πρωτιές και να μη σημαίνει τίποτα."
          },
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 50,
            "default": 15,
            "description": "Πόσα μέσα (3-50). Default 15."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_outlet_influence",
      "description": "Ποια ελληνικά μέσα ΑΚΟΛΟΥΘΕΙ η αγορά όταν βγάζουν πρώτα μια είδηση (τελευταίες 3 ημέρες). ΔΙΑΦΕΡΕΙ από το get_first_publisher_leaderboard: εκείνο μετράει ΠΟΙΟΣ ΒΓΑΙΝΕΙ ΠΡΩΤΟΣ, αυτό μετράει ΑΝ ΤΟΝ ΑΚΟΛΟΥΘΟΥΝ. Site που αναδημοσιεύει δελτία τύπου βγαίνει συχνά πρώτο χωρίς να το ακολουθεί κανείς· μέσο με ρεπορτάζ βγαίνει σπανιότερα πρώτο αλλά η αγορά το αναπαράγει. Μετράει ΣΥΝΕΜΦΑΝΙΣΗ, όχι αιτιότητα — ΑΝΑΦΕΡΕ ΤΟ. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "min_stories": {
            "type": "integer",
            "minimum": 20,
            "maximum": 100,
            "default": 20,
            "description": "Ελάχιστες πρωτιές για να μπει ένα μέσο στην κατάταξη. ΔΕΝ επιτρέπεται κάτω από 20."
          },
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 50,
            "default": 15,
            "description": "Πόσα μέσα (3-50). Default 15."
          },
          "window_minutes": {
            "type": "integer",
            "minimum": 30,
            "maximum": 1440,
            "default": 120,
            "description": "Παράθυρο «ακολούθησαν» σε λεπτά. Default 120 (2 ώρες)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_media_scores",
      "description": "Κατάταξη ελληνικών ΜΜΕ με ΠΟΝΤΟΥΣ, όχι ποσοστά. Κάθε ιστορία παίρνει αξία (πόσα ανεξάρτητα μέσα την πήραν, πόσο γρήγορα, πόσο κράτησε) και το μέσο παίρνει μερίδιο ανάλογα με τον ρόλο του (πρώτος / ακολούθησε σε 2h / σε 24h / αργότερα). 🔑 ΚΑΝΟΝΑΣ ΕΠΑΡΧΙΑΚΟΥ: μικρό site που βγάζει σκουπ παίρνει ΤΟΥΣ ΙΔΙΟΥΣ πόντους με μεγάλο — αλλά η πρωτιά μετράει ΜΟΝΟ αν η είδηση διαδόθηκε. Το hit_rate_pct δείχνει τι ποσοστό των πρωτιών έγινε πραγματικά είδηση (μέσος όρος αγοράς ~12%). ΔΙΑΦΕΡΕΙ από get_outlet_influence: εκείνο μετράει πόσοι ακολουθούν, αυτό βαθμολογεί τη συνολική συνεισφορά. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 50,
            "default": 15,
            "description": "Πόσα μέσα (3-50). Default 15."
          },
          "min_stories": {
            "type": "integer",
            "minimum": 5,
            "maximum": 200,
            "default": 10,
            "description": "Ελάχιστες ιστορίες συμμετοχής. Default 10."
          },
          "outlet": {
            "type": "string",
            "description": "Προαιρετικά: ένα συγκεκριμένο domain μέσου."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_news_terms",
      "description": "Τι ΘΕΜΑΤΑ γράφουν αυτή τη στιγμή τα ελληνικά ΜΜΕ — οι όροι που κυριαρχούν στους τίτλους, με πλήθος άρθρων, πόσα διαφορετικά μέσα τους γράφουν, και αν ΑΝΕΒΑΙΝΟΥΝ. Τα άλλα εργαλεία ειδήσεων απαντούν «ποιο ΜΕΣΟ»· αυτό απαντά «ποιο ΘΕΜΑ». Περίοδοι: today / 7d / 30d. ⚠️ ΜΕΤΡΑΕΙ ΤΙ ΓΡΑΦΤΗΚΕ, ΟΧΙ ΤΙ ΔΙΑΒΑΣΤΗΚΕ — δεν είναι δείκτης ενδιαφέροντος κοινού (γι’ αυτό: get_google_trends) ούτε συναισθήματος. Οι όροι βγαίνουν μόνο από ΤΙΤΛΟΥΣ. Το change_pct είναι ΔΙΟΡΘΩΜΕΝΟ για τη μισή τρέχουσα μέρα — μη συγκρίνεις μόνος σου μισή μέρα με ολόκληρη. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "period": {
            "type": "string",
            "enum": [
              "today",
              "7d",
              "30d"
            ],
            "default": "today",
            "description": "Παράθυρο: today = η σημερινή ημέρα ΑΘΗΝΑΣ μέχρι τώρα, 7d = 7 ημέρες, 30d = 30 ημέρες."
          },
          "limit": {
            "type": "integer",
            "minimum": 5,
            "maximum": 100,
            "default": 30,
            "description": "Πόσοι όροι (5-100). Default 30."
          },
          "type": {
            "type": "string",
            "enum": [
              "all",
              "per",
              "org",
              "loc",
              "lat"
            ],
            "default": "all",
            "description": "Φίλτρο τύπου: per=πρόσωπα, org=οργανισμοί/φορείς, loc=τόποι, lat=ξενόγλωσσοι όροι."
          },
          "min_outlets": {
            "type": "integer",
            "minimum": 2,
            "maximum": 100,
            "description": "Ελάχιστα ΔΙΑΦΟΡΕΤΙΚΑ μέσα που έγραψαν τον όρο. Default 3 (today) / 5 (7d) / 8 (30d). Κάτω από αυτό, ένας όρος είναι η εμμονή ενός site, όχι επικαιρότητα."
          },
          "rising_only": {
            "type": "boolean",
            "default": false,
            "description": "Μόνο όροι που ανεβαίνουν ≥60% έναντι της προηγούμενης ίδιας περιόδου (διορθωμένης)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_news_now",
      "description": "Τι συμβαίνει ΑΥΤΗ ΤΗ ΣΤΙΓΜΗ στα ελληνικά ΜΜΕ: τα ΑΝΟΙΧΤΑ μεγάλα θέματα (ποιος τα έσπασε, πόσα μέσα τα καλύπτουν, αν ξεθυμαίνουν) + ΖΩΝΤΑΝΗ ΡΟΗ τίτλων των τελευταίων ωρών + παλμός τελευταίας ώρας. Χρησιμοποίησέ το όταν σε ρωτούν «τι γίνεται τώρα;», «τι παίζει στις ειδήσεις;» ΧΩΡΙΣ να ξέρουν τι να ψάξουν. ΔΙΑΦΕΡΕΙ από: get_news_terms (ποιοι ΟΡΟΙ κυριαρχούν), search_greek_news (όλα τα άρθρα για ΕΝΑ θέμα), get_media_pulse (ποιες ΜΑΡΚΕΣ). ⚠️ ΦΩΤΟΓΡΑΦΙΑ ΤΗΣ ΣΤΙΓΜΗΣ, ΟΧΙ ΚΑΤΑΤΑΞΗ — πλήθος μέσων ΔΕΝ σημαίνει σημαντικότητα. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hours": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 3,
            "description": "Παράθυρο ροής τίτλων σε ώρες (1-24). Default 3."
          },
          "limit": {
            "type": "integer",
            "minimum": 5,
            "maximum": 100,
            "default": 30,
            "description": "Πόσοι τίτλοι (5-100). Default 30."
          },
          "outlet": {
            "type": "string",
            "description": "Φίλτρο σε ένα μέσο, π.χ. \"protothema.gr\"."
          },
          "topics_only": {
            "type": "boolean",
            "default": false,
            "description": "Μόνο τα ανοιχτά μεγάλα θέματα, χωρίς τη ροή τίτλων."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_media_scoops",
      "description": "ΠΟΙΟΣ ΕΙΧΕ ΤΗΝ ΕΙΔΗΣΗ — όχι ποιος βγήκε πρώτος. Σκουπ = πρώτο με επαληθευμένη ώρα **ΚΑΙ** ≥45 λεπτά πριν τον δεύτερο **ΚΑΙ** ≥50 μέσα το αναπαρήγαγαν· τα τρία μαζί. ΜΕΤΡΗΜΕΝΟ: το businessdaily.gr έχει 143 πρωτιές και 1 σκουπ (διάμεση διαφορά 8 λεπτά) — αγώνας τηλεγραφήματος, όχι αποκλειστικότητα. ΔΙΑΦΕΡΕΙ ριζικά από get_first_publisher_leaderboard. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "outlet": {
            "type": "string",
            "description": "Μόνο τα σκουπ ενός μέσου, π.χ. \"cnn.gr\". Παράλειψέ το για όλη την αγορά."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 120,
            "default": 30,
            "description": "Παράθυρο ημερών (1-120). Default 30."
          },
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 50,
            "default": 20,
            "description": "Πόσα σκουπ (3-50). Default 20."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_story_additions",
      "description": "ΠΟΙΟΣ ΠΡΟΣΘΕΣΕ ΤΙ σε ιστορία που ΕΤΡΕΧΕ ΗΔΗ — η τρίτη ερώτηση, διαφορετική και από το «ποιος βγήκε πρώτος» (get_first_publisher_leaderboard) και από το «ποιος είχε την είδηση» (get_media_scoops). Εδώ το θέμα είχε ξεκινήσει ≥20 λεπτά πριν, και ένα μέσο έφερε στοιχείο που ΔΕΝ είχε πει κανένα προηγούμενο άρθρο — και μετά το πήραν κι άλλοι (picked_up_by). Αυτό είναι ΡΕΠΟΡΤΑΖ μέσα στο πλήθος: ένα μέσο μπορεί να μη βγαίνει ΠΟΤΕ πρώτο και να κυριαρχεί εδώ. ΜΕΤΡΗΜΕΝΟ παράδειγμα: το maleviziotis.gr πρόσθεσε «Ευελπίδων» σε θέμα 144 μέσων και το πήραν 31. ⚠️ Διαβάζει ΟΡΟΥΣ ΤΙΤΛΟΥ, όχι το σώμα του άρθρου. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "outlet": {
            "type": "string",
            "description": "Μόνο ό,τι πρόσθεσε ένα μέσο, π.χ. \"ertnews.gr\". Παράλειψέ το για όλη την αγορά."
          },
          "min_pickup": {
            "type": "integer",
            "minimum": 0,
            "maximum": 200,
            "default": 5,
            "description": "Πόσα ΑΛΛΑ μέσα πρέπει να αναμετέδωσαν την προσθήκη (0-200). Default 5. Με 0 βλέπεις και τις λεπτομέρειες που δεν πήρε κανείς."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 90,
            "default": 14,
            "description": "Παράθυρο ημερών (1-90). Default 14."
          },
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 50,
            "default": 20,
            "description": "Πόσες προσθήκες (3-50). Default 20."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_weekly_stars",
      "description": "ΠΟΙΟΙ ΑΝΕΒΗΚΑΝ ΑΥΤΗ ΤΗΝ ΕΒΔΟΜΑΔΑ — κατάταξη ΑΥΞΗΣΗΣ 7 ημερών σε **TikTok ΚΑΙ Instagram**. Είναι το ίδιο «🏆 Weekly Stars» της αρχικής dashr.live, με την ΙΔΙΑ λογική: βάση σύγκρισης η πλησιέστερη μέτρηση στις 7 ημέρες πριν (παράθυρο 3-14 ημερών), μόνο ενεργοί μη κρυμμένοι λογαριασμοί Ελλάδας. ΔΙΑΦΕΡΕΙ από το get_creator_history που δίνει ΕΝΑΝ λογαριασμό. ⚠️ platform=\"instagram\" δίνει ΜΟΝΟ followers — ο ig_history ΔΕΝ έχει προβολές, και το metric=\"views\" εκεί επιστρέφει ρητό σφάλμα αντί για άδεια λίστα. Στο TikTok το \"views\" είναι ΜΕΣΟΣ ΟΡΟΣ ανά βίντεο, όχι σύνολο. Επιστρέφει και eligible_accounts (ο παρονομαστής). Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "enum": [
              "tiktok",
              "instagram"
            ],
            "default": "tiktok",
            "description": "Ποια πλατφόρμα. Default \"tiktok\". Το Instagram ΔΕΝ έχει προβολές — μόνο followers."
          },
          "metric": {
            "type": "string",
            "enum": [
              "followers",
              "views"
            ],
            "default": "followers",
            "description": "Τι μετράμε. \"views\" ΜΟΝΟ για tiktok (το Instagram δεν δίνει προβολές)."
          },
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 50,
            "default": 10,
            "description": "Πόσοι (3-50). Default 10."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_front_page",
      "description": "ΤΟ ΠΡΩΤΟΣΕΛΙΔΟ ΤΗΣ ΑΓΟΡΑΣ — η ατζέντα μιας ΟΛΟΚΛΗΡΗΣ ημέρας σε μία κλήση, ιεραρχημένη από ΜΕΤΡΗΣΗ και όχι από κρίση συντάκτη: πόσα ΔΙΑΦΟΡΕΤΙΚΑ ελληνικά μέσα έγραψαν το κάθε θέμα μέσα σε εκείνη τη μέρα (00:00-23:59 Ελλάδας). Παράγεται 09:00 για τη ΧΘΕΣΙΝΗ μέρα και ΠΑΓΩΝΕΙ — τα νούμερα δεν αλλάζουν ποτέ ξανά. Δώσε date=YYYY-MM-DD για ιστορικό, ή list_editions=true για να δεις ποιες μέρες υπάρχουν. Κάθε θέμα φέρνει: πόσα μέσα, πόσα άρθρα, μέσα/ώρα (ταχύτητα εξάπλωσης — ΑΛΛΟ μέγεθος από το πλήθος), ώρα αιχμής, ποιος το είπε πρώτος και αν συνεχίζεται από προηγούμενη μέρα. ⚠️ ΔΕΝ κρίνει τι ΑΞΙΖΕ να είναι πρώτο — καταγράφει τι ΕΓΙΝΕ. Το αρχείο ξεκίνησε 15/9/2026, δεν παράγεται αναδρομικά. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Ημερομηνία έκδοσης YYYY-MM-DD (η μέρα που καλύπτει). Παράλειψέ το για την τελευταία."
          },
          "list_editions": {
            "type": "boolean",
            "default": false,
            "description": "true = επίστρεψε μόνο ΠΟΙΕΣ ημερομηνίες υπάρχουν στο αρχείο, χωρίς περιεχόμενο."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_outlet_card",
      "description": "Ο ΠΛΗΡΗΣ ΦΑΚΕΛΟΣ ενός ελληνικού ΜΜΕ σε μία κλήση: υγεία ρολογιού (γιατί εμπιστευόμαστε ή όχι την ώρα του), ταχύτητα/πρωτοτυπία/επιρροή, πόντοι, τα ΣΚΟΥΠ του, ποιοι το ακολουθούν και ποιους ακολουθεί, και **σε ποια ανοιχτά μεγάλα θέματα ΣΩΠΑΣΕ**. ⚠️ Η σιωπή ΔΕΝ είναι κατηγορία — αθλητικό site δεν χρωστά κάλυψη σε οικονομικό θέμα· μετράει μόνο όταν επαναλαμβάνεται στη ΔΙΚΗ ΤΟΥ θεματολογία. ΑΝΑΦΕΡΕ ΤΟ. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "outlet": {
            "type": "string",
            "description": "Domain ελληνικού μέσου, π.χ. \"protothema.gr\"."
          }
        },
        "required": [
          "outlet"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_outlet_flow",
      "description": "Ποιο ελληνικό μέσο τροφοδοτεί ποιο — τα ΖΕΥΓΗ, όχι αθροίσματα. Δώσε outlet για έναν χάρτη «ποιοι το ακολουθούν / ποιους ακολουθεί» με μέση καθυστέρηση σε λεπτά, ή παράλειψέ το για τη συνολική εικόνα πηγών και αναμεταδοτών. ΔΙΑΦΕΡΕΙ από get_outlet_influence (που λέει ΠΟΣΟΙ σε ακολουθούν, όχι ΠΟΙΟΙ). 🚨 Μετράει ΣΥΝΕΜΦΑΝΙΣΗ ΜΕ ΣΕΙΡΑ, ΟΧΙ αντιγραφή: δύο μέσα μπορεί να πήραν ανεξάρτητα το ίδιο δελτίο τύπου. ΑΝΑΦΕΡΕ ΤΟ ΠΑΝΤΑ. Χτισμένο στον επαληθευμένο πρώτο, άρα μέσα με χαλασμένο ρολόι δεν μολύνουν τα ζεύγη. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "outlet": {
            "type": "string",
            "description": "Domain ελληνικού μέσου, π.χ. \"protothema.gr\". Αν λείψει, επιστρέφεται η ΣΥΝΟΛΙΚΗ εικόνα: τα μέσα με τη μεγαλύτερη καθαρή ροή προς τα έξω (πηγές) και προς τα μέσα (αναμεταδότες)."
          },
          "days": {
            "type": "integer",
            "minimum": 3,
            "maximum": 120,
            "default": 30,
            "description": "Παράθυρο ημερών (3-120). Default 30."
          },
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 50,
            "default": 12,
            "description": "Πόσα ζεύγη ανά κατεύθυνση (3-50). Default 12."
          },
          "min_stories": {
            "type": "integer",
            "minimum": 2,
            "maximum": 500,
            "default": 3,
            "description": "Ελάχιστες κοινές ιστορίες για να μετρήσει ένα ζεύγος. Default 3 — ένα ζεύγος με 1 ιστορία είναι σύμπτωση."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_social_first_overview",
      "description": "Συνολική εικόνα: όταν ένα ελληνικό ΜΜΕ δημοσιεύει άρθρο και το τουιτάρει, τι προηγείται; Επιστρέφει άρθρο-πρώτο / ταυτόχρονα / X-πρώτο και τη διάμεση διαφορά σε λεπτά. ΤΟ ΣΗΜΑΝΤΙΚΟ ΕΙΝΑΙ ΤΟ «ταυτόχρονα» (<10 λεπτά): δείχνει ΑΥΤΟΜΑΤΗ ανάρτηση στο X, όχι ταχύτητα ρεπορτάζ. ΜΗΝ το παρουσιάσεις ως δείκτη ποιότητας. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 30,
            "description": "Παράθυρο ημερών (1-365). Default 30."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_social_first_outlets",
      "description": "Ανά ελληνικό μέσο: ποσοστά άρθρο-πρώτο / ταυτόχρονα / X-πρώτο. Τα ποσοστά βγαίνουν ΜΟΝΟ από ζεύγη με επιβεβαιωμένη ώρα άρθρου· τα μέσα που δεν δηλώνουν αξιόπιστη ώρα επιστρέφονται χωριστά στο excluded_from_ranking με τον λόγο — ΑΝΑΦΕΡΕ ΤΟ αν ρωτηθείς για μέσο που λείπει. Υψηλό «ταυτόχρονα» = αυτόματη ανάρτηση. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 30,
            "description": "Παράθυρο ημερών. Default 30."
          },
          "min_pairs": {
            "type": "integer",
            "minimum": 15,
            "maximum": 200,
            "default": 15,
            "description": "Ελάχιστα ζεύγη ΜΕ ΕΠΙΒΕΒΑΙΩΜΕΝΗ ώρα άρθρου. ΔΕΝ επιτρέπεται κάτω από 15."
          },
          "limit": {
            "type": "integer",
            "minimum": 3,
            "maximum": 100,
            "default": 25,
            "description": "Πόσα μέσα (3-100). Default 25."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_social_first_pairs",
      "description": "Τα συγκεκριμένα ζεύγη tweet↔άρθρο πίσω από τα ποσοστά — με σύνδεσμο tweet, σύνδεσμο άρθρου, ώρες και ομοιότητα τίτλου. Χρησιμοποίησέ το όταν ζητείται τεκμηρίωση ή παράδειγμα. Ζεύγη με usable_for_claims=false ΔΕΝ στηρίζουν ισχυρισμό. Source: DASHR Live Analytics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "outlet": {
            "type": "string",
            "description": "Domain μέσου, π.χ. \"protothema.gr\". Παράλειψέ το για όλα."
          },
          "first": {
            "type": "string",
            "enum": [
              "tweet",
              "article",
              "tie"
            ],
            "description": "Φίλτρο: ποιο προηγήθηκε. tie = μέσα σε 10 λεπτά."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 30,
            "description": "Παράθυρο ημερών. Default 30."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Πόσα ζεύγη (1-50). Default 20."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_x_trend_tweets",
      "description": "Fetch representative tweets for a specific X/Twitter trending topic in Greece — cache-first, may trigger live X search server-side. Use when asked to \"δες tweets για το trend X\", \"show tweets about [hashtag]\", \"what are people tweeting about [topic]\". Omit trend= to use the current #1 GR trend. Permalink: https://x.com/<author_username>/status/<tweet_id>. Source: DASHR live X search, cached in x_trend_tweets.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "trend": {
            "type": "string",
            "description": "A specific trend name to drill into; omit for grouped top trends"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_tv_ratings",
      "description": "Get Greek TV ratings — daily viewership data for Greek television channels and shows. Returns dynamic share (%, age 18-54) and total share (%, all viewers) per time slot. Supports filtering by date, channel name, show name, or time slot (Prime Time, Daytime, etc.). Use when asked about \"τηλεθεάσεις\", Greek TV ratings, channel performance, show popularity, or TV audience data. Data source: DASHR — Greek TV Ratings Database.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Date in YYYY-MM-DD format, or \"latest\" to get the most recent available date. Defaults to \"latest\"."
          },
          "channel": {
            "type": "string",
            "description": "Filter by channel name (Greek, e.g. \"MEGA\", \"ANT1\", \"ΣΤΑΡ\", \"Alpha\", \"ΕΡΤ1\"). Partial match supported."
          },
          "show": {
            "type": "string",
            "description": "Filter by show name (Greek). Partial match supported."
          },
          "time_slot": {
            "type": "string",
            "description": "Filter by time slot (e.g. \"Prime Time\", \"Daytime\", \"Early Morning\", \"Late Night\")."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 50,
            "description": "Maximum rows to return. Default 50, max 200."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_greek_nameday",
      "description": "🎂 GREEK CALENDAR — namedays (ονομαστικές εορτές) + world days (παγκόσμιες ημέρες / international observances) for Greece. USE THIS TOOL FOR: 'παγκόσμιες ημέρες [μήνας]', 'ποιοι γιορτάζουν σήμερα/αύριο', 'τι γιορτή είναι σήμερα', 'πότε γιορτάζει [όνομα]', 'world days [month]', 'awareness days', 'saint days', 'τι γιορτές έχει ο [μήνας]', 'awareness calendar', 'Ιούνιος ημέρες', 'June observances Greece'. Covers all months 2026-2027. Modes: date (default, optional range 1-30), today_tomorrow, month (year+month), name (Greek name search next 365 days), world_days_month (year+month → all world days in that month), world_days_year (year → all world days in that year). Examples: mode=world_days_month year=2026 month=6 → 15 world days in June; mode=name name=Κατερίνα → 25/11; mode=month year=2026 month=12 → all December namedays + world days.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "date",
              "today_tomorrow",
              "month",
              "name",
              "world_days_month",
              "world_days_year"
            ],
            "default": "date",
            "description": "Query mode. \"date\" (default): single date or range. \"today_tomorrow\": returns both today and tomorrow rows — ideal for banner/notification display. \"month\": all days in a given month — useful for calendar views and content planning. \"name\": search upcoming 365 days for a Greek name (e.g. \"Κατερίνα\") to find when it celebrates. \"world_days_month\": all world/international days in a given month. \"world_days_year\": all world/international days in a given year."
          },
          "date": {
            "type": "string",
            "description": "Used with mode=date. Date in YYYY-MM-DD format. Defaults to today in Athens timezone (UTC+3). Example: \"2026-05-21\"."
          },
          "range": {
            "type": "integer",
            "minimum": 1,
            "maximum": 30,
            "default": 1,
            "description": "Used with mode=date. How many upcoming days to include (1–30). Default 1 returns only the requested date. Set to 7 to get a full week view for content planning."
          },
          "year": {
            "type": "integer",
            "minimum": 2024,
            "maximum": 2030,
            "description": "Used with mode=month, world_days_month, world_days_year. The year to query (2024–2030)."
          },
          "month": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Used with mode=month, world_days_month. Month number 1–12."
          },
          "name": {
            "type": "string",
            "description": "Used with mode=name. Greek name to search for (min 2 characters). Case-insensitive substring match against the names field. Example: \"Κατερίνα\", \"Γιώργος\", \"Maria\"."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_media_campaigns",
      "description": "Get Greek media advertising campaigns — TV spots and digital ads tracked weekly. Shows which brands are advertising, through which agencies, on which websites and TV channels. Use this when asked about advertising, media campaigns, ad spend, agency activity, or brand advertising presence in Greece. TIME: the data is one provider export per ISO week (every result lists the weeks it covers in \"coverage\"; the archive has gaps, e.g. a week can be missing). For \"what did brand X run in July\" call with advertiser=\"X\", date_from=\"2026-07\", date_to=\"2026-07\" (or week=\"2026-W27\" for a single week); without a time filter you get the whole archive. COUNTS: the same campaign is re-listed in every weekly export it appears in, so \"weekly_listings\" = rows (campaign x week) while \"campaigns\" = DISTINCT campaigns - never quote weekly_listings as a number of campaigns and never add weekly counts across weeks. is_active / in_force_on_export_day is only a snapshot of that week's export day: not comparable across weeks and not \"active today\". Modes: campaigns (default; one row per distinct campaign, newest first; dedupe=false gives raw weekly rows, order=oldest reverses), stats, top_advertisers, agency_share (these three also accept week/date_from/date_to; the other filters apply to mode=campaigns only).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "advertiser": {
            "type": "string",
            "description": "Advertiser name (partial match). Applies to mode=campaigns only."
          },
          "agency": {
            "type": "string",
            "description": "Media agency name (partial match). Applies to mode=campaigns only."
          },
          "website": {
            "type": "string",
            "description": "Website domain to find campaigns on. Applies to mode=campaigns only."
          },
          "username": {
            "type": "string",
            "description": "DASHR brand username to find matched campaigns for. Applies to mode=campaigns only."
          },
          "type": {
            "type": "string",
            "enum": [
              "digital",
              "tv",
              "all"
            ],
            "default": "all",
            "description": "Campaign type filter. Applies to mode=campaigns only."
          },
          "mode": {
            "type": "string",
            "enum": [
              "campaigns",
              "stats",
              "top_advertisers",
              "agency_share"
            ],
            "default": "campaigns",
            "description": "Query mode: campaigns (list, default) | stats (overview) | top_advertisers | agency_share"
          },
          "limit": {
            "type": "number",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Max results to return"
          },
          "week": {
            "type": "string",
            "description": "ONE weekly export, ISO week e.g. \"2026-W27\" (Monday-Sunday). Valid weeks: see coverage / get_media_advertisers.available_weeks. Cannot be combined with date_from/date_to. Works in every mode."
          },
          "date_from": {
            "type": "string",
            "description": "Start of the period, YYYY-MM-DD, or YYYY-MM for a whole month (e.g. \"2026-07\"). Selects every weekly export (Mon-Sun) that overlaps the period, so the edge weeks may reach a few days outside the dates (see coverage.weeks_covered). Works in every mode. Example for \"July\": date_from=\"2026-07\", date_to=\"2026-07\"."
          },
          "date_to": {
            "type": "string",
            "description": "End of the period, YYYY-MM-DD, or YYYY-MM for a whole month. If only date_from is given the period runs to the end of the archive; if only date_to is given it starts at the beginning of the archive."
          },
          "dedupe": {
            "type": "boolean",
            "default": true,
            "description": "mode=campaigns only. true (default) = one row per distinct campaign (with first/last week listed); false = raw weekly rows (the same campaign appears once per week it is listed)."
          },
          "order": {
            "type": "string",
            "enum": [
              "newest",
              "oldest"
            ],
            "default": "newest",
            "description": "mode=campaigns only. newest (default) = most recently listed first; oldest = earliest listed first."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ad_intelligence",
      "description": "Get advertising intelligence for Greece — Meta Ad Library (Facebook/Instagram ads with reach, demographics, payer, creatives), media campaign tracking (TV + digital), TikTok ads. Use when asked about advertising, who is running ads, Meta ads, Facebook ads, Instagram ads, ad spend, or brand advertising activity. ⚠️ ΔΕΝ καλύπτει Google Ads — γι' αυτά χρησιμοποίησε το get_google_ads. Το mode=tiktok_ads δείχνει ΜΟΝΟ τα Top Ads του TikTok Creative Center· για τις διαφημίσεις ΣΥΓΚΕΚΡΙΜΕΝΗΣ μάρκας στο TikTok χρησιμοποίησε το get_tiktok_ads. Ένα κενό αποτέλεσμα εδώ ΔΕΝ σημαίνει «η μάρκα δεν διαφημίζεται».",
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "tiktok_ads",
              "meta_ads",
              "media_campaigns",
              "overview"
            ],
            "description": "Data source: tiktok_ads, meta_ads, media_campaigns, or overview for combined summary"
          },
          "advertiser": {
            "type": "string",
            "description": "Filter by advertiser/page name (partial match)"
          },
          "industry": {
            "type": "string",
            "description": "Filter by industry (TikTok ads only)"
          },
          "category": {
            "type": "string",
            "description": "Filter by category (Meta ads only)"
          },
          "active_only": {
            "type": "boolean",
            "default": true,
            "description": "Only show active ads"
          },
          "limit": {
            "type": "number",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Max results"
          },
          "agency": {
            "type": "string",
            "description": "Media agency filter (media_campaigns mode)"
          },
          "website": {
            "type": "string",
            "description": "Website filter (media_campaigns mode)"
          },
          "type": {
            "type": "string",
            "enum": [
              "digital",
              "tv",
              "all"
            ],
            "default": "all",
            "description": "Campaign type (media_campaigns mode)"
          }
        },
        "required": [
          "mode"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_top_ads_history",
      "description": "Query the DASHR TikTok Top Ads historical database for Greece. Returns top-performing TikTok ads ranked by likes/views, with advertiser, brand, industry, engagement metrics, and first/last seen dates. Filter by date range (e.g. last 7 days), brand name, industry, or country. Use this when asked about TikTok advertising trends, which brands advertise on TikTok in Greece, top TikTok ads, or TikTok ad history. Source: DASHR daily collection.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "ISO date (YYYY-MM-DD) to filter by first_seen or last_seen, or \"latest\" for most-recent day. Omit for all available data."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 90,
            "default": 7,
            "description": "Number of days to look back from today (or from date). Default 7."
          },
          "country": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "default": "GR",
            "description": "2-letter ISO country code. Default GR (Greece)."
          },
          "brand": {
            "type": "string",
            "description": "Filter by brand_name or advertiser_name (partial, case-insensitive)."
          },
          "industry": {
            "type": "string",
            "description": "Filter by industry (partial match, e.g. \"food\", \"fashion\", \"beauty\")."
          },
          "active_only": {
            "type": "boolean",
            "default": false,
            "description": "If true, return only currently active ads (is_active=1). Default false (all historical)."
          },
          "sort_by": {
            "type": "string",
            "enum": [
              "likes",
              "views",
              "comments",
              "shares",
              "last_seen",
              "first_seen"
            ],
            "default": "likes",
            "description": "Sort field. Default likes."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 50,
            "description": "Max rows returned (1-200, default 50)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ai_traffic",
      "description": "Get AI traffic insights for Greek websites — which AI platforms (ChatGPT, Gemini, Perplexity, Claude, Copilot, Grok) send traffic to each site. Shows AI visits, platform breakdown with percentages, top prompts, SEO keywords, traffic sources, country rank. Use when asked about AI traffic, AI referrals, ChatGPT traffic, which sites get traffic from AI.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Specific domain to get AI traffic for (e.g. protothema.gr). Omit for all tracked domains."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_dashr_hashtags",
      "description": "Get DASHR-computed hashtag analytics from Greek creator posts across the whole DASHR database. Shows total views, posts, creators, growth, categories, virality score, co-hashtags. Filter by account type (media, brands, politicians, podcasts). This is DASHR's own data, not TikTok API trending.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "account_type": {
            "type": "string",
            "enum": [
              "all",
              "media",
              "politician",
              "brand",
              "podcast",
              "influencer"
            ],
            "default": "all",
            "description": "Filter by account type"
          },
          "period": {
            "type": "string",
            "enum": [
              "all",
              "7d",
              "30d"
            ],
            "default": "all",
            "description": "Time period: all (all time), 7d (last 7 days), 30d (last 30 days)"
          },
          "sort": {
            "type": "string",
            "enum": [
              "total_views",
              "total_posts",
              "total_creators",
              "growth_pct",
              "views_48h",
              "views_30d",
              "virality_score"
            ],
            "default": "total_views",
            "description": "Sort field"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 30,
            "description": "Max results"
          },
          "search": {
            "type": "string",
            "description": "Search hashtag by name"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_google_ads",
      "description": "Get Google Ads for a Greek brand from Google Ads Transparency Center. Shows ad creatives, formats (IMAGE/VIDEO/TEXT), topics, impressions, active/ended status. Use when asked about Google advertising, search ads, display ads, YouTube ads for a brand. Το get_ad_intelligence ΔΕΝ καλύπτει Google Ads. Για ημερήσια εξέλιξη εμφανίσεων, δες get_ad_history.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Brand username to get Google Ads for"
          },
          "active_only": {
            "type": "boolean",
            "default": false,
            "description": "Only show active ads"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 50,
            "description": "Max results"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_tiktok_ads",
      "description": "Get TikTok ads for a Greek brand/media/creator from the TikTok Commercial Content Library (DSA Ad Library). Shows advertiser, ad creatives, first/last shown dates, and estimated reach. Catches paid/Spark/shadow ads served in Greece. Για διαφημίσεις ΣΥΓΚΕΚΡΙΜΕΝΗΣ μάρκας στο TikTok ΑΥΤΟ είναι το σωστό εργαλείο — το get_ad_intelligence δείχνει μόνο τα Top Ads του Creative Center.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Brand/media/creator username to get TikTok ads for"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 50,
            "description": "Max results"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_ad_history",
      "description": "Get historical daily snapshots of Google Ads and/or Meta Ads activity for a Greek brand. Shows day-by-day impressions/reach growth over time (up to 2 years). Use when asked about ad spend trends, when ads started running, growth analysis, or specific creative performance over time. Pass platform=\"google\"|\"meta\"|\"both\" and optional creative_id for single-creative timeline.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Brand username (e.g. novibet.gr, bca.college)"
          },
          "platform": {
            "type": "string",
            "enum": [
              "google",
              "meta",
              "both"
            ],
            "default": "both",
            "description": "Which ad platform to query"
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 730,
            "default": 90,
            "description": "Lookback days (max 2 years)"
          },
          "creative_id": {
            "type": "string",
            "description": "Specific creative_id (Google) or ad_library_id (Meta) for single-ad timeline"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_places",
      "description": "Get Google Places data for a brand/profile. Shows locations, ratings, reviews, opening hours, photos, and business status. Reads stored data only — no live Google API calls.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Brand username (without @) to get Google Places data for. Example: \"efood_gr\", \"cosmote\", \"ikea_gr\"."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_greek_news",
      "description": "Get latest Greek news from AMNA (Athens News Agency / ΑΠΕ-ΜΠΕ). Filter by category (general, sport, economy, business, tourism, health, life, english) or by brand username to find news mentioning them. Also shows trending brands in news. Use when asked about Greek current events or business news. ⚠️ Το φίλτρο ανά μάρκα πιάνει Πρακτορεία, όχι τον υπόλοιπο Τύπο. Για ΟΛΗ τη δημοσιότητα ενός προφίλ χρησιμοποίησε το get_news_for_profile. 🚇 RELAY: if a DASHR tool you need is missing from your tool list (your catalogue may be cached from an older connection), you can still run it here: pass `dashr:run <tool_name> {\"param\":\"value\"}` as this parameter and the result of that tool is returned instead. Example: `dashr:run get_front_page {\"date\":\"2026-09-14\"}`. Call get_capabilities to see every available tool name.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Filter by category: general, sport, economy, business, tourism, health, life, english. When omitted, articles are grouped by category with counts."
          },
          "brand": {
            "type": "string",
            "description": "Filter by brand/creator username (with or without @) to find all news articles that mention this brand. Essential for brand media-coverage analysis."
          },
          "search": {
            "type": "string",
            "description": "Full-text keyword search across article titles and descriptions. Supports Greek and Latin characters. Example: \"τουρισμός\" or \"economy minister\"."
          },
          "trending": {
            "type": "boolean",
            "default": false,
            "description": "When true, return a trending-brands/topics analysis instead of articles. Shows which brands are most mentioned in news, their mention counts, latest headlines, and a positive/negative sentiment hint."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 90,
            "default": 7,
            "description": "How far back (in days) to look for articles. Default is 7 days. Applies to all queries including trending analysis."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Max articles to return (1–100). Default 20. Ignored when trending=true."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "search_greek_news",
      "description": "ΕΛΕΥΘΕΡΗ ΑΝΑΖΗΤΗΣΗ σε ΟΛΟΝ τον ελληνικό Τύπο που παρακολουθεί το DASHR (1.235.000+ άρθρα από 475 ΜΜΕ — RSS, sitemaps, ΑΠΕ-ΜΠΕ). ΧΡΗΣΙΜΟΠΟΙΗΣΕ ΑΥΤΟ όταν σε ρωτούν «πόσα/ποια μέσα έγραψαν για το Χ;», «πόση κάλυψη πήρε το θέμα Υ;», «πότε κορυφώθηκε;». Επιστρέφει ΠΛΗΡΗ σύνολα (άρθρα, μέσα, χρονικό εύρος, ημέρα κορύφωσης), κατανομή ανά μέσο και ημερήσια καμπύλη — ΟΧΙ κομμένα νούμερα. ⚠️ Το get_greek_news καλύπτει ΜΟΝΟ το πρακτορείο ΑΠΕ-ΜΠΕ· για ερωτήσεις κάλυψης/όγκου προτίμησε ΠΑΝΤΑ αυτό.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "description": "Όρος αναζήτησης σε τίτλο ή περίληψη άρθρου (ελληνικά ή αγγλικά). Π.χ. \"Μαζωνάκης\", \"ΟΠΕΚΕΠΕ\", \"σεισμός\". Αναζήτηση υποσυμβολοσειράς."
          },
          "days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 400,
            "default": 30,
            "description": "Πόσο πίσω να ψάξει, σε ημέρες (1–400). Προεπιλογή 30."
          },
          "outlet": {
            "type": "string",
            "description": "Προαιρετικό φίλτρο σε ένα μέσο, π.χ. \"protothema.gr\"."
          },
          "sample": {
            "type": "integer",
            "minimum": 0,
            "maximum": 50,
            "default": 10,
            "description": "Πόσα ενδεικτικά άρθρα να επιστρέψει (0–50). Τα ΣΥΝΟΛΑ δίνονται πάντα πλήρη."
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_topic_silence",
      "description": "ΠΟΙΑ ΜΕΣΑ ΔΕΝ ΕΓΡΑΨΑΝ ένα παρακολουθούμενο θέμα. Δείχνει κάλυψη vs σιωπή με ΔΙΚΑΙΗ ΣΥΓΚΡΙΣΗ: «σιώπησε» λέγεται μόνο για μέσο που ήταν ζωντανό ΚΑΙ παίζει σε αυτή τη θεματική. Χωρίς όρισμα: όλα τα παρακολουθούμενα θέματα. ⚠️ ΔΙΑΒΑΣΕ ΠΑΝΤΑ το peer_basis: \"activity_only\" = ΑΣΘΕΝΗΣ σύγκριση, ΜΗΝ την παρουσιάσεις ως απόδειξη συνειδητής αποσιώπησης.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic": {
            "type": "string",
            "description": "Όνομα παρακολουθούμενου θέματος, π.χ. \"ΟΠΕΚΕΠΕ\". Χωρίς αυτό: λίστα όλων."
          },
          "limit_silent": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "default": 20,
            "description": "Πόσα σιωπηλά μέσα να επιστρέψει (0–100). Τα ΣΥΝΟΛΑ δίνονται πάντα πλήρη."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_app_rankings",
      "description": "Get top app rankings for Greece from Google Play Store and Apple App Store. Shows top 30 free and paid apps per store, monthly. Filter by store (google_play/app_store), chart type (free/paid), or brand username. Historical data available by month. Use when asked about app market, mobile apps, or brand app performance in Greece.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "store": {
            "type": "string",
            "description": "Filter by store: google_play or app_store. Omit for both."
          },
          "chart_type": {
            "type": "string",
            "description": "Filter by chart type: free or paid. Omit for both."
          },
          "month": {
            "type": "string",
            "description": "Month in YYYY-MM format (e.g. 2026-04). Defaults to current month."
          },
          "brand": {
            "type": "string",
            "description": "Filter by matched brand username to find their app rankings."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_creator_history",
      "description": "📈 FULL HISTORY for a Greek creator across ALL platforms — TikTok, Instagram, Facebook, LinkedIn, YouTube and X. Followers/subscribers, avg likes/views/comments, engagement rate over time. NO 30-point cap: pass granularity='day' (every measurement), 'month' (one row per month) or 'year' (one row per year), optionally narrowed with date_from/date_to, or a single platform. Left unset, granularity is picked from the requested span. Followers are the END-OF-PERIOD value plus the change within it; averages are period averages. Instagram and X periods also carry like_rate (avg likes ÷ followers × 100, period average; null = not measured, never 0) plus current_benchmark = today's like rate vs PEERS (same as get_creator / dashr.live). Data starts 16/2/2026 (TikTok), 24/2/2026 (Instagram), 14/4/2026 (FB/LI/YT), 18/5/2026 (X).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Creator username (without @ prefix)"
          },
          "granularity": {
            "type": "string",
            "enum": [
              "day",
              "month",
              "year"
            ],
            "description": "day = κάθε μέτρηση, month = μία γραμμή/μήνα, year = μία γραμμή/έτος. Προεπιλογή: auto (day έως 120 ημέρες, μετά month, μετά year)"
          },
          "date_from": {
            "type": "string",
            "description": "Από ημερομηνία (YYYY-MM-DD). Παράλειψη = από την αρχή του ιστορικού."
          },
          "date_to": {
            "type": "string",
            "description": "Έως ημερομηνία (YYYY-MM-DD). Παράλειψη = σήμερα."
          },
          "limit": {
            "type": "number",
            "description": "Μέγιστες γραμμές ανά πλατφόρμα (προεπιλογή 400, max 2000). Οι ΠΙΟ ΠΡΟΣΦΑΤΕΣ κρατιούνται."
          },
          "platform": {
            "type": "string",
            "enum": [
              "tiktok",
              "instagram",
              "facebook",
              "linkedin",
              "youtube",
              "x"
            ],
            "description": "Μόνο μία πλατφόρμα (παράλειψη = όλες)"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_tech_stack",
      "description": "🧩 WEBSITE TECH STACK — BuiltWith-style technology profiler for a Greek brand / media / politician website. Detects technologies (CMS, e-commerce, analytics, ads & pixels, payments, hosting/CDN, JS frameworks, email/CRM/live-chat, marketing tools) with categories, versions and a marketing-stack lens, plus an AI Greek summary. Modes: 'latest' (current stack + what changed since the last scan), 'history' (the FULL versioned archive — every past scan with added/removed technologies over time), 'benchmark' (% of all scanned Greek profiles running each technology). Detection via open-source Wappalyzer fingerprints; every scan is stored forever in DASHR.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Profile username (brand / media / politician) without @. Not needed for mode=benchmark."
          },
          "mode": {
            "type": "string",
            "enum": [
              "latest",
              "history",
              "benchmark"
            ],
            "description": "'latest' (default) = current detected tech stack + AI Greek summary + what changed since last scan; 'history' = the FULL scan archive for this profile with added/removed technologies over time; 'benchmark' = % of scanned Greek profiles running each technology"
          },
          "segment": {
            "type": "string",
            "enum": [
              "all",
              "media",
              "brand",
              "politician",
              "ecommerce"
            ],
            "description": "For mode=benchmark only — compare like-for-like: 'media' (Greek media sites), 'brand', 'politician', 'ecommerce' (e-shops), or 'all' (default)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_post_monitor",
      "description": "📊 POST COMMENTS MONITOR — sentiment analysis over time for social media posts (FB/IG/X/TikTok/YouTube/LinkedIn). Logged-in users can track posts for 3/5/7 days. Returns daily snapshots with sentiment % (positive/neutral/negative), comment counts, AI summary, and recent comment samples. Modes: 'list' (monitors per profile), 'history' (day-by-day snapshots of a monitor), 'summary' (aggregate stats across all monitors).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "list",
              "history",
              "summary"
            ],
            "default": "summary",
            "description": "Mode: 'list' = monitors for an account, 'history' = day-by-day snapshots, 'summary' = aggregate stats"
          },
          "username": {
            "type": "string",
            "description": "Filter by target profile username (e.g. \"olympiacosfc\"). Required for \"list\" mode."
          },
          "monitor_id": {
            "type": "integer",
            "description": "Specific monitor id for \"history\" mode"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_trending_videos",
      "description": "Get latest trending TikTok videos in Greece with title, author, views, likes, shares, sound, hashtags",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max results (1-50, default 20)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_trending_sounds",
      "description": "Get active/trending TikTok sounds in Greece with title, author, usage count",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max results (1-50, default 20)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_trending_hashtags",
      "description": "Get trending TikTok hashtags in Greece with view count and video count",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max results (1-50, default 20)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_similar_creators",
      "description": "Find similar creators to a given username in Greece — same category, similar follower count, sorted by engagement. Each result carries `benchmark` = like rate vs PEERS (same calculation as dashr.live; status \"unknown\" = no measurement, not below average)",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "TikTok username (without @ prefix)"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Max results (1-20, default 10)"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_category_creators",
      "description": "Get all creators in a given category for Greece, sorted by followers/engagement/avg_views. Each result carries `benchmark` = like rate vs PEERS (same calculation as dashr.live; status \"unknown\" = no measurement, not below average)",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "minLength": 1,
            "description": "Category name (e.g. Food, Comedy, Travel, Beauty)"
          },
          "sort": {
            "type": "string",
            "enum": [
              "followers",
              "engagement",
              "avg_views"
            ],
            "default": "engagement",
            "description": "Sort field"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max results (1-50, default 20)"
          }
        },
        "required": [
          "category"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "compare_creators",
      "description": "Compare 2-3 Greek creators side by side — TikTok + Instagram + Facebook followers, engagement (per metrics_platform; TikTok and Instagram rates are not ranked against each other), trust (same calculation as dashr.live; null = no score, not a low score), brand readiness (null = not analyzed), growth. A \"highest_*\" / \"best_*\" winner is named only among ≥2 KNOWN values — unknown (\"—\"/null) or unscored accounts are never ranked as lower; the *_note fields explain when there is no comparison, like rate vs PEERS per platform (ig_/tiktok_/x_like_rate + *_benchmark, same calculation as dashr.live). comparison.like_rate compares ONLY known values within the same platform (best_vs_peers = highest like rate relative to its own peer median); accounts without a measurement are listed with the reason, never as lower",
      "inputSchema": {
        "type": "object",
        "properties": {
          "usernames": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "minItems": 2,
            "maxItems": 3,
            "description": "Array of 2-3 usernames to compare (TikTok, Instagram, or any platform)"
          }
        },
        "required": [
          "usernames"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "tier_breakdown",
      "description": "Get creator count breakdown by tier for Greece (top/mega/mid/mini/people) and category, with percentages",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Optional category filter (e.g. Food, Comedy, Travel)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_pagespeed",
      "description": "Get PageSpeed Insights scores for a website. Shows performance, SEO, accessibility, and best practices scores for both mobile and desktop, plus Core Web Vitals (FCP, LCP, TBT, CLS). Μετρά ΤΑΧΥΤΗΤΑ σε πραγματικό χρόνο· για έλεγχο SEO/τεχνικής ετοιμότητας με σκορ 0-100 δες get_brand_tech_audit.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Domain to check (e.g. \"dashr.live\", \"cosmote.gr\"). Without https:// prefix."
          },
          "scan": {
            "type": "boolean",
            "default": false,
            "description": "If true, triggers a fresh PageSpeed scan instead of returning cached results."
          }
        },
        "required": [
          "domain"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_website_traffic",
      "description": "Get full website traffic data for a domain from SimilarWeb — monthly visits, unique visitors, traffic share, bounce rate, desktop/mobile split, duration, industry ranking",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "minLength": 1,
            "description": "Website domain (e.g. skroutz.gr, protothema.gr)"
          },
          "period": {
            "type": "string",
            "description": "Period in YYYY-MM format (default: latest available)"
          }
        },
        "required": [
          "domain"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "list_top_websites",
      "description": "List top Greek websites ranked by visits, traffic share, or bounce rate. Filter by category (News_and_Media, E-commerce, Sports, etc). Source: SimilarWeb",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Filter by category (e.g. News_and_Media, E-commerce_and_Shopping, Sports, All)"
          },
          "period": {
            "type": "string",
            "description": "Period in YYYY-MM format (default: latest available)"
          },
          "sort": {
            "type": "string",
            "enum": [
              "visits",
              "traffic_share",
              "bounce_rate",
              "pages_per_visit",
              "unique_visitors"
            ],
            "default": "visits",
            "description": "Sort field"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Max results (1-100, default 20)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "compare_websites",
      "description": "Compare 2-3 websites side by side — monthly visits, unique visitors, traffic share, bounce rate, desktop/mobile, duration. Source: SimilarWeb",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domains": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "minItems": 2,
            "maxItems": 3,
            "description": "Array of 2-3 website domains to compare (e.g. [\"skroutz.gr\", \"protothema.gr\"])"
          }
        },
        "required": [
          "domains"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_agent_readiness",
      "description": "Get Agent Readiness Scanner results for any website — a score (0–100) measuring how well a site is optimized for AI agents and LLM-powered tools. Returns per-category scores (e.g. structured data, LLM.txt, schema markup, page speed, accessibility) and individual check details. Use when asked about AI readiness, agent optimization, LLM discoverability, or how AI-friendly a website is. Supports single-domain lookup or ranked leaderboard (list=true). Source: DASHR Agent Readiness Scanner (dashr.live).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Domain to get agent readiness score for (e.g. \"example.com\"). Returns latest scan with AI summary, category scores, Ahrefs SEO data, and comparison vs average."
          },
          "list": {
            "type": "boolean",
            "default": false,
            "description": "When true, returns top scanned domains ranked by score"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max results for list mode"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_football",
      "description": "Get Greek football data — Super League standings, team results, upcoming fixtures, live scores for AEK, Olympiakos, PAOK, Panathinaikos, Aris, Levadiakos.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "team": {
            "type": "string",
            "description": "Team username (e.g. \"aekfc\", \"olympiacosfc\") or team name"
          },
          "standings": {
            "type": "boolean",
            "default": false,
            "description": "Get full Super League standings"
          },
          "live": {
            "type": "boolean",
            "default": false,
            "description": "Get live matches for Greek teams"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_basketball",
      "description": "Greek basketball data — Stoiximan GBL + Euroleague + Greek Cup. Modes: team (per-team summary), standings (league table), live (live matches), match (single match detail), form (last N matches), compare (head-to-head). Tracks 11 Greek teams: Panathinaikos BC, Olympiacos BC, AEK BC, PAOK BC, Aris BC, Maroussi, Peristeri, AO Mykonou, Iraklis, Promitheas Patras, Panionios.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "team",
              "standings",
              "live",
              "match",
              "form",
              "compare"
            ],
            "description": "Query mode"
          },
          "team": {
            "type": "string",
            "description": "DASHR username (e.g. \"pao_bc\", \"olympiacosbc\") or team name"
          },
          "team_b": {
            "type": "string",
            "description": "Second team for compare mode"
          },
          "league": {
            "type": "string",
            "enum": [
              "GBL",
              "EUROLEAGUE",
              "CUP"
            ],
            "default": "GBL",
            "description": "League for standings mode"
          },
          "match_id": {
            "type": "number",
            "description": "BasketAPI1 match id for match mode"
          },
          "last_n": {
            "type": "number",
            "default": 5,
            "description": "How many recent matches for form mode"
          }
        },
        "required": [
          "mode"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_x_account",
      "description": "Twitter/X intelligence per Greek account. Modes: profile (X handle + 20 latest tweets), tweets (up to 200 latest tweets with engagement), mentions (tweets that mention this brand via search), mentions_made (whom this account mentioned/tagged most), history (daily engagement snapshots — followers, ER, top tweet), hashtag_history (rank history of tracked hashtags in GR X trends). Pass DASHR username (not X handle). Data refreshed every 12h via cron. Περιλαμβάνει ΚΑΙ αναφορές τρίτων προς τον λογαριασμό· το get_profile_tweets δίνει ΜΟΝΟ τα δικά του tweets.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "profile",
              "tweets",
              "mentions",
              "mentions_made",
              "history",
              "hashtag_history"
            ],
            "description": "Query mode"
          },
          "username": {
            "type": "string",
            "description": "DASHR username (e.g. pao_bc, aekbc) — NOT the @x_handle"
          },
          "limit": {
            "type": "number",
            "default": 20,
            "description": "How many items to return"
          },
          "days": {
            "type": "number",
            "default": 30,
            "description": "Days back for history modes"
          }
        },
        "required": [
          "mode",
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_profile_tweets",
      "description": "Latest tweets ABOUT a Greek profile (brand/creator/media/politician), collected from the profile's tracked search terms. Sort: recent (newest) or top (highest engagement). Returns text, author (@handle + name + followers + verified), date, likes/retweets/replies/views, plus archive stats. Pagination via offset. GDPR: for politicians only factual data is returned — NO sentiment (Article 9). Sentiment is included only for brands/creators/media. Pass DASHR username. Refreshed 2×/day + on-request. ⚠️ ΜΟΝΟ τα tweets του ίδιου του λογαριασμού. Κενό αποτέλεσμα ΔΕΝ σημαίνει «δεν έχουμε δεδομένα X» — δες get_x_account.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "DASHR username (e.g. kyriakosmitsotakis_, efood_gr) — NOT the @x_handle"
          },
          "sort": {
            "type": "string",
            "enum": [
              "recent",
              "top"
            ],
            "default": "recent",
            "description": "recent = newest first · top = highest engagement"
          },
          "limit": {
            "type": "number",
            "default": 20,
            "description": "How many tweets to return (max 50)"
          },
          "offset": {
            "type": "number",
            "default": 0,
            "description": "Pagination offset"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_public_contracts",
      "description": "Get public procurement contracts (KIMDIS) for a Greek brand by username. Shows contracts where the brand is a contractor or awarding organization. Returns summary stats (total contracts, total revenue as contractor, total spending as org) and contract details (title, organization, amount, date, role, reference number). Source: KIMDIS (Central Electronic Public Procurement Registry).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Brand username (without @) to look up public procurement contracts. Example: \"cosmote\", \"dei\", \"ote\"."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 10,
            "description": "Max contracts to return (1-100). Default 10."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_youtube_trending",
      "description": "Get YouTube trending videos in Greece. Shows top trending videos by category (Music, Sports, Entertainment, Film, Gaming, General). Filter by category or date. Returns rank, title, channel, views, published time, and YouTube URL.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Filter by category: General, Music, Sports, Entertainment, Film, Gaming. Omit for all categories."
          },
          "date": {
            "type": "string",
            "description": "Date in YYYY-MM-DD format (e.g. \"2026-04-21\"). Defaults to today."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_weather",
      "description": "Get current weather and 3-day forecast for Greek cities. Available cities: Athens, Thessaloniki, Patras, Heraklion, Larissa, Volos, Ioannina, Chania, Kavala, Rhodes. Includes temperature, rain, humidity, wind, UV index.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "City name in English. Available: Athens, Thessaloniki, Patras, Heraklion, Larissa, Volos, Ioannina, Chania, Kavala, Rhodes, Vouliagmeni, Marousi, Rafina, Elefsina, Piraeus (Attica region). If omitted, returns weather for all 15 cities."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_live_alerts",
      "description": "Get real-time intelligence feed alerts — what's happening now in the Greek social media and business landscape. Shows traffic spikes, ad detections, new advertisers, football results, media updates, X/Twitter trends, ranking changes, new creators, and more. Filter by alert_type. Use this to get a quick snapshot of current activity.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number",
            "default": 20,
            "description": "Number of alerts to return (max 50)"
          },
          "alert_type": {
            "type": "string",
            "description": "Filter by alert type (e.g. \"traffic_spike\", \"ad_detected\", \"new_advertiser\", \"football_result\", \"media_update\", \"x_trends\", \"top_websites\", \"top_advertisers\", \"live_now_count\", \"ranking_update\", \"new_creator\", \"meta_ads\", \"live_session\", \"brand_activity\", \"milestone\")"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_content_calendar",
      "description": "Analyze posting patterns for a creator — what days they post most, when their content gets most engagement. Returns day-of-week heatmap with views/likes, best posting day, posting frequency. Combines TikTok and Facebook data when available. Use when asked \"when should I post?\" or \"when does this creator usually post?\"",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Creator username to analyze posting patterns for"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_brand_financials",
      "description": "Get financial profile for a Greek brand — company info (AFM, GEMI, incorporation date, capital, legal type), financial statements (revenue, profit, assets, equity, liabilities, employees per year), and derived KPIs (profit margin, debt ratio, YoY growth). Only public business data from GEMI. No contact info or fees.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Brand username (without @) to get financial data for. Example: \"efood_gr\", \"cosmote\", \"papadopoulou_official\""
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_brand_glassdoor",
      "description": "Get Glassdoor employer intelligence for a DASHR brand: latest ratings (overall, CEO approval, business outlook), demographic breakdown (gender, race, sexual orientation, disability), benefits, awards, company overview (HQ, industry, size, revenue, year founded), and historical snapshots. Use this to answer questions like \"how has this brand's culture rating trended\", \"what benefits does this company offer\", or \"what do employees think of this brand\". Modes: latest (full snapshot), history (trend over time), demographics, benefits, overview.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "DASHR brand username (without @). Example: \"cosmote\", \"efood_gr\", \"skroutz\""
          },
          "mode": {
            "type": "string",
            "enum": [
              "latest",
              "history",
              "demographics",
              "benefits",
              "overview"
            ],
            "default": "latest",
            "description": "Mode: 'latest' = full latest snapshot, 'history' = trend list (date + overall_rating + review_count), 'demographics' = demographic rating breakdown only, 'benefits' = benefits categories only, 'overview' = company info (industry/size/revenue/founded/HQ)"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 60,
            "default": 12,
            "description": "Max snapshots to return for mode='history'. Default 12."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_brand_tech_audit",
      "description": "🔍 Returns DASHR-stored SEO/Tech Audit for a brand's website — meta tags health, Open Graph readiness, SSL info (issuer, grade, expiry), domain age, broken links count, composite score 0-100, full version history. Use for: \"how SEO-ready is brand X?\", \"has their meta description changed?\", \"is their SSL valid?\", \"how old is their domain?\", \"πόσο SEO-ready είναι το brand X\", \"σύγκρινε τις 2 τελευταίες audits\". Modes: latest (full breakdown), history (all versions condensed), score (composite score + factors), compare (diff between latest 2 versions). Data is fetched on-demand by admin via \"RUN SEO API 2\" button — not real-time. Source: DASHR SEO API 2 (CodeROG). Καλύπτει πολύ λιγότερες μάρκες από το get_pagespeed· αν λείπει η μάρκα, δοκίμασε εκείνο.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "DASHR brand username (without @). Example: \"cosmote\", \"efood_gr\", \"skroutz\""
          },
          "mode": {
            "type": "string",
            "enum": [
              "latest",
              "history",
              "score",
              "compare"
            ],
            "default": "latest",
            "description": "Mode: 'latest' = full latest audit with all parsed sections (meta, og, ssl, domain_age, broken_links), 'history' = all versions condensed (date + score + key metrics), 'score' = just score + composite breakdown, 'compare' = field-by-field diff between latest 2 versions"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Max versions to return for mode='history'. Default 10."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_brand_comparison",
      "description": "Compare 2-3 Greek brands side by side — social stats (TikTok, Instagram, Facebook, YouTube, LinkedIn followers + engagement), latest financials (revenue, profit, employees), advertising (Meta Ads + Google Ads count), Google Places (rating, reviews), and website traffic.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "usernames": {
            "type": "string",
            "description": "Comma-separated brand usernames (2-3 brands). Example: \"efood_gr,wolt.greece,box.delivery\""
          }
        },
        "required": [
          "usernames"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "compare_places",
      "description": "Compare Google Places locations side by side. Provide place_ids (comma-separated) to compare specific locations, or a username to compare all locations of one brand. Returns rating, reviews, price level, business status, opening hours, and summary stats.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "place_ids": {
            "type": "string",
            "description": "Comma-separated Google Place IDs to compare side by side"
          },
          "username": {
            "type": "string",
            "description": "Brand username to compare all its locations. Example: \"gregorysgr\""
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_weather_history",
      "description": "Get weather history for a Greek city — temperature trend, rain history, daily min/max, wind, humidity over a configurable period (1-90 days). Supports English and Greek city names. Available cities: Athens, Thessaloniki, Patras, Heraklion, Larissa, Volos, Ioannina, Chania, Kavala, Rhodes, Vouliagmeni, Marousi, Rafina, Elefsina, Piraeus.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "City name in English or Greek. Available: Athens, Thessaloniki, Patras, Heraklion, Larissa, Volos, Ioannina, Chania, Kavala, Rhodes, Vouliagmeni, Marousi, Rafina, Elefsina, Piraeus."
          },
          "days": {
            "type": "number",
            "minimum": 1,
            "maximum": 90,
            "default": 7,
            "description": "Number of days to look back (default 7, max 90)"
          }
        },
        "required": [
          "city"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_media_advertisers",
      "description": "Get top media advertisers for ONE weekly export — ranked by the number of distinct campaigns listed that week. Shows agencies, campaign types (digital/TV), categories, and linked DASHR brands. If no week specified, uses the latest available. Always returns the FULL list of weeks in the archive (available_weeks, first_week, last_week, missing_weeks) so you can see how far back the history goes; a week with no export returns an error that lists the valid ones. One week only - for a period (e.g. a month) or one advertiser's history use get_media_campaigns with date_from/date_to. Weekly data from Mediaservices/Focus Bari.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "week": {
            "type": "string",
            "description": "Week in ISO format, e.g. \"2026-W16\". If omitted, uses the latest available week. A week that has no export returns an error listing all valid weeks (see available_weeks in any result)."
          },
          "limit": {
            "type": "number",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Max advertisers to return (default 20, max 100)"
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_sponsor_network",
      "description": "Get sponsor relationships in Greek sports and entertainment. Without username: shows full sponsor network overview with top sponsors. With username: if it's a team shows its sponsors, if it's a brand shows all teams it sponsors. Useful for brand partnerships and sponsorship intelligence.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Optional username. If it's a team: shows sponsors of that team. If it's a brand/sponsor: shows all teams that list it as a sponsor. If omitted: shows all sponsor relationships."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_creator_campaigns",
      "description": "ΜΟΝΟ οι πληρωμένες/εμπορικές συνεργασίες με απόδειξη ανά ανάρτηση: δήλωση στη λεζάντα (#ad, #thisisad, paid partnership, «σε συνεργασία με») Ή καταχώριση στο επίσημο μητρώο εμπορικού περιεχομένου του TikTok (ακόμη κι όταν η λεζάντα δεν δηλώνει τίποτα) — κάθε γραμμή λέει ποια πηγή. Είναι ΣΤΕΝΟ υποσύνολο. Για ΚΑΘΕ tag ή αναφορά μάρκας, δηλωμένη ή όχι, χρησιμοποίησε το get_collaborations. Get paid campaigns of Greek creators, each row labelled by source: disclosed in the caption, listed in TikTok's official commercial-content registry, or both. Registry-only rows: DASHR's caption scan (#ad / «σε συνεργασία με» / paid partnership) found no disclosure — never describe them as caption-declared, nor claim the caption has none; TikTok does not name their advertiser, so the brand there is DASHR's reading of the caption. This catches \"shadow\" campaigns that the TikTok Ad Library (ad/query) never exposes, because it only shows the advertiser and the media agency — never the creator running the ad. Pass username for a creator (campaigns they ran) or a brand (creators it used). Pass brand as free text for foreign advertisers that have no DASHR profile. Without arguments: brands spending on Greek creators.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Optional username. If it is a creator: shows their paid/commercial campaigns — disclosed in the caption and/or listed in TikTok's official commercial-content registry (each row states which). If it is a brand: shows the creators who ran campaigns for that brand. If omitted: shows the overall picture."
          },
          "brand": {
            "type": "string",
            "description": "Optional brand name as free text (e.g. \"Samsung\", \"Temu\"). Use for advertisers that have NO profile in DASHR — foreign brands that spend on Greek creators are stored by name only."
          },
          "days": {
            "type": "number",
            "description": "Look back this many days (default 365)."
          },
          "limit": {
            "type": "number",
            "description": "Max rows to return (default 50, max 200)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_media_group",
      "description": "Ownership map of Greek media: which outlets belong to the same group. Pass group (group name) for its full composition, or username (an outlet) to find which group it belongs to. Without arguments: all groups with member counts. An outlet with no group is independent — that is the default for most media. Useful because ten sites of the same group republishing one story are NOT ten independent confirmations.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "group": {
            "type": "string",
            "description": "Group name, e.g. \"Alter Ego Media\", \"ΣΚΑΪ\", \"24 MEDIA\". Returns its full composition."
          },
          "username": {
            "type": "string",
            "description": "An outlet username. Returns which group it belongs to, or null if it is independent."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_pagespeed_comparison",
      "description": "Compare PageSpeed Insights scores for 2-3 websites side by side — performance, SEO, accessibility, best practices scores for both mobile and desktop, plus Core Web Vitals (FCP, LCP, TBT, CLS). Source: Google PageSpeed Insights.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domains": {
            "type": "string",
            "description": "Comma-separated domains to compare (2-3). Example: \"cosmote.gr,vodafone.gr,nova.gr\""
          }
        },
        "required": [
          "domains"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_industry_overview",
      "description": "Get comprehensive industry/category overview for Greece — total accounts, avg followers, engagement, tier breakdown, top 10 creators, top 5 brands, trending hashtags, media campaign count, ad detection count. Use for market research, category analysis, or industry snapshots.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Industry/category to analyze. Examples: \"Beauty\", \"Sports\", \"Energy\", \"Food\", \"Fashion\", \"Technology\", \"Finance\", \"Health\""
          }
        },
        "required": [
          "category"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_posts_archive",
      "description": "Search archived posts for any creator across all platforms (TikTok, Instagram, Facebook). Data is kept forever — you can query posts from any date. Use this to answer questions like 'what did @username post last April?' or 'show me their top posts'. ⚠️ Η κάλυψη ΔΕΝ είναι πλήρης ανά πλατφόρμα: για Facebook κρατά μικρό κλάσμα — χρησιμοποίησε το get_facebook_content. Για YouTube το get_youtube_content, για stories Instagram το get_ig_stories.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "Creator username (without @ prefix)"
          },
          "platform": {
            "type": "string",
            "enum": [
              "tiktok",
              "instagram",
              "facebook"
            ],
            "description": "Filter by platform (omit for all)"
          },
          "date_from": {
            "type": "string",
            "description": "Filter posts published on or after this date (YYYY-MM-DD)"
          },
          "date_to": {
            "type": "string",
            "description": "Filter posts published on or before this date (YYYY-MM-DD)"
          },
          "sort": {
            "type": "string",
            "enum": [
              "likes",
              "views",
              "comments",
              "first_seen",
              "posted_at"
            ],
            "default": "posted_at",
            "description": "Sort field (default: posted_at desc — when the post was published, not when we crawled it)"
          },
          "limit": {
            "type": "number",
            "default": 20,
            "description": "Number of posts to return (max 100)"
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_greece_digital_stats",
      "description": "Get verified digital statistics for Greece — 231+ data points across 18 sections: internet penetration, social media, ecommerce, AI usage, advertising spend, streaming, mobile, and more. Filter by section code or period (e.g. Y2024, Q1_2026). Each fact includes source citation and confidence level. Use list_research_sections() to see all section codes. Source: 25+ verified sources (DataReportal, Eurostat, IAB Hellas, GWI, EETT), refreshed quarterly.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "section": {
            "type": "string",
            "description": "Filter by section code (e.g. internet_penetration, social_media, ecommerce, ai_adoption). If omitted, returns all sections. Use list_research_sections() to see all valid codes."
          },
          "period": {
            "type": "string",
            "description": "Filter by period label (e.g. Y2024, Q1_2026, Y2025). If omitted, returns all periods."
          },
          "country": {
            "type": "string",
            "description": "ISO country code. Default: GR (Greece)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_greece_decade_trend",
      "description": "Track a single Greek digital metric across time — shows decade evolution (2014–2026). Example: internet_users_pct shows internet penetration from 56% in 2014 to 87% in 2026. Returns time-ordered array of values with source citations per data point. Use this when asked \"how has X changed over the years?\" or for trend analysis.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "metric_key": {
            "type": "string",
            "description": "Metric key to track across time (e.g. internet_users_pct, social_media_users_pct). Returns all rows whose metric_key contains this string, ordered by period_date."
          },
          "country": {
            "type": "string",
            "description": "ISO country code. Default: GR."
          }
        },
        "required": [
          "metric_key"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "list_research_sections",
      "description": "List all 24 Digital Greece research sections with their codes, labels (Greek/English), descriptions, icons, and published fact counts. Use this to discover available section codes before calling get_greece_digital_stats(section=...). Sections include: internet_penetration, social_media, ecommerce, ai_adoption, streaming, mobile, advertising, and more.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "ISO country code. Default: GR."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "search_greece_facts",
      "description": "Full-text search across 231+ verified Greek digital statistics. Searches metric labels (Greek and English) and notes. Returns matching facts with values, periods, and source citations. Use this when you know what you are looking for but not the exact section or metric_key.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "description": "Full-text search query against metric labels (Greek/English) and notes."
          },
          "country": {
            "type": "string",
            "description": "ISO country code. Default: GR."
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_metric_sources",
      "description": "Get primary and secondary source attribution for a specific Greek digital metric. Returns source name, URL, date, confidence level (HIGH/MEDIUM/LOW), and secondary verification source when available. Use this to verify or cite a specific data point.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "metric_key": {
            "type": "string",
            "description": "The exact metric_key to retrieve source attribution for."
          },
          "country": {
            "type": "string",
            "description": "ISO country code. Default: GR."
          }
        },
        "required": [
          "metric_key"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "extract_youtube_video",
      "description": "Fetches the transcript + AI-generated Greek summary of any YouTube video, linked to a DASHR profile. Cache-first: if the video has been extracted before, returns the cached result instantly without burning quota. Otherwise calls RapidAPI for transcript + Claude Haiku for Greek summary. REQUIRES profile_username (must be active Greek DASHR profile). The video gets permanently stored linked to that profile. Returns: transcript (full text in original lang Greek/English), summary_gr (TL;DR Greek), summary_payload (key takeaways, hashtags, topics, sentiment, audience), metadata (title, channel, duration, views, likes, upload date, thumbnail, tags). Use cases: analyze creator video content, generate SEO insights from competitor videos, track political/news media messaging, podcast summarization. If profile_username is unknown, first call search_creators() with a keyword to find the right username.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "YouTube video URL (youtube.com/watch?v=... or youtu.be/... or youtube.com/shorts/...) or raw 11-char video ID."
          },
          "profile_username": {
            "type": "string",
            "description": "REQUIRED: DASHR profile username this video links to. Must exist in DASHR active GR creators. If you don't know the profile, first use search_creators() to find it. For videos that don't link to any tracked profile, the extraction will fail with guidance."
          }
        },
        "required": [
          "url",
          "profile_username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "extract_tiktok_video",
      "description": "Fetches the transcript + AI-generated Greek summary of any TikTok video, linked to a DASHR profile. Cache-first: cached extracts return instantly without burning quota. Otherwise calls Supadata for native TikTok captions + Claude Haiku for Greek summary. REQUIRES profile_username (must be active Greek DASHR profile, any account_type). The video gets permanently stored linked to that profile. Returns: transcript (Greek), summary_gr (TL;DR), summary_payload (key takeaways, hashtags, topics, sentiment, audience), metadata (title, channel, duration, views, likes, comments, shares, upload date, thumbnail). Use cases: analyze creator messaging, track political TikTok content, news-outlet TikTok summaries, podcast clip analysis, brand TikTok campaigns. If profile_username unknown, call search_creators() first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "TikTok video URL (tiktok.com/@user/video/... or vm.tiktok.com/... or vt.tiktok.com/...)."
          },
          "profile_username": {
            "type": "string",
            "description": "REQUIRED: DASHR profile username this video links to. Must exist in DASHR active GR creators (any account_type). Use search_creators() to find the right username if you don't know it."
          }
        },
        "required": [
          "url",
          "profile_username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "list_youtube_extracts",
      "description": "Lists existing YouTube transcript+summary extracts already in DASHR cache. Use this when asked \"what YouTube videos have we transcripted/summarized for X creator?\" or \"show me all transcripts for channel Y\". Returns extracts with video_id, title, channel, profile_username, summary_gr (Greek TL;DR), key_takeaways, hashtags, topics, sentiment, audience, word_count, extracted_at. Filters: profile_username (DASHR creator), channel (substring of YT channel/title), limit (default 20, max 100). Cache-only — does NOT fetch new transcripts. Use extract_youtube_video for that.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "profile_username": {
            "type": "string",
            "description": "Filter by DASHR profile username (the account this video links to in our DB). Example: \"tsounischris\" returns all YouTube extracts linked to that creator."
          },
          "channel": {
            "type": "string",
            "description": "Filter by YouTube channel name (substring match). Example: \"Chris Tsounis\" returns videos from any channel with that name in title."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Max results to return (default 20)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "list_tiktok_extracts",
      "description": "Lists existing TikTok transcript+summary extracts already in DASHR cache. Use this when asked \"what TikTok videos have we transcripted for X creator?\" or \"show me TikTok transcripts for @user\". Returns extracts with video_id, url, title, channel, profile_username, summary_gr (Greek TL;DR), key_takeaways, hashtags, topics, sentiment, audience, views, likes, comments, word_count, extracted_at. Filters: profile_username, channel (substring of TT username/title), limit (default 20, max 100). Cache-only — does NOT fetch new transcripts. Use extract_tiktok_video for that.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "profile_username": {
            "type": "string",
            "description": "Filter by DASHR profile username. Example: \"ta_nea.gr\" returns all TikTok extracts linked to that creator."
          },
          "channel": {
            "type": "string",
            "description": "Filter by TikTok channel/username (substring). Example: \"ta_nea\" matches @ta_nea.gr."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Max results to return (default 20)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "extract_instagram_video",
      "description": "Fetches the transcript + AI-generated Greek summary of any Instagram Reel, linked to a DASHR profile. Cache-first: cached extracts return instantly without burning quota. Otherwise calls Supadata for native Instagram Reel captions + Claude Haiku for Greek summary. REQUIRES profile_username (must be active Greek DASHR profile, any account_type). The Reel gets permanently stored linked to that profile. Returns: transcript (Greek), summary_gr (TL;DR), summary_payload (key takeaways, hashtags, topics, sentiment, audience), metadata (title, channel, duration, views, likes, comments, shares, upload date, thumbnail). NOTE: only video Reels with speech return transcripts — photos and carousels have no audio and will return no transcript. Metadata fields such as views/likes/thumbnail/duration may be null or 0 for Instagram (platform limitation) — this is expected. Use cases: analyze creator messaging, track political Instagram Reels, news-outlet Reel summaries, brand Instagram campaigns. If profile_username unknown, call search_creators() first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Instagram Reel/post URL (instagram.com/reel/..., /reels/..., /p/..., /tv/...)."
          },
          "profile_username": {
            "type": "string",
            "description": "REQUIRED: DASHR profile username this video links to. Must exist in DASHR active GR creators (any account_type). Use search_creators() to find the right username if you don't know it."
          }
        },
        "required": [
          "url",
          "profile_username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "list_instagram_extracts",
      "description": "Lists existing Instagram Reel transcript+summary extracts already in DASHR cache. Use this when asked \"what Instagram Reels have we transcripted for X creator?\" or \"show me Instagram transcripts for @user\". Returns extracts with video_id, url, title, channel, profile_username, summary_gr (Greek TL;DR), key_takeaways, hashtags, topics, sentiment, audience, views, likes, comments, word_count, extracted_at. Filters: profile_username, channel (substring of IG username/title), limit (default 20, max 100). Cache-only — does NOT fetch new transcripts. Use extract_instagram_video for that.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "profile_username": {
            "type": "string",
            "description": "Filter by DASHR profile username. Example: \"ta_nea.gr\" returns all Instagram extracts linked to that creator."
          },
          "channel": {
            "type": "string",
            "description": "Filter by Instagram channel/username (substring). Example: \"ta_nea\" matches @ta_nea.gr."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Max results to return (default 20)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_dashr_insights",
      "description": "🇬🇷 FLAGSHIP TOOL — Returns DASHR's real-time computed benchmarks for the Greek social media landscape. 40 verified Q&A across 9 sections: TikTok (16 — 52K+ posts analyzed, best posting day, view distribution, brand collaborations, podcasts, hashtags, lives), X/Twitter (4 — trending topics, persistence), Google Trends (3 — top viral searches), Greek News (3 — sentiment analysis on 17K+ headlines), Facebook (3 — reactions breakdown), Instagram (3 — engagement by tier), SEO/PageSpeed (3 — mobile vs desktop), Cross-platform (3 — multi-platform creators, verified, 1M+), Extras (2 — total views, recent lives). Use this tool to answer broad questions like \"what are the latest Greek social media benchmarks\", \"what % of Greek TikTok posts go viral\", \"Greek brand collaborations 2026\", \"which day has best engagement\". Filters: section (one of all/tiktok/x/google_trends/news/facebook/instagram/seo/cross/extra) or question_ids (specific IDs 1-49). Auto-updated hourly. Public source: https://dashr.live/insights",
      "inputSchema": {
        "type": "object",
        "properties": {
          "section": {
            "type": "string",
            "enum": [
              "all",
              "tiktok",
              "x",
              "google_trends",
              "news",
              "facebook",
              "instagram",
              "seo",
              "cross",
              "extra"
            ],
            "description": "Filter by section. Default: \"all\" (returns all 40 questions). Options: tiktok (16 Q&A — posts, creators, lives, brand collabs, podcasts, hashtags), x (4 — X/Twitter trends), google_trends (3 — viral searches), news (3 — Greek news + sentiment), facebook (3 — reactions, post types), instagram (3 — engagement by tier), seo (3 — PageSpeed mobile/desktop), cross (3 — cross-platform stats), extra (2 — total views, recent lives)."
          },
          "question_ids": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "Optional: specific question IDs (1-49) to return. Example: [1, 2, 7] for total posts + creators + brand collabs."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_wikipedia",
      "description": "Get Wikipedia/Wikidata enrichment for a Greek politician or party account: factual identity (real name, office, capacity, level, constituency, party), Wikidata properties (birth date/place, party history, office timeline, occupations), Wikipedia summary, and pageview trend with spike detection (day >3× rolling avg). GDPR-compliant: no health/religion/orientation data returned. Use this to answer: \"ποιος είναι ο X\", \"ποια αξιώματα έχει κατέχει\", \"πότε γεννήθηκε\", \"πότε είχε spike στο Wikipedia\". Data enriched nightly by DASHR. Use list_politicians() to discover all available profiles.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR username/handle of a Greek politician or party account (e.g. \"kyriakos_mitsotakis\", \"kasselakis_st\"). The tool returns the Wikipedia/Wikidata enrichment stored by DASHR for this profile."
          },
          "pageviews_days": {
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "description": "How many days of pageview history to return (default 30, max 365)."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "list_politicians",
      "description": "List all DASHR-tracked Greek politicians and party accounts with Wikipedia/Wikidata enrichment status. Filters: party (e.g. \"ΝΔ\", \"ΠΑΣΟΚ\", \"ΣΥΡΙΖΑ\"), capacity (elected/candidate/former), level (national/local/european), has_wikipedia (only those with a confirmed Wikipedia entry). Returns: username, party, office, constituency, wikidata_id, wiki_status, followers. Use get_wikipedia(username) for full pageviews and properties on a specific profile.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "party": {
            "type": "string",
            "description": "Filter by party. Accepts the full name (\"Νέα Δημοκρατία\") OR the common abbreviation (\"ΝΔ\", \"ΠΑΣΟΚ\", \"ΣΥΡΙΖΑ\", \"ΚΚΕ\", \"ΕΛ.ΛΥ.\"). Leave empty for all parties."
          },
          "capacity": {
            "type": "string",
            "enum": [
              "elected",
              "candidate",
              "former"
            ],
            "description": "Filter by capacity: elected | candidate | former."
          },
          "level": {
            "type": "string",
            "enum": [
              "national",
              "local",
              "european"
            ],
            "description": "Filter by level: national | local | european."
          },
          "has_wikipedia": {
            "type": "boolean",
            "description": "If true, return only profiles with a Wikipedia entry (status=ok)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Max results (default 50)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_politician_visibility",
      "description": "Get factual AI + Google Search visibility for a Greek politician or party account. ai_visibility: how often this profile is mentioned/cited by Google AI Overview, Gemini, Claude, Perplexity in tracked queries — mention_pct, citation_pct, cited source domains, history. serp_visibility: Google organic position for the profile's name query + knowledge panel presence. GDPR Article 9 compliant: NO sentiment, NO ranking by political stance — factual citation presence only. Use this to answer: \"εμφανίζεται ο X στο Google AI;\", \"ποιες πηγές τον αναφέρουν\", \"ποια θέση έχει στο Google\", \"έχει knowledge panel\". For party-level SoV across all politicians use get_politician_visibility_overview().",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1,
            "description": "DASHR username of a Greek politician or party account (e.g. \"kyriakos_mitsotakis\", \"syriza_gr\"). Returns factual AI and Google search visibility — mention/citation presence, sources cited, SoV. GDPR-compliant: no sentiment analysis for political profiles."
          },
          "engine": {
            "type": "string",
            "enum": [
              "ai_overview",
              "ai_mode",
              "all"
            ],
            "description": "AI engine to filter: ai_overview (Google AI Overview), ai_mode (Google AI Mode), or all (default)."
          }
        },
        "required": [
          "username"
        ],
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    },
    {
      "name": "get_politician_visibility_overview",
      "description": "Overview of AI Share of Voice (SoV) across ALL DASHR-tracked Greek politicians and parties. Returns ranked list by AI mention_pct (how often each is mentioned by AI engines in tracked queries). Also returns party-level aggregate SoV. GDPR Article 9 compliant: factual mention frequency only — no sentiment, no political evaluation. Use this to answer: \"ποιοι πολιτικοί εμφανίζονται περισσότερο στην AI\", \"ποιο κόμμα έχει μεγαλύτερη AI visibility\". For a specific politician use get_politician_visibility(username).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "engine": {
            "type": "string",
            "enum": [
              "ai_overview",
              "ai_mode",
              "all"
            ],
            "description": "AI engine filter: ai_overview | ai_mode | all (default)."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 75,
            "description": "Max politicians to return (default 30)."
          }
        },
        "additionalProperties": false,
        "$schema": "http://json-schema.org/draft-07/schema#"
      }
    }
  ],
  "resources": [
    {
      "name": "platform-info",
      "uri": "dashr://platform-info",
      "mimeType": "text/plain",
      "description": "DASHR platform documentation"
    },
    {
      "name": "database-overview",
      "uri": "dashr://database-overview",
      "mimeType": "application/json",
      "description": "Live database stats (5-min cache)"
    }
  ],
  "connect": {
    "claude_desktop": {
      "mcpServers": {
        "dashr": {
          "type": "url",
          "url": "https://dashr.live/mcp"
        }
      }
    },
    "cursor": {
      "mcpServers": {
        "dashr": {
          "url": "https://dashr.live/mcp"
        }
      }
    }
  },
  "rest_api": {
    "description": "Plain JSON REST API — no MCP protocol needed. Works with ChatGPT, Perplexity, any HTTP client.",
    "base_url": "https://dashr.live/mcp/api",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/search?q=keyword&limit=20",
        "description": "Search creators by keyword"
      },
      {
        "method": "GET",
        "path": "/api/creators?category=Food&sort=engagement&limit=10",
        "description": "List/filter creators"
      },
      {
        "method": "GET",
        "path": "/api/creator/{username}",
        "description": "Get single creator profile"
      },
      {
        "method": "GET",
        "path": "/api/stats",
        "description": "Database statistics"
      },
      {
        "method": "GET",
        "path": "/api/categories",
        "description": "All categories with metrics"
      },
      {
        "method": "GET",
        "path": "/api/trending/videos?limit=20",
        "description": "Trending TikTok videos in Greece"
      },
      {
        "method": "GET",
        "path": "/api/trending/sounds?limit=20",
        "description": "Trending TikTok sounds in Greece"
      },
      {
        "method": "GET",
        "path": "/api/trending/hashtags?limit=20",
        "description": "Trending TikTok hashtags in Greece"
      },
      {
        "method": "GET",
        "path": "/api/live",
        "description": "Currently live Greek TikTok creators"
      },
      {
        "method": "GET",
        "path": "/api/x-trends?period=now",
        "description": "Twitter/X trending topics in Greece (now or 24h)"
      },
      {
        "method": "GET",
        "path": "/api/media-campaigns?mode=stats",
        "description": "Greek media advertising campaigns — TV & digital monitoring"
      }
    ]
  },
  "website": "https://dashr.live"
}