{
  "markdown": "# Synapse — GEO Growth Layer\n\nThe GEO check every vibe coder runs before they launch.\n\n```sh\nnpx synapse check\n```\n\nSynapse is a CLI + MCP server + linter that makes a new product **discoverable\nand recommendable** by AI coding agents (Cursor, Claude Code, Windsurf, v0,\nBolt, Lovable). Run `synapse check` against a project path or URL and get a\n0–100 Growth Score plus a list of failing rules and one-command auto-fixes.\n\n## Packages\n\n| Package | Description |\n| --- | --- |\n| [`@synapse/geo-lint`](packages/geo-lint) | 24-rule GEO linter. Programmatic API: `lint(target) → LintReport`. |\n| [`@synapse/cli`](packages/cli) | CLI with `init`, `check`, `fix`, `deploy`, `status`. Installs as `synapse`. |\n| [`synapse`](packages/cli-meta) | Thin meta-wrapper for the `npx synapse` UX. |\n| [`@synapse/mcp-server`](packages/mcp-server) | MCP server exposing 6 tools, 3 resources, 3 prompts. Stdio + streamable HTTP. |\n\n## Quick start\n\n```sh\n# In a fresh project:\nnpx @synapse/cli init           # scaffolds synapse.config.json + tracker stub\nnpx @synapse/cli check          # 24-rule lint, prints scored report\nnpx @synapse/cli fix            # apply auto-fixes (llms.txt, robots.txt, agent-answer)\n\n# With an account:\nexport SYNAPSE_API_KEY=…\nnpx @synapse/cli deploy         # register the site, get a /s/<slug> dashboard\nnpx @synapse/cli status         # live agent-mention stats\n```\n\n## MCP install\n\nSynapse runs as an MCP server so any agent can call `geo_check`, `geo_fix`,\n`geo_track_init`, `geo_prompts`, `geo_status`, and `geo_corpus_query`\ndirectly during a build session.\n\n### Cursor — `.cursor/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"synapse-geo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@synapse/mcp-server\"],\n      \"env\": { \"SYNAPSE_API_KEY\": \"\" }\n    }\n  }\n}\n```\n\n### Claude Code\n\n```sh\nclaude mcp add synapse-geo -- npx -y @synapse/mcp-server\n```\n\n### Windsurf — `~/.codeium/windsurf/mcp_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"synapse-geo\": { \"command\": \"npx\", \"args\": [\"-y\", \"@synapse/mcp-server\"] }\n  }\n}\n```\n\n### Cline — VS Code settings\n\nAdd to `cline.mcpServers`:\n\n```json\n\"synapse-geo\": { \"command\": \"npx\", \"args\": [\"-y\", \"@synapse/mcp-server\"] }\n```\n\n### Continue — `config.json`\n\n```json\n{\n  \"mcpServers\": [\n    { \"name\": \"synapse-geo\", \"command\": \"npx\", \"args\": [\"-y\", \"@synapse/mcp-server\"] }\n  ]\n}\n```\n\n### Zed — `~/.config/zed/settings.json`\n\n```json\n{\n  \"context_servers\": {\n    \"synapse-geo\": {\n      \"command\": { \"path\": \"npx\", \"args\": [\"-y\", \"@synapse/mcp-server\"] }\n    }\n  }\n}\n```\n\n## Monorepo development\n\n```sh\npnpm install\npnpm build                      # builds all packages\npnpm test                       # runs vitest in packages/geo-lint\nnode packages/cli/dist/index.js check https://example.com\nnode packages/mcp-server/dist/index.js   # stdio MCP server\nPORT=8787 node packages/mcp-server/dist/http.js   # streamable HTTP\n```\n\n## Authentication model\n\n| Surface | Read-only tools | Write / account tools |\n| --- | --- | --- |\n| CLI | `init`, `check`, `fix` work with no account | `deploy`, `status` need `SYNAPSE_API_KEY` |\n| MCP | `geo_check`, `geo_prompts`, `geo_status`, `geo_corpus_query` work with no auth | `geo_fix`, `geo_track_init` require `SYNAPSE_API_KEY` |\n\n## Web app + backend (`apps/web`)\n\nLives in this same repo. Next.js 14 (App Router) + Supabase. Free during the\nFounding 1000 — no Stripe, no paywalls.\n\nPages: `/`, `/install`, `/guide`, `/methodology`, `/leaderboard`, `/discover`,\n`/corpus`, `/s/[slug]` (with dynamic OG + default badge SVG).\n\nPublic assets: `/llms.txt`, `/llms-full.txt`, `/sitemap.xml`, `/robots.txt`,\n`/.well-known/agent-answer.json`, `/discover.json`, `/s.js` (tracker beacon).\n\nAPI routes against Supabase:\n\n| Route | Purpose |\n| --- | --- |\n| `POST /api/sites` | Register a new site (used by `synapse deploy`). |\n| `POST /api/events` | Tracker beacon endpoint, CORS-enabled. |\n| `GET /api/sites/[slug]/status` | Live dashboard data. |\n| `GET /api/corpus` | Public corpus snapshot. |\n| `GET/POST /api/recommend?intent=…` | Agent-facing recommendation endpoint. |\n| `POST /api/cli-telemetry` | Anonymous CLI usage events. |\n\nDogfood result: Synapse scores **98/100 (grade A)** against its own linter.\n\n### Deploy\n\n1. **Supabase**: create a project, then run\n   `apps/web/supabase/migrations/0001_init.sql` (paste into the SQL editor, or\n   `psql $SUPABASE_DB_URL -f …`). RLS is configured for public reads of\n   visible sites; all writes go through the service role from the API routes.\n2. **Env**: copy `apps/web/.env.example` to `.env.local` and fill in\n   `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_ANON_KEY`,\n   `SUPABASE_SERVICE_ROLE_KEY`, `NEXT_PUBLIC_SITE_URL`.\n3. **Vercel**: link `apps/web` to a Vercel project and ship.\n   ```sh\n   vercel link --cwd apps/web\n   vercel env add NEXT_PUBLIC_SUPABASE_URL\n   vercel env add NEXT_PUBLIC_SUPABASE_ANON_KEY\n   vercel env add SUPABASE_SERVICE_ROLE_KEY\n   vercel env add NEXT_PUBLIC_SITE_URL\n   vercel --prod --cwd apps/web --yes\n   ```\n\nEach surface fails closed with a clear error if Supabase isn't configured —\nthe homepage and `/install` still render statically without it.\n\n## License\n\nMIT\n",
  "bytes": 5155,
  "sha": "5caf906a6d918dfb08caffc2152eb455adaa351ec0d1502b3ac43c8dd99adc77",
  "repo_slug": "calvinling2021-star/synapse",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_calvinling2021_star_synapse_ge_9d89f9cb/readme"
}