mcpField
S
stellara-mcp

stellara-mcp

远程服务
stellara.natlex.it游戏娱乐06 周前更新

关于 stellara-mcp

stellara-mcp 是一款开源 MCP 服务,使用 Swiss Ephemeris 为 AI Agent 提供确定性的占星计算。它返回图表数据供 Agent 解读,本身不生成解读。

主要功能

  1. 01出生地点与时区解析
  2. 02包含宫位和相位的本命盘
  3. 03行运位置及本命相位
  4. 04合盘相位与宫位叠加
  5. 05引导式出生资料提示词

适用场景

  1. 01解析出生地及历史 UTC 时差
  2. 02根据出生资料计算本命盘
  3. 03检查行运与本命盘的关系
  4. 04比较两张星盘的合盘信息

MCP 相关

它向 MCP 客户端提供四种计算工具和两个提示词。客户端可连接托管 URL,也可使用 API 密钥在本地运行软件包。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.stellara.natlex.it/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npmstellara-mcp0.2.2

工具

详细介绍

Stellara MCP:面向 AI Agent 的确定性 Swiss Ephemeris(Hermes、Claude、Grok)

为你的 AI Agent 配备真正的天文计算器。 stellara-mcp 是一个轻量级的开源 Model Context Protocol 服务,可将任何支持 MCP 的 Agent——Claude.ai / Claude Desktop / Claude Code、ChatGPT、Codex、Cursor、Windsurf、Gemini CLI、Grok、Hermes——变成一位绝不虚构行星位置的占星师。通过 URL 连接(无需安装),或使用 API 密钥在本地运行此软件包。

它提供四种由 Swiss Ephemeris(专业占星师使用的同一套引擎)驱动的工具,在 Stellara 云端运行:

工具返回内容(精确 JSON)
resolve_birth_place“Warsaw, 14:30” → 纬度 / 经度、IANA 时区,以及带时区信息的 birth_datetime,并包含历史上正确的 UTC 偏移量(旧版夏令时规则、法令时间),还有年龄和夏令时歧义标志——让 Agent 无需猜测坐标或偏移量
calculate_natal_chart14 个点(太阳 → 冥王星、凯龙星、莉莉丝、北交点 / 南交点),包含星座、度数、绝对经度、宫位、逆行状态、速度、赤纬 · 12 个宫位宫头 · 上升点 / 中天 / 下降点 / 天底 · 所有主要相位及其精确容许度和渐入 / 渐出状态
get_transits_and_aspects任意时刻的行运位置 · 每个行运行星与本命盘之间的相位(包括行星和轴点),包含容许度和渐入 / 渐出状态 · 每颗行运行星所处的本命宫位
calculate_synastry两个人之间的所有跨盘相位及精确容许度 · 宫位叠加(A 的行星落入 B 的宫位,反之亦然)

此外还有两个 MCP 提示词:collect_birth_profile,用于引导收集每次解读所需的数据(日期 → 时间及其确定性 → 地点 → 可选的城市、姓名、性别 → 显示年龄的确认卡片);以及 astrologer_system_prompt,用于让 Agent 采用严谨的专业占星师风格来解读这些 JSON 数据。

此服务不进行解读,也不会调用任何大模型。它是一个代理适配器:输入数字,输出数字。由你的 Agent 进行解读;由 Swiss Ephemeris 完成计算。


为什么要做这个项目:大模型会编造本命盘数据

问一个语言模型“1990 年 5 月 17 日 14:30 在 Warsaw 时,我的月亮在哪里?”,它会自信地回答——但更多时候,答案是错的。黄道经度、宫位宫头和相位容许度,都是行星运动数值积分与当地地平线球面三角计算的结果。这不是靠预测下一个词就能在脑中完成的事。常见的错误模式包括:

  • 月亮(每天移动 13°)落在了错误的星座;
  • 根据太阳星座猜测上升点,忽略了时间和纬度;
  • 虚构宫位宫头,或悄悄假定采用等宫制;
  • 声称“土星刑太阳”,却没有给出容许度,或者给出的容许度根本不成立;
  • 编造逆行状态。

这些错误中的任何一个,都会污染后续的整个解读。建立在错误上升点之上的解读,无论文笔多么优美,都毫无价值。

stellara-mcp 从根本上解决了这个问题。Agent 调用工具;工具返回 Swiss Ephemeris 级别的行星位置(精度达到角秒以下、热带黄道、十种宫位制、精确容许度,以及根据真实行星速度推导的渐入 / 渐出状态);Agent 只根据这些数据进行解读。感知由确定性数据提供,计算器也是确定性的——让语言模型专注于它真正擅长的事。


快速开始(1 次点击即可配置)

有两种连接方式:

  • 远程连接,无需安装(Claude.ai、Claude Desktop、Claude Code、ChatGPT 连接器、 Grok,以及任何支持 MCP URL 的客户端):添加自定义连接器,URL 为 https://mcp.stellara.natlex.it/mcp,然后使用你的 Stellara 账号登录 (与 Stellara 应用使用同一个账号;Free = 每天 10 次请求,Stellara Pro = 5 000 次)。 Claude:设置 → 连接器 → 添加自定义连接器 → 粘贴 URL → 连接 → 登录。 Claude Code:claude mcp add --transport http stellara https://mcp.stellara.natlex.it/mcp, 然后运行 /mcp 登录。无需安装或配置;令牌有效期较短,可在应用中撤销。
  • 本地软件包 + API 密钥(如下):适用于服务、脚本、Cursor / Windsurf / Codex,以及 偏好使用密钥的用户。在 stellara.natlex.it/#api 获取密钥——Free(每天 5 次请求)或 Stellara API Pro(每天 5 000 次,$9 / 月),密钥将在一分钟内通过电子邮件发送。然后 选择你的客户端。

该软件包需要 Node.js ≥ 18.17,并通过 npx 启动,因此无需全局安装。以下所有配置都只有三行:命令、参数、环境变量。

Claude Desktop

编辑 claude_desktop_config.json (macOS:~/Library/Application Support/Claude/,Windows:%APPDATA%\Claude\):

{
  "mcpServers": {
    "stellara": {
      "command": "npx",
      "args": ["-y", "stellara-mcp"],
      "env": {
        "STELLARA_API_KEY": "sk_stellara_your_key_here"
      }
    }
  }
}

重启 Claude Desktop。三个工具会显示在 🔌 图标下;astrologer_system_prompt 提示词会显示在提示词(+)菜单中。

Hermes Agent Desktop

将相同代码块添加到 ~/.hermes/config.json:

{
  "mcpServers": {
    "stellara": {
      "command": "npx",
      "args": ["-y", "stellara-mcp"],
      "env": {
        "STELLARA_API_KEY": "sk_stellara_your_key_here"
      }
    }
  }
}

Hermes 会在下次启动时发现这些工具。如果你的 Hermes 版本使用了不同的顶层键来配置 MCP 服务,请保持 command / args / env 三元组不变——这是标准的 stdio 启动规范。

Cursor / Windsurf

Cursor:设置 → MCP → 添加新的全局 MCP 服务(或在项目中编辑 .cursor/mcp.json)。Windsurf:设置 → Cascade → MCP 服务(或编辑 ~/.codeium/windsurf/mcp_config.json)。两者使用完全相同的 JSON:

{
  "mcpServers": {
    "stellara": {
      "command": "npx",
      "args": ["-y", "stellara-mcp"],
      "env": {
        "STELLARA_API_KEY": "sk_stellara_your_key_here"
      }
    }
  }
}
其他任何 MCP 客户端(Grok 桥接工具、Continue、Zed、自定义 Agent)

将 npx -y stellara-mcp 作为 stdio 服务启动,并设置环境变量 STELLARA_API_KEY。这就是全部的集成方式。

从本地克隆开始(用于开发)
git clone https://github.com/mihnin/stellara-mcp.git
cd stellara-mcp
npm install && npm run build

然后在上述任意配置中使用 "command": "node", "args": ["/absolute/path/to/stellara-mcp/dist/index.js"]。


对话示例

用户: 帮我排出本命星盘——我出生于 1990 年 5 月 17 日 14:30,地点是华沙—— 再告诉我为什么今天工作感觉这么沉重。

Agent (加载 astrologer_system_prompt,询问 14:30 是准确时间还是大概时间,调用 resolve_birth_place("Warsaw, Poland", "1990-05-17T14:30") → 52.23 / 21.01、Europe/Warsaw、1990-05-17T14:30:00+02:00,然后用这些值调用 calculate_natal_chart,再调用今天的 get_transits_and_aspects)

你的星盘基于 Swiss Ephemeris 的位置数据生成,我们先看看实际数据。太阳位于金牛座 26°14',在第 9 宫;月亮位于摩羯座 3°52',在第 4 宫;上升点位于处女座 8°41'。本命盘中容许度最小的相位是土星合海王星(容许度 0.6°),位于你的第 5 宫——这代表你在创作工作中,一生都面临着结构与漂移之间的张力。

今天为何感觉沉重:行运土星正与本命太阳成刑相,容许度为 1.2°,而且它正在趋近,所以压力仍在加大,大约两周后才会精确成相。土星与太阳成刑相时,感觉就像背着一包责任——产出没问题,但做什么都更费劲。与此同时,行运火星正经过你代表日常工作的本命第 6 宫 (水瓶座),并与本命水星合相,容许度为 0.4°:思维敏捷、容易烦躁,也容易和工具及同事争论。

实用解读:这段时间适合“收尾,不要开新项目”。完成两项有截止日期的任务,把头脑风暴推迟到土星刑相离开精确位置之后,也别把火星与水星带来的烦躁误认为是工作不适合你的信号。如果可以,请告诉我精确到分钟的出生时间——处女座 8°的上升点接近星座边界,上述宫位位置也取决于出生时间。

回答中的每个度数、容许度和“趋近”都来自工具结果;解读则来自 Agent。这种区分正是关键所在。


工具参考

星盘工具要求日期时间使用带时区的 ISO-8601 格式(1990-05-17T14:30:00+02:00 或 ...Z);在发起任何网络调用前都会拒绝不带时区的值。坐标使用十进制度数(北 / 东为正)。预期的工作流程是先调用 resolve_birth_place——它会根据用户实际提供的信息生成这些值。

resolve_birth_place
输入类型说明
place字符串任意语言的自由文本:Warsaw、Варшава、Springfield, Illinois, USA
local_datetime字符串(可选)不带偏移量的当地挂钟时间:1990-05-17T14:30;如果时间未知,也可填写 1990-05-17(默认假定为 12:00,并会标记)

输出:

{
  "query": "Warsaw", "display_name": "Warszawa, województwo mazowieckie, Polska",
  "latitude": 52.2333742, "longitude": 21.0711489, "timezone": "Europe/Warsaw",
  "local_datetime": "1990-05-17T14:30:00", "utc_offset": "+02:00",
  "birth_datetime": "1990-05-17T14:30:00+02:00", "birth_datetime_utc": "1990-05-17T12:30:00Z",
  "time_assumed_noon": false, "local_time_ambiguity": "none", "age_years": 36,
  "source": "nominatim"
}

birth_datetime、latitude 和 longitude 可直接传入星盘工具。 如果挂钟时间出现过两次(秋季调回时钟),local_time_ambiguity 的值为 ambiguous_dst_fallback;如果时钟跳过了该时间,则值为 nonexistent_dst_gap—— Agent 应询问用户指的是哪一次。时区偏移量来自 IANA 时区数据库,因此 1985 年的莫斯科会解析为 +04:00,2015 年的莫斯科则会解析为 +03:00。错误: PLACE_NOT_FOUND(尝试附近更大的城市 / 添加国家名称)和 GEOCODER_UNAVAILABLE(暂时性错误——请重试)。地理编码使用 OpenStreetMap Nominatim;不会存储请求中的任何信息。

calculate_natal_chart
输入类型说明
birth_datetime字符串带时区的 ISO-8601 格式
latitude数字−90 … 90
longitude数字−180 … 180
house_system枚举placidus(默认)、koch、porphyry、regiomontanus、campanus、equal、whole_sign、topocentric、morinus、alcabitius
include_minor_aspects布尔值默认 false——仅主要相位(合相 10°、冲相 10°、三分相 8°、刑相 8°、六分相 6°)

输出(节选):

{
  "input": { "birth_datetime_utc": "1879-03-14T10:30:00Z", "latitude": 48.4011, "longitude": 9.9876, "house_system": "placidus" },
  "planets": [
    { "name": "Sun", "sign": "Pisces", "degree": 23.498749, "absolute_longitude": 353.498749,
      "house": 10, "retrograde": false, "speed": 0.995959, "declination": -2.585261 }
  ],
  "houses": [ { "house": 1, "sign": "Cancer", "degree": 7.4423, "absolute_longitude": 97.4423 } ],
  "angles": { "ascendant": {...}, "midheaven": {...}, "descendant": {...}, "imum_coeli": {...} },
  "aspects": [
    { "point_a": "Sun", "point_b": "Mercury", "aspect": "conjunction", "exact_degrees": 0, "orb": 9.627514, "movement": "separating" }
  ],
  "meta": { "engine": "Swiss Ephemeris (kerykeion 5.12.7)", "zodiac": "tropical", "house_system": "placidus", "orbs": {...}, "time_resolution": "minute" }
}
get_transits_and_aspects
输入类型
natalobject — 与 calculate_natal_chart 的字段相同
target_datetimestring — 带时区的 ISO-8601
include_minor_aspectsboolean

返回 natal(上文中的完整星盘)、target_datetime_utc、transiting_planets (点位形状相同,另含 natal_house)以及 aspects_to_natal:

{ "transiting": "Saturn", "natal": "Sun", "aspect": "square", "exact_degrees": 90, "orb": 1.21, "movement": "applying" }

movement 的计算以本命点位固定不动为前提——只有行运天体移动——并使用该时刻的真实行星速度。

calculate_synastry
输入类型
person_a、person_bobject — 与 calculate_natal_chart 的字段相同
include_minor_aspectsboolean

返回两人的完整星盘、inter_aspects(point_a 属于 A,point_b 属于 B,并包含 orb)以及 house_overlays(a_in_b_houses、b_in_a_houses)。

提示词:collect_birth_profile

参数(可选):language。Agent 会按照固定顺序,在绘制任何星盘前收集信息:1 出生日期 → 2 出生时间及其准确性(准确 / 大致 / 未知 → 12:00,且不解读宫位)→ 3 出生地点,通过 resolve_birth_place 解析并向用户确认 → 4 当前所在城市(可选,仅用于按当地时间解读“今天”)→ 5 姓名(可选)→ 6 性别(可选,仅在合盘时询问)→ 7 确认卡片,包含解析后的坐标、时区、birth_datetime 和年龄。与 Stellara 应用收集的个人资料一致,但不包含计算所不需要的信息。

提示词:astrologer_system_prompt

参数(均可选):language — 回答所用的语言;focus — 用户当前关注的问题。该提示词包含相同的信息收集规则,要求使用 resolve_birth_place 获取坐标和时差,并指导 Agent 仅将工具 JSON 作为位置数据的来源、注明容许度、遵循入相与出相规则、在出生时间未知时标记宫位的不可靠性,并将解读与计算分开。


配置

变量必需默认值用途
STELLARA_API_KEY是—访问密钥,通过 X-API-Key 发送。请在 stellara.natlex.it/#api 申请。没有此密钥时,每个工具都会返回明确的错误,说明获取密钥的途径。
STELLARA_API_BASE_URL否https://api.stellara.natlex.it/api/v1/astrology指向可自托管的 Stellara 后端(原始 Cloud Run URL https://stellara-api-923668916124.us-central1.run.app/api/v1/astrology 也可用)
STELLARA_TIMEOUT_MS否15000每次请求的超时时间

错误会以 MCP 工具错误的形式返回,并附带可采取后续操作的消息——密钥无效或已撤销(401)、未找到地点(404)、达到速率限制(429,每个 IP 每分钟 60 次;resolve_birth_place 为 20 次)、每日配额已用完(429,带有 QUOTA_EXCEEDED——消息会告知 Agent 配额于何时重置(UTC 00:00),以及在哪里升级密钥)、后端验证详情(422)、地理编码器或后端服务中断(5xx)、网络故障、超时。服务器不会因配置问题在启动时崩溃;调用工具时才会说明问题,这正是桌面 Agent 最擅长处理的情况。

密钥分为不同级别:免费(每天 5 次请求——足以试用每个工具)和 Stellara API Pro(每天 5,000 次,每月 $9)——请参阅 stellara.natlex.it/#api。

远程模式(Streamable HTTP)

同一软件包也可作为 HTTP 服务运行 — node dist/remote.js — 这就是 https://mcp.stellara.natlex.it/mcp(Cloud Run、无状态,每个请求创建一个 McpServer)。它是 OAuth 2.1 资源服务器:GET /.well-known/oauth-protected-resource/mcp 会将客户端指向授权服务器(Stellara 后端,https://api.stellara.natlex.it, DCR + CIMD + PKCE S256);未经过身份验证的 POST /mcp 会返回 401 和 WWW-Authenticate: Bearer … resource_metadata="…";有效令牌 — OAuth 访问 令牌或通过 Authorization: Bearer 发送的 sk_stellara_ 密钥 — 会转发至 API, 由 API 执行每日配额限制。GET /health 用于监控;GET /mcp 返回 405(无 SSE 流,无会话)。

变量必需默认值用途
JWT_SECRET是—与授权服务器共享的 HS256 密钥(未设置时,服务会拒绝启动)
MCP_PUBLIC_URL否https://mcp.stellara.natlex.it公共源站;<origin>/mcp 是令牌受众(RFC 8707 resource)
OAUTH_ISSUER否https://api.stellara.natlex.it授权服务器(RFC 8414 issuer)
PORT否8080监听端口(由 Cloud Run 设置)
GLAMA_CLAIM_TOKEN否—设置后,GET /.well-known/glama.json 会发布 Glama 连接器所有权声明(按设计公开)
STELLARA_API_BASE_URL、STELLARA_TIMEOUT_MS否同上与 stdio 模式相同

自托管计算器

这些工具背后的计算器是 Stellara API(FastAPI + kerykeion / pyswisseph), 托管于 https://api.stellara.natlex.it。MCP 服务本身是一个轻量、无状态的 适配器:将 STELLARA_API_BASE_URL 指向 API 的另一个实例,其余内容保持不变。 后端未作为开源项目发布;如需私有部署,请写信至 [email protected]。


指南

  • docs/USAGE.ru.md — 用户指南(俄语):在 Claude Desktop / Cursor / Hermes 中安装、获取密钥、对话示例,以及出错时的处理方法。
  • 维护者操作手册(npm 发布、官方 MCP Registry、目录、远程服务部署)位于 Stellara 私有单体仓库中(其中的 docs/PUBLISHING.md),未公开发布。

源码

此仓库是 npm 软件包和远程服务的公开源码。日常开发在 Stellara 私有单体仓库中进行;每个版本都会作为单个提交同步到此处(sync: stellara-mcp <version>)。欢迎在此提交问题;拉取请求会合并到单体仓库,并在下一次同步时发布到此处。

开发

npm install
npm test          # vitest: every behavioural test drives the real MCP protocol
npm run build     # tsc → dist/
npm start         # runs the stdio server

测试会通过内存传输将 MCP Client 连接到服务端,替换 fetch,并准确断言桌面 Agent 会观察到的内容:工具发现、任何网络调用前的架构拒绝、请求格式(URL、标头、正文)、JSON 透传、所有错误映射、超时和提示词文本。

许可证

MIT © Natlex。Swiss Ephemeris © Astrodienst AG,服务端通过 kerykeion 在其许可下使用。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。