Skip to main content
Glama
README.md
# LINE Issue MCP

ระบบรับปัญหาลูกค้าจาก LINE Official Account/Group แล้วใช้ AI triage ข้อความ ตรวจ recent commits และ route/path ที่เกี่ยวข้องใน GitLab ก่อนสร้าง ClickUp task ใน List `Client Issues` อัตโนมัติ

## Flow

```text
LINE OA / Group
      │ webhook + signature
      ▼
HTTP /webhooks/line
      │
      ▼
OpenAI Responses API
  classify + priority + summarize + search terms
      │
      ▼
GitLab recent commits + commit diffs
  rank related commits + paths + routes
      │
      ▼
ClickUp / Client Issues
  task + tag + priority + GitLab evidence
```

Classification: `Bug`, `Feature Request`, `Q&A`  
Priority: `Low`, `Medium`, `High`, `Critical`

## เริ่มใช้งาน

ต้องใช้ Node.js 20 ขึ้นไป

```bash
npm install
copy .env.example .env
npm run dev
```

ตั้งค่า `.env` อย่างน้อย:

- `LINE_CHANNEL_SECRET`: จาก LINE Developers > Messaging API channel
- `OPENAI_API_KEY`: API key สำหรับ Responses API
- `GITLAB_TOKEN`: token ที่มีสิทธิ์อ่าน repository
- `GITLAB_PROJECT`: `namespace/project`
- `CLICKUP_API_TOKEN`: personal token หรือ OAuth token
- `CLICKUP_LIST_ID`: ID ของ List `Client Issues` (วิธีที่แนะนำ)

ถ้าไม่กำหนด `CLICKUP_LIST_ID` ให้กำหนด `CLICKUP_TEAM_ID`; ระบบจะค้นหา List ที่ชื่อตรงกับ `CLICKUP_LIST_NAME=Client Issues` ในทุก Space/Folder ของ Workspace

ตั้ง LINE webhook URL เป็น public HTTPS URL:

```text
https://your-domain.example/webhooks/line
```

Health check อยู่ที่ `GET /health`

## MCP tools

รัน MCP server ผ่าน stdio:

```bash
npm run mcp
```

มี 2 tools:

- `analyze_client_issue`: วิเคราะห์และค้น GitLab context แต่ยังไม่สร้าง task
- `create_client_issue`: ทำครบ flow และสร้าง ClickUp task

ตัวอย่าง config ของ MCP client:

```json
{
  "mcpServers": {
    "line-issue": {
      "command": "npm",
      "args": ["run", "mcp"],
      "cwd": "C:/absolute/path/to/line-issue-mcp"
    }
  }
}
```

## พฤติกรรมสำคัญ

- ตรวจ `x-line-signature` จาก raw request body ก่อนรับ event
- ตอบ LINE webhook ทันที แล้วประมวลผลเบื้องหลัง
- ใช้ `webhookEventId` ป้องกัน event ซ้ำใน process เดียว
- GitLab ล้มเหลวไม่ขวางการสร้าง ClickUp task; task จะระบุ warning แทน
- Q&A จะสร้าง task โดยค่าเริ่มต้น ปิดได้ด้วย `CREATE_QA_TASKS=false`
- OpenAI request ใช้ Structured Outputs และ `store: false`

## ก่อนขึ้น production

MVP นี้เก็บ event deduplication ใน memory เหมาะกับ instance เดียว สำหรับ production ควรเพิ่ม durable queue และ idempotency store (เช่น Redis/Postgres), retry/dead-letter queue, secret manager, observability และ allowlist repository/ClickUp workspace