LINE Issue MCP
by rratchapol
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
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues