Skip to content

Mappy MCP Server (Thiết lập mới)

Tổng quan

MụcNội dung
Trạng thái🔵 Đề xuất
Issue#13
GitLab IssueMappy #58
Phụ trách-
Ước lượng công sức (MVP)24.0 ngày-người
Ước lượng công sức (toàn Phase)khoảng 44.0 ngày-người
Stack triển khaiĐề xuất Python (FastMCP) / TypeScript (SDK chính thức) liệt kê song song

Chuyển đổi hướng tiếp cận: thay vì tích hợp AI trực tiếp vào Mappy cho các tính năng cải thiện nghiệp vụ, ta thiết lập MCP (Model Context Protocol) Server để khách hàng có thể truy cập dữ liệu và thao tác Mappy thông qua AI agent của chính họ (Claude Desktop / Claude Code / ChatGPT Pro v.v.). Nhờ vậy Mappy chỉ tập trung vào "interface dữ liệu và thao tác", không phải gánh chi phí vận hành LLM.

Nội dung đề xuất

Bối cảnh và vấn đề

  • Giới hạn của cách triển khai từng case riêng lẻ: Nếu mỗi tính năng AI (#5 phân tích đánh giá AI, #6 phân tích từ khóa thu hút AI, #7 phân tích nhóm, #8 #9 báo cáo AI) được implement riêng, Mappy sẽ phải gánh tất cả AI feature và phạm vi bảo trì sẽ phình to
  • Chi phí vận hành LLM: Khi chạy AI ở phía Mappy, toàn bộ chi phí token, theo dõi cập nhật model, bảo trì prompt đều do Mappy gánh
  • Vấn đề khả năng mở rộng: Đáp ứng từng yêu cầu phân tích khác nhau của khách bằng cách implement riêng đòi hỏi nhiều resource dev mỗi khi có yêu cầu mới
  • Không tận dụng được hợp đồng AI sẵn có của khách: Khách hàng đã có ChatGPT Pro / Claude Pro nhưng Mappy không cách nào tận dụng được năng lực đó

Giải pháp đề xuất

Thiết lập MCP Server mới để AI agent (client) của khách hàng có thể gọi các tính năng và dữ liệu của Mappy.

Đặc điểm chính:

  • Hỗ trợ kết nối remote qua Streamable HTTP + OAuth 2.1
  • Tương thích đầy đủ các MCP client chính: Claude Desktop / Claude Code / ChatGPT Connectors
  • Cung cấp toàn bộ domain của Mappy (location, post, review, ranking, insight v.v.) dưới dạng MCP tool
  • Khách hàng tự mang AI vào, Mappy không phải gánh chi phí vận hành LLM
  • Các case #5・#6 hiện có có thể được hấp thụ hoàn toàn vào MCP, có thể xem xét thu hẹp lại thành case độc lập

Phương châm phân chia (MCP vs API)

Đối tượngPhương thứcLý do
Tính năng cải thiện nghiệp vụ (cửa hàng hợp đồng B2B sử dụng)MCP ServerNgười dùng xác định rõ, xác thực và tính phí rõ ràng
Tính năng AI open/BtoC (tự động trả lời đánh giá v.v.)APITiền đề là Web trigger, rủi ro khi public MCP cho không giới hạn người

Phạm vi đối tượng (các domain bao phủ)

Domain mà MCP Server cung cấp tool. Chi tiết spec được định nghĩa riêng trong Tool Catalog.

DomainThao tác chính
LocationList / Get / Update thuộc tính
GroupList / Liên kết cửa hàng / Thao tác theo group
Menu / ServiceGet / Update
Sản phẩm (GBP products)Get / Áp dụng hàng loạt (mới triển khai)
PostList / Tạo / Lên lịch
Media (ảnh)List / Upload / Xóa
Review (đánh giá)List / Trả lời / Quản lý template
Template trả lờiCRUD
InsightGet / Tổng hợp
Xếp hạng tìm kiếmGet / Lọc theo kỳ
Từ khóa thu hútGet / Cung cấp dữ liệu phân tích
Báo cáoYêu cầu tạo / Download
Khảo sátList / Get câu trả lời
CTA / SMSList / Get log gửi
SNS liên kếtGet cài đặt / Get feed
NotificationList

Danh sách tính năng (theo Phase)

Dự kiến release theo 3 giai đoạn.

PhaseTênPhạm viTool chínhƯớc lượng công sức
Phase 1 (MVP)Auth + Read-onlyOAuth 2.1 base, 5 read tool, audit loglocation.list / location.get / review.list / ranking.list / insight.summary24.0 ngày
Phase 2Mở rộng WritePost / trả lời review / media, dry_run, idempotency, polling batchIdpost.create / review.reply / media.upload / location.update v.v.11.5 ngày
Phase 3Báo cáo・Phân tíchTạo báo cáo / cung cấp dữ liệu phân tích / tích hợp với AI reportreport.create / report.get / keyword.analyze / group.compare8.5 ngày

Quyết định scope cho Phase 1

MVP đặt mục tiêu tối thiểu là "AI khách có thể đọc trạng thái của Mappy", write tool tách sang Phase 2. Write tool yêu cầu các cơ chế an toàn như dry_run / confirm token / idempotency key, do đó trước hết thiết lập auth, audit, flow vận hành qua read-only.

Tổng quan kiến trúc

Sơ đồ tổng thể

Phân chia trách nhiệm:

ComponentVai trò
AI kháchGọi tool, diễn giải kết quả, trả lời người dùng
MCP ServerCông bố định nghĩa tool, xác thực, chuyển tiếp tới Laravel API, ghi audit
OAuth 2.1 Authz ServerXác thực client, kiểm tra scope, phát hành token
Laravel APICung cấp business logic hiện có (thêm endpoint dành cho MCP)
Mappy DBDữ liệu thực
GBP APITrung gian tới Google Business Profile
Audit Log DBGhi toàn bộ thao tác qua MCP (read/write/auth failure đều ghi)

Stack triển khai (đề xuất song song 2 phương án)

Thời điểm quyết định

Giai đoạn thiết kế đi song song cả hai phương án. Việc chốt cuối cùng stack triển khai có thể thực hiện ngay trước khi bắt đầu giai đoạn manufacturing (tức trước khi raise Issue). Architecture, tool catalog, auth, DB design đều language-independent.

Phương án A: Python (FastMCP) — đề xuất

MụcNội dung
MCP libraryFastMCP (Python 3.10+)
HTTP serverStarlette / Uvicorn (ASGI)
OAuth 2.1Authlib hoặc tự implement
ORMSQLAlchemy hoặc qua Laravel API (không truy cập DB trực tiếp)
DeployContainer (Docker), ECS Fargate hoặc EC2

Lý do đề xuất:

  • Tính năng AI report (#9) đã thiết kế bằng Python (FastAPI + Jinja2 + LangChain) — có thể đồng cư, dùng chung base
  • Component scraping cũng là Python — tận dụng được kỹ năng tích lũy trong công ty
  • Trong tương lai có thể giữ option tạo PPTX trực tiếp trong MCP (python-pptx v.v.)
  • FastMCP tự sinh định nghĩa tool từ type hint, validate input/output dễ dàng nhờ Pydantic

Phương án B: TypeScript (SDK chính thức)

MụcNội dung
MCP library@modelcontextprotocol/sdk
HTTP serverExpress / Hono / Fastify
OAuth 2.1oauth4webapi v.v.
ORMPrisma hoặc qua Laravel API
DeployContainer Node.js

Lý do xem xét chọn:

  • Dev frontend Mappy (Vue + TS) có thể implement server luôn
  • @modelcontextprotocol/sdk là SDK chính thức, hứa hẹn long-term support
  • Type system của TypeScript đảm bảo tính nhất quán với JSON Schema mạnh
  • Đã có container Node.js trong Laradock

Authentication

Auth hiện có của Mappy không thể tái sử dụng cho MCP

Kết quả kiểm tra DB cho thấy Mappy chưa cài đặt Laravel Passport (composer.json có dependency nhưng bảng oauth_* chưa được tạo). Sanctum cũng chưa cài. Thực tế chỉ chạy session-based authentication. OAuth 2.1 authz server cho MCP sẽ phải tạo mới hoàn toàn.

  • Protocol: OAuth 2.1 (bắt buộc PKCE, bỏ Implicit Flow)
  • Transport: Streamable HTTP
  • Client tương thích: ChatGPT Connectors / Claude Desktop / Claude Code
  • Thiết kế scope: Mapping 1:1 với các cột *_access_level hiện có của Mappy (xem chi tiết tại Auth & Tenancy)

Kết nối với Mappy hiện có

  • Qua Laravel API (đề xuất): Cấu trúc MCP Server → Laravel API → Mappy DB / GBP API
    • Tái sử dụng business logic, validation, kiểm tra quyền hiện có
    • Thêm endpoint dành riêng cho MCP vào Laravel
  • Cấm truy cập DB trực tiếp: Tránh duplicate logic xác định tenant và quyền

Hình ảnh kết nối

Ví dụ sử dụng từ Claude Desktop

Người dùng chỉ cần thêm cấu hình sau vào file MCP setting của Claude Desktop, Mappy sẽ sẵn sàng làm tool cho AI.

json
{
  "mcpServers": {
    "mappy": {
      "url": "https://mcp.mappy.example.com/sse",
      "transport": "streamable-http",
      "auth": {
        "type": "oauth2",
        "authorization_url": "https://mcp.mappy.example.com/oauth/authorize",
        "token_url": "https://mcp.mappy.example.com/oauth/token"
      }
    }
  }
}

Ví dụ kịch bản sử dụng:

Người dùng: "Cho tôi xem biến động xếp hạng tìm kiếm của cửa hàng Shibuya tháng trước"
Claude: (Tự động gọi tool ranking.list của MCP → Lấy dữ liệu → Tóm tắt bằng ngôn ngữ tự nhiên)
"Xếp hạng tìm kiếm trung bình của cửa hàng Shibuya tháng trước là 3.2, tăng 1.5 vị trí so với tháng trước. Đặc biệt với từ khóa 'tiệm tóc Shibuya'..."

Ví dụ sử dụng từ ChatGPT Connectors

Thêm MCP URL của Mappy vào mục "Connectors" trong cài đặt ChatGPT, hoàn tất OAuth là dùng được.

1. Cài đặt ChatGPT → Connectors → "Add custom connector"
2. URL: https://mcp.mappy.example.com/sse
3. Đăng nhập Mappy trong màn hình OAuth → Đồng ý scope
4. Sử dụng trong hội thoại ChatGPT như "Xem đánh giá của Mappy tháng trước"

Thiết kế tenancy & scope (tổng quan)

Chi tiết xem Auth & Tenancy.

Phân tầng quyền

admins.is_supervisor = 1 (quyền tối cao)
  └─ Có thể thay mặt toàn bộ mappy_users (cần giới hạn nghiêm ngặt)

admins.is_supervisor = 0 (admin thông thường)
  └─ Chỉ user phụ trách (phạm vi cookie preview_user_id)

mappy_users.user_type = 1 (MAIN_USER)
  └─ Thao tác bản thân + group dưới parent_user_id

mappy_users.user_type = 3 (MASTER_USER)
  └─ Toàn bộ group dưới parent_user_id

mappy_users.user_type = 2 (GROUP_USER)
  └─ Chỉ bản thân

Mapping scope với cột quyền của Mappy

Ví dụ scope MCPCột quyền phía Mappy
mappy:ranking:readmappy_users.search_ranking_enabled = 1
mappy:ranking:writemappy_users.search_ranking_access_level >= 2
mappy:gbp:writemappy_users.gbp_connection_settings_access_level >= 2
mappy:antitamper:readmappy_users.anti_tamper_screen_access_level >= 1
mappy:smartmeo:*mappy_users.is_smart_meo = 1
mappy:kuchikomi:settingsmappy_users.show_kuchikomi_settings_link = 1

Xác định ranh giới cửa hàng

  • User thông thường: chỉ cửa hàng có liên kết trong mappy_user_available_gbp_locations
  • Theo group: lọc qua mappy_groups + mappy_group_location (dạng số ít)
  • Admin thay mặt: thu hẹp bằng user đối tượng của cookie preview_user_id

Quan hệ với các case hiện có

Việc MCP hóa cho phép hấp thụ phần AI của các case hiện có vào MCP. Tuy nhiên phần UI / cải tạo tính năng hiện có vẫn cần độc lập với MCP.

CaseQuan hệ với MCPẢnh hưởng
#2 Mở quyền report cho main accountĐộc lậpUI kiểm soát quyền không liên quan MCP. Chia sẻ thiết kế scope
#3 Đăng ảnh hàng loạt và xóa hàng loạtTích hợp một phầnPopup xác nhận / UI xóa hàng loạt vẫn riêng. API đăng hàng loạt có thể MCP tool hóa
#5 Phân tích đánh giá AITích hợp hoàn toànCase này có thể được thay thế bằng MCP, xem xét thu hẹp thành case độc lập
#6 Phân tích AI từ khóa thu hútTích hợp hoàn toànTương tự trên
#7 Phân tích groupTích hợp một phầnLấy dữ liệu thành tool, UI / CSV vẫn riêng
#8 Thêm số liệu insight vào reportĐộc lậpCải tạo body report. Không liên quan MCP
#9 Tự động sinh AI advice cho reportTích hợp một phầnPhần sinh AI có thể thay bằng MCP, HTML template / flow màn hình vẫn riêng

Đối tượng xem xét thu hẹp

#5・#6 có thể hấp thụ hoàn toàn vào MCP, nên nếu chốt áp dụng MCP thì không cần implement riêng. #3・#7・#9 chạy song song với MCP, cần xác định ranh giới không trùng lặp trong giai đoạn thiết kế tính năng.

Ước lượng công sức (giả định có AI)

Cơ cấu

Vai tròSố ngườiPhụ trách
Thiết kế1 ngườiXác nhận yêu cầu → ra lệnh AI tạo design → review → chỉ đạo manufacture
Manufacture1 ngườiDựa Issue ra lệnh AI tạo code → code review → test → deploy

Chi tiết công sức (Phase 1 — MVP)

Cách hiểu ngày-người

"Ngày-người" = thời gian review của người. Việc thực tế (tạo design document, code) do AI làm, người chỉ tập trung review và ra chỉ thị.

Công thức: Số lần retake của AI × thời gian review (0.5 ngày/lần) = ngày-người

Ví dụ: AI retake 3 lần × 0.5 ngày/lần = 1.5 ngày-người (người dùng 1.5 ngày để review)

#Hạng mụcAI retakeReviewNgày-ngườiPhụ trách
1Xác nhận yêu cầu, tạo tài liệu design tổng thể4 lần0.5 ngày/lần2.0Thiết kế
2Thiết kế kiến trúc (chốt stack)3 lần0.5 ngày/lần1.5Thiết kế
3Thiết kế auth OAuth 2.13 lần0.5 ngày/lần1.5Thiết kế
4Thiết kế tool catalog (phạm vi MVP)3 lần0.5 ngày/lần1.5Thiết kế
5Thiết kế audit log・DB2 lần0.5 ngày/lần1.0Thiết kế
6Thiết kế hạ tầng2 lần0.5 ngày/lần1.0Thiết kế
7Implement base MCP server5 lần0.5 ngày/lần2.5Manufacture
8Implement auth OAuth 2.16 lần0.5 ngày/lần3.0Manufacture
9Implement 5 read tool6 lần0.5 ngày/lần3.0Manufacture
10Implement audit log3 lần0.5 ngày/lần1.5Manufacture
11Xây hạ tầng (AWS/container)3 lần0.5 ngày/lần1.5Manufacture
12Test kết nối (Claude Desktop / ChatGPT)3 lần0.5 ngày/lần1.5Manufacture
13Test tích hợp, điều chỉnh chất lượng3 lần0.5 ngày/lần1.5Manufacture
14Tạo manual vận hành2 lần0.5 ngày/lần1.0Thiết kế
15Deploy, kiểm tra hoạt động2 lần0.5 ngày/lần1.0Manufacture
Tổng Phase 124.0

Chi tiết công sức (Phase 2 — Mở rộng Write, ước lượng)

#Hạng mụcAI retakeReviewNgày-người
1Thiết kế cơ chế an toàn write (dry_run / idempotency / confirm token)3 lần0.5 ngày/lần1.5
2Implement write tool (5〜7 tool)6 lần0.5 ngày/lần3.0
3Implement dry_run / idempotency3 lần0.5 ngày/lần1.5
4Implement confirm token2 lần0.5 ngày/lần1.0
5Tích hợp batchId + polling (liên kết với queue Jobs hiện có)3 lần0.5 ngày/lần1.5
6Rate limit2 lần0.5 ngày/lần1.0
7Test3 lần0.5 ngày/lần1.5
8Deploy1 lần0.5 ngày/lần0.5
Tổng Phase 211.5

Chi tiết công sức (Phase 3 — Báo cáo・Phân tích, ước lượng)

#Hạng mụcAI retakeReviewNgày-người
1Thiết kế report tool3 lần0.5 ngày/lần1.5
2Implement report tool4 lần0.5 ngày/lần2.0
3Implement analytics tool (xếp hạng / từ khóa / group)4 lần0.5 ngày/lần2.0
4Tích hợp với tính năng AI report (#9)3 lần0.5 ngày/lần1.5
5Test2 lần0.5 ngày/lần1.0
6Deploy1 lần0.5 ngày/lần0.5
Tổng Phase 38.5

Điều kiện tiên quyết và ràng buộc

  • OAuth 2.1 authz server xây mới: không tái sử dụng được Passport hiện có
  • Thêm endpoint MCP vào Laravel API: tạo lớp thin gọi logic hiện có
  • Cấm truy cập DB trực tiếp: mọi data access qua Laravel API
  • Hợp đồng AI tool phía khách hàng do khách chịu: ChatGPT Pro / Claude Pro v.v.
  • Theo kịp spec MCP mới nhất: Streamable HTTP, OAuth 2.1, tool schema đang phát triển, sau release vẫn cần cập nhật liên tục
  • Tuyệt đối cấm thao tác DB trực tiếp, SQL SELECT phải xuất từng lần để user thực thi (rule vận hành)

Lịch trình (Phase 1 — MVP)

タスク担当日数6/26/36/46/56/66/76/86/96/106/116/126/136/146/156/166/176/186/196/206/216/226/236/246/256/266/276/286/29
Xác nhận yêu cầu / tài liệu thiết kế tổng thểThiết kế2d
Thiết kế kiến trúcThiết kế1.5d
Thiết kế auth OAuth 2.1Thiết kế1.5d
Thiết kế tool catalogThiết kế1.5d
Thiết kế audit log・DBThiết kế1d
Thiết kế hạ tầngThiết kế1d
Implement base MCP serverManufacture2.5d
Implement auth OAuth 2.1Manufacture3d
Implement read toolManufacture3d
Implement audit logManufacture1.5d
Xây hạ tầngManufacture1.5d
Test kết nốiManufacture1.5d
Test tích hợpManufacture1.5d
Tạo manual vận hànhThiết kế1d
Deploy / kiểm tra hoạt độngManufacture1d

Lịch Phase 2 / Phase 3

Phase 2・3 sẽ được lên kế hoạch lại sau khi release Phase 1 và phản ánh feedback vận hành. Tài liệu đề xuất này không cố định lịch cho 2 phase đó. Sau khi Phase 1 hoàn tất sẽ thực hiện ước lượng và lập lịch riêng.

Tài liệu liên quan

Chi tiết thiết kế xem các tài liệu sau: