{"id":50666815,"url":"https://github.com/decocms/site-diagnostics","last_synced_at":"2026-06-08T07:05:35.360Z","repository":{"id":348293721,"uuid":"1196605958","full_name":"decocms/site-diagnostics","owner":"decocms","description":"Site diagnostics agent","archived":false,"fork":false,"pushed_at":"2026-05-12T04:11:15.000Z","size":1222,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-12T05:36:41.623Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/decocms.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-30T21:30:59.000Z","updated_at":"2026-05-12T04:05:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/decocms/site-diagnostics","commit_stats":null,"previous_names":["tlgimenes/site-diagnostics","decocms/site-diagnostics"],"tags_count":0,"template":false,"template_full_name":"decocms/mcp-app","purl":"pkg:github/decocms/site-diagnostics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decocms%2Fsite-diagnostics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decocms%2Fsite-diagnostics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decocms%2Fsite-diagnostics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decocms%2Fsite-diagnostics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/decocms","download_url":"https://codeload.github.com/decocms/site-diagnostics/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decocms%2Fsite-diagnostics/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34051789,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-08T07:05:00.761Z","updated_at":"2026-06-08T07:05:35.355Z","avatar_url":"https://github.com/decocms.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Site Diagnostics\n\nBlackbox performance and SEO diagnostics for storefronts and high-traffic websites, built as an MCP App on deco.\n\n## Quick Start\n\n```bash\nbun install\nbun run dev\n```\n\n## Project Structure\n\n```\n├── api/                        # MCP server (Bun)\n│   ├── main.ts                 # Server entry point with middleware\n│   ├── tools/                  # MCP tool definitions\n│   │   ├── index.ts            # Tool registry\n│   │   ├── diagnose.ts         # Diagnose tool (launches UI)\n│   │   ├── fetch-page.ts       # HTTP fetch (no browser)\n│   │   ├── capture-har.ts      # HAR capture (browser)\n│   │   ├── lighthouse.ts       # Lighthouse audit\n│   │   ├── render-page.ts      # Browser render + DOM\n│   │   └── screenshot.ts       # Page screenshot\n│   ├── prompts/\n│   │   └── site-diagnostics.ts # /diagnose prompt\n│   └── resources/\n│       └── diagnose.ts         # MCP App resource (serves HTML)\n├── shared/                     # Shared code (API + Web)\n│   └── diagnostics.ts          # Shared diagnostics prompt text\n├── web/                        # React UI (MCP App)\n│   ├── tools/diagnostics/      # Diagnostics tool UI\n│   ├── components/ui/          # shadcn/ui components\n│   └── router.tsx              # Tool page router\n├── app.json                    # Deco mesh config\n└── package.json\n```\n\n## Development\n\n```bash\nbun run dev          # API server + web build (watch mode)\nbun run dev:api      # API server only (port 3001)\nbun run dev:web      # Web build only (watch mode)\nbun run build        # Production build\nbun run check        # TypeScript type checking\nbun run ci:check     # Biome lint + format check\n```\n\n## Connecting a Client\n\nThe MCP server is exposed over SSE at `/api/mcp`.\n\n- **Production**: `https://site-diagnostics.decocms.com/api/mcp`\n- **Local dev**: `http://localhost:3001/api/mcp`\n\nQuery params select the access mode:\n\n- no param — public tools only, anonymous (zero friction)\n- `?anon` — explicit anonymous session\n- `?proprietary` — authenticated session; required for tools that need user credentials. Unauthenticated requests get a `401` with a `WWW-Authenticate` header pointing at the OAuth metadata, which MCP clients use to run the interactive OTP + OAuth flow (email code via Resend, consent screen, bearer token).\n\n### Claude Code\n\n```bash\n# public tools, no auth\nclaude mcp add --transport sse site-diagnostics https://site-diagnostics.decocms.com/api/mcp\n\n# authenticated (triggers interactive OAuth flow on first use)\nclaude mcp add --transport sse site-diagnostics \"https://site-diagnostics.decocms.com/api/mcp?proprietary\"\n```\n\n### Claude Desktop / other MCP hosts\n\nPoint the host at the same URL with SSE transport. Hosts that support OAuth discovery (Claude Desktop, Claude Code, MCP Inspector) will auto-handle the login flow when the `?proprietary` endpoint returns `401`.\n\n## Tech Stack\n\n- **Runtime**: [Bun](https://bun.sh)\n- **Server**: [@decocms/runtime](https://github.com/decocms/runtime) MCP server\n- **UI**: React 19 + [TanStack Router](https://tanstack.com/router) + [shadcn/ui](https://ui.shadcn.com)\n- **Styling**: [Tailwind CSS](https://tailwindcss.com) v4\n- **MCP Apps**: [@modelcontextprotocol/ext-apps](https://www.npmjs.com/package/@modelcontextprotocol/ext-apps) SDK\n- **Build**: [Vite](https://vitejs.dev) + [vite-plugin-singlefile](https://github.com/nickreese/vite-plugin-singlefile)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecocms%2Fsite-diagnostics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdecocms%2Fsite-diagnostics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecocms%2Fsite-diagnostics/lists"}