@yawlabs/lemonsqueezy-mcp 0.13.3 → 0.13.4

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.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,41 @@
1
1
  # Changelog
2
2
 
3
- ## [Unreleased]
3
+ ## [0.13.4] — 2026-09-12
4
+
5
+ ### Added
6
+
7
+ - **Price records now carry the price actually charged.** Lemon Squeezy returns a `unit_price` on every price record, and on a `volume` or `graduated` scheme it is vestigial -- the charged rate lives in `tiers[]`. In one store, three per-seat products all reported `unit_price: 2000` while billing $25, $100 and $200 per seat, and an agent reading the obvious field quoted all three as $20. `ls_get_price` and `ls_list_prices` now annotate every record with:
8
+ - `effective_unit_price` -- cents charged per unit: the first tier's rate on tiered schemes, `unit_price / package_size` on `package`, and `unit_price` on `standard`. `unit_price_decimal` wins wherever it is set, so sub-cent and metered rates are not rounded. It is `null` when the record carries no usable price; a tiered record with no tiers is never backfilled from `unit_price`, since that is how the wrong number got quoted in the first place.
9
+ - `effective_unit_price_note` -- where the number came from, including when the rate varies with quantity and any non-zero tier `fixed_fee` or enabled `setup_fee`, which are named but kept out of the per-unit figure.
10
+ - `unit_price_is_not_charged: true` on tiered records, and `unit_price_is_per_package: true` on `package` pricing whose block is larger than one unit.
11
+
12
+ Additive only: every raw field and the payload shape are untouched, and error bodies pass through unannotated.
13
+ - **The same annotation reaches price records embedded via `include=price`** on `ls_get_subscription_item` and `ls_list_subscription_items` -- the seat-based-billing path, where a raw `unit_price` is the most likely to be read as a per-seat rate. The subscription item itself is not annotated.
14
+
15
+ ### Changed
16
+
17
+ - **Variant tools warn that `price` is not the charged amount.** A variant payload has nothing to derive a charged price from, so `ls_get_variant` and `ls_list_variants` now say so in their descriptions and point at `ls_list_prices`. `ls_list_prices` also documents that a variant can carry several price records, the current one being the newest by `created_at`.
18
+
19
+ ### Fixed
20
+
21
+ - **The launcher no longer starts a second oam when it is already running on one.** A host that resolves this package's `bin` and launches `oam run bin/lemonsqueezy-mcp.mjs` -- Yaw MCP does, and so does oam's sidecar regression matrix -- got a nested runtime: the launcher discovered and spawned an oam without asking what it was already running on, so one server cost two runtime boots, measured on Windows as `oam.exe` with a nested `oam.exe` + `conhost.exe` underneath it. When `process.versions.oam` clears the same 0.9.0 floor a discovered binary has to, the server is now imported into the running process: no discovery, no `oam --version` probe, no second oam. `OAM_BIN` is not consulted on that path, since the host has already chosen which oam runs.
22
+
23
+ Two cases still take the discovery path: `LEMONSQUEEZY_MCP_SANDBOX=1`, because `--permission` is a process-level flag only a freshly started oam can apply, and a host oam below the floor. That is a preference for a fresh oam, not a guarantee of one. If discovery then fails -- no binary found, one below the floor or unreadable, or a spawn that errors -- the existing fallback still serves the server in-process **without** `--permission` under the default `LEMONSQUEEZY_MCP_RUNTIME=auto`, as it did before this change. `LEMONSQUEEZY_MCP_RUNTIME=oam` is what turns that into a hard failure.
24
+ - **`npm run check:oam` type-checks again.** It failed before checking anything with `TS2688: Cannot find type definition file for 'node'`: `oam check` extends this tsconfig from oam's cache directory, and from there tsgo does not find `@types/node` when the project names only `types: ["node"]`. `tsconfig.json` now declares `typeRoots`, which resolves the lookup relative to the file. Stock `tsc` was never affected, and the built `dist/` is byte-identical with and without it.
25
+
26
+ ## [0.13.3] — 2026-09-11
27
+
28
+ No runtime changes: nothing under `src/` changed and no dependency moved. This release is tooling, packaging metadata and docs. This entry was backfilled -- `[Unreleased]` was empty when 0.13.3 was cut, so its GitHub release notes fell back to bare commit subjects.
29
+
30
+ ### Fixed
31
+
32
+ - **`npm run lint` checks the biome version the repo actually installs.** On Windows ARM64, `scripts/lint.mjs` runs the x64 build of biome under emulation, because some arm64 builds -- including 2.5.4, the one this repo installs -- exit 139 on a real check while still answering `--version` cleanly. It chose the version to provision from `biome.json`'s `$schema`, which pins what the config is validated against rather than the installed binary, and the two had drifted: `$schema` said 2.4.12 while the lockfile installs 2.5.4, so "lint clean" was a claim about a version this repo does not use. The version now comes from `package-lock.json`, falls back to the installed package, and fails with an actionable message when neither is present.
33
+
34
+ ### Changed
35
+
36
+ - **`release.sh` promotes `[Unreleased]` to the released version and commits the result.** The script read CHANGELOG.md for release notes but never renamed the heading, so documented work accumulated under `[Unreleased]` while the shipped version went out without an entry of its own. It now renames the first `## [Unreleased]` heading to `## [X.Y.Z] <dash> <date>`, reusing whichever dash the file already uses, stages CHANGELOG.md in the version-bump commit, and fails the release when the version has no entry but `[Unreleased]` has content.
37
+ - **npm metadata.** `homepage` now points at https://yaw.sh/mcp-servers/lemonsqueezy-mcp/, and the description and keywords name what the server manages: stores, orders, subscriptions, license keys, refunds and webhooks.
38
+ - **README:** added a follow badge for @TokenLimitNews on X.
4
39
 
5
40
  ## [0.13.2] — 2026-08-23
6
41
 
@@ -558,7 +593,12 @@ Hardening pass for unattended automation against live billing flows.
558
593
 
559
594
  Initial release. 59 tools covering all 17 LemonSqueezy API resources.
560
595
 
561
- [Unreleased]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.10.9...HEAD
596
+ [Unreleased]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.13.3...HEAD
597
+ [0.13.3]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.13.2...v0.13.3
598
+ [0.13.2]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.13.1...v0.13.2
599
+ [0.13.1]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.13.0...v0.13.1
600
+ [0.13.0]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.12.0...v0.13.0
601
+ [0.12.0]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.11.1...v0.12.0
562
602
  [0.11.1]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.11.0...v0.11.1
563
603
  [0.11.0]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.10.13...v0.11.0
564
604
  [0.10.13]: https://github.com/YawLabs/lemonsqueezy-mcp/compare/v0.10.12...v0.10.13
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Yaw Labs
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yaw Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -128,6 +128,8 @@ Add to `claude_desktop_config.json`:
128
128
  - `ls_get_price` — Get a price by ID
129
129
  - `ls_list_prices` — List prices (filter by variant)
130
130
 
131
+ Both annotate every record with `effective_unit_price`, the cents actually charged per unit. Read that rather than `unit_price`, which is vestigial on tiered (`volume` / `graduated`) pricing, or a variant's `price`. The subscription-item reads apply the same annotation to prices embedded via `include=price`.
132
+
131
133
  ### Files
132
134
  - `ls_get_file` — Get a file by ID
133
135
  - `ls_list_files` — List files (filter by variant)