> For the complete documentation index, see [llms.txt](https://docs.clickai.vn/clickai-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clickai.vn/clickai-docs/nha-phat-trien/phat-trien-and-tich-hop-mcp-clients.md).

# Phát triển & Tích hợp MCP Clients

&#x20;

## Mục lục

·       \[Tổng quan]\(#tổng-quan)

·       \[MCP là gì?]\(#mcp-là-gì)

·       \[Loại 1: MCP App Connectors — Kết nối công cụ AI]\(#loại-1-mcp-app-connectors)

·       \[Loại 2: MCP Tables — Kết nối bảng dữ liệu]\(#loại-2-mcp-tables)

·       \[Cấu hình App thành MCP Server]\(#cấu-hình-app-thành-mcp-server)

·       \[Tích hợp với Claude Desktop]\(#tích-hợp-với-claude-desktop)

·       \[Tích hợp với Cursor]\(#tích-hợp-với-cursor)

·       \[Tích hợp với VS Code]\(#tích-hợp-với-vs-code)

·       \[Tích hợp với Windsurf]\(#tích-hợp-với-windsurf)

·       \[Tích hợp với Custom App (Python)]\(#tích-hợp-với-custom-app)

·       \[Lưu ý thực tế]\(#lưu-ý-thực-tế)

&#x20;

## Tổng quan

ClickAI cung cấp hai loại MCP Server cho phép bạn kết nối với các AI client:

┌──────────────────────────────────────────────────────────────┐\
│                    ClickAI MCP Ecosystem                     │\
├──────────────────────────────┬───────────────────────────────┤\
│                              │                               │\
│  📡 MCP App Connectors       │  📊 MCP Tables                │\
│  Kết nối công cụ AI          │  Kết nối bảng dữ liệu         │\
│                              │                               │\
│  URL: mcp.clickai.io/mcp/sse │  URL: table.clickai.io/mcp/.. │\
│  Transport: SSE              │  Transport: npx mcp-remote    │\
│  Auth: Basic + X-User-ID     │  Auth: xc-mcp-token           │\
│                              │                               │\
│  → Claude Desktop            │  → Claude Desktop             │\
│  → Cursor IDE                │  → Cursor IDE                 │\
│  → VS Code                   │  → VS Code                    │\
│  → Windsurf                  │  → Windsurf                   │\
│                              │                               │\
└──────────────────────────────┴───────────────────────────────┘

&#x20;

## MCP là gì?

MCP (Model Context Protocol) là giao thức mở chuẩn hóa cách AI applications giao tiếp với tools và services bên ngoài. Được phát triển bởi Anthropic, MCP cung cấp:

·       Chuẩn hóa — Một giao thức duy nhất cho mọi kết nối AI-to-tool

·       Bảo mật — Xác thực tích hợp, không cần expose API keys

·       Khám phá tự động — Client tự nhận biết tools có sẵn

·       Đa nền tảng — Hoạt động với mọi AI client hỗ trợ MCP

&#x20;

## Loại 1: MCP App Connectors

Kết nối AI Apps (Chatbot, Agent, Workflow) đã tạo trong ClickAI Studio với các AI client bên ngoài.

### Cấu hình MCP App Connectors

\[\
&#x20; {\
&#x20;   "name": "ClickAI MCP",\
&#x20;   "server\_identifier": "clickaimcp",\
&#x20;   "server\_url": "<https://mcp.clickai.io/mcp/sse",\\>
&#x20;   "icon": "<https://clickai.io/clickai\\_mcp\\_server.jpg",\\>
&#x20;   "icon\_type": "image",\
&#x20;   "headers": {\
&#x20;     "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;     "X-User-ID": "{user\_id}"\
&#x20;   }\
&#x20; }\
]

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Trường</td><td valign="top">Giá trị</td><td valign="top">Mô tả</td></tr><tr><td valign="top">server_url</td><td valign="top">https://mcp.clickai.io/mcp/sse</td><td valign="top">MCP endpoint (SSE transport)</td></tr><tr><td valign="top">Authorization</td><td valign="top">Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=</td><td valign="top">Basic auth credentials (cố định)</td></tr><tr><td valign="top">X-User-ID</td><td valign="top">{user_id}</td><td valign="top">User ID của bạn trên ClickAI</td></tr></tbody></table>

&#x20;

💡 TIP: Thay \`{user\_id}\` bằng User ID thực tế. Lấy User ID trong \*\*Settings\*\* → \*\*Account\*\* trên ClickAI Studio.

### Khi nào dùng?

·       Muốn gọi đến Chatbot / Agent / Workflow đã tạo trong ClickAI

·       Tích hợp khả năng AI vào Cursor, Claude Desktop, VS Code

·       Cho phép AI client sử dụng tools từ 300+ App Integrations

&#x20;

## Loại 2: MCP Tables

Kết nối Tables (bảng quản trị dữ liệu NocoDB) với AI client — cho phép AI đọc, ghi, truy vấn dữ liệu trực tiếp.

### Cấu hình MCP Tables

{\
&#x20; "mcpServers": {\
&#x20;   "NocoDB Base - CRM AI & Academy": {\
&#x20;     "command": "npx",\
&#x20;     "args": \[\
&#x20;       "mcp-remote",\
&#x20;       "<https://table.clickai.io/mcp/{base\\_id}",\\>
&#x20;       "--header",\
&#x20;       "xc-mcp-token: \<YOUR\_MCP\_TOKEN>"\
&#x20;     ]\
&#x20;   }\
&#x20; }\
}

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Trường</td><td valign="top">Mô tả</td></tr><tr><td valign="top">command</td><td valign="top">npx — chạy trực tiếp qua Node.js</td></tr><tr><td valign="top">mcp-remote</td><td valign="top">Package bridge cho MCP qua HTTP</td></tr><tr><td valign="top">https://table.clickai.io/mcp/{base_id}</td><td valign="top">URL của base cụ thể trên Tables</td></tr><tr><td valign="top">xc-mcp-token</td><td valign="top">Token xác thực MCP cho Tables</td></tr></tbody></table>

&#x20;

### Lấy thông tin kết nối

1\.     Mở ClickAI Tables tại <https://table.clickai.io>

2\.     Chọn Base cần kết nối (VD: CRM AI & Academy)

3\.     Vào Settings → MCP → Copy MCP URL và MCP Token

4\.     Thay {base\_id} và \<YOUR\_MCP\_TOKEN> trong config

### Khi nào dùng?

·       Cho AI đọc/ghi dữ liệu khách hàng, đơn hàng, sản phẩm

·       Query dữ liệu CRM trực tiếp từ Claude Desktop / Cursor

·       Tự động phân tích, báo cáo dữ liệu từ Tables

### Ví dụ cấu hình nhiều Tables base

{\
&#x20; "mcpServers": {\
&#x20;   "CRM Database": {\
&#x20;     "command": "npx",\
&#x20;     "args": \[\
&#x20;       "mcp-remote",\
&#x20;       "<https://table.clickai.io/mcp/nc\\_crm\\_base\\_id",\\>
&#x20;       "--header",\
&#x20;       "xc-mcp-token: token\_crm\_xxx"\
&#x20;     ]\
&#x20;   },\
&#x20;   "Product Catalog": {\
&#x20;     "command": "npx",\
&#x20;     "args": \[\
&#x20;       "mcp-remote",\
&#x20;       "<https://table.clickai.io/mcp/nc\\_product\\_base\\_id",\\>
&#x20;       "--header",\
&#x20;       "xc-mcp-token: token\_product\_xxx"\
&#x20;     ]\
&#x20;   }\
&#x20; }\
}

📝 NOTE: MCP Tables yêu cầu \*\*Node.js\*\* đã cài đặt trên máy. Package \`mcp-remote\` sẽ được tự động tải qua \`npx\`.

&#x20;

## Cấu hình App thành MCP Server

### Bước 1: Mở Publish Settings

5\.     Mở ứng dụng trong ClickAI Studio

6\.     Nhấn "Publish" ở góc phải trên

7\.     Chọn tab "MCP Server"

### Bước 2: Bật MCP Server

8\.     Toggle "Enable MCP Server" → ON

9\.     Cấu hình thông tin server:

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Trường</td><td valign="top">Mô tả</td><td valign="top">Ví dụ</td></tr><tr><td valign="top">Server Name</td><td valign="top">Tên hiển thị trong client</td><td valign="top">ClickAI Customer Support</td></tr><tr><td valign="top">Description</td><td valign="top">Mô tả chi tiết cho AI hiểu khi nào nên gọi tool này</td><td valign="top">Hệ thống hỗ trợ khách hàng AI — trả lời câu hỏi về sản phẩm, bảo hành và kỹ thuật</td></tr><tr><td valign="top">Tool Name</td><td valign="top">Tên tool khi client gọi</td><td valign="top">customer_support_query</td></tr><tr><td valign="top">Input Parameters</td><td valign="top">Mô tả các tham số đầu vào</td><td valign="top">Xem bảng dưới</td></tr></tbody></table>

&#x20;

### Bước 3: Cấu hình Input Parameters

Mỗi input parameter cần mô tả rõ ràng:

{\
&#x20; "query": {\
&#x20;   "type": "string",\
&#x20;   "description": "Câu hỏi của khách hàng cần được giải đáp. Có thể về sản phẩm, dịch vụ, bảo hành, hoặc hỗ trợ kỹ thuật.",\
&#x20;   "required": true\
&#x20; },\
&#x20; "language": {\
&#x20;   "type": "string",\
&#x20;   "description": "Ngôn ngữ phản hồi: 'vi' (Tiếng Việt) hoặc 'en' (English). Mặc định: 'vi'",\
&#x20;   "required": false,\
&#x20;   "default": "vi"\
&#x20; }\
}

### Bước 4: Publish

10\.  Nhấn "Publish"

11\.  Copy MCP Server URL được tạo

Cấu hình MCP Server của ClickAI:

{\
&#x20; "name": "ClickAI MCP",\
&#x20; "server\_identifier": "clickaimcp",\
&#x20; "server\_url": "<https://mcp.clickai.io/mcp/sse",\\>
&#x20; "icon": "<https://clickai.io/clickai\\_mcp\\_server.jpg",\\>
&#x20; "icon\_type": "image",\
&#x20; "headers": {\
&#x20;   "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;   "X-User-ID": "{user\_id}"\
&#x20; }\
}

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Trường</td><td valign="top">Giá trị</td><td valign="top">Mô tả</td></tr><tr><td valign="top">server_url</td><td valign="top">https://mcp.clickai.io/mcp/sse</td><td valign="top">MCP endpoint (SSE transport)</td></tr><tr><td valign="top">Authorization</td><td valign="top">Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=</td><td valign="top">Basic auth credentials (cố định)</td></tr><tr><td valign="top">X-User-ID</td><td valign="top">{user_id}</td><td valign="top">User ID của bạn trên ClickAI</td></tr></tbody></table>

&#x20;

⚠️ IMPORTANT: \*\*Thay \`{user\_id}\`\*\* bằng User ID thực tế của bạn. Bạn có thể lấy User ID trong \*\*Settings\*\* → \*\*Account\*\* trên ClickAI Studio.

\>&#x20;

*\*\*Viết description hiệu quả:\*\* Hãy nghĩ từ góc nhìn AI khi viết description. Mô tả rõ ràng, cụ thể giúp AI client biết chính xác khi nào nên gọi tool của bạn.*

&#x20;

## Tích hợp với Claude Desktop

### Cấu hình

12\.  Mở Claude Desktop

13\.  Vào Settings → Developer → Edit Config

14\.  Thêm server vào file config:

{\
&#x20; "mcpServers": {\
&#x20;   "clickai-mcp": {\
&#x20;     "url": "<https://mcp.clickai.io/mcp/sse",\\>
&#x20;     "headers": {\
&#x20;       "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;       "X-User-ID": "\<YOUR\_USER\_ID>"\
&#x20;     }\
&#x20;   }\
&#x20; }\
}

15\.  Restart Claude Desktop

### Sử dụng

Sau khi cấu hình, Claude sẽ tự nhận biết tool và sử dụng khi phù hợp:

User: Tôi muốn hỏi về chính sách bảo hành laptop XYZ\
\
Claude: Để tôi tra cứu thông tin cho bạn...\
\[Calling clickai-support tool]\
Dựa trên thông tin từ hệ thống, sản phẩm laptop XYZ\
có chính sách bảo hành 24 tháng...

&#x20;

## Tích hợp với Cursor

### Cấu hình

16\.  Mở project trong Cursor IDE

17\.  Tạo file .cursor/mcp.json trong thư mục gốc project:

{\
&#x20; "mcpServers": {\
&#x20;   "clickai-mcp": {\
&#x20;     "url": "<https://mcp.clickai.io/mcp/sse",\\>
&#x20;     "headers": {\
&#x20;       "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;       "X-User-ID": "\<YOUR\_USER\_ID>"\
&#x20;     }\
&#x20;   }\
&#x20; }\
}

18\.  Restart Cursor

### Multi-server Configuration

Kết nối nhiều ClickAI apps cùng lúc:

{\
&#x20; "mcpServers": {\
&#x20;   "clickai-mcp": {\
&#x20;     "url": "<https://mcp.clickai.io/mcp/sse",\\>
&#x20;     "headers": {\
&#x20;       "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;       "X-User-ID": "\<YOUR\_USER\_ID>"\
&#x20;     }\
&#x20;   }\
&#x20; }\
}

&#x20;

## Tích hợp với VS Code

### Cấu hình

19\.  Mở VS Code → Cmd + Shift + P → "Preferences: Open User Settings (JSON)"

20\.  Thêm cấu hình:

{\
&#x20; "mcp.servers": {\
&#x20;   "clickai-mcp": {\
&#x20;     "url": "<https://mcp.clickai.io/mcp/sse",\\>
&#x20;     "headers": {\
&#x20;       "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;       "X-User-ID": "\<YOUR\_USER\_ID>"\
&#x20;     }\
&#x20;   }\
&#x20; }\
}

21\.  Trong Copilot Chat, sử dụng: @clickai-assistant hãy giải thích đoạn code này

&#x20;

## Tích hợp với Windsurf

### Cấu hình

22\.  Mở Windsurf → Settings → MCP

23\.  Thêm server configuration:

{\
&#x20; "mcpServers": {\
&#x20;   "clickai-mcp": {\
&#x20;     "url": "<https://mcp.clickai.io/mcp/sse",\\>
&#x20;     "headers": {\
&#x20;       "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;       "X-User-ID": "\<YOUR\_USER\_ID>"\
&#x20;     }\
&#x20;   }\
&#x20; }\
}

&#x20;

## Tích hợp với Custom App

### Python — MCP SDK

import asyncio\
from mcp import ClientSession\
from mcp.client.sse import sse\_client\
\
MCP\_URL = "<https://mcp.clickai.io/mcp/sse"\\>
HEADERS = {\
&#x20;   "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20;   "X-User-ID": "\<YOUR\_USER\_ID>"\
}\
\
async def main():\
&#x20;   \# Kết nối đến ClickAI MCP Server (SSE transport)\
&#x20;   async with sse\_client(MCP\_URL, headers=HEADERS) as (read, write):\
&#x20;       async with ClientSession(read, write) as session:\
&#x20;           \# Khởi tạo session\
&#x20;           await session.initialize()\
\
&#x20;           \# Liệt kê tools có sẵn\
&#x20;           tools = await session.list\_tools()\
&#x20;           print("📋 Available tools:")\
&#x20;           for tool in tools.tools:\
&#x20;               print(f"  - {tool.name}: {tool.description}")\
\
&#x20;           \# Gọi tool\
&#x20;           result = await session.call\_tool(\
&#x20;               "customer\_support\_query",\
&#x20;               arguments={\
&#x20;                   "query": "Chính sách bảo hành sản phẩm ABC?"\
&#x20;               }\
&#x20;           )\
&#x20;           print(f"\n🤖 Response: {result.content}")\
\
asyncio.run(main())

### Node.js — MCP SDK

import { Client } from "@modelcontextprotocol/sdk/client/index.js";\
import { SSEClientTransport } from\
&#x20; "@modelcontextprotocol/sdk/client/sse.js";\
\
const MCP\_URL = "<https://mcp.clickai.io/mcp/sse";\\>
const HEADERS = {\
&#x20; "Authorization": "Basic ZGlmeS1jbGllbnQ6ZGlmeS1zZWNyZXQ=",\
&#x20; "X-User-ID": "\<YOUR\_USER\_ID>"\
};\
\
async function main() {\
&#x20; const transport = new SSEClientTransport(\
&#x20;   new URL(MCP\_URL),\
&#x20;   { requestInit: { headers: HEADERS } }\
&#x20; );\
&#x20; const client = new Client({ name: "my-app", version: "1.0.0" });\
\
&#x20; await client.connect(transport);\
\
&#x20; // List tools\
&#x20; const tools = await client.listTools();\
&#x20; console.log("Tools:", tools);\
\
&#x20; // Call tool\
&#x20; const result = await client.callTool({\
&#x20;   name: "customer\_support\_query",\
&#x20;   arguments: { query: "Warranty policy?" }\
&#x20; });\
&#x20; console.log("Result:", result);\
}\
\
main();

&#x20;

## So sánh hai loại MCP

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"> </td><td valign="top">MCP App Connectors</td><td valign="top">MCP Tables</td></tr><tr><td valign="top">Mục đích</td><td valign="top">Kết nối AI Apps (Agent/Workflow)</td><td valign="top">Kết nối bảng dữ liệu</td></tr><tr><td valign="top">Server URL</td><td valign="top">mcp.clickai.io/mcp/sse</td><td valign="top">table.clickai.io/mcp/{base_id}</td></tr><tr><td valign="top">Transport</td><td valign="top">SSE (Server-Sent Events)</td><td valign="top">npx mcp-remote (HTTP bridge)</td></tr><tr><td valign="top">Auth</td><td valign="top">Basic Auth + X-User-ID</td><td valign="top">xc-mcp-token</td></tr><tr><td valign="top">Yêu cầu</td><td valign="top">Không cần cài đặt thêm</td><td valign="top">Cần Node.js</td></tr><tr><td valign="top">Use case</td><td valign="top">Gọi AI tools, chatbot, workflow</td><td valign="top">Đọc/ghi database, CRM, báo cáo</td></tr></tbody></table>

&#x20;

&#x20;

## Lưu ý thực tế

### 📝 Descriptiveness — Mô tả tốt = AI gọi đúng

Mô tả tool và parameters quyết định AI client có gọi đúng tool hay không:

❌ Kém:\
&#x20; Description: "Xử lý dữ liệu"\
&#x20; Input: "data" — "Dữ liệu đầu vào"\
\
✅ Tốt:\
&#x20; Description: "Hệ thống hỗ trợ khách hàng AI cho sản phẩm công nghệ.\
&#x20; Trả lời câu hỏi về: thông số kỹ thuật, giá, bảo hành,\
&#x20; hướng dẫn sử dụng, và khắc phục sự cố."\
&#x20; Input: "query" — "Câu hỏi cụ thể của khách hàng cần giải đáp,\
&#x20; bao gồm tên sản phẩm và vấn đề gặp phải"

### ⏱️ Latency — Hiệu suất quan trọng

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top">Thời gian xử lý</td><td valign="top">Trải nghiệm</td><td valign="top">Khuyến nghị</td></tr><tr><td valign="top">&#x3C; 3 giây</td><td valign="top">✅ Tuyệt vời</td><td valign="top">Lý tưởng cho interactive use</td></tr><tr><td valign="top">3-10 giây</td><td valign="top">⚠️ Chấp nhận được</td><td valign="top">Thêm progress indicators</td></tr><tr><td valign="top">10-30 giây</td><td valign="top">❌ Chậm</td><td valign="top">Chia nhỏ workflow</td></tr><tr><td valign="top">> 30 giây</td><td valign="top">🚫 Quá chậm</td><td valign="top">Redesign approach</td></tr></tbody></table>

&#x20;

### 🔐 Security

·       Không chia sẻ xc-mcp-token hoặc X-User-ID công khai

·       Sử dụng token riêng cho từng môi trường (dev/staging/production)

·       Rotate token định kỳ nếu nghi ngờ bị lộ

·       Monitor access logs để phát hiện sử dụng bất thường

&#x20;

*📖 Xem thêm: \[API Reference]\(./01-api-reference.md) · \[Build]\(../01-build.md) · \[Tables]\(../tables/01-overview\.md)*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clickai.vn/clickai-docs/nha-phat-trien/phat-trien-and-tich-hop-mcp-clients.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
