Tu Vi Horoscope MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Tu Vi Horoscope MCP ServerGenerate Tu Vi chart for Le Van A, born 15/03/1990, 14:30, male"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tu Vi Horoscope MCP Server
This is a Model Context Protocol (MCP) server developed in Python that calculates and manages Vietnamese "Tử Vi" horoscope charts. It is optimized to output clean, structured JSON data that LLM agents can easily read, interpret, and explain to users.

English Documentation
Quick Links
Features
Horoscope Generation: Converts Solar or Lunar birth dates and times into a full Tử Vi chart (Thiên Bàn and Địa Bàn with 12 houses and over 100 stars).
High-Quality Image Rendering: Generates beautiful, print-ready chart images with element-based colored text (Green for Wood, Red for Fire, Yellow for Earth, Gray for Metal, Blue for Water), custom badge boxes for Tuần & Triệt, and geometric connecting lines highlighting the Mệnh and Thân relationship.
Vận Hạn (Transit Analysis): Computes transit stars (Lưu tinh) and maps the active 10-year period (Đại Hạn), yearly period (Tiểu Hạn), and monthly period (Nguyệt Hạn) for any target year and month (e.g., 2026).
Local Persistence: Save, retrieve, list, and delete horoscope charts from a local SQLite database (
tuvi_horoscopes.db).Flexible Hour Mapping: Automatically maps calendar hours (e.g., "14:30") or string names (e.g., "Ngọ", "Tý") to the correct Earthly Branch hour index.
Local Inlining (Independent): Includes the core
ansaotuvicalculation logic internally with custom Tuần/Triệt double-cung fixes.
Known Limitations & Assumptions
Timezone Assumption: Calculations default to the Vietnamese local timezone (GMT+7). Birth details outside this timezone must be converted beforehand.
Calendar Boundaries: The core calculations are stable for modern birth years, but traditional leap months (tháng nhuận) follow standard Vietnamese lunar calendar mappings (Hoang Nam Dia methodology) which might vary in historical or remote future years.
Calculations School (Phái): Star distributions follow standard consensus calculations. Customizable star weight/distributions (different schools like Nam Phái vs. Bắc Phái vs. custom configurations) are not supported.
Accuracy, Methodology & Tradition Disclaimer
Traditional Calculations Disclaimer: Vietnamese "Tử Vi" is a highly rich astrological methodology with various traditional schools (e.g., Nam Phái vs. Bắc Phái). Calculation parameters, star rankings, element determinations, and interpretations may differ depending on the specific lineage or school. The output generated by this tool is calculated strictly according to standard consensus computational logic and should be treated as a computational reference rather than a definitive astrological interpretation.
Installation
You can install tuvi-mcp-server directly from PyPI:
pip install tuvi-mcp-serverDevelopment & Contribution Setup
If you want to contribute to the package or run unit tests, set up a local development environment:
Create Virtual Environment:
python3 -m venv .venvInstall Package in Editable Mode:
.venv/bin/pip install --upgrade pip .venv/bin/pip install -e ".[test]"Running Tests: Verify your local setup by running the test suite:
.venv/bin/pytest
How to Run
1. Stdio Mode (Default for Claude Desktop & Cursor)
.venv/bin/tuvi-mcp2. Streamable HTTP Mode (For Remote & Cloud Deployments)
To run the server over HTTP (runs on port 1850 by default):
.venv/bin/tuvi-mcp --httpOverride host and port:
.venv/bin/tuvi-mcp --http --host 127.0.0.1 --port 1850Tool API Reference
All tools run locally inside the MCP environment. They require no external authentication or network rate limiting.
1. generate_horoscope
Generates a full Tử Vi chart from raw birth details, with optional high-quality chart image rendering.
Purpose & Comparison: Use this for on-the-fly, unsaved calculations. Use
get_saved_horoscopeto load previously saved profiles.Side Effects: If
generate_imageisTrue, renders a PNG file to a temporary location on the local filesystem and returns its path.Arguments:
name(string): Person's name (default: "Khách").day(integer): Day of birth (1-31).month(integer): Month of birth (1-12).year(integer): Year of birth.hour_val(string): Hour of birth (e.g., "14:30", "Ngọ", "Tý", or branch index1-12).gender_val(string): Gender ("Nam" or "Nữ", case-insensitive).is_solar(boolean): True for Solar, False for Lunar (default: True).current_year(integer, optional): Year to inspect transit stars/Vận Hạn for (defaults to current year).generate_image(boolean, optional): Whether to generate and return the high-quality chart image along with the chart data (default: True).
Return Value:
If
generate_imageisTrue, returns a list containing[Image, chart_data](whereImageis a FastMCP Image content block pointing to the generated PNG).If
generate_imageisFalse, returns the raw JSON dictionarychart_datadirectly. Contains keys:thien_ban(demographics, pillars, element, destiny) anddia_ban(12 houses with stars).Returns
{"error": "error_message"}if calculations fail.
2. get_van_han
Calculates yearly transit stars and active houses (major, yearly, and monthly periods) for a target period.
Purpose & Comparison: Use this tool to perform predictive transit analysis for a specific target timeframe.
Side Effects: None (read-only calculation).
Calendar Prerequisites: CRITICAL:
current_yearandcurrent_monthrepresent the Lunar year and month. If inspecting a Solar timeframe (e.g. 'October 2026'), you MUST convert it usingconvert_calendarfirst.Arguments:
name,day,month,year,hour_val,gender_val,is_solar(same as birth parameters above).current_year(integer): Target Lunar year to inspect (default: current year).current_month(integer): Target Lunar month to inspect (1-12, default: 1).
Return Value: A dictionary with keys
person_details(Can-Chi),target_period(resolved age and target),transit_stars,dai_han, andtieu_han. Returns{"error": "error_message"}if input details are invalid.
3. save_horoscope
Saves birth details to the SQLite database.
Purpose & Comparison: Saves birth details so they can be loaded later without manually entering birth details again.
Side Effects: Write operation. Inserts a new record into the SQLite database (
~/.tuvi_mcp/tuvi_horoscopes.db).Arguments:
name,day,month,year,hour_val,gender_val,is_solar,notes(string, optional).
Return Value: A dictionary
{"message": "Successfully saved...", "id": <record_id>}. Returns{"error": "error_message"}on validation/database failure.
4. list_saved_horoscopes
Lists all saved records from the database.
Purpose & Comparison: Discover saved horoscope profiles before loading/deleting them.
Side Effects: Read-only database query.
Return Value: A list of profile dictionaries containing
id,name, birth details,notes, andcreated_at. Returns a list with an error dictionary[{"error": "error_message"}]on query failures.
5. get_saved_horoscope
Retrieves a saved record and generates its chart.
Purpose & Comparison: Loads a saved profile. Useful to avoid re-entering raw parameters.
Side Effects: Read-only database query and base chart calculation.
Arguments:
horoscope_id(integer, optional): The database ID of the record.name(string, optional): The name of the record.Interaction: At least one must be provided. If both are supplied,
horoscope_idtakes precedence. If onlynameis provided, retrieves the latest matching record.
Return Value: The full horoscope chart dictionary structure (
chart_data) with database metadata added under a"metadata"key ({"id": <int>, "notes": <str>, "created_at": <timestamp>}). Returns{"error": "Horoscope record not found"}if not found.
6. delete_saved_horoscope
Deletes a record from the database.
Purpose & Comparison: Permanently removes a profile from the database.
Side Effects: Destructive write operation. Cannot be automatically undone.
Arguments:
horoscope_id(integer): The database ID of the record to delete.
Return Value: A success message dictionary
{"message": "Successfully deleted..."}. Returns{"error": "No horoscope record found with ID..."}if missing.
7. convert_calendar
Converts a date between the Solar (Dương lịch) and Lunar (Âm lịch) calendars.
Purpose & Comparison: Translate dates back and forth. Crucial for converting Solar target timeframes to Lunar periods before calling
get_van_han.Side Effects: None (mathematical calculation).
Arguments:
day(integer): Day of the date to convert.month(integer): Month of the date to convert.year(integer): Year of the date to convert.from_solar(boolean):Trueto convert Solar -> Lunar (default),Falseto convert Lunar -> Solar.lunar_leap(boolean): Only used iffrom_solarisFalse.Trueif the input lunar month is a leap month (tháng nhuận).timezone(integer): Timezone offset (default: 7 for Vietnam/ICT).
Return Value:
Converted date parameters:
day,month,yearof target calendar, plus aleapboolean (specifically indicating if the Lunar month is a leap month).Returns
{"error": "error_message"}if date arguments fail validation.
Example Tool Call & JSON Outputs
To illustrate the structured responses, here is an example of what the server outputs when calling the core tools.
1. Horoscope Generation Output Summary (generate_horoscope)
When calling generate_horoscope(name="Nguyễn Văn A", day=10, month=6, year=1995, hour_val="14:30", gender_val="Nam", is_solar=true), the server outputs a structured JSON response containing thien_ban (person information) and dia_ban (the list of 12 houses and their stars).
Response Snippet:
{
"thien_ban": {
"ten": "Nguyễn Văn A",
"gioi_tinh": "Nam",
"ngay_duong": "10/6/1995",
"ngay_am": "13/5/1995",
"gio_sinh": "Đinh Mùi",
"chi_gio_sinh": "Mùi",
"am_duong_menh": "Âm dương thuận lý",
"hanh_cuc": 5,
"ten_cuc": "Thổ ngũ Cục",
"menh_chu": "Cự môn",
"than_chu": "Thiên tướng",
"ban_menh": "SƠN ÐẦU HỎA"
},
"dia_ban": [
{
"cung_so": 1,
"cung_ten": "Mậu Tý",
"hanh_cung": "Thủy",
"cung_chu": "Phụ mẫu",
"dai_han": 115,
"tieu_han": "Tuất",
"sao": [
{
"id": 9,
"name": "Tham lang",
"element": "T",
"type": 1,
"attribute": "Hãm địa"
}
]
}
// ... 11 other cungs (houses)
]
}For the complete output, see examples/sample_horoscope_output.json.
2. Vận Hạn Analysis Output Summary (get_van_han)
When calling get_van_han(...) for a target year/month, it tracks yearly transit stars (sao lưu) and flags the active houses:
Response Snippet:
{
"person_details": {
"name": "Nguyễn Văn A",
"element": "H",
"destiny_cuc": "Thổ ngũ Cục"
},
"target_period": {
"current_year": 2026,
"current_year_can_chi": "Bính Ngọ",
"current_month_lunar": 5,
"current_age": 32
},
"transit_stars": [
{"name": "Lưu Thái Tuế", "cung_so": 7, "chi": "Ngọ"},
{"name": "Lưu Lộc Tồn", "cung_so": 9, "chi": "Thân"}
// ... other transit stars
],
"dai_han": {
"cung_so": 10,
"cung_chu": "Tử tức",
"dai_han": 35,
"transit_stars": []
},
"tieu_han": {
"cung_so": 7,
"cung_chu": "Tật ách",
"tieu_han": "Ngọ",
"transit_stars": ["Lưu Thái Tuế"]
}
}For the complete output, see examples/sample_van_han_output.json.
Client Integration Examples
Claude Desktop Configuration
Add the following to your claude_desktop_config.json file:
{
"mcpServers": {
"tuvi-horoscope": {
"command": "/path/to/TuViMCP/.venv/bin/tuvi-mcp",
"args": []
}
}
}Cursor Integration
Go to Settings -> Features -> MCP, click "+ Add New MCP Server":
Name: TuViMCP
Type: command
Command:
/path/to/TuViMCP/.venv/bin/tuvi-mcp
Máy chủ MCP Luận giải Lá số Tử Vi
Đây là máy chủ Model Context Protocol (MCP) được phát triển bằng Python, dùng để lập và quản lý lá số Tử Vi theo hệ Việt Nam. Kết quả được chuẩn hóa dưới dạng JSON sạch, có cấu trúc rõ ràng, giúp các LLM agent dễ dàng đọc, phân tích và diễn giải lại cho người dùng.

Related MCP server: BaZi (Eight Characters) Calculator
Tài liệu Tiếng Việt
Đường Dẫn Nhanh
Tính năng chính
Lập lá số Tử Vi: Hỗ trợ chuyển đổi ngày giờ sinh Dương lịch hoặc Âm lịch thành lá số Tử Vi đầy đủ, bao gồm Thiên Bàn, Địa Bàn, 12 cung và hơn 100 sao.
Vẽ lá số chất lượng cao: Xuất ảnh lá số sắc nét tỷ lệ chuẩn phù hợp in ấn, tự động tô màu chữ theo ngũ hành của sao (Mộc: Xanh lá, Hỏa: Đỏ, Thổ: Vàng cam, Kim: Xám, Thủy: Xanh dương), vẽ nhãn bao nổi bật cho cung bị Tuần/Triệt, vẽ các đường nối hình học làm nổi bật tam hợp chiếu mệnh thân.
Xem Vận Hạn: Tính toán các sao lưu động như Lưu Thái Tuế, Lưu Lộc Tồn, v.v., đồng thời xác định các cung hạn đang kích hoạt gồm Đại Hạn 10 năm, Tiểu Hạn theo năm và Nguyệt Hạn theo tháng cho bất kỳ năm/tháng cần xem nào, ví dụ năm 2026.
Lưu trữ cục bộ: Hỗ trợ lưu, truy xuất, liệt kê và xóa thông tin lá số thông qua cơ sở dữ liệu SQLite cục bộ (
tuvi_horoscopes.db).Tự động quy đổi giờ sinh: Có thể tự động chuyển đổi giờ theo đồng hồ, ví dụ
"14:30", hoặc tên giờ truyền thống, ví dụ"Ngọ","Tý", sang đúng chỉ số Địa Chi tương ứng.Tích hợp logic tính toán nội bộ: Bao gồm sẵn phần lõi tính toán từ
ansaotuvi, đồng thời bổ sung các chỉnh sửa riêng cho trường hợp Tuần/Triệt bao phủ hai cung.
Hạn chế hiện tại & Giả định
Giả định múi giờ: Mặc định tính toán theo múi giờ Việt Nam (GMT+7). Mọi thông tin giờ sinh ở múi giờ khác cần được quy đổi về GMT+7 trước khi truyền vào.
Giới hạn lịch pháp: Các phép tính toán âm dương lịch ổn định và chính xác cao với các năm sinh thời hiện đại. Thuật toán chuyển đổi lịch âm dựa trên phương pháp của Hoàng Nam Địa (HND), có thể có sai lệch nhỏ ở một số năm nhuận quá khứ xa hoặc tương lai xa.
Hệ phái an sao: Thuật toán an sao theo quy chuẩn chung phổ biến tại Việt Nam. Dự án hiện chưa hỗ trợ cấu hình tùy biến trọng số sao hoặc các cách an sao khác nhau của các hệ phái khác (như Nam phái vs Bắc phái vs tự chọn).
Tuyên bố miễn trừ trách nhiệm về Lịch pháp & Học phái
Tuyên bố về các trường phái tính toán: Tử Vi Việt Nam là một bộ môn học thuật vô cùng phong phú với nhiều trường phái truyền thống khác nhau (như Nam Phái, Bắc Phái). Các phương pháp an sao, phân định thứ hạng sao, ngũ hành bản mệnh hay luận giải có thể có sự khác biệt nhất định tùy thuộc vào từng truyền thừa hay học phái. Kết quả thu được từ công cụ này được tính toán hoàn toàn dựa trên logic đồng thuận phổ biến và chỉ nên được sử dụng như một tài liệu tham khảo tính toán khách quan, không phải là lời luận giải Tử Vi mang tính chất duy nhất hay định mệnh.
Cài đặt
Bạn có thể cài đặt trực tiếp tuvi-mcp-server từ PyPI bằng pip:
pip install tuvi-mcp-serverThiết lập môi trường phát triển & Đóng góp (Development Setup)
Nếu muốn đóng góp cho dự án hoặc chạy kiểm thử tự động, bạn có thể thiết lập môi trường phát triển cục bộ:
Tạo môi trường ảo:
python3 -m venv .venvCài đặt gói ở chế độ editable cùng các thư viện kiểm thử:
.venv/bin/pip install --upgrade pip .venv/bin/pip install -e ".[test]"Chạy kiểm thử (Unit Tests): Xác minh cài đặt bằng cách chạy bộ kiểm thử với
pytest:.venv/bin/pytest
Cách khởi chạy
1. Chế độ Stdio
Đây là chế độ mặc định, phù hợp để tích hợp với Claude Desktop và Cursor.
.venv/bin/tuvi-mcp2. Chế độ Streamable HTTP
Dùng khi muốn triển khai server qua HTTP, phù hợp cho môi trường remote hoặc cloud. Mặc định server chạy trên cổng 1850.
.venv/bin/tuvi-mcp --httpCó thể tùy chỉnh host và port như sau:
.venv/bin/tuvi-mcp --http --host 127.0.0.1 --port 1850Danh sách công cụ MCP
1. generate_horoscope
Tạo lá số Tử Vi đầy đủ từ thông tin ngày giờ sinh, hỗ trợ xuất ảnh lá số chất lượng cao.
Tham số:
name(string): Tên người xem, mặc định là"Khách".day(integer): Ngày sinh, từ 1 đến 31.month(integer): Tháng sinh, từ 1 đến 12.year(integer): Năm sinh.hour_val(string): Giờ sinh, ví dụ"14:30","Ngọ","Tý".gender_val(string): Giới tính, nhận giá trị"Nam"hoặc"Nữ".is_solar(boolean):Truenếu dùng Dương lịch,Falsenếu dùng Âm lịch. Mặc định làTrue.current_year(integer, tùy chọn): Năm cần xem vận hạn để tính sao lưu (mặc định là năm hiện tại).generate_image(boolean, tùy chọn): Có xuất và trả về ảnh lá số chất lượng cao đi kèm hay không (mặc định:True).
Đầu ra:
Nếu
generate_imagelàTrue, trả về danh sách[Image, chart_data](trong đóImagelà block chứa dữ liệu ảnh của FastMCP).Nếu
generate_imagelàFalse, trả về trực tiếp đối tượng JSONchart_data.
2. get_van_han
Tính toán sao lưu động và xác định các cung hạn đang kích hoạt, bao gồm Đại Hạn, Tiểu Hạn và Nguyệt Hạn cho tháng/năm cần xem.
Tham số:
name,day,month,year,hour_val,gender_val,is_solar: giống như tronggenerate_horoscope.current_year(integer): Năm cần xem hạn. Mặc định là năm hiện tại.current_month(integer): Tháng âm lịch cần xem hạn, từ 1 đến 12. Mặc định là 1.
3. save_horoscope
Lưu thông tin ngày giờ sinh vào cơ sở dữ liệu SQLite cục bộ.
Tham số:
name,day,month,year,hour_val,gender_val,is_solar,notes(string, tùy chọn).
4. list_saved_horoscopes
Liệt kê toàn bộ lá số đã được lưu trong cơ sở dữ liệu.
5. get_saved_horoscope
Truy xuất một bản ghi đã lưu và tạo lại lá số tương ứng.
Tham số:
horoscope_id(integer, tùy chọn)name(string, tùy chọn)
6. delete_saved_horoscope
Xóa một bản ghi lá số đã lưu khỏi cơ sở dữ liệu.
Tham số:
horoscope_id(integer): ID của lá số cần xóa.
7. convert_calendar
Chuyển đổi ngày qua lại giữa Dương lịch và Âm lịch.
Tham số:
day(integer): Ngày cần chuyển đổi.month(integer): Tháng cần chuyển đổi.year(integer): Năm cần chuyển đổi.from_solar(boolean):Trueđể chuyển đổi từ Dương lịch sang Âm lịch (mặc định), hoặcFalseđể chuyển từ Âm lịch sang Dương lịch.lunar_leap(boolean): Chỉ dùng khifrom_solarlàFalse.Truenếu tháng âm lịch đầu vào là tháng nhuận.timezone(integer): Múi giờ, mặc định là 7 (Giờ Việt Nam).
Đầu ra:
Nếu
from_solarlàTrue, trả về dictionary chứalunar_day,lunar_month,lunar_year,lunar_leap(boolean), và chuỗi ngày đã định dạngformatted.Nếu
from_solarlàFalse, trả về dictionary chứasolar_day,solar_month,solar_year, và chuỗi ngày đã định dạngformatted.
Ví dụ gọi Tool & Đầu ra JSON mẫu
Dưới đây là cấu trúc dữ liệu JSON thực tế do máy chủ MCP trả về để minh họa tính rõ ràng và gọn gàng của định dạng đầu ra.
1. Kết quả Lập Lá Số (generate_horoscope)
Khi gọi generate_horoscope(name="Nguyễn Văn A", day=10, month=6, year=1995, hour_val="14:30", gender_val="Nam", is_solar=true), đầu ra trả về đối tượng JSON gồm thông tin Thiên Bàn (thien_ban) và danh sách 12 cung Địa Bàn (dia_ban).
Đoạn trích đầu ra:
{
"thien_ban": {
"ten": "Nguyễn Văn A",
"gioi_tinh": "Nam",
"ngay_duong": "10/6/1995",
"ngay_am": "13/5/1995",
"gio_sinh": "Đinh Mùi",
"chi_gio_sinh": "Mùi",
"am_duong_menh": "Âm dương thuận lý",
"hanh_cuc": 5,
"ten_cuc": "Thổ ngũ Cục",
"menh_chu": "Cự môn",
"than_chu": "Thiên tướng",
"ban_menh": "SƠN ÐẦU HỎA"
},
"dia_ban": [
{
"cung_so": 1,
"cung_ten": "Mậu Tý",
"hanh_cung": "Thủy",
"cung_chu": "Phụ mẫu",
"dai_han": 115,
"tieu_han": "Tuất",
"sao": [
{
"id": 9,
"name": "Tham lang",
"element": "T",
"type": 1,
"attribute": "Hãm địa"
}
]
}
// ... 11 cung tiếp theo
]
}Để xem dữ liệu đầy đủ, vui lòng tham khảo file mẫu tại examples/sample_horoscope_output.json.
2. Kết quả Phân Tích Vận Hạn (get_van_han)
Khi gọi get_van_han(...) cho một năm/tháng cụ thể, hệ thống tính toán vị trí các sao lưu và đánh dấu các cung hạn đang kích hoạt:
Đoạn trích đầu ra:
{
"person_details": {
"name": "Nguyễn Văn A",
"element": "H",
"destiny_cuc": "Thổ ngũ Cục"
},
"target_period": {
"current_year": 2026,
"current_year_can_chi": "Bính Ngọ",
"current_month_lunar": 5,
"current_age": 32
},
"transit_stars": [
{"name": "Lưu Thái Tuế", "cung_so": 7, "chi": "Ngọ"},
{"name": "Lưu Lộc Tồn", "cung_so": 9, "chi": "Thân"}
// ... các lưu tinh khác
],
"dai_han": {
"cung_so": 10,
"cung_chu": "Tử tức",
"dai_han": 35,
"transit_stars": []
},
"tieu_han": {
"cung_so": 7,
"cung_chu": "Tật ách",
"tieu_han": "Ngọ",
"transit_stars": ["Lưu Thái Tuế"]
}
}Để xem dữ liệu đầy đủ, vui lòng tham khảo file mẫu tại examples/sample_van_han_output.json.
Ví dụ tích hợp với client
Cấu hình Claude Desktop
Thêm cấu hình sau vào file claude_desktop_config.json:
{
"mcpServers": {
"tuvi-horoscope": {
"command": "/path/to/TuViMCP/.venv/bin/tuvi-mcp",
"args": []
}
}
}Tích hợp với Cursor
Vào Settings -> Features -> MCP, sau đó chọn "+ Add New MCP Server":
Name: TuViMCP
Type: command
Command:
/path/to/TuViMCP/.venv/bin/tuvi-mcp
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nmhaaa3218/TuViMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server