Context7
ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
MCP server for Google Search Console: properties, sitemaps, search analytics and URL inspection
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
GSC_SERVICE_ACCOUNT_KEY, GSC_SERVICE_ACCOUNT_KEY_FILE, GSC_CLIENT_ID, GSC_CLIENT_SECRET, GSC_REFRESH_TOKEN, GOOGLE_APPLICATION_CREDENTIALS, GSC_SITE_URL, GSC_ALLOWED_SITES, GSC_READ_ONLY, GSC_ALLOW_TOOLS, GSC_DENY_TOOLSค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"google-search-console": {
"command": "npx",
"args": [
"-y",
"@ni-c/google-search-console-mcp"
],
"env": {
"GSC_SERVICE_ACCOUNT_KEY": "ใส่ค่าของคุณ",
"GSC_SERVICE_ACCOUNT_KEY_FILE": "ใส่ค่าของคุณ",
"GSC_CLIENT_ID": "ใส่ค่าของคุณ",
"GSC_CLIENT_SECRET": "ใส่ค่าของคุณ",
"GSC_REFRESH_TOKEN": "ใส่ค่าของคุณ",
"GOOGLE_APPLICATION_CREDENTIALS": "ใส่ค่าของคุณ",
"GSC_SITE_URL": "ใส่ค่าของคุณ",
"GSC_ALLOWED_SITES": "ใส่ค่าของคุณ",
"GSC_READ_ONLY": "ใส่ค่าของคุณ",
"GSC_ALLOW_TOOLS": "ใส่ค่าของคุณ",
"GSC_DENY_TOOLS": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add google-search-console --env GSC_SERVICE_ACCOUNT_KEY='ใส่ค่าของคุณ' --env GSC_SERVICE_ACCOUNT_KEY_FILE='ใส่ค่าของคุณ' --env GSC_CLIENT_ID='ใส่ค่าของคุณ' --env GSC_CLIENT_SECRET='ใส่ค่าของคุณ' --env GSC_REFRESH_TOKEN='ใส่ค่าของคุณ' --env GOOGLE_APPLICATION_CREDENTIALS='ใส่ค่าของคุณ' --env GSC_SITE_URL='ใส่ค่าของคุณ' --env GSC_ALLOWED_SITES='ใส่ค่าของคุณ' --env GSC_READ_ONLY='ใส่ค่าของคุณ' --env GSC_ALLOW_TOOLS='ใส่ค่าของคุณ' --env GSC_DENY_TOOLS='ใส่ค่าของคุณ' -- npx -y @ni-c/google-search-console-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"google-search-console": {
"command": "npx",
"args": [
"-y",
"@ni-c/google-search-console-mcp"
],
"env": {
"GSC_SERVICE_ACCOUNT_KEY": "ใส่ค่าของคุณ",
"GSC_SERVICE_ACCOUNT_KEY_FILE": "ใส่ค่าของคุณ",
"GSC_CLIENT_ID": "ใส่ค่าของคุณ",
"GSC_CLIENT_SECRET": "ใส่ค่าของคุณ",
"GSC_REFRESH_TOKEN": "ใส่ค่าของคุณ",
"GOOGLE_APPLICATION_CREDENTIALS": "ใส่ค่าของคุณ",
"GSC_SITE_URL": "ใส่ค่าของคุณ",
"GSC_ALLOWED_SITES": "ใส่ค่าของคุณ",
"GSC_READ_ONLY": "ใส่ค่าของคุณ",
"GSC_ALLOW_TOOLS": "ใส่ค่าของคุณ",
"GSC_DENY_TOOLS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"google-search-console": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@ni-c/google-search-console-mcp"
],
"env": {
"GSC_SERVICE_ACCOUNT_KEY": "ใส่ค่าของคุณ",
"GSC_SERVICE_ACCOUNT_KEY_FILE": "ใส่ค่าของคุณ",
"GSC_CLIENT_ID": "ใส่ค่าของคุณ",
"GSC_CLIENT_SECRET": "ใส่ค่าของคุณ",
"GSC_REFRESH_TOKEN": "ใส่ค่าของคุณ",
"GOOGLE_APPLICATION_CREDENTIALS": "ใส่ค่าของคุณ",
"GSC_SITE_URL": "ใส่ค่าของคุณ",
"GSC_ALLOWED_SITES": "ใส่ค่าของคุณ",
"GSC_READ_ONLY": "ใส่ค่าของคุณ",
"GSC_ALLOW_TOOLS": "ใส่ค่าของคุณ",
"GSC_DENY_TOOLS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
GSC_SERVICE_ACCOUNT_KEY_FILE envGSC_CLIENT_ID envGOOGLE_APPLICATION_CREDENTIALS envGSC_SITE_URL envGSC_ALLOWED_SITES envGSC_READ_ONLY envGSC_ALLOW_TOOLS envGSC_DENY_TOOLS envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub ni-c ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: GSC_SERVICE_ACCOUNT_KEY, GSC_CLIENT_SECRET, GSC_REFRESH_TOKEN
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.3.0) เข้า registry 2 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js, Docker ในเครื่องด้วย
ในหมวดเดียวกันมี Context7, Codebase Memory, Exa
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A Model Context Protocol (MCP) server for Google Search Console, the service that tells you how Google sees your site — this reads it and sets it up.
Lets MCP clients like Claude Code, Claude Desktop or Codex create a property and prove ownership of it, submit and refresh sitemaps, ask what any URL's index status is, and query the whole Performance report — with the irreversible operations put to a person first and the write tools switchable off entirely.
21 tools is the ceiling, not the floor: GSC_ALLOW_TOOLS=essential registers a curated five instead, and a model picks the right tool far more reliably from five than from 21 — see choosing which tools load.
It can actually create a working property. Getting one takes four steps in a fixed order — obtain a verification token, place it in DNS or on the page, verify ownership, add the property — and nothing in Google's APIs enforces that order. Calling sites.add first _succeeds_ and leaves a property that appears in every listing and answers 403 for every piece of data, which looks like a permissions bug and is not. setup_site reports which step is missing and hands over the exact DNS record to paste. Servers that expose sites.add alone can only add properties somebody already verified by hand.
Three APIs, not one. Search Console v1 is ten methods and does not include ownership. Site Verification is a separate service with its own scope, its own host and an incompatible way of naming the same site — sc-domain:example.com there is {type: INET_DOMAIN, identifier: example.com}, and passing the property spelling straight through is accepted and verifies a domain literally called sc-domain:example.com. The Indexing API is a third. All three are covered, and the translation between them is in src/site-identity.ts.
The numbers are right. Search analytics come back as a table with totals where CTR is computed from the totals rather than averaged across rows, and average position is weighted by impressions. Unweighted, a thousand rare queries ranking 80th drag a property's real average of 12 up into the nineties. The result also says plainly that the rows do not sum to the property total when the query dimension is used — Google withholds rare queries for anonymity, commonly a third or more of all impressions, and a total printed without that caveat is a number people will quote.
It knows where these APIs are sharp. The trailing slash on https://example.com/ is mandatory and its absence is a 403; a domain property and a URL-prefix property for the same site are different properties with different data, so a bare hostname is refused rather than guessed at; days are counted in Pacific Time, so a last7days computed in UTC asks for a day Google has no data for; the hour dimension silently returns nothing without dataState: HOURLY_ALL; Google omits empty arrays entirely, so a fresh credential's property list arrives as {}; and the Indexing API returns 200 for any owned URL while only acting on JobPosting and BroadcastEvent pages.
The server starts without credentials and lists its tools; every call then fails with setup instructions rather than a Google error. That is deliberate, so registries and sandbox inspectors can introspect it.
| Variable | Description |
|---|---|
GSC_SERVICE_ACCOUNT_KEY | Service account key as raw JSON, or base64-encoded JSON |
GSC_SERVICE_ACCOUNT_KEY_FILE | Path to a service account key file. Alternative to the above — setting both is an error |
GSC_CLIENT_ID | OAuth2 client id |
GSC_CLIENT_SECRET | OAuth2 client secret |
GSC_REFRESH_TOKEN | OAuth2 refresh token. All three OAuth2 variables are required together |
GOOGLE_APPLICATION_CREDENTIALS | Application default credentials, used when no GSC_ credential is set |
GSC_SITE_URL | Default property, e.g. sc-domain:example.com or https://example.com/. Makes site_url optional everywhere |
GSC_ALLOWED_SITES | Comma-separated properties this server may touch at all; anything else is refused |
GSC_READ_ONLY | true (or 1/yes) registers only the twelve read tools |
GSC_ALLOW_TOOLS | Comma-separated tool names, a list_* prefix, or essential |
GSC_DENY_TOOLS | Same shape, subtracted from whatever the allow list left |
ELICITATION | false replaces the approval dialog with the two-call token. Not prefixed |
Credentials are tried in that order — explicit beats ambient. A partial OAuth triple is a startup error rather than a reason to fall through to application default credentials, because that fallback would quietly run the server as whatever account the machine is logged into.
A service account is the recommended one: it sees only the properties you explicitly add it to, and revoking it does not touch anyone's Google account. Add its client_email under Settings → Users and permissions in Search Console, or give it ownership with verify_site. Note that the Indexing API requires owner, not full user.
An OAuth2 refresh token acts as the person who consented and sees everything they see. Its scopes were fixed at consent time and cannot be widened later.
Every visible tool costs context on every request, and a model picks the right one far more reliably from five than from 21. Two variables narrow the list:
GSC_ALLOW_TOOLS=essential # the curated five
GSC_ALLOW_TOOLS='list_*,get_site' # exact names, or one trailing * GSC_DENY_TOOLS='delete_*' # subtracted from whatever allow left
essential is list_sites, get_site, list_sitemaps, query_search_analytics and inspect_url — everything needed to look at a property, and nothing that changes it.
An entry that matches no tool stops the server with the list of real names. An ignored typo would otherwise leave a tool missing from tools/list with nothing pointing at the cause, and nobody traces an absence back to an environment variable.
If you run several of these servers at once, mcp-hub is the other answer — its /hub endpoint replaces every server's tools with six meta-tools.
Narrowing the list also narrows the credential: the OAuth scopes this server requests are derived from the tools that are actually registered, so a server denied the Indexing tools never asks for the Indexing scope.
claude mcp add google-search-console -- npx -y @ni-c/google-search-console-mcp
{
"mcpServers": { "google-search-console": { "command": "npx", "args": ["-y", "@ni-c/google-search-console-mcp"], "env": { "GSC_SERVICE_ACCOUNT_KEY_FILE": "/path/to/key.json", "GSC_SITE_URL": "sc-domain:example.com" } } } }
[mcp_servers.google-search-console]
command = "npx" args = ["-y", "@ni-c/google-search-console-mcp"]
[mcp_servers.google-search-console.env] GSC_SERVICE_ACCOUNT_KEY_FILE = "/path/to/key.json" GSC_SITE_URL = "sc-domain:example.com"
docker run --rm -i \
-v /path/to/key.json:/key.json:ro \ -e GSC_SERVICE_ACCOUNT_KEY_FILE=/key.json \ -e GSC_SITE_URL=sc-domain:example.com \ ghcr.io/ni-c/google-search-console-mcp
A client that cannot spawn a local process — ChatGPT connectors, Claude on the web, Cursor, LibreChat — reaches google-search-console-mcp through mcp-hub: one container serves many stdio MCP servers over Streamable HTTP, with an OAuth 2.1 login behind a single password and long-lived tokens for the clients that cannot do OAuth. Its /hub endpoint puts every server behind six meta-tools, so one connector reaches all of them without N×tool schemas in the model's context, and it speaks both protocol revisions — a question this server asks travels through it to the person at the far end.
Its /config/mcp.json uses Claude Code's format, so the entry is the one you already have:
{
"mcpServers": { "google-search-console": { "command": "npx", "args": ["-y", "@ni-c/google-search-console-mcp"], "env": { "GSC_SERVICE_ACCOUNT_KEY": "…", "GSC_SITE_URL": "sc-d
ตัดมาแค่ช่วงต้น อ่านต่อใน repo