HellenicStar Astrology MCP Server
HellenicStar is a local-first MCP server for reproducible astrology calculations and PNG chart rendering across natal, timing, relationship, and sky techniques.
Resolve birthplaces or WGS-84 coordinates into reusable location IDs and timezones.
Calculate natal charts, structure graphs, salience/priorities, classical factors, house rulers, and lots.
Analyze natal aspects, dispositor chains, receptions, dignities, Jones patterns, and sect/triplicity factors.
Compute timing techniques: zodiacal releasing, Firdaria, profections, solar arc, secondary progressions, transits, return charts, and timeline synthesis.
Query Saturn/Jupiter angle cycles, house ingresses, transit snapshots, lifetime transit summaries, and aspect windows.
Explore relationship astrology with synastry, composite, Davison, relocation charts, relationship observations, and note preparation.
Inspect the current sky, cast sky charts for any moment/place, and scan planetary aspects over long date ranges.
Render PNG wheels and diagrams for natal, return, progression, transit, composite, Davison, relocation, sky, and other charts.
Verify submitted structured calculation claims against fresh recomputation; interpretation and predictions are not verified.
Discover tools/protocols and recommend workflows via capability and agent-protocol tools.
Return structured, re-checkable calculation data and images while leaving psychological interpretation to the client/user.
Click on "Deploy 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., "@HellenicStar Astrology MCP Servercalculate my natal chart for June 5 1990, 8:30 AM in Athens and render the PNG"
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.
HellenicStar Astrology MCP Server(希腊星智)
独立的占星计算与星图渲染 MCP 服务,提供 48 个工具,支持 stdio 和 Streamable HTTP。客户端负责交互与解读,服务返回可核对的计算数据和 PNG。 不包含课程、会员、登录、支付或 AI 报告服务,不需要模型 API Key。
两种请求,同一套完整工具
可以用日常语言说明目标,由客户端 AI 确认必要信息;也可以直接指定工具、技法和专业参数。明确请求无需经过流程推荐器,多技法明确都要时分别执行。已确认资料直接复用,不支持的设置会明确说明。
针对具体问题可按需读取相关字段;专业研究仍可请求完整结果,接口默认完整输出不变。较大的关系结果可能受客户端长度限制,不能把计算成功等同于完整接收。调用与读取规则见 AI 使用协议。
Related MCP server: agent-core-mcp
本命结构图谱:先计算关系,再形成理解
calculate_natal_structure_graph 根据准确的出生年月日时和确认后的地点,计算十颗行星之间的结构关系,供后续核对与解读使用。
定位链与汇聚:分别按传统、现代守护规则追踪每颗行星的去向,列出自定位、闭环、汇入集合和直接指入关系。
相位网络与构型:提供 6°、8°、10° 三档筛选,输出连通分量、孤立节点,以及大三角、小三角、楔形、T 三角、风筝、神秘矩形、大十字。
其他关系层:保留互容、古典尊贵与状态、Placidus/整宫宫主关系和 Jones 几何分类。
共享来源:用来源字段与依赖边标明哪些关系重复使用同一底层事实,便于避免把重复关系当作多条独立证据。
部分图层可用:高纬度导致 Placidus 失败时,保留仍能计算的行星关系,并用
completeness=partial和layer_availability标记未计算的宫位、轴点层。
例如,可以让 MCP 客户端“计算我的本命结构图谱,分别列出传统和现代定位闭环,以及每个闭环有哪些行星汇入;再用原结果字段复核这些关系”。汇聚数量提供结构信息,心理主线需要另行检验。当前输出为结构化数据;此工具不生成可视化图谱图片。
输入示例、完整字段、复核方式与可复现测试见 本命结构图谱说明。
本命重点提取与琼斯平行观察
calculate_natal_salience 的 natal-priorities-v4 按定位、身份、轴点和相位构型提取重点,保留全部十星画像与来源。默认七星统计、传统守护和统一6°主要相位(含边界);8°/10°须显式选择,没有统一重要性分数。
jones_view单独展示琼斯格局、观察角色、交界候选与当前档直接联系;view_comparison并列两套视角,不合并加分。原先仅因琼斯角色入选的星可能退出本命重点名单,画像仍保留。attention_layers分开呈现终端/构型组、角色交叉重点、单入口重点和背景;互容候选与命主星的直接定位星入口可追溯,不将同义闭环重复累计。planet_condition_assessments对照尊贵与三分主星3/2/1规则,展示宫位、运动、轴点和定位星状态;状态计分不决定重点,也不冒称完整PNA算法。relationship_views在单张本命盘内分别列出依赖关系、直接相位和其余背景,附双方状态与来源,不推断关系有效性或“药”。接纳方向、尊贵依据、星座几何与度数相位分别输出;动态层保留有界的入出相、精确点、转向和换座计算,不声称无限期成相或疗效。
琼斯上游核心对分门槛单独披露,不能扩张默认6°相位列表。算法与迁移见本命重点说明、琼斯平行视角。当前发布验证见本轮记录。
土木流年大表:从长期周期查到具体日期
围绕“土星、木星何时经过我的四轴、进入哪一宫、是否因逆行再次经过”,提供可查询的事件表和可直接展示的全景图,便于回顾经历、比较不同阶段,并继续查看某段时间的详细行运。
工具 | 返回内容 | 时间范围与选项 |
| 土星、木星与本命 ASC、IC、DSC、MC 的精确合轴事件;顺逆行方向与重复经过记录;两颗行运星之间的合相、上刑、冲相、下刑;各自的象限阶段与指定日期的周期位置 | 默认出生至 80 岁; |
| 土星、木星进入本命普拉西度十二宫的时间表,包含顺行进入、逆行返回、离开时间及停留时长 | 0—84 岁,截止于 85 岁生日前;可按星体及起止日期筛选 |
| 1200 × 660 PNG 全景波形图:土木过轴节点、MC / ASC–DSC / IC 参照线、节点文字避让及观察日期对应的年龄指示线 | 默认出生至 80 岁;支持 |
例如,在提供出生日期、时间和解析后的 location_id 后,可以让支持 MCP 的 AI:“先画我的土木流年全景图,再列出未来三年土木过四轴和进宫的日期,注明顺逆行与重复经过。”图表提供的是星体运行与本命几何关系;波形高低不代表人生好坏,过轴或进宫也不自动等于职业、婚姻等现实事件。
综合时间线与生涯行运概览
多技法综合时间线(
calculate_timeline_synthesis):按出生地日历年查询 1–3 年,汇合法达主运/子运、黄道释放 L1/L2、次限月亮换座及对本命点的硬相位,以及木、土、天、海、冥合本命四轴的事件,并保留时间和来源字段。30 天跨技法分组:以精确事件为锚点,在其后 30 天窗口内查找同一目标点的事件,同时纳入在这些事件发生时有效的同目标周期;至少涉及两种技法才输出
resonances。这是供对照解读的规则分组,不是重大事件的概率、强度或已验证预测。生涯行运概览(
calculate_lifetime_transit_summary):将 0—84 岁的精确行运事件汇总为 12 个章节,按星体、快慢组及四轴/本命点统计次数。章节以七岁为步长,末章覆盖 77—84 岁并截止于 85 岁生日前;次数不等于压力或吉凶评分。具体日期检索(
calculate_transits_to_natal):查询最长三年的木、火、土、天、海、冥行运事件。四轴仅计算合相,本命点使用工具支持的主要相位;不能把四轴无合相结果解释为“四轴没有其他相位”。
完整工具清单见 docs/tools.md。
适用与不适用场景
适合谁
本项目是一个本地优先的占星计算与星图渲染 MCP 服务,适合:
个人开发者:在本机用 Claude Desktop、Cursor 等 MCP 客户端搭建自己的工作流
占星师:需要结构化、可复核的计算数据,而不是看不到过程的 App 输出
研究者:需要本命、行运、返照、推运、合盘、Davison、迁移盘、时间主星等技法的结构化结果
设计取舍:
计算与解读分离:服务端只返回可核对的计算数据和 PNG,解读交给客户端和使用者
输出契约:每个数据工具都必须显式注册输出契约,没注册的工具无法暴露;校验不通过的结果直接拦下,不会和错误信息一起返回
先算后画:渲染工具先调用对应的计算工具,并要求结果通过校验,然后才出图
可核验:成功结果附带
calculation_reference,可以用verify_calculation_claims/verify_natal_claims按原始输入重新计算,逐条核对引用的字段能力自发现:
get_capabilities返回全部工具、输入 schema、版本和算法注册信息不存储数据:不保存报告、出生资料或快照
无需模型 API Key,不包含课程、会员、登录、支付或 AI 报告服务
不适合谁
本项目不是:
多租户 SaaS 平台或商业云服务后端
带账号、订阅、计费的产品系统
开箱即可放到公网的匿名 API 服务
为水平扩展、分布式限流或大流量场景设计的系统
如果你需要内建认证、OAuth / API Key 管理、租户隔离或分布式配额,本项目默认不提供这些功能。
部署边界
推荐用法:stdio,或只绑定本机(loopback)的 Streamable HTTP
HTTP 服务默认匿名,没有用户认证;
MCP_ALLOWED_HOSTS默认只允许 localhost / 127.0.0.1如果你自己决定放到网络上,请放在可信的 HTTPS 反向代理或访问网关后面,自行加鉴权,并按
SECURITY.md和部署文档配置域名、支持联系方式和MCP_SOURCE_URL(源码地址)并发闸门是单进程的(默认同时计算 2 个、排队 4 个、等待超时 15 秒,可通过环境变量配置),用来保护本机资源,不代表用户容量
核验能证明什么,不能证明什么
核验只检查你提交的结构化计算字段是否和重新计算的结果一致
它不能验证心理解释、事件预测或整篇解读
通过输出契约也不等于算法本身一定正确,它保证的是结果结构完整、内部一致
设计哲学:服务留在本地,计算保持严谨,输出可以核验,范围说清楚。
Who this MCP is for / Not for
For: individual developers, astrologers, and researchers who run a local MCP server alongside Claude Desktop, Cursor, or other MCP clients, and want structured, re-checkable calculation data instead of opaque app output.
What it does:
Returns calculation data and PNG charts; interpretation stays with the client and the user
Every data tool must register an explicit output contract; results that fail validation are withheld
Render tools draw only from validated calculation results
Results carry a
calculation_reference;verify_calculation_claimsre-computes from the original input and checks cited fieldsget_capabilitiesexposes tools, input schemas, versions, and the algorithm registryStores no reports, birth data, or snapshots; needs no model API key
Not for: multi-tenant SaaS, account/billing systems, public anonymous APIs, or horizontally scaled deployments. No built-in auth, OAuth, tenant isolation, or distributed rate limiting.
Deployment boundary: Use stdio or loopback-only HTTP. HTTP is anonymous by default. If you expose it on a network, put it behind your own HTTPS gateway with authentication, and set MCP_SOURCE_URL. The compute gate is per-process (2 active / 4 queued / 15 s timeout by default, configurable via env) and protects local resources; it is not a capacity guarantee.
Verification scope: Claim verification checks submitted structured fields only. It does not validate interpretations, predictions, or whole reports. Passing an output contract does not prove an algorithm is correct.
功能
本命结构图谱:定位链、闭环与汇聚、互容、相位构型、宫主关系、状态与共享依赖,可用原始字段复算核对。
通用相位扫描与阿拉伯点:
scan_planetary_aspects:跨百年任意星体对、自定义相位角及容许度窗口或年份摘要扫描。calculate_lots:希腊化与阿拉伯特殊点(福点、精神点、爱神点、必然点、婚姻点等)按需计算与公式展示。
本命盘、普拉西度与整宫制、历史时区和夏令时歧义处理。
古典要素、三分主星、福点/精神点、宫主星链、琼斯格局。
黄道释放 L1–L4、法达、年小限、太阳弧、次限、次限月相。
行运、土木周期、返照盘、关系盘、戴维森盘、重置盘与年度时间线。
本命及双轮 PNG、天象、相位窗口、结构化计算事实核对。
完整列表:docs/tools.md。使用协议:docs/mcp-agent-protocol.md。 核对工具检查提交的计算事实,不独立验证心理解释,也不代表整个报告已经正确。
安装、接入和首次验证
先完成依赖安装,再配置客户端,最后用一个示例检查计算、图片和字段核验。 按 快速开始(中文 / English) 操作;首次验证使用坐标, 不需要地名库、高德 Key 或模型 API Key。已持续验证的平台为 macOS 和 Linux / Python 3.12; Windows 原生安装及其他 Python 版本不属于当前 CI 覆盖范围。
也可以把下面的请求交给具有本机终端和 MCP 配置权限的 AI 助手:
帮我安装 https://github.com/qingxiayi/hellenicstar-mcp 。先阅读 docs/quickstart.md, 使用 Python 3.12 安装 requirements.lock 及所需系统依赖,运行
.venv/bin/python scripts/smoke_install.py,再按当前客户端支持的方式配置 MCP。 分别报告安装、自检、客户端连接及图片显示结果;遇到缺失权限或依赖时说明具体原因。
能否自动配置取决于客户端支持、操作系统及已授予的权限,部分客户端需要手动配置或重启。 stdio 图片需要客户端支持 MCP image 内容;自检成功不代表每个客户端都能显示图片。 本地 HTTP 和公开部署的配置见 部署说明 与 SECURITY.md。
地点与时间
已知 WGS-84 经纬度:调用
resolve_birth_coordinates,将返回的location_id用于计算。已知地名:安装可选地名库后调用
search_birthplace;有同名选项时由用户选择。IANA 时区和出生日期共同确定历史 UTC 偏移;夏令时回拨的重复时刻需要确认
fold。中国大陆的乌鲁木齐时区按项目规则归一为北京时间;新疆地方时间输入需要先核实口径。
可选高德查询由部署者提供自己的
AMAP_KEY。无需设置即可使用坐标和离线库。
可复现的离线地名库
源码不携带本地业务数据库。公开地名附件仅由 GeoNames 官方数据生成,不混入原项目的 人工补充记录。可自行构建:
curl --fail --location --retry 3 https://download.geonames.org/export/dump/cities500.zip -o /tmp/cities500.zip
.venv/bin/python scripts/build_location_db.py /tmp/cities500.zip --output data/location.db构建器拒绝覆盖已有数据库;用 --output 指定新文件,再通过 MCP_LOCATION_DB_PATH
选择它。数据范围是 GeoNames cities500,不保证涵盖每个小村镇;未收录的地点可用坐标模式。
GeoNames 名称、坐标及更新时间可能变化,输入压缩包的 SHA256 会记录在数据库 metadata 中。
维护者生成附件:
.venv/bin/python scripts/location_db.py pack --source data/location.db --output dist/location.db.gz使用者下载发行包中的压缩库和校验清单后,取清单的 archive_sha256:
.venv/bin/python scripts/location_db.py install /path/to/location.db.gz --sha256 <archive_sha256>安装器检查 SHA256、SQLite 完整性、表结构和 WGS-84 标记,拒绝覆盖已有库。
运行期地理缓存默认为 data/geocache.db,与只读地名库分离。
验证与贡献
完整套件包含 MCP 契约、快照、实际 stdio/HTTP 会话、星历和算法回归、渲染,以及 Astrologica / Stellium 的指定技术对照。先按上节安装离线地名库,再运行:
.venv/bin/python -m pip install -r requirements-dev.lock
bash scripts/verify.sh仅安装运行依赖也能执行测试,但会跳过缺少独立对照库的用例。测试通过不等于所有算法 都经过独立外部验证。当前实测平台和验收结果见 release-status.md。 GitHub Actions 配有 Python 3.12 的 macOS/Linux 检查;实际执行结果以 CI 为准。
参见 CONTRIBUTING.md。开源源代码包可由下列命令生成:
.venv/bin/python scripts/build_release.py输出 dist/hellenicstar-mcp-source.tar.gz 与逐文件哈希清单,不含本地 Git 历史、密钥、
数据库、生成图片和审计工作笔记。首次公开发布应从该干净包建立新仓库历史,
不要推送带有原业务模块的本地初始历史。
许可
项目源码采用 GNU AGPL-3.0。星历、字体、可选 GeoNames 数据的来源、许可和转换说明 见 NOTICE.md。公开服务须提供所部署版本的对应源代码。
已测任务与已知限制:真实客户端任务验收。其中四轴精确行运目前仅支持合相,不覆盖四轴其他主要相位。
交流与支持
如果你在安装、使用或占星技法对接过程中有任何疑问,或者希望探讨心理占星与 AI 智能体结合的更多可能性,欢迎与我们交流:
欢迎使用、商用和二次开发,请遵守 AGPL-3.0 及第三方许可。反馈和贡献都是自愿的,不需要登记才能使用。
报告问题:安装、调用、计算或渲染异常;模板会引导你提供复现信息。
提出建议:告诉我们想解决什么问题,不需要会写代码。
分享用途:自愿介绍用 HellenicStar 做了什么;经你明确同意后才在项目文档中展示。
贡献代码或文档:提交 PR,由维护者审核后决定是否合并。贡献者保留版权,贡献沿用项目许可。
Issue 和 PR 是公开的,请勿上传真实客户出生资料、私人经历、密钥或未脱敏日志。 计算差异请说明对照来源与计算设置;使用虚构或可合法公开的测试案例。安全问题见 SECURITY.md。
开源支持:如果这个项目对你的学习或探索有所启发,欢迎在页面右上角为我们点一颗 ⭐️ Star 支持一下!
关系观察:双方本命结构的连接
新增 calculate_relationship_observation 和 prepare_relationship_observation_note。从一条跨盘接触分别查看双方的本命结构,保留亲密、友谊、工作与家庭场景;接触只计一次,人工陈述与计算分开。本命使用平均月交点,已发布的本命重点 v4 保持原行为,不输出匹配分数或心理诊断。
API and boundaries · Timing options
发行与平台配置
Available Tools
48 toolscalculate_aspect_windowsARead-onlyIdempotent
Planet-to-planet aspects in orb at one moment, each with how long it stays within orb, how much has elapsed and how much remains. An explicit location_id is required because this result includes the Lot of Fortune and Lot of Spirit. moment is ISO 8601 with a timezone offset; defaults to now. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| moment | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspect_count, aspects, location_id, moment. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: server-side checks gate successful results, summary mode truncates to five rows with marked truncation while preserving scalar lists, and verification references always describe the complete calculation. These are exactly the non-obvious behaviors an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool computes, then requirements, then verification workflow, then verbosity controls — a sensible order. Some slack exists: 'Server checks run before successful results are returned' is vague, and the closing line restates the schema's statement that references identify the full calculation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys the shape of each returned aspect (orb window, elapsed, remaining) and how summary mode alters it. That is sufficient for correct invocation, though it never mentions counts, ordering, or pagination limits beyond the five-row preview.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the description compensates precisely: moment is ISO 8601 with a timezone offset defaulting to now, location_id is required for a stated reason, and include/detail_level interactions are clarified. It supplies the semantics missing for the two undocumented parameters rather than repeating the well-documented ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and computation ('Planet-to-planet aspects in orb at one moment') plus the distinctive payload: duration in orb, elapsed, and remaining time. That differentiates it from the many render/calculate siblings, though it never names scan_planetary_aspects, the closest potential source of confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage rules: location_id is mandatory and why (Lot of Fortune/Spirit), moment defaults to now, and it prescribes the follow-up workflow with verify_calculation_claims before interpreting. It also explains when to use detail_level=summary/include versus omitting both. Missing only explicit routing away from sibling aspect tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_classical_factorsBRead-onlyIdempotent
Hellenistic chart factors from the same natal calculation: sect, planet sect status, essential dignity and condition tags, triplicity lords of the sect light and ascendant, Lot of Fortune and Lot of Spirit, lunar phase, and the Jones whole-chart pattern. Data only, no interpretation text. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: jones_pattern, lots, moon_phase, planet_condition, sect, sect_light, sect_light_triplicity. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses that results are data-only, that server checks run before successful results, and that verify_calculation_claims must be called before interpretation. The detail_level preview/truncation behavior is also explained. It does not describe error handling or input requirements in depth, but adds meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the returned factor list and then moves to usage and detail-level behavior. It is somewhat dense but every sentence conveys relevant information, and the verification instruction is clearly stated without excessive repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters, no output schema, and low schema coverage, the description covers the output contents and verification workflow but leaves invocation semantics incomplete. Missing input details for date/time, location, and house system mean an agent must rely on parameter names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate for undocumented parameters. It explains include and detail_level well, but says nothing about the date/time fields, location_id, house_system, or fold, leaving most of the 10 parameters without semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly enumerates the specific Hellenistic factors returned: sect, dignity, triplicity lords, Lots, lunar phase, and Jones pattern. It establishes the scope as data from the same natal calculation, but does not explicitly differentiate this tool from sibling calculators such as calculate_lots or calculate_natal_chart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear verification workflow before interpreting results and explains how detail_level and include affect output. However, it does not state when to choose this tool over the many sibling calculation tools, nor does it list exclusions or prerequisites for the input parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_davison_chartARead-onlyIdempotent
Davison relationship chart (time-space midpoint chart) for two people with exact birth data: calculates the real physical midpoint in time (UT) and geographic coordinates, casting an independent chart with its own real axes, houses and planetary positions. Supports placidus or whole_sign; orb_profile: greene (default) or tight. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, chart, midpoint_space_time. Use these exact names. | |
| person_a | No | ||
| person_b | No | ||
| orb_profile | No | greene | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | placidus |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and closed-world traits. The description adds valuable context beyond annotations: server checks before results, verification workflow requirements, the fact that psychological interpretations are unchecked, and detailed output truncation behavior for summary mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and follows a logical structure. It is somewhat long but every sentence adds useful information; no redundant fluff. Slight room for tightening, especially the final sentence about verification references.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a calculation tool with no output schema and moderate annotation coverage, the description provides enough behavioral guidance, workflow steps, and output control details for an agent to use it correctly. Minor gaps exist around exact return format, but overall it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema description coverage, the description compensates by explaining optional parameters: orb_profile options (greene/tight), house_system (placidus/whole_sign), and the behavior of detail_level=summary and include. It does not detail the BirthInput fields, but core optional param semantics are well covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (calculates) and resource (Davison relationship chart, time-space midpoint) with scope details (real physical midpoint in time and geographic coordinates, independent chart). Clearly distinguishes from rendering siblings like render_davison_chart by focusing on calculation rather than rendering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for two people with exact birth data and includes a post-calculation workflow (call verify_calculation_claims). However, it does not explicitly state when to choose this tool over alternatives like calculate_relationship_charts or render_davison_chart, nor does it name any sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_house_ingressesBRead-onlyIdempotent
Transiting Saturn and Jupiter entering natal Placidus houses from birth to age 84, including retrograde re-entries. Optional planet (saturn or jupiter) and optional from_date/to_date (YYYY-MM-DD) filters. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| planet | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: event_count, events. Use these exact names. | |
| to_date | No | ||
| from_date | No | ||
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description adds real behavioral context: server-side checks gate successful results, psychological interpretations are not verified, summary mode truncates nested rows at five while preserving scalar lists, and verification references always point at the full calculation. The remaining gap is that it does not say what those 'server checks' validate or what a failed check looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the right statement of scope, but the detail_level sentence largely restates the schema's own description of the same parameter, and the verification-protocol sentences are dense run-ons that mix three separate instructions. It is not bloated, but a chunk of it does not earn its place against structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no output schema, 17% schema coverage, and zero required parameters, the description leaves an agent unable to tell how to supply birth data or whether omitting birth-moment params changes the result. The verification and summary behaviors are well covered, but the core input story is not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% across 12 parameters, so the description carries most of the burden — but it only explains planet, from_date/to_date, include, and detail_level. The seven birth-moment/location parameters (year, month, day, hour, minute, fold, location_id) are never mentioned, even though they are the inputs that make 'natal houses' computable, and the tool declares zero required parameters with no explanation of defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: transiting Saturn and Jupiter entering natal Placidus houses from birth to age 84, with retrograde re-entries. That is specific enough for an agent to distinguish it from generic transit tools, though it never names how it differs from close siblings such as calculate_saturn_jupiter_cycles or calculate_transits_to_natal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear workflow rule (call verify_calculation_claims with the unchanged calculation_reference before interpreting, and reverify after correcting contradicted facts), plus filter semantics for planet and dates. However, it never says when to prefer this tool over the many adjacent transit/cycle calculators, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_house_rulersARead-onlyIdempotent
Calculate house-ruler dispositor chains for all twelve houses, with traditional and modern tracks, chart ruler and angular/succedent/cadent crosses. Use for house-based rulership paths; use calculate_natal_structure_graph for the wider relationship graph or calculate_classical_factors for dignities. Supply exact local birth date/time, a confirmed birthplace location_id and explicit house_system. Omitted prerequisites return needs_clarification; do not infer them. Both rulership tracks are returned regardless of house system. Data only; no psychological interpretation. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: houses. Use these exact names. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | Required explicit choice: placidus or whole_sign. Selects house cusps and placements, not traditional versus modern rulers; both ruler tracks are returned. Reuse a confirmed user choice. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses that both rulership tracks are returned regardless of house system, that output is data-only with no psychological interpretation, that server checks run before results, and that verify_calculation_claims must be called with the unchanged calculation_reference before interpreting. It also explains truncation behavior for detail_level=summary and that verification references always identify the complete calculation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and sibling routing are front-loaded, and every clause is actionable. There is mild redundancy — the psychological-interpretation exclusion and the detail_level mechanics are each effectively stated twice, once in prose and again in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns: houses content, both ruler tracks, chart ruler, cross classifications, the summary truncation contract, and the verification handoff. An agent has everything needed to call it correctly and to follow the required post-calculation verification step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description rises above it by clarifying that house_system selects cusps/placements rather than ruler tracks and that both tracks are always returned. It also explains that include selects top-level content fields and that omitted arguments yield the original full result. Much of the detail_level text restates the schema description, limiting the gain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb (Calculate) and resource (house-ruler dispositor chains for all twelve houses) and enumerates its outputs: traditional and modern tracks, chart ruler, and angular/succedent/cadent crosses. It immediately differentiates itself from siblings by naming calculate_natal_structure_graph and calculate_classical_factors as the tools for adjacent concerns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the use case (house-based rulership paths) and explicitly routes two alternative needs to named sibling tools. It also gives concrete preconditions — exact local birth date/time, confirmed location_id, explicit house_system — and states that omitted prerequisites return needs_clarification rather than being inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_lifetime_transit_summaryARead-onlyIdempotent
Lifetime transit overview from birth to age 84 in twelve seven-year chapters: how many exact transit hits fall in each chapter, split by planet, by slow or fast group, and by axis or planet target. Use calculate_transits_to_natal for the dated events. This scan takes about half a minute. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: chapters, total_events, totals_by_aspect, totals_by_group, totals_by_target. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world and non-destructive, but the description adds genuinely new behavioral facts: roughly half a minute of runtime, server checks running before results are returned, and that verification references always identify the complete checked calculation even when summarizing. The one gap is that it doesn't say what happens with missing birth data or how location_id interacts with the date fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and output shape, then alternatives, then the verification protocol. Dense but each sentence carries content; the verification paragraph is long but tied to a correctness requirement an agent could otherwise violate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description enumerates the result structure (chapters, total_events, totals_by_aspect/group/target), which is exactly what an agent needs. It also covers runtime and the mandatory verification loop. The missing piece is any explanation of the birth-date/location inputs, which leaves the call signature underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 22%, so the description carries the burden for the seven undocumented birth-data parameters (day, month, year, hour, minute, fold, location_id) — and it says nothing about them. What it does elaborate (include, detail_level) is already fully documented in the schema, so the added value is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the exact output shape: a lifetime transit count from birth to age 84, bucketed into twelve seven-year chapters and split by planet, slow/fast group, and axis/planet target. It names the sibling it is not ('Use calculate_transits_to_natal for the dated events'), so an agent can distinguish the aggregate scan from the dated-events tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between alternatives (calculate_transits_to_natal for dated events) and gives a mandatory downstream step: call verify_calculation_claims with the unchanged calculation_reference before interpreting, then correct and reverify. It also states when to use detail_level=summary vs include vs neither. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_lotsARead-onlyIdempotent
Calculate Hellenistic and Arabic lots on demand. Returns name, longitude, sign, house, formula and day/night reversal info. Filter with lots=['fortune', 'spirit', 'eros', 'marriage_male', 'mother', ...]. Data only, no psychological interpretation. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| lots | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: lots, sect. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | whole_sign |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial information beyond the read-only/idempotent annotations: server-side checks run before results, verification references always identify the complete calculation, and psychological interpretations are explicitly not checked. It also discloses truncation behavior and preserved fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the verification instructions are useful, but the middle of the description restates the schema descriptions for detail_level and include almost verbatim, which is wasted space in an already long paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description explains the return fields and the verification loop well. However, it omits guidance on the date/time and location_id parameters and never mentions the house_system default, so an agent would have to infer whether these inputs are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 18% schema coverage, the description compensates for lots, include, and detail_level but leaves seven parameters (day, month, year, hour, minute, fold, location_id, house_system) entirely unexplained. The agent cannot tell from the description what these date/time inputs mean for a lots calculation or whether to pass them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Calculate Hellenistic and Arabic lots") and spells out the return fields; the named lots (fortune, spirit, eros, marriage_male) make the astrological technique obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage guidance: filter with lots=[...], omit detail_level and include for the full result, and use summary only for a preview. It also prescribes the verification workflow after the call. It does not compare against sibling calculation tools such as calculate_classical_factors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_lunar_returnARead-onlyIdempotent
Lunar return chart for target_year and target_month in the residence's civil calendar: exact return moment, chart positions, angles, cusps, aspects, and natal overlay. Explicit residence_location_id (from search_birthplace) is required; house_system: placidus or whole_sign. target_day selects the nearer return if two occur in one month. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: chart, focus, lunar_return, overlay_with_natal. Use these exact names. | |
| target_day | No | ||
| location_id | No | ||
| target_year | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | ||
| target_month | No | ||
| residence_location_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior. The description adds meaningful behavioral context beyond annotations: server checks run before successful results, verification references identify the complete checked calculation, psychological interpretations are not checked, and summary mode truncates nested rows while preserving scalar lists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the tool's purpose and result content. It is somewhat long but most sentences carry operational guidance; a small amount of repetition around verification and detail_level keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with no output schema and low schema description coverage, the description covers the main output families and verification workflow well. It is still incomplete because multiple input parameters are undocumented and there is no explanation of the return structure beyond a high-level list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14%, so the description must compensate, and it explains key parameters such as target_year, target_month, target_day, residence_location_id, house_system, detail_level, and include. However, it leaves several parameters unexplained, including day, fold, hour, year, month, minute, and location_id, and does not clarify how location_id differs from residence_location_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb/resource implicitly through its name and explicitly describes the output: a lunar return chart for target_year and target_month, including return moment, positions, angles, cusps, aspects, and natal overlay. It is clear what the tool produces, but it does not explicitly distinguish calculate_lunar_return from the sibling render_lunar_return_chart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit prerequisites: residence_location_id must come from search_birthplace, house_system must be placidus or whole_sign, target_day resolves two returns in a month, and verify_calculation_claims must be called with the unchanged calculation_reference before interpreting results. It also explains when to use detail_level=summary, include, or neither.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_natal_chartARead-onlyIdempotent
Calculate a tropical natal chart data table from an exact local birth date and time and a selected location_id. Choose placidus or whole_sign houses. If a repeated civil time is ambiguous, ask the user to choose fold 0 or 1 and call again. Do not guess an unknown birth time. For any natal interpretation, REQUIRED NEXT STEP before the final answer: call verify_natal_claims with this result's unchanged fact_reference and the draft's sign, house, retrograde and aspect claims. Correct contradicted claims and identify unverified ones before presenting the interpretation. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, axes, house_cusps, planets. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. Beyond that, the description adds meaningful behavioral context: it warns about ambiguous repeated civil times, forbids guessing an unknown birth time, and establishes a required verification workflow with verify_natal_claims before presenting interpretations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the core purpose, then proceeds through ambiguity handling, required verification, and output-shaping options. Most sentences carry specific operational value, though the final verification-reference sentence is somewhat repetitive of the detail_level explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, low schema description coverage, no output schema, and complex workflow requirements, the description supplies substantial context: how to source birth data, how to resolve fold ambiguity, required verification before interpretation, and detail_level/include behavior. It still omits full parameter formatting details, so it is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate for undocumented parameters. It adds useful meaning for fold, house_system options, detail_level, and include, but several parameters such as day, month, year, hour, minute, and location_id still lack format/range/usage details. It partially compensates but not enough for a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (calculate), resource (tropical natal chart data table), and required inputs (exact local birth date/time, location_id), which distinguishes it from render-oriented siblings like render_natal_chart. It does not explicitly name sibling tools it should replace, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some procedural guidance (do not guess an unknown birth time, ask about fold 0/1) and mandates a next step for natal interpretation. However, it does not explicitly state when to choose calculate_natal_chart versus render_natal_chart or other calculate tools, leaving the primary tool-selection guidance implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_natal_salienceARead-onlyIdempotent
Extract rule-based natal priorities when the user needs candidate focus groups with source evidence. Use calculate_natal_structure_graph for the complete unselected relationship graph, or calculate_natal_chart for positions and houses. Requires exact local birth date/time and a confirmed location_id. Returns focus_selection, all ten planet_profiles, relationship_views separating dignity dependencies from direct aspects, state evidence, reading groups and source_graph; jones_view and view_comparison retain Jones as a separate perspective that does not select natal priorities. Missing house/axis layers remain explicit as partial availability. Broad selections are allowed: no global importance score, forced single core, psychological inference or remedy verdict. Reception criteria and bounded aspect dynamics describe calculated conditions, not efficacy or unlimited perfection. Scope, rulers and orbs are explained in the input fields. Detailed selection rules and version history: docs/natal-salience.md. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Local civil birth day; must form a valid date with year and month. | |
| fold | No | For an ambiguous repeated local time, use 0 for the earlier occurrence or 1 for the later one after user confirmation. Otherwise omit. | |
| hour | No | Exact local civil birth hour, 0-23; not UTC. Do not substitute an unknown time. | |
| year | No | Exact birth year in the local civil calendar. Birth fields are required for a successful calculation; ask for missing data rather than guessing. | |
| month | No | Local civil birth month, 1-12; interpreted with year and day. | |
| scope | No | Statistical origins: classical7 uses Sun through Saturn; ten adds Uranus, Neptune and Pluto. Does not remove the ten complete profiles or restrict which planets chains may traverse. | classical7 |
| minute | No | Exact local civil birth minute, 0-59. | |
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspect_dynamics, attention_layers, availability, candidate_planets, core_structures, evidence_index, evidence_matrix, focus_selection, global_distribution, house_ruler_links, interpretations, jones_view, method, planet_condition_assessments, planet_profiles, policy_comparison, priority_aspects, priority_configurations, priority_decisions, priority_planets, reading_plan, reception_facts, relationship_views, resource_checks, resource_decisions, schema_version, selection_audit, source_graph, supplementary_contacts, view_comparison. Use these exact names. | |
| axis_orb | No | Maximum axis-contact orb in degrees, finite 0-10; ASC/MC use actual chart axes, with opposite-axis expressions merged. | |
| orb_view | No | Uniform inclusive major-aspect orb in degrees: 6 (default), 8 or 10. Applies to all five major aspects and ten planets. | |
| rulership | No | Dispositor edge convention, traditional or modern; separate from the number of statistical origins. | traditional |
| tight_orb | No | Tight-aspect candidate threshold in degrees, finite 0-10 and no greater than orb_view. Does not discard other selected-view aspects. | |
| location_id | No | Copy a confirmed ID from resolve_birth_coordinates or search_birthplace. It supplies coordinates and the IANA timezone; a person name does not replace it. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| dynamics_days | No | Bounded forward search horizon in days, integer 1-90. Searches the current aspect branch for its first exact contact and reports intervening stations/ingresses; no match means none found in this horizon. | |
| include_mc_ruler | No | Include the MC sign ruler in identity candidates when MC is available; false keeps the default identity selection. | |
| reception_policy | No | Choose dignity alone; dignity plus sign geometry; dignity plus a selected degree aspect; or dignity plus a selected degree aspect and applying status. These are distinct criteria, not efficacy judgments. | dignity_only |
| distribution_points | No | Points for element/modality distribution: ten planets, or ten plus available ASC and MC. Does not change ten-planet aspect motifs. | ten_plus_asc_mc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description still adds real value beyond them: it discloses what the result does NOT contain (no global importance score, forced single core, psychological inference or remedy verdict), that partial availability is possible when house/axis layers are missing, and that server checks run before results return. It does not, however, describe rate limits, auth, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and sibling routing, and nearly every sentence carries operational meaning (scope distinctions, broad-selection allowances, verification loop). It is dense and long, with several tightly packed caveat clauses that could be trimmed, but nothing is purely redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description enumerates the returned fields (focus_selection, ten planet_profiles, relationship_views, state evidence, reading groups, source_graph, jones_view, view_comparison) and explains jones_view/view_comparison as a non-selecting perspective. For an 18-parameter analytical tool it gives an agent everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema carries most parameter meaning and baseline is 3. The description adds top-level semantics the schema alone does not: it explains detail_level=summary row-truncation behavior and that verification references always identify the complete calculation, and points the reader to input fields for scope/rulers/orbs interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (extract) and resource (rule-based natal priorities / candidate focus groups) with source evidence. Explicitly distinguishes itself from calculate_natal_structure_graph ('complete unselected relationship graph') and calculate_natal_chart ('positions and houses'), so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternatives and the conditions that select them, states the prerequisites (exact local birth date/time, confirmed location_id from resolve_birth_coordinates/search_birthplace), and prescribes a downstream call to verify_calculation_claims before interpreting. Both when-to-use and when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_natal_structure_graphARead-onlyIdempotent
Calculate a deterministic natal structure graph from an exact civil birth time and selected location_id. Includes traditional and modern dispositor paths with ten origins, cycles, receptions, aspects, motifs, both house systems, conditions and dependencies. No ranking. For configurable classical-seven attention candidates call calculate_natal_salience. Partial graphs explicitly mark unavailable houses and axes. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, conditions, dispositor, facts, houses, interpretations, nodes, receptions, schema_version. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses that there is no ranking, that partial graphs explicitly mark unavailable houses and axes, that server checks gate successful results, and that summary mode truncates with markers while verification references always identify the full calculation. These are substantive behavioral facts an agent could not infer from the schema; only the return shape remains implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then progressively adds workflow and output-shape detail; every sentence carries information. It is dense and runs several ideas together (verification, preview, field selection) without visual structure, which costs a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, no-output-schema calculation tool it covers the workflow (verify then interpret), partial-result handling, and result-shaping options. Remaining gaps are the birth-time parameter conventions (fold, timezone) that an agent must guess from parameter names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 22% across 9 parameters, and the description compensates well for the two documented ones (summary previews up to five rows and marks truncation; include selects 1-30 top-level fields and omits everything else). The seven date/time and fold/location parameters get no semantics beyond 'exact civil birth time', leaving timezone/calendar conventions unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Calculate a deterministic natal structure graph') plus the inputs that define it (exact civil birth time and location_id), and enumerates the contents (dispositor paths, cycles, receptions, aspects, motifs, both house systems). It explicitly differentiates itself from calculate_natal_salience and verify_calculation_claims, so an agent can route without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes: use calculate_natal_salience for configurable classical-seven attention candidates, and call verify_calculation_claims with the unchanged calculation_reference before interpreting. It also states what is out of scope (psychological interpretations are not checked) and when to use include/detail_level versus omitting both.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_progressed_lunationARead-onlyIdempotent
Calculate the secondary progressed Sun-Moon lunation cycle: current and next phase on as_of, eight 45-degree phases, and a timeline through age 100 with progressed positions and transiting Saturn natal-house context. Use for progressed lunar phases; use calculate_secondary_progressions for broader progressed positions and contacts, or get_current_sky for actual sky positions. Requires exact local birth date/time and confirmed birthplace location_id. Missing birth inputs return needs_clarification. Returns calculation data, not life-event predictions. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| as_of | No | Reference date YYYY-MM-DD; omission uses the current UTC date. Evaluated at 12:00 UTC, not at local midnight. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, phase, timeline. Use these exact names. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, closed-world safety, but the description adds operational behavior: exact birth data is required, missing birth inputs return needs_clarification, results are calculation data rather than life-event predictions, server checks precede results, and interpretation requires verify_calculation_claims. These are meaningful disclosures beyond the annotations and do not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads purpose and alternatives, then prerequisites and verification, which is the right ordering for an agent. It is dense and useful, but still long; several workflow sentences, especially around server checks and verification references, add helpful but nonessential detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the essential return scope—calculation data, current/next phase, eight phases, and timeline—plus the prerequisites and verification workflow needed to use results correctly. Given the annotation coverage and 100% schema coverage, no critical agent-facing context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 10 parameters and the description mostly echoes those entries. It adds some cross-parameter value by explaining how detail_level=summary and include interact and that omitting both yields the original full result, but it provides little additional syntax or per-parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource—secondary progressed Sun-Moon lunation—and enumerates the outputs: current/next phase, eight 45-degree phases, and an age-100 timeline with progressed positions and Saturn house context. It also directly distinguishes the tool from calculate_secondary_progressions and get_current_sky, so an agent can select it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use statement ('Use for progressed lunar phases') and names two alternatives with their scopes. It also states required inputs, the missing-input outcome, and a required verification follow-up, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_relationship_chartsARead-onlyIdempotent
Relationship charts for two people with exact birth data: synastry aspects, each person's planets in the other's Placidus houses, the midpoint composite chart, composite-to-natal aspects and shared house patterns. orb_profile: greene (default) or tight. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: a_planets_in_b_houses, b_planets_in_a_houses, composite_chart, composite_to_natal_aspects, synastry_aspects. Use these exact names. | |
| person_a | No | ||
| person_b | No | ||
| orb_profile | No | greene | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses that server checks gate successful results, that psychological interpretations are excluded from verification, and how detail_level truncates nested rows while preserving scalar lists. These are non-obvious behavioral traits an agent could not derive from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Outputs are front-loaded in one dense sentence, followed by orb, verification workflow, and detail_level instructions. It is verbose in places and partially restates the include/detail_level schema descriptions, but most sentences carry actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does enumerate the returned chart components, which is helpful. Gaps remain: it does not say that both person_a and person_b must actually be supplied (schema marks them optional via defaults), nor does it describe the result container beyond field names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, and notably orb_profile has no schema description at all; the description supplies its 'greene (default) or tight' values, which is valuable. It also clarifies detail_level and include interactions, but it never explains person_a/person_b structure or whether they are required, leaving part of the parameter surface underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource being computed: synastry aspects, cross-house placements, midpoint composite chart, composite-to-natal aspects, and shared house patterns for two people. That is far more specific than a tautology, though it never explicitly distinguishes itself from sibling options such as calculate_davison_chart or render_composite_chart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a prerequisite ('two people with exact birth data') and a mandated follow-up (call verify_calculation_claims with the unchanged calculation_reference), which is real usage guidance. However, it gives no when-to-use/when-not-to-use comparison against the many sibling chart tools, so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_relationship_observationARead-onlyIdempotent
For a focused question, use include to request needed top-level fields (for initial contact inspection: contacts and counts), then fetch further context as needed. For explicitly requested complete research data, keep detail_level=full and omit include; full remains the default. A successful calculation does not guarantee that a client received an untruncated result. John Green relationship observation v0.14. mode=synastry requires two exact births; mode=natal accepts person_a alone or both people and computes natal profiles without cross-contacts. All natal points remain available, including untriggered points. sort_by=orb (default), relationship_indicators or natal_hard_aspects changes display order only. Human notes use prepare_relationship_observation_note separately. Returns unique cross-contacts, two observation paths per contact, one-hop natal context, supported bounded natal aspect configurations (including Chiron), actual contact links between both natal configurations, static natal priority background under its separately disclosed policy, directed house overlays and factual indicators. Configuration memberships and natal identities never add direct contacts. observation_review provides evidence-backed indicator, inner/outer and tightness reasons with parallel lenses, never a weighted score or inferred client difficulty. structure_display folds contained configurations and bridges while keeping every raw row and partial overlap. natal_observation_candidates records source-backed selection reasons even without partner contacts. review_paths links actual contact endpoints, one-hop natal context, house rulers and overlays without propagating activation. overlay_contexts preserves target ownership; observation_comparisons groups reciprocal contacts and both natal backgrounds without scoring. observation_complexes separately groups conjunction-pair neighborhoods and named-pattern conjunction satellites, including axis endpoint variants, without recursive expansion or whole-complex activation claims. Shared natal planet pairs and exact descendant-sign correspondences are factual comparisons, not semantic matches. Relationship-indicator sorting uses target-point selection roles. scenario_observation_lenses attaches source-backed topics, conditions and actual point/house references to each selected context; this is not a planet whitelist or psychological interpretation. Optional unconfirmed conditions must not be asserted as client facts. Reuse an explicitly stated relationship context; if unknown, ask the user before calling. The legacy love default is not evidence of user confirmation. No composite, scores or psychological flags. Axis endpoint equivalents share one contact. john_green profile uses 10 degrees for conjunction/square/trine/opposition and 5 degrees for tight display. Sextiles are not evaluated unless sextile_orb_degrees (0-10) is supplied; minor aspects require include_minor_aspects=true and explicit minor_orbs_degrees keys 30/45/135/150; overlapping orb windows are rejected. Yod context requires explicit 60 and 150 degree orbs. Optional include_timing=true requires timing with one of at (offset-aware ISO timestamp), date (YYYY-MM-DD), or month (YYYY-MM) with optional month_part (early/middle/late), or event=childbirth with explicit family parent/child roles, plus explicit transit_orbs_degrees and progression_orbs_degrees. Timing provides a selected-instant snapshot. Optional timing.window_start and window_end (offset-aware ISO timestamps) request a numerical interval search, with a duration from one second to 31 days and the snapshot inside [start,end). window_scan returns exact events and clipped orb windows over every supported point pair, including pairs absent at the snapshot. It reuses source engines and root refinement; interval mesh and bounds are engineering rules. Simultaneous synastry endpoint windows require the same transit and actual interval overlap, not merely two hits somewhere in the date range. Non-instant dates are illustrative UTC-noon samples with fast transits excluded; early/middle/late means calendar days 1-10/11-20/21-end and samples day 5/15/25. These boundaries and sample times are engineering conventions, not known meeting times or interval scans. The timing dictionary also accepts angle_progression_method (naibod default or solar_arc_in_ra) and include_progressed_synastry (boolean, default true). When progressed synastry is enabled, progressed_synastry_comparison compares natal geometry with the selected progressed pair under the same progression_orbs_degrees. It distinguishes same/different aspect and presence on only one side; a node-convention mismatch is marked not comparable. Existing wide-orb static contacts are contextual references, not the comparison baseline. This does not infer first appearance, duration, relationship outcome or internal progressed configurations. No inherited 10-degree timing orbs. Childbirth resolves the child birth through the existing timezone/fold resolver and exposes parental contacts as references, not extra evidence. Natal nodes are verified mean nodes despite legacy field names; childbirth uses mean nodes throughout. Explicit-date timing retains its true transit/progressed nodes and discloses the different natal convention in node_conventions. Timing requires synastry mode and preserves static counts, and links existing contacts and bounded natal contexts without predictions. See timing_observations and its availability limits. relationship_context accepts additional_types, caller-supplied a/b roles (parent/child, siblings, supervisor/employee, colleagues), and cohabiting. Roles must match a selected family/work type. Optional creative_project and early_or_sibling_like_friendship accept true/false/null, require work/friendship respectively, and never infer context. Conditional DSC/seventh-house topics retain actual houses. observation_complex_links references each contact once with both owners core/context memberships, including axis/Yod complexes; no pair-product expansion. Parallel traditional/modern ruler backgrounds and special contact lenses do not add contacts or weights. Missing layers remain explicit, including in summary results. See docs/relationship-observation.md. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | synastry | |
| timing | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: activation_clusters, configuration_activations, configuration_bridges, configuration_memberships, contacts, hemisphere_backgrounds, house_overlays, house_ruler_comparisons, interpretations, natal_backgrounds, natal_configurations, natal_observation_candidates, observation_comparisons, observation_complex_links, observation_complexes, observation_paths, observation_review, observation_route_policy, overlay_contexts, relationship_context_observations, relationship_profiles, review_paths, scenario_observation_lenses, schema_version, source_geometry, special_contact_observations, structure_display, timing_observations. Use these exact names. | |
| sort_by | No | orb | |
| person_a | No | ||
| person_b | No | ||
| orb_profile | No | john_green | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | placidus | |
| ruler_profile | No | traditional | |
| include_timing | No | ||
| relationship_type | No | love | |
| minor_orbs_degrees | No | ||
| sextile_orb_degrees | No | ||
| relationship_context | No | ||
| include_minor_aspects | No | ||
| parental_house_mapping_profile | No | john_green |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds substantial value beyond them: no scores or psychological flags, explicit missing-layer disclosure, truncation caveats, and a mandatory verify_calculation_claims flow. But much of the disclosure is in compressed, near-opaque clauses ("engineering conventions," "no pair-product expansion") that an agent cannot reliably translate into expectations, so it stops short of fully trustworthy behavioral clarity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is a single undifferentiated block of roughly 700 words; purpose, parameters, timing semantics, and verification boilerplate are interleaved with no headings or paragraphing. Sentences pack multiple unrelated constraints each, and the final verification instruction is stranded at the very end rather than surfaced, so the reader must re-scan repeatedly to extract operational facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter, annotation-light, output-schema-less calculation, the description covers modes, orb defaults, timing semantics, context typing, verification workflow, and explicit non-claims (no predictions, no scores) — enough for correct invocation. The remaining holes are a few uncovered parameters and no description of the top-level result shape, which would help at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 12% across 17 parameters, and the description does compensate well for the highest-risk ones: the timing object's at/date/month/month_part/event keys, window_start/window_end limits, sextile_orb_degrees, minor_orbs_degrees keys, include_minor_aspects, and relationship_context sub-keys. Several parameters get no coverage anywhere (house_system, parental_house_mapping_profile, ruler_profile only obliquely, person_a/person_b birth requirements only stated for synastry), which is a real gap at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource and operation concretely ("relationship observation," synastry vs natal modes, cross-contacts, observation paths, natal context) and distinguishes itself from prepare_relationship_observation_note, which handles human notes. However, the opening sentences talk about include/detail_level tactics rather than stating the tool's purpose, so the core purpose is buried mid-paragraph rather than front-loaded.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real gating conditions: use include for focused questions, omit include with detail_level=full for complete data, reuse an explicitly stated relationship context and ask the user if unknown, and use prepare_relationship_observation_note separately for human notes. It never contrasts itself with calculate_relationship_charts, so sibling selection among the chart-producing tools remains an inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_relocation_chartARead-onlyIdempotent
Relocation chart: recalculates ascendant, midheaven and house cusps for a new residence location while keeping the exact natal birth moment (UT) and planetary longitudes unchanged. relocation_location_id (from search_birthplace) is required; house_system: placidus (default) or whole_sign. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: angular_shifts, aspects, axes, house_cusps, planets, relocation_location. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | placidus | |
| relocation_location_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the added value here is real: it discloses that server checks run before results are returned, that verification references always identify the complete checked calculation, and that psychological interpretations are excluded from checking. It does not describe volume or cost of the full result, but the behavioral picture is otherwise clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, which is good, but the description is a dense block that partly restates the schema's own detail_level and include text, and the verification paragraph (three sentences) competes with the actual tool purpose for attention.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does well to explain the two return shapes (full vs summary, plus include selection) and the verification contract. It is not complete for an 11-parameter tool, however, since the birth date/time inputs go entirely unexplained and the relationship to render_relocation_chart is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 18% across 11 parameters. The description adds meaning for relocation_location_id, house_system, detail_level and include, but the seven date/time parameters (year, month, day, hour, minute, fold) and location_id are undocumented in both schema and description — an agent cannot tell that these are the alternative birth-moment inputs. The gap is too large for the description to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource (recalculates ascendant, midheaven and house cusps) and states the defining constraint that the natal moment and planetary longitudes stay fixed. That distinguishes it from natal-chart siblings, but it never explicitly contrasts itself with the very similarly named render_relocation_chart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that relocation_location_id is required and where to get it (search_birthplace), gives the house_system options, and prescribes the downstream verify_calculation_claims step with the condition for reverting. No explicit when-not to use, and calculate_relocation_chart vs render_relocation_chart is left to the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_saturn_jupiter_cyclesARead-onlyIdempotent
Saturn and Jupiter cycles over the natal angles: exact conjunctions with ASC, IC, DSC and MC, Saturn-Jupiter aspects, the quadrant phases of each planet, and the current position in each cycle on as_of (default today). max_age 1-120, default 80. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| as_of | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, aspects, current, jupiter_events, jupiter_phases, natal, range, saturn_events, saturn_phases, stats. Use these exact names. | |
| max_age | No | ||
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds useful context: server checks run before successful results, verification references identify the full calculation, and detail_level/include affect truncation and field selection. It does not explain error modes in depth, but the key behavioral workflow is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and most sentences carry useful operational information. The description is dense and could be more scannable, and it repeats some include/detail_level semantics already present in the schema, but it is not padded with irrelevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description usefully names output content fields, explains detail_level and include, and describes the verification workflow. However, the incomplete coverage of the birth date/time/location parameters leaves an important part of the invocation context underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18%, so the description must compensate. It explains as_of, max_age, detail_level, and include, but leaves day, month, year, hour, minute, fold, and location_id undocumented, which is a significant gap for an 11-parameter natal-calculation tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: calculating Saturn and Jupiter cycles over natal angles, including conjunctions, aspects, quadrant phases, and current cycle position. It clearly distinguishes this from generic chart rendering and from the verification tool it references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context and an explicit post-calculation workflow: call verify_calculation_claims before interpreting the data, correct contradicted facts, and reverify. It also notes that psychological interpretations are not checked. It does not explicitly contrast this with render_saturn_jupiter_cycles or other calculation siblings, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_secondary_progressionsARead-onlyIdempotent
Secondary progressions (Day-for-a-Year) chart: progressed planets, angles, natal aspects and lunation phase. Specify as_of or age; angle_progression_method defaults to naibod, or choose solar_arc_in_ra. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | ||
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| as_of | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: progressed_chart, progressed_ephemeris_date, progressed_to_natal_aspects. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | ||
| angle_progression_method | No | naibod |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower. The description adds meaningful beyond-annotation context: server-side checks run before results, verification references always identify the complete calculation, and detail_level truncation semantics. It doesn't describe output shape, but that is a lesser gap given the read-only profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its contents, then the method choice, then the verification workflow and detail_level rules. It is dense but nearly every clause carries actionable information; only the 'server checks run before successful results are returned' phrasing is somewhat vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and 13 parameters, so the description carries substantial burden. It covers the verification workflow and preview semantics well, but with half the parameters undocumented and no return-value shape, an agent still faces gaps before calling correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (15%) across 13 parameters, so the description must compensate. It meaningfully explains as_of/age, angle_progression_method options, and detail_level/include behavior, but leaves day/month/year/hour/minute/fold/location_id/house_system undocumented in either description or schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and enumerates its outputs (progressed planets, angles, natal aspects, lunation phase), which is concrete. It does not explicitly differentiate from calculate_progressed_lunation or render_secondary_progressions_chart, leaving some sibling disambiguation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit input guidance ('Specify as_of or age'), names the default and the alternative for angle_progression_method, and prescribes a workflow (call verify_calculation_claims before interpreting). It lacks a clear 'when not to use' versus the progressed-lunation or rendering siblings, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_sky_chartARead-onlyIdempotent
A full chart cast for any moment and place rather than for a birth: planets, Placidus houses, axes, aspects, aspect patterns, lunar phase and planetary motion including retrograde shadow periods. moment is ISO 8601 with a timezone offset; defaults to now. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| moment | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, axes, house_cusps, location, moment, moon_phase, planet_motion, planets. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds meaningful context beyond them: 'Server checks run before successful results are returned', the mandatory post-call verification loop, the caveat that psychological interpretations are not checked, and the precise effect of detail_level on rows and truncation marking. This is rich behavioral disclosure for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the resource and returned content come first, then the verification constraint, then parameter behavior. Each sentence carries information, though the verification instructions are somewhat verbose and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating returned content and explaining detail_level/truncation semantics, plus the verification protocol. The main gap is location_id/place handling, which an agent must call correctly but receives no guidance on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
moment gets format detail absent from the schema ('ISO 8601 with a timezone offset; defaults to now'), and detail_level/include are explained thoroughly. However, location_id is left entirely undocumented in both schema and description, and 'place' is only alluded to, so coverage of the 4 params is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('full chart cast for any moment and place') and enumerates the returned content (planets, Placidus houses, axes, aspects, aspect patterns, lunar phase, planetary motion). It explicitly distinguishes from birth-chart tools ('rather than for a birth'), but does not name the close siblings get_current_sky or render_sky_chart, leaving differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete guidance on the verification workflow ('before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference...') and on when to use detail_level=summary vs omit both. However, it never states when to prefer this over get_current_sky or render_sky_chart, which are the most likely alternatives an agent would weigh.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_solar_arcARead-onlyIdempotent
Calculate true solar-arc directions over an age interval: directed-point/axis contacts, the hard-aspect matrix with exact dates, and directed positions at wheel_age. Use for solar-arc timing; choose calculate_secondary_progressions for day-for-year progressions, calculate_transits_to_natal for actual transits, or render_solar_arc_biwheel for an image. Requires exact local birth date/time and a confirmed birthplace location_id; omitted prerequisites return needs_clarification. Defaults to a five-year window on either side of the selected wheel age, clipped to ages 0-80. Returns calculation data, not event predictions. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| as_of | No | Reference date YYYY-MM-DD, default current UTC date, evaluated at 12:00 UTC. Determines wheel age when wheel_age is omitted; that derived age is clipped to 0-80. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| age_to | No | End age in years, at most 80 and greater than age_from. Omit for min(80, selected wheel age plus 5). | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspect_matrix, axis_contacts_by_directed_points, cross_aspects_at_wheel_age, directed_axes_to_natal_points, directed_positions_at_wheel_age. Use these exact names. | |
| age_from | No | Start age in years. Must satisfy 0 <= age_from < age_to <= 80. Omit for max(0, selected wheel age minus 5). | |
| wheel_age | No | Optional directed-position age in years, 0-80. Overrides the age derived from as_of and centers omitted age-range bounds on this age; explicit age_from/age_to remain unchanged. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/non-destructive annotations: default five-year window clipped to ages 0-80, 'returns calculation data, not event predictions', server-side checks running before results are returned, needs_clarification on missing prerequisites, and the mandatory verification loop with unchanged calculation_reference. These are call-shaping behaviors not derivable from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then alternatives, then prerequisites, then output semantics and verification — a sensible order with no filler sentences. It is on the long side, and the verification-workflow paragraph is dense boilerplate that slightly dilutes the core description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, zero-required, no-output-schema tool, it covers purpose, prerequisites, default bounds, truncation/preview semantics, error modes, and the mandatory verification step. An agent has enough to call it correctly and to know what to do with the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns extra by explaining cross-parameter interaction the schema can't — 'omit both for the original full result', and that summary/truncation never affects what verification references identify. Most individual parameter meaning is still delegated to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource + scope: 'Calculate true solar-arc directions over an age interval', naming the exact outputs (directed-point/axis contacts, hard-aspect matrix with dates, directed positions at wheel_age). It also explicitly distinguishes itself from calculate_secondary_progressions, calculate_transits_to_natal, and render_solar_arc_biwheel so an agent can route without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use it ('for solar-arc timing') and names three alternatives with the conditions that select them. Prerequisites are spelled out (exact local birth date/time, confirmed location_id) along with the consequence of omitting them (needs_clarification), and it prescribes the follow-up verify_calculation_claims step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_solar_returnARead-onlyIdempotent
Solar return chart for target_year: exact return moment, chart positions, angles, cusps and aspects, overlay with the natal chart, and monthly progressed return Moon contacts. Explicit residence_location_id (from search_birthplace) is required; use the birthplace ID only when the user chooses it. house_system: placidus or whole_sign. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: chart, focus, monthly_moon_progressions, overlay_with_natal, solar_return. Use these exact names. | |
| location_id | No | ||
| target_year | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | ||
| residence_location_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations: server checks gate successful results, a mandatory verification loop with correction and reverification is spelled out, and psychological interpretations are explicitly out of verification scope. It also discloses how summary truncation works and states that verification references always cover the complete calculation, so an agent knows the references are trustworthy even on truncated payloads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and the returned artifacts, then moves to requirements and workflow in a logical order, and every clause about verification is load-bearing. It loses a point for restating the detail_level and include semantics almost verbatim from the schema descriptions, which is redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no output schema, the description does well to enumerate the return payload and the verification contract. The gap is the date-time input block: with zero required parameters, an agent cannot tell from the description which temporal fields are needed or how they interact with target_year and the return moment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 17% schema coverage across 12 parameters, the description carries real weight and does clarify residence_location_id vs the birthplace ID, the placidus/whole_sign house_system values, and include/detail_level behavior. However, the six date-time parameters (year, month, day, hour, minute, fold) and their relationship to target_year are never explained in either the schema or the description, leaving the most ambiguous part undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Solar return chart for target_year") and enumerates the returned content: exact return moment, positions, angles, cusps, aspects, natal overlay, and monthly progressed Moon contacts. It implicitly separates the calculation from render_solar_return_chart by describing data rather than a rendered image, though it never names that sibling or calculate_lunar_return explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear pre-conditions: residence_location_id is required and comes from search_birthplace, with a rule for when the birthplace ID is acceptable. It also mandates the verify_calculation_claims follow-up before interpretation and explains summary vs full selection, but offers no guidance on when this tool is preferred over calculate_lunar_return or the render counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_timeline_synthesisARead-onlyIdempotent
Data-only multi-technique timeline for target_year and 1–3 birthplace calendar years. Includes active Firdaria and Zodiacal Releasing L1/L2 periods, progressed Moon sign ingresses and hard aspects to natal points, and Jupiter through Pluto conjunctions with natal axes. Events have stable UTC/local timestamps and source fields; resonances only group matching points across at least two techniques within 30 days. No predictive interpretations. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: engine_version, event_count, events, resonances. Use these exact names. | |
| span_years | No | ||
| location_id | No | ||
| target_year | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive/closed-world, and the description adds real context beyond that: no predictive interpretations, server-side checks run before results, resonances only group points matching across ≥2 techniques within 30 days, summary truncation is marked, and verification references always identify the complete calculation. It does not describe rate limits or failure modes beyond invalid_input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and technique list, then workflow, then output-shaping options — a sensible ordering. It is long and repeats the 'references identify the complete calculation' idea twice, but nearly every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, zero required params, no output schema, and low schema coverage, the description should explain the date/time input contract. It instead spends words on verification workflow and detail_level while leaving the core temporal inputs undefined, so the definition is only partially complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 18% across 11 params, so the description carries more burden than usual. It does clarify target_year, the 1–3 year birthplace span (span_years), include's field-selection behavior, and detail_level's two modes, but the seven datetime/location parameters (day, month, hour, minute, fold, location_id) get no explanation of format, timezone, or null semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (multi-technique timeline) and enumerates exactly which techniques are bundled (Firdaria, Zodiacal Releasing L1/L2, progressed Moon, Jupiter–Pluto conjunctions) plus the target_year/birthplace-year scope. An agent can tell this is a composite time-lord/transit timeline rather than a single-technique tool, though it never names which sibling to prefer for a single technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit downstream workflow: call verify_calculation_claims with the unchanged calculation_reference before interpreting, correct contradicted facts, reverify. Also tells when to use detail_level=summary vs. omitting both selectors for the full result. It lacks any when-to-use-this-instead-of-a-sibling-calculation guidance, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_time_lordsARead-onlyIdempotent
Calculate Firdaria and annual profections for as_of: major periods through the configured age-100 horizon, sub-periods within the active major period, and profection years from one year before to three years after the current year, clipped to the available report. Use calculate_zodiacal_releasing for releasing from Fortune/Spirit instead. Requires exact local birth date/time, confirmed birthplace location_id and explicit house_system; missing prerequisites return needs_clarification. Returns timing tables and lords, not event predictions. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| as_of | No | Reference date YYYY-MM-DD; omission uses the current UTC date. Evaluated at 12:00 UTC, not at local midnight. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: annual_profections, as_of, firdaria. Use these exact names. | |
| tradition | No | Firdaria request name: abu_mashar (default), al_biruni or bonatti. This implementation maps al_biruni to abu_mashar rules (nodes last); bonatti moves the nodes after Mars for night births. Result tradition preserves the request; effective_tradition and tradition_note disclose the implemented rules. This alias is not a claim of historical equivalence. Profection house_system is independent. | abu_mashar |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| house_system | No | Required explicit choice: placidus or whole_sign. Selects the reported profection house system. Reuse a confirmed user choice; omission requests clarification. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real context beyond them: precondition failures yield needs_clarification, server checks run before results are returned, output is timing tables and lords rather than event predictions, and detail_level/include truncation behavior is disclosed. However, it does not describe pagination, size limits, or error surface beyond the one clarification path, and the verification paragraph is more workflow instruction than behavior of this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded in the first clause, and each subsequent sentence carries distinct content about routing, prerequisites, output type, and verification. It is dense and runs long, with the verification/detail_level material packed into a single block that could be split or trimmed, but nothing is purely redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters and no output schema, the description carries the burden of describing returns and does so ('timing tables and lords, not event predictions'), covers the prerequisite/clarification path, the verification loop, and the detail_level/include output shaping. An agent has everything needed to call it correctly and to know what it will and will not get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds value by explaining the interaction between detail_level and include ('Omit both for the original full result') and that summary mode preserves scalar membership lists while marking truncation. It also clarifies that the tradition alias is not a claim of historical equivalence and that profection house_system is chosen independently, which the schema does not say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and two named resources (Firdaria and annual profections) plus the scope of each output (major periods to age-100, sub-periods in the active major, profection years -1/+3 clipped to the report). It explicitly distinguishes itself from the nearest sibling, calculate_zodiacal_releasing, so an agent can select without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool and the condition selecting it ('releasing from Fortune/Spirit'), lists prerequisites (exact local birth date/time, confirmed location_id, explicit house_system) and the failure mode (needs_clarification), and prescribes a follow-up step (call verify_calculation_claims with unchanged calculation_reference before interpreting). When-to-use, when-not, and downstream sequencing are all explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_transits_to_natalARead-onlyIdempotent
Exact transits of Jupiter, Mars, Saturn, Uranus, Neptune and Pluto to the natal chart between from_date and to_date (YYYY-MM-DD, at most 3 years). target_scope: all, axes or points. IMPORTANT: axes include conjunctions (0 degrees) ONLY; other axis aspects are not supported. Points use the listed major aspects. Empty axis events do not mean no other axis aspects. Optional planet: jupiter, mars, saturn, uranus, neptune or pluto. Times are given in UTC and birthplace local time. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| planet | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: event_count, events. Use these exact names. | |
| to_date | No | ||
| from_date | No | ||
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| target_scope | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description rightly spends its budget elsewhere: server-side checks before results are returned, times in UTC plus birthplace local time, the axes-conjunction-only limitation, and that empty axis events do not imply no other axis aspects. The truncation semantics of detail_level and the guarantee that verification references always cover the full calculation are useful non-obvious behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose and the date range are front-loaded, which is correct. The remainder is dense run-on prose mixing domain rules, output-shaping flags and a downstream workflow obligation, with no structure to separate them; some sentences (the detail_level explanation) are duplicated by the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, annotation-covered, output-schema-less tool this covers the domain caveats and the verification loop well. It is still incomplete on how the natal chart itself is specified – the birth date/time components and location_id are never connected to the request, leaving an agent guessing whether they are required for a meaningful result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 15%, so the description must carry the load. It does explain from_date/to_date format, the planet enum values, target_scope options and detail_level/include behavior. But seven parameters (year, month, day, hour, minute, fold, location_id) – evidently the natal birth moment and place – are left entirely unexplained in both schema and description, which is a material gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: exact transits of five named planets to the natal chart within a bounded date range. It also defines the target scope (all/axes/points), which separates it from generic aspect-scanning tools. It never names a sibling it competes with, so the differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides real contextual guidance – the 3-year maximum window, when to use summary vs include vs neither, and a mandatory follow-up call to verify_calculation_claims. However, it never says when to choose this over calculate_aspect_windows, get_transit_snapshot or calculate_lifetime_transit_summary, which is the biggest selection ambiguity in this sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_zodiacal_releasingARead-onlyIdempotent
Zodiacal releasing (Valens, 360-day years) from the Lot of Fortune and Lot of Spirit. Returns all level-1 periods, the level-2 periods inside the level-1 period containing as_of, and the level-3 periods inside the current level-2 period, with peak and loosing-of-the-bond markers. as_of defaults to today. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| as_of | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, lots. Use these exact names. | |
| location_id | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, and the description adds meaningful beyond-schema behavior: server checks run before results are returned, the mandatory verification round-trip, truncation marking in summary mode, and that verification references always identify the complete checked calculation. It stops short of describing error modes or pagination limits beyond the 'up to five rows' rule.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded and most sentences carry real information. However, the detail_level/include sentences largely restate schema descriptions, and the closing sentence about verification references repeats an earlier point, adding length without new guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 10 parameters, the description does a reasonable job of describing the returned structure (nested level-1/2/3 periods, markers, level-2/3 anchored to as_of). But the omission of any explanation for the datetime and location inputs leaves a real gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20%, so the description must compensate, but it explains only as_of (defaults to today), include, and detail_level. The six datetime parameters (year, month, day, hour, minute, fold) and location_id are completely unaddressed — an agent cannot tell whether they are a birth datetime, a required set, or timezone-bearing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific technique (zodiacal releasing, Valens 360-day years), its sources (Lot of Fortune and Lot of Spirit), and exactly what is returned at each level with peak/loosing-of-the-bond markers. The level-1/2/3 scope implicitly separates it from the sibling calculate_zodiacal_releasing_l4, but it never names or contrasts that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear conditional workflow: call verify_calculation_claims with the unchanged calculation_reference before interpreting, correct contradicted facts and reverify, and notes psychological interpretations are not checked. It also states when to use detail_level=summary versus omitting both for the full result. No guidance on when to prefer this over calculate_zodiacal_releasing_l4 or calculate_time_lords.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_zodiacal_releasing_l4ARead-onlyIdempotent
Level-4 zodiacal releasing periods inside one level-3 period. Call calculate_zodiacal_releasing first, then pass lot (fortune or spirit) plus the exact start date and sign key of the chosen level-3 period, for example parent_start 2026-08-24 and parent_sign GEMINI. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| lot | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| as_of | No | ||
| month | No | ||
| minute | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, level4, lot, parent_period. Use these exact names. | |
| location_id | No | ||
| parent_sign | No | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| parent_start | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds real context: server-side validation runs before results return, summary mode truncation is marked, and verification references always point at the complete calculation. The wording 'server checks run' is left vague (which checks, what failures look like), keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by prerequisite, workflow validation, and optional-parameter behavior in a logical order. Some space is spent restating the detail_level and include semantics that already appear verbatim in the schema descriptions, which is minor redundancy rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no output schema, and a multi-step verification workflow, the description supplies the prerequisite chain, verification protocol, and truncation semantics an agent needs. It is only incomplete on the unexplained date/time/location inputs, whose role in producing a level-4 release is never stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 15%, so the description must carry the load. It does well for lot, parent_start, parent_sign, detail_level and include (including a worked date/sign example), but the eight date/time/place parameters (year, month, day, hour, minute, fold, as_of, location_id) get no explanation at all, leaving a substantial gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the exact resource and scope: level-4 zodiacal releasing periods nested inside a single level-3 period, which readily separates it from the sibling calculate_zodiacal_releasing (level-3). The verb 'calculate' is only implied via the name rather than stated, so it falls just short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit prerequisite ordering ('Call calculate_zodiacal_releasing first'), specifies what to pass in (lot fortune or spirit, parent_start, parent_sign with a concrete example), and prescribes the follow-up verification step. An agent knows exactly when to reach for this tool and what to do before and after.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_protocolARead-onlyIdempotent
Read the current HellenicStar agent protocol: tool selection, missing-input handling, provenance limits, source-fact verification and interpretation boundaries. The same text is available as an MCP resource and prompt.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, closed-world, and non-destructive behavior. The description adds useful context beyond annotations: the content scope of the protocol and the fact that the same text is available via resource and prompt. It does not describe the return format explicitly, but for a zero-parameter static read that gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and content scope, followed by the alternative-access note. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only protocol tool with full annotations, the description is nearly complete: it says what protocol areas are covered and where else the text lives. It could be slightly richer by stating the return format (plain text) or whether the protocol is versioned, but no critical information is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to document. The baseline for zero params is 4, and nothing in the description creates ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Read") and resource ("the current HellenicStar agent protocol") and enumerates the protocol's subject matter, making the tool's purpose clear. It does not explicitly differentiate itself from meta-siblings like get_capabilities or recommend_workflow, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions that the same text is available as an MCP resource and prompt, which signals alternatives, but it gives no condition for choosing this tool over those alternatives or over sibling meta-tools. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_capabilitiesARead-onlyIdempotent
Discover current tools, input schemas, registered algorithm provenance and versions from the live registry. Use when available tools or parameters are unclear. If the needed tool and its current schema are already available, call it directly; this lookup is optional.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds value beyond them by specifying the data source ('live registry') and that provenance/versions are returned, plus the optional/advisory nature of the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the discovery purpose and followed by usage guidance. No filler, though the closing 'this lookup is optional' slightly restates the preceding clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining returns; it does so by naming tools, schemas, provenance and versions. Adequate for a zero-parameter read-only meta tool, though it could hint at response shape more concretely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the schema to obscure and no parameter semantics to compensate for. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Discover') and enumerates the resources it returns: tools, input schemas, registered algorithm provenance and versions from the live registry. This clearly separates it from the domain calculation/render siblings, though it does not distinguish itself from the other meta tools (get_agent_protocol, recommend_workflow).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use when available tools or parameters are unclear') and an explicit exclusion ('If the needed tool and its current schema are already available, call it directly; this lookup is optional'). It does not, however, say when to prefer this over get_agent_protocol or recommend_workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_skyARead-onlyIdempotent
Sky at one moment, with no birthplace or geographic location required: lunar phase, Moon sign, void-of-course window, lunations/eclipses, retrograde planets, stations and aspects. moment is ISO 8601 with an offset; defaults to now. include=retrograde_planets returns only planets retrograde at that moment and their next direct station; stations_today covers only that Beijing calendar day. This is not a complete annual retrograde calendar. For a yearly request, explain this limit or verify each boundary from actual dated results; do not ask for a city or switch to a house chart merely to get station dates. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| moment | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: moon, moon_phase, planet_aspects_active, retrograde_planets, sun, timestamp, voc. Use these exact names. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description still adds real behavioral context: server-side checks run before successful results are returned, detail_level=summary truncates object/nested rows to five while preserving scalar lists and marking omissions, and verification references always point at the full checked calculation. The main gap is that it doesn't describe the shape/density of the full payload beyond field names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded, but the paragraph then piles on verification workflow, sibling-redirect rules, and a full restatement of detail_level semantics already present in the schema. For a three-parameter read tool this is over-long, and several sentences (e.g. the 'do not ask for a city' admonition) would be better placed in the agent protocol.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work: it lists the returned content categories, explains the summary/full truncation tradeoff, and states the default moment. It stops short of describing the structural shape of nested results (e.g. aspect or station records), which leaves a modest gap for an agent planning to consume the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description compensates for the undocumented `moment` parameter by specifying ISO 8601 with an offset and a 'now' default. It also adds behavior for `include` (retrograde_planets returns only retrograde planets plus their next direct station) beyond the schema's field list, though it references `stations_today`, which is not among the schema's enumerated selectable fields — a small inconsistency.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific computation ('Sky at one moment') and enumerates exactly what the result contains: lunar phase, Moon sign, void-of-course window, lunations/eclipses, retrograde planets, stations and aspects. It also carves out its scope against siblings ('no birthplace or geographic location required', 'not a complete annual retrograde calendar'), letting an agent separate it from the natal/house-chart and render_* tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: defaults to now, use include=retrograde_planets for retrograde-only output, stations_today is limited to the Beijing calendar day, and for yearly requests to explain the limit rather than switching to a house chart or asking for a city. It also mandates calling verify_calculation_claims before interpreting results, which is a concrete when-to-use instruction with a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transit_snapshotARead-onlyIdempotent
Get calculation data for transiting planets and their active aspects to one natal chart at a single moment, including orb, orb limit and applying status where available. Use calculate_transits_to_natal for exact event dates over a range, render_transit_biwheel for an image, or calculate_sky_chart for a chart without natal comparison. Requires exact local birth date/time and confirmed birthplace location_id; missing birth inputs return needs_clarification. This is a snapshot within configured orbs, not an exact-event search or a prediction. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| moment | No | Transit instant in ISO 8601 with timezone offset, for example 2026-10-25T12:00:00+08:00 or a Z suffix. Omit for now. Distinct from the local civil birth date and time. | |
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: active_aspects_to_natal, moment, transit_positions. Use these exact names. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds meaningful behavioral context beyond them: server checks run before successful results, missing birth inputs return needs_clarification, detail_level=summary truncates nested rows and marks truncation, and verification references identify the complete calculation. It also explains the required verify_calculation_claims follow-up before interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and alternatives, then moves into prerequisites and workflow. It is somewhat long and contains a few redundant phrases, such as repeated references to the complete checked calculation, but most sentences carry useful information for this complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given ten parameters, no required parameters, no output schema, and a multi-step verification workflow, the description covers the essential context: birth inputs, location_id, moment, detail_level/include behavior, needs_clarification handling, and post-calculation verification. Nothing critical for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all ten parameters thoroughly. The description echoes some detail_level and include behavior, but it does not add substantial parameter semantics beyond what is already in the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: getting calculation data for transiting planets and their active aspects to one natal chart at a single moment, including orb and applying status. It also explicitly distinguishes this snapshot from calculate_transits_to_natal, render_transit_biwheel, and calculate_sky_chart, so an agent can select it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance against named alternatives and clarifies that this is a snapshot within configured orbs, not an exact-event search or prediction. It also states prerequisites (exact local birth date/time and confirmed birthplace location_id) and the needs_clarification behavior when inputs are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_relationship_observation_noteARead-onlyIdempotent
Prepare a human observation note for caller-owned storage. Requires an unchanged calculate_relationship_observation calculation_reference, person a/b and an explicitly supplied human statement. Optionally link to a natal point and question ID. Recomputes the source anchor only; does not verify the statement, infer answers, diagnose, persist notes or change calculation facts/counts. Never invent client reports.
| Name | Required | Description | Default |
|---|---|---|---|
| point | No | ||
| person | Yes | ||
| reference | Yes | ||
| statement | Yes | ||
| author_role | Yes | ||
| question_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations: it discloses that only the source anchor is recomputed, that the statement is not verified and answers are not inferred, and that nothing is persisted or changes calculation facts/counts. The 'Never invent client reports' guardrail is exactly the kind of behavioral constraint an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what is produced and where it goes, then prerequisites, then exclusions. The exclusion list is long but each clause carries real constraint; a slightly tightened phrasing would remove some density without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites, optional links, and behavioral limits well for a 6-parameter tool, and annotations plus hints cover the safety profile. However, with no output schema and no statement of what the returned note/anchor looks like, an agent cannot predict the response shape or how to pass it on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description does heavy lifting: it explains reference must be an unchanged calculation reference, person is a/b, statement must be explicitly supplied and human, and point/question_id are optional links. It never mentions author_role or its client_report/practitioner_note distinction, which is the one required parameter left undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ('Prepare a human observation note') plus its destination ('caller-owned storage'), which no sibling tool does. Naming 'calculate_relationship_observation' as the required upstream step cleanly separates it from that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard precondition (an unchanged calculate_relationship_observation calculation_reference) and marks point/question_id as optional links, so an agent knows the entry conditions. It never frames exclusions as 'use X instead', so routing to alternatives is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_workflowARead-onlyIdempotent
Optional keyword-based directory of supported calculation workflows. Skip when the requested tool is clear or the question is conceptual. Interpret the user's language, negations and background first; submit a known goal key such as relationship_observation or an unambiguous technique phrase. Preserve the requested time scope and data/image output. For multiple requested techniques obtain each route separately. Unknown goals return the whole directory, not a requirement to show every option to the user. Resolve candidates from the conversation; ask only if ambiguity remains. status=ok selects a route, not input readiness: check required_information against existing confirmed data. Image-only routes use renderers directly. This tool does not understand arbitrary language, calculate or manage dialogue.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, idempotent and non-destructive, but the description adds real behavioral context: unknown goals return the whole directory rather than an error, status=ok means route selection not input readiness, required_information must be checked against confirmed data, and the tool explicitly does not calculate, understand arbitrary language, or manage dialogue. These are non-obvious traits an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the skip condition are front-loaded, which is good, but the middle is a dense run of terse clauses ('status=ok selects a route, not input readiness') that read like internal shorthand. Several sentences (image-only routes, dialogue management) are useful but packed without structure, making it heavier than needed for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does supply return-shape cues (whole directory on unknown goals, status, required_information), which is what an agent needs to interpret results. What is missing is any description of the route record itself (fields, renderer vs calculation distinction beyond a passing mention).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the single 'goal' parameter, and it does provide useful guidance (a goal key like relationship_observation, or an unambiguous technique phrase, after interpreting language and negations). However, it never enumerates valid keys or the phrase format, so the agent still lacks a reliable way to construct a valid value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description calls this an 'optional keyword-based directory of supported calculation workflows', which hints at a goal-to-route lookup but never states plainly that it recommends/selects a workflow, so the name and description do not quite line up. It also does not explicitly differentiate itself from the many calculate_* siblings, leaving the agent to infer that this is a meta/routing tool rather than a calculation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit exclusion rule ('Skip when the requested tool is clear or the question is conceptual') and a procedure for multi-technique requests ('obtain each route separately') and for ambiguity ('ask only if ambiguity remains'). It stops short of naming concrete sibling tools to call instead, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_composite_chartARead-onlyIdempotent
Render the midpoint composite chart of two people as a 720px PNG wheel. Use for geometric midpoint positions; use calculate_relationship_charts for structured composite/synastry data or render_davison_chart for a physical time-space midpoint chart. Supply two complete BirthInput objects with exact local birth dates/times and separately confirmed birthplace IDs. This chart does not score compatibility or predict relationship outcomes. Returns an inline MCP PNG after calculating and validating its source; no prior calculation call is required. stdio has no public image URL and the client must support image content. Missing inputs return needs_clarification without an image; invalid inputs or unavailable rendering return an error without an image.
| Name | Required | Description | Default |
|---|---|---|---|
| person_a | No | First person: year, month, day, hour (0-23), minute (0-59) in birthplace local civil time, plus confirmed location_id from search_birthplace or resolve_birth_coordinates. All six are needed; fold is 0/1 only for a user-confirmed repeated DST time. Do not guess missing fields. | |
| person_b | No | Second person: complete year, month, day, hour (0-23), minute (0-59) and their own confirmed birthplace location_id, using local civil time. Request fold 0/1 for an ambiguous repeated DST time. Do not copy the first person's location by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it as a safe, idempotent read; the description adds substantial context beyond that: no prior calculation call is required, stdio yields no public image URL, the client must support image content, and the three outcome paths (needs_clarification without image, error without image, inline PNG on success) are each spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then alternatives, then requirements, then return/error behavior — a sensible ordering. It is a dense paragraph with some stacking of caveats, but nearly every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter rendering tool with no output schema, the description covers everything an agent needs: input prerequisites, whether a prior calculation call is needed, the return medium, transport limitations, and both failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description goes further by insisting on complete BirthInput objects with exact local civil times and separately confirmed birthplace IDs, and explicitly warns not to copy person A's location to person B. The only minor gap is that the required/optional status is not restated (all fields default to null in the schema).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Render the midpoint composite chart of two people as a 720px PNG wheel.' It immediately distinguishes itself from the two nearest siblings (calculate_relationship_charts for structured data, render_davison_chart for the time-space midpoint), so an agent can pick it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit positive trigger ('use for geometric midpoint positions') plus two named alternatives with their selection conditions. It also sets a negative boundary ('does not score compatibility or predict relationship outcomes'), which prevents a plausible misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_davison_chartARead-onlyIdempotent
Render the Davison relationship chart (time-space midpoint chart) of two people as a 720px PNG wheel shown to the user. Same inputs as calculate_davison_chart.
| Name | Required | Description | Default |
|---|---|---|---|
| person_a | No | ||
| person_b | No | ||
| house_system | No | placidus |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely non-redundant behavior: the output is a 720px PNG wheel displayed directly to the user — key information for a render tool. It does not say what happens if person_a or person_b is omitted, which matters since all parameters are optional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste; the artifact and its dimensions are front-loaded, and the input-contract note follows. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly states the return form (720px PNG shown to the user), which is the main thing an agent needs. Remaining gaps — prerequisite ordering relative to calculate_davison_chart and the undocumented house_system — are modest for a straightforward render tool with annotations covering safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, yet it only delegates via "same inputs as calculate_davison_chart" and "two people" — a useful pointer but not a substitute for explaining person_a/person_b. The house_system parameter (default placidus) is never mentioned, nor is the consequence of the null-defaulted birth fields, so nearly all parameter meaning remains unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (render) plus the exact resource (Davison relationship / time-space midpoint chart of two people) and the concrete artifact produced (720px PNG wheel). It also names the sibling calculate_davison_chart, so an agent can immediately tell the drawing tool from the computational one in the crowded chart family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Same inputs as calculate_davison_chart" establishes context and implicitly contrasts this rendering tool with its calculation sibling, making the use case (produce a visual for the user) clear. It stops short of stating when not to use it or whether calculate_davison_chart should be called first, so it is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_jones_patternARead-onlyIdempotent
Render a 720px PNG Jones distribution ring: ten planetary glyphs, occupied fans, true-longitude dots, gap, angles and focus points, with pattern and boundary status. Use for the whole-chart distribution visual; use render_natal_chart for a standard natal wheel or calculate_classical_factors for Jones classification alongside classical factors. Requires exact local birth date/time and confirmed birthplace location_id. Boundary cases are not a unique psychological diagnosis. Returns an inline MCP PNG after calculating and validating its source; no prior calculation call is required. stdio has no public image URL and the client must support image content. Missing inputs return needs_clarification without an image; invalid inputs or unavailable rendering return an error without an image.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent, closed-world operation, and the description adds substantial context beyond them: it calculates and validates its own source with no prior call needed, returns an inline MCP PNG, has no public URL over stdio and requires image-content client support. It also specifies failure behavior precisely (needs_clarification on missing inputs, error without an image on invalid input).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the render output and contents before routing and caveats, and every clause carries information. It is dense and long for a single paragraph, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers the return value (inline PNG), the transport constraint, the no-precalculation shortcut, and both failure modes. Nothing an agent needs to invoke and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so field-level meaning is already documented; the description's contribution is elevating the requirement level ('requires exact local birth date/time and confirmed birthplace location_id') even though the schema marks all seven params optional. It adds no further syntax detail, which is fine given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Render a 720px PNG Jones distribution ring') and enumerates the visual contents (glyphs, fans, longitude dots, gap, angles, focus points). It explicitly contrasts itself with render_natal_chart and calculate_classical_factors, so an agent can separate it from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('whole-chart distribution visual') and names two alternatives with the conditions that select them. It also states prerequisites (exact local birth date/time plus confirmed birthplace location_id) and warns that boundary cases are not a diagnosis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_lunar_return_chartARead-onlyIdempotent
Render the lunar return chart as a 720px PNG wheel shown to the user. Same inputs as calculate_lunar_return.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| target_day | No | ||
| location_id | No | ||
| target_year | No | ||
| house_system | No | ||
| target_month | No | ||
| residence_location_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world. The description adds the output format and size (720px PNG wheel) and the fact that it is surfaced to the user, which matters because there is no output schema. It does not mention whether the chart is cached or how it is returned (URL, base64, attachment), which is a remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and artifact, second sentence carrying the parameter pointer. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 12 undocumented nullable parameters, the description leans entirely on a sibling reference for input semantics and says nothing about the return value shape. For a rendering tool whose whole product is a binary artifact, that leaves an agent guessing how the PNG comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 12 parameters have 0% schema description coverage, so the schema itself explains nothing. 'Same inputs as calculate_lunar_return' is meaningful compensation — it tells the agent where the semantics live — but it forces a cross-tool lookup and gives no hint about the day/hour/fold vs target_day/target_year/target_month split.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (render), a specific resource (lunar return chart), and the artifact form (720px PNG wheel shown to the user). This cleanly distinguishes it from calculate_lunar_return and from render_solar_return_chart/render_natal_chart in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'shown to the user' implies this is the display step that follows computation, and the explicit reference to calculate_lunar_return gives the agent a routing rule between compute and render. No explicit exclusion or prerequisite (e.g., must compute first) is stated, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_natal_chartARead-onlyIdempotent
Render the existing natal chart wheel as a 720px PNG shown to the user. Requires an exact birth date, local time and selected location_id; supports placidus or whole_sign. Ask about ambiguous civil time instead of guessing fold.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| location_id | No | ||
| house_system | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real context: output is a 720px PNG surfaced to the user, and it renders an already-existing chart. It does not say what happens if no chart exists yet or how errors surface, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The output form and size come first, then the input requirements and the one genuinely non-obvious rule (fold handling).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only render tool with no output schema, the description supplies the output artifact (PNG, 720px, shown to user), the required inputs, and the house-system choice. That is enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 params, so the description has to compensate. It covers location_id, the date/time inputs collectively, house_system options (placidus or whole_sign), and explains fold via the DST ambiguity warning. The y/m/d/h/min split is left to obvious naming.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Render the existing natal chart wheel as a 720px PNG'. Makes clear it produces an image shown to the user, which distinguishes it from the calculate_* siblings in the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisites (exact birth date, local time, selected location_id) and a decision rule for ambiguous civil time ('ask ... instead of guessing fold'). It does not explicitly route to a sibling such as calculate_natal_chart, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_relocation_chartARead-onlyIdempotent
Render the relocation chart as a 720px PNG wheel shown to the user. Same inputs as calculate_relocation_chart.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| month | No | ||
| minute | No | ||
| location_id | No | ||
| house_system | No | placidus | |
| relocation_location_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds important output context: a 720px PNG wheel shown to the user, and input parity with calculate_relocation_chart. It does not detail error behavior or whether rendering is always successful, but the key behavioral traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two sentences with no wasted words. The primary purpose and output format are front-loaded, followed by the sibling input reference.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with rich annotations but no output schema, the description adequately explains the return format as a 720px PNG wheel and ties inputs to calculate_relocation_chart. It is not fully self-contained on parameter semantics, but it gives the agent a clear path to find them via the sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 9 parameters with 0% schema description coverage, so the description carries a heavy burden. 'Same inputs as calculate_relocation_chart' provides a useful cross-reference to another tool's parameter semantics, but it does not directly explain any parameter's meaning, format, or constraints. This is a minimum-viable compensation rather than full parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Render the relocation chart as a 720px PNG wheel shown to the user.' The second sentence distinguishes it from the sibling calculation tool by noting it shares inputs with calculate_relocation_chart, making clear this is the visual-output counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Shown to the user' gives clear context that this is for visual presentation, and 'Same inputs as calculate_relocation_chart' names the related sibling. However, it does not explicitly say when not to use this tool or state that calculate_relocation_chart is the alternative for non-visual results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_saturn_jupiter_cyclesARead-onlyIdempotent
Render a 1200x660 PNG panorama of lifetime Saturn/Jupiter angle crossings, with event labels and a reference-age indicator. Use this for a visual overview; use calculate_saturn_jupiter_cycles for exact event tables and cycle data, or calculate_house_ingresses for entries into houses. Requires exact local birth date/time and a confirmed location_id; person_name is only a display label. Returns an inline MCP PNG and cycle summary after calculating and checking its source. stdio provides no public image URL; image display requires client support. Missing or invalid birth inputs return an input error without an image; unavailable rendering returns render_failed. The window starts at birth and ends at max_age (default 80, allowed 1-120). Wave height is geometry, not life quality or an event prediction.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Local civil birth day; must form a valid date with year and month. | |
| fold | No | For an ambiguous repeated local time, use 0 for the earlier occurrence or 1 for the later one after user confirmation. Otherwise omit. | |
| hour | No | Exact local civil birth hour, 0-23; not UTC. Do not substitute an unknown time. | |
| year | No | Exact birth year in the local civil calendar. Birth fields are required for a successful calculation; ask for missing data rather than guessing. | |
| as_of | No | Reference calendar date YYYY-MM-DD, evaluated at 12:00 UTC; omitted or empty uses the current UTC date. Sets the age indicator/current cycle position, not the chart start or end. | |
| month | No | Local civil birth month, 1-12; interpreted with year and day. | |
| minute | No | Exact local civil birth minute, 0-59. | |
| max_age | No | Lifetime window endpoint in years since birth: integer 1-120, default 80. Starts at birth; larger ranges require more calculation. | |
| location_id | No | Copy a confirmed ID from resolve_birth_coordinates or search_birthplace. It supplies coordinates and the IANA timezone; a person name does not replace it. | |
| person_name | No | Optional display label printed on the image. It is not an identity lookup and does not replace birth fields or location_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: describes return of an inline MCP PNG plus cycle summary, the stdio limitation (no public image URL, client image support needed), error behaviors (input error without image, render_failed), the birth-to-max_age window, and warns wave height is geometry not prediction. Annotations already cover safety; this adds rich operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and routing guidance before behavioral details; most sentences carry unique information. It is dense and long, but each clause (errors, stdio limitation, window semantics) earns its place for a rendering tool with no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 10 parameters, the description supplies return format, error modes, client constraints, and window semantics, so an agent has everything needed to invoke and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all 10 params; the baseline would be 3. The description adds value by clarifying as_of sets the age indicator rather than the chart start/end, that person_name is display-only, and max_age window behavior, though most param detail duplicates schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: renders a 1200x660 PNG panorama of lifetime Saturn/Jupiter angle crossings with labels and a reference-age indicator. It explicitly contrasts with calculate_saturn_jupiter_cycles (exact tables) and calculate_house_ingresses, so an agent can distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this for a visual overview and names the two alternatives for exact data and house ingresses. It also states the required inputs (exact local birth date/time, confirmed location_id), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_secondary_progressions_chartARead-onlyIdempotent
Render secondary progressions as a 760px bi-wheel PNG shown to the user (natal inside, progressed outside). Same inputs as calculate_secondary_progressions.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | ||
| day | No | ||
| fold | No | ||
| hour | No | ||
| year | No | ||
| as_of | No | ||
| month | No | ||
| minute | No | ||
| location_id | No | ||
| house_system | No | ||
| angle_progression_method | No | naibod |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, non-destructive, and closed-world. The description adds meaningful output behavior beyond that: the image is a 760px bi-wheel PNG with natal on the inside and progressed on the outside, which tells the agent what visually gets produced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core action and output format. No wasted language, and the visual layout detail is immediately useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a render tool with no output schema, the description does explain the output medium and visual structure well. However, it leaves significant gaps around how the PNG is delivered, and with 11 undocumented parameters it relies almost entirely on the sibling tool for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 11 parameters, so the description carries the full semantic burden. It only says 'Same inputs as calculate_secondary_progressions,' which is a cross-reference rather than an explanation, and it clarifies none of the individual fields such as age, as_of, fold, location_id, house_system, or angle_progression_method.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (render), resource (secondary progressions), output format (760px bi-wheel PNG), and visual layout (natal inside, progressed outside). It also distinguishes itself from calculate_secondary_progressions by emphasizing that the result is shown to the user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Same inputs as calculate_secondary_progressions' implies this is the display counterpart to the calculation tool, and 'shown to the user' hints at usage context. However, it never explicitly says when to call this versus calculate_secondary_progressions or what alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_sky_chartARead-onlyIdempotent
Render a 720px PNG tropical Placidus wheel for one moment and selected place, with chart positions calculated to minute precision. No birth data is needed. Use calculate_sky_chart for structured chart data, get_current_sky for sky positions without local houses, or render_transit_biwheel to compare the sky with a natal chart. Requires confirmed location_id; moment defaults to now. Returns an inline MCP PNG after calculating and validating its source; no prior calculation call is required. stdio has no public image URL and the client must support image content. Missing inputs return needs_clarification without an image; invalid inputs or unavailable rendering return an error without an image.
| Name | Required | Description | Default |
|---|---|---|---|
| moment | No | Chart instant in ISO 8601 with timezone offset, for example 2026-10-25T12:00:00+08:00 or a Z suffix. Omit for now; chart calculation uses local time truncated to the minute. | |
| location_id | No | Required confirmed chart-place ID from search_birthplace or resolve_birth_coordinates, not a city name. Supplies coordinates and timezone for Placidus houses; need not be a birthplace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it discloses that the return is an inline MCP PNG, that stdio has no public image URL, that the client must support image content, and how failure modes behave (needs_clarification without an image for missing inputs; error without an image for invalid inputs or unavailable rendering). This is unusually rich behavioral context for a rendering tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core capability is front-loaded in the first sentence, and the remaining sentences each carry distinct information (alternatives, prerequisites, return channel, failure modes). It is a dense single paragraph rather than a structured list, which slightly hurts scanability, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates fully by describing the returned inline PNG and the stdio limitation. Combined with alternatives, prerequisites, and error semantics, an agent has everything needed to call this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds meaning on top by stating that location_id must be 'confirmed' even though the schema marks it optional (required parameters: 0), and by noting the moment default. The ISO/millisecond truncation detail lives in the schema, so no further credit is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus concrete output attributes: 'Render a 720px PNG tropical Placidus wheel for one moment and selected place, with chart positions calculated to minute precision.' That level of specificity (format, size, zodiac, house system, precision) lets an agent distinguish it from calculate_sky_chart and render_transit_biwheel immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: calculate_sky_chart for structured data, get_current_sky for sky positions without local houses, render_transit_biwheel to compare against a natal chart. It also states prerequisites ('Requires confirmed location_id; moment defaults to now') and that no prior calculation call is needed, which is exactly the guidance an agent needs before invoking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_solar_arc_biwheelARead-onlyIdempotent
Render a PNG biwheel with natal positions inside and true solar-arc directed positions outside. Use for a visual at one age; use calculate_solar_arc for event tables or render_transit_biwheel for actual transits. Requires exact local birth date/time and a confirmed birthplace location_id. age takes precedence over the age derived from as_of; the selected age must be 0-80. Returns an inline MCP PNG after calculating and validating its source; no prior calculation call is required. stdio has no public image URL and the client must support image content. Missing inputs return needs_clarification without an image; invalid inputs or unavailable rendering return an error without an image.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Directed age in years, 0-80 inclusive. Takes precedence over as_of for wheel positions. Omit to derive age from the reference date; out-of-range derived ages are rejected, not clipped. | |
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| as_of | No | Reference date YYYY-MM-DD, default current UTC date at 12:00 UTC. Used to derive age only when age is omitted; if supplied it must be valid even with explicit age. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: it returns an inline MCP PNG after calculating and validating its source, requires no prior calculation call, has no public image URL under stdio, requires image-capable clients, and returns clarification or error outcomes without an image. No behavior contradicts the read-only, idempotent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and sibling alternatives are front-loaded, followed by prerequisites, precedence rules, return behavior, client requirements, and error modes. Every sentence adds operational value for a complex rendering tool, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given nine parameters, complete schema coverage, no output schema, and read-only annotations, the description supplies the missing behavioral context: output format, calculation behavior, client requirements, and failure modes. An agent has enough information to call it correctly or route to an alternative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all nine parameters in detail. The description reinforces exact birth data and age precedence, but those points are already covered by the schema's parameter descriptions, so it does not add significant new parameter-level semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: renders a PNG biwheel with natal positions inside and true solar-arc directed positions outside. It also distinguishes itself from siblings by naming calculate_solar_arc and render_transit_biwheel as alternatives for different use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it for a visual at one age, then names alternatives for event tables and actual transits. It also covers prerequisites, age precedence, return behavior, client image support, and error outcomes, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_solar_return_chartARead-onlyIdempotent
Render a 720px PNG solar-return wheel for target_year. Use for the return chart image; use calculate_solar_return for the exact return moment, chart data and natal overlay, or render_lunar_return_chart for a lunar return. Requires exact local birth date/time, birthplace location_id, target_year, explicit residence_location_id and house_system. The residence is the user-chosen return location; never silently reuse the birthplace. Returns an inline MCP PNG after calculating and validating its source; no prior calculation call is required. stdio has no public image URL and the client must support image content. Missing inputs return needs_clarification without an image; invalid inputs or unavailable rendering return an error without an image.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. | |
| target_year | No | Required target year of the solar return; distinct from the birth year. Confirm the year with the user. | |
| house_system | No | Required explicit house-system choice: placidus or whole_sign. Reuse a confirmed user choice; omission requests clarification. | |
| residence_location_id | No | Required user-confirmed return/residence location ID from search_birthplace or resolve_birth_coordinates. Use the birthplace ID only if the user explicitly chooses that location. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description still adds substantial behavior beyond them: an inline MCP PNG is returned, no public image URL over stdio, the client must support image content, and missing inputs yield needs_clarification without an image while invalid/unavailable rendering yields an error without an image. Those failure-mode semantics are exactly what an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the sibling routing are front-loaded in the first sentence, and each subsequent sentence carries distinct information (prerequisites, return format, failure modes). It is dense and slightly run-on, but there is no filler sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter rendering tool with no output schema, the description covers prerequisites, the critical residence-vs-birthplace rule, the return artifact type, and clarification/error behavior. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds a genuine decision rule not merely restated — the residence must be user-chosen and the birthplace must never be silently reused, plus the emphasis that target_year differs from birth year. It is redundant with the schema on house_system and the individual date fields, keeping it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource, output format and scope: "Render a 720px PNG solar-return wheel for target_year." It also names the two nearest siblings (calculate_solar_return, render_lunar_return_chart) so the agent can separate this from both the data-calculation tool and the lunar equivalent without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between alternatives: use calculate_solar_return for the moment/data/natal overlay, this tool for the image, render_lunar_return_chart for lunar. It also states prerequisites (exact birth date/time, birthplace, target_year, residence_location_id, house_system) and the rule that prior calculation is not required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_transit_biwheelARead-onlyIdempotent
Render a PNG biwheel with natal positions inside, transiting planets outside and cross-chart aspects at one moment. Use get_transit_snapshot for structured positions/aspects, calculate_transits_to_natal for exact event dates over a range, or render_sky_chart for a standalone sky wheel. Requires exact local birth date/time and confirmed birthplace location_id; moment selects the transit instant, not a second birth. Returns an inline MCP PNG after calculating and validating its source; no prior calculation call is required. stdio has no public image URL and the client must support image content. Missing inputs return needs_clarification without an image; invalid inputs or unavailable rendering return an error without an image.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month, valid for the supplied year and month in the birthplace local civil calendar. | |
| fold | No | For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess. | |
| hour | No | Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time. | |
| year | No | Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data. | |
| month | No | Birth month, 1-12, in the birthplace local civil calendar. | |
| minute | No | Exact birth minute, 0-59, in birthplace local civil time. | |
| moment | No | Transit instant in ISO 8601 with timezone offset, for example 2026-10-25T12:00:00+08:00 or a Z suffix. Omit for now. Distinct from the local civil birth date and time. | |
| location_id | No | Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/idempotent/no-destruction; the description adds the parts an agent cannot infer: an inline PNG is returned without a prior calculation call, stdio yields no public image URL so the client must render image content, and missing versus invalid inputs produce different non-image outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the artifact, then routing, then prerequisites, then return behavior. Dense but nearly every clause carries distinct information; a slightly lighter touch on the repeated 'do not guess' emphasis would tighten it without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a rendering tool with no output schema, it covers what comes back (inline PNG), what prevents a result (missing/invalid inputs, unsupported client), and what is needed to start (exact birth date/time, confirmed birthplace, transit moment). Nothing an agent needs is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so field-level docs are already strong, but the description adds a genuinely non-obvious disambiguation: 'moment' is the transit instant, not a second birth date. It also flags that the birth time must be exact and the location must be a confirmed location_id rather than a city name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: a PNG biwheel with natal positions inside, transiting planets outside, and cross-chart aspects at one moment. It immediately separates itself from the structured-data siblings and from render_sky_chart's standalone wheel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names three alternatives (get_transit_snapshot, calculate_transits_to_natal, render_sky_chart) and the exact condition each one serves, plus the prerequisite chain (search_birthplace / resolve_birth_coordinates) and the clarification path when inputs are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_birth_coordinatesARead-onlyIdempotent
Resolve WGS84 decimal latitude and longitude into a reusable location_id and IANA timezone. Use this when the user gives coordinates instead of a city; then pass location_id to any natal, timing, relationship or chart tool. Daylight-saving offset is calculated later from the birth date and local time. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: lat, lng, location_id, timezone. Use these exact names. | |
| latitude | Yes | ||
| longitude | Yes | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the readOnly/idempotent annotations: the server first runs checks, results must be verified with verify_calculation_claims and reverified after correcting contradicted facts, and psychological interpretations are out of scope. The description also discloses that timezone handling is deferred rather than resolved here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and the later sentences carry real value (workflow ordering, truncation semantics). Some of the detail_level/include prose duplicates the schema descriptions instead of adding to them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description names the key returned fields (location_id, timezone) and the schema's include list enumerates the selectable fields, so an agent knows what the response contains and how to continue. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the free-text description compensates by explaining that detail_level=summary previews object/nested rows (up to five), keeps complete scalar lists, marks truncation, and that include selects top-level content fields. That adds some meaning beyond the schema, though it largely restates the property descriptions and says little about latitude/longitude ranges or validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: converts WGS84 decimal latitude/longitude into a reusable location_id and IANA timezone. This clearly separates it from the city-based sibling search_birthplace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it 'when the user gives coordinates instead of a city' (implying the city-based alternative), and says to pass the resulting location_id to natal, timing, relationship, or chart tools. It also notes that DST offset is resolved later from the birth date and local time, not here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_planetary_aspectsBRead-onlyIdempotent
Scan exact planetary aspects over UTC inclusive date ranges (1800–2399, max 200 years). Arbitrary supported body pair and angles [0,180]; tropical geocentric apparent Swiss Ephemeris, mean nodes by default. Uses bracketed roots and relative-speed station splits. mode=orb_window returns clipped entry/exit windows plus exact events; orb_deg is separate from exact. output_precision: exact_datetime, date, year_summary. timezone_name is optional IANA zone. Cycle IDs and hit indices are query-local directed-angle groups, not universal cycle numbering. See docs/planetary-aspect-scan.md. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | exact | |
| aspects | No | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: event_count, events, windows, year_summary. Use these exact names. | |
| orb_deg | No | ||
| end_date | Yes | ||
| planet_a | Yes | ||
| planet_b | Yes | ||
| start_date | Yes | ||
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
| timezone_name | No | ||
| output_precision | No | exact_datetime |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), yet the description adds real substance: Swiss Ephemeris tropical geocentric apparent basis, mean nodes as default, bracketed-root solving with relative-speed station splits, server-side checks before results return, and query-local (non-universal) cycle IDs. This is well beyond annotation coverage; only the response shape/pagination remains implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the scope and semantics, which is good, but the prose is dense run-on text mixing mechanics, cycle-ID caveats, verification workflow, and result-shaping options. Roughly a third of the words are the verify_calculation_claims protocol, which crowds out parameter detail the schema doesn't supply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, multi-mode tool with no output schema and 18% schema coverage, the description covers mechanics, precision options, and result shaping, but not output field names (only 'windows', 'year_summary' appear in the include schema), body-name vocabulary, or date string formats. An agent could call it but would be guessing on inputs and re-reading results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 18%, so the description must carry the load, and it explains mode, orb_deg ('separate from exact'), output_precision values, timezone_name as an optional IANA zone, detail_level=summary vs include, and the [0,180] aspect angle bound. But the four required parameters are essentially untouched: planet_a/planet_b naming is only 'arbitrary supported body pair' with no enumerations, and start_date/end_date format is never stated. That leaves the most critical inputs underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Scan exact planetary aspects') and pins the scope tightly: UTC inclusive ranges, years 1800–2399, 200-year cap. It never names a sibling such as calculate_aspect_windows or calculate_transits_to_natal, so the agent can describe the tool but must infer which of several aspect/window tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers mode-level guidance implicitly ('mode=orb_window returns clipped entry/exit windows plus exact events') and a mandatory downstream step: call verify_calculation_claims before interpreting results. However it never states when to prefer this over the many sibling calculation tools, nor any prerequisites or exclusions beyond the date bounds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_birthplaceARead-onlyIdempotent
Search birthplace candidates and return canonical location IDs, regions and timezones. If supplied by the user, include country/state as City, Country or City, State, Country. One exact database-name match within an explicitly supplied verified region uses next_action=use_location_id; use it and state the selected city without asking again. next_action=ask_user means unresolved candidates: ask for the missing region or city/district choice, unless that exact location_id was already confirmed. Never choose by population or list order. Server checks run before successful results are returned. Before interpreting this data, call verify_calculation_claims with its unchanged calculation_reference and draft source-field claims. Correct contradicted facts and reverify before the final answer. Psychological interpretations are not checked. Optional detail_level=summary previews object/nested rows (up to five), preserves complete scalar membership lists, and marks truncation; include selects top-level content fields. Omit both for the original full result. Verification references always identify the complete checked calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| include | No | Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: options. Use these exact names. | |
| detail_level | No | full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation. | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description discloses next_action semantics, that server checks run before successful results are returned, that verification must happen before interpreting data, and how summary mode truncates nested rows while preserving scalar lists and verification references. These are substantive behavioral details an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and every major clause carries practical instructions. It is dense and somewhat run-on, with several workflow concepts packed into one block, and the line about psychological interpretations feels tangential to a birthplace search, but it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description provides enough to interpret next_action, understand summary truncation, and know verification references always point to the complete calculation. It still leaves some details implicit, such as matching behavior, result limits, and pagination, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds important query formatting guidance ('City, Country' or 'City, State, Country') as well as interaction rules for exact matches within verified regions. It also explains include and detail_level behavior, though much of that overlaps with the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Search birthplace candidates and return canonical location IDs, regions and timezones.' This clearly distinguishes the tool from chart-rendering and calculation siblings, and it states what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit handling for next_action=use_location_id and next_action=ask_user, including not asking again when a location ID is confirmed, and it warns never to choose by population or list order. It does not explicitly compare this tool against resolve_birth_coordinates or other alternatives, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_calculation_claimsARead-onlyIdempotent
Verify source-field claims from any registered calculation: classical/Jones roles, transits, directions, returns, relationship, time lords, releasing, sky and locations. Copy calculation_reference unchanged; submit exact JSON Pointer paths and values from the draft. Use complete flat event/role row objects to preserve planet, time and chart context. Use scalar values, scalar lists, flat row objects or lists of flat rows. For a nested object containing arrays (such as settings), submit separate exact paths for its scalar fields and scalar lists instead of the whole object. Server recomputes and checks the source before comparison. Fix contradicted claims and reverify; mark unverified claims. This checks submitted field values, NOT prose semantics, missing claims, psychological explanations or independent algorithm correctness.
| Name | Required | Description | Default |
|---|---|---|---|
| claims | Yes | ||
| reference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value beyond them: the server recomputes the source before comparison, the quote is echoed rather than semantically parsed, and there is a fix-then-reverify loop. It stops short of describing the response payload shape or limits such as the 100-claim cap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the copy-reference instruction, then progressive detail on value shapes and the exclusions last. The enumeration of calculation families is the one stretch that could be trimmed, but it scopes the tool usefully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers what an agent needs: inputs to echo verbatim, acceptable value shapes, what the server does (recompute and compare), the possible outcome classes (contradicted, unverified), and the follow-up actions for each. Nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level parameter description coverage is reported as 0%, so the description must carry meaning, and it does: it explains that paths are exact JSON Pointers into the source result, that adjacent role/time/planet fields should go in separate claims for context, and which value shapes are acceptable (scalars, scalar lists, flat rows, lists of flat rows) with explicit guidance against whole nested objects and fuzzy rounding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: verify source-field claims from a registered calculation, and enumerates the calculation families covered. It is distinguishable from render/calculate siblings, but does not explicitly contrast with the sibling verify_natal_claims, leaving the boundary implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage: copy calculation_reference unchanged, submit exact JSON Pointer paths and values from the draft, and after verification either fix contradicted claims and reverify or mark unverified claims. It also states clear exclusions (prose semantics, missing claims, psychological explanations, independent algorithm correctness), though it names no alternative tool explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_natal_claimsARead-onlyIdempotent
Verify natal sign, house, retrograde and aspect assertions against a fresh server calculation. Copy fact_reference unchanged from calculate_natal_chart; submit each assertion with its exact draft quote. Returns supported, contradicted or unverified plus source fields. Unsupported facts, other chart types and psychological interpretations are unverified. Quote text is echoed, not parsed: this does not validate an entire report or detect omitted claims. Fix contradicted claims before answering.
| Name | Required | Description | Default |
|---|---|---|---|
| claims | Yes | ||
| reference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing the verdict set (supported/contradicted/unverified), the caveat that quote text is echoed and not parsed, and the hard limits (does not validate an entire report or detect omitted claims). That last sentence prevents a costly misinterpretation of the tool's authority.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five tight sentences, front-loaded with the action, then prerequisites, then return values, then limitations, then the follow-up rule. No restatement of the name and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description names the three verdicts and mentions source fields, so an agent knows what comes back. Combined with the stated scope limits and the reference-provenance rule, nothing material for a correct invocation is missing (the 100-claim batch cap lives in the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported as 0%, so the description has to carry weight; it explains how 'reference' is sourced (copied unchanged from calculate_natal_chart) and how 'claims' should be submitted (each with its exact draft quote). It does not explain the claim fields kind/point/value/scope, which the schema does cover despite the coverage metric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (verify) and a precise resource (natal sign/house/retrograde/aspect assertions) checked against a fresh server calculation. The 'natal' qualifier plus the explicit list of supported claim kinds separates it from generic siblings like verify_calculation_claims, though it never names that sibling to close the loop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear workflow precondition ('Copy fact_reference unchanged from calculate_natal_chart') and explicit exclusions ('Unsupported facts, other chart types and psychological interpretations are unverified'), plus a follow-up instruction ('Fix contradicted claims before answering'). It stops short of routing non-natal cases to verify_calculation_claims by name, so the alternative-selection step is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
31 tool updates
v0.1.7- Changed
calculate_aspect_windows1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspect_count, aspects, location_id, moment. Use these exact names."
- Changed
calculate_classical_factors1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: jones_pattern, lots, moon_phase, planet_condition, sect, sect_light, sect_light_triplicity. Use these exact names."
- Changed
calculate_davison_chart1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, chart, midpoint_space_time. Use these exact names."
- Changed
calculate_house_ingresses1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: event_count, events. Use these exact names."
- Changed
calculate_house_rulers1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: houses. Use these exact names."
- Changed
calculate_lifetime_transit_summary1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: chapters, total_events, totals_by_aspect, totals_by_group, totals_by_target. Use these exact names."
- Changed
calculate_lots1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: lots, sect. Use these exact names."
- Changed
calculate_lunar_return1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: chart, focus, lunar_return, overlay_with_natal. Use these exact names."
- Changed
calculate_natal_chart1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, axes, house_cusps, planets. Use these exact names."
- Changed
calculate_natal_salience1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspect_dynamics, attention_layers, availability, candidate_planets, core_structures, evidence_index, evidence_matrix, focus_selection, global_distribution, house_ruler_links, interpretations, jones_view, method, planet_condition_assessments, planet_profiles, policy_comparison, priority_aspects, priority_configurations, priority_decisions, priority_planets, reading_plan, reception_facts, relationship_views, resource_checks, resource_decisions, schema_version, selection_audit, source_graph, supplementary_contacts, view_comparison. Use these exact names."
- Changed
calculate_natal_structure_graph1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, conditions, dispositor, facts, houses, interpretations, nodes, receptions, schema_version. Use these exact names."
- Changed
calculate_progressed_lunation1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, phase, timeline. Use these exact names."
- Changed
calculate_relationship_charts1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: a_planets_in_b_houses, b_planets_in_a_houses, composite_chart, composite_to_natal_aspects, synastry_aspects. Use these exact names."
- Changed
calculate_relationship_observation1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: activation_clusters, configuration_activations, configuration_bridges, configuration_memberships, contacts, hemisphere_backgrounds, house_overlays, house_ruler_comparisons, interpretations, natal_backgrounds, natal_configurations, natal_observation_candidates, observation_comparisons, observation_complex_links, observation_complexes, observation_paths, observation_review, observation_route_policy, overlay_contexts, relationship_context_observations, relationship_profiles, review_paths, scenario_observation_lenses, schema_version, source_geometry, special_contact_observations, structure_display, timing_observations. Use these exact names."
- Changed
calculate_relocation_chart1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: angular_shifts, aspects, axes, house_cusps, planets, relocation_location. Use these exact names."
- Changed
calculate_saturn_jupiter_cycles1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, aspects, current, jupiter_events, jupiter_phases, natal, range, saturn_events, saturn_phases, stats. Use these exact names."
- Changed
calculate_secondary_progressions1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: progressed_chart, progressed_ephemeris_date, progressed_to_natal_aspects. Use these exact names."
- Changed
calculate_sky_chart1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspects, axes, house_cusps, location, moment, moon_phase, planet_motion, planets. Use these exact names."
- Changed
calculate_solar_arc1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: aspect_matrix, axis_contacts_by_directed_points, cross_aspects_at_wheel_age, directed_axes_to_natal_points, directed_positions_at_wheel_age. Use these exact names."
- Changed
calculate_solar_return1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: chart, focus, monthly_moon_progressions, overlay_with_natal, solar_return. Use these exact names."
- Changed
calculate_time_lords2 fields changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: annual_profections, as_of, firdaria. Use these exact names." - changed
Input schema / properties / tradition / descriptionPrevious value: -"Firdaria tradition: abu_mashar (default), al_biruni or bonatti. Changes the Firdaria convention, not the selected profection house system."New value: +"Firdaria request name: abu_mashar (default), al_biruni or bonatti. This implementation maps al_biruni to abu_mashar rules (nodes last); bonatti moves the nodes after Mars for night births. Result tradition preserves the request; effective_tradition and tradition_note disclose the implemented rules. This alias is not a claim of historical equivalence. Profection house_system is independent."
- Changed
calculate_timeline_synthesis1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: engine_version, event_count, events, resonances. Use these exact names."
- Changed
calculate_transits_to_natal1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: event_count, events. Use these exact names."
- Changed
calculate_zodiacal_releasing1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, lots. Use these exact names."
- Changed
calculate_zodiacal_releasing_l41 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: as_of, level4, lot, parent_period. Use these exact names."
- Changed
get_current_sky1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: moon, moon_phase, planet_aspects_active, retrograde_planets, sun, timestamp, voc. Use these exact names."
- Changed
get_transit_snapshot1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: active_aspects_to_natal, moment, transit_positions. Use these exact names."
- Changed
resolve_birth_coordinates1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: lat, lng, location_id, timezone. Use these exact names."
- Changed
scan_planetary_aspects1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: event_count, events, windows, year_summary. Use these exact names."
- Changed
search_birthplace1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."New value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields. Known selectable fields: options. Use these exact names."
- Changed
verify_calculation_claims1 field changed- changed
Input schema / $defs / CalculationClaim / properties / value / descriptionPrevious value: -"Exact claimed source value, including row objects for events/roles. No fuzzy rounding or semantic interpretation."New value: +"Exact claimed source value. Use scalar values, scalar lists, flat row objects or lists of flat rows. For a nested object containing arrays (such as settings), submit separate exact paths for its scalar fields and scalar lists instead of the whole object. No fuzzy rounding or semantic interpretation."
6 tool updates
v0.1.3- Changed
calculate_progressed_lunation8 fields changed- added
Input schema / properties / as_of / descriptionAdded value: +"Reference date YYYY-MM-DD; omission uses the current UTC date. Evaluated at 12:00 UTC, not at local midnight." - added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
- Changed
calculate_time_lords10 fields changed- added
Input schema / properties / as_of / descriptionAdded value: +"Reference date YYYY-MM-DD; omission uses the current UTC date. Evaluated at 12:00 UTC, not at local midnight." - added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / house_system / descriptionAdded value: +"Required explicit choice: placidus or whole_sign. Selects the reported profection house system. Reuse a confirmed user choice; omission requests clarification." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / tradition / descriptionAdded value: +"Firdaria tradition: abu_mashar (default), al_biruni or bonatti. Changes the Firdaria convention, not the selected profection house system." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
- Changed
get_transit_snapshot8 fields changed- added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / moment / descriptionAdded value: +"Transit instant in ISO 8601 with timezone offset, for example 2026-10-25T12:00:00+08:00 or a Z suffix. Omit for now. Distinct from the local civil birth date and time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
- Changed
render_jones_pattern7 fields changed- added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
- Changed
render_sky_chart2 fields changed- added
Input schema / properties / location_id / descriptionAdded value: +"Required confirmed chart-place ID from search_birthplace or resolve_birth_coordinates, not a city name. Supplies coordinates and timezone for Placidus houses; need not be a birthplace." - added
Input schema / properties / moment / descriptionAdded value: +"Chart instant in ISO 8601 with timezone offset, for example 2026-10-25T12:00:00+08:00 or a Z suffix. Omit for now; chart calculation uses local time truncated to the minute."
- Changed
render_transit_biwheel8 fields changed- added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / moment / descriptionAdded value: +"Transit instant in ISO 8601 with timezone offset, for example 2026-10-25T12:00:00+08:00 or a Z suffix. Omit for now. Distinct from the local civil birth date and time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
5 tool updates
- Changed
calculate_house_rulers8 fields changed- added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / house_system / descriptionAdded value: +"Required explicit choice: placidus or whole_sign. Selects house cusps and placements, not traditional versus modern rulers; both ruler tracks are returned. Reuse a confirmed user choice." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
- Changed
calculate_solar_arc11 fields changed- added
Input schema / properties / age_from / descriptionAdded value: +"Start age in years. Must satisfy 0 <= age_from < age_to <= 80. Omit for max(0, selected wheel age minus 5)." - added
Input schema / properties / age_to / descriptionAdded value: +"End age in years, at most 80 and greater than age_from. Omit for min(80, selected wheel age plus 5)." - added
Input schema / properties / as_of / descriptionAdded value: +"Reference date YYYY-MM-DD, default current UTC date, evaluated at 12:00 UTC. Determines wheel age when wheel_age is omitted; that derived age is clipped to 0-80." - added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / wheel_age / descriptionAdded value: +"Optional directed-position age in years, 0-80. Overrides the age derived from as_of and centers omitted age-range bounds on this age; explicit age_from/age_to remain unchanged." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
- Changed
render_composite_chart2 fields changed- added
Input schema / properties / person_a / descriptionAdded value: +"First person: year, month, day, hour (0-23), minute (0-59) in birthplace local civil time, plus confirmed location_id from search_birthplace or resolve_birth_coordinates. All six are needed; fold is 0/1 only for a user-confirmed repeated DST time. Do not guess missing fields." - added
Input schema / properties / person_b / descriptionAdded value: +"Second person: complete year, month, day, hour (0-23), minute (0-59) and their own confirmed birthplace location_id, using local civil time. Request fold 0/1 for an ambiguous repeated DST time. Do not copy the first person's location by default."
- Changed
render_solar_arc_biwheel9 fields changed- added
Input schema / properties / age / descriptionAdded value: +"Directed age in years, 0-80 inclusive. Takes precedence over as_of for wheel positions. Omit to derive age from the reference date; out-of-range derived ages are rejected, not clipped." - added
Input schema / properties / as_of / descriptionAdded value: +"Reference date YYYY-MM-DD, default current UTC date at 12:00 UTC. Used to derive age only when age is omitted; if supplied it must be valid even with explicit age." - added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
- Changed
render_solar_return_chart10 fields changed- added
Input schema / properties / day / descriptionAdded value: +"Birth day of month, valid for the supplied year and month in the birthplace local civil calendar." - added
Input schema / properties / fold / descriptionAdded value: +"For a repeated local time at a DST rollback, ask the user to choose 0 (first occurrence) or 1 (second). Otherwise omit; never guess." - added
Input schema / properties / hour / descriptionAdded value: +"Exact birth hour, 0-23, in birthplace local civil time; do not substitute noon for an unknown time." - added
Input schema / properties / house_system / descriptionAdded value: +"Required explicit house-system choice: placidus or whole_sign. Reuse a confirmed user choice; omission requests clarification." - added
Input schema / properties / location_id / descriptionAdded value: +"Confirmed birthplace ID returned by search_birthplace or resolve_birth_coordinates; not a city name. Resolve ambiguous places before calling." - added
Input schema / properties / minute / descriptionAdded value: +"Exact birth minute, 0-59, in birthplace local civil time." - added
Input schema / properties / month / descriptionAdded value: +"Birth month, 1-12, in the birthplace local civil calendar." - added
Input schema / properties / residence_location_id / descriptionAdded value: +"Required user-confirmed return/residence location ID from search_birthplace or resolve_birth_coordinates. Use the birthplace ID only if the user explicitly chooses that location." - added
Input schema / properties / target_year / descriptionAdded value: +"Required target year of the solar return; distinct from the birth year. Confirm the year with the user." - added
Input schema / properties / year / descriptionAdded value: +"Birth year in the Gregorian calendar, using local civil time at the confirmed birthplace. Required for calculation; do not guess missing birth data."
31 tool updates
- Changed
calculate_aspect_windows2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_classical_factors2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_davison_chart2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_house_ingresses2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_house_rulers2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_lifetime_transit_summary2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_lots2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_lunar_return2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_natal_chart2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_natal_salience18 fields changed- added
Input schema / properties / axis_orb / descriptionAdded value: +"Maximum axis-contact orb in degrees, finite 0-10; ASC/MC use actual chart axes, with opposite-axis expressions merged." - added
Input schema / properties / day / descriptionAdded value: +"Local civil birth day; must form a valid date with year and month." - added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / distribution_points / descriptionAdded value: +"Points for element/modality distribution: ten planets, or ten plus available ASC and MC. Does not change ten-planet aspect motifs." - added
Input schema / properties / dynamics_days / descriptionAdded value: +"Bounded forward search horizon in days, integer 1-90. Searches the current aspect branch for its first exact contact and reports intervening stations/ingresses; no match means none found in this horizon." - added
Input schema / properties / fold / descriptionAdded value: +"For an ambiguous repeated local time, use 0 for the earlier occurrence or 1 for the later one after user confirmation. Otherwise omit." - added
Input schema / properties / hour / descriptionAdded value: +"Exact local civil birth hour, 0-23; not UTC. Do not substitute an unknown time." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields." - added
Input schema / properties / include_mc_ruler / descriptionAdded value: +"Include the MC sign ruler in identity candidates when MC is available; false keeps the default identity selection." - added
Input schema / properties / location_id / descriptionAdded value: +"Copy a confirmed ID from resolve_birth_coordinates or search_birthplace. It supplies coordinates and the IANA timezone; a person name does not replace it." - added
Input schema / properties / minute / descriptionAdded value: +"Exact local civil birth minute, 0-59." - added
Input schema / properties / month / descriptionAdded value: +"Local civil birth month, 1-12; interpreted with year and day." - added
Input schema / properties / orb_view / descriptionAdded value: +"Uniform inclusive major-aspect orb in degrees: 6 (default), 8 or 10. Applies to all five major aspects and ten planets." - added
Input schema / properties / reception_policy / descriptionAdded value: +"Choose dignity alone; dignity plus sign geometry; dignity plus a selected degree aspect; or dignity plus a selected degree aspect and applying status. These are distinct criteria, not efficacy judgments." - added
Input schema / properties / rulership / descriptionAdded value: +"Dispositor edge convention, traditional or modern; separate from the number of statistical origins." - added
Input schema / properties / scope / descriptionAdded value: +"Statistical origins: classical7 uses Sun through Saturn; ten adds Uranus, Neptune and Pluto. Does not remove the ten complete profiles or restrict which planets chains may traverse." - added
Input schema / properties / tight_orb / descriptionAdded value: +"Tight-aspect candidate threshold in degrees, finite 0-10 and no greater than orb_view. Does not discard other selected-view aspects." - added
Input schema / properties / year / descriptionAdded value: +"Exact birth year in the local civil calendar. Birth fields are required for a successful calculation; ask for missing data rather than guessing."
- Changed
calculate_natal_structure_graph2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_progressed_lunation2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_relationship_charts2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_relationship_observation2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_relocation_chart2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_saturn_jupiter_cycles2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_secondary_progressions2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_sky_chart2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_solar_arc2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_solar_return2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_time_lords2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_timeline_synthesis2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_transits_to_natal2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_zodiacal_releasing2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
calculate_zodiacal_releasing_l42 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
get_current_sky2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
get_transit_snapshot2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
render_saturn_jupiter_cycles10 fields changed- added
Input schema / properties / as_of / descriptionAdded value: +"Reference calendar date YYYY-MM-DD, evaluated at 12:00 UTC; omitted or empty uses the current UTC date. Sets the age indicator/current cycle position, not the chart start or end." - added
Input schema / properties / day / descriptionAdded value: +"Local civil birth day; must form a valid date with year and month." - added
Input schema / properties / fold / descriptionAdded value: +"For an ambiguous repeated local time, use 0 for the earlier occurrence or 1 for the later one after user confirmation. Otherwise omit." - added
Input schema / properties / hour / descriptionAdded value: +"Exact local civil birth hour, 0-23; not UTC. Do not substitute an unknown time." - added
Input schema / properties / location_id / descriptionAdded value: +"Copy a confirmed ID from resolve_birth_coordinates or search_birthplace. It supplies coordinates and the IANA timezone; a person name does not replace it." - added
Input schema / properties / max_age / descriptionAdded value: +"Lifetime window endpoint in years since birth: integer 1-120, default 80. Starts at birth; larger ranges require more calculation." - added
Input schema / properties / minute / descriptionAdded value: +"Exact local civil birth minute, 0-59." - added
Input schema / properties / month / descriptionAdded value: +"Local civil birth month, 1-12; interpreted with year and day." - added
Input schema / properties / person_name / descriptionAdded value: +"Optional display label printed on the image. It is not an identity lookup and does not replace birth fields or location_id." - added
Input schema / properties / year / descriptionAdded value: +"Exact birth year in the local civil calendar. Birth fields are required for a successful calculation; ask for missing data rather than guessing."
- Changed
resolve_birth_coordinates2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
scan_planetary_aspects2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
- Changed
search_birthplace2 fields changed- added
Input schema / properties / detail_level / descriptionAdded value: +"full returns complete calculation content. summary previews up to five object/nested rows per list, preserves scalar membership lists, and reports omitted counts. References still identify the full calculation." - added
Input schema / properties / include / descriptionAdded value: +"Optional 1-30 top-level content field names, each 1-80 characters. Omit to return all content. Control/provenance fields remain; unknown or control field names return invalid_input with available_fields."
48 tool updates
v0.1.0- First observed
calculate_aspect_windows - First observed
calculate_classical_factors - First observed
calculate_davison_chart - First observed
calculate_house_ingresses - First observed
calculate_house_rulers - First observed
calculate_lifetime_transit_summary - First observed
calculate_lots - First observed
calculate_lunar_return - First observed
calculate_natal_chart - First observed
calculate_natal_salience - First observed
calculate_natal_structure_graph - First observed
calculate_progressed_lunation - First observed
calculate_relationship_charts - First observed
calculate_relationship_observation - First observed
calculate_relocation_chart - First observed
calculate_saturn_jupiter_cycles - First observed
calculate_secondary_progressions - First observed
calculate_sky_chart - First observed
calculate_solar_arc - First observed
calculate_solar_return - First observed
calculate_time_lords - First observed
calculate_timeline_synthesis - First observed
calculate_transits_to_natal - First observed
calculate_zodiacal_releasing - First observed
calculate_zodiacal_releasing_l4 - First observed
get_agent_protocol - First observed
get_capabilities - First observed
get_current_sky - First observed
get_transit_snapshot - First observed
prepare_relationship_observation_note - First observed
recommend_workflow - First observed
render_composite_chart - First observed
render_davison_chart - First observed
render_jones_pattern - First observed
render_lunar_return_chart - First observed
render_natal_chart - First observed
render_relocation_chart - First observed
render_saturn_jupiter_cycles - First observed
render_secondary_progressions_chart - First observed
render_sky_chart - First observed
render_solar_arc_biwheel - First observed
render_solar_return_chart - First observed
render_transit_biwheel - First observed
resolve_birth_coordinates - First observed
scan_planetary_aspects - First observed
search_birthplace - First observed
verify_calculation_claims - First observed
verify_natal_claims
TDQS
Scored across 48 tools
Several clusters share the same domain and require very long descriptions to separate, especially natal variants (calculate_natal_chart, calculate_natal_structure_graph, calculate_natal_salience, calculate_classical_factors), transit/sky/aspect tools, and relationship chart tools. The descriptions do differentiate them, but with 48 tools the boundaries are easy to misselect in practice.
Most names follow a clear verb_noun pattern with strong calculate_* and render_* families. Minor deviations exist, such as render tools sometimes adding _chart while their calculation counterparts do not, but the overall convention is predictable.
48 tools is excessive for a single MCP server and far above the practical 3–15 range. Many specialized calculation and rendering tools could be consolidated or parameterized rather than exposed as separate endpoints.
Coverage is broad across natal work, transits, returns, progressions, relationship charts, time-lord techniques, sky calculations, rendering, verification, and meta-guidance. Minor gaps remain, such as renderers for some specialized techniques and no standalone composite calculation tool, but the core lifecycle is well covered.
Maintenance
Related MCP Connectors
Ephemeris-grade natal charts, current transits, zodiac sign profiles. No API key.
Western, Vedic, and Chinese astrology calculations, charts, forecasts, and geocoding.
Your natal chart, forecasts, synastry and astromap from NASA/JPL-grade ephemeris data
1Astrology charts, transits and eclipses from NASA JPL data, 13,200 BC to AD 17,191. Free, no key.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenance31 deterministic utility tools over one public endpoint: image conversion and lossless EXIF/metadata stripping, App Store screenshot/icon/favicon generation, WCAG and OKLCH colour maths, .strings and provisioning-profile checks, plus TDEE, recipe and plant calculators. No API key, no account, no model calls.ISC
- AlicenseAqualityBmaintenanceEnables AI agents to perform exact, reproducible mechanical computation — text diffing, hashing, JSON querying, calendar arithmetic, deadline-bounded regex extraction, CSV parsing, similarity scoring, unit and base conversion — instead of relying on probabilistic guessing. Runs dependency-free, read-only and offline over stdio, with schema validation and hard caps on every operation so no call can hang the client.1541 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables an AI client to manage candidate profiles and job postings stored in a local PostgreSQL database, match them deterministically, and generate tailored resume and cover-letter PDFs in English, French, German, and generic formats. It runs over stdio or a loopback HTTP endpoint with a bearer token, exposing 34 tools by default plus opt-in tools for imports, link fetching, deletions, and document export.1MIT
- AlicenseNot gradedqualityBmaintenanceA standalone stdio MCP server that exposes 13 resources, 3 prompts and 7 tools for assembling interactive, replayable HTML interfaces such as calculators, charts, maps, flowcharts and small apps. It returns the generated HTML document for the calling client to decide whether and how to display.68 npmMIT