Skip to content

Mappy MCP サーバー新設

概要

項目内容
ステータス🔵 提案中
Issue#13
GitLab IssueMappy #58
担当-
想定工数(MVP)24.0人日
想定工数(全Phase)約44.0人日
実装スタックPython (FastMCP) を推奨/TypeScript (公式SDK) も併記

業務改善系の追加機能を Mappy に直接 AI 統合する方針を転換し、MCP (Model Context Protocol) サーバー を新設する。顧客が自身の AI エージェント(Claude Desktop / Claude Code / ChatGPT Pro 等)から Mappy のデータ・操作にアクセスできるようにすることで、Mappy 側は「データと操作のインターフェース」に専念し、LLM 運用コストを抱えない構成へ移行する。

提案内容

背景・課題

  • 個別実装の限界: AI 連携機能(#5 口コミ AI、#6 流入キーワード AI、#7 グループ分析、#8 #9 レポート AI など)を 1 案件ずつ個別実装する方式では、Mappy 本体が AI 機能を抱え続けることになり、保守範囲が膨張する
  • LLM 運用コスト: Mappy 側で AI を動かす場合、トークン使用料・モデル更新追随・プロンプト保守をすべて自社負担となる
  • 拡張性の問題: 顧客ごとに異なる分析ニーズに個別対応する形では、機能要望のたびに開発リソースが必要
  • 顧客の AI 契約活用不可: 顧客が既に ChatGPT Pro / Claude Pro 等を契約していても、Mappy はその能力を活用できない

提案するソリューション

顧客の AI エージェント(クライアント)から Mappy の機能・データを呼び出せる MCP サーバーを新設する。

主な特徴:

  • Streamable HTTP + OAuth 2.1 でリモート接続対応
  • Claude Desktop / Claude Code / ChatGPT Connectors の主要 MCP クライアント全対応
  • Mappy の全ドメイン(ロケーション・投稿・口コミ・順位・インサイト等)を網羅的に MCP tool として提供
  • 顧客側で AI を持ち込めるため、Mappy 側で LLM 運用コストを負わない
  • 既存案件 #5・#6 は MCP に完全吸収可能、独立案件としては縮退検討

切り分け方針(MCP vs API)

対象機能方式理由
業務改善系(B2B 契約店舗が利用)MCP サーバー利用者が特定、認証・課金が明確
オープン/BtoC AI 機能(口コミ自動返信等)APIWeb トリガー前提、不特定多数で MCP 公開はリスク

想定スコープ(網羅対象ドメイン)

MCP サーバーで提供する tool の対象ドメインは以下の通り。詳細仕様は別途 ツールカタログ で定義する。

ドメイン主な操作
ロケーション一覧・取得・属性更新
グループ一覧・店舗紐付け・グループ別操作
メニュー / サービス取得・更新
商品(GBP products)取得・一括反映(新規実装)
投稿一覧・作成・予約
メディア(写真)一覧・アップロード・削除
口コミ一覧・返信・テンプレート管理
返信テンプレートCRUD
インサイト取得・集計
検索順位取得・期間絞り込み
流入キーワード取得・分析データ提供
レポート生成リクエスト・ダウンロード
アンケート一覧・回答取得
CTA / SMS一覧・送信ログ取得
SNS 連携設定取得・フィード取得
通知一覧取得

機能一覧(フェーズ分け)

3 段階での段階的リリースを想定する。

Phase名称範囲主な tool想定工数
Phase 1(MVP)認証 + 読取系OAuth 2.1 基盤、読取系 5 tool、監査ログlocation.list / location.get / review.list / ranking.list / insight.summary24.0 日
Phase 2書込系拡張投稿・口コミ返信・メディア、dry_run、idempotency、batchId ポーリングpost.create / review.reply / media.upload / location.update など11.5 日
Phase 3レポート・分析レポート生成・分析データ提供・AI レポート機能との統合report.create / report.get / keyword.analyze / group.compare8.5 日

Phase 1 のスコープ判断

MVP は 「顧客 AI から Mappy の状態を読み取れる」 ことを最小目標とし、書込系は Phase 2 に分離。書込系には dry_run・確認トークン・idempotency key 等の安全装置が必須となるため、まず読取系で認証・監査・運用フローを確立する。

アーキテクチャ概要

全体構成図

責務分担:

コンポーネント役割
顧客 AItool 呼び出し・結果の解釈・ユーザーへの応答
MCP Servertool 定義の公開、認証検証、Laravel API への中継、監査記録
OAuth 2.1 認可サーバークライアント認証、scope 検証、トークン発行
Laravel API既存ビジネスロジックの提供(MCP 用エンドポイントを追加)
Mappy DBデータ実体
GBP APIGoogle Business Profile への中継
監査ログ DBMCP 経由の全操作を記録(書込・読取・認可失敗を含む)

実装スタック候補(両案併記)

決定タイミング

設計フェーズは両案併記で進める。実装スタックの最終確定は**製造フェーズ着手前(Issue 起票直前)**でよい。アーキ設計・ツールカタログ・認証・DB 設計はいずれも言語非依存。

案A:Python (FastMCP) — 推奨

項目内容
MCP 実装FastMCP (Python 3.10+)
HTTP サーバーStarlette / Uvicorn (ASGI)
OAuth 2.1Authlib または独自実装
ORMSQLAlchemy または Laravel API 経由(DB 直参照しない)
デプロイコンテナ(Docker)、ECS Fargate or EC2

推奨理由:

  • 既存 AI レポート機能(#9)が Python (FastAPI + Jinja2 + LangChain) で設計済み — 同居・共通基盤の流用が可能
  • スクレイピング系コンポーネントが Python — 社内スキル蓄積を活かせる
  • 将来的に MCP 内で PPTX 生成等の選択肢を残せる(python-pptx 等)
  • FastMCP は型ヒントから自動で tool 定義を生成、Pydantic ベースで I/O バリデーションが容易

案B:TypeScript (公式 SDK)

項目内容
MCP 実装@modelcontextprotocol/sdk
HTTP サーバーExpress / Hono / Fastify
OAuth 2.1oauth4webapi など
ORMPrisma または Laravel API 経由
デプロイNode.js コンテナ

採用検討理由:

  • Mappy フロント(Vue + TS)開発者がそのままサーバー実装できる
  • @modelcontextprotocol/sdk は公式 SDK で長期サポート見込み
  • TypeScript の型システムにより JSON Schema との整合性確保が強い
  • Laradock 内に Node.js コンテナが既存

認証方式

既存 Mappy 認証は MCP に流用不可

DB 確認の結果、Mappy には Laravel Passport が導入されていないcomposer.json に依存はあるが oauth_* テーブル未作成)。Sanctum も未導入。実運用は Web セッション認証のみ。 MCP の OAuth 2.1 認可サーバーは完全新設となる。

  • プロトコル: OAuth 2.1(PKCE 必須、Implicit Flow 廃止)
  • トランスポート: Streamable HTTP
  • 対応クライアント: ChatGPT Connectors / Claude Desktop / Claude Code
  • scope 設計: Mappy 既存の *_access_level カラム群と 1:1 マッピング(詳細は 認証・テナンシ設計

既存 Mappy との接続

  • Laravel API 経由(推奨): MCP サーバー → Laravel API → Mappy DB / GBP API の構成
    • 既存ビジネスロジック・バリデーション・権限チェックを再利用
    • MCP 専用の API エンドポイントを Laravel に追加
  • DB 直参照は禁止: テナンシ判定・権限制御の重複実装を避ける

接続イメージ

Claude Desktop からの利用例

利用者は Claude Desktop の MCP 設定ファイルに以下を追加するだけで、Mappy が 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"
      }
    }
  }
}

利用シーン例:

ユーザー: 「先月の渋谷店の検索順位の推移を教えて」
Claude: (MCP の ranking.list tool を自動呼び出し → データ取得 → 自然言語で要約)
「渋谷店の先月の検索順位は平均 3.2 位で、前月比 1.5 位上昇しています。特に『美容室 渋谷』のキーワードで…」

ChatGPT Connectors からの利用例

ChatGPT 設定画面の「Connectors」に Mappy の MCP URL を追加し、OAuth 認証を完了させれば利用可能になる。

1. ChatGPT 設定 → Connectors → 「Add custom connector」
2. URL: https://mcp.mappy.example.com/sse
3. OAuth 認証画面で Mappy アカウントにログイン → スコープ承認
4. ChatGPT の会話中で「Mappy で先月の口コミを見せて」のように利用

テナンシ・スコープ設計(概要)

詳細は 認証・テナンシ設計 を参照。

権限階層

admins.is_supervisor = 1(神権限)
  └─ 全 mappy_users 代理可能(要厳格制限)

admins.is_supervisor = 0(一般 admin)
  └─ 担当ユーザーのみ(preview_user_id Cookie 範囲)

mappy_users.user_type = 1(MAIN_USER)
  └─ 自分 + parent_user_id 配下を操作

mappy_users.user_type = 3(MASTER_USER)
  └─ parent_user_id 配下全部

mappy_users.user_type = 2(GROUP_USER)
  └─ 自分のみ

scope と Mappy 権限カラムのマッピング

MCP scope 例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

店舗境界の判定

  • 通常ユーザー: mappy_user_available_gbp_locations に紐付く店舗のみ
  • グループ単位: mappy_groups + mappy_group_location(単数形)で絞り込み
  • Admin 代理: preview_user_id Cookie の対象ユーザーで上記を絞り込み

既存案件との関係

MCP サーバー化により、既存案件のうち AI 連携部分は MCP に統合できる。 ただし画面・UI・既存機能改修部分は MCP と独立して必要

案件MCP との関係影響
#2 レポート権限開放独立画面の権限制御 UI は MCP と無関係。スコープ設計を共有
#3 写真の一括投稿・削除部分統合画面の確認ポップアップ・一括削除 UI は別。一括投稿 API は MCP tool 化可
#5 口コミ AI 分析完全統合本案件は MCP で代替可能、独立案件としては縮退検討
#6 流入キーワード AI 分析完全統合本案件は MCP で代替可能、独立案件としては縮退検討
#7 グループ分析部分統合データ取得 IF は MCP tool 化、画面・CSV ダウンロードは別
#8 レポートインサイト追加独立レポート本体改修。MCP と関係ない
#9 レポート AI アドバイス部分統合AI 生成部分のみ MCP で代替可、HTML テンプレート・画面フローは別

縮退検討の対象

#5・#6 は MCP に完全吸収可能なため、MCP 採用が決まれば独立案件として実装する必要はない。 #3・#7・#9 は MCP と並行で進行するため、機能設計フェーズで重複しない切り分けを確定する必要がある。

概算工数(AI前提)

体制

役割人数担当内容
設計者1名要件確認 → AI に設計書作成指示 → レビュー → 製造へ指示
製造者1名ISSUE を元に AI に作成指示 → コードレビュー → テスト実施 → デプロイ

工数内訳(Phase 1 — MVP)

工数の考え方

「人日」は人間のレビュー時間 です。実作業(設計書・コード生成)は AI が担当し、人間は AI の成果物のレビュー・指示出しに専念します。

公式: AI リテイク回数 × レビュー時間 (0.5日/回) = 工数 (人日)

例: AIリテイク 3回 × 0.5日/回 = 1.5 人日(人が 1.5 日分レビューに費やす)

#作業項目AIリテイクレビュー工数(人日)担当
1要件確認・全体設計書作成4回0.5日/回2.0設計者
2アーキテクチャ設計(スタック確定)3回0.5日/回1.5設計者
3OAuth 2.1 認証設計3回0.5日/回1.5設計者
4ツールカタログ設計(MVP範囲)3回0.5日/回1.5設計者
5監査ログ・DB 設計2回0.5日/回1.0設計者
6インフラ設計2回0.5日/回1.0設計者
7MCP サーバー基盤実装5回0.5日/回2.5製造者
8OAuth 2.1 認証実装6回0.5日/回3.0製造者
9読取系 Tool 実装(5個)6回0.5日/回3.0製造者
10監査ログ実装3回0.5日/回1.5製造者
11インフラ構築(AWS/コンテナ)3回0.5日/回1.5製造者
12接続テスト(Claude Desktop / ChatGPT)3回0.5日/回1.5製造者
13結合テスト・品質調整3回0.5日/回1.5製造者
14運用マニュアル作成2回0.5日/回1.0設計者
15デプロイ・動作確認2回0.5日/回1.0製造者
Phase 1 合計24.0

工数内訳(Phase 2 — 書込系拡張、概算)

#作業項目AIリテイクレビュー工数(人日)
1書込安全装置設計(dry_run / idempotency / 確認トークン)3回0.5日/回1.5
2書込系 Tool 実装(5〜7 個)6回0.5日/回3.0
3dry_run / idempotency 実装3回0.5日/回1.5
4確認トークン実装2回0.5日/回1.0
5batchId + ポーリング統合(既存 Jobs キュー連携)3回0.5日/回1.5
6レート制限2回0.5日/回1.0
7テスト3回0.5日/回1.5
8デプロイ1回0.5日/回0.5
Phase 2 合計11.5

工数内訳(Phase 3 — レポート・分析、概算)

#作業項目AIリテイクレビュー工数(人日)
1レポート tool 設計3回0.5日/回1.5
2レポート tool 実装4回0.5日/回2.0
3分析系 tool 実装(順位・キーワード・グループ)4回0.5日/回2.0
4AI レポート機能(#9)との統合3回0.5日/回1.5
5テスト2回0.5日/回1.0
6デプロイ1回0.5日/回0.5
Phase 3 合計8.5

前提条件・制約

  • OAuth 2.1 認証基盤は新規構築: 既存 Passport は未稼働のため流用不可
  • Laravel API への MCP 用エンドポイント追加: 既存ロジックを呼び出す薄い層を Laravel 側に作る
  • DB 直参照は禁止: 全データアクセスは Laravel API 経由
  • 顧客側 AI ツール契約は顧客負担: ChatGPT Pro / Claude Pro 等は顧客が用意
  • MCP の最新仕様への追随: Streamable HTTP、OAuth 2.1、tool schema 仕様は進化中のため、リリース後も継続的な追随が必要
  • DB 直接操作は厳禁、SELECT 系 SQL は都度提示してユーザーが実行(運用ルール)

スケジュール(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
要件確認・全体設計書作成設計者2d
アーキテクチャ設計設計者1.5d
OAuth 2.1 認証設計設計者1.5d
ツールカタログ設計設計者1.5d
監査ログ・DB 設計設計者1d
インフラ設計設計者1d
MCP サーバー基盤実装製造者2.5d
OAuth 2.1 認証実装製造者3d
読取系 Tool 実装製造者3d
監査ログ実装製造者1.5d
インフラ構築製造者1.5d
接続テスト製造者1.5d
結合テスト製造者1.5d
運用マニュアル作成設計者1d
デプロイ・動作確認製造者1d

Phase 2 / Phase 3 のスケジュール

Phase 2・3 は Phase 1 のリリース後、運用フィードバックを反映してから着手するため、本提案書ではスケジュールを確定しない。Phase 1 完了時点で改めて見積もり・スケジュールを策定する。

関連ドキュメント

設計の詳細は以下を参照: