{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__platphorm-mcp",
    "name": "mbarbine__platphorm-mcp",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__platphorm-mcp",
    "relative_path": "github-recent/mbarbine__platphorm-mcp",
    "remote_url": "git@github.com:mbarbine/platphorm-mcp.git",
    "default_branch": "main",
    "current_commit": "4de6f64c68be693da5b369a9ae02cfa07ae4cb0f"
  },
  "languages": [
    {
      "language": "TypeScript",
      "files": 320,
      "bytes": 1358868
    },
    {
      "language": "JSON",
      "files": 7,
      "bytes": 286713
    },
    {
      "language": "YAML",
      "files": 2,
      "bytes": 219001
    },
    {
      "language": "Markdown",
      "files": 21,
      "bytes": 162554
    },
    {
      "language": "JavaScript",
      "files": 8,
      "bytes": 26850
    },
    {
      "language": "CSS",
      "files": 1,
      "bytes": 4863
    },
    {
      "language": "Shell",
      "files": 4,
      "bytes": 3044
    },
    {
      "language": "Dockerfile",
      "files": 1,
      "bytes": 1205
    }
  ],
  "frameworks": [
    {
      "name": "Next.js",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "React",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Tailwind CSS",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Vitest",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    }
  ],
  "packages": {
    "package_manager": "pnpm",
    "manifests": [
      {
        "path": "package.json",
        "name": "mcp-host-platphormnews",
        "version": "0.1.0",
        "scripts": {
          "dev": "next dev",
          "build": "next build",
          "start": "next start",
          "lint": "eslint .",
          "test": "vitest run --config tests/vitest.config.ts"
        },
        "dependencies": {
          "@aws-sdk/client-dynamodb": "^3.1033.0",
          "@aws-sdk/credential-providers": "^3.1033.0",
          "@aws-sdk/lib-dynamodb": "^3.1033.0",
          "@hookform/resolvers": "^3.10.0",
          "@neondatabase/serverless": "^1.1.0",
          "@radix-ui/react-accordion": "1.2.12",
          "@radix-ui/react-alert-dialog": "1.1.15",
          "@radix-ui/react-aspect-ratio": "1.1.8",
          "@radix-ui/react-avatar": "1.1.11",
          "@radix-ui/react-checkbox": "1.3.3",
          "@radix-ui/react-collapsible": "1.1.12",
          "@radix-ui/react-context-menu": "2.2.16",
          "@radix-ui/react-dialog": "1.1.15",
          "@radix-ui/react-dropdown-menu": "2.1.16",
          "@radix-ui/react-hover-card": "1.1.15",
          "@radix-ui/react-label": "2.1.8",
          "@radix-ui/react-menubar": "1.1.16",
          "@radix-ui/react-navigation-menu": "1.2.14",
          "@radix-ui/react-popover": "1.1.15",
          "@radix-ui/react-progress": "1.1.8",
          "@radix-ui/react-radio-group": "1.3.8",
          "@radix-ui/react-scroll-area": "1.2.10",
          "@radix-ui/react-select": "2.2.6",
          "@radix-ui/react-separator": "1.1.8",
          "@radix-ui/react-slider": "1.3.6",
          "@radix-ui/react-slot": "1.2.4",
          "@radix-ui/react-switch": "1.2.6",
          "@radix-ui/react-tabs": "1.1.13",
          "@radix-ui/react-toast": "1.2.15",
          "@radix-ui/react-toggle": "1.1.10",
          "@radix-ui/react-toggle-group": "1.1.11",
          "@radix-ui/react-tooltip": "1.2.8",
          "@upstash/redis": "^1.37.0",
          "@vercel/analytics": "1.6.1",
          "autoprefixer": "^10.5.0",
          "botid": "^1.5.11",
          "chat-sdk-monorepo": "github:vercel/chat",
          "class-variance-authority": "^0.7.1",
          "clsx": "^2.1.1",
          "cmdk": "1.1.1",
          "date-fns": "4.1.0",
          "embla-carousel-react": "8.6.0",
          "input-otp": "1.4.2",
          "lucide-react": "^0.564.0",
          "next": "16.1.6",
          "next-themes": "^0.4.6",
          "react": "19.2.4",
          "react-day-picker": "9.13.2",
          "react-dom": "19.2.4",
          "react-hook-form": "^7.73.1",
          "react-resizable-panels": "^2.1.9",
          "recharts": "2.15.0",
          "sonner": "^1.7.4",
          "tailwind-merge": "^3.5.0",
          "vaul": "^1.1.2",
          "zod": "^4.3.6"
        },
        "dev_dependencies": {
          "@tailwindcss/postcss": "^4.2.4",
          "@testing-library/dom": "^10.4.1",
          "@testing-library/jest-dom": "^6.9.1",
          "@testing-library/react": "^16.3.2",
          "@types/node": "^22.19.17",
          "@types/react": "19.2.14",
          "@types/react-dom": "19.2.3",
          "@vitest/coverage-v8": "^4.1.5",
          "jsdom": "^29.0.2",
          "postcss": "^8.5.10",
          "tailwindcss": "^4.2.4",
          "tw-animate-css": "1.3.3",
          "typescript": "5.7.3",
          "vite-tsconfig-paths": "^6.1.1",
          "vitest": "^4.1.5"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [
      {
        "route": "/[...path]",
        "source_path": "app/api/[...path]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/callback",
        "source_path": "app/api/callback/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/capabilities",
        "source_path": "app/api/capabilities/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/client",
        "source_path": "app/api/client/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/cron/daily",
        "source_path": "app/api/cron/daily/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/cron/discovery",
        "source_path": "app/api/cron/discovery/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/cron/health-check",
        "source_path": "app/api/cron/health-check/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/cron/maintenance",
        "source_path": "app/api/cron/maintenance/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/cron/sitemap-sync",
        "source_path": "app/api/cron/sitemap-sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/docs/[slug]",
        "source_path": "app/api/docs/[slug]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/docs",
        "source_path": "app/api/docs/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/health",
        "source_path": "app/api/health/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/icons",
        "source_path": "app/api/icons/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/mcp/capabilities",
        "source_path": "app/api/mcp/capabilities/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/mcp/register",
        "source_path": "app/api/mcp/register/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/mcp",
        "source_path": "app/api/mcp/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "DELETE",
          "GET",
          "HEAD",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/mcp/validate",
        "source_path": "app/api/mcp/validate/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/ping",
        "source_path": "app/api/ping/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/register",
        "source_path": "app/api/register/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/capabilities/[id]/deprecate",
        "source_path": "app/api/v1/capabilities/[id]/deprecate/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/capabilities/[id]",
        "source_path": "app/api/v1/capabilities/[id]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/capabilities/register",
        "source_path": "app/api/v1/capabilities/register/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/capabilities",
        "source_path": "app/api/v1/capabilities/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/discovery",
        "source_path": "app/api/v1/discovery/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/docs",
        "source_path": "app/api/v1/docs/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/feeds",
        "source_path": "app/api/v1/feeds/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/feeds/sync",
        "source_path": "app/api/v1/feeds/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/health",
        "source_path": "app/api/v1/health/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/mcp-servers/[id]/proxy",
        "source_path": "app/api/v1/mcp-servers/[id]/proxy/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/mcp-servers/[id]",
        "source_path": "app/api/v1/mcp-servers/[id]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/mcp-servers/[id]/sync",
        "source_path": "app/api/v1/mcp-servers/[id]/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/mcp-servers/[id]/validate",
        "source_path": "app/api/v1/mcp-servers/[id]/validate/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/mcp-servers",
        "source_path": "app/api/v1/mcp-servers/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/mcp",
        "source_path": "app/api/v1/mcp/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/model/explain-tool-risk",
        "source_path": "app/api/v1/model/explain-tool-risk/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/model/generate-client-config",
        "source_path": "app/api/v1/model/generate-client-config/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/model/generate-remediation-summary",
        "source_path": "app/api/v1/model/generate-remediation-summary/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/model/recommend-tools",
        "source_path": "app/api/v1/model/recommend-tools/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/model/summarize-capability",
        "source_path": "app/api/v1/model/summarize-capability/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/network/capabilities",
        "source_path": "app/api/v1/network/capabilities/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/network/discovery-compliance",
        "source_path": "app/api/v1/network/discovery-compliance/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/network/graph",
        "source_path": "app/api/v1/network/graph/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/network/graph/sync",
        "source_path": "app/api/v1/network/graph/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/network/health",
        "source_path": "app/api/v1/network/health/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/network/route-compliance",
        "source_path": "app/api/v1/network/route-compliance/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/network/sites",
        "source_path": "app/api/v1/network/sites/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/network/trusted-domains",
        "source_path": "app/api/v1/network/trusted-domains/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/prompts/[name]",
        "source_path": "app/api/v1/prompts/[name]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/prompts",
        "source_path": "app/api/v1/prompts/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/registry/reconcile",
        "source_path": "app/api/v1/registry/reconcile/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/registry/snapshot",
        "source_path": "app/api/v1/registry/snapshot/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/reports/decks",
        "source_path": "app/api/v1/reports/decks/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/reports/docs",
        "source_path": "app/api/v1/reports/docs/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/reports/sheets",
        "source_path": "app/api/v1/reports/sheets/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/resources/[id]",
        "source_path": "app/api/v1/resources/[id]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/resources",
        "source_path": "app/api/v1/resources/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/search",
        "source_path": "app/api/v1/search/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/seed",
        "source_path": "app/api/v1/seed/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/v1/sitemaps/domains",
        "source_path": "app/api/v1/sitemaps/domains/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/sitemaps",
        "source_path": "app/api/v1/sitemaps/index/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/sitemaps",
        "source_path": "app/api/v1/sitemaps/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/sitemaps/sites",
        "source_path": "app/api/v1/sitemaps/sites/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/sitemaps/sync",
        "source_path": "app/api/v1/sitemaps/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/sites/[slug]",
        "source_path": "app/api/v1/sites/[slug]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/sites/register",
        "source_path": "app/api/v1/sites/register/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/sites",
        "source_path": "app/api/v1/sites/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/test/mcp",
        "source_path": "app/api/v1/test/mcp/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/test/sites",
        "source_path": "app/api/v1/test/sites/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tests/browserops",
        "source_path": "app/api/v1/tests/browserops/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/tests/evals",
        "source_path": "app/api/v1/tests/evals/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/tests/sandbox",
        "source_path": "app/api/v1/tests/sandbox/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/v1/tools/[name]",
        "source_path": "app/api/v1/tools/[name]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/tools",
        "source_path": "app/api/v1/tools/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/webhooks/deploy",
        "source_path": "app/api/webhooks/deploy/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/webhooks/vercel",
        "source_path": "app/api/webhooks/vercel/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      }
    ],
    "app_routes": [
      {
        "route": "/client",
        "source_path": "app/client/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/docs",
        "source_path": "app/docs/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/faq",
        "source_path": "app/faq/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/mcp/discovery",
        "source_path": "app/mcp/discovery/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/mcp",
        "source_path": "app/mcp/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/mcp/test",
        "source_path": "app/mcp/test/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      }
    ]
  },
  "components": [
    {
      "name": "footer",
      "kind": "ui-component",
      "source_path": "components/layout/footer.tsx"
    },
    {
      "name": "topbar",
      "kind": "ui-component",
      "source_path": "components/layout/topbar.tsx"
    },
    {
      "name": "batch-health-checker",
      "kind": "ui-component",
      "source_path": "components/mcp/batch-health-checker.tsx"
    },
    {
      "name": "connection-manager",
      "kind": "ui-component",
      "source_path": "components/mcp/client/connection-manager.tsx"
    },
    {
      "name": "server-prompts",
      "kind": "ui-component",
      "source_path": "components/mcp/client/server-prompts.tsx"
    },
    {
      "name": "server-resources",
      "kind": "ui-component",
      "source_path": "components/mcp/client/server-resources.tsx"
    },
    {
      "name": "server-tools",
      "kind": "ui-component",
      "source_path": "components/mcp/client/server-tools.tsx"
    },
    {
      "name": "connect-section",
      "kind": "ui-component",
      "source_path": "components/mcp/connect-section.tsx"
    },
    {
      "name": "discovery-dashboard",
      "kind": "ui-component",
      "source_path": "components/mcp/discovery-dashboard.tsx"
    },
    {
      "name": "hero-section",
      "kind": "ui-component",
      "source_path": "components/mcp/hero-section.tsx"
    },
    {
      "name": "live-site-tester",
      "kind": "ui-component",
      "source_path": "components/mcp/live-site-tester.tsx"
    },
    {
      "name": "network-section",
      "kind": "ui-component",
      "source_path": "components/mcp/network-section.tsx"
    },
    {
      "name": "prompts-section",
      "kind": "ui-component",
      "source_path": "components/mcp/prompts-section.tsx"
    },
    {
      "name": "resources-section",
      "kind": "ui-component",
      "source_path": "components/mcp/resources-section.tsx"
    },
    {
      "name": "roadmap-section",
      "kind": "ui-component",
      "source_path": "components/mcp/roadmap-section.tsx"
    },
    {
      "name": "status-badge",
      "kind": "ui-component",
      "source_path": "components/mcp/status-badge.tsx"
    },
    {
      "name": "tool-runner",
      "kind": "ui-component",
      "source_path": "components/mcp/tool-runner.tsx"
    },
    {
      "name": "tools-section",
      "kind": "ui-component",
      "source_path": "components/mcp/tools-section.tsx"
    },
    {
      "name": "theme-provider",
      "kind": "ui-component",
      "source_path": "components/theme-provider.tsx"
    },
    {
      "name": "accordion",
      "kind": "ui-component",
      "source_path": "components/ui/accordion.tsx"
    },
    {
      "name": "alert-dialog",
      "kind": "ui-component",
      "source_path": "components/ui/alert-dialog.tsx"
    },
    {
      "name": "alert",
      "kind": "ui-component",
      "source_path": "components/ui/alert.tsx"
    },
    {
      "name": "aspect-ratio",
      "kind": "ui-component",
      "source_path": "components/ui/aspect-ratio.tsx"
    },
    {
      "name": "avatar",
      "kind": "ui-component",
      "source_path": "components/ui/avatar.tsx"
    },
    {
      "name": "badge",
      "kind": "ui-component",
      "source_path": "components/ui/badge.tsx"
    },
    {
      "name": "breadcrumb",
      "kind": "ui-component",
      "source_path": "components/ui/breadcrumb.tsx"
    },
    {
      "name": "button-group",
      "kind": "ui-component",
      "source_path": "components/ui/button-group.tsx"
    },
    {
      "name": "button",
      "kind": "ui-component",
      "source_path": "components/ui/button.tsx"
    },
    {
      "name": "calendar",
      "kind": "ui-component",
      "source_path": "components/ui/calendar.tsx"
    },
    {
      "name": "card",
      "kind": "ui-component",
      "source_path": "components/ui/card.tsx"
    },
    {
      "name": "carousel",
      "kind": "ui-component",
      "source_path": "components/ui/carousel.tsx"
    },
    {
      "name": "chart",
      "kind": "ui-component",
      "source_path": "components/ui/chart.tsx"
    },
    {
      "name": "checkbox",
      "kind": "ui-component",
      "source_path": "components/ui/checkbox.tsx"
    },
    {
      "name": "collapsible",
      "kind": "ui-component",
      "source_path": "components/ui/collapsible.tsx"
    },
    {
      "name": "command",
      "kind": "ui-component",
      "source_path": "components/ui/command.tsx"
    },
    {
      "name": "context-menu",
      "kind": "ui-component",
      "source_path": "components/ui/context-menu.tsx"
    },
    {
      "name": "dialog",
      "kind": "ui-component",
      "source_path": "components/ui/dialog.tsx"
    },
    {
      "name": "drawer",
      "kind": "ui-component",
      "source_path": "components/ui/drawer.tsx"
    },
    {
      "name": "dropdown-menu",
      "kind": "ui-component",
      "source_path": "components/ui/dropdown-menu.tsx"
    },
    {
      "name": "empty",
      "kind": "ui-component",
      "source_path": "components/ui/empty.tsx"
    },
    {
      "name": "field",
      "kind": "ui-component",
      "source_path": "components/ui/field.tsx"
    },
    {
      "name": "form",
      "kind": "ui-component",
      "source_path": "components/ui/form.tsx"
    },
    {
      "name": "hover-card",
      "kind": "ui-component",
      "source_path": "components/ui/hover-card.tsx"
    },
    {
      "name": "input-group",
      "kind": "ui-component",
      "source_path": "components/ui/input-group.tsx"
    },
    {
      "name": "input-otp",
      "kind": "ui-component",
      "source_path": "components/ui/input-otp.tsx"
    },
    {
      "name": "input",
      "kind": "ui-component",
      "source_path": "components/ui/input.tsx"
    },
    {
      "name": "item",
      "kind": "ui-component",
      "source_path": "components/ui/item.tsx"
    },
    {
      "name": "kbd",
      "kind": "ui-component",
      "source_path": "components/ui/kbd.tsx"
    },
    {
      "name": "label",
      "kind": "ui-component",
      "source_path": "components/ui/label.tsx"
    },
    {
      "name": "menubar",
      "kind": "ui-component",
      "source_path": "components/ui/menubar.tsx"
    },
    {
      "name": "navigation-menu",
      "kind": "ui-component",
      "source_path": "components/ui/navigation-menu.tsx"
    },
    {
      "name": "pagination",
      "kind": "ui-component",
      "source_path": "components/ui/pagination.tsx"
    },
    {
      "name": "popover",
      "kind": "ui-component",
      "source_path": "components/ui/popover.tsx"
    },
    {
      "name": "progress",
      "kind": "ui-component",
      "source_path": "components/ui/progress.tsx"
    },
    {
      "name": "radio-group",
      "kind": "ui-component",
      "source_path": "components/ui/radio-group.tsx"
    },
    {
      "name": "resizable",
      "kind": "ui-component",
      "source_path": "components/ui/resizable.tsx"
    },
    {
      "name": "scroll-area",
      "kind": "ui-component",
      "source_path": "components/ui/scroll-area.tsx"
    },
    {
      "name": "select",
      "kind": "ui-component",
      "source_path": "components/ui/select.tsx"
    },
    {
      "name": "separator",
      "kind": "ui-component",
      "source_path": "components/ui/separator.tsx"
    },
    {
      "name": "sheet",
      "kind": "ui-component",
      "source_path": "components/ui/sheet.tsx"
    },
    {
      "name": "sidebar",
      "kind": "ui-component",
      "source_path": "components/ui/sidebar.tsx"
    },
    {
      "name": "skeleton",
      "kind": "ui-component",
      "source_path": "components/ui/skeleton.tsx"
    },
    {
      "name": "slider",
      "kind": "ui-component",
      "source_path": "components/ui/slider.tsx"
    },
    {
      "name": "sonner",
      "kind": "ui-component",
      "source_path": "components/ui/sonner.tsx"
    },
    {
      "name": "spinner",
      "kind": "ui-component",
      "source_path": "components/ui/spinner.tsx"
    },
    {
      "name": "switch",
      "kind": "ui-component",
      "source_path": "components/ui/switch.tsx"
    },
    {
      "name": "table",
      "kind": "ui-component",
      "source_path": "components/ui/table.tsx"
    },
    {
      "name": "tabs",
      "kind": "ui-component",
      "source_path": "components/ui/tabs.tsx"
    },
    {
      "name": "textarea",
      "kind": "ui-component",
      "source_path": "components/ui/textarea.tsx"
    },
    {
      "name": "toast",
      "kind": "ui-component",
      "source_path": "components/ui/toast.tsx"
    },
    {
      "name": "toaster",
      "kind": "ui-component",
      "source_path": "components/ui/toaster.tsx"
    },
    {
      "name": "toggle-group",
      "kind": "ui-component",
      "source_path": "components/ui/toggle-group.tsx"
    },
    {
      "name": "toggle",
      "kind": "ui-component",
      "source_path": "components/ui/toggle.tsx"
    },
    {
      "name": "tooltip",
      "kind": "ui-component",
      "source_path": "components/ui/tooltip.tsx"
    },
    {
      "name": "use-mobile",
      "kind": "ui-component",
      "source_path": "components/ui/use-mobile.tsx"
    }
  ],
  "data_models": [],
  "database": {
    "databases": [
      "redis"
    ],
    "schemas": [],
    "migrations": []
  },
  "tests": [
    {
      "name": "route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "app/api/v1/search/route.test.ts"
    },
    {
      "name": "route.ts",
      "kind": "unit-or-integration",
      "source_path": "app/api/v1/test/mcp/route.ts"
    },
    {
      "name": "route.ts",
      "kind": "unit-or-integration",
      "source_path": "app/api/v1/test/sites/route.ts"
    },
    {
      "name": "page.tsx",
      "kind": "unit-or-integration",
      "source_path": "app/mcp/test/page.tsx"
    },
    {
      "name": "use-toast.test.ts",
      "kind": "unit-or-integration",
      "source_path": "hooks/__tests__/use-toast.test.ts"
    },
    {
      "name": "discovery-search.test.ts",
      "kind": "unit-or-integration",
      "source_path": "lib/mcp/__tests__/discovery-search.test.ts"
    },
    {
      "name": "network.test.ts",
      "kind": "unit-or-integration",
      "source_path": "lib/mcp/tools/__tests__/network.test.ts"
    },
    {
      "name": "auth.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/auth.test.ts"
    },
    {
      "name": "autodiscovery.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/autodiscovery.test.ts"
    },
    {
      "name": "canonical-registry.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/canonical-registry.test.ts"
    },
    {
      "name": "capabilities-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/capabilities-route.test.ts"
    },
    {
      "name": "chart-security.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/chart-security.test.ts"
    },
    {
      "name": "client.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/client.test.ts"
    },
    {
      "name": "connect-configs.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/connect-configs.test.ts"
    },
    {
      "name": "cors.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/cors.test.ts"
    },
    {
      "name": "docs-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/docs-route.test.ts"
    },
    {
      "name": "dynamo-store.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/dynamo-store.test.ts"
    },
    {
      "name": "dynamo.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/dynamo.test.ts"
    },
    {
      "name": "github-sitemap.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/github-sitemap.test.ts"
    },
    {
      "name": "health-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/health-route.test.ts"
    },
    {
      "name": "hooks-ordering.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/hooks-ordering.test.ts"
    },
    {
      "name": "use-capabilities.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/hooks/use-capabilities.test.ts"
    },
    {
      "name": "icons-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/icons-route.test.ts"
    },
    {
      "name": "icons.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/icons.test.ts"
    },
    {
      "name": "mcp-protocol.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/integration/mcp-protocol.test.ts"
    },
    {
      "name": "network-graph.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/network-graph.test.ts"
    },
    {
      "name": "network-tools.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/network-tools.test.ts"
    },
    {
      "name": "network.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/network.test.ts"
    },
    {
      "name": "phase1-surfaces.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/phase1-surfaces.test.ts"
    },
    {
      "name": "ping-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/ping-route.test.ts"
    },
    {
      "name": "producthunt.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/producthunt.test.ts"
    },
    {
      "name": "prompts-production.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/prompts-production.test.ts"
    },
    {
      "name": "prompts.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/prompts.test.ts"
    },
    {
      "name": "protocol.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/protocol.test.ts"
    },
    {
      "name": "proxy.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/proxy.test.ts"
    },
    {
      "name": "config.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/redis/config.test.ts"
    },
    {
      "name": "redis.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/redis/redis.test.ts"
    },
    {
      "name": "register-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/register-route.test.ts"
    },
    {
      "name": "registry.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/registry.test.ts"
    },
    {
      "name": "resources-handlers.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/resources-handlers.test.ts"
    },
    {
      "name": "resources.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/resources.test.ts"
    },
    {
      "name": "route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/route.test.ts"
    },
    {
      "name": "search-tools.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/search-tools.test.ts"
    },
    {
      "name": "security_vulnerability.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/security_vulnerability.test.ts"
    },
    {
      "name": "security.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/security.test.ts"
    },
    {
      "name": "server.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/server.test.ts"
    },
    {
      "name": "site-store.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/site-store.test.ts"
    },
    {
      "name": "sitemap-index.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/sitemap-index.test.ts"
    },
    {
      "name": "site-health.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/smoke/site-health.test.ts"
    },
    {
      "name": "analytics.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/analytics.test.ts"
    },
    {
      "name": "categories.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/categories.test.ts"
    },
    {
      "name": "content.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/content.test.ts"
    },
    {
      "name": "deployments.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/deployments.test.ts"
    },
    {
      "name": "dynamo-tools.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/dynamo-tools.test.ts"
    },
    {
      "name": "events.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/events.test.ts"
    },
    {
      "name": "faq.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/faq.test.ts"
    },
    {
      "name": "federation.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/federation.test.ts"
    },
    {
      "name": "github.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/github.test.ts"
    },
    {
      "name": "orchestrator.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/orchestrator.test.ts"
    },
    {
      "name": "producthunt.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/producthunt.test.ts"
    },
    {
      "name": "search.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/search.test.ts"
    },
    {
      "name": "sites.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/sites.test.ts"
    },
    {
      "name": "verticals.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/tools/verticals.test.ts"
    },
    {
      "name": "types.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/types.test.ts"
    },
    {
      "name": "use-mobile.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/use-mobile.test.ts"
    },
    {
      "name": "utils.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/utils.test.ts"
    },
    {
      "name": "v1-test-mcp-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/v1-test-mcp-route.test.ts"
    },
    {
      "name": "v1-test-sites-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/v1-test-sites-route.test.ts"
    },
    {
      "name": "validate-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/validate-route.test.ts"
    },
    {
      "name": "webhooks-deploy-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/webhooks-deploy-route.test.ts"
    },
    {
      "name": "webhooks-vercel-route.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/webhooks-vercel-route.test.ts"
    },
    {
      "name": "well-known.test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/__tests__/well-known.test.ts"
    },
    {
      "name": "fix_test.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/fix_test.ts"
    },
    {
      "name": "test_callback.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_callback.ts"
    },
    {
      "name": "test_domain.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_domain.ts"
    },
    {
      "name": "test_domain2.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_domain2.ts"
    },
    {
      "name": "test_redis.js",
      "kind": "unit-or-integration",
      "source_path": "tests/test_redis.js"
    },
    {
      "name": "test_regex.js",
      "kind": "unit-or-integration",
      "source_path": "tests/test_regex.js"
    },
    {
      "name": "test_regex.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_regex.ts"
    },
    {
      "name": "test_regex2.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_regex2.ts"
    },
    {
      "name": "test_regex3.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_regex3.ts"
    },
    {
      "name": "test_security.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_security.ts"
    },
    {
      "name": "test_ssrf2.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_ssrf2.ts"
    },
    {
      "name": "test_ssrf3.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_ssrf3.ts"
    },
    {
      "name": "test_ssrf4.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_ssrf4.ts"
    },
    {
      "name": "test_ssrf5.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_ssrf5.ts"
    },
    {
      "name": "test_ssrf6.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_ssrf6.ts"
    },
    {
      "name": "test_ssrf7.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_ssrf7.ts"
    },
    {
      "name": "test_ssrf8.ts",
      "kind": "unit-or-integration",
      "source_path": "tests/test_ssrf8.ts"
    }
  ],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [
      {
        "path": "Dockerfile"
      }
    ],
    "compose_files": []
  },
  "env": {
    "example_files": [],
    "variables": [
      {
        "name": "ANALYTICS_MFE_URL",
        "source_paths": [
          "next.config.mjs"
        ],
        "likely_secret": false
      },
      {
        "name": "AWS_ACCESS_KEY_ID",
        "source_paths": [
          "lib/mcp/dynamo.ts",
          "tests/__tests__/dynamo-store.test.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "AWS_REGION",
        "source_paths": [
          "lib/mcp/dynamo.ts",
          "lib/mcp/tools/dynamo.ts",
          "tests/__tests__/dynamo-store.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "AWS_ROLE_ARN",
        "source_paths": [
          "lib/mcp/dynamo.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "AWS_SECRET_ACCESS_KEY",
        "source_paths": [
          "lib/mcp/dynamo.ts",
          "tests/__tests__/dynamo-store.test.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "AWS_SESSION_TOKEN",
        "source_paths": [
          "lib/mcp/dynamo.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "CRON_SECRET",
        "source_paths": [
          "inline_cron.js",
          "proxy.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "DYNAMODB_TABLE_NAME",
        "source_paths": [
          "lib/mcp/dynamo.ts",
          "tests/__tests__/dynamo-store.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "EXTRA_DISCOVERY_DOMAINS",
        "source_paths": [
          "lib/mcp/autodiscovery.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "GITHUB_TOKEN",
        "source_paths": [
          "lib/mcp/github-sitemap.ts",
          "lib/mcp/tools/github.ts",
          "tests/__tests__/github-sitemap.test.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "JA4MLAB_FAST_ROUTES",
        "source_paths": [
          "app/.well-known/agents.json/route.ts",
          "app/.well-known/mcp.json/route.ts",
          "app/.well-known/trust.json/route.ts",
          "app/api/docs/route.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "KV_REST_API_TOKEN",
        "source_paths": [
          "lib/mcp/__tests__/discovery-search.test.ts",
          "lib/mcp/redis.ts",
          "scripts/seed-mcp-data.js",
          "scripts/seed-sites-registry.js",
          "tests/__tests__/redis/config.test.ts",
          "tests/__tests__/redis/redis.test.ts",
          "tests/__tests__/search-tools.test.ts",
          "tests/__tests__/site-store.test.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "KV_REST_API_URL",
        "source_paths": [
          "lib/mcp/__tests__/discovery-search.test.ts",
          "lib/mcp/redis.ts",
          "scripts/seed-mcp-data.js",
          "scripts/seed-sites-registry.js",
          "tests/__tests__/redis/config.test.ts",
          "tests/__tests__/redis/redis.test.ts",
          "tests/__tests__/search-tools.test.ts",
          "tests/__tests__/site-store.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "LIVE_MCP_URL",
        "source_paths": [
          "tests/__tests__/integration/mcp-protocol.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "LIVE_SITE_NAME",
        "source_paths": [
          "tests/__tests__/integration/mcp-protocol.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "LIVE_SITE_URL",
        "source_paths": [
          "tests/__tests__/integration/mcp-protocol.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "MCP_BROWSER_CLIENT_ENABLED",
        "source_paths": [
          "lib/platform/auth.ts",
          "lib/platform/trust-policy.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "MCP_PROTOCOL_VERSION",
        "source_paths": [
          "app/.well-known/[...path]/route.ts",
          "app/api/[...path]/route.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "MCP_PUBLIC_READ_ENABLED",
        "source_paths": [
          "lib/mcp/auth.ts",
          "lib/platform/trust-policy.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "MCP_SECRET",
        "source_paths": [
          "lib/mcp/security.ts",
          "tests/__tests__/security_vulnerability.test.ts",
          "tests/__tests__/security.test.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "NEON_API_KEY",
        "source_paths": [
          "lib/mcp/tools/orchestrator.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "NODE_ENV",
        "source_paths": [
          "app/api/webhooks/deploy/route.ts",
          "app/api/webhooks/vercel/route.ts",
          "inline_cron.js",
          "lib/mcp/security.ts",
          "tests/__tests__/security.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "PLATPHORM_API_KEY",
        "source_paths": [
          "app/api/mcp/route.ts",
          "lib/mcp/auth.ts",
          "lib/mcp/security.ts",
          "tests/__tests__/auth.test.ts",
          "tests/__tests__/phase1-surfaces.test.ts",
          "tests/__tests__/security.test.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "PRODUCTHUNT_TOKEN",
        "source_paths": [
          "docs/PHASE-2-PRODUCTION-PLAN.md",
          "lib/mcp/tools/producthunt.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "PROFILE_MFE_URL",
        "source_paths": [
          "next.config.mjs"
        ],
        "likely_secret": false
      },
      {
        "name": "RENDER_API_KEY",
        "source_paths": [
          "lib/mcp/tools/orchestrator.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "SEARCH_MFE_URL",
        "source_paths": [
          "next.config.mjs"
        ],
        "likely_secret": false
      },
      {
        "name": "SERVICE_NAME",
        "source_paths": [
          "app/.well-known/[...path]/route.ts",
          "app/api/[...path]/route.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "SITEMAP_SYNC_CONCURRENCY",
        "source_paths": [
          "app/api/v1/sitemaps/sync/route.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "SITEMAP_URL_LIMIT",
        "source_paths": [
          "app/api/v1/sitemaps/sync/route.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "SMOKE_TEST_SITE",
        "source_paths": [
          "tests/__tests__/smoke/site-health.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "SMOKE_TEST_URL",
        "source_paths": [
          "tests/__tests__/smoke/site-health.test.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "TRACE_TELEMETRY_URL",
        "source_paths": [
          "app/api/mcp/route.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL",
        "source_paths": [
          "lib/mcp/dynamo.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_API_TOKEN",
        "source_paths": [
          "app/api/callback/route.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "VERCEL_OIDC_TOKEN",
        "source_paths": [
          "lib/mcp/dynamo.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "VERCEL_TOKEN",
        "source_paths": [
          "lib/mcp/tools/orchestrator.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "VERCEL_WEBHOOK_SECRET",
        "source_paths": [
          "app/api/webhooks/deploy/route.ts",
          "app/api/webhooks/vercel/route.ts",
          "tests/__tests__/webhooks-vercel-route.test.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "WEBHOOK_SECRET",
        "source_paths": [
          "app/api/callback/route.ts",
          "proxy.ts",
          "tests/test_callback.ts"
        ],
        "likely_secret": true
      }
    ]
  },
  "configs": [
    {
      "path": "next.config.mjs"
    },
    {
      "path": "package.json"
    },
    {
      "path": "pnpm-workspace.yaml"
    },
    {
      "path": "postcss.config.mjs"
    },
    {
      "path": "tsconfig.json"
    },
    {
      "path": "vercel.json"
    }
  ],
  "docs": {
    "readme_paths": [
      {
        "path": "README.md"
      }
    ],
    "doc_paths": [
      {
        "path": "docs/accessibility.md"
      },
      {
        "path": "docs/api.md"
      },
      {
        "path": "docs/architecture.md"
      },
      {
        "path": "docs/discovery.md"
      },
      {
        "path": "docs/internationalization.md"
      },
      {
        "path": "docs/license.md"
      },
      {
        "path": "docs/mcp-config.md"
      },
      {
        "path": "docs/onboarding-observability.md"
      },
      {
        "path": "docs/PHASE-2-PLAN.md"
      },
      {
        "path": "docs/PHASE-2-PRODUCTION-PLAN.md"
      },
      {
        "path": "docs/principles.md"
      },
      {
        "path": "docs/roadmap.md"
      },
      {
        "path": "docs/secret-modal.md"
      },
      {
        "path": "docs/security.md"
      }
    ],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [
      {
        "path": ".vscode/mcp.json"
      },
      {
        "path": "app/api/mcp/capabilities/route.ts"
      },
      {
        "path": "app/api/mcp/register/route.ts"
      },
      {
        "path": "app/api/mcp/route.ts"
      },
      {
        "path": "app/api/mcp/validate/route.ts"
      }
    ],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [
      {
        "path": "app/.well-known/[...path]/route.ts"
      },
      {
        "path": "app/.well-known/agents.json/route.ts"
      },
      {
        "path": "app/.well-known/ai-plugin.json/route.ts"
      },
      {
        "path": "app/.well-known/mcp.json/route.ts"
      },
      {
        "path": "app/.well-known/security.txt/route.ts"
      },
      {
        "path": "app/.well-known/trust.json/route.ts"
      }
    ],
    "robots": [],
    "manifests": []
  },
  "integrations": [
    {
      "name": "AWS",
      "confidence": "medium",
      "evidence_paths": [
        "docs/license.md",
        "docs/mcp-config.md",
        "docs/PHASE-2-PLAN.md",
        "docs/PHASE-2-PRODUCTION-PLAN.md",
        "docs/security.md",
        "lib/mcp/dynamo.ts",
        "lib/mcp/tools/dynamo.ts",
        "package-lock.json",
        "package.json",
        "pnpm-lock.yaml",
        "README.md",
        "tests/__tests__/dynamo-store.test.ts",
        "tests/__tests__/dynamo.test.ts"
      ]
    },
    {
      "name": "Neon",
      "confidence": "medium",
      "evidence_paths": [
        "lib/mcp/registry.ts",
        "lib/mcp/tools/orchestrator.ts",
        "package.json"
      ]
    },
    {
      "name": "PlatPhorm",
      "confidence": "medium",
      "evidence_paths": [
        "app/.well-known/agents.json/route.ts",
        "app/.well-known/ai-plugin.json/route.ts",
        "app/.well-known/mcp.json/route.ts",
        "app/.well-known/trust.json/route.ts",
        "app/api/docs/route.ts",
        "app/api/mcp/route.ts",
        "app/api/v1/seed/route.ts",
        "app/faq/page.tsx",
        "package.json"
      ]
    },
    {
      "name": "Redis",
      "confidence": "medium",
      "evidence_paths": [
        "docs/license.md",
        "lib/mcp/redis.ts",
        "package-lock.json",
        "package.json",
        "pnpm-lock.yaml",
        "scripts/seed-mcp-data.js",
        "scripts/seed-sites-registry.js",
        "tests/__tests__/redis/config.test.ts"
      ]
    },
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        "app/api/callback/route.ts",
        "app/api/webhooks/deploy/route.ts",
        "app/api/webhooks/vercel/route.ts",
        "app/layout.tsx",
        "lib/mcp/dynamo.ts",
        "lib/mcp/registry.ts",
        "lib/mcp/tools/orchestrator.ts",
        "package-lock.json",
        "package.json",
        "pnpm-lock.yaml",
        "README.md",
        "tests/__tests__/dynamo.test.ts",
        "tests/__tests__/webhooks-vercel-route.test.ts"
      ]
    }
  ],
  "license": {
    "spdx": "MIT",
    "paths": [
      {
        "path": "docs/license.md"
      },
      {
        "path": "LICENSE.txt"
      }
    ]
  },
  "comments": [
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 5,
      "text": "## 2025-03-01 - Add standard security headers to MCP endpoints"
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 6,
      "text": "**Vulnerability:** The MCP CORS endpoints were missing critical defense-in-depth headers like `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`, and `Strict-Transport-Security: max-age=31536000; includeSubDomains`."
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 8,
      "text": "**Prevention:** Always include `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`, and `Strict-Transport-Security` as base HTTP headers for all API and MCP endpoints to prevent MIME-type sniffing, clickjacking, and enforce HTTPS res"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/agents.json/route.ts",
      "line": 201,
      "text": "security: \"/.well-known/security.txt\","
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/mcp.json/route.ts",
      "line": 139,
      "text": "\"well-known-security\": \"https://mcp.platphormnews.com/.well-known/security.txt\","
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/mcp.json/route.ts",
      "line": 149,
      "text": "// Security & CLAWS"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 2,
      "text": "// Security.txt per RFC 9116"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 3,
      "text": "// GET /.well-known/security.txt"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 11,
      "text": "const securityTxt = `# PlatPhorm News Security Policy"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 14,
      "text": "Contact: mailto:security@platphormnews.com"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 15,
      "text": "Contact: https://github.com/mbarbine/mcp-host-platphormnews/security/advisories/new"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 18,
      "text": "Acknowledgments: https://mcp.platphormnews.com/security/acknowledgments"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 20,
      "text": "Canonical: https://mcp.platphormnews.com/.well-known/security.txt"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 21,
      "text": "Policy: https://github.com/mbarbine/mcp-host-platphormnews/blob/main/SECURITY.md"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 24,
      "text": "# This security policy covers all *.platphormnews.com and *.ph3ar.com domains"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 29,
      "text": "# and credit security researchers who report vulnerabilities responsibly."
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 31,
      "text": "# MCP Security"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 20,
      "text": "// CLAWS security platform"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 52,
      "text": "role: \"security-intelligence\","
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 55,
      "text": "apiScopes: [\"security:*\", \"threats:*\", \"policies:*\", \"domains:*\", \"audit:*\"],"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 59,
      "text": "role: \"security-network\","
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 62,
      "text": "apiScopes: [\"security:*\", \"mcp:*\"],"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 232,
      "text": "// Security requirements"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 233,
      "text": "security: {"
    },
    {
      "kind": "unsafe",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 237,
      "text": "csp: \"default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'\","
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 289,
      "text": "\"security-scanning\","
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 326,
      "text": "security: \"https://mcp.platphormnews.com/.well-known/security.txt\","
    },
    {
      "kind": "security",
      "source_path": "app/api/client/route.ts",
      "line": 7,
      "text": "import { isSafeProxyUrl } from \"@/lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "app/api/client/route.ts",
      "line": 48,
      "text": "// Security: validate the target URL"
    },
    {
      "kind": "security",
      "source_path": "app/api/cron/daily/route.ts",
      "line": 15,
      "text": "import { isValidCronRequest } from \"@/lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "app/api/cron/discovery/route.ts",
      "line": 12,
      "text": "import { isValidCronRequest } from \"@/lib/mcp/security\";"
    },
    {
      "kind": "security",
      "source_path": "app/api/cron/health-check/route.ts",
      "line": 11,
      "text": "import { isValidCronRequest } from \"@/lib/mcp/security\";"
    },
    {
      "kind": "security",
      "source_path": "app/api/cron/maintenance/route.ts",
      "line": 4,
      "text": "import { isValidCronRequest } from \"@/lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "app/api/cron/sitemap-sync/route.ts",
      "line": 12,
      "text": "import { isValidCronRequest } from \"@/lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "app/api/docs/route.ts",
      "line": 152,
      "text": "\"/.well-known/security.txt\": { methods: [\"GET\"], description: \"Security contact info (RFC 9116).\", tags: [\"well-known\"] },"
    },
    {
      "kind": "security",
      "source_path": "app/api/docs/route.ts",
      "line": 153,
      "text": "\"/.well-known/trust.json\": { methods: [\"GET\"], description: \"TRUST policy manifest — domain trust relationships, CORS policies, MCP federation rules, CLAWS integration, and security requirements for all *.platphormnews.com and *.ph3ar.com d"
    },
    {
      "kind": "security",
      "source_path": "app/api/docs/route.ts",
      "line": 274,
      "text": "// ── Security & rate limiting ──────────────────────────────"
    },
    {
      "kind": "security",
      "source_path": "app/api/docs/route.ts",
      "line": 275,
      "text": "security: {"
    },
    {
      "kind": "security",
      "source_path": "app/api/mcp/route.ts",
      "line": 390,
      "text": "security: {"
    },
    {
      "kind": "security",
      "source_path": "app/api/mcp/validate/route.ts",
      "line": 2,
      "text": "import { isSafeProxyUrl } from \"@/lib/mcp/security\""
    },
    {
      "kind": "unsafe",
      "source_path": "app/api/mcp/validate/route.ts",
      "line": 13,
      "text": "return Response.json({ error: \"Invalid or unsafe proxy URL\" }, { status: 400 })"
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/test/mcp/route.ts",
      "line": 8,
      "text": "import { isValidCronRequest } from \"@/lib/mcp/security\";"
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/test/sites/route.ts",
      "line": 8,
      "text": "import { isSafeProxyUrl } from \"@/lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/deploy/route.ts",
      "line": 55,
      "text": "console.error(\"SECURITY ERROR: VERCEL_WEBHOOK_SECRET is not set in production\");"
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/deploy/route.ts",
      "line": 65,
      "text": "// Log security concern internally, do not expose details to the client"
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/deploy/route.ts",
      "line": 66,
      "text": "console.error(\"SECURITY ERROR: Invalid Vercel webhook signature\");"
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/deploy/route.ts",
      "line": 71,
      "text": "console.error(\"SECURITY ERROR: Missing Vercel webhook signature\");"
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/vercel/route.ts",
      "line": 15,
      "text": "console.error(\"SECURITY ERROR: VERCEL_WEBHOOK_SECRET is not set in production\")"
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/vercel/route.ts",
      "line": 25,
      "text": "// Log security concern internally, do not expose details to the client"
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/vercel/route.ts",
      "line": 26,
      "text": "console.error(\"SECURITY ERROR: Invalid Vercel webhook signature\")"
    },
    {
      "kind": "security",
      "source_path": "app/api/webhooks/vercel/route.ts",
      "line": 31,
      "text": "console.error(\"SECURITY ERROR: Missing Vercel webhook signature\")"
    },
    {
      "kind": "security",
      "source_path": "app/docs/page.tsx",
      "line": 99,
      "text": "{ path: \"/.well-known/security.txt\", label: \"security.txt\", description: \"Security contact information following RFC 9116.\" },"
    },
    {
      "kind": "security",
      "source_path": "app/llms-index.json/route.ts",
      "line": 95,
      "text": "wellKnown: [\"/.well-known/mcp.json\", \"/.well-known/agents.json\", \"/.well-known/trust.json\", \"/.well-known/security.txt\"],"
    },
    {
      "kind": "security",
      "source_path": "app/llms.txt/route.ts",
      "line": 58,
      "text": "- **Security**: get_claws_intelligence (threat data, policies, domain verification)."
    },
    {
      "kind": "security",
      "source_path": "app/llms.txt/route.ts",
      "line": 86,
      "text": "- CLAWS Security: https://claws.platphormnews.com"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.json/route.ts",
      "line": 33,
      "text": "\"/api/health\": { get: { summary: \"Public health summary\", security: [], responses: { \"200\": { description: \"Health summary\" } } } },"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.json/route.ts",
      "line": 34,
      "text": "\"/api/mcp\": { get: { summary: \"MCP metadata\", security: [], responses: { \"200\": { description: \"MCP metadata\" } } }, post: { summary: \"JSON-RPC 2.0 MCP endpoint\", responses: { \"200\": { description: \"JSON-RPC response\" } } } },"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.json/route.ts",
      "line": 35,
      "text": "\"/api/v1/registry/snapshot\": { get: { summary: \"Canonical registry snapshot\", security: [], responses: { \"200\": { description: \"Registry snapshot\" } } } },"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.json/route.ts",
      "line": 36,
      "text": "\"/api/v1/registry/reconcile\": { get: { summary: \"Registry reconciliation summary\", security: [], responses: { \"200\": { description: \"Reconciliation summary\" } } } },"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.json/route.ts",
      "line": 37,
      "text": "\"/api/v1/network/discovery-compliance\": { get: { summary: \"Discovery compliance summary\", security: [], responses: { \"200\": { description: \"Discovery compliance summary\" } } } },"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.json/route.ts",
      "line": 39,
      "text": "\"/faq\": { get: { summary: \"FAQ page\", security: [], responses: { \"200\": { description: \"FAQ page\" } } } },"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.json/route.ts",
      "line": 40,
      "text": "\"/llms-index.json\": { get: { summary: \"Structured LLM/MCP index\", security: [], responses: { \"200\": { description: \"LLM index\" } } } },"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 21,
      "text": "security:"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 39,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 46,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 53,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 60,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 89,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 96,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 103,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 118,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 125,
      "text": "security: []"
    },
    {
      "kind": "security",
      "source_path": "check_ssrf.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "docs/api.md",
      "line": 225,
      "text": "- [Security](/api/docs/security) — Auth and security model"
    },
    {
      "kind": "security",
      "source_path": "docs/architecture.md",
      "line": 22,
      "text": "│  │ Live Tools │ │ Resources │ │ Prompts │  │ Security   │  │"
    },
    {
      "kind": "security",
      "source_path": "docs/architecture.md",
      "line": 102,
      "text": "└── ph3ar-mcp         — Security & threat intel"
    },
    {
      "kind": "security",
      "source_path": "docs/architecture.md",
      "line": 121,
      "text": "### 6. Security Layer (`lib/mcp/security.ts`)"
    },
    {
      "kind": "security",
      "source_path": "docs/architecture.md",
      "line": 143,
      "text": "│   ├── .well-known/      # Discovery (mcp.json, agents.json, security.txt)"
    },
    {
      "kind": "security",
      "source_path": "docs/architecture.md",
      "line": 155,
      "text": "│   ├── security.ts       # Security utilities"
    },
    {
      "kind": "security",
      "source_path": "docs/architecture.md",
      "line": 169,
      "text": "- [Security](/api/docs/security) — Security model deep dive"
    },
    {
      "kind": "security",
      "source_path": "docs/discovery.md",
      "line": 18,
      "text": "| `/.well-known/security.txt` | Plain text | RFC 9116 security policy | 24h |"
    },
    {
      "kind": "security",
      "source_path": "docs/discovery.md",
      "line": 155,
      "text": "5. **`/.well-known/security.txt`** — RFC 9116 security policy"
    },
    {
      "kind": "security",
      "source_path": "docs/license.md",
      "line": 77,
      "text": "- [Security](/api/docs/security) — Security model"
    },
    {
      "kind": "security",
      "source_path": "docs/mcp-config.md",
      "line": 218,
      "text": "- [Security](/api/docs/security) — Authentication details"
    },
    {
      "kind": "security",
      "source_path": "docs/principles.md",
      "line": 39,
      "text": "### 6. Security in Layers"
    },
    {
      "kind": "security",
      "source_path": "docs/principles.md",
      "line": 61,
      "text": "| Security | `/.well-known/security.txt` | Security researchers |"
    },
    {
      "kind": "security",
      "source_path": "docs/principles.md",
      "line": 73,
      "text": "- **Security**: Input sanitization, CORS, cron auth"
    },
    {
      "kind": "security",
      "source_path": "docs/principles.md",
      "line": 93,
      "text": "- **Security model**: Same CORS, auth, input validation patterns"
    },
    {
      "kind": "security",
      "source_path": "docs/principles.md",
      "line": 116,
      "text": "- [Security](/api/docs/security) — Security deep dive"
    },
    {
      "kind": "security",
      "source_path": "docs/roadmap.md",
      "line": 23,
      "text": "- ✅ Security: CORS, rate limiting, input sanitization, audit trail"
    },
    {
      "kind": "security",
      "source_path": "docs/roadmap.md",
      "line": 28,
      "text": "**Focus**: Dynamic discovery, real-time UI/UX, multi-tenant registry, analytics, federation, security, and test coverage."
    },
    {
      "kind": "security",
      "source_path": "docs/roadmap.md",
      "line": 34,
      "text": "- [ ] **Security & Compliance**: Hardened CORS, SSRF, CSP, HSTS, audit trail, and compliance checks"
    },
    {
      "kind": "security",
      "source_path": "docs/roadmap.md",
      "line": 62,
      "text": "- **Patch** (0.1.x): Bug fixes, security patches, doc updates"
    },
    {
      "kind": "security",
      "source_path": "docs/roadmap.md",
      "line": 73,
      "text": "- [Security](/api/docs/security) — Security model"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 1,
      "text": "# SECRET_MODAL — ph3ar Security Modal"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 3,
      "text": "> PlatphormNews MCP Server — ph3ar Security & Threat Intelligence Modal"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 7,
      "text": "The **ph3ar modal** is the security and threat intelligence layer of the PlatphormNews network. It is operated by `ph3ar.com` and provides security scanning, vulnerability assessment, and threat intelligence to all sites in the federation."
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 13,
      "text": "**Federation Role**: Security & Threat Intelligence"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 33,
      "text": "## Security Capabilities"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 45,
      "text": "### Network Security"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 57,
      "text": "When a security incident is detected:"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 65,
      "text": "## Security Policy Endpoints"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 69,
      "text": "| `/.well-known/security.txt` | RFC 9116 | Security contact & policy |"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 70,
      "text": "| `/api/docs/security` | Markdown | Full security documentation |"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 71,
      "text": "| `SECURITY.md` | GitHub | Repository security policy |"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 75,
      "text": "- **Email**: security@platphormnews.com"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 76,
      "text": "- **GitHub**: [Security Advisories](https://github.com/mbarbine/mcp-host-platphormnews/security/advisories)"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 85,
      "text": "| `ph3ar.com` | Main security portal |"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 87,
      "text": "| `blog.ph3ar.com` | Security research blog |"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 96,
      "text": "To integrate your PlatphormNews site with ph3ar security:"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 100,
      "text": "3. **Security scans** can be requested via the `proxy_mcp_call` tool"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 103,
      "text": "### For Security Researchers"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 107,
      "text": "1. Check `/.well-known/security.txt` for the latest contact info"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 108,
      "text": "2. Email `security@platphormnews.com` with:"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 118,
      "text": "AI agents can access security capabilities via MCP:"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 121,
      "text": "// List available security tools"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 125,
      "text": "// Filter for security-related tools"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 133,
      "text": "│              ph3ar Security Modal            │"
    },
    {
      "kind": "security",
      "source_path": "docs/secret-modal.md",
      "line": 153,
      "text": "- [Security](/api/docs/security) — Full security model"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 1,
      "text": "# Security"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 3,
      "text": "> PlatphormNews MCP Server — Security Model & Best Practices"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 36,
      "text": "Additionally, HTML content is sanitized via `sanitizeInput()` in `lib/mcp/security.ts` to prevent stored XSS."
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 63,
      "text": "Cron authentication in `lib/mcp/security.ts`:"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 140,
      "text": "## Security Reporting"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 142,
      "text": "- **Contact**: security@platphormnews.com"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 143,
      "text": "- **Policy**: [SECURITY.md](https://github.com/mbarbine/mcp-host-platphormnews/blob/main/SECURITY.md)"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 145,
      "text": "- **Security.txt**: `/.well-known/security.txt` (RFC 9116)"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 155,
      "text": "5. **Implement `.well-known/security.txt`** — Follow RFC 9116"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 157,
      "text": "7. **Test security** — Include sanitization and auth tests in your test suite"
    },
    {
      "kind": "security",
      "source_path": "docs/security.md",
      "line": 164,
      "text": "- [Secret Modal](/api/docs/secret-modal) — ph3ar security modal"
    },
    {
      "kind": "security",
      "source_path": "inline_cron.js",
      "line": 27,
      "text": "code = code.replace(`import { isValidCronRequest } from \"@/lib/mcp/security\";\\n`, '');"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/autodiscovery.ts",
      "line": 26,
      "text": "import { isSafeProxyUrl } from \"./security\";"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/autodiscovery.ts",
      "line": 282,
      "text": "\"/.well-known/security.txt\","
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/autodiscovery.ts",
      "line": 356,
      "text": "if (wellKnownMap[\"/.well-known/security.txt\"]) result.capabilities.push(\"security-policy\");"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/autodiscovery.ts",
      "line": 896,
      "text": "4. Flag any security concerns"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/canonical-registry.ts",
      "line": 156,
      "text": "if (/claws|trust|threat/.test(name)) return \"Security\""
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/cors.ts",
      "line": 7,
      "text": "import { isTrustedOrigin } from \"./security\""
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/cors.ts",
      "line": 26,
      "text": "\"Strict-Transport-Security\": \"max-age=31536000; includeSubDomains\","
    },
    {
      "kind": "todo",
      "source_path": "lib/mcp/discovery-search.ts",
      "line": 136,
      "text": "// TODO: Add freshness, popularity, trust filters if needed"
    },
    {
      "kind": "unsafe",
      "source_path": "lib/mcp/icons.ts",
      "line": 6,
      "text": "function escapeXml(unsafe: string): string {"
    },
    {
      "kind": "unsafe",
      "source_path": "lib/mcp/icons.ts",
      "line": 7,
      "text": "return unsafe.replace(/[<>&'\"]/g, (c) => {"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/network-graph.ts",
      "line": 7,
      "text": "import { isAllowedDomain } from \"./security\""
    },
    {
      "kind": "deprecated",
      "source_path": "lib/mcp/network-graph.ts",
      "line": 184,
      "text": "/** @deprecated Use NETWORK_GRAPH_URL from lib/platform/constants instead */"
    },
    {
      "kind": "deprecated",
      "source_path": "lib/mcp/network-graph.ts",
      "line": 186,
      "text": "/** @deprecated Use SITEMAP_INDEX_URL from lib/platform/constants instead */"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/prompts.ts",
      "line": 156,
      "text": "4. Flag security concerns"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/security.ts",
      "line": 2,
      "text": "// MCP Security Utilities: JA4+ Fingerprinting, SSRF Protection, Origin Validation, Bearer Tokens"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/security.ts",
      "line": 16,
      "text": "throw new Error(\"SECURITY ERROR: MCP_SECRET is required in production\")"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/security.ts",
      "line": 130,
      "text": "if (error instanceof Error && error.message.includes(\"SECURITY ERROR\")) {"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/sitemap-index.ts",
      "line": 7,
      "text": "import { isAllowedDomain } from \"./security\""
    },
    {
      "kind": "deprecated",
      "source_path": "lib/mcp/sitemap-index.ts",
      "line": 258,
      "text": "/** @deprecated Use SITEMAP_INDEX_URL from lib/platform/constants instead */"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/network.ts",
      "line": 15,
      "text": "{ error: `Security check failed: ${url} is not a safe or allowed domain.` },"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/network.ts",
      "line": 154,
      "text": "import { isSafeProxyUrl } from \"../security\";"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/network.ts",
      "line": 458,
      "text": "{ error: `Security check failed: ${url} is not a safe or allowed domain.` },"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/network.ts",
      "line": 631,
      "text": "{ error: `Security check failed: ${apiDocsUrl} is not a safe or allowed domain.` },"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/network.ts",
      "line": 769,
      "text": "{ error: `Security check failed: ${healthUrl} is not a safe or allowed domain.` },"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/phase1-contract.ts",
      "line": 5,
      "text": "import { isSafeProxyUrl } from \"../security\""
    },
    {
      "kind": "deprecated",
      "source_path": "lib/mcp/tools/phase1-contract.ts",
      "line": 222,
      "text": "addTool(server, \"deprecate_capability\", \"Mark a capability deprecated when durable registry persistence is configured.\", {"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/phase1-contract.ts",
      "line": 325,
      "text": "addTool(server, \"validate_well_known_files\", \"Validate well-known MCP, agents, trust, security, and ai-plugin discovery files.\", {}, async () => {"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/phase1-contract.ts",
      "line": 326,
      "text": "const paths = [\"/.well-known/mcp.json\", \"/.well-known/agents.json\", \"/.well-known/trust.json\", \"/.well-known/security.txt\", \"/.well-known/ai-plugin.json\"]"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/proxy.ts",
      "line": 7,
      "text": "import { isSafeProxyUrl } from \"../security\";"
    },
    {
      "kind": "unsafe",
      "source_path": "lib/mcp/tools/proxy.ts",
      "line": 95,
      "text": "text: JSON.stringify({ error: \"Invalid or unsafe proxy URL\" }),"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/sites.ts",
      "line": 8,
      "text": "import { generateBearerToken, isSafeProxyUrl } from \"../security\";"
    },
    {
      "kind": "unsafe",
      "source_path": "lib/mcp/tools/sites.ts",
      "line": 454,
      "text": "return { site: site.domain, error: \"Invalid or unsafe proxy URL\" };"
    },
    {
      "kind": "unsafe",
      "source_path": "lib/mcp/tools/sites.ts",
      "line": 531,
      "text": "text: JSON.stringify({ error: \"Invalid or unsafe proxy URL\" }),"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/verticals.ts",
      "line": 9,
      "text": "import { isSafeProxyUrl } from \"../security\""
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/verticals.ts",
      "line": 191,
      "text": "// ── CLAWS Security Intelligence ──────────────────────────"
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/verticals.ts",
      "line": 194,
      "text": "\"Query CLAWS (claws.platphormnews.com) security intelligence platform for threat data and policy information.\","
    },
    {
      "kind": "security",
      "source_path": "lib/mcp/tools/verticals.ts",
      "line": 209,
      "text": "error: \"Security check failed for URL\","
    },
    {
      "kind": "security",
      "source_path": "lib/platform/constants.ts",
      "line": 70,
      "text": "\"/.well-known/security.txt\","
    },
    {
      "kind": "security",
      "source_path": "lib/platform/public-routes.ts",
      "line": 43,
      "text": "{ path: \"/.well-known/security.txt\", title: \"Security policy\", description: \"RFC 9116 security contact file.\", changeFrequency: \"monthly\", priority: 0.5, publicSafe: true, kind: \"discovery\" },"
    },
    {
      "kind": "security",
      "source_path": "License FAQ.md",
      "line": 23,
      "text": "Yes, if your use is non-commercial as defined by the license. Internal evaluation, research, development, testing, security review, accessibility work, and internal experimentation are generally allowed if you are not directly or indirectly"
    },
    {
      "kind": "security",
      "source_path": "LICENSE.txt",
      "line": 13,
      "text": "“Non-commercial purposes” include personal use by an individual, academic research and development, journalism, testing, evaluation, interoperability work, security review, accessibility work, and internal use by your own organization where"
    },
    {
      "kind": "security",
      "source_path": "next.config.mjs",
      "line": 9,
      "text": "// Security and performance headers"
    },
    {
      "kind": "security",
      "source_path": "next.config.mjs",
      "line": 28,
      "text": "{ key: \"Strict-Transport-Security\", value: \"max-age=63072000; includeSubDomains; preload\" },"
    },
    {
      "kind": "security",
      "source_path": "proxy.ts",
      "line": 2,
      "text": "// Edge Proxy — Security headers, fingerprinting, bot detection"
    },
    {
      "kind": "security",
      "source_path": "proxy.ts",
      "line": 8,
      "text": "import { getClientFingerprint, classifyRequest } from \"./lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "proxy.ts",
      "line": 21,
      "text": "// ── Security Headers (defense in depth on top of vercel.json) ──"
    },
    {
      "kind": "security",
      "source_path": "proxy.ts",
      "line": 28,
      "text": "\"Content-Security-Policy\","
    },
    {
      "kind": "security",
      "source_path": "proxy.ts",
      "line": 32,
      "text": "\"Strict-Transport-Security\","
    },
    {
      "kind": "security",
      "source_path": "README.md",
      "line": 36,
      "text": "- **Security & Compliance**: Hardened CORS, SSRF, CSP, HSTS, audit trail, and compliance checks"
    },
    {
      "kind": "security",
      "source_path": "README.md",
      "line": 306,
      "text": "| `security-audit` | Security audit for a site |"
    },
    {
      "kind": "security",
      "source_path": "README.md",
      "line": 336,
      "text": "| `/.well-known/security.txt` | Security contact info |"
    },
    {
      "kind": "security",
      "source_path": "README.md",
      "line": 413,
      "text": "├── mcp.ph3ar.com ← Security & AI threat intelligence"
    },
    {
      "kind": "security",
      "source_path": "README.md",
      "line": 468,
      "text": "- **Security tests** — CORS, webhook verification, input validation"
    },
    {
      "kind": "security",
      "source_path": "ROADMAP.md",
      "line": 6,
      "text": "*   **Authentication & Security:** Basic Bearer tokens, CORS validation, SSRF proxy protection, and JA4+ fingerprinting."
    },
    {
      "kind": "security",
      "source_path": "TESTING_ROADMAP.md",
      "line": 1,
      "text": "# Testing Roadmap for MCP Security Utilities"
    },
    {
      "kind": "security",
      "source_path": "TESTING_ROADMAP.md",
      "line": 3,
      "text": "This roadmap outlines the testing strategy for the MCP (Model Context Protocol) Security Utilities, focusing particularly on ensuring robust SSRF (Server-Side Request Forgery) protection, origin validation, and authentication mechanisms in "
    },
    {
      "kind": "security",
      "source_path": "TESTING_ROADMAP.md",
      "line": 6,
      "text": "The current test suite (`__tests__/security.test.ts`) covers fundamental security checks, including:"
    },
    {
      "kind": "security",
      "source_path": "TESTING_ROADMAP.md",
      "line": 11,
      "text": "*   **Cron Security**: Validates Authorization headers against `CRON_SECRET`."
    },
    {
      "kind": "security",
      "source_path": "TESTING_ROADMAP.md",
      "line": 39,
      "text": "### Long-Term (Continuous Security)"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/chart-security.test.ts",
      "line": 3,
      "text": "describe('Chart Security', () => {"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/docs-route.test.ts",
      "line": 219,
      "text": "expect(data.endpoints[\"/.well-known/security.txt\"]).toBeDefined()"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/docs-route.test.ts",
      "line": 263,
      "text": "it(\"includes security policy\", async () => {"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/docs-route.test.ts",
      "line": 267,
      "text": "expect(data.security).toBeDefined()"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/docs-route.test.ts",
      "line": 268,
      "text": "expect(data.security.authentication).toBeDefined()"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/docs-route.test.ts",
      "line": 269,
      "text": "expect(data.security.cors).toBeDefined()"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/docs-route.test.ts",
      "line": 270,
      "text": "expect(data.security.cronAuthentication).toContain(\"PLATPHORM_API_KEY\")"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 76,
      "text": "const unsafe = \"<script>alert(1)</script>\";"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 77,
      "text": "const svg = emojiToSvg(unsafe);"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 83,
      "text": "const unsafe = \"M&M\";"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 84,
      "text": "const svg = emojiToSvg(unsafe);"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 89,
      "text": "const unsafe = `\"Hello\" 'World'`;"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 90,
      "text": "const svg = emojiToSvg(unsafe);"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 95,
      "text": "const unsafe = `<g id=\"test\" class='foo'>&</g>`;"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/icons.test.ts",
      "line": 96,
      "text": "const svg = emojiToSvg(unsafe);"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/proxy.test.ts",
      "line": 14,
      "text": "test(\"proxy_mcp_call prevents SSRF by blocking unsafe URLs\", async () => {"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/proxy.test.ts",
      "line": 30,
      "text": "// Mock an unsafe server entry in the registry"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/proxy.test.ts",
      "line": 32,
      "text": "name: \"unsafe-internal-server\","
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/proxy.test.ts",
      "line": 33,
      "text": "url: \"http://localhost:3000/api/mcp\", // Unsafe URL!"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/proxy.test.ts",
      "line": 40,
      "text": "server: \"unsafe-internal-server\","
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/proxy.test.ts",
      "line": 47,
      "text": "expect(result.content[0].text).toContain(\"Invalid or unsafe proxy URL\")"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/route.test.ts",
      "line": 591,
      "text": "expect(data.security).toBeDefined();"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security_vulnerability.test.ts",
      "line": 2,
      "text": "import { generateBearerToken, verifyBearerToken } from \"../lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security_vulnerability.test.ts",
      "line": 22,
      "text": ".toThrow(\"SECURITY ERROR: MCP_SECRET is required in production\")"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security_vulnerability.test.ts",
      "line": 28,
      "text": "expect(() => verifyBearerToken(token)).toThrow(\"SECURITY ERROR: MCP_SECRET is required in production\")"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security_vulnerability.test.ts",
      "line": 29,
      "text": "expect(consoleErrorSpy).toHaveBeenCalledWith(\"SECURITY ERROR: MCP_SECRET is required in production\")"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 10,
      "text": "} from \"@/lib/mcp/security\""
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 170,
      "text": "const { getMcpSecret } = await import(\"@/lib/mcp/security\");"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 177,
      "text": "const { getMcpSecret } = await import(\"@/lib/mcp/security\");"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 184,
      "text": "const { getMcpSecret } = await import(\"@/lib/mcp/security\");"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 185,
      "text": "expect(() => getMcpSecret()).toThrow(\"SECURITY ERROR: MCP_SECRET is required in production\");"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 242,
      "text": "it(\"re-throws SECURITY ERROR when MCP_SECRET is missing in production\", async () => {"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 245,
      "text": "const { verifyBearerToken } = await import(\"@/lib/mcp/security\");"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 246,
      "text": "expect(() => verifyBearerToken(\"data.signature\")).toThrow(\"SECURITY ERROR: MCP_SECRET is required in production\");"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/security.test.ts",
      "line": 249,
      "text": "it(\"returns null for non-SECURITY ERROR exceptions\", () => {"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/v1-test-mcp-route.test.ts",
      "line": 11,
      "text": "vi.mock(\"@/lib/mcp/security\", () => ({"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/v1-test-mcp-route.test.ts",
      "line": 16,
      "text": "import { isValidCronRequest } from \"@/lib/mcp/security\";"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/validate-route.test.ts",
      "line": 140,
      "text": "it(\"returns 400 when mcpUrl is unsafe (SSRF protection)\", async () => {"
    },
    {
      "kind": "unsafe",
      "source_path": "tests/__tests__/validate-route.test.ts",
      "line": 159,
      "text": "expect(data.error).toBe(\"Invalid or unsafe proxy URL\");"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/well-known.test.ts",
      "line": 197,
      "text": "// /.well-known/security.txt"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/well-known.test.ts",
      "line": 200,
      "text": "describe(\"GET /.well-known/security.txt\", () => {"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/well-known.test.ts",
      "line": 201,
      "text": "it(\"returns a valid RFC 9116 security.txt\", async () => {"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/well-known.test.ts",
      "line": 202,
      "text": "const { GET } = await import(\"../app/.well-known/security.txt/route\")"
    },
    {
      "kind": "security",
      "source_path": "tests/__tests__/well-known.test.ts",
      "line": 203,
      "text": "const req = new Request(\"https://mcp.platphormnews.com/.well-known/security.txt\", {"
    },
    {
      "kind": "security",
      "source_path": "tests/fix_test.ts",
      "line": 1,
      "text": "import { isTrustedOrigin, isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/revert_tests.sh",
      "line": 1,
      "text": "git checkout __tests__/security.test.ts"
    },
    {
      "kind": "security",
      "source_path": "tests/test_regex2.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/test_security.ts",
      "line": 1,
      "text": "import { isTrustedOrigin } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/test_ssrf2.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/test_ssrf3.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/test_ssrf4.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/test_ssrf5.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/test_ssrf6.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    },
    {
      "kind": "security",
      "source_path": "tests/test_ssrf8.ts",
      "line": 1,
      "text": "import { isSafeProxyUrl } from './lib/mcp/security';"
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [
      {
        "name": "child-process-exec",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/bolt.md",
          "app/api/cron/health-check/route.ts",
          "app/api/cron/sitemap-sync/route.ts",
          "lib/mcp/discovery-search.ts",
          "lib/mcp/redis.ts",
          "lib/mcp/sitemap-index.ts",
          "lib/mcp/tools/network.ts",
          "scripts/backfill-verticals.ts",
          "scripts/seed-mcp-data.js",
          "scripts/seed-sites-registry.js"
        ]
      },
      {
        "name": "dangerously-set-html",
        "confidence": "medium",
        "evidence_paths": [
          "app/faq/page.tsx",
          "app/layout.tsx",
          "components/ui/chart.tsx"
        ]
      },
      {
        "name": "sql-injection-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "app/feed.xml/route.ts",
          "lib/mcp/tools/github.ts"
        ]
      },
      {
        "name": "ssrf-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "app/api/client/route.ts",
          "app/api/v1/test/sites/route.ts",
          "components/mcp/live-site-tester.tsx",
          "lib/mcp/autodiscovery.ts",
          "lib/mcp/sitemap-index.ts",
          "lib/mcp/tools/network.ts",
          "lib/mcp/tools/orchestrator.ts",
          "lib/mcp/tools/phase1-contract.ts",
          "lib/mcp/tools/verticals.ts"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          "app/.well-known/agents.json/route.ts",
          "app/.well-known/ai-plugin.json/route.ts",
          "app/.well-known/mcp.json/route.ts",
          "app/.well-known/trust.json/route.ts",
          "app/api/docs/route.ts",
          "app/api/mcp/route.ts",
          "app/api/v1/seed/route.ts",
          "app/faq/page.tsx",
          "app/llms-index.json/route.ts",
          "app/llms.txt/route.ts",
          "app/openapi.json/route.ts",
          "app/openapi.yaml/route.ts",
          "components/mcp/connect-section.tsx",
          "components/mcp/network-section.tsx",
          "docs/architecture.md",
          "docs/license.md",
          "docs/mcp-config.md",
          "docs/PHASE-2-PRODUCTION-PLAN.md",
          "docs/security.md",
          "lib/mcp/auth.ts"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/palette.md",
          "app/.well-known/trust.json/route.ts",
          "app/docs/page.tsx",
          "app/faq/page.tsx",
          "app/globals.css",
          "app/layout.tsx",
          "components/mcp/batch-health-checker.tsx",
          "components/mcp/client/connection-manager.tsx",
          "components/mcp/client/server-prompts.tsx",
          "components/mcp/client/server-resources.tsx",
          "components/mcp/client/server-tools.tsx",
          "components/mcp/connect-section.tsx",
          "components/mcp/discovery-dashboard.tsx",
          "components/mcp/hero-section.tsx",
          "components/mcp/live-site-tester.tsx",
          "components/mcp/network-section.tsx",
          "components/mcp/prompts-section.tsx",
          "components/mcp/resources-section.tsx",
          "components/mcp/roadmap-section.tsx",
          "components/mcp/tools-section.tsx"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "app/.well-known/ai-plugin.json/route.ts",
          "docs/PHASE-2-PLAN.md",
          "docs/PHASE-2-PRODUCTION-PLAN.md",
          "docs/secret-modal.md",
          "lib/mcp/autodiscovery.ts"
        ]
      },
      {
        "name": "fingerprint",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/sentinel.md",
          "app/.well-known/security.txt/route.ts",
          "docs/architecture.md",
          "docs/secret-modal.md",
          "docs/security.md",
          "lib/mcp/security.ts",
          "proxy.ts",
          "ROADMAP.md",
          "TESTING_ROADMAP.md",
          "tests/__tests__/security.test.ts"
        ]
      },
      {
        "name": "health",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/bolt.md",
          "app/.well-known/agents.json/route.ts",
          "app/.well-known/ai-plugin.json/route.ts",
          "app/.well-known/mcp.json/route.ts",
          "app/.well-known/trust.json/route.ts",
          "app/api/cron/daily/route.ts",
          "app/api/cron/discovery/route.ts",
          "app/api/cron/health-check/route.ts",
          "app/api/docs/route.ts",
          "app/api/health/route.ts",
          "app/api/mcp/route.ts",
          "app/api/mcp/validate/route.ts",
          "app/api/v1/discovery/route.ts",
          "app/api/v1/health/route.ts",
          "app/api/v1/network/health/route.ts",
          "app/api/v1/test/sites/route.ts",
          "app/client/page.tsx",
          "app/docs/page.tsx",
          "app/feed.xml/route.ts",
          "app/llms-full.txt/route.ts"
        ]
      },
      {
        "name": "ip address",
        "confidence": "medium",
        "evidence_paths": [
          "docs/security.md",
          "TESTING_ROADMAP.md",
          "tests/__tests__/security.test.ts"
        ]
      },
      {
        "name": "location",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/bolt.md",
          "app/humans.txt/route.ts",
          "components/mcp/client/server-prompts.tsx",
          "components/mcp/client/server-resources.tsx",
          "components/mcp/client/server-tools.tsx",
          "components/mcp/prompts-section.tsx",
          "components/mcp/resources-section.tsx",
          "docs/discovery.md",
          "lib/mcp/tools/orchestrator.ts",
          "next.config.mjs",
          "proxy.ts",
          "vercel.json"
        ]
      },
      {
        "name": "oauth",
        "confidence": "medium",
        "evidence_paths": [
          "components/mcp/roadmap-section.tsx",
          "docs/PHASE-2-PRODUCTION-PLAN.md",
          "lib/mcp/tools/producthunt.ts",
          "ROADMAP.md"
        ]
      },
      {
        "name": "password",
        "confidence": "medium",
        "evidence_paths": [
          "lib/mcp/security.ts"
        ]
      },
      {
        "name": "pii",
        "confidence": "medium",
        "evidence_paths": [
          "package-lock.json",
          "pnpm-lock.yaml"
        ]
      },
      {
        "name": "secret-like environment variables",
        "confidence": "medium",
        "evidence_paths": [
          "package.json"
        ]
      },
      {
        "name": "session_token",
        "confidence": "medium",
        "evidence_paths": [
          "lib/mcp/dynamo.ts"
        ]
      },
      {
        "name": "token",
        "confidence": "medium",
        "evidence_paths": [
          "app/.well-known/ai-plugin.json/route.ts",
          "app/api/callback/route.ts",
          "app/api/docs/route.ts",
          "app/api/health/route.ts",
          "components/mcp/connect-section.tsx",
          "components/mcp/roadmap-section.tsx",
          "docs/mcp-config.md",
          "docs/PHASE-2-PLAN.md",
          "docs/PHASE-2-PRODUCTION-PLAN.md",
          "docs/principles.md",
          "docs/security.md",
          "lib/mcp/__tests__/discovery-search.test.ts",
          "lib/mcp/dynamo.ts",
          "lib/mcp/github-sitemap.ts",
          "lib/mcp/protocol.ts",
          "lib/mcp/redis.ts",
          "lib/mcp/registry.ts",
          "lib/mcp/security.ts",
          "lib/mcp/tools/github.ts",
          "lib/mcp/tools/orchestrator.ts"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:15.954Z"
}
