About Kiotviet MCP
Kiotviet MCP is an MCP server in the IoT category: kiotviet-mcp is an MCP server built with FastMCP that connects AI agents to the KiotViet API. It securely handles multi-tenant authentication and exposes safe, structured tools for reading and writing KiotViet data.
Install
git clone https://github.com/dehuy69/kiotviet-mcpThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Ask AI
Ask AI about Kiotviet MCP
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
5 checks have not been run yet.
README
kiotviet-mcp
MCP server kết nối đến phần mềm KiotViet thông qua API. Được xây dựng bằng FastMCP, stateless - không quản lý phiên của user.
📖 English Version | Tiếng Việt
Mô tả
kiotviet-mcp là một Model Context Protocol (MCP) server cho phép AI agents (như Culi) tương tác với KiotViet Public API một cách an toàn. Server này:
- Stateless: Không quản lý phiên, không lưu trữ token
- Nhận
access_tokenvàretailertừ Culi cho mỗi request - Cung cấp các tools để truy vấn và thao tác dữ liệu KiotViet
- Đơn giản, nhẹ, không có state management
Kiến trúc
┌─────────────────────────────────────────┐
│ Culi Backend │
│ │
│ 1. User đăng nhập │
│ 2. Lấy client_id, client_secret │
│ 3. Gọi OAuth2 để lấy access_token │
│ POST https://id.kiotviet.vn/connect/token
│ 4. Truyền access_token + retailer │
│ xuống kiotviet-mcp │
└──────────────┬──────────────────────────┘
│
│ MCP Tool Call
│ (access_token, retailer, ...)
▼
┌─────────────────────────────────────────┐
│ kiotviet-mcp (Stateless) │
│ │
│ - Nhận access_token + retailer │
│ - Gọi KiotViet API │
│ - Trả về kết quả │
│ - KHÔNG lưu trữ state │
└──────────────┬──────────────────────────┘
│
│ HTTP Request
│ (Retailer header + Bearer token)
▼
┌─────────────────────────────────────────┐
│ KiotViet Public API │
└─────────────────────────────────────────┘
Cài đặt
pip install -r requirements.txt
Cấu trúc dự án
kiotviet-mcp/
├── kiotviet_mcp_server.py # FastMCP server entrypoint
├── kv_client.py # HTTP client cho KiotViet API (stateless)
├── requirements.txt # Dependencies
└── README.md # Tài liệu này
Sử dụng
Chạy MCP Server
python kiotviet_mcp_server.py
Hoặc nếu sử dụng với MCP client:
mcp-server kiotviet-mcp
Flow hoạt động
-
Culi Backend lấy
access_tokentừ KiotViet OAuth2:# Culi backend import httpx TOKEN_URL = "https://id.kiotviet.vn/connect/token" def get_access_token(client_id: str, client_secret: str) -> str: data = { "scopes": "PublicApi.Access", "grant_type": "client_credentials", "client_id": client_id, "client_secret": client_secret, } headers = {"Content-Type": "application/x-www-form-urlencoded"} resp = httpx.post(TOKEN_URL, data=data, headers=headers) resp.raise_for_status() return resp.json()["access_token"] -
Culi Backend gọi MCP tools với
access_tokenvàretailer:# Culi backend gọi MCP tool access_token = get_access_token(client_id, client_secret) retailer = "taphoaxyz" # Gọi tool qua MCP result = kv_list_products( access_token=access_token, retailer=retailer, name="áo", page_size=20 ) -
kiotviet-mcp gọi KiotViet API và trả về kết quả
Các Tools có sẵn
Product Tools
kv_list_products: Lấy danh sách sản phẩmkv_get_product: Lấy chi tiết sản phẩm
Customer Tools
kv_search_customers: Tìm kiếm khách hàngkv_get_customer: Lấy chi tiết khách hàngkv_create_customer: Tạo khách hàng mới
Order Tools
kv_list_orders: Lấy danh sách đơn hàngkv_get_order: Lấy chi tiết đơn hàngkv_create_order: Tạo đơn hàng mới
Invoice Tools
kv_list_invoices: Lấy danh sách hóa đơnkv_get_invoice: Lấy chi tiết hóa đơn
Category Tools
kv_list_categories: Lấy danh sách nhóm hàng
Branch Tools
kv_list_branches: Lấy danh sách chi nhánh
Ví dụ sử dụng
Ví dụ 1: Lấy danh sách sản phẩm
# Culi backend
access_token = get_access_token(client_id, client_secret)
retailer = "taphoaxyz"
# Gọi MCP tool
products = kv_list_products(
access_token=access_token,
retailer=retailer,
name="áo",
page_size=20
)
Ví dụ 2: Tìm khách hàng
customers = kv_search_customers(
access_token=access_token,
retailer=retailer,
contact_number="0123456789"
)
Ví dụ 3: Tạo đơn hàng
order = kv_create_order(
access_token=access_token,
retailer=retailer,
branch_id=1,
purchase_date="2024-01-15",
order_details=[
{
"productId": 123,
"quantity": 2,
"price": 100000
}
],
customer_id=456
)
Đặc điểm
✅ Stateless
- Không lưu trữ token
- Không quản lý phiên
- Mỗi request độc lập
✅ Đơn giản
- Không cần registry
- Không cần authorization
- Chỉ là proxy layer
✅ An toàn
- Token được quản lý bởi Culi backend
- MCP không lưu trữ thông tin nhạy cảm
- Mỗi request có token riêng
✅ Scalable
- Stateless → dễ scale
- Không có shared state
- Có thể chạy nhiều instances
Token Management
Token được quản lý bởi Culi Backend:
- Culi lấy token từ KiotViet OAuth2
- Token có thể được cache trong Culi (tùy chọn)
- Token được truyền xuống MCP cho mỗi request
- MCP không refresh token (Culi tự refresh nếu cần)
Resources & Prompts
Server cung cấp các resources và prompts để hướng dẫn LLM sử dụng đúng tools:
kiotviet://products_schema: Schema cho products APIkiotviet://customers_schema: Schema cho customers APIkiotviet://orders_schema: Schema cho orders APIkiotviet://invoices_schema: Schema cho invoices APIkiotviet_assistant_prompt: System prompt hướng dẫn LLM
Phát triển
Thêm tool mới
- Tạo function với decorator
@mcp.tool - Thêm parameters:
access_token: str, retailer: str - Sử dụng
_create_client(access_token, retailer)để tạo client - Gọi API thông qua client methods:
get(),post(),put(),delete() - Thêm docstring mô tả rõ ràng cho LLM
Testing
Xem hướng dẫn chi tiết trong TESTING.md để biết cách:
- Lấy access token
- Xác định retailer
- Test các tools
- Troubleshooting
Ví dụ test nhanh:
# Test với access_token và retailer
python -c "
from kiotviet_mcp_server import kv_list_products
result = kv_list_products(
access_token='your_token',
retailer='your_retailer',
page_size=10
)
print(result)
"
So sánh với kiến trúc cũ
Kiến trúc cũ (Multi-tenant với Registry)
- ❌ Phức tạp: Cần registry, authorization
- ❌ Stateful: Lưu trữ token, quản lý phiên
- ❌ Culi phải đăng ký account trước
Kiến trúc mới (Stateless)
- ✅ Đơn giản: Chỉ là proxy
- ✅ Stateless: Không lưu trữ state
- ✅ Linh hoạt: Culi tự quản lý token
License
MIT
Liên hệ
Dự án này là một phần của hệ sinh thái Culi - AI agent hỗ trợ kế toán cho hộ kinh doanh.
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.