Skip to main content
Glama
README.md
# MCP Internal

元心建材內部 MCP 整合系統 - 雙層架構

## 架構

```
┌─────────────────────────────────────────────────────────────────┐
│  員工電腦                                                        │
│  ┌───────────┐     ┌─────────────────────────────────────────┐  │
│  │ Claude    │────▶│ Thin Client (MCP Server)                │  │
│  │ Code      │     │  - 無 API Keys                          │  │
│  └───────────┘     │  - 只有 FSUID (員工 FX-CRM ID)           │  │
│                    │  - 只做請求轉發                          │  │
│                    └──────────────┬──────────────────────────┘  │
└───────────────────────────────────│─────────────────────────────┘
                                    │ HTTPS + Bearer Token
                                    ▼
┌─────────────────────────────────────────────────────────────────┐
│  Google Cloud (asia-east1)                                      │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │ Cloud Run (mcp-internal-backend)                         │   │
│  │  1. FSUID 驗證 → 查 FX-CRM PersonnelObj                 │   │
│  │  2. 取得用戶資訊 + mcp_permission__c                    │   │
│  │  3. 權限檢查                                             │   │
│  │  4. API 呼叫 (Odoo/Shopify/GitHub)                      │   │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘
```

## 專案結構

```
mcp-internal/
├── packages/
│   ├── thin-client/        # 本地 MCP Server
│   ├── cloud-backend/      # Cloud Run 後端
│   └── shared/             # 共用型別
├── infrastructure/         # 部署腳本
└── pnpm-workspace.yaml
```

## 快速開始

### 1. 安裝依賴

```bash
pnpm install
```

### 2. 建置

```bash
pnpm build
```

### 3. 本地開發

```bash
# 設定環境變數
cp .env.example .env
# 編輯 .env 填入必要的值

# 啟動 Cloud Backend (開發模式)
cd packages/cloud-backend
pnpm dev

# 在另一個終端啟動 Thin Client
cd packages/thin-client
pnpm dev
```

## 部署

### Cloud Run Backend

```bash
# 設定 GCP Secrets (首次)
./infrastructure/setup-secrets.sh

# 部署
./infrastructure/deploy.sh
```

### Thin Client (員工設定)

```json
{
  "mcpServers": {
    "mcp-internal": {
      "command": "npx",
      "args": ["-y", "github:jameslai-sparkofy/mcp-internal#master"],
      "env": {
        "FSUID": "FSUID_xxxxx",
        "CLOUD_RUN_URL": "https://mcp-internal-backend-xxx.a.run.app"
      }
    }
  }
}
```

## 認證機制

1. 員工從 FX-CRM 取得自己的 FSUID(格式:`FSUID_xxxxx`)
2. 員工將 FSUID 設定在本地 MCP 環境變數
3. 每次請求帶上 FSUID → Cloud Run 驗證
4. Cloud Run 用 FSUID 查 FX-CRM PersonnelObj → 取得用戶資訊 + 權限

## 環境變數

### Thin Client (本地)

| 變數 | 說明 |
|------|------|
| `FSUID` | 員工 FX-CRM User ID(格式:`FSUID_xxxxx`)|
| `CLOUD_RUN_URL` | Cloud Run Backend URL |

### Cloud Run (GCP Secret Manager)

| 變數 | 說明 |
|------|------|
| `FXCRM_APP_ID` | FX-CRM App ID |
| `FXCRM_APP_SECRET` | FX-CRM App Secret |
| `FXCRM_PERMANENT_CODE` | FX-CRM Permanent Code |
| `FXCRM_CORP_ID` | FX-CRM Corp ID |
| `ODOO_URL` | Odoo URL |
| `ODOO_DB` | Odoo 資料庫名稱 |
| `ODOO_API_KEY` | Odoo API Key |
| `ODOO_USER_ID` | Odoo 用戶 ID |
| `SHOPIFY_STORE` | Shopify 商店名稱 |
| `SHOPIFY_ACCESS_TOKEN` | Shopify Access Token |
| `GITHUB_TOKEN` | GitHub Personal Access Token |
| `GITHUB_OWNER` | GitHub Owner |

## 可用工具

### Odoo
- `odoo_search` - 搜尋記錄
- `odoo_read` - 讀取記錄
- `odoo_count` - 計算記錄數
- `odoo_create` - 建立記錄 (admin/assistant)
- `odoo_update` - 更新記錄 (admin/assistant)
- `odoo_delete` - 刪除記錄 (admin/assistant)

### Shopify
- `shopify_search_products` - 搜尋產品
- `shopify_get_product` - 取得產品
- `shopify_update_product` - 更新產品 (admin/assistant)
- `shopify_update_price` - 更新價格 (admin/assistant)
- `shopify_get_locations` - 取得庫存位置

### 知識庫
- `knowledge_search` - 搜尋知識庫
- `knowledge_get_file` - 讀取檔案
- `knowledge_list_directory` - 列出目錄
- `knowledge_get_price` - 查詢價格
- `knowledge_search_spec` - 搜尋規格

## License

MIT