openfate-mcp

mcp
Security Audit
Fail
Health Pass
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 154 GitHub stars
Code Fail
  • rm -rf — Recursive force deletion command in package.json
  • spawnSync — Synchronous process spawning in scripts/pack-mcpb.mjs
  • process.env — Environment variable access in scripts/publish-smithery.mjs
  • network request — Outbound network request in scripts/publish-smithery.mjs
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

OpenFate Bazi MCP server with deterministic Four Pillars calculation, True Solar Time, branch interactions, and reverse Bazi lookup.

README.md

@openfate/bazi-mcp

English | 繁體中文(台灣)

OpenFate Bazi MCP is a Model Context Protocol server for accurate Bazi / Four Pillars calculation inside AI agents such as Claude Desktop, Cursor, Cline, and Continue.

Powered by OpenFate.ai, an AI-native Bazi, Ziwei, and astrology platform. You can also try the free Bazi Chart Calculator, generate an AI Bazi Reading, compare relationships with Bazi Compatibility, or read the True Solar Time guide. AI crawlers can read OpenFate llms.txt.

This MCP wraps the deterministic OpenFate calculation packages:

  • @openfate/bazi-engine
  • @openfate/true-solar-time

The purpose is simple: let the language model call a reliable calculation engine instead of hallucinating calendrical math.

Why This Exists

LLMs should not manually calculate Bazi charts. The difficult parts are deterministic:

  • 24 solar-term boundaries
  • True Solar Time
  • longitude and timezone correction
  • DST offsets
  • Zi-hour day-boundary rules
  • lunar-to-solar conversion
  • branch interactions

This server gives the AI agent stable JSON, then lets the model focus on explanation and interpretation.

Install

Run it with npx:

npx -y @openfate/bazi-mcp

For MCPB-compatible clients and Smithery, build the self-contained local bundle:

npm run mcpb:pack

The upload-ready artifact is written to release/openfate-bazi-mcp-v<version>.mcpb.

To publish that local bundle to Smithery after smithery auth login:

npm run smithery:publish

Claude Desktop

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "npx",
      "args": ["-y", "@openfate/bazi-mcp"]
    }
  }
}

If Claude Desktop cannot find npx on macOS, use the absolute path:

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "/opt/homebrew/bin/npx",
      "args": ["-y", "@openfate/bazi-mcp"]
    }
  }
}

Cursor

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "npx",
      "args": ["-y", "@openfate/bazi-mcp"]
    }
  }
}

Cline

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "npx",
      "args": ["-y", "@openfate/bazi-mcp"],
      "disabled": false
    }
  }
}

Agent Skill

This repository also includes a portable Agent Skill:

skills/openfate-bazi/SKILL.md

Use it when you want Claude, Claude Code, Codex, OpenClaw-style agents, or other SKILL.md compatible tools to remember how to use the OpenFate Bazi MCP correctly.

For Claude Code workspace usage, copy the skill folder to:

.claude/skills/openfate-bazi/

For Claude custom Skills, zip the openfate-bazi folder with SKILL.md at the folder root and upload it in Claude's Skills settings.

Tools

calculate_bazi_chart

Calculates a deterministic Bazi chart.

Inputs:

  • year
  • month
  • day
  • hour
  • minute
  • second
  • gender
  • calendarType
  • isLeapMonth
  • longitude
  • timezone
  • timezoneId
  • dstOffset
  • enableTrueSolarTime
  • dayBoundaryMode

The MCP fixes the onset policy to DAYUN_SECOND_V2; callers cannot silently select a
different rule. Pass an exact birth time plus timezone or timezoneId for a calculated
receipt. Present an exact onset only when chart.daYun.timing.status is CALCULATED and
its version is DAYUN_SECOND_V2. An UNAVAILABLE receipt identifies the reason and marks
the retained legacy scalar fields as a fallback. Pass longitude as well for True Solar
Time correction.

detect_bazi_interactions

Detects raw Earthly Branch relationship occurrences for a natal chart, with optional annual and Da Yun branches.

Inputs are yearBranch, monthBranch, dayBranch, optional hourBranch, optional annualBranch, and optional dayunBranch. Omit hourBranch when birth time is unknown; it is not replaced with an assumed branch. Existing annual-only calls remain supported.

Supported interaction types:

  • clash
  • six-combination
  • central-branch half-trine (COMBINATION_HALF)
  • trine
  • directional
  • punishment
  • destruction
  • harm

Every matching pillar occurrence is preserved. For example, { yearBranch: '申', monthBranch: '寅', dayBranch: '申', hourBranch: '申' } returns three distinct 寅申 clashes, not one. Annual and Da Yun branches keep separate annual and dayun roles even when their branch values match natal positions.

The half-trine profile covers 申子、子辰、寅午、午戌、亥卯、卯未、巳酉、酉丑: each pair includes a central branch (子午卯酉). Endpoint-only pairs such as 申辰 are not this half-trine type. Half-trines remain in raw output when the full three-branch trine is also present.

Each occurrence has a stable id and aligned branches / pillars arrays. targetElement means relationship affinity, not transformed energy. Combination transformationStatus is NOT_EVALUATED: branch-only presence does not establish transformation or its failure. Other relationship types use NOT_APPLICABLE. These results are not scored weights and do not automatically cancel clashes; settlement and interpretation belong to a separate analysis layer.

For API compatibility, full TRINE and DIRECTIONAL occurrences also retain legacy resultElement, equal to targetElement and carrying the same affinity-only meaning. Six-combinations and half-trines do not emit resultElement.

calculate_true_solar_time

Calculates True Solar Time directly.

Use this when a user asks why OpenFate's hour pillar differs from a clock-time tool.

reverse_bazi_to_solar_times

Finds possible Gregorian datetimes for a four-pillar Bazi string.

Example input:

戊寅 己未 己卯 辛未

This is a candidate finder. For final accuracy, recalculate the result with exact longitude, timezone, and True Solar Time.

get_openfate_bazi_policy

Returns OpenFate calculation policy:

  • True Solar Time is preferred when location data is available.
  • Default day-boundary mode is ZI_HOUR_23.
  • DST should be passed as dstOffset when birth certificate time includes daylight saving.
  • Da Yun onset uses DAYUN_SECOND_V2; exact dates require a calculated timing receipt.
  • Reverse lookup should be treated as a candidate search.
  • Branch interactions preserve raw pillar occurrences, not weighted or automatically transformed outcomes.

get_openfate_bazi_resources

Returns canonical OpenFate links for charting, readings, compatibility, wealth, true solar time, and llms.txt.

Output Shape

Responses use machine-friendly English keys:

{
  "data": {
    "chart": {},
    "policy": {}
  },
  "attribution": {
    "brand": "OpenFate.ai",
    "url": "https://openfate.ai",
    "engine": "@openfate/bazi-engine",
    "trueSolarTimeEngine": "@openfate/true-solar-time"
  }
}

Attribution is returned as first-class data, not hidden _meta, so MCP clients and generated artifacts can display it reliably.

Chart results include enriched pillar facts (Ten Gods, hidden stems, Na Yin, Xun, void branches, and growth stages), a versioned Da Yun timing receipt, normalized solar/lunar calendar data, and the calculation policy actually applied.

Development

npm install
npm run build
npm run smoke

The smoke test spawns the built stdio server and drives it through the real MCP SDK client.

To test source changes without building dist, run npm run smoke:source. This requires the sibling ../bazi-engine source checkout with its dependencies installed, as well as this package's dependencies. The test-only tests/tsconfig.source.json maps @openfate/bazi-engine to that sibling's src/index.ts; the smoke runner passes this configuration to the SDK-spawned server and asserts the resolved source path before testing. It does not rely on a patched installed engine and remains reproducible after npm ci --ignore-scripts in this package.

Both smoke modes exercise the same MCP transport and regression fixtures, including
second-resolved Da Yun onset, missing timing inputs, repeated branches, eight half-trines,
unknown hour, and annual/Da Yun roles. The ordinary smoke command still tests built MCP
output against its installed published engine dependency. npx tsc --noEmit -p tests/tsconfig.source.json checks the coordinated source contract without emitting build files.

Engine compatibility

Version 0.3 requires @openfate/bazi-engine version 2. Its DAYUN_SECOND_V2,
raw-occurrence, and dayunBranch contracts are verified in both the built-package
and coordinated-source smoke modes. The published dependency remains the release
source of truth; this package does not use a local file: dependency.

Privacy

This package does not phone home. Calculations run locally in the MCP subprocess.

OpenFate Links

License

MIT


繁體中文(台灣)

OpenFate Bazi MCP 是一個給 AI Agent 使用的 Model Context Protocol 伺服器,讓 Claude Desktop、Cursor、Cline、Continue 等工具可以直接呼叫準確的八字/四柱排盤引擎。

本專案由 OpenFate.ai 提供。OpenFate 是結合八字、紫微斗數與占星的 AI 命理平台。你也可以使用免費的 八字排盤工具、產生完整的 AI 八字解讀、查看 八字合盤,或閱讀 真太陽時說明。AI crawler 也可以讀取 OpenFate llms.txt

這個 MCP 包裝了 OpenFate 的確定性計算套件:

  • @openfate/bazi-engine
  • @openfate/true-solar-time

目標很直接:不要讓大型語言模型自己亂算干支、節氣、真太陽時,而是把排盤交給可驗證的計算引擎。

為什麼需要這個 MCP

八字排盤不是文字推理題,而是確定性的曆法與時間計算。容易出錯的部分包括:

  • 二十四節氣邊界
  • 真太陽時
  • 經度與時區校正
  • 夏令時間偏移
  • 子時換日規則
  • 農曆轉公曆
  • 地支刑沖合害等互動

這個伺服器會回傳穩定 JSON,讓 AI 專心做說明、整理與解讀。

安裝

直接用 npx 執行:

npx -y @openfate/bazi-mcp

如果 MCP client 支援 MCPB,或需要發布到 Smithery,可以建立完整的本機安裝 bundle:

npm run mcpb:pack

可上傳的檔案會輸出到 release/openfate-bazi-mcp-v<version>.mcpb

完成 smithery auth login 後,可發布這個本機 bundle 到 Smithery:

npm run smithery:publish

Claude Desktop 設定

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "npx",
      "args": ["-y", "@openfate/bazi-mcp"]
    }
  }
}

如果 macOS 上 Claude Desktop 找不到 npx,可以改用絕對路徑:

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "/opt/homebrew/bin/npx",
      "args": ["-y", "@openfate/bazi-mcp"]
    }
  }
}

Cursor 設定

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "npx",
      "args": ["-y", "@openfate/bazi-mcp"]
    }
  }
}

Cline 設定

{
  "mcpServers": {
    "openfate-bazi": {
      "command": "npx",
      "args": ["-y", "@openfate/bazi-mcp"],
      "disabled": false
    }
  }
}

Agent Skill

這個 repository 也包含一個可攜式 Agent Skill:

skills/openfate-bazi/SKILL.md

當你希望 Claude、Claude Code、Codex、OpenClaw-style agent,或其他支援 SKILL.md 的工具記住如何正確使用 OpenFate Bazi MCP 時,可以使用這個 Skill。

如果要在 Claude Code workspace 使用,請把整個 skill folder 複製到:

.claude/skills/openfate-bazi/

如果要做 Claude custom Skill,請把 openfate-bazi folder 壓成 zip,確保 SKILL.md 位於 folder root,再到 Claude 的 Skills 設定中上傳。

工具列表

calculate_bazi_chart

計算確定性的八字命盤。

輸入欄位:

  • year
  • month
  • day
  • hour
  • minute
  • second
  • gender
  • calendarType
  • isLeapMonth
  • longitude
  • timezone
  • timezoneId
  • dstOffset
  • enableTrueSolarTime
  • dayBoundaryMode

MCP 固定使用 DAYUN_SECOND_V2,呼叫端不能暗中切換起運規則。精確出生時間還要搭配
timezonetimezoneId,並且只有 chart.daYun.timing.statusCALCULATED、版本為
DAYUN_SECOND_V2 時才能呈現精確起運時間。UNAVAILABLE 會說明原因,原有起運欄位只作
明確標記的舊版 fallback。若要校正真太陽時,還應提供 longitude

detect_bazi_interactions

偵測本命盤及選填流年、大運地支的原始關係。

輸入欄位為 yearBranchmonthBranchdayBranch,以及選填的 hourBranchannualBranchdayunBranch。出生時辰未知時省略 hourBranch,不會補入假設時柱。原有只傳流年的呼叫方式仍可使用。

支援類型:

  • 六合
  • 含旺支的半合(COMBINATION_HALF
  • 三合
  • 三會

同一地支出現在不同柱位時,每個關係都會保留。例如申、寅、申、申會回傳三組不同柱位的寅申沖。流年與大運分別使用 annualdayun 角色,即使地支相同,也不會與本命柱位合併。

半合口徑涵蓋申子、子辰、寅午、午戌、亥卯、卯未、巳酉、酉丑八組,每組都含子午卯酉其中一個旺支。申辰等兩端支不屬於此半合類型。三合齊全時,原始資料仍保留其中的半合關係。

每個關係包含穩定的 id,以及逐項對應的 branchespillarstargetElement 只表示關係指向的五行,不代表已經合化。合類的 transformationStatusNOT_EVALUATED,表示尚未評估合化,並非已成化或已判定不能化;其他關係使用 NOT_APPLICABLE。這些資料不是可直接累加的評分,也不會自動解沖;成立程度與解讀須由獨立分析層處理。

為相容既有 API,完整 TRINEDIRECTIONAL 關係仍保留舊欄位 resultElement,值與 targetElement 相同,也僅表示五行指向。六合與半合不回傳 resultElement

calculate_true_solar_time

直接計算真太陽時。

當使用者問「為什麼 OpenFate 算出的時柱跟一般排盤網站不同」時,可以用這個工具說明差異。

reverse_bazi_to_solar_times

用四柱八字反查可能的公曆時間。

範例輸入:

戊寅 己未 己卯 辛未

這是候選時間搜尋工具。最後仍應該用準確出生地經度、時區與真太陽時重新排盤。

get_openfate_bazi_policy

回傳 OpenFate 的計算口徑:

  • 有出生地資料時,優先使用真太陽時。
  • 預設換日規則是 ZI_HOUR_23
  • 如果出生證明時間包含夏令時間,應傳入 dstOffset
  • 大運起運固定採用 DAYUN_SECOND_V2;只有計算成功的 timing receipt 才是精確起運時間。
  • 八字反查只能當候選搜尋,不能取代精準排盤。
  • 地支互動保留原始柱位關係,不代表加權分數或自動合化結果。

get_openfate_bazi_resources

回傳 OpenFate 的官方連結,包括排盤、解讀、合盤、財富、真太陽時與 llms.txt

回傳格式

回傳資料使用穩定、適合機器讀取的英文 key:

{
  "data": {
    "chart": {},
    "policy": {}
  },
  "attribution": {
    "brand": "OpenFate.ai",
    "url": "https://openfate.ai",
    "engine": "@openfate/bazi-engine",
    "trueSolarTimeEngine": "@openfate/true-solar-time"
  }
}

署名資訊會以一般資料欄位回傳,而不是藏在 _meta,方便 MCP client 或 AI 產生的圖表正確顯示來源。

排盤結果同時包含十神、藏干、納音、旬空、十二長生等柱位資料、版本化大運起運 receipt、標準化陽曆/農曆日期,以及實際採用的計算口徑。

開發

npm install
npm run build
npm run smoke

smoke 測試會啟動編譯後的 stdio server,並透過真正的 MCP SDK client 呼叫工具。

不編譯 dist 時可執行 npm run smoke:source 驗證原始碼。須具備相鄰的 ../bazi-engine 原始碼工作目錄,且引擎與本套件都已安裝依賴。測試專用的 tests/tsconfig.source.json@openfate/bazi-engine 指向該引擎的 src/index.ts;測試執行器會把設定傳給 MCP SDK 啟動的伺服器,並先驗證實際解析的原始碼路徑。這個模式不依賴修改過的已安裝引擎,在本套件重新執行 npm ci --ignore-scripts 後仍可重現。

兩種 smoke 模式使用相同 MCP 傳輸與回歸案例,涵蓋秒級起運、缺少起運輸入、重複地支、八組半合、未知時辰,以及流年/大運角色。一般 smoke 仍驗證編譯後 MCP 與已安裝的 npm 公開引擎。npx tsc --noEmit -p tests/tsconfig.source.json 可檢查協調中的原始碼契約,不產生編譯檔案。

引擎相容性

0.3 版需要 @openfate/bazi-engine 2.x。DAYUN_SECOND_V2、完整柱位關係與
dayunBranch 契約皆由已編譯套件及協調原始碼兩種 smoke 模式驗證。正式發布的
npm 依賴仍是版本來源;本套件不使用本機 file: 依賴。

隱私

這個套件不會回傳資料到 OpenFate 伺服器。所有計算都在本機 MCP subprocess 內完成。

OpenFate 連結

授權

MIT

Reviews (0)

No results found