@odatano/nightgate-mcp 0.11.0 → 0.14.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.
package/CHANGELOG.md CHANGED
@@ -1,217 +1,262 @@
1
- # Changelog
2
-
3
- All notable changes to `@odatano/nightgate-mcp` are documented in this file.
4
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
- The README says which NIGHTGATE the current version needs.
7
-
8
- ## [Unreleased]
9
-
10
- ## [0.11.0] - 2026-10-12
11
-
12
- Needs NIGHTGATE 0.32.0.
13
-
14
- ### Changed
15
-
16
- - `sponsor_finalized_transaction`, `sponsor_unbound_transaction`, `sponsor_swap`
17
- and `mint_token` take no `sponsorSessionId`: the server's sponsor pool pays,
18
- or the wallet session the agent grant is pinned to.
19
- - `take_swap_offer`: `submit: true` hands both halves to the sponsor at once;
20
- it replaces the sponsor session id as the trigger.
21
- - The platform pool id is gone from every tool description.
22
-
23
- ## [0.10.1] - 2026-10-03
24
-
25
- ### Fixed
26
-
27
- - A maker half posted with `post_swap_offer` is tied to its `offerId`; `get_swap_wallet`
28
- lists it with `offerId` and `boardStatus` and drops it once the offer is `filled`
29
- (read through `get_swap_wallet`, `get_swap_offer`, `list_swap_offers`, `my_swap_offers`).
30
- An expired or retired offer keeps its half for `revert_swap_offer`.
31
- - Board rows carry `tags` as the server sends them: an array from NIGHTGATE 0.30.3 on.
32
-
33
- ## [0.10.0] - 2026-10-02
34
-
35
- ### Added
36
-
37
- - **Offer board** (NIGHTGATE 0.30.0): `post_swap_offer(offer, expiresAt?, tags?)`,
38
- `list_swap_offers(givesType?, wantsType?, tag?, limit?)`, `retire_swap_offer(offerId)`.
39
- `sponsor_swap` and `take_swap_offer` take an `offerId` from the board in place of the
40
- maker half: `take_swap_offer` reads the entry first and refuses before proving when it
41
- is closed or carries another offer; `sponsor_swap` pairs `offerId` with `takerHalf` or
42
- the `halfId` of a taken offer.
43
- - **Board reads** (NIGHTGATE 0.30.1): `list_swap_offers(status?, since?)` reads closed
44
- offers and the change feed, `my_swap_offers(status?, since?, limit?)` the caller's own
45
- posts, `get_swap_offer(offerId)` one offer open or closed, `get_board_status()` the
46
- board's counts and sponsor readiness without credentials (indexer service,
47
- `NIGHTGATE_INDEXER_SERVICE_PATH`, default `/api/v1/indexer`).
48
- - **`mint_token(contractAddress, name, amount, recipientCoinPublicKey?, recipientEncryptionPublicKey?, sponsorSessionId?, sessionId?, idempotencyKey?)`**:
49
- a token of your own name on a token factory. Without `sessionId` the seed is the issuer,
50
- the mint is built, proven and signed here (`@odatano/nightgate-tx` 0.10.2 on
51
- `@odatano/contract-token-factory`) and `sponsorUnboundTransaction` pays; with `sessionId`
52
- the server session mints (`mintFactoryToken`, NIGHTGATE 0.30.1). The recipient defaults
53
- to this wallet; another wallet takes both of its keys. The type is in the response.
54
- - **Disclosure to token holders**: `grant_disclosure_to_holders(payloadHash, tokenType,
55
- registryAddress, content?, contentType?, expiresAt?)`, `revoke_holder_disclosure(holderGrantId)`,
56
- `claim_disclosure(payloadHash, tokenType, claimSecret)`, `holder_claim_key(claimSecret?)`.
57
-
58
- ### Changed
59
-
60
- - Peer dependency `@odatano/nightgate-tx` `>=0.10.2` (`holderClaimKey`, `tokenFactoryIssuerSecret`); local building and swaps still run on 0.8.0. A missing or older install is reported per tool with the version it needs. Optional peer `@odatano/contract-token-factory` for local minting.
61
- - `mint_token` derives the default recipient from the seed without starting the local builder.
62
- - Amounts given as JS numbers must be safe integers; pass a decimal string for anything larger.
63
- - Function calls pass an unused declared parameter as `null`.
64
-
65
- ## [0.9.0] - 2026-09-30
66
-
67
- ### Added
68
-
69
- - **Shielded swap tools** (NIGHTGATE 0.29.0, `@odatano/nightgate-tx` 0.8.0):
70
- - `get_swap_wallet`: address, public keys, per token type balance, free coins and
71
- `spendable`; halves built here that have not landed.
72
- - `read_swap_offer`: `gives`, `wants`, `inputs`, `outputs`, `bound` of an offer file or
73
- base64 half, read from the transaction.
74
- - `build_swap_offer(give, want, bind?)`: one proven half, as offer file (`swapoffer1...`).
75
- - `take_swap_offer(offer, expect?, sponsorSessionId?, idempotencyKey?)`: the mirror half;
76
- with a sponsor session it submits both halves. A refusal carries `halfId`.
77
- - `sponsor_swap(makerHalf, takerHalf | halfId, sponsorSessionId, idempotencyKey?)`.
78
- - `revert_swap_offer(id)`: releases the coins of a half built here.
79
- - `NIGHTGATE_SWAP_STATE_FILE`, `NIGHTGATE_SWAP_MAX_INPUTS`.
80
- - `get_attester_identity` returns `shieldedAddress`, `coinPublicKey`, `encryptionPublicKey`.
81
- - `npm run integration` covers the swap tools (`scripts/integration-swap.mjs`).
82
-
83
- ### Changed
84
-
85
- - Peer dependency `@odatano/nightgate-tx` `>=0.8.0` (was `>=0.6.0`).
86
- - Lockfile: one `@midnight-ntwrk/ledger-v8` (8.1.0) in the tree. Two copies made the local
87
- builder fail with `expected instance of DustParameters`.
88
- - `live:sponsor-unbound` verifies with the attester id.
89
- - `NIGHTGATE_SEED_HEX` is 128 hex (a 64-byte BIP39 seed); 64 hex is refused at startup.
90
- - `get_job_status` describes the `swap` result of a swap job.
91
-
92
- ## [0.8.1] - 2026-09-27
93
-
94
- ### Changed
95
-
96
- - `get_job_status` describes `chainSegments` (NIGHTGATE 0.28.0): for a confirmed batch,
97
- which calls applied. Tool errors carry the server's string `code` (`INVALID_ARGUMENT`, ...).
98
- - README reorganized; compatibility names the current version only.
99
-
100
- ## [0.8.0] - 2026-09-23
101
-
102
- ### Added
103
-
104
- - **Analytics tools over ODATANO ASTRA** (`analytics_overview`, `analytics_key_figures`,
105
- `analytics_daily`, `analytics_top_block_producers`, `analytics_metrics`, `analytics_metric`,
106
- `analytics_series`, `analytics_compare`, `analytics_anomalies`), registered when the host
107
- serves ASTRA at `ODATANO_ANALYTICS_URL` (default: the gateway's `/odata/v4/astra`). Same key,
108
- one unit per read, chain pinned to Midnight; `analytics_compare` puts Cardano next to it.
109
-
110
- ### Changed
111
-
112
- - **Default gateway host is `https://api.preprod.odatano.dev`** (one host per
113
- network; `api.odatano.dev` now only redirects there with a 307). Node drops
114
- the `Authorization` header on a cross-host redirect, so the old default
115
- would answer 401 for every call: set `ODATANO_ACCESS_URL` explicitly on
116
- older versions, or upgrade. The missing-key warning fires for any
117
- `api.<network>.odatano.dev` host.
118
-
119
- ## [0.7.0] - 2026-09-20
120
-
121
- ### Changed (breaking)
122
-
123
- - **One connection env for both ODATANO MCP servers.** `ODATANO_ACCESS_URL`
124
- (default `https://api.odatano.dev`, the gateway), `ODATANO_ACCESS_KEY`
125
- (the `oda_…` key, or an `ngat_…` grant / other bearer against a direct
126
- instance) and `ODATANO_ACCESS_USER` / `ODATANO_ACCESS_PASSWORD` (basic
127
- auth for a direct instance) replace `NIGHTGATE_BASE_URL`,
128
- `NIGHTGATE_TOKEN`, `NIGHTGATE_USERNAME` and `NIGHTGATE_PASSWORD`; the old
129
- names are not read any more. `@odatano/core-mcp` 0.3.0 reads the same
130
- four, so an `.mcp.json` needs one key for both chains and no URL. The
131
- other `NIGHTGATE_*` variables (network, seed, indexer, zk-config, proof
132
- server, timeout, service path) are unchanged.
133
- - **Gateway error bodies reach the agent.** The ODATANO ACCESS gateway
134
- answers with `{ error: "<text>", ...detail }`; the client now keeps the
135
- text as the message and hands the detail (`unitsLeft`, `price`, the
136
- `topup` hint, `products`, `validUntil`, `retryAfterSeconds` from
137
- `Retry-After`) through to the tool error, so a 402 says how to top up
138
- instead of "request failed with HTTP 402".
139
- - **The hosted API is the documented default.** README: quick start with a
140
- key from api.odatano.dev first, sponsoring through the gateway's platform
141
- pool, own instance second; the server warns at startup when the gateway
142
- is the target and no key is set. Server version constant follows the
143
- package.
144
-
145
- ## [0.6.1] - 2026-09-19
146
-
147
- ### Changed
148
-
149
- - **The ODATANO ACCESS key (`oda_…`) is the documented credential.**
150
- `api.nightgate.dev` is the ODATANO ACCESS gateway since 2026-09-18: it
151
- meters the key in units, swaps in the NIGHTGATE agent grant underneath and
152
- fronts ODATANO with the same key. Set `NIGHTGATE_BASE_URL=https://api.nightgate.dev`
153
- and `NIGHTGATE_TOKEN=oda_…`; the key goes as a plain `Authorization: Bearer`.
154
- Get one at `POST https://api.odatano.dev/keys` (x402), from a giveaway
155
- code, or by signing in at the console. A raw `ngat_…` agent grant
156
- (`x-agent-token`) still works against a direct NIGHTGATE instance. No code
157
- change: the client already sent a prefix-less token as a bearer.
158
- - `.env.example` and README updated accordingly; this changelog added and
159
- shipped with the package.
160
-
161
- ## [0.6.0] - 2026-09
162
-
163
- ### Changed (breaking)
164
-
165
- - **Vault lineage 4: every record is keyed by attester AND payload**
166
- (NIGHTGATE >= 0.24.0). `verify_attestation` takes `attesterId` +
167
- `payloadHash` (or a bound `documentId`), `verify_predicate` takes
168
- `attesterId`, the `prove_*` tools accept an optional `attesterId` (the
169
- record the claim is proven against), `anchor_document` is one plain attest
170
- and returns `attesterId`.
171
- - `prepare_anchor_commitment` and `commit_document_anchor` are gone: nothing
172
- is left to guard, no identity can take over another attester's record.
173
- - Local building needs `@odatano/nightgate-tx` >= 0.6.0; the proof calls
174
- take `recordKey` or `payloadHash` (+ `attesterId`). Against a 0.23.x server
175
- the verify calls fail with 400 (unknown parameter).
176
-
177
- ## [0.5.1] - 2026-08-23
178
-
179
- ### Added
180
-
181
- - **32-slot vault.** Schema and opening take 16 or 32 entries, `allowedMask`
182
- up to 32 bits, `k` up to 32; the vacuity guard is checked against the
183
- schema instead of a fixed all-ones constant. Target it with
184
- `compiledArtifactRef: 'attestation-vault-32'` (NIGHTGATE >= 0.19.0 for
185
- width 32). A 16-slot setup keeps working against any 0.18.x server.
186
- - Local ZK claims: field and document proofs can be built in-process.
187
-
188
- ## [0.5.0] - 2026-08-19
189
-
190
- ### Added
191
-
192
- - **Parallel sponsoring channel:** `sponsor_unbound_transaction` with the
193
- platform pool id (NIGHTGATE >= 0.18.0; 404 against older servers).
194
- - **Local transaction building** for agents: `build_sponsorable_transaction`
195
- and `get_attester_identity` via the optional `@odatano/nightgate-tx`
196
- >= 0.2.0 txbuilder, driven by `NIGHTGATE_SEED_HEX` (never a tool argument).
197
-
198
- ## [0.3.0] - 2026-08-16
199
-
200
- ### Added
201
-
202
- - Cross-root document proofs and guarded anchoring (`prepare_anchor_commitment`
203
- / `commit_document_anchor`, removed again in 0.6.0).
204
-
205
- ## [0.2.0] - 2026-08-10
206
-
207
- ### Added
208
-
209
- - Membership and equality proof tools; README documents the tool set and the
210
- server compatibility table.
211
-
212
- ## [0.1.0] - 2026-08-07
213
-
214
- ### Added
215
-
216
- - Initial MCP server: attestation, verification and job tools over the
217
- NIGHTGATE OData API, agent-grant (`ngat_…`) or basic auth.
1
+ # Changelog
2
+
3
+ All notable changes to `@odatano/nightgate-mcp` are documented in this file.
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+ The README says which NIGHTGATE the current version needs.
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.14.0] - 2026-10-18
11
+
12
+ Needs NIGHTGATE 0.35.0 and `@odatano/nightgate-tx` 0.14.0 (the gateway serves both spellings).
13
+
14
+ ### Changed
15
+
16
+ - The tools call NIGHTGATE under `/odata/v4/midnight` and
17
+ `/odata/v4/midnight-indexer`. Against a server below 0.35.0 set
18
+ `NIGHTGATE_SERVICE_PATH=/api/v1/nightgate` and
19
+ `NIGHTGATE_INDEXER_SERVICE_PATH=/api/v1/indexer`.
20
+
21
+ ## [0.13.0] - 2026-10-15
22
+
23
+ Needs NIGHTGATE 0.34.0 and `@odatano/nightgate-tx` 0.12.2.
24
+
25
+ ### Added
26
+
27
+ - `get_grant_usage`: the key's jobs and its limits, the hour and day budgets
28
+ and the rate classes with what is left.
29
+
30
+ ### Changed
31
+
32
+ - A 429 from NIGHTGATE carries `retryAfterSeconds` from `Retry-After`, as a
33
+ gateway 429 did already.
34
+
35
+ ## [0.12.0] - 2026-10-13
36
+
37
+ Needs NIGHTGATE 0.33.0 and `@odatano/nightgate-tx` 0.12.2.
38
+
39
+ ### Changed
40
+
41
+ - `build_sponsorable_transaction` and the local `mint_token` read contract
42
+ state through the NIGHTGATE API (`createTxBuilder({ api })`); they dial no
43
+ indexer and no node. `NIGHTGATE_INDEXER_HTTP_URL` and `NIGHTGATE_INDEXER_WS_URL`
44
+ switch them back to a Midnight indexer.
45
+ - The swap wallet syncs from `NIGHTGATE_INDEXER_HTTP_URL` and
46
+ `NIGHTGATE_INDEXER_WS_URL` only; without them the swap tools refuse with
47
+ the two names instead of dialing the public indexer.
48
+ - `build_sponsorable_transaction` returns `txId` (sha256 of the bytes),
49
+ `characters` and `bytes` instead of the base64; the bytes stay in the server
50
+ process for one hour, `outFile` writes them to a path.
51
+ - `sponsor_unbound_transaction` and `sponsor_finalized_transaction` take `txId`
52
+ or `file` (base64 text or raw bytes); the base64 argument remains for callers
53
+ without either. The result carries `sent` with characters, bytes and `txId`.
54
+
55
+ ## [0.11.0] - 2026-10-12
56
+
57
+ Needs NIGHTGATE 0.32.0.
58
+
59
+ ### Changed
60
+
61
+ - `sponsor_finalized_transaction`, `sponsor_unbound_transaction`, `sponsor_swap`
62
+ and `mint_token` take no `sponsorSessionId`: the server's sponsor pool pays,
63
+ or the wallet session the agent grant is pinned to.
64
+ - `take_swap_offer`: `submit: true` hands both halves to the sponsor at once;
65
+ it replaces the sponsor session id as the trigger.
66
+ - The platform pool id is gone from every tool description.
67
+
68
+ ## [0.10.1] - 2026-10-03
69
+
70
+ ### Fixed
71
+
72
+ - A maker half posted with `post_swap_offer` is tied to its `offerId`; `get_swap_wallet`
73
+ lists it with `offerId` and `boardStatus` and drops it once the offer is `filled`
74
+ (read through `get_swap_wallet`, `get_swap_offer`, `list_swap_offers`, `my_swap_offers`).
75
+ An expired or retired offer keeps its half for `revert_swap_offer`.
76
+ - Board rows carry `tags` as the server sends them: an array from NIGHTGATE 0.30.3 on.
77
+
78
+ ## [0.10.0] - 2026-10-02
79
+
80
+ ### Added
81
+
82
+ - **Offer board** (NIGHTGATE 0.30.0): `post_swap_offer(offer, expiresAt?, tags?)`,
83
+ `list_swap_offers(givesType?, wantsType?, tag?, limit?)`, `retire_swap_offer(offerId)`.
84
+ `sponsor_swap` and `take_swap_offer` take an `offerId` from the board in place of the
85
+ maker half: `take_swap_offer` reads the entry first and refuses before proving when it
86
+ is closed or carries another offer; `sponsor_swap` pairs `offerId` with `takerHalf` or
87
+ the `halfId` of a taken offer.
88
+ - **Board reads** (NIGHTGATE 0.30.1): `list_swap_offers(status?, since?)` reads closed
89
+ offers and the change feed, `my_swap_offers(status?, since?, limit?)` the caller's own
90
+ posts, `get_swap_offer(offerId)` one offer open or closed, `get_board_status()` the
91
+ board's counts and sponsor readiness without credentials (indexer service,
92
+ `NIGHTGATE_INDEXER_SERVICE_PATH`, default `/api/v1/indexer`).
93
+ - **`mint_token(contractAddress, name, amount, recipientCoinPublicKey?, recipientEncryptionPublicKey?, sponsorSessionId?, sessionId?, idempotencyKey?)`**:
94
+ a token of your own name on a token factory. Without `sessionId` the seed is the issuer,
95
+ the mint is built, proven and signed here (`@odatano/nightgate-tx` 0.10.2 on
96
+ `@odatano/contract-token-factory`) and `sponsorUnboundTransaction` pays; with `sessionId`
97
+ the server session mints (`mintFactoryToken`, NIGHTGATE 0.30.1). The recipient defaults
98
+ to this wallet; another wallet takes both of its keys. The type is in the response.
99
+ - **Disclosure to token holders**: `grant_disclosure_to_holders(payloadHash, tokenType,
100
+ registryAddress, content?, contentType?, expiresAt?)`, `revoke_holder_disclosure(holderGrantId)`,
101
+ `claim_disclosure(payloadHash, tokenType, claimSecret)`, `holder_claim_key(claimSecret?)`.
102
+
103
+ ### Changed
104
+
105
+ - Peer dependency `@odatano/nightgate-tx` `>=0.10.2` (`holderClaimKey`, `tokenFactoryIssuerSecret`); local building and swaps still run on 0.8.0. A missing or older install is reported per tool with the version it needs. Optional peer `@odatano/contract-token-factory` for local minting.
106
+ - `mint_token` derives the default recipient from the seed without starting the local builder.
107
+ - Amounts given as JS numbers must be safe integers; pass a decimal string for anything larger.
108
+ - Function calls pass an unused declared parameter as `null`.
109
+
110
+ ## [0.9.0] - 2026-09-30
111
+
112
+ ### Added
113
+
114
+ - **Shielded swap tools** (NIGHTGATE 0.29.0, `@odatano/nightgate-tx` 0.8.0):
115
+ - `get_swap_wallet`: address, public keys, per token type balance, free coins and
116
+ `spendable`; halves built here that have not landed.
117
+ - `read_swap_offer`: `gives`, `wants`, `inputs`, `outputs`, `bound` of an offer file or
118
+ base64 half, read from the transaction.
119
+ - `build_swap_offer(give, want, bind?)`: one proven half, as offer file (`swapoffer1...`).
120
+ - `take_swap_offer(offer, expect?, sponsorSessionId?, idempotencyKey?)`: the mirror half;
121
+ with a sponsor session it submits both halves. A refusal carries `halfId`.
122
+ - `sponsor_swap(makerHalf, takerHalf | halfId, sponsorSessionId, idempotencyKey?)`.
123
+ - `revert_swap_offer(id)`: releases the coins of a half built here.
124
+ - `NIGHTGATE_SWAP_STATE_FILE`, `NIGHTGATE_SWAP_MAX_INPUTS`.
125
+ - `get_attester_identity` returns `shieldedAddress`, `coinPublicKey`, `encryptionPublicKey`.
126
+ - `npm run integration` covers the swap tools (`scripts/integration-swap.mjs`).
127
+
128
+ ### Changed
129
+
130
+ - Peer dependency `@odatano/nightgate-tx` `>=0.8.0` (was `>=0.6.0`).
131
+ - Lockfile: one `@midnight-ntwrk/ledger-v8` (8.1.0) in the tree. Two copies made the local
132
+ builder fail with `expected instance of DustParameters`.
133
+ - `live:sponsor-unbound` verifies with the attester id.
134
+ - `NIGHTGATE_SEED_HEX` is 128 hex (a 64-byte BIP39 seed); 64 hex is refused at startup.
135
+ - `get_job_status` describes the `swap` result of a swap job.
136
+
137
+ ## [0.8.1] - 2026-09-27
138
+
139
+ ### Changed
140
+
141
+ - `get_job_status` describes `chainSegments` (NIGHTGATE 0.28.0): for a confirmed batch,
142
+ which calls applied. Tool errors carry the server's string `code` (`INVALID_ARGUMENT`, ...).
143
+ - README reorganized; compatibility names the current version only.
144
+
145
+ ## [0.8.0] - 2026-09-23
146
+
147
+ ### Added
148
+
149
+ - **Analytics tools over ODATANO ASTRA** (`analytics_overview`, `analytics_key_figures`,
150
+ `analytics_daily`, `analytics_top_block_producers`, `analytics_metrics`, `analytics_metric`,
151
+ `analytics_series`, `analytics_compare`, `analytics_anomalies`), registered when the host
152
+ serves ASTRA at `ODATANO_ANALYTICS_URL` (default: the gateway's `/odata/v4/astra`). Same key,
153
+ one unit per read, chain pinned to Midnight; `analytics_compare` puts Cardano next to it.
154
+
155
+ ### Changed
156
+
157
+ - **Default gateway host is `https://api.preprod.odatano.dev`** (one host per
158
+ network; `api.odatano.dev` now only redirects there with a 307). Node drops
159
+ the `Authorization` header on a cross-host redirect, so the old default
160
+ would answer 401 for every call: set `ODATANO_ACCESS_URL` explicitly on
161
+ older versions, or upgrade. The missing-key warning fires for any
162
+ `api.<network>.odatano.dev` host.
163
+
164
+ ## [0.7.0] - 2026-09-20
165
+
166
+ ### Changed (breaking)
167
+
168
+ - **One connection env for both ODATANO MCP servers.** `ODATANO_ACCESS_URL`
169
+ (default `https://api.odatano.dev`, the gateway), `ODATANO_ACCESS_KEY`
170
+ (the `oda_…` key, or an `ngat_…` grant / other bearer against a direct
171
+ instance) and `ODATANO_ACCESS_USER` / `ODATANO_ACCESS_PASSWORD` (basic
172
+ auth for a direct instance) replace `NIGHTGATE_BASE_URL`,
173
+ `NIGHTGATE_TOKEN`, `NIGHTGATE_USERNAME` and `NIGHTGATE_PASSWORD`; the old
174
+ names are not read any more. `@odatano/core-mcp` 0.3.0 reads the same
175
+ four, so an `.mcp.json` needs one key for both chains and no URL. The
176
+ other `NIGHTGATE_*` variables (network, seed, indexer, zk-config, proof
177
+ server, timeout, service path) are unchanged.
178
+ - **Gateway error bodies reach the agent.** The ODATANO ACCESS gateway
179
+ answers with `{ error: "<text>", ...detail }`; the client now keeps the
180
+ text as the message and hands the detail (`unitsLeft`, `price`, the
181
+ `topup` hint, `products`, `validUntil`, `retryAfterSeconds` from
182
+ `Retry-After`) through to the tool error, so a 402 says how to top up
183
+ instead of "request failed with HTTP 402".
184
+ - **The hosted API is the documented default.** README: quick start with a
185
+ key from api.odatano.dev first, sponsoring through the gateway's platform
186
+ pool, own instance second; the server warns at startup when the gateway
187
+ is the target and no key is set. Server version constant follows the
188
+ package.
189
+
190
+ ## [0.6.1] - 2026-09-19
191
+
192
+ ### Changed
193
+
194
+ - **The ODATANO ACCESS key (`oda_…`) is the documented credential.**
195
+ `api.nightgate.dev` is the ODATANO ACCESS gateway since 2026-09-18: it
196
+ meters the key in units, swaps in the NIGHTGATE agent grant underneath and
197
+ fronts ODATANO with the same key. Set `NIGHTGATE_BASE_URL=https://api.nightgate.dev`
198
+ and `NIGHTGATE_TOKEN=oda_…`; the key goes as a plain `Authorization: Bearer`.
199
+ Get one at `POST https://api.odatano.dev/keys` (x402), from a giveaway
200
+ code, or by signing in at the console. A raw `ngat_…` agent grant
201
+ (`x-agent-token`) still works against a direct NIGHTGATE instance. No code
202
+ change: the client already sent a prefix-less token as a bearer.
203
+ - `.env.example` and README updated accordingly; this changelog added and
204
+ shipped with the package.
205
+
206
+ ## [0.6.0] - 2026-09
207
+
208
+ ### Changed (breaking)
209
+
210
+ - **Vault lineage 4: every record is keyed by attester AND payload**
211
+ (NIGHTGATE >= 0.24.0). `verify_attestation` takes `attesterId` +
212
+ `payloadHash` (or a bound `documentId`), `verify_predicate` takes
213
+ `attesterId`, the `prove_*` tools accept an optional `attesterId` (the
214
+ record the claim is proven against), `anchor_document` is one plain attest
215
+ and returns `attesterId`.
216
+ - `prepare_anchor_commitment` and `commit_document_anchor` are gone: nothing
217
+ is left to guard, no identity can take over another attester's record.
218
+ - Local building needs `@odatano/nightgate-tx` >= 0.6.0; the proof calls
219
+ take `recordKey` or `payloadHash` (+ `attesterId`). Against a 0.23.x server
220
+ the verify calls fail with 400 (unknown parameter).
221
+
222
+ ## [0.5.1] - 2026-08-23
223
+
224
+ ### Added
225
+
226
+ - **32-slot vault.** Schema and opening take 16 or 32 entries, `allowedMask`
227
+ up to 32 bits, `k` up to 32; the vacuity guard is checked against the
228
+ schema instead of a fixed all-ones constant. Target it with
229
+ `compiledArtifactRef: 'attestation-vault-32'` (NIGHTGATE >= 0.19.0 for
230
+ width 32). A 16-slot setup keeps working against any 0.18.x server.
231
+ - Local ZK claims: field and document proofs can be built in-process.
232
+
233
+ ## [0.5.0] - 2026-08-19
234
+
235
+ ### Added
236
+
237
+ - **Parallel sponsoring channel:** `sponsor_unbound_transaction` with the
238
+ platform pool id (NIGHTGATE >= 0.18.0; 404 against older servers).
239
+ - **Local transaction building** for agents: `build_sponsorable_transaction`
240
+ and `get_attester_identity` via the optional `@odatano/nightgate-tx`
241
+ >= 0.2.0 txbuilder, driven by `NIGHTGATE_SEED_HEX` (never a tool argument).
242
+
243
+ ## [0.3.0] - 2026-08-16
244
+
245
+ ### Added
246
+
247
+ - Cross-root document proofs and guarded anchoring (`prepare_anchor_commitment`
248
+ / `commit_document_anchor`, removed again in 0.6.0).
249
+
250
+ ## [0.2.0] - 2026-08-10
251
+
252
+ ### Added
253
+
254
+ - Membership and equality proof tools; README documents the tool set and the
255
+ server compatibility table.
256
+
257
+ ## [0.1.0] - 2026-08-07
258
+
259
+ ### Added
260
+
261
+ - Initial MCP server: attestation, verification and job tools over the
262
+ NIGHTGATE OData API, agent-grant (`ngat_…`) or basic auth.