ether-to-astro 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.github/ISSUE_TEMPLATE/bug-report.yml +87 -0
  2. package/.github/ISSUE_TEMPLATE/capability-request.yml +117 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. package/.github/ISSUE_TEMPLATE/paper-cut.yml +59 -0
  5. package/.github/pull_request_template.md +1 -0
  6. package/AGENTS.md +32 -0
  7. package/DEVELOPER.md +78 -0
  8. package/README.md +117 -76
  9. package/SETUP.md +91 -44
  10. package/dist/astro-service.d.ts +51 -2
  11. package/dist/astro-service.js +660 -56
  12. package/dist/cli.js +31 -0
  13. package/dist/entrypoint.d.ts +13 -0
  14. package/dist/entrypoint.js +78 -0
  15. package/dist/ephemeris.d.ts +15 -0
  16. package/dist/ephemeris.js +33 -0
  17. package/dist/formatter.d.ts +5 -1
  18. package/dist/formatter.js +4 -1
  19. package/dist/index.d.ts +2 -1
  20. package/dist/index.js +63 -114
  21. package/dist/loader.d.ts +1 -1
  22. package/dist/loader.js +61 -23
  23. package/dist/mcp-alias.d.ts +2 -0
  24. package/dist/mcp-alias.js +8 -0
  25. package/dist/time-utils.d.ts +8 -0
  26. package/dist/time-utils.js +16 -0
  27. package/dist/tool-registry.js +111 -5
  28. package/dist/tool-result.d.ts +8 -0
  29. package/dist/tool-result.js +39 -0
  30. package/dist/types.d.ts +79 -1
  31. package/docs/product/adrs/0001-mcp-vs-skill-boundary.md +96 -0
  32. package/docs/product/architecture-boundaries.md +223 -0
  33. package/docs/product/product-tenets.md +174 -0
  34. package/docs/releases/1.2.0-draft.md +48 -0
  35. package/package.json +6 -6
  36. package/skills/.curated/daily-brief/SKILL.md +75 -0
  37. package/skills/.curated/electional-overlay/SKILL.md +67 -0
  38. package/skills/.curated/weekly-overview/SKILL.md +73 -0
  39. package/skills/.system/write-skill/SKILL.md +90 -0
  40. package/src/astro-service.ts +861 -60
  41. package/src/cli.ts +84 -0
  42. package/src/entrypoint.ts +118 -0
  43. package/src/ephemeris.ts +44 -0
  44. package/src/formatter.ts +13 -1
  45. package/src/index.ts +77 -121
  46. package/src/loader.ts +69 -25
  47. package/src/mcp-alias.ts +10 -0
  48. package/src/time-utils.ts +18 -0
  49. package/src/tool-registry.ts +129 -9
  50. package/src/tool-result.ts +44 -0
  51. package/src/types.ts +91 -1
  52. package/tests/unit/astro-service.test.ts +751 -5
  53. package/tests/unit/cli-commands.test.ts +13 -0
  54. package/tests/unit/entrypoint.test.ts +67 -0
  55. package/tests/unit/error-mapping.test.ts +20 -0
  56. package/tests/unit/formatter.test.ts +6 -0
  57. package/tests/unit/tool-registry.test.ts +114 -2
  58. package/setup.sh +0 -21
@@ -0,0 +1,87 @@
1
+ name: Bug report
2
+ description: Report incorrect, misleading, lossy, or contract-drift behavior.
3
+ title: "[Bug]: "
4
+ labels:
5
+ - bug
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Use this template when the current behavior is wrong, misleading, lossy, or does not match docs.
11
+
12
+ - type: dropdown
13
+ id: surface
14
+ attributes:
15
+ label: Affected surface
16
+ options:
17
+ - MCP
18
+ - CLI
19
+ - Docs
20
+ - Charts / rendering
21
+ - Validation / tests
22
+ - Mixed / not sure
23
+ validations:
24
+ required: true
25
+
26
+ - type: textarea
27
+ id: current
28
+ attributes:
29
+ label: Current behavior
30
+ description: What happens today?
31
+ validations:
32
+ required: true
33
+
34
+ - type: textarea
35
+ id: expected
36
+ attributes:
37
+ label: Expected behavior
38
+ description: What should happen instead?
39
+ validations:
40
+ required: true
41
+
42
+ - type: textarea
43
+ id: impact
44
+ attributes:
45
+ label: User impact
46
+ description: Why does this matter in practice?
47
+ placeholder: This causes incorrect astrology, misleading UX, or broken workflows because...
48
+ validations:
49
+ required: true
50
+
51
+ - type: textarea
52
+ id: repro
53
+ attributes:
54
+ label: Steps to reproduce
55
+ description: Include tool calls, CLI commands, or input parameters.
56
+ placeholder: |
57
+ 1. Call `...`
58
+ 2. With input `...`
59
+ 3. Observe `...`
60
+ validations:
61
+ required: true
62
+
63
+ - type: textarea
64
+ id: context
65
+ attributes:
66
+ label: Relevant chart/date/timezone context
67
+ description: Add sanitized astrology context if it matters.
68
+ placeholder: Date, timezone, house system, location, planet categories, days_ahead, etc.
69
+
70
+ - type: textarea
71
+ id: docs_drift
72
+ attributes:
73
+ label: Docs or contract drift
74
+ description: If docs/tool descriptions are involved, note the mismatch here.
75
+
76
+ - type: textarea
77
+ id: acceptance
78
+ attributes:
79
+ label: Fix acceptance criteria
80
+ description: What would make this bug fixed?
81
+ placeholder: |
82
+ - Tool docs say...
83
+ - Response no longer drops...
84
+ - Validation covers...
85
+ validations:
86
+ required: true
87
+
@@ -0,0 +1,117 @@
1
+ name: Capability request
2
+ description: Request a new feature, MCP primitive, skill, or reporting capability.
3
+ title: "[Capability]: "
4
+ labels:
5
+ - feature
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Use this template for new capabilities across MCP, CLI, skills, or docs.
11
+
12
+ Before filing, check:
13
+ - `docs/product/product-tenets.md`
14
+ - `docs/product/architecture-boundaries.md`
15
+ - whether this belongs in MCP, a skill, or docs
16
+
17
+ - type: dropdown
18
+ id: surface
19
+ attributes:
20
+ label: Recommended surface
21
+ description: Where should this capability primarily live?
22
+ options:
23
+ - MCP
24
+ - Skill
25
+ - CLI
26
+ - Docs
27
+ - Mixed / not sure
28
+ validations:
29
+ required: true
30
+
31
+ - type: dropdown
32
+ id: type
33
+ attributes:
34
+ label: Capability type
35
+ options:
36
+ - Feature
37
+ - Gap
38
+ - Skill enhancement
39
+ - Docs enhancement
40
+ - RFC / decision needed
41
+ validations:
42
+ required: true
43
+
44
+ - type: textarea
45
+ id: problem
46
+ attributes:
47
+ label: Problem statement
48
+ description: What is missing or hard today? Write this like a PM problem statement.
49
+ placeholder: The current product can do X, but it cannot do Y, which blocks Z.
50
+ validations:
51
+ required: true
52
+
53
+ - type: textarea
54
+ id: user_story
55
+ attributes:
56
+ label: User story
57
+ description: Use the format “As a..., I want..., so that...”
58
+ placeholder: As a skill author, I want...
59
+ validations:
60
+ required: true
61
+
62
+ - type: textarea
63
+ id: value
64
+ attributes:
65
+ label: Why this matters
66
+ description: What user outcome or product goal does this unlock?
67
+ placeholder: This matters because...
68
+ validations:
69
+ required: true
70
+
71
+ - type: textarea
72
+ id: determinism
73
+ attributes:
74
+ label: Determinism and boundary check
75
+ description: Explain whether the proposed output is deterministic for the same inputs, and why it belongs in MCP, a skill, or another layer.
76
+ placeholder: The output is deterministic because... It belongs in MCP/Skill because...
77
+ validations:
78
+ required: true
79
+
80
+ - type: textarea
81
+ id: proposed_scope
82
+ attributes:
83
+ label: Proposed scope
84
+ description: What should this include? Keep it concrete.
85
+ placeholder: Add a new endpoint or mode that returns...
86
+ validations:
87
+ required: true
88
+
89
+ - type: textarea
90
+ id: acceptance
91
+ attributes:
92
+ label: Acceptance criteria
93
+ description: Flat list is fine. Focus on observable outcomes.
94
+ placeholder: |
95
+ - A client can...
96
+ - The response includes...
97
+ - Docs explain...
98
+ validations:
99
+ required: true
100
+
101
+ - type: textarea
102
+ id: examples
103
+ attributes:
104
+ label: Example input/output or workflow
105
+ description: Provide a tool call, user flow, or report snippet if helpful.
106
+
107
+ - type: textarea
108
+ id: dependencies
109
+ attributes:
110
+ label: Dependencies or related issues
111
+ description: Link related issues or note prerequisite work.
112
+
113
+ - type: textarea
114
+ id: non_goals
115
+ attributes:
116
+ label: Non-goals or constraints
117
+ description: What should this issue avoid doing?
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Product triage backlog
4
+ url: https://github.com/unsalted/ether-to-astro/blob/main/docs/product/product-tenets.md
5
+ about: Start here for product boundaries and MCP-vs-skill guidance.
@@ -0,0 +1,59 @@
1
+ name: Paper-cut
2
+ description: Report small UX, API, formatting, or workflow friction that should be easy to improve.
3
+ title: "[Paper-cut]: "
4
+ labels:
5
+ - paper-cut
6
+ body:
7
+ - type: dropdown
8
+ id: surface
9
+ attributes:
10
+ label: Affected surface
11
+ options:
12
+ - MCP
13
+ - CLI
14
+ - Docs
15
+ - Skill workflow
16
+ - Mixed / not sure
17
+ validations:
18
+ required: true
19
+
20
+ - type: textarea
21
+ id: friction
22
+ attributes:
23
+ label: Current friction
24
+ description: What is awkward or annoying today?
25
+ validations:
26
+ required: true
27
+
28
+ - type: textarea
29
+ id: desired
30
+ attributes:
31
+ label: Desired improvement
32
+ description: What small change would make this noticeably better?
33
+ validations:
34
+ required: true
35
+
36
+ - type: textarea
37
+ id: workaround
38
+ attributes:
39
+ label: Current workaround
40
+ description: How are you working around it now?
41
+
42
+ - type: textarea
43
+ id: user_story
44
+ attributes:
45
+ label: User story
46
+ description: Optional but helpful. Use “As a..., I want..., so that...”
47
+
48
+ - type: textarea
49
+ id: acceptance
50
+ attributes:
51
+ label: Acceptance criteria
52
+ description: Keep this small and concrete.
53
+ placeholder: |
54
+ - Response includes...
55
+ - Docs show...
56
+ - A client no longer needs to...
57
+ validations:
58
+ required: true
59
+
@@ -14,3 +14,4 @@
14
14
  - [ ] Scope is focused and avoids unrelated churn
15
15
  - [ ] Tests were added or updated when behavior changed
16
16
  - [ ] Docs were updated when workflow or interfaces changed
17
+ - [ ] This change respects the MCP vs skill boundary in `docs/product/product-tenets.md` and `docs/product/adrs/0001-mcp-vs-skill-boundary.md`
package/AGENTS.md CHANGED
@@ -98,6 +98,38 @@ Defined in `tests/validation/utils/tolerances.ts`:
98
98
  - Preferred commit types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `build`, `ci`.
99
99
  - Keep commits scoped to one coherent change whenever possible.
100
100
 
101
+ ## Request Triage Guidance
102
+ - When responding to bug reports, feature requests, or product-boundary questions, consult these docs first:
103
+ - `docs/product/product-tenets.md`
104
+ - `docs/product/architecture-boundaries.md`
105
+ - `docs/product/adrs/0001-mcp-vs-skill-boundary.md`
106
+ - `docs/product/post-iteration-2-triage.private.md` if present locally
107
+ - Use those docs to classify the request before proposing implementation:
108
+ - `bug` for incorrect, lossy, misleading, or contract-drift behavior
109
+ - `feature` for reusable product capability
110
+ - `paper-cut` for small interface or workflow friction
111
+ - `skill` when the work is primarily synthesis, formatting, ranking, or preference-aware orchestration
112
+ - `MCP` when the work is deterministic or mostly deterministic, computational, reusable, and risky to reconstruct client-side
113
+ - Apply the determinism rule explicitly:
114
+ - deterministic and generic astro computation is a strong candidate for MCP
115
+ - deterministic but policy-heavy or personalized workflow synthesis still belongs in a skill
116
+ - If a competent LLM can solve the request in one or two calls using stable MCP primitives, prefer keeping it out of MCP unless there is strong evidence the pattern should become a reusable primitive.
117
+ - For incoming product requests, prefer extending an existing tool with flags, fields, modes, or range support before proposing a new narrowly scoped MCP tool.
118
+
119
+ ## Writing Skills
120
+ - When a request is classified as a `skill`, default the deliverable to a concrete `SKILL.md` or equivalent workflow spec, not a broad product narrative.
121
+ - Repo-owned `SKILL.md` files should follow the Agent Skills spec, including YAML frontmatter with at least `name` and `description`.
122
+ - Treat repo-owned skills as boring, compliant instruction bundles:
123
+ - clear purpose
124
+ - required inputs and assumptions
125
+ - exact MCP/tools to call
126
+ - output shape
127
+ - boundaries and non-goals
128
+ - Prefer one or two stable MCP calls plus synthesis over embedding custom astro math, hidden heuristics, or pseudo-tool contracts in the skill.
129
+ - Keep deterministic astro facts in MCP and user-specific ranking, emphasis, and interpretation in the skill.
130
+ - Do not treat every skill idea in product docs or issues as a committed repo artifact. Many skill ideas are incubation examples unless explicitly promoted.
131
+ - If authoring or revising a skill, prefer following the repo-local skill authoring guidance in `skills/.system/write-skill/SKILL.md`.
132
+
101
133
  ## Release Governance
102
134
  - `main` is PR-only and branch-protected; do not push directly.
103
135
  - Use Conventional Commits / commitizen-style messages for all commits.
package/DEVELOPER.md ADDED
@@ -0,0 +1,78 @@
1
+ # Developer Guide
2
+
3
+ This guide is for contributors working in the repository.
4
+
5
+ For product setup and end-user usage, see [SETUP.md](/Users/salted/Code/astro-mcp/SETUP.md).
6
+
7
+ ## Local Repo Setup
8
+
9
+ Requirements:
10
+
11
+ - Node.js 22+
12
+
13
+ Install dependencies:
14
+
15
+ ```bash
16
+ npm install
17
+ ```
18
+
19
+ Build the local checkout:
20
+
21
+ ```bash
22
+ npm run build
23
+ ```
24
+
25
+ Use the local CLI after building:
26
+
27
+ ```bash
28
+ npm run start:cli -- --help
29
+ ```
30
+
31
+ ## Quality Gates
32
+
33
+ Routine merge gate:
34
+
35
+ ```bash
36
+ npm run quality:gate
37
+ ```
38
+
39
+ This runs:
40
+
41
+ - `npm run build`
42
+ - `npm run lint`
43
+ - `npm test -- --run`
44
+
45
+ Targeted validation for high-risk astrology engine changes:
46
+
47
+ ```bash
48
+ npm run validate:astro
49
+ ```
50
+
51
+ ## Contributor Contract
52
+
53
+ - Keep changes focused and avoid unrelated churn in the same diff.
54
+ - Treat Biome as the source of truth for formatting, import order, and linting.
55
+ - Use conventional commit messages: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `build`, `ci`.
56
+ - Keep PR descriptions short and explicit about what changed and how it was verified.
57
+ - Respect the MCP-vs-skill boundary documented in:
58
+ - [docs/product/product-tenets.md](/Users/salted/Code/astro-mcp/docs/product/product-tenets.md)
59
+ - [docs/product/architecture-boundaries.md](/Users/salted/Code/astro-mcp/docs/product/architecture-boundaries.md)
60
+ - [docs/product/adrs/0001-mcp-vs-skill-boundary.md](/Users/salted/Code/astro-mcp/docs/product/adrs/0001-mcp-vs-skill-boundary.md)
61
+
62
+ ## Technical Notes
63
+
64
+ - Engine: native Swiss Ephemeris via Node `sweph` bindings
65
+ - `sweph` is pinned to an exact version to keep validation fixtures and numerical baselines stable
66
+ - Primary accuracy mode uses Swiss Ephemeris data files
67
+ - `EPHEMERIS_VERSION=moshier` is supported as a lower-precision fallback
68
+ - Chart rendering uses `@astrodraw/astrochart` with JSDOM
69
+
70
+ ## Common Commands
71
+
72
+ ```bash
73
+ npm run build
74
+ npm run lint
75
+ npm test -- --run
76
+ npm run validate:astro
77
+ npm run start:cli -- --help
78
+ ```
package/README.md CHANGED
@@ -12,26 +12,90 @@
12
12
 
13
13
  Astrology tooling for agent workflows.
14
14
 
15
- `ether-to-astro` is a local-first astrology toolkit with two surfaces: `e2a`, a CLI, and `e2a-mcp`, an MCP server.
15
+ `ether-to-astro` is a local-first astrology toolkit with a unified `e2a` binary for CLI and MCP usage, plus an `e2a-mcp` compatibility alias for existing MCP setups.
16
16
 
17
17
  This started as a side project because my wife is the real user, and I wasn’t impressed with the tooling around her astrology fascination. I’ve worked on plenty of AI tools and have a pretty high bar for them. Most of what I found in this space felt flimsy, closed-off, or not designed for serious agent workflows.
18
18
 
19
19
  So I built the version I wanted to exist: local-first, scriptable, tested, and structured to work well both from the command line and through MCP. I built it, she uses it daily, and that feedback loop has made the product better.
20
20
 
21
+ ## Quick Start
22
+
23
+ ### MCP
24
+
25
+ Add this to your MCP client config:
26
+
27
+ ```json
28
+ {
29
+ "mcpServers": {
30
+ "astro": {
31
+ "command": "npx",
32
+ "args": ["--yes", "--package=ether-to-astro", "e2a", "--mcp"]
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ Then restart your MCP client and call `set_natal_chart`.
39
+
40
+ ### CLI
41
+
42
+ Run the CLI directly with `npx`:
43
+
44
+ ```bash
45
+ npx --yes --package=ether-to-astro e2a --help
46
+ ```
47
+
48
+ Or install globally:
49
+
50
+ ```bash
51
+ npm install -g ether-to-astro
52
+ e2a --help
53
+ e2a --mcp --help
54
+ ```
55
+
56
+ ### Product Setup
57
+
58
+ - End-user setup and examples: [SETUP.md](/Users/salted/Code/astro-mcp/SETUP.md)
59
+ - Local repo setup and contributor workflow: [DEVELOPER.md](/Users/salted/Code/astro-mcp/DEVELOPER.md)
60
+
61
+ ### Agent Skills
62
+
63
+ This repo also includes repo-owned agent skills in a standard `skills/` layout.
64
+
65
+ If you use the [Vercel `skills` CLI](https://github.com/vercel-labs/skills), you can inspect or install them from a local checkout:
66
+
67
+ ```bash
68
+ # List skills available in this repo
69
+ npx skills add . --list
70
+
71
+ # Install the repo's skills to Codex for this project
72
+ npx skills add . --agent codex --skill daily-brief --skill weekly-overview --skill electional-overlay
73
+
74
+ # Install the repo's write-skill helper to Codex for this project
75
+ npx skills add . --agent codex --skill write-skill
76
+ ```
77
+
78
+ You can also install from GitHub instead of a local checkout:
79
+
80
+ ```bash
81
+ npx skills add unsalted/ether-to-astro --agent codex --skill write-skill
82
+ ```
83
+
21
84
  ## Features
22
85
 
23
86
  You can ask your AI agent about:
24
87
 
25
88
  ### Transits
26
- - **Daily mundane transits** - Current planetary positions
89
+ - **Daily mundane positions** - Current planetary positions
27
90
  - **Moon transits** - Fast-moving Moon aspects to natal planets
28
91
  - **Personal planet transits** - Sun, Mercury, Venus, Mars aspects to natal chart
29
92
  - **Outer planet transits** - Jupiter, Saturn, Uranus, Neptune, Pluto aspects
30
93
  - **Exact transit times** - Precise timing when transits become exact (0° orb)
31
- - **Upcoming transits** - Multi-day forecast for transits approaching within
94
+ - **Upcoming transit preview** - Best upcoming hits across a requested date range
32
95
 
33
96
  ### Advanced Features
34
97
  - **House cusps** - Ascendant, Midheaven, and all 12 houses (multiple systems)
98
+ - **Electional context** - Stateless ascendant, sect, Moon phase, and applying-aspect context for a specific date, time, and location
35
99
  - **Retrograde status** - Which planets are currently retrograde
36
100
  - **Rise/Set times** - Sunrise, sunset, moonrise, moonset
37
101
  - **Asteroids & Nodes** - Chiron, Ceres, Pallas, Juno, Vesta, North Node
@@ -40,8 +104,29 @@ You can ask your AI agent about:
40
104
 
41
105
  ## Installation
42
106
 
107
+ ### From npm
108
+
109
+ For normal product usage, install from npm or use `npx`.
110
+
111
+ ```bash
112
+ npx --yes --package=ether-to-astro e2a --help
113
+ ```
114
+
115
+ Or:
116
+
117
+ ```bash
118
+ npm install -g ether-to-astro
119
+ ```
120
+
121
+ You do not need to run `npm run build` when installing from npm.
122
+
123
+ ### From a local repo checkout
124
+
125
+ If you cloned this repository and want to run the local source checkout:
126
+
43
127
  ```bash
44
- ./setup.sh
128
+ npm install
129
+ npm run build
45
130
  ```
46
131
 
47
132
  ### Ephemeris Data Configuration
@@ -68,82 +153,32 @@ EPHEMERIS_VERSION=moshier npm install
68
153
  Or manually:
69
154
  ```bash
70
155
  npm install
71
- npm run build
72
156
  ```
73
157
 
74
- ## Contributing Contract
75
-
76
- This repo uses a lightweight, agent-friendly operating contract:
77
-
78
- - Keep changes focused and avoid unrelated churn in the same diff.
79
- - Treat Biome as the source of truth for formatting, import order, and linting.
80
- - Use conventional commit messages: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `build`, `ci`.
81
- - Keep PR descriptions short and explicit about what changed and how it was verified.
82
-
83
- Required routine quality gate:
84
-
85
- ```bash
86
- npm run quality:gate
87
- ```
158
+ ## Package Names
88
159
 
89
- This runs:
90
-
91
- - `npm run build`
92
- - `npm run lint`
93
- - `npm test -- --run`
94
-
95
- Use `npm run validate:astro` for high-risk astrology engine work such as ephemeris/root-solver/transit-timing changes. It is intentionally not part of the default routine gate.
96
-
97
- Commit examples:
98
-
99
- ```text
100
- fix(cli): resolve injected cwd for relative profile paths
101
- test(profiles): cover default profile precedence
102
- refactor(transits): simplify exact-time formatting
103
- docs(readme): document remote-ready repo contract
104
- ```
105
-
106
- Pull request checklist:
107
-
108
- - Scope is focused and coherent.
109
- - `npm run quality:gate` passed locally.
110
- - Tests were added or updated when behavior changed.
111
- - Docs were updated when workflow or interfaces changed.
112
- - PR description includes:
113
- - What changed
114
- - How it was verified
160
+ - Package: `ether-to-astro`
161
+ - CLI command: `e2a`
162
+ - Canonical MCP command: `e2a --mcp`
163
+ - Compatibility MCP alias: `e2a-mcp`
115
164
 
116
- ## Setup
165
+ ## Runtime Surfaces
117
166
 
118
- 1. Run setup script or install manually (see above)
167
+ ### MCP server (stateful per process)
119
168
 
120
- 2. Build:
169
+ Launch MCP mode with:
121
170
 
122
171
  ```bash
123
- npm run build
172
+ e2a --mcp --help
124
173
  ```
125
174
 
126
- 3. Add MCP to your MCP settings (e.g., Claude Desktop config):
175
+ Optional deterministic startup defaults:
127
176
 
128
- ```json
129
- {
130
- "mcpServers": {
131
- "astro": {
132
- "command": "npx",
133
- "args": ["--yes", "--package=ether-to-astro", "e2a-mcp"]
134
- }
135
- }
136
- }
177
+ ```bash
178
+ e2a --mcp --preferred-tz America/Los_Angeles --preferred-house-style W --weekday-labels
137
179
  ```
138
180
 
139
- Package/binary names:
140
- - Package: `ether-to-astro`
141
- - CLI command: `e2a`
142
- - MCP command: `e2a-mcp`
143
-
144
- ## Runtime Surfaces
145
-
146
- ### MCP server (stateful per process)
181
+ The `e2a-mcp` binary remains available as a compatibility alias and starts MCP mode automatically.
147
182
 
148
183
  ### In-Memory Storage
149
184
  The MCP server uses **in-memory storage** for natal chart data:
@@ -162,14 +197,6 @@ This design is **MCP-compliant** for stdio transport and ensures complete isolat
162
197
  `npx` usage note: this package is named `ether-to-astro`, so invoke bins with `--package`.
163
198
  `npx e2a` will not work by itself because npm resolves package names first.
164
199
 
165
- Install globally if you want direct commands without `--package`:
166
-
167
- ```bash
168
- npm install -g ether-to-astro
169
- e2a --help
170
- e2a-mcp --help
171
- ```
172
-
173
200
  Examples:
174
201
 
175
202
  ```bash
@@ -261,7 +288,17 @@ Ask your AI agent:
261
288
  - `set_natal_chart` - Store birth chart data
262
289
 
263
290
  ### Transits
264
- - `get_transits` - Category-filtered transits with optional exact-time data
291
+ - `get_transits` - Category-filtered transits with optional exact-time data and explicit mode semantics:
292
+ - `snapshot`: single-day view for the selected date
293
+ - `best_hit`: compressed multi-day preview across the selected date window
294
+ - `forecast`: day-grouped transit output across the selected date window
295
+ - if `mode` is omitted, legacy behavior is preserved: `days_ahead=0` resolves to `snapshot`, and `days_ahead>0` resolves to `best_hit`
296
+ - each transit now includes additive placement metadata for both sides: sign, degree, and house
297
+
298
+ In this release, `include_mundane` remains anchored to the forecast start date even when `mode=forecast`. Range-aware mundane output is tracked separately.
299
+
300
+ ### Electional
301
+ - `get_electional_context` - Stateless electional context for a local date, time, and location. Returns deterministic ascendant, sect/day-night classification, Moon phase, applying aspects, and optional ASC-ruler basics without requiring a natal chart.
265
302
 
266
303
  ### Advanced Tools
267
304
  - `get_houses` - House cusps, Ascendant, Midheaven (Placidus, Koch, Whole Sign, Equal)
@@ -304,6 +341,10 @@ Ask your AI agent:
304
341
  - **Exact time calculation**: Uses binary search interpolation for precision
305
342
  - **Advance warnings**: Shows transits within 2° orb
306
343
 
344
+ ## Development
345
+
346
+ Contributor workflow, local repo setup, quality gates, and release-oriented notes live in [DEVELOPER.md](/Users/salted/Code/astro-mcp/DEVELOPER.md).
347
+
307
348
  ## License
308
349
 
309
350
  AGPL-3.0-or-later