"""Tool metadata for the web playground.

Contains company info, logos, links, branding, and rich descriptions
for each connector. Used by the connector detail page.
"""

from __future__ import annotations

_BF = lambda d: f"https://cdn.brandfetch.io/{d}?c=1idiVFVAawYfs0vBpzR"
_GOOG = "https://www.gstatic.com/images/branding/product/1x"

TOOL_META: dict[str, dict] = {
    "gmail": {
        "company": "Google",
        "website": "https://mail.google.com",
        "docs": "https://developers.google.com/workspace/gmail/api/reference/rest",
        "github": "https://github.com/googleapis/google-api-python-client",
        "logo": f"{_GOOG}/gmail_2020q4_32dp.png",
        "color": "#EA4335",
        "tagline": "Read, send, and manage emails programmatically",
        "overview": "The Gmail API lets you read, compose, send, and organize email messages and threads. Use it to build email automation, customer communication workflows, notification systems, and email analytics pipelines. Supports OAuth 2.0 for user-level access and Service Accounts for domain-wide access in Google Workspace.",
        "use_cases": [
            "Email automation and scheduling",
            "Customer support ticket creation from emails",
            "Email analytics and reporting",
            "Newsletter management",
            "Automated replies and forwarding rules",
        ],
        "auth_methods": ["OAuth 2.0", "Service Account"],
        "pricing": "Free (Google Workspace required for some features)",
        "rate_limit": "250 requests/second per user",
        "prerequisites": [
            "Google Cloud project with Gmail API enabled",
            "OAuth 2.0 credentials or service account key",
        ],
        "get_credentials_url": "https://console.cloud.google.com/apis/credentials",
        "get_credentials_steps": "Go to Google Cloud Console > APIs & Services > Credentials > Create OAuth 2.0 Client ID",
    },
    "gdrive": {
        "company": "Google",
        "website": "https://drive.google.com",
        "docs": "https://developers.google.com/drive/api/reference/rest/v3",
        "github": "https://github.com/googleapis/google-api-python-client",
        "logo": f"{_GOOG}/drive_2020q4_32dp.png",
        "color": "#4285F4",
        "tagline": "Store, share, and collaborate on files",
        "overview": "The Google Drive API provides programmatic access to Google Drive files and folders. Upload, download, search, and organize files. Manage sharing permissions and collaborate with comments. Export Google Docs/Sheets/Slides to PDF, DOCX, and other formats.",
        "use_cases": [
            "File backup and sync",
            "Document management systems",
            "Automated report generation",
            "File sharing workflows",
            "Content migration",
        ],
        "auth_methods": ["OAuth 2.0", "Service Account"],
        "pricing": "Free (15GB), Google Workspace plans for more",
        "rate_limit": "12,000 requests/minute per project",
        "prerequisites": ["Google Cloud project with Drive API enabled", "OAuth 2.0 credentials"],
        "get_credentials_url": "https://console.cloud.google.com/apis/credentials",
        "get_credentials_steps": "Google Cloud Console > APIs & Services > Credentials",
    },
    "gcalendar": {
        "company": "Google",
        "website": "https://calendar.google.com",
        "docs": "https://developers.google.com/calendar/api/v3/reference",
        "github": "https://github.com/googleapis/google-api-python-client",
        "logo": f"{_GOOG}/calendar_2020q4_32dp.png",
        "color": "#4285F4",
        "tagline": "Schedule events, manage calendars, check availability",
        "overview": "The Google Calendar API lets you create, modify, and query calendar events. Check free/busy status for scheduling, manage calendar sharing and access control, and build scheduling automation for teams and organizations.",
        "use_cases": [
            "Meeting scheduling automation",
            "Availability checking",
            "Calendar sync across platforms",
            "Event reminders and notifications",
            "Resource booking systems",
        ],
        "auth_methods": ["OAuth 2.0", "Service Account"],
        "pricing": "Free with Google account",
        "rate_limit": "500 requests/100 seconds per user",
        "prerequisites": ["Google Cloud project with Calendar API enabled"],
        "get_credentials_url": "https://console.cloud.google.com/apis/credentials",
        "get_credentials_steps": "Google Cloud Console > Credentials",
    },
    "gsheets": {
        "company": "Google",
        "website": "https://sheets.google.com",
        "docs": "https://developers.google.com/sheets/api/reference/rest",
        "github": "https://github.com/googleapis/google-api-python-client",
        "logo": f"{_GOOG}/sheets_2020q4_32dp.png",
        "color": "#34A853",
        "tagline": "Read, write, and format spreadsheet data",
        "overview": "The Google Sheets API provides full access to spreadsheet data and structure. Read and write cell values, create and format sheets, apply batch operations, and use Sheets as a lightweight database or reporting layer for your applications.",
        "use_cases": [
            "Data entry and extraction",
            "Automated reporting",
            "Spreadsheet as database",
            "Data pipelines and ETL",
            "Budget and inventory tracking",
        ],
        "auth_methods": ["OAuth 2.0", "Service Account"],
        "pricing": "Free with Google account",
        "rate_limit": "300 requests/minute per project",
        "prerequisites": ["Google Cloud project with Sheets API enabled"],
        "get_credentials_url": "https://console.cloud.google.com/apis/credentials",
        "get_credentials_steps": "Google Cloud Console > Credentials",
    },
    "gdocs": {
        "company": "Google",
        "website": "https://docs.google.com",
        "docs": "https://developers.google.com/docs/api/reference/rest",
        "github": "https://github.com/googleapis/google-api-python-client",
        "logo": f"{_GOOG}/docs_2020q4_32dp.png",
        "color": "#4285F4",
        "tagline": "Create and edit documents programmatically",
        "overview": "The Google Docs API lets you create and modify Google Docs programmatically. Insert text, apply formatting, and extract content. Use it for document generation, template-based reports, and content management workflows.",
        "use_cases": [
            "Automated document generation",
            "Template-based reporting",
            "Content extraction",
            "Contract and proposal creation",
        ],
        "auth_methods": ["OAuth 2.0", "Service Account"],
        "pricing": "Free with Google account",
        "rate_limit": "300 requests/minute per project",
        "prerequisites": ["Google Cloud project with Docs API enabled"],
        "get_credentials_url": "https://console.cloud.google.com/apis/credentials",
        "get_credentials_steps": "Google Cloud Console > Credentials",
    },
    "gtasks": {
        "company": "Google",
        "website": "https://tasks.google.com",
        "docs": "https://developers.google.com/tasks/reference/rest",
        "github": "https://github.com/googleapis/google-api-python-client",
        "logo": f"{_GOOG}/tasks_2021_32dp.png",
        "color": "#4285F4",
        "tagline": "Manage task lists and to-do items",
        "overview": "The Google Tasks API provides access to task lists and individual tasks. Create, update, complete, and organize tasks programmatically. Integrates naturally with Google Calendar and Gmail for productivity workflows.",
        "use_cases": [
            "Task automation",
            "Project tracking",
            "To-do list sync",
            "Workflow triggers on task completion",
        ],
        "auth_methods": ["OAuth 2.0"],
        "pricing": "Free with Google account",
        "rate_limit": "300 requests/minute per project",
        "prerequisites": ["Google Cloud project with Tasks API enabled"],
        "get_credentials_url": "https://console.cloud.google.com/apis/credentials",
        "get_credentials_steps": "Google Cloud Console > Credentials",
    },
    "slack": {
        "company": "Salesforce (Slack Technologies)",
        "website": "https://slack.com",
        "docs": "https://api.slack.com/methods",
        "github": "https://github.com/slackapi",
        "logo": _BF("slack.com"),
        "color": "#4A154B",
        "tagline": "Team messaging, channels, and collaboration",
        "overview": "The Slack Web API provides comprehensive access to Slack workspaces. Send and manage messages, create and manage channels, upload files, manage users, set reminders, and build interactive bot experiences. Supports both bot tokens and user tokens.",
        "use_cases": [
            "Team notifications and alerts",
            "Customer support bots",
            "DevOps alerting",
            "Workflow automation",
            "Internal tooling",
        ],
        "auth_methods": ["OAuth 2.0", "Bot Token"],
        "pricing": "Free tier available, Pro from $8.75/user/month",
        "rate_limit": "1 request/second (Tier 2)",
        "prerequisites": ["Slack workspace", "Slack App with bot token"],
        "get_credentials_url": "https://api.slack.com/apps",
        "get_credentials_steps": "Slack API > Your Apps > Create New App > Bot Token",
    },
    "discord": {
        "company": "Discord Inc.",
        "website": "https://discord.com",
        "docs": "https://discord.com/developers/docs",
        "github": "https://github.com/discord",
        "logo": _BF("discord.com"),
        "color": "#5865F2",
        "tagline": "Messaging, voice, and community management",
        "overview": "The Discord API provides access to Discord servers (guilds), channels, messages, and members. Build bots that moderate communities, send notifications, manage roles, and create interactive experiences. Supports bot tokens and OAuth 2.0.",
        "use_cases": [
            "Community moderation bots",
            "Server management automation",
            "Notification systems",
            "Gaming integrations",
            "Event management",
        ],
        "auth_methods": ["Bot Token", "OAuth 2.0"],
        "pricing": "Free, Nitro from $9.99/month",
        "rate_limit": "50 requests/second global",
        "prerequisites": ["Discord account", "Bot application in Developer Portal"],
        "get_credentials_url": "https://discord.com/developers/applications",
        "get_credentials_steps": "Developer Portal > New Application > Bot Token",
    },
    "github": {
        "company": "Microsoft (GitHub Inc.)",
        "website": "https://github.com",
        "docs": "https://docs.github.com/en/rest",
        "github": "https://github.com/github",
        "logo": _BF("github.com"),
        "color": "#181717",
        "tagline": "Code hosting, issues, PRs, and CI/CD",
        "overview": "The GitHub REST API provides access to repositories, issues, pull requests, commits, releases, and more. Automate code reviews, manage CI/CD workflows, track issues, and build developer tools that integrate with the GitHub ecosystem.",
        "use_cases": [
            "CI/CD automation",
            "Issue tracking and triage",
            "Code review workflows",
            "Release management",
            "Developer analytics",
        ],
        "auth_methods": ["Personal Access Token", "OAuth 2.0", "GitHub App"],
        "pricing": "Free for public repos, Teams from $4/user/month",
        "rate_limit": "5,000 requests/hour authenticated",
        "prerequisites": ["GitHub account", "Personal access token or GitHub App"],
        "get_credentials_url": "https://github.com/settings/tokens",
        "get_credentials_steps": "Settings > Developer Settings > Personal Access Tokens",
    },
    "gitlab": {
        "company": "GitLab Inc.",
        "website": "https://gitlab.com",
        "docs": "https://docs.gitlab.com/api/rest/",
        "github": "https://github.com/gitlabhq/gitlabhq",
        "logo": _BF("gitlab.com"),
        "color": "#FC6D26",
        "tagline": "DevOps platform with Git, CI/CD, and issue tracking",
        "overview": "The GitLab REST API provides access to projects, merge requests, issues, pipelines, and CI/CD. Manage the full DevOps lifecycle from a single platform. Supports both GitLab.com and self-hosted instances.",
        "use_cases": [
            "CI/CD pipeline management",
            "Merge request automation",
            "Issue tracking",
            "Release management",
            "Self-hosted DevOps",
        ],
        "auth_methods": ["Personal Access Token", "OAuth 2.0"],
        "pricing": "Free tier, Premium from $29/user/month",
        "rate_limit": "2,000 requests/minute authenticated",
        "prerequisites": ["GitLab account", "Personal access token"],
        "get_credentials_url": "https://gitlab.com/-/user_settings/personal_access_tokens",
        "get_credentials_steps": "Preferences > Access Tokens > Create",
    },
    "notion": {
        "company": "Notion Labs Inc.",
        "website": "https://notion.so",
        "docs": "https://developers.notion.com/reference",
        "github": "https://github.com/makenotion/notion-sdk-js",
        "logo": _BF("notion.so"),
        "color": "#000000",
        "tagline": "All-in-one workspace for notes, docs, and databases",
        "overview": "The Notion API provides access to pages, databases, blocks, comments, and users. Query and update databases, create and modify pages, manage content blocks, thread comments, and build integrations that sync data with your Notion workspace. Pinned to Notion-Version 2022-06-28.",
        "use_cases": [
            "Knowledge base management",
            "Content publishing",
            "Project tracking",
            "CRM in Notion databases",
            "Documentation automation",
        ],
        # ToolsConnector is BYOK — users bring an Internal Integration token.
        # OAuth is intentionally out of scope (see CLAUDE.md + ROADMAP).
        "auth_methods": ["Bearer Token (Internal Integration)"],
        "pricing": "Free for personal, Plus from $10/user/month",
        "rate_limit": "3 requests/second average",
        "prerequisites": [
            "Notion workspace",
            "Internal integration created at notion.so/my-integrations",
            "Each page/database must be shared with the integration via the Connections menu",
        ],
        "get_credentials_url": "https://www.notion.so/my-integrations",
        "get_credentials_steps": (
            "notion.so/my-integrations > New integration > select workspace > "
            "copy the Internal Integration Token (secret_* or ntn_*) > "
            "open each target page > '...' menu > Connections > add the integration"
        ),
    },
    "jira": {
        "company": "Atlassian",
        "website": "https://www.atlassian.com/software/jira",
        "docs": "https://developer.atlassian.com/cloud/jira/platform/rest/v3/",
        "github": "https://github.com/atlassian/python-jira",
        "logo": _BF("atlassian.com"),
        "color": "#0052CC",
        "tagline": "Project tracking, issue management, and agile boards",
        "overview": "The Jira REST API provides access to issues, projects, sprints, boards, and workflows. Search with JQL, manage issue transitions, track time with worklogs, and automate agile project management across teams.",
        "use_cases": [
            "Issue tracking automation",
            "Sprint planning",
            "Bug triage workflows",
            "Cross-tool project sync",
            "Custom reporting",
        ],
        "auth_methods": ["Basic Auth (email:api_token)", "OAuth 2.0"],
        "pricing": "Free up to 10 users, Standard from $8.15/user/month",
        "rate_limit": "100 requests/minute",
        "prerequisites": ["Atlassian account", "API token from id.atlassian.com"],
        "get_credentials_url": "https://id.atlassian.com/manage-profile/security/api-tokens",
        "get_credentials_steps": "Account Settings > Security > API Tokens",
    },
    "lambda_connector": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/lambda/",
        "docs": "https://docs.aws.amazon.com/lambda/latest/api/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#ED7100",
        "tagline": "Run code without provisioning or managing servers",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "100 requests/sec",
        "pricing": "Free tier: 1M requests/month, then $0.20/1M",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "stripe": {
        "company": "Stripe Inc.",
        "website": "https://stripe.com",
        "docs": "https://docs.stripe.com/api",
        "github": "https://github.com/stripe",
        "logo": _BF("stripe.com"),
        "color": "#635BFF",
        "tagline": "Payment processing, subscriptions, and billing",
        "overview": "The Stripe API provides a complete payment infrastructure. Process payments, manage subscriptions, handle invoices, issue refunds, and build checkout experiences. Supports cards, bank transfers, and 100+ payment methods worldwide.",
        "use_cases": [
            "Payment processing",
            "Subscription management",
            "Invoice generation",
            "Marketplace payments",
            "Revenue analytics",
        ],
        "auth_methods": ["API Key (Secret Key)"],
        "pricing": "2.9% + 30c per transaction",
        "rate_limit": "100 read/sec, 100 write/sec",
        "prerequisites": ["Stripe account", "API secret key from dashboard"],
        "get_credentials_url": "https://dashboard.stripe.com/apikeys",
        "get_credentials_steps": "Dashboard > Developers > API Keys",
    },
    "openai": {
        "company": "OpenAI",
        "website": "https://openai.com",
        "docs": "https://platform.openai.com/docs/api-reference",
        "github": "https://github.com/openai",
        "logo": _BF("openai.com"),
        "color": "#412991",
        "tagline": "GPT models, embeddings, and AI capabilities",
        "overview": "The OpenAI API provides access to GPT models for text generation, embeddings for semantic search, image generation with DALL-E, audio transcription with Whisper, and fine-tuning capabilities. Build AI-powered features into any application.",
        "use_cases": [
            "Text generation and chat",
            "Semantic search with embeddings",
            "Image generation",
            "Audio transcription",
            "Content moderation",
        ],
        "auth_methods": ["API Key"],
        "pricing": "Pay-per-token (varies by model)",
        "rate_limit": "Varies by model and tier",
        "prerequisites": ["OpenAI account", "API key from platform.openai.com"],
        "get_credentials_url": "https://platform.openai.com/api-keys",
        "get_credentials_steps": "Platform > API Keys > Create New",
    },
    "anthropic": {
        "company": "Anthropic",
        "website": "https://anthropic.com",
        "docs": "https://docs.anthropic.com/en/api",
        "github": "https://github.com/anthropics",
        "logo": _BF("anthropic.com"),
        "color": "#191919",
        "tagline": "Claude models for safe, capable AI",
        "overview": "The Anthropic API provides access to Claude models for text generation, analysis, and tool use. Build AI assistants, automate reasoning tasks, and integrate Claude's capabilities into your applications. Supports streaming, batching, and multi-turn conversations.",
        "use_cases": [
            "AI assistants and chatbots",
            "Document analysis",
            "Code generation",
            "Research automation",
            "Content creation",
        ],
        "auth_methods": ["API Key"],
        "pricing": "Pay-per-token (varies by model)",
        "rate_limit": "Varies by model and tier",
        "prerequisites": ["Anthropic account", "API key from console.anthropic.com"],
        "get_credentials_url": "https://console.anthropic.com/settings/keys",
        "get_credentials_steps": "Console > Settings > API Keys",
    },
    "salesforce": {
        "company": "Salesforce Inc.",
        "website": "https://salesforce.com",
        "docs": "https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/",
        "github": "https://github.com/salesforce",
        "logo": _BF("salesforce.com"),
        "color": "#00A1E0",
        "tagline": "CRM, sales, service, and marketing platform",
        "overview": "The Salesforce REST API provides access to CRM objects including leads, contacts, accounts, opportunities, and cases. Run SOQL queries, manage records, and integrate with the world's most widely-used CRM platform.",
        "use_cases": [
            "CRM data sync",
            "Lead management",
            "Sales pipeline automation",
            "Customer support workflows",
            "Marketing analytics",
        ],
        "auth_methods": ["OAuth 2.0", "Bearer Token"],
        "pricing": "Enterprise pricing (from $25/user/month)",
        "rate_limit": "Varies by edition",
        "prerequisites": ["Salesforce org", "Connected App with OAuth credentials"],
        "get_credentials_url": "https://login.salesforce.com",
        "get_credentials_steps": "Setup > Apps > App Manager > Connected App",
    },
    "hubspot": {
        "company": "HubSpot Inc.",
        "website": "https://hubspot.com",
        "docs": "https://developers.hubspot.com/docs/api/crm",
        "github": "https://github.com/HubSpot",
        "logo": _BF("hubspot.com"),
        "color": "#FF7A59",
        "tagline": "CRM, marketing, sales, and service hub",
        "overview": "The HubSpot CRM API provides access to contacts, companies, deals, tickets, and pipelines. Search and filter records, manage sales pipelines, and build marketing automation workflows on HubSpot's platform.",
        "use_cases": [
            "Contact management",
            "Deal pipeline tracking",
            "Marketing automation",
            "Customer support ticketing",
            "Sales analytics",
        ],
        "auth_methods": ["Bearer Token (Private App)", "OAuth 2.0"],
        "pricing": "Free CRM, Starter from $20/month",
        "rate_limit": "100 requests/10 seconds (private apps)",
        "prerequisites": ["HubSpot account", "Private app access token"],
        "get_credentials_url": "https://app.hubspot.com/settings",
        "get_credentials_steps": "Settings > Integrations > Private Apps > Create",
    },
    # ── Connectors added for logo/color coverage ──────────────────────
    "acm": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/certificate-manager/",
        "docs": "https://docs.aws.amazon.com/acm/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#DD344C",
        "tagline": "Provision and manage SSL/TLS certificates",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "20 requests/sec",
        "pricing": "Free for public certificates",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "airtable": {
        "company": "Airtable Inc.",
        "website": "https://airtable.com",
        "docs": "https://airtable.com/developers/web/api/introduction",
        "github": "https://github.com/Airtable/airtable.js",
        "logo": _BF("airtable.com"),
        "color": "#18BFFF",
        "tagline": "Flexible database-spreadsheet hybrid for teams",
        "auth_methods": ["Personal Access Token", "OAuth 2.0"],
        "pricing": "Free tier, Team from $20/seat/month",
        "rate_limit": "5 requests/second per base",
        "get_credentials_url": "https://airtable.com/create/tokens",
    },
    "alb": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/elasticloadbalancing/",
        "docs": "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#8C4FFF",
        "tagline": "Distribute traffic across targets with application-layer routing",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "100 requests/sec",
        "pricing": "Pay-per-use ($0.0225/ALB-hour + LCU)",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "asana": {
        "company": "Asana Inc.",
        "website": "https://asana.com",
        "docs": "https://developers.asana.com/reference/rest-api-reference",
        "github": "https://github.com/Asana/python-asana",
        "logo": _BF("asana.com"),
        "color": "#F06A6A",
        "tagline": "Work management and project tracking for teams",
        "auth_methods": ["Personal Access Token", "OAuth 2.0"],
        "pricing": "Free tier, Premium from $10.99/user/month",
        "rate_limit": "150 requests/minute",
        "get_credentials_url": "https://app.asana.com/0/my-apps",
    },
    "auth0": {
        "company": "Okta (Auth0)",
        "website": "https://auth0.com",
        "docs": "https://auth0.com/docs/api/management/v2",
        "github": "https://github.com/auth0/auth0-python",
        "logo": _BF("auth0.com"),
        "color": "#EB5424",
        "tagline": "Identity platform for authentication and authorization",
        "auth_methods": ["Bearer Token"],
        "pricing": "Free up to 7,500 MAUs",
        "get_credentials_url": "https://manage.auth0.com/#/apis/management/explorer",
    },
    "calendly": {
        "company": "Calendly LLC",
        "website": "https://calendly.com",
        "docs": "https://developer.calendly.com/api-docs",
        "github": "https://github.com/calendly",
        "logo": _BF("calendly.com"),
        "color": "#006BFF",
        "tagline": "Scheduling automation for meetings and events",
        "auth_methods": ["Personal Access Token", "OAuth 2.0"],
        "pricing": "Free tier, Standard from $10/seat/month",
        "get_credentials_url": "https://calendly.com/integrations/api_webhooks",
    },
    "cloudflare": {
        "company": "Cloudflare Inc.",
        "website": "https://cloudflare.com",
        "docs": "https://developers.cloudflare.com/api/",
        "github": "https://github.com/cloudflare/cloudflare-python",
        "logo": _BF("cloudflare.com"),
        "color": "#F38020",
        "tagline": "CDN, DNS, security, and edge computing platform",
        "auth_methods": ["API Token", "API Key + Email"],
        "pricing": "Free tier, Pro from $20/month",
        "get_credentials_url": "https://dash.cloudflare.com/profile/api-tokens",
    },
    "cloudwatch": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/cloudwatch/",
        "docs": "https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#FF4F8B",
        "tagline": "Monitor AWS resources and applications in real time",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "50 requests/sec",
        "pricing": "Free tier + pay-per-use",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "confluence": {
        "company": "Atlassian",
        "website": "https://www.atlassian.com/software/confluence",
        "docs": "https://developer.atlassian.com/cloud/confluence/rest/v2/intro/",
        "github": "https://github.com/atlassian-api/atlassian-python-api",
        "logo": _BF("confluence.com"),
        "color": "#172B4D",
        "tagline": "Team wiki, documentation, and knowledge management",
        "auth_methods": ["Basic Auth", "OAuth 2.0"],
        "pricing": "Free up to 10 users",
        "get_credentials_url": "https://id.atlassian.com/manage-profile/security/api-tokens",
    },
    "datadog": {
        "company": "Datadog Inc.",
        "website": "https://datadoghq.com",
        "docs": "https://docs.datadoghq.com/api/latest/",
        "github": "https://github.com/DataDog/datadog-api-client-python",
        "logo": _BF("datadoghq.com"),
        "color": "#632CA6",
        "tagline": "Monitoring, APM, and log management platform",
        "auth_methods": ["API Key + Application Key"],
        "pricing": "Free tier, Pro from $15/host/month",
        "get_credentials_url": "https://app.datadoghq.com/organization-settings/api-keys",
    },
    "dockerhub": {
        "company": "Docker Inc.",
        "website": "https://hub.docker.com",
        "docs": "https://docs.docker.com/docker-hub/api/latest/",
        "github": "https://github.com/docker/hub-tool",
        "logo": _BF("docker.com"),
        "color": "#2496ED",
        "tagline": "Container registry and image management",
        "auth_methods": ["Personal Access Token"],
        "pricing": "Free tier, Pro from $5/month",
        "get_credentials_url": "https://hub.docker.com/settings/security",
    },
    "ec2": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/ec2/",
        "docs": "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#ED7100",
        "tagline": "Resizable compute capacity in the cloud",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "100 requests/sec",
        "pricing": "Pay-per-use (from $0.0116/hour for t3.micro)",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "figma": {
        "company": "Figma Inc. (Adobe)",
        "website": "https://figma.com",
        "docs": "https://www.figma.com/developers/api",
        "github": "https://github.com/figma",
        "logo": _BF("figma.com"),
        "color": "#F24E1E",
        "tagline": "Collaborative design and prototyping tool",
        "auth_methods": ["Personal Access Token", "OAuth 2.0"],
        "pricing": "Free tier, Professional from $15/editor/month",
        "get_credentials_url": "https://www.figma.com/developers/api#access-tokens",
    },
    "firestore": {
        "company": "Google (Firebase)",
        "website": "https://firebase.google.com/products/firestore",
        "docs": "https://firebase.google.com/docs/firestore/reference/rest",
        "github": "https://github.com/firebase/firebase-admin-python",
        "logo": f"{_GOOG}/firebase_28dp.png",
        "color": "#FFCA28",
        "tagline": "Serverless NoSQL document database",
        "auth_methods": ["Bearer Token", "Service Account"],
        "pricing": "Free tier (Spark), Pay-as-you-go (Blaze)",
        "get_credentials_url": "https://console.firebase.google.com/",
    },
    "freshdesk": {
        "company": "Freshworks Inc.",
        "website": "https://freshdesk.com",
        "docs": "https://developers.freshdesk.com/api/",
        "github": "https://github.com/freshdesk",
        "logo": _BF("freshdesk.com"),
        "color": "#2D93F1",
        "tagline": "Customer support and helpdesk platform",
        "auth_methods": ["API Key"],
        "pricing": "Free up to 10 agents",
        "get_credentials_url": "https://support.freshdesk.com/en/support/solutions/articles/215517",
    },
    "iam": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/iam/",
        "docs": "https://docs.aws.amazon.com/IAM/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#DD344C",
        "tagline": "Manage access to AWS services and resources securely",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "15 requests/sec",
        "pricing": "Free",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "intercom": {
        "company": "Intercom Inc.",
        "website": "https://intercom.com",
        "docs": "https://developers.intercom.com/docs/references/rest-api/api.intercom.io/",
        "github": "https://github.com/intercom/python-intercom",
        "logo": _BF("intercom.com"),
        "color": "#6AFDEF",
        "tagline": "Customer messaging and engagement platform",
        "auth_methods": ["Bearer Token"],
        "pricing": "From $39/seat/month",
        "get_credentials_url": "https://app.intercom.com/a/apps/_/developer-hub",
    },
    "linear": {
        "company": "Linear Inc.",
        "website": "https://linear.app",
        "docs": "https://developers.linear.app/docs/graphql/working-with-the-graphql-api",
        "github": "https://github.com/linear/linear",
        "logo": _BF("linear.app"),
        "color": "#5E6AD2",
        "tagline": "Streamlined issue tracking for software teams",
        "auth_methods": ["API Key", "OAuth 2.0"],
        "pricing": "Free tier, Plus from $8/user/month",
        "get_credentials_url": "https://linear.app/settings/api",
    },
    "linkedin": {
        "company": "LinkedIn (Microsoft)",
        "website": "https://www.linkedin.com",
        "docs": "https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/share-on-linkedin",
        "github": "",
        "logo": _BF("linkedin.com"),
        "color": "#0A66C2",
        "tagline": "Post, comment, and react on the world's largest professional network",
        "overview": "Wraps the LinkedIn Posts API (POST /rest/posts), Comments API (POST /rest/socialActions/.../comments), Reactions API (POST /rest/reactions), and OIDC userinfo (/v2/userinfo). Write actions (create_post, delete_post, create_comment, react_to_post) work with the standard 'Share on LinkedIn' product (w_member_social scope, available to every developer). Read actions (get_post, list_my_posts, list_comments) require r_member_social — a RESTRICTED scope granted only to LinkedIn-approved developers. DMs, mentions, and notifications require LinkedIn Partner Program approval and are not available via BYOK.",
        "use_cases": [
            "Personal brand automation",
            "Thought leadership pipelines",
            "PR and announcement workflows",
            "Cross-posting from blogs",
        ],
        "auth_methods": ["OAuth 2.0 Bearer Token"],
        "pricing": "API access free for approved developers; member tokens expire after 60 days",
        "rate_limit": "~150 share API calls/day per member (LinkedIn-enforced UTC daily limit)",
        "prerequisites": [
            "LinkedIn Developer App with 'Sign In with LinkedIn using OpenID Connect' product enabled",
            "'Share on LinkedIn' product enabled for w_member_social scope",
            "OAuth 2.0 access token with at least 'openid profile email w_member_social' scopes",
        ],
        "get_credentials_url": "https://www.linkedin.com/developers/apps",
        "get_credentials_steps": "LinkedIn Developers > Apps > Create app > Products tab > add 'Sign In with LinkedIn using OpenID Connect' + 'Share on LinkedIn' > Auth tab > generate access token (60-day expiry)",
    },
    "mailchimp": {
        "company": "Intuit (Mailchimp)",
        "website": "https://mailchimp.com",
        "docs": "https://mailchimp.com/developer/marketing/api/",
        "github": "https://github.com/mailchimp/mailchimp-marketing-python",
        "logo": _BF("mailchimp.com"),
        "color": "#FFE01B",
        "tagline": "Email marketing and audience management",
        "auth_methods": ["API Key"],
        "pricing": "Free up to 500 contacts",
        "get_credentials_url": "https://mailchimp.com/help/about-api-keys/",
    },
    "medium": {
        "company": "A Medium Corporation",
        "website": "https://medium.com",
        "docs": "https://github.com/Medium/medium-api-docs",
        "github": "https://github.com/Medium/medium-api-docs",
        "logo": _BF("medium.com"),
        "color": "#000000",
        "tagline": "Publish articles to Medium profiles and publications (legacy tokens only)",
        "overview": "The Medium REST API lets you publish articles to a user's personal feed or to publications they contribute to. NOTE: Medium stopped issuing new integration tokens in 2023 — this connector works only for users who already hold a legacy integration token. The API also has no comments endpoint and never has, so reading comments is out of scope.",
        "use_cases": [
            "Cross-post blog articles to Medium",
            "Auto-publish AI-generated drafts",
            "Publish to publications via API",
        ],
        "auth_methods": ["Bearer Token (Integration)"],
        "pricing": "Free; tokens are not reissued (API deprecated 2023)",
        "rate_limit": "Undocumented; conservative defaults applied",
        "prerequisites": ["Existing legacy Medium integration token (new tokens are NOT issued)"],
        "get_credentials_url": "https://medium.com/me/settings",
        "get_credentials_steps": "Medium > Settings > Integration tokens (LEGACY USERS ONLY — new tokens cannot be obtained)",
    },
    "mixpanel": {
        "company": "Mixpanel Inc.",
        "website": "https://mixpanel.com",
        "docs": "https://developer.mixpanel.com/reference/overview",
        "github": "https://github.com/mixpanel/mixpanel-python",
        "logo": _BF("mixpanel.com"),
        "color": "#7856FF",
        "tagline": "Product analytics and user behavior tracking",
        "auth_methods": ["Service Account"],
        "get_credentials_url": "https://mixpanel.com/settings/project#serviceaccounts",
    },
    "mongodb": {
        "company": "MongoDB Inc.",
        "website": "https://www.mongodb.com/atlas",
        "docs": "https://www.mongodb.com/docs/atlas/api/",
        "github": "https://github.com/mongodb/mongo-python-driver",
        "logo": _BF("mongodb.com"),
        "color": "#47A248",
        "tagline": "Cloud-hosted NoSQL document database",
        "auth_methods": ["API Key"],
        "pricing": "Free tier (M0)",
        "get_credentials_url": "https://cloud.mongodb.com/",
    },
    "okta": {
        "company": "Okta Inc.",
        "website": "https://okta.com",
        "docs": "https://developer.okta.com/docs/reference/",
        "github": "https://github.com/okta/okta-sdk-python",
        "logo": _BF("okta.com"),
        "color": "#007DC1",
        "tagline": "Enterprise identity and access management",
        "auth_methods": ["API Token", "OAuth 2.0"],
        "get_credentials_url": "https://developer.okta.com/docs/guides/create-an-api-token/main/",
    },
    "outlook": {
        "company": "Microsoft",
        "website": "https://outlook.com",
        "docs": "https://learn.microsoft.com/en-us/graph/api/resources/mail-api-overview",
        "github": "https://github.com/microsoftgraph/msgraph-sdk-python",
        "logo": _BF("microsoft.com"),
        "color": "#0078D4",
        "tagline": "Email, calendar, and contacts via Microsoft Graph",
        "auth_methods": ["OAuth 2.0"],
        "get_credentials_url": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps",
    },
    "pagerduty": {
        "company": "PagerDuty Inc.",
        "website": "https://pagerduty.com",
        "docs": "https://developer.pagerduty.com/api-reference/",
        "github": "https://github.com/PagerDuty/pdpyras",
        "logo": _BF("pagerduty.com"),
        "color": "#06AC38",
        "tagline": "Incident management and on-call scheduling",
        "auth_methods": ["API Key"],
        "get_credentials_url": "https://support.pagerduty.com/main/docs/api-access-keys",
    },
    "pinecone": {
        "company": "Pinecone Systems Inc.",
        "website": "https://pinecone.io",
        "docs": "https://docs.pinecone.io/reference/api/introduction",
        "github": "https://github.com/pinecone-io/pinecone-python-client",
        "logo": _BF("pinecone.io"),
        "color": "#000000",
        "tagline": "Vector database for AI and machine learning",
        "auth_methods": ["API Key"],
        "get_credentials_url": "https://app.pinecone.io/",
    },
    "plaid": {
        "company": "Plaid Inc.",
        "website": "https://plaid.com",
        "docs": "https://plaid.com/docs/api/",
        "github": "https://github.com/plaid/plaid-python",
        "logo": _BF("plaid.com"),
        "color": "#0A85EA",
        "tagline": "Financial data connectivity and banking APIs",
        "auth_methods": ["API Key"],
        "get_credentials_url": "https://dashboard.plaid.com/team/keys",
    },
    "rabbitmq": {
        "company": "VMware (Broadcom)",
        "website": "https://rabbitmq.com",
        "docs": "https://rawcdn.githack.com/rabbitmq/rabbitmq-server/v4.1.1/deps/rabbitmq_management/priv/www/api/index.html",
        "github": "https://github.com/rabbitmq/rabbitmq-server",
        "logo": _BF("rabbitmq.com"),
        "color": "#FF6600",
        "tagline": "Open-source message broker and queue management",
        "auth_methods": ["Basic Auth"],
        "get_credentials_url": "https://rabbitmq.com/docs/management",
    },
    "rds": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/rds/",
        "docs": "https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#3B48CC",
        "tagline": "Managed relational databases \u2014 PostgreSQL, MySQL, Aurora",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "25 requests/sec",
        "pricing": "Pay-per-use (from $0.017/hour for db.t3.micro)",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "redis": {
        "company": "Upstash Inc.",
        "website": "https://upstash.com",
        "docs": "https://upstash.com/docs/redis/overall/getstarted",
        "github": "https://github.com/upstash/redis-py",
        "logo": _BF("redis.com"),
        "color": "#DC382D",
        "tagline": "Serverless Redis with HTTP API",
        "auth_methods": ["Bearer Token"],
        "get_credentials_url": "https://console.upstash.com/",
    },
    "route53": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/route53/",
        "docs": "https://docs.aws.amazon.com/Route53/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#8C4FFF",
        "tagline": "Scalable DNS and domain name registration",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "5 requests/sec",
        "pricing": "$0.50/hosted zone/month + $0.40/million queries",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "s3": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/s3/",
        "docs": "https://docs.aws.amazon.com/AmazonS3/latest/API/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#569A31",
        "tagline": "Scalable object storage in the cloud",
        "auth_methods": ["AWS SigV4"],
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "secrets_manager": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/secrets-manager/",
        "docs": "https://docs.aws.amazon.com/secretsmanager/latest/apireference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#DD344C",
        "tagline": "Store, rotate, and manage access to secrets securely",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "50 requests/sec",
        "pricing": "$0.40/secret/month + $0.05/10K API calls",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "segment": {
        "company": "Twilio (Segment)",
        "website": "https://segment.com",
        "docs": "https://segment.com/docs/api/",
        "github": "https://github.com/segmentio/analytics-python",
        "logo": _BF("segment.com"),
        "color": "#52BD95",
        "tagline": "Customer data platform and event tracking",
        "auth_methods": ["Bearer Token"],
        "get_credentials_url": "https://app.segment.com/",
    },
    "sendgrid": {
        "company": "Twilio (SendGrid)",
        "website": "https://sendgrid.com",
        "docs": "https://docs.sendgrid.com/api-reference",
        "github": "https://github.com/sendgrid/sendgrid-python",
        "logo": _BF("sendgrid.com"),
        "color": "#51A9E3",
        "tagline": "Transactional and marketing email delivery",
        "auth_methods": ["API Key"],
        "get_credentials_url": "https://app.sendgrid.com/settings/api_keys",
    },
    "shopify": {
        "company": "Shopify Inc.",
        "website": "https://shopify.com",
        "docs": "https://shopify.dev/docs/api/admin-rest",
        "github": "https://github.com/Shopify/shopify-api-python",
        "logo": _BF("shopify.com"),
        "color": "#7AB55C",
        "tagline": "E-commerce platform for online stores",
        "auth_methods": ["API Key"],
        "get_credentials_url": "https://shopify.dev/docs/apps/build/authentication/access-tokens",
    },
    "sqs": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/sqs/",
        "docs": "https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#FF4F8B",
        "tagline": "Fully managed message queuing service",
        "auth_methods": ["AWS SigV4"],
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "cloudfront": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/cloudfront/",
        "docs": "https://docs.aws.amazon.com/cloudfront/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#8C4FFF",
        "tagline": "Fast, secure content delivery network (CDN)",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "100 requests/sec",
        "pricing": "Pay-per-use",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "ecr": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/ecr/",
        "docs": "https://docs.aws.amazon.com/AmazonECR/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#ED7100",
        "tagline": "Fully managed container image registry",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "100 requests/sec",
        "pricing": "Pay-per-use ($0.10/GB/month)",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "ecs": {
        "company": "Amazon Web Services",
        "website": "https://aws.amazon.com/ecs/",
        "docs": "https://docs.aws.amazon.com/AmazonECS/latest/APIReference/",
        "github": "https://github.com/boto/boto3",
        "logo": _BF("aws.amazon.com"),
        "color": "#ED7100",
        "tagline": "Run and manage Docker containers at scale",
        "auth_methods": ["AWS SigV4"],
        "rate_limit": "20 requests/sec",
        "pricing": "Pay-per-use (Fargate: per vCPU/GB-hour)",
        "get_credentials_url": "https://console.aws.amazon.com/iam/home#/security_credentials",
    },
    "supabase": {
        "company": "Supabase Inc.",
        "website": "https://supabase.com",
        "docs": "https://supabase.com/docs/guides/api",
        "github": "https://github.com/supabase/supabase-py",
        "logo": _BF("supabase.com"),
        "color": "#3FCF8E",
        "tagline": "Open-source Firebase alternative with Postgres",
        "auth_methods": ["API Key"],
        "get_credentials_url": "https://supabase.com/dashboard/",
    },
    "teams": {
        "company": "Microsoft",
        "website": "https://teams.microsoft.com",
        "docs": "https://learn.microsoft.com/en-us/graph/api/resources/teams-api-overview",
        "github": "https://github.com/microsoftgraph/msgraph-sdk-python",
        "logo": _BF("microsoft.com"),
        "color": "#6264A7",
        "tagline": "Team collaboration, messaging, and meetings",
        "auth_methods": ["OAuth 2.0"],
        "get_credentials_url": "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps",
    },
    "telegram": {
        "company": "Telegram FZ-LLC",
        "website": "https://telegram.org",
        "docs": "https://core.telegram.org/bots/api",
        "github": "https://github.com/python-telegram-bot/python-telegram-bot",
        "logo": _BF("telegram.org"),
        "color": "#26A5E4",
        "tagline": "Bot API for messaging and group management",
        "auth_methods": ["Bot Token"],
        "pricing": "Free",
        "get_credentials_url": "https://t.me/BotFather",
    },
    "trello": {
        "company": "Atlassian",
        "website": "https://trello.com",
        "docs": "https://developer.atlassian.com/cloud/trello/rest/api-group-actions/",
        "github": "https://github.com/sarumont/py-trello",
        "logo": _BF("trello.com"),
        "color": "#0052CC",
        "tagline": "Visual project management with boards and cards",
        "auth_methods": ["API Key + Token"],
        "get_credentials_url": "https://trello.com/power-ups/admin",
    },
    "twilio": {
        "company": "Twilio Inc.",
        "website": "https://twilio.com",
        "docs": "https://www.twilio.com/docs/usage/api",
        "github": "https://github.com/twilio/twilio-python",
        "logo": _BF("twilio.com"),
        "color": "#F22F46",
        "tagline": "Communication APIs for SMS, voice, and video",
        "auth_methods": ["Basic Auth"],
        "get_credentials_url": "https://console.twilio.com/",
    },
    "vercel": {
        "company": "Vercel Inc.",
        "website": "https://vercel.com",
        "docs": "https://vercel.com/docs/rest-api",
        "github": "https://github.com/vercel/vercel",
        "logo": _BF("vercel.com"),
        "color": "#000000",
        "tagline": "Frontend deployment and serverless platform",
        "auth_methods": ["Bearer Token"],
        "get_credentials_url": "https://vercel.com/account/tokens",
    },
    "webhook": {
        "company": "ToolsConnector",
        "website": "https://github.com/sachinshelke/ToolsConnector",
        "github": "",
        "logo": "",
        "color": "#6366F1",
        "tagline": "Send and manage HTTP webhooks to any endpoint",
        "auth_methods": ["Bearer Token", "API Key"],
    },
    "x": {
        "company": "X Corp",
        "website": "https://x.com",
        "docs": "https://docs.x.com/x-api/introduction",
        "github": "",
        "logo": _BF("x.com"),
        "color": "#000000",
        "tagline": "Post tweets, threads, replies, likes — and read mentions / send DMs (paid tier)",
        "overview": "Wraps X API v2 (api.x.com/2) endpoints for posts, likes, mentions, and DMs. Write actions (POST /2/tweets, /2/users/{id}/likes) work on the lowest user-context tier. Read endpoints (/2/users/{id}/mentions) and DM sending (/2/dm_conversations/with/{id}/messages) are typically gated to X's paid tiers (Basic $100/mo and up) by X's own policy — tier-gated 403s are mapped to PermissionDeniedError with a clear suggestion. Auth is OAuth 2.0 user-context Bearer; scopes are requested narrowly (tweet.read/write, users.read, like.write, dm.write).",
        "use_cases": [
            "Personal brand automation",
            "PR/announcement workflows",
            "Reply bots",
            "Cross-posting from blogs",
            "Thread automation",
        ],
        "auth_methods": ["OAuth 2.0 Bearer Token (user context)"],
        "pricing": "Tier-dependent; see https://developer.x.com/en/products/twitter-api for current Free / Basic / Pro / Enterprise plans",
        "rate_limit": "Tier-dependent; X enforces server-side. Connector exposes a conservative advisory limit (1 req / 2 sec, burst 5).",
        "prerequisites": [
            "X Developer Account with a Project and App",
            "OAuth 2.0 user-context Bearer token",
            "Scopes selected per use: tweet.read users.read (read), tweet.write (post), like.write (like), dm.write (DM)",
        ],
        "get_credentials_url": "https://developer.x.com/en/portal/dashboard",
        "get_credentials_steps": "X Developer Portal > Project > App > User authentication settings > OAuth 2.0 (set callback URL, request scopes) > Generate user-context access token",
    },
    "zendesk": {
        "company": "Zendesk Inc.",
        "website": "https://zendesk.com",
        "docs": "https://developer.zendesk.com/api-reference/",
        "github": "https://github.com/facetoe/zenpy",
        "logo": _BF("zendesk.com"),
        "color": "#03363D",
        "tagline": "Customer service and support ticketing platform",
        "auth_methods": ["API Token", "OAuth 2.0"],
        "get_credentials_url": "https://developer.zendesk.com/documentation/ticketing/getting-started/getting-a-token/",
    },
}

# ── Multi-language repos per connector ─────────────────────────────────
# Each entry is a list of {"url": "...", "lang": "Python|Node|Go|..."} dicts.
# Only include repos that are actual SDK/client libraries (not org pages).
# If a tool has no public repo, omit it or set to [].
TOOL_REPOS: dict[str, list[dict[str, str]]] = {
    "gmail": [
        {"url": "https://github.com/googleapis/google-api-python-client", "lang": "Python"},
        {"url": "https://github.com/googleapis/google-api-nodejs-client", "lang": "Node"},
        {"url": "https://github.com/googleapis/google-api-go-client", "lang": "Go"},
    ],
    "gdrive": [
        {"url": "https://github.com/googleapis/google-api-python-client", "lang": "Python"},
        {"url": "https://github.com/googleapis/google-api-nodejs-client", "lang": "Node"},
    ],
    "gcalendar": [
        {"url": "https://github.com/googleapis/google-api-python-client", "lang": "Python"}
    ],
    "gsheets": [
        {"url": "https://github.com/googleapis/google-api-python-client", "lang": "Python"}
    ],
    "gdocs": [{"url": "https://github.com/googleapis/google-api-python-client", "lang": "Python"}],
    "gtasks": [{"url": "https://github.com/googleapis/google-api-python-client", "lang": "Python"}],
    "slack": [
        {"url": "https://github.com/slackapi/python-slack-sdk", "lang": "Python"},
        {"url": "https://github.com/slackapi/node-slack-sdk", "lang": "Node"},
        {"url": "https://github.com/slackapi/java-slack-sdk", "lang": "Java"},
    ],
    "discord": [
        {"url": "https://github.com/Rapptz/discord.py", "lang": "Python"},
        {"url": "https://github.com/discord/discord-api-docs", "lang": "API Spec"},
    ],
    "github": [
        {"url": "https://github.com/PyGithub/PyGithub", "lang": "Python"},
        {"url": "https://github.com/octokit/octokit.js", "lang": "Node"},
        {"url": "https://github.com/google/go-github", "lang": "Go"},
    ],
    "gitlab": [
        {"url": "https://github.com/python-gitlab/python-gitlab", "lang": "Python"},
        {"url": "https://github.com/gitlabhq/gitlabhq", "lang": "Ruby (source)"},
    ],
    "stripe": [
        {"url": "https://github.com/stripe/stripe-python", "lang": "Python"},
        {"url": "https://github.com/stripe/stripe-node", "lang": "Node"},
        {"url": "https://github.com/stripe/stripe-go", "lang": "Go"},
        {"url": "https://github.com/stripe/stripe-java", "lang": "Java"},
    ],
    "openai": [
        {"url": "https://github.com/openai/openai-python", "lang": "Python"},
        {"url": "https://github.com/openai/openai-node", "lang": "Node"},
    ],
    "anthropic": [
        {"url": "https://github.com/anthropics/anthropic-sdk-python", "lang": "Python"},
        {"url": "https://github.com/anthropics/anthropic-sdk-typescript", "lang": "TypeScript"},
    ],
    "notion": [
        {"url": "https://github.com/ramnes/notion-sdk-py", "lang": "Python"},
        {"url": "https://github.com/makenotion/notion-sdk-js", "lang": "Node"},
    ],
    "jira": [{"url": "https://github.com/atlassian/python-jira", "lang": "Python"}],
    "lambda_connector": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "salesforce": [
        {"url": "https://github.com/simple-salesforce/simple-salesforce", "lang": "Python"},
        {"url": "https://github.com/forcedotcom/cli", "lang": "CLI"},
    ],
    "hubspot": [
        {"url": "https://github.com/HubSpot/hubspot-api-python", "lang": "Python"},
        {"url": "https://github.com/HubSpot/hubspot-api-nodejs", "lang": "Node"},
    ],
    "acm": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "airtable": [
        {"url": "https://github.com/gtalarico/pyairtable", "lang": "Python"},
        {"url": "https://github.com/Airtable/airtable.js", "lang": "Node"},
    ],
    "alb": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "asana": [
        {"url": "https://github.com/Asana/python-asana", "lang": "Python"},
        {"url": "https://github.com/Asana/node-asana", "lang": "Node"},
    ],
    "auth0": [
        {"url": "https://github.com/auth0/auth0-python", "lang": "Python"},
        {"url": "https://github.com/auth0/node-auth0", "lang": "Node"},
    ],
    "calendly": [],  # No official SDK repos
    "cloudflare": [
        {"url": "https://github.com/cloudflare/cloudflare-python", "lang": "Python"},
        {"url": "https://github.com/cloudflare/cloudflare-go", "lang": "Go"},
    ],
    "cloudfront": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "cloudwatch": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "confluence": [
        {"url": "https://github.com/atlassian-api/atlassian-python-api", "lang": "Python"}
    ],
    "datadog": [
        {"url": "https://github.com/DataDog/datadog-api-client-python", "lang": "Python"},
        {"url": "https://github.com/DataDog/datadog-api-client-go", "lang": "Go"},
    ],
    "dockerhub": [],  # REST API only, no official SDK
    "ec2": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "ecr": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "ecs": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "figma": [],  # REST API only
    "firestore": [
        {"url": "https://github.com/firebase/firebase-admin-python", "lang": "Python"},
        {"url": "https://github.com/firebase/firebase-admin-node", "lang": "Node"},
        {"url": "https://github.com/firebase/firebase-admin-go", "lang": "Go"},
    ],
    "freshdesk": [],  # REST API only
    "iam": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "intercom": [{"url": "https://github.com/intercom/python-intercom", "lang": "Python"}],
    "linear": [{"url": "https://github.com/linear/linear", "lang": "TypeScript (source)"}],
    "linkedin": [
        {
            "url": "https://github.com/linkedin-developers/linkedin-api-python-client",
            "lang": "Python (community)",
        }
    ],
    "mailchimp": [
        {"url": "https://github.com/mailchimp/mailchimp-marketing-python", "lang": "Python"},
        {"url": "https://github.com/mailchimp/mailchimp-marketing-node", "lang": "Node"},
    ],
    "medium": [{"url": "https://github.com/Medium/medium-api-docs", "lang": "API Spec"}],
    "mixpanel": [{"url": "https://github.com/mixpanel/mixpanel-python", "lang": "Python"}],
    "mongodb": [
        {"url": "https://github.com/mongodb/mongo-python-driver", "lang": "Python"},
        {"url": "https://github.com/mongodb/node-mongodb-native", "lang": "Node"},
        {"url": "https://github.com/mongodb/mongo-go-driver", "lang": "Go"},
    ],
    "okta": [
        {"url": "https://github.com/okta/okta-sdk-python", "lang": "Python"},
        {"url": "https://github.com/okta/okta-sdk-nodejs", "lang": "Node"},
    ],
    "outlook": [
        {"url": "https://github.com/microsoftgraph/msgraph-sdk-python", "lang": "Python"},
        {"url": "https://github.com/microsoftgraph/msgraph-sdk-javascript", "lang": "Node"},
    ],
    "pagerduty": [{"url": "https://github.com/PagerDuty/pdpyras", "lang": "Python"}],
    "pinecone": [
        {"url": "https://github.com/pinecone-io/pinecone-python-client", "lang": "Python"},
        {"url": "https://github.com/pinecone-io/pinecone-ts-client", "lang": "TypeScript"},
    ],
    "plaid": [
        {"url": "https://github.com/plaid/plaid-python", "lang": "Python"},
        {"url": "https://github.com/plaid/plaid-node", "lang": "Node"},
        {"url": "https://github.com/plaid/plaid-go", "lang": "Go"},
    ],
    "rabbitmq": [
        {"url": "https://github.com/rabbitmq/rabbitmq-server", "lang": "Erlang (source)"},
        {"url": "https://github.com/pika/pika", "lang": "Python"},
    ],
    "rds": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "redis": [
        {"url": "https://github.com/upstash/redis-py", "lang": "Python"},
        {"url": "https://github.com/upstash/upstash-redis", "lang": "TypeScript"},
    ],
    "route53": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "s3": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "secrets_manager": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
        {"url": "https://github.com/aws/aws-sdk-js-v3", "lang": "Node"},
    ],
    "segment": [
        {"url": "https://github.com/segmentio/analytics-python", "lang": "Python"},
        {"url": "https://github.com/segmentio/analytics-node", "lang": "Node"},
    ],
    "sendgrid": [
        {"url": "https://github.com/sendgrid/sendgrid-python", "lang": "Python"},
        {"url": "https://github.com/sendgrid/sendgrid-nodejs", "lang": "Node"},
    ],
    "shopify": [
        {"url": "https://github.com/Shopify/shopify-api-python", "lang": "Python"},
        {"url": "https://github.com/Shopify/shopify-api-js", "lang": "Node"},
    ],
    "sqs": [
        {"url": "https://github.com/boto/boto3", "lang": "Python"},
        {"url": "https://github.com/aws/aws-sdk-go-v2", "lang": "Go"},
    ],
    "supabase": [
        {"url": "https://github.com/supabase/supabase-py", "lang": "Python"},
        {"url": "https://github.com/supabase/supabase-js", "lang": "Node"},
    ],
    "teams": [{"url": "https://github.com/microsoftgraph/msgraph-sdk-python", "lang": "Python"}],
    "telegram": [
        {"url": "https://github.com/python-telegram-bot/python-telegram-bot", "lang": "Python"},
        {"url": "https://github.com/tdlib/td", "lang": "C++ (TDLib)"},
    ],
    "trello": [{"url": "https://github.com/sarumont/py-trello", "lang": "Python"}],
    "twilio": [
        {"url": "https://github.com/twilio/twilio-python", "lang": "Python"},
        {"url": "https://github.com/twilio/twilio-node", "lang": "Node"},
        {"url": "https://github.com/twilio/twilio-go", "lang": "Go"},
    ],
    "vercel": [{"url": "https://github.com/vercel/vercel", "lang": "TypeScript (source)"}],
    "webhook": [],  # Built-in connector, no external repo
    "x": [
        {
            "url": "https://github.com/xdevplatform/Twitter-API-v2-sample-code",
            "lang": "Sample code (multi-lang)",
        },
        {"url": "https://github.com/tweepy/tweepy", "lang": "Python (community)"},
    ],
    "zendesk": [{"url": "https://github.com/facetoe/zenpy", "lang": "Python"}],
}


def get_tool_repos(name: str) -> list[dict[str, str]]:
    """Get the list of SDK repos for a connector."""
    return TOOL_REPOS.get(name, [])


_DEFAULT_META: dict[str, object] = {
    "company": "",
    "website": "",
    "docs": "",
    "github": "",
    "logo": "",
    "color": "#6366f1",
    "tagline": "",
    "overview": "",
    "use_cases": [],
    "auth_methods": [],
    "pricing": "",
    "rate_limit": "",
    "prerequisites": [],
    "get_credentials_url": "",
    "get_credentials_steps": "",
}


def get_tool_meta(name: str) -> dict:
    """Get metadata for a connector, with defaults for unknown tools."""
    meta = dict(_DEFAULT_META)
    if name in TOOL_META:
        meta.update(TOOL_META[name])
    return meta
