deepnatal について
deepnatalは、占星術の利用者やエージェント向けのネイタルチャート計算エンジンで、TypeScriptライブラリとMCPサーバーを提供します。タイムゾーン、惑星位置、アセンダントを独立した方法で照合し、不一致の場合は結果を返さずエラーにします。
主な機能
- 01三系統によるチャート照合
- 02過去のタイムゾーン処理
- 03他の結果のアセンダント検証
- 04出生時刻あり・なしのチャート計算
- 05不確実性と計算対象外の報告
活用シーン
- 01出生情報からネイタルチャートを計算
- 02他の占星術ツールのアセンダントを確認
- 03過去の夏時間ルールを調べる
- 04出生時刻不明時に算出可能な情報を確認
MCP 対応
ネイタルチャート計算、アセンダント検証、過去のタイムゾーン確認のMCPツールを提供します。計算はエージェントのプロセス内で行われ、ネットワーク通信はありません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| date | string | はい | 出生地の現地出生年月日。形式:YYYY-MM-DD。 |
| time | string | はい | 出生地の現地時刻。出生記録の表記どおり、24 時間制の HH:mm で指定します。 |
| latitude | number | はい | 出生地の緯度。単位は十進法の度です。 |
| timezone | string | はい | 出生地の IANA タイムゾーン。例:Asia/Taipei。ユーザーの現在のタイムゾーンは使用しないでください。別の国での出生について尋ねられることはよくあります。 |
| longitude | number | はい | 出生地の経度(十進法)。 |
詳細
deepnatal
すべての結果を独立した3つの方法で相互検証し、検証できない場合は回答を拒否するネイタルチャートエンジンです。
TypeScript ライブラリとしても、Claude、Cursor、Codex、Cline などのエージェント向けの MCP サーバーとしても提供されます。
npx -y deepnatal-mcp
これが作られた理由
どの占星術サイトに出生図を尋ねても、答えは返ってきます。しかし、その答えを検証する方法が示されることはほとんどありません。
これは思っている以上に重要です。アセンダント、つまり上昇宮は4分ごとに約1度移動します。UTC の時刻を1時間間違えると、約半星座分ずれてしまいます。それでも結果は一見もっともらしく見えます。間違いを示すものは何もありません。
そして、1時間ずれるのは簡単です。台湾では1945~1961年と1974~1979年に夏時間が実施されていました。中国本土では1986~1991年、日本では1948~1951年に実施されていました。多くのツールは1988年の出生日時に、何の説明もなく 現在の UTC オフセットを適用し、ちょうど1時間ずれたチャートを返します。
このパッケージは、正反対の前提に基づいて作られています。検証できない結果は、結果とは呼べません。
検証の仕組み
すべてのチャートを独立した3つの経路で計算します。食い違いは平均化して解消するものではなく、エラーです。
| 層 | 主な計算方法 | 独立した検証方法 |
|---|---|---|
| タイムゾーン | 明示的な IANA ゾーン、Node ICU の歴史的な tzdata | 座標からゾーンを検索 |
| 惑星 | circular-natal-horoscope-js | astronomy-engine |
| アセンダント | 占星術ライブラリによるハウス計算 | 純粋な球面幾何学 — 黄道と東の地平線の交点。占星術ライブラリは不使用 |
実際の計算では、通常1分角未満の精度で一致します。許容範囲を超えると、チャートを返すのではなく呼び出し時にエラーが発生します。
数学的に実際の限界がある場合も、誠実に対処します。
- 緯度66°超ではプラシーダスハウスが定義されません。エンジンはホールサイン方式に切り替え、そのことを明示します。何も知らせずに意味のない結果を出すことはありません。
- 出生時刻がない場合は、アセンダント、ミッドヘブン、ハウスを理由とともに省略します。正午で代用することはありません。その日に月が星座を移動した場合(全日付のほぼ半数で起こります)、そのことも報告します。
- 夏時間への切り替えで生じる時間のギャップ、つまり現地時刻が存在しない、または2回発生する場合は、エラーを返して時刻の特定を求めます。
ご自身で検証する
「相互検証済み」と README に書いてあるだけでは、何の証明にもなりません。このテストスイートは公開済みパッケージに含まれているため、インストールしたものとまったく同じファイルに対して実行できます。
npm i deepnatal
node node_modules/deepnatal/dist/selftest.js
✅ PASS — 21/21 boundary cases + 11/11 external cross-checks
All three paths agree, and they agree with an outside source.
21件の境界ケースは、簡単なものではなく、問題を引き起こすケースを選んでいます。中国の1986~1991年の夏時間期間と、同じ年の冬の対照ケース、台湾の1979年、日本の GHQ 占領期にあたる1948~1951年、夏時間の切り替えで存在しなかった時刻、そしてプラシーダスが定義されない北極圏内の緯度が含まれます。
11件の外部チェックでは、astro-seek から取得した値と比較します。これは、内部の3つの経路が、トロピカル方式、見かけの地心位置、日付時点の真黄道という前提を共有しているためです。前提そのものが誤っていた場合、3つの経路すべてが同じ誤った答えを出す可能性があります。それを検出できるのは外部ソースだけです。
CI では、意図的に UTC 以外のシステム時刻を設定し、Node 20/22/24 でテストスイートを実行します。これにより、ホストのタイムゾーンへの意図しない依存があれば、明確に失敗します。
クイックスタート
npm install deepnatal
import { calculateNatalChart, verifyAscendant } from 'deepnatal';
const birth = {
date: '1988-07-15',
time: '14:30',
timezone: 'Asia/Shanghai', // the BIRTHPLACE's zone, never the user's current one
latitude: 31.23,
longitude: 121.47,
};
const chart = calculateNatalChart(birth);
chart.ascendant; // { sign: 'scorpio', degreeInSign: 10.37, ... }
chart.crossCheckMaxArcmin; // 0.467 — how far the two engines disagreed
他のツールの回答を検証する
このパッケージが存在する理由です。他のツールの結果を claim として渡します:
verifyAscendant(birth, 'Scorpio 23.0');
{
"computed": { "sign": "scorpio", "degreeInSign": 10.37 },
"geometric": { "sign": "scorpio", "degreeInSign": 10.37 }, // independent path
"internalAgreementArcmin": 0,
"oneHourOffsetTest": {
"minusOneHour": { "sign": "libra", "degreeInSign": 27.66 },
"plusOneHour": { "sign": "scorpio", "degreeInSign": 22.98 },
"degreesPerHour": 12.66
},
"claim": {
"verdict": "off-by-one-hour",
"likelyCause": "Measured, not guessed: the supplied value matches this engine's
ascendant for a birth instant one hour LATER than the one given..."
}
}
degreesPerHour: 12.66 に注目してください。一般的な経験則では、1時間で15°とされています。これは地球の自転速度であり、黄道に沿って移動する上昇点の速度ではありません。この2つが一致するのは赤道付近だけです。このライブラリはそれを前提とせず、チャートごとに速度を測定します。
MCP サーバー
npx -y deepnatal-mcp
Claude Desktop — claude_desktop_config.json
{
"mcpServers": {
"deepnatal": { "command": "npx", "args": ["-y", "deepnatal-mcp"] }
}
}
Cursor — .cursor/mcp.json
{
"mcpServers": {
"deepnatal": { "command": "npx", "args": ["-y", "deepnatal-mcp"] }
}
}
Claude Code
claude mcp add deepnatal -- npx -y deepnatal-mcp
ツール
| ツール | 機能 |
|---|---|
calculate_natal_chart | 10天体のサイン、度数、ハウス、逆行の有無を計算します。上昇点、中天、12のカスプも含みます。2つのエンジンの計算結果が一致しない場合、チャートを返さずエラーになります。 |
calculate_chart_without_birth_time | 出生時刻がなくても分かる情報だけを計算します。不足している情報とその理由を列挙し、月のサインが曖昧な場合はその旨を示します。 |
verify_ascendant | 純粋な幾何学計算で再計算し、他のツールの値を判定します。Virgo、處女座、12 Leo、Leo 12°34'、または経度のみの値を受け付けます。 |
inspect_historical_timezone | その日付に過去の tzdata が実際に適用した内容と、夏時間が有効だったかどうかを示します。 |
すべてエージェント自身のプロセス内でローカルに実行されます。出生データは扱う個人データの中でも特に機微な情報ですが、データがマシンの外に出ることはありません。このパッケージ内にネットワーク呼び出しは一切ありません。
エージェントに推論させるのではなく、このツールを呼び出させるのはなぜですか? 上昇星座を算出するよう言語モデルに求めると、自信に満ちた、もっともらしい誤答を返すことがあり、その誤りを後続の処理で検出できないからです。このサーバーは計算した事実と、それ自体の不確実性を返します。解釈は一切行いません。
中文說明
deepnatal 是一套會自我驗算的本命盤計算引擎——算不出來時它會拒絕回答,而不是給你一個看起來合理的答案。
上升星座每四分鐘移動約一度。時區算錯一小時,上升就偏掉大半個星座,而結果看起來完全正常,不會有任何地方提示你它是錯的。
而一小時很容易丟。台灣在 1945–1961、1974–1979 實施過夏令時間,中國大陸是 1986–1991,日本是 1948–1951。不少工具會把今天的時區偏移直接套到 1988 年的出生日期上。
三條獨立路徑同時計算,彼此不一致就報錯:
- 時區層 明確 IANA 時區 + Node ICU 歷史 tzdata,與座標反查時區交叉核對
- 行星層
circular-natal-horoscope-js×astronomy-engine兩套獨立演算法 - 上升層 純球面幾何第三條路(黃道與東方地平線交點),完全不依賴任何占星函式庫
實測吻合度在 1 角分以內。超過容許值就丟出錯誤,不回傳星盤。
verifyAscendant() 可以用來檢查任何其他工具算出的上升是否正確。它不猜原因——而是實際重算前後各一小時的上升點,如果對方的答案正好落在那裡,就能證明差異來自時區處理而非天文計算。
完整工具與說明見 deepnatal.com。
このツールで証明できないこと
限界を率直に示すことも、このツールの目的の一部です。
- 相互検証によって実装上のバグやずれを検出できます。しかし、共通の規約が正しいことまでは証明できません。3つの計算経路はすべて、トロピカル方式の黄道帯、見かけの地心位置、当日の真黄道を前提としています。
- 再現可能なチャートであっても、占星術に予測能力があることを示すものではありません。このパッケージは天体位置を計算します。意味については何も主張しません。
- ハウスシステム、黄道帯(トロピカル方式とサイデリアル方式)、天体暦、ノードの規約、丸め方の違いによって、2つのツールの結果が正当に異なることがあります。
verify_ascendantは1時間のずれをこうした違いと区別しますが、規約の違いについてどちらが正しいかを判定するものではありません。 - 出生データが間違っていれば、誤った時点のチャートが技術的には正しく計算されます。後続の処理でそれを補うことはできません。
ライセンス
MIT。再配布しやすいよう、依存関係は意図的に明確にしています:
| パッケージ | ライセンス |
|---|---|
circular-natal-horoscope-js | Unlicense(パブリックドメイン) |
astronomy-engine | MIT |
特筆すべき点として、Swiss Ephemeris(sweph/swisseph)は使用していません。デュアルライセンスの AGPL-3.0-or-later OR LGPL-3.0-or-later という表記は誤解を招きます。LGPL の選択肢を利用するには、事前にAstrodienstの商用ライセンスを購入する必要があります。購入しなければAGPLが適用され、ネットワークサービスにも及び、これに触れるすべてのものをオープンソース化する必要があります。この制約があるため、ホスト型の占星術サービスの多くは計算レイヤーをオープンなパッケージとして公開できません。このパッケージではそれが可能です。
クレジット
これはdeepnatal.comの計算レイヤーをそのまま抽出したものです。サイトではここに同梱されているものと同じコードが実行されるため、サイトで作成されたチャートはすべて、このパッケージを使ってローカルで再現できます。
イシューとプルリクエスト:github.com/breezefeng/deepnatal
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。