ในสถานการณ์นี้ แม้ว่า MCP Server จะมอบสิทธิ์ให้เซิร์ฟเวอร์การอนุญาตบุคคลที่สาม แต่ MCP Server ยังทำหน้าที่เป็นเซิร์ฟเวอร์การอนุญาตสำหรับลูกค้า MCP เนื่องจาก MCP Server จำเป็นต้องออกโทเค็นการเข้าถึงของตัวเองให้กับลูกค้า MCP
ในมุมมองของข้าพเจ้า สถานการณ์นี้ดูเหมาะสมกว่าในการจัดการสถานการณ์ที่ MCP Server แทนไคลเอนต์ MCP (ผู้ใช้) เพื่อเข้าถึงทรัพยากรบุคคลที่สาม (เช่น รีโป Github) มากกว่าแทนไคลเอนต์ MCP (ผู้ใช้) เพื่อเข้าถึงทรัพยากรของ MCP Server เอง
โดยสรุป ตามโปรโตคอล MCP Server มีบทบาททั้งในฐานะเซิร์ฟเวอร์การอนุญาตและเซิร์ฟเวอร์ทรัพยากรใน OAuth
ต่อไป มาลงรายละเอียดความรับผิดชอบของ MCP Server เนื่องจากเซิร์ฟเวอร์การอนุญาตและเซิร์ฟเวอร์ทรัพยากร
เมื่อ MCP Server ทำหน้าที่เป็นเซิร์ฟเวอร์การอนุญาต หมายความว่าผู้ใช้ปลายทางของไคลเอนต์ MCP มีอัตลักษณ์ของตนเองใน MCP Server MCP Server มีหน้าที่รับรองความถูกต้องของผู้ใช้ปลายทางนี้และออกโทเค็นการเข้าถึงให้ผู้ใช้ปลายทางนี้เพื่อเข้าถึงทรัพยากรของ MCP Server
ส่วนต่อประสานที่เกี่ยวข้องกับการอนุญาตที่ระบุใน Spec การอนุญาต MCP ข้างต้นหมายความว่า MCP Server ต้องให้การใช้งานของเซิร์ฟเวอร์การอนุญาต
จากมุมมองของข้าพเจ้า วิธีนี้ขึ้นอยู่กับว่าผู้ใช้ของบริการอนุญาตบุคคลที่สามที่คุณพึ่งพาเป็ผู้ใช้ปลายทางเดียวกันกับ MCP Server หรือไม่ หมายความว่าโทเค็นการเข้าถึงที่ออกให้โดยบริการการอนุญาตบุคคลที่สามจะถูกใช้โดยตรงกับ MCP Server ของคุณ
ถ้าใช่ คุณสามารถส่งต่ออินเทอร์เฟซที่เกี่ยวข้องกับการตรวจสอบรับรองใน MCP Server ของคุณไปยังบริการการอนุญาตบุคคลที่สามได้ทั้งหมด
ถ้าไม่ คุณควรใช้วิธีการมอบหมายการอนุญาตบุคคลที่สามตามที่ระบุใน Spec คุณจำเป็นต้องรักษาความสัมพันธ์แมปปิงระหว่างโทเค็นการเข้าถึงที่ออกให้โดย MCP Server เองและโทเค็นการเข้าถึงที่ออกโดยบริการการอนุญาตบุคคลที่สามใน MCP Server
ข้าพเจ้ามองว่าวิธีการมอบหมายการอนุญาตบุคคลที่สามตามโปรโตคอลนั้นค่อนข้างคลุมเครือในแง่สถานการณ์การใช้งานจริง โปรโตคอลดูเหมือนจะให้บุคคลที่สามช่วย MCP Server ทำกระบวนการอนุญาตให้เสร็จ แต่ยังคงกำหนดให้ MCP Server ออก Access token เอง ซึ่งจริง ๆ แล้วหมายความว่า MCP Server ยังคงต้องรับภาระในการออก Access tokens ในฐานะเซิร์ฟเวอร์การอนุญาต ซึ่งไม่ได้ช่วยให้สะดวกยิ่งขึ้นสำหรับนักพัฒนา ข้าพเจ้าคิดว่าเป็นเพราะผู้เขียนโปรโตคอลพิจารณาว่าการส่งคืนโทเค็นการเข้าถึงบุคคลที่สามให้กับไคลเอนต์ MCP โดยตรงจะนำมาซึ่งปัญหาด้านความปลอดภัย (เช่น การรั่วไหล/การใช้งานในทางที่ผิด ฯลฯ)
จากประสบการณ์ของข้าพเจ้า สถานการณ์ที่เหมาะสมที่สุดสำหรับการอนุญาตบุคคลที่สามในโปรโตคอลที่ระบุจริง ๆ ควรเป็นสถานการณ์ของ "ผู้อนุญาต MCP Server เพื่อเข้าถึงทรัพยากรของบุคคลที่สาม" ตัวอย่างเช่น MCP Server ต้องเข้าถึงรีโปรของผู้ใช้ใน Github และปรับใช้รหัสรีโปไปยังแพลตฟอร์มการจัดส่งโค้ด ในกรณีนี้ผู้ใช้จำเป็นต้องอนุญาต MCP Server ให้เข้าถึงรีโปร Github ของพวกเขาและเข้าถึงแพลตฟอร์มการจัดส่งโค้ด
ในสถานการณ์นี้ MCP Server เป็นเซิร์ฟเวอร์การอนุญาตสำหรับไคลเอนต์ MCP เนื่องจากผู้ใช้ปลายทางมีตัวตนใน MCP Server เป็นของตนเอง MCP Server เป็นลูกค้าบุคลที่สามสำหรับทรัพยากรของบุคคลที่สาม (ในกรณีนี้คือ Github) ที่ต้องการรับการอนุญาตของผู้ใช้เพื่อเข้าถึงทรัพยากรของผู้ใช้ใน Github ระหว่างไคลเอนต์ MCP และ MCP Server และระหว่าง MCP Server และทรัพยากรของบุคคลที่สาม ตัวตนของผู้ใช้จะแยกกันอยู่ นี่ทำให้มีความหมายในการรักษาความสัมพันธ์แมปปิงระหว่างโทเค็นการเข้าถึงที่ออกให้โดย MCP Server เองและโทเค็นการเข้าถึงที่ออกโดยบริการการอนุญาตบุคคลที่สามใน MCP Server