gsc-mcp
README.md
# gsc-mcp
En MCP-koppling som ger Claude (Claude Code, Claude Desktop) **läsåtkomst** till Google Search Console: sökdata, indexeringsstatus för enskilda sidor och sitemaps. Kopplingen körs lokalt på din egen dator och kan inte ändra något på sajten eller i Search Console.
Exempel på frågor när den är kopplad:
- "Vilka sökord hade flest visningar men få klick de senaste 28 dagarna?"
- "Jämför mobil och dator för sajten den här månaden."
- "Är https://example.com/blogg/mitt-inlagg indexerad?"
## Ursprung
Byggd på [sarahpark/google-search-console-mcp](https://github.com/sarahpark/google-search-console-mcp), version 1.1.0 (commit `88af746`, MIT-licens, se [LICENSE](LICENSE)). Koden är granskad rad för rad. Historiken från originalet finns kvar i repot.
Ändringar mot originalet:
- **Egen inloggning i webbläsaren** (`npm run login`) med teamets egen inloggningsklient. Ingen Google Cloud CLI och ingen roll i Google Cloud-projektet behövs för den som använder kopplingen.
- **Lista över tillåtna sajter** (`GSC_ALLOWED_SITES`). Är den satt syns och nås bara de sajterna, oavsett vad inloggningen har åtkomst till.
- **Låsta versioner.** Alla beroenden är låsta till exakta versioner i `package-lock.json` och uppgraderade så att `npm audit` inte hittar några kända sårbarheter (googleapis 188, zod 4).
- **Inget npm-paket.** Kopplingen körs från den här koden, inte från npm, så ingen uppdatering kommer in utan att någon har granskat den.
- Tester för inloggningen och listan över tillåtna sajter, och testerna anpassade till nyare Google-bibliotek.
## Säkerhet i korthet
- Kopplingen ber Google om behörigheten `webmasters.readonly`. Google nekar alltså alla försök att ändra något, även om koden skulle försöka.
- Den har fyra verktyg, alla läsande: `list_sites`, `search_analytics`, `inspect_url`, `list_sitemaps`.
- Den pratar bara med Googles API (`googleapis.com`). Ingen statistik eller data skickas någon annanstans. Inloggningen tar emot Googles svar på din egen dator (`127.0.0.1`) och nås inte utifrån.
- Inloggningen sparas i `~/.gsc-mcp/token.json` på din dator. Den ger läsåtkomst till dina Search Console-sajter, så behandla filen som ett lösenord.
- Tre beroenden: MCP-paketet, Googles API-bibliotek och zod.
- Search Console-data om kunders sajter hamnar i Claude-konversationen. Följ det som gäller för kunddata i AI-verktyg.
## Uppsättning för dig som ska använda kopplingen
Du behöver Node.js 20 eller senare, git, åtkomst till minst en egendom i Search Console och **klientfilen** (`client.json`) som du fått av den som administrerar kopplingen.
Enklast: be Claude göra det. Klistra in:
> Klona https://github.com/jonathan-holmqvist/gsc-mcp och sätt upp kopplingen enligt README, avsnittet "Uppsättning för dig som ska använda kopplingen". Klientfilen ligger här: [sökväg till client.json].
Claude gör stegen nedan. Du behöver bara välja ditt jobbkonto i webbläsaren och godkänna (steg 3).
### 1. Hämta och bygg
```bash
git clone https://github.com/jonathan-holmqvist/gsc-mcp.git
```
```bash
cd gsc-mcp && npm ci && npm run build && npm test
```
`npm ci` installerar exakt de låsta versionerna. Testerna körs utan nät och utan riktiga inloggningsuppgifter.
### 2. Lägg klientfilen på plats
Kopiera `client.json` till mappen `.gsc-mcp` i din hemkatalog:
- Mac: `~/.gsc-mcp/client.json`
- Windows: `C:\Users\<ditt namn>\.gsc-mcp\client.json`
Lägg den aldrig i repot.
### 3. Logga in (en gång)
```bash
npm run login
```
Webbläsaren öppnas. Välj ditt jobbkonto och godkänn läsåtkomsten. När sidan säger "Klart" är du inloggad. Kopplingen ser samma sajter som du ser i Search Console med det kontot.
Är appen satt som External visar Google först en varning om att appen inte är verifierad: klicka **Avancerat** och sedan **Fortsätt till gsc-mcp**. Är den satt som Internal kan bara konton i samma organisation logga in, och ingen varning visas.
### 4. Koppla in i Claude Code
Byt sökvägen mot var du klonade repot. Utelämna `--env`-raden om du vill nå alla dina sajter.
```bash
claude mcp add gsc --scope user --env "GSC_ALLOWED_SITES=sc-domain:example.com,https://shop.example.com/" -- node "/full/sökväg/till/gsc-mcp/build/index.js"
```
Sajterna i `GSC_ALLOWED_SITES` skrivs exakt som i Search Console, kommaseparerade.
<details>
<summary>Claude Desktop</summary>
Lägg till i `claude_desktop_config.json`, inuti det befintliga `mcpServers`:
```json
{
"mcpServers": {
"gsc": {
"command": "node",
"args": ["/full/sökväg/till/gsc-mcp/build/index.js"],
"env": {
"GSC_ALLOWED_SITES": "sc-domain:example.com"
}
}
}
}
```
</details>
### 5. Kontrollera
Starta om Claude och fråga:
> Använd gsc och lista mina Search Console-egendomar.
Använd sedan egendomen exakt som den listas (till exempel `sc-domain:example.com`) i följande frågor.
## Uppsättning för den som administrerar (en gång)
Görs av en person, som sedan delar klientfilen med användarna.
1. **Skapa ett projekt** i [Google Cloud Console](https://console.cloud.google.com/projectcreate). Använd ett eget projekt för den här kopplingen, inte ett som andra kopplingar redan använder. Lägg till en kollega som andra ägare (IAM, rollen Owner) så att projektet inte hänger på ett enda konto.
2. **Slå på [Search Console API](https://console.cloud.google.com/apis/library/searchconsole.googleapis.com)** i projektet. API:t är gratis och kräver ingen betalning.
3. **Inloggningsskärmen** (Google Auth Platform → Branding / Audience):
- Appnamn `gsc-mcp`, din mejl som support- och kontaktadress.
- Målgrupp: **Internal** om projektet ligger under en organisation. Annars **External**, och tryck sedan **Publish app** så att den ligger i produktion. I testläge måste varje användare läggas till som testanvändare och logga in igen var sjunde dag.
- Data access: lägg till behörigheten `https://www.googleapis.com/auth/webmasters.readonly`.
- Skicka inte appen på Googles granskning. Utan granskning visar Google en varning vid inloggning, och högst 100 personer kan använda den. Det räcker internt.
4. **Skapa klienten** (Google Auth Platform → Clients → Create client): typ **Desktop app**, namn `gsc-mcp`. Ladda ner JSON-filen och döp om den till `client.json`.
5. **Dela `client.json`** med användarna via Drive eller Slack, aldrig i repot. Filen räknas inte som en riktig hemlighet hos Google (den kan inte ensam ge åtkomst till någons data), men den ska inte vara öppen.
<details>
<summary>Andra sätt att logga in: gcloud eller tjänstekonto</summary>
Utan `client.json` faller kopplingen tillbaka på Googles vanliga inloggning:
- **gcloud:** `gcloud auth application-default login --scopes=https://www.googleapis.com/auth/webmasters.readonly,https://www.googleapis.com/auth/cloud-platform`, följt av `gcloud auth application-default set-quota-project PROJEKT_ID`. Kräver rollen Service Usage Consumer i projektet.
- **Tjänstekonto:** skapa ett tjänstekonto och en JSON-nyckel i projektet, lägg till tjänstekontots mejl med **Begränsad** behörighet på varje Search Console-egendom, och lägg till `--env "GOOGLE_APPLICATION_CREDENTIALS=/full/sökväg/till/nyckel.json"` i kommandot i steg 4. Nyckeln ger åtkomst till allt kontot är tillagt på. Är `GOOGLE_APPLICATION_CREDENTIALS` satt används den före `client.json`.
</details>
## Verktyg
| Verktyg | Gör |
|---|---|
| `list_sites` | Listar egendomarna du har åtkomst till (filtrerat av `GSC_ALLOWED_SITES`). |
| `search_analytics` | Klick, visningar, CTR och position, uppdelat på `query`, `page`, `country`, `device`, `searchAppearance`, `date`. Filter på sökord, sida (även regex), land och enhet. Upp till 25 000 rader. |
| `inspect_url` | Indexeringsstatus, senaste genomsökning, robots.txt och mobilanpassning för en URL. |
| `list_sitemaps` | Inskickade sitemaps med fel och varningar. |
## Inställningar
| Variabel | Gör |
|---|---|
| `GSC_ALLOWED_SITES` | Kommaseparerad lista över sajter kopplingen får nå. Tom betyder alla dina sajter. |
| `GSC_CONFIG_DIR` | Mappen för `client.json` och `token.json`. Standard `~/.gsc-mcp`. |
| `GSC_OAUTH_CLIENT_FILE` | Annan sökväg till klientfilen än `GSC_CONFIG_DIR/client.json`. |
| `GOOGLE_APPLICATION_CREDENTIALS` | Nyckelfil för tjänstekonto. Används före klientfilen om den är satt. |
## Begränsningar
- Högst 25 000 rader per anrop, utan sidvisning.
- Search Console visar data 16 månader bakåt, med 2-3 dygns fördröjning, och döljer ovanliga sökord av integritetsskäl.
- URL-kontroll tar en sida åt gången (Google tillåter cirka 2 000 per dag och egendom).
## Uppdatera från originalet
Originalet är inte kopplat automatiskt. För att se vad som ändrats där:
```bash
git remote add upstream https://github.com/sarahpark/google-search-console-mcp.git && git fetch upstream && git diff 88af746 upstream/main -- src package.json
```
Granska ändringarna innan något tas in. Kör `npm audit` och `npm test` efter varje uppdatering.
## Felsökning
- **"Not signed in to Google":** kör `npm run login` i mappen `gsc-mcp` och starta om Claude.
- **Inloggningen säger "access_denied" eller "app blocked":** appen är i testläge och ditt konto är inte testanvändare, eller behörigheten saknas på inloggningsskärmen. Be den som administrerar kontrollera steg 3.
- **"invalid_grant" efter en tid:** inloggningen har gått ut eller dragits tillbaka. Kör `npm run login` igen.
- **Inga egendomar visas:** kontrollera att kontot har åtkomst i Search Console och att `GSC_ALLOWED_SITES` är skriven exakt som egendomen.
- **"is not in GSC_ALLOWED_SITES":** sajten finns inte i listan. Lägg till den i kopplingens inställning och starta om Claude.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues