Courses
ในบทช่วยสอนนี้ ฉันจะแสดงวิธีเชื่อมต่อ Claude Code เข้ากับ GitHub โดยใช้ตัวเชื่อมต่อ Claude (สร้างบน Model Context Protocol) และใช้เพื่อคัดแยกรีโพสิทอรีโอเพ่นซอร์สแบบครบวงจร
เวิร์กโฟลว์นี้ไม่ต้องโคลน ไม่ต้องใช้เวกเตอร์สโตร์ และไม่แก้ไขข้อมูลใด ๆ ในรีโปปลายทาง Claude Code จะอ่านอีชูผ่านตัวเชื่อมต่อ และเขียนสิ่งที่ผลิตเป็นไฟล์ลงในระบบไฟล์ท้องถิ่นเพื่อให้ตรวจทานก่อนตัดสินใจว่าจะโพสต์อะไรหรือไม่
เมื่อจบบทช่วยสอนนี้ คุณจะมี:
- การตั้งค่า Claude Code และ GitHub MCP ที่ใช้งานได้ โดยใช้โทเค็นแบบอ่านอย่างเดียว
- พรอมป์ตที่นำกลับมาใช้ซ้ำได้สำหรับรีโปสาธารณะใด ๆ
- ชิ้นงานคัดแยกที่สมบูรณ์สำหรับ
langchain-ai/langchainเพื่อใช้เปรียบเทียบ
Claude Code GitHub Connector (MCP) คืออะไร
Claude Code คือเอเจนต์เขียนโค้ดบนเทอร์มินัลของ Anthropic
เริ่มต้นมาก็เข้าถึงระบบไฟล์ เชลล์ และ git ของเครื่องแล้ว Claude Code Connectors จะขยายความสามารถให้เข้าถึงบริบทภายนอก เช่น อีชูบน GitHub ทิกเก็ตบน Linear ข้อความบน Slack คิวรี Postgres เป็นต้น ซึ่งเทอร์มินัลเพียงอย่างเดียวเข้าถึงไม่ได้
โปรโตคอลของตัวเชื่อมต่อนี้เรียกว่า MCP (Model Context Protocol) มาตรฐานแบบเปิดสำหรับเปิดให้ LLM agents เข้าถึงเครื่องมือและข้อมูล
Anthropic ดูแลไดเรกทอรีตัวเชื่อมต่อพร้อมใช้ และคุณสามารถเขียนตัวเองหรือเชื่อมต่อกับเซิร์ฟเวอร์ MCP ของบุคคลที่สามได้
สำหรับบทช่วยสอนนี้ เราจะใช้ GitHub MCP server อย่างเป็นทางการ ซึ่งรันแบบโลคัลผ่าน Docker แนวคิดหลักของการตั้งค่ามีดังนี้:
- รันเป็นคอนเทนเนอร์ Docker บนเครื่อง โดยไม่มีตัวกลางบนคลาวด์ ดังนั้นข้อมูลรับรองจะอยู่บนเครื่องของคุณ
- ยืนยันตัวตนด้วย GitHub Personal Access Token (PAT) มาตรฐาน จึงไม่ต้องลงทะเบียนแอป OAuth
- รองรับการกำหนดขอบเขตสิทธิ์ เช่น PAT ที่ไม่กำหนดสโคป ซึ่งให้สิทธิ์อ่านอย่างเดียวในรีโปสาธารณะ เขียนไม่ได้ในระดับ API ของ GitHub
- เปิดให้ Claude Code เข้าถึงผ่านคำสั่ง
claude mcp addแล้วเครื่องมือนี้จะพร้อมใช้ในทุกเซสชัน
การคัดแยกโอเพ่นซอร์สคือการอ่านเยอะ ใช้วิจารณญาณมาก และค่าความผิดพลาดต่ำ
การอ่านอีชู 50 รายการและจัดกลุ่มเป็นงานน่าเบื่อสำหรับมนุษย์ แต่เหมาะกับโมเดลที่สามารถถือบริบททั้งหมดไว้พร้อมกัน
ยิ่งไปกว่านั้น เราเขียนผลลัพธ์เป็นไฟล์โลคัลก่อน คลัสเตอร์ที่ไม่ดีหรือดราฟต์ที่เก้งก้างก็ไม่เสียอะไร และคุณจะจับได้ระหว่างตรวจทาน
บทช่วยสอน Claude Code GitHub Connector: สร้างการคัดแยกสำหรับ langchain-ai/langchain
ในส่วนนี้ เราจะตั้งค่าตัวเชื่อมต่อ GitHub ใน Claude Code และรันพรอมป์ตคัดแยก 4 ชุดกับ langchain-ai/langchain เป็นรีโป ML ขนาดใหญ่ที่ตัวติดตามอีชูค่อนข้างยุ่งเหยิง โดยภาพรวม เราจะทำสิ่งต่อไปนี้:
- เชื่อมต่อ Claude Code กับ GitHub ผ่าน MCP server อย่างเป็นทางการที่รันใน Docker
- ใช้ PAT แบบไม่มีสโคป เพื่อให้ตัวเชื่อมต่ออ่านอย่างเดียวโดยออกแบบ
- รันพรอมป์ตคัดแยกที่บันทึกผลลัพธ์เป็นไฟล์โลคัล
- ตรวจทานผลลัพธ์ รวมถึงบางกรณีที่ Claude ปฏิเสธการจัดคลัสเตอร์อีชูเป็นรายการซ้ำ
มาสร้างกันแบบทีละขั้นตอน
ขั้นตอนที่ 1: ติดตั้งสิ่งที่ต้องมีสำหรับ Claude Code และ Docker
ก่อนตั้งค่าตัวเชื่อมต่อ ต้องมีสามอย่างนี้:
- Claude Code: ติดตั้งได้จาก คู่มือการติดตั้งอย่างเป็นทางการของ Anthropic
- Docker Desktop: GitHub MCP server อย่างเป็นทางการรันในคอนเทนเนอร์ จึงต้องติดตั้งและเปิด Docker
- บัญชี GitHub: ใช้สำหรับสร้าง PAT ในขั้นตอนถัดไป
เมื่อมีครบแล้ว ให้ตรวจสอบว่า Docker กำลังรันอยู่:
docker info | head -5
หากยังไม่ได้ติดตั้ง Docker หรือดีมอนไม่ได้รัน จะเห็นข้อผิดพลาด "Cannot connect to the Docker daemon" บน macOS ให้เปิด Docker Desktop ด้วย:
open -a Docker
Docker Desktop ใช้เวลา 15–60 วินาทีจึงพร้อมเต็มที่ และ docker info จะยังคงผิดพลาดในช่วงนั้น แทนที่จะเช็คเอง ให้ใช้คำสั่งรอแบบสั้นที่โพลจนกว่าดีมอนจะขึ้น:
until
docker info >/dev/null 2>&1; do sleep 2; echo "waiting..."; done && echo "Docker ready"
เมื่อพิมพ์ Docker ready แล้ว ไปต่อได้
ขั้นตอนที่ 2: สร้างโทเค็น GitHub แบบอ่านอย่างเดียว
เมื่อตั้งค่า Docker เสร็จ ให้ไปที่ github.com/settings/tokens แล้วสร้างโทเค็นแบบ classic ตัวใหม่
หมายเหตุ: อย่าติ๊กสโคปใด ๆ โทเค็นที่ไม่กำหนดสโคปยังคงอ่านรีโปสาธารณะได้ผ่าน GitHub API ซึ่งเพียงพอสำหรับเอเจนต์ของเรา โดยไม่มีสโคปใด ๆ โทเค็นจะไม่สามารถเขียน แก้ไข หรือ ลบ อะไรบน GitHub ได้ ไม่ว่าคุณจะสั่งให้ Claude ทำอะไร นี่เป็นการรับประกันแบบแข็งที่บังคับโดยฝั่ง GitHub ไม่ใช่คำสัญญาเกี่ยวกับพฤติกรรมของเอเจนต์
คัดลอกและบันทึกโทเค็นทันทีหลังสร้าง แล้ว export ลงในเชลล์ของคุณ:
export GITHUB_PERSONAL_ACCESS_TOKEN="ghp_your_token_here"
หากคุณอยู่ในเซสชัน Claude Code อยู่แล้ว อาจอยากใช้คำนำหน้า ! เพื่อรันคำสั่ง export ในเชลล์โดยตรง (เช่น ! export GITHUB_PERSONAL_ACCESS_TOKEN="...")
อย่างไรก็ตาม เนื่องจาก ! จะสปอว์นซับเชลล์ชั่วคราว ตัวแปรจะหายไปทันทีที่คำสั่งจบ และ Claude จะมองไม่เห็น
เพื่อกำหนดโทเค็นอย่างปลอดภัยโดยไม่ต้องวางลงในพรอมป์ตของโมเดล มีสองทางเลือก:
- พิมพ์
/exitเพื่อออกจาก Claude รันคำสั่ง export ในเทอร์มินัลปกติ แล้วเริ่ม claude ใหม่ - หรือบันทึกโทเค็นไว้ในไฟล์
.envในไดเรกทอรีงาน ซึ่ง Claude Code จะอ่านอัตโนมัติเมื่อเริ่มต้น
ตรวจสอบว่าทั้งสองสิ่งพร้อม โดยไม่ echo โทเค็นออกมา:
docker info | head -3
echo "Token set: ${GITHUB_PERSONAL_ACCESS_TOKEN:+yes}"
คำสั่งที่สองจะพิมพ์ Token set: yes หากตัวแปรมีค่า และ Token set: (ไม่มีอะไรตามหลังโคลอน) หากว่าง
วิธีนี้ปลอดภัยกว่า echo โทเค็นตรง ๆ เพราะไม่มีโอกาสหลงไปอยู่ในประวัติเชลล์แบบ plaintext
ขั้นตอนที่ 3: ลงทะเบียนตัวเชื่อมต่อ GitHub กับ Claude Code
GitHub MCP server อย่างเป็นทางการจัดส่งเป็นอิมเมจ Docker
เราลงทะเบียนกับ Claude Code ด้วย claude mcp add:
claude mcp add github \
-e GITHUB_PERSONAL_ACCESS_TOKEN=$GITHUB_PERSONAL_ACCESS_TOKEN \
-- docker run -i --rm \
-e GITHUB_PERSONAL_ACCESS_TOKEN \
ghcr.io/github/github-mcp-server
แฟล็ก -e ทั้งสองไม่ใช่พิมพ์ผิด:
- ตัวแรกของ
-e(ก่อน --) ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับโพรเซส MCP ที่ Claude Code เปิดขึ้น - ตัวที่สองของ
-e(ภายในอาร์กิวเมนต์docker run) บอก Docker ให้ส่งผ่านตัวแปรนั้นเข้าไปในคอนเทนเนอร์
ถ้าพลาดอย่างใดอย่างหนึ่งและคอนเทนเนอร์เริ่มด้วยโทเค็นว่าง จะยืนยันตัวตนกับ GitHub API ไม่สำเร็จ
เพื่อตรวจสอบว่าลงทะเบียนตัวเชื่อมต่อสำเร็จหรือไม่:
claude mcp list
คุณควรเห็นว่า:
github — docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server — Connected
หากเห็น Failed to connect สาเหตุที่พบบ่อยที่สุดคือ Docker ไม่ได้รัน หรือไม่ได้ export ตัวแปร GITHUB_PERSONAL_ACCESS_TOKEN ในเชลล์เดียวกับที่รัน claude mcp add
ขั้นตอนที่ 4: ตรวจสอบการเชื่อมต่อแบบง่าย
ตอนนี้ตั้งค่าโทเค็น GitHub แล้ว ต่อไป สร้างไดเรกทอรีงานและเปิด CLI ของ Claude Code:
mkdir demo && cd demo
claude
คำสั่ง claude เปิดเซสชันแบบโต้ตอบในไดเรกทอรีปัจจุบัน
ไฟล์ใด ๆ ที่ Claude เขียนระหว่างการคัดแยกจะอยู่ที่นี่
จากนั้นถามคำถามอ่านอย่างเดียวแบบง่ายเพื่อยืนยันว่ากำลังใช้ตัวเชื่อมต่อ:
Using the GitHub MCP connector, fetch the 5 most recently updated open issues in langchain-ai/langchain. Just list titles and numbers.
ครั้งแรกที่ Claude Code ใช้เครื่องมือ GitHub จะมีพรอมต์ขออนุมัติ
อนุมัติเครื่องมือแบบอ่านอย่างเดียว เช่น list_issues, get_issue, search_issues เป็นต้น
หาก Claude ถอยไปใช้ curl กับ GitHub API สาธารณะแทนการใช้เครื่องมือ MCP แปลว่าตัวเชื่อมต่อยังไม่ถูกโหลด ให้ปิดเซสชันแล้วเริ่มใหม่
การรันที่สำเร็จจะได้ผลลัพธ์ประมาณนี้:

เมื่อเห็นหมายเลขอีชูจริง ๆ กลับมาผ่าน MCP ก็พร้อมรันการคัดแยกจริง
ขั้นตอนที่ 5: สร้างสรุปแบ็กลอก
งานวอร์มอัพนี้เป็นแบบอ่านอย่างเดียว ตอนนี้ เราต้องการแผนที่ของสิ่งที่อยู่ในตัวติดตามอีชูก่อนทำอย่างอื่น
Prompt:
Using the GitHub MCP connector, pull the 50 most recently updated open issues from langchain-ai/langchain.
Read their titles, bodies, and labels. Group them by likely area — bugs, feature requests, documentation, questions, and "needs more info."
For each group, give me a count and 3-5 representative issue numbers with a one-line reason. Save as backlog-summary.md in the current directory.

Claude Code จะดึงอีชูผ่านตัวเชื่อมต่อ อ่านและเขียนไฟล์มาร์กดาวน์ จัดกลุ่มตามหมวดพร้อมหมายเลขอีชูที่เป็นตัวแทน ไฟล์นี้เพียงอย่างเดียวก็มีประโยชน์ ผู้ดูแลสามารถไล่ดูใน 60 วินาทีและรู้ว่าสัปดาห์นี้จะเจอกับอะไร
ขั้นตอนที่ 6: ติดธงตัวเลือกที่เป็นไปได้ว่าเป็นรายการซ้ำ
การตรวจจับรายการซ้ำคือจุดที่เอเจนต์คุ้มค่า
การอ่านอีชู 50 รายการแบบเต็มและจัดกลุ่มตามปัญหาแท้จริงเป็นงานน่าเบื่อสำหรับคน แต่โมเดลสามารถถือทุกอย่างไว้ในบริบทเดียวและมองเห็นความทับซ้อนที่การค้นหาคีย์เวิร์ดพลาด
Prompt:
From the same 50 issues you already pulled, identify clusters of likely duplicates: issues describing the same underlying problem, even if titles differ. For each cluster, output issue numbers, a one-sentence shared-problem description, and confidence (high/medium/low). Save as duplicate-candidates.md.
นี่คือสิ่งที่ Claude สร้างได้จริงในการรันของฉัน:

ส่วนที่น่าสนใจที่สุดของผลลัพธ์นี้คือคลัสเตอร์ 2 ถึง 4
ตัวตรวจจับรายการซ้ำแบบคีย์เวิร์ดธรรมดาคงปิดทั้งสี่คลัสเตอร์ว่าเป็นรายการซ้ำ
แต่ Claude ปฏิเสธอย่างชัดเจนที่จะเรียกว่าซ้ำ
มันติดธงว่าเป็นคลัสเตอร์องค์ประกอบที่อยู่ในซับซิสเต็มเดียวกัน แต่มีรากเหง้าปัญหาต่างกัน และบอกว่าควรปิดอันไหนจริง ๆ (แค่คลัสเตอร์ 1) เทียบกับอันไหนควรคัดแยกร่วมกันแต่คงเปิดไว้
นั่นคือพฤติกรรมที่คุณอยากได้จากผู้คัดแยกที่รอบคอบ และเป็นเหตุผลว่าทำไมรูปแบบเขียนไฟล์โลคัลแล้วค่อยตรวจทานจึงคุ้มค่า
ถ้าเราเดินสายตรงเข้ากับ GitHub API และปิดทุกอย่างที่ Claude ติดธง เราคงปิดบั๊กจริงสามรายการ
ขั้นตอนที่ 7: ตรวจทาน แล้วค่อยตัดสินใจว่าจะโพสต์อะไร
นี่แหละคือหัวใจของรูปแบบไฟล์โลคัล
ก่อนที่อะไรจะไปแตะ GitHub ให้ตรวจแต่ละไฟล์ .md ที่ Claude บันทึกไว้ และดูว่าการจัดกลุ่มสอดคล้องกับสัญชาตญาณของคุณหรือไม่
คลัสเตอร์ที่มีความมั่นใจสูงดูเหมือนรายการซ้ำจริงหรือไม่ ลองอ่านร่างคำตอบ 2–3 รายการ และดูว่าโทนสอดคล้องกับคุณหรือไม่
หากต้องการโพสต์คอมเมนต์จริงหรือใส่ป้ายกำกับ มีสองทางเลือก:
- ทำด้วยตนเอง: คัดลอกร่างไปวางใน GitHub เอง สำหรับการคัดแยกครั้งเดียวในรีโปของคนอื่น วิธีนี้โอเคและมักเป็นตัวเลือกที่เหมาะสม
- อนุญาตให้เขียนบนรีโปที่คุณเป็นเจ้าของ: สร้าง PAT แยกต่างหากที่มีสโคป repo เพิ่มเป็นตัวเชื่อมต่ออีกตัว (เช่น github-write) แล้วรันพรอมป์ตอีกครั้งโดยให้ Claude ใส่ป้ายกำกับและโพสต์คอมเมนต์ Claude Code จะขออนุมัติเครื่องมือที่เป็นการเขียนครั้งแรกที่ใช้งาน
กุญแจสำคัญด้านความปลอดภัยสำหรับเส้นทางการเขียนคือแยกโทเค็นอ่านและเขียนออกจากกัน
สรุป
ในบทช่วยสอนนี้ ฉันสาธิตการเชื่อมต่อ Claude Code กับ GitHub ผ่าน MCP และใช้เพื่อคัดแยกรีโพสิทอรีโอเพ่นซอร์สจริงแบบครบวงจร
แทนที่จะสร้างบอท GitHub เฉพาะทางหรือเดินสายเว็บฮุก เวิร์กโฟลว์จะอ่านอีชูผ่าน GitHub MCP server อย่างเป็นทางการ เขียนชิ้นงานคัดแยกสี่รายการเป็นไฟล์โลคัล และให้คุณตรวจทานทั้งหมดก่อนตัดสินใจว่าจะโพสต์อะไร
ข้อคิดที่กว้างขึ้นคือ ตัวเชื่อมต่อทำให้ Claude Code เปลี่ยนจากเอเจนต์เขียนโค้ดเป็นเครื่องมือที่อ่านเครื่องมือของคุณและเตรียมงานให้คุณตรวจทาน
ค่าเริ่มต้นที่เหมาะสมคือเก็บงานนั้นไว้โลคัลจนกว่าคุณจะได้เห็น และเมื่อไว้ใจรูปแบบแล้ว ค่อยอนุญาตให้เอเจนต์ลงมือทำในส่วนที่ต้นทุนความผิดพลาดต่ำ
จากจุดนี้ คุณสามารถต่อยอดโปรเจ็กต์ได้หลายทาง:
- เพิ่มตัวเชื่อมต่อที่เขียนได้บนรีโปที่คุณเป็นเจ้าของ เพื่อให้ป้ายกำกับและคอมเมนต์ถูกนำไปใช้โดยอัตโนมัติหลังตรวจทาน
- เชื่อมต่อ Linear หรือ Slack เพื่อซิงก์การตัดสินใจคัดแยกเข้ากับเวิร์กโฟลว์ของทีม
- เปลี่ยนพรอมป์ตให้เป็นงาน CI แบบตามกำหนดการที่สร้าง PR คัดแยกรายสัปดาห์
- หรือทำให้พรอมป์ตด้านบนทั่วไปขึ้นเป็นคำสั่งสแลชของ Claude Code ที่ใช้ได้กับ URL ของรีโปใดก็ได้
FAQs
ต้องสมัคร GitHub Copilot เพื่อใช้ GitHub MCP server ไหม?
ไม่จำเป็น GitHub มีเอ็นด์พอยต์ HTTP ระยะไกล (api.githubcopilot.com/mcp) ที่ยืนยันตัวตนด้วย Personal Access Token มาตรฐานได้ แต่การรันอิมเมจ Docker แบบ self-host (อย่างที่ทำในบทช่วยสอนนี้) จะคงการเชื่อมต่อไว้บนเครื่องของคุณ ทั้งสองวิธีไม่ต้องสมัคร Copilot แต่แนวทาง Docker รับประกันว่าโทเค็นของคุณจะไม่ออกจากสภาพแวดล้อมโลคัล
ทำไมต้องปล่อยให้ PAT ไม่ติ๊กสโคปใด ๆ?
PAT แบบ classic ที่ไม่กำหนดสโคปสามารถอ่านรีโปสาธารณะผ่าน GitHub API ได้ แต่ไม่สามารถเขียน แก้ไข หรือ ลบ อะไรได้เลย ทำให้ทั้งบทช่วยสอนนี้เป็นแบบอ่านอย่างเดียวโดยออกแบบ ถึงแม้ Claude จะพยายามโพสต์คอมเมนต์ GitHub ก็จะปฏิเสธด้วย 403 สำหรับการคัดแยกรีโปที่คุณไม่ได้เป็นเจ้าของ นี่คือการตั้งค่าที่ปลอดภัยที่สุด
ถ้าตัวเชื่อมต่อขึ้นว่า "Failed to connect" ล่ะ?
สองสาเหตุที่พบบ่อย: Docker ไม่ได้รัน (docker info ควรคืนข้อมูลเซิร์ฟเวอร์ ไม่ใช่ข้อผิดพลาด) หรือไม่ได้ export GITHUB_PERSONAL_ACCESS_TOKEN ในเชลล์ที่คุณรัน claude mcp add ให้แก้ตามที่เป็น ลบแล้วเพิ่มตัวเชื่อมต่อใหม่ จากนั้นรีสตาร์ทเซสชัน Claude Code
ระหว่างบทช่วยสอนนี้ Claude Code มีการโพสต์อะไรไปที่ GitHub ไหม?
ไม่ ทั้งหมดเป็นพรอมป์ตแบบอ่านอย่างเดียว ผลลัพธ์ทั้งหมดถูกเขียนเป็นไฟล์โลคัล และ PAT ที่ไม่กำหนดสโคปไม่สามารถเขียนไปที่ GitHub ได้ คุณควบคุมได้ว่าอะไรรันไปโพสต์หรือไม่
รันตามกำหนดเวลาได้ไหม?
ได้ ห่อพรอมป์ตไว้ในเชลล์สคริปต์ที่เรียกใช้ Claude Code แบบไม่โต้ตอบ (ดูแฟล็ก --print และ -p ของ CLI claude ใน เอกสารอย่างเป็นทางการ) แล้วรันด้วย cron หรือ GitHub Actions คอมมิตชิ้นงานลงสาขาและเปิด PR เพื่อรีวิว
ตั้งค่าผ่านเมนูตัวเชื่อมต่อ "+" ในเว็บแอป Claude ได้ไหม?
ไม่ได้ โฟลว์นั้นสำหรับ Claude.ai / Desktop / แชทบนมือถือ ส่วน Claude Code ใช้ CLI แต่เมื่อเชื่อมต่อแล้ว พื้นผิวทั้งสองสามารถใช้ MCP servers เดียวกันได้