xytara 3.9.7 → 3.9.9
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/README.md +6 -6
- package/RELEASE_NOTES.md +5 -11
- package/START_HERE.md +3 -3
- package/bin/xytara-first-run.js +1 -1
- package/bin/xytara.js +2 -2
- package/client.js +2 -2
- package/package.json +1 -1
- package/scripts/verify_client.js +2 -2
package/README.md
CHANGED
|
@@ -14,8 +14,8 @@ Listed on [Smithery](https://smithery.ai/server/naxytra/xytara-mcp-executor) ·
|
|
|
14
14
|
|
|
15
15
|
| Hosted surface | URL |
|
|
16
16
|
| --- | --- |
|
|
17
|
-
| Runtime (paid command path, credits, catalog, receipts) | `https://
|
|
18
|
-
| Pay-per-call MCP server (Streamable HTTP) | `https://
|
|
17
|
+
| Runtime (paid command path, credits, catalog, receipts) | `https://api.naxytra.com` |
|
|
18
|
+
| Pay-per-call MCP server (Streamable HTTP) | `https://mcp.naxytra.com/mcp` |
|
|
19
19
|
| Website, agent guide, quickstart | `https://www.naxytra.com` · [/agents](https://www.naxytra.com/agents) · [/quickstart](https://www.naxytra.com/quickstart) |
|
|
20
20
|
|
|
21
21
|
This package ships:
|
|
@@ -49,7 +49,7 @@ xytara run --help
|
|
|
49
49
|
Quote first, with no wallet material at all:
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
|
-
xytara-run --url https://
|
|
52
|
+
xytara-run --url https://api.naxytra.com --account ACCOUNT_REF \
|
|
53
53
|
--task adapter.mcp.invoke --command mcp.invoke:summarize \
|
|
54
54
|
--body-json "{\"tool_name\":\"summarize\",\"arguments\":{\"text\":\"Summarize the naxytra first-run path in one sentence.\"}}" \
|
|
55
55
|
--quote-only --pretty
|
|
@@ -105,7 +105,7 @@ challenge; pay it once and the response carries a spend credential. Then call
|
|
|
105
105
|
## Pay-per-call MCP
|
|
106
106
|
|
|
107
107
|
```
|
|
108
|
-
endpoint: https://
|
|
108
|
+
endpoint: https://mcp.naxytra.com/mcp
|
|
109
109
|
tools/list -> free
|
|
110
110
|
tools/call -> 402 Payment Required with a price
|
|
111
111
|
-> sign ONE gasless USDC authorization (x402 / EIP-3009)
|
|
@@ -175,7 +175,7 @@ the only algorithms in use.
|
|
|
175
175
|
```js
|
|
176
176
|
const { verifyDeliveryReceipt, hashCanonical, verificationRecipe } = require("xytara");
|
|
177
177
|
|
|
178
|
-
const keys = (await fetch("https://
|
|
178
|
+
const keys = (await fetch("https://api.naxytra.com/.well-known/delivery-receipt-keys").then((r) => r.json())).keys;
|
|
179
179
|
const result = verifyDeliveryReceipt(receipt, keys); // { valid, signatures: [{ alg, kid, valid }], ... }
|
|
180
180
|
const outputMatches = hashCanonical(outputYouReceived) === receipt.delivery.output_sha256;
|
|
181
181
|
console.log(verificationRecipe("/.well-known/delivery-receipt-keys").steps);
|
|
@@ -222,7 +222,7 @@ anchor then commits to `attestation_sha256` = SHA-256 of the JCS form of the who
|
|
|
222
222
|
```js
|
|
223
223
|
const { verifyAttestation, hashCanonical, attestationRecipe } = require("xytara");
|
|
224
224
|
|
|
225
|
-
const keys = (await fetch("https://
|
|
225
|
+
const keys = (await fetch("https://mcp.naxytra.com/.well-known/delivery-receipt-keys").then((r) => r.json())).keys;
|
|
226
226
|
const check = verifyAttestation(attestation, keys); // { valid, claim_verified, signatures: [{ alg, kid, valid }], ... }
|
|
227
227
|
const evidenceMatches = hashCanonical({ tool, arguments, output }) === attestation.evidence_sha256;
|
|
228
228
|
console.log(attestationRecipe("/.well-known/delivery-receipt-keys").steps);
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
`xytara` 3.9.
|
|
1
|
+
`xytara` 3.9.9 makes the pay-per-call MCP server answer plain probes.
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
-
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
- **Paying less than the price, closed** — a stored `quote_id` only pays for the request it priced (otherwise 409 `quote_request_mismatch`), quotes live at most 15 minutes, credits must be whole units and a caller cannot declare fewer than the price of real work (400 `credit_units_below_price`), a provider tool cannot ride a multi-task call (400 `multi_task_provider_call_unsupported`), and testnet USDC never buys work an open-network provider runs or accrues a share.
|
|
8
|
-
- **Routing** — a third-party provider that declares `tool_names` serves exactly those tools; a lane-wide third party does not claim named tools on a lane the operator's own provider serves; built-in integration ids never route to a third party; first-party provider ids are reserved for the operator; an offer-priced call runs on the provider that priced it first; when another provider runs it after failover, that provider earns on no more than its own price.
|
|
9
|
-
- **Records** — payment records carry `amount_atomic` and `settled_amount_atomic`; ledger cents totals are derived from base units (no drift).
|
|
10
|
-
- **Provider names** — an unregistered ENS name reports the payee-name spec's `not registered` detail.
|
|
11
|
-
- **MCP executor** — provider tools show their exact price, the x402 per-payment amount when the minimum applies (`pricing.per_call_usd` is what the challenge settles; `offer_price_usd` is the provider's price), and the discovery range only uses amounts the runtime accepts on that network.
|
|
12
|
-
- Client package (thin): unchanged.
|
|
3
|
+
- **`GET /mcp` without `Accept: text/event-stream`** (a health probe, an indexer, a browser) now returns `200` with a short JSON description of the endpoint: transport (`streamable-http`), how to call it (POST JSON-RPC), how payment is requested on that path, and links to the free discovery summary and `/.well-known/x402`. `HEAD` answers the same way. Indexers that check endpoints with a plain `GET` no longer list a working server as down. The same applies to `/mcp/http402`.
|
|
4
|
+
- A `GET` asking for an event stream, and `DELETE`, still return `405` with `Allow: POST`, as the MCP Streamable HTTP transport specifies for a server without a server-initiated stream.
|
|
5
|
+
- Neither answer asks for payment.
|
|
6
|
+
- No change to pricing, payment, routing, the provider ledger or the client package.
|
package/START_HERE.md
CHANGED
|
@@ -24,13 +24,13 @@ quote -> pay/credits -> execute -> prove
|
|
|
24
24
|
## 2. Hosted endpoints
|
|
25
25
|
|
|
26
26
|
```text
|
|
27
|
-
runtime: https://
|
|
27
|
+
runtime: https://api.naxytra.com
|
|
28
28
|
POST /x402/commands/execute paid command path (402 challenge -> paid 200)
|
|
29
29
|
POST /x402/credits/topup buy credits once, spend them per call
|
|
30
30
|
GET /v1/catalog discover tasks
|
|
31
31
|
GET /.well-known/delivery-receipt-keys
|
|
32
32
|
POST /v1/delivery-receipts/verify
|
|
33
|
-
mcp: https://
|
|
33
|
+
mcp: https://mcp.naxytra.com/mcp
|
|
34
34
|
website: https://www.naxytra.com (/agents, /quickstart, /v1/first-run-path, /v1/first-run-kit)
|
|
35
35
|
```
|
|
36
36
|
|
|
@@ -54,7 +54,7 @@ xytara first-run --run-quote --account ACCOUNT_REF --pretty
|
|
|
54
54
|
which runs:
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
xytara-run --url https://
|
|
57
|
+
xytara-run --url https://api.naxytra.com --account ACCOUNT_REF --task adapter.mcp.invoke --command mcp.invoke:summarize --body-json "{\"tool_name\":\"summarize\",\"arguments\":{\"text\":\"Summarize the naxytra first-run path in one sentence.\"}}" --quote-only --pretty
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Then execute with a signed x402 payment (see the `CommerceClient` example in README.md) or
|
package/bin/xytara-first-run.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
const path = require("path");
|
|
5
5
|
const { spawnSync } = require("child_process");
|
|
6
6
|
|
|
7
|
-
const DEFAULT_SERVICE_URL = "https://
|
|
7
|
+
const DEFAULT_SERVICE_URL = "https://api.naxytra.com";
|
|
8
8
|
const DEFAULT_KIT_URL = "https://www.naxytra.com/v1/first-run-kit";
|
|
9
9
|
const DEFAULT_TEXT = "Summarize the naxytra first-run path in one sentence.";
|
|
10
10
|
const ACCOUNT_PLACEHOLDER = "ACCOUNT_REF";
|
package/bin/xytara.js
CHANGED
|
@@ -24,7 +24,7 @@ function printUsage() {
|
|
|
24
24
|
" xytara first-run --execute-with-credits --account ACCOUNT_REF --pretty",
|
|
25
25
|
" xytara run --help",
|
|
26
26
|
"",
|
|
27
|
-
"The runtime is a hosted service (https://
|
|
27
|
+
"The runtime is a hosted service (https://api.naxytra.com); this package is the client."
|
|
28
28
|
].join("\n"));
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -43,7 +43,7 @@ function printStartHere() {
|
|
|
43
43
|
"1. Open https://www.naxytra.com/v1/first-run-path",
|
|
44
44
|
"2. Open https://www.naxytra.com/v1/first-run-kit for copyable commands.",
|
|
45
45
|
"3. Quote safely first:",
|
|
46
|
-
" xytara-run --url https://
|
|
46
|
+
" xytara-run --url https://api.naxytra.com --account ACCOUNT_REF --task adapter.mcp.invoke --command mcp.invoke:summarize --body-json \"{\\\"tool_name\\\":\\\"summarize\\\",\\\"arguments\\\":{\\\"text\\\":\\\"Summarize the naxytra first-run path in one sentence.\\\"}}\" --quote-only --pretty",
|
|
47
47
|
"4. Execute with direct signed payment or credits-first on a funded account.",
|
|
48
48
|
"5. Hand the result into xoonya for proof review and verification.",
|
|
49
49
|
"",
|
package/client.js
CHANGED
|
@@ -27,8 +27,8 @@ const { version } = require("./package.json");
|
|
|
27
27
|
// and receipt verification (GET /.well-known/delivery-receipt-keys, POST /v1/delivery-receipts/verify).
|
|
28
28
|
// `mcp` is the pay-per-call MCP server (Streamable HTTP).
|
|
29
29
|
const endpoints = Object.freeze({
|
|
30
|
-
runtime: "https://
|
|
31
|
-
mcp: "https://
|
|
30
|
+
runtime: "https://api.naxytra.com",
|
|
31
|
+
mcp: "https://mcp.naxytra.com/mcp",
|
|
32
32
|
website: "https://www.naxytra.com"
|
|
33
33
|
});
|
|
34
34
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xytara",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.9",
|
|
4
4
|
"description": "Client for the hosted naxytra runtime: discover a capability, pay per call with x402 (gasless USDC on Base) or credits, get the deliverable and a signed delivery receipt you can verify offline. The runtime is a hosted service; this package is the client.",
|
|
5
5
|
"main": "client.js",
|
|
6
6
|
"exports": {
|
package/scripts/verify_client.js
CHANGED
|
@@ -257,8 +257,8 @@ async function main() {
|
|
|
257
257
|
}
|
|
258
258
|
assert.strictEqual(RECEIPT_VERSION, "naxytra-delivery-receipt/1", "receipt version mismatch");
|
|
259
259
|
assert.strictEqual(ATTESTATION_VERSION, "naxytra-attestation/1", "attestation version mismatch");
|
|
260
|
-
assert.strictEqual(endpoints.runtime, "https://
|
|
261
|
-
assert.strictEqual(endpoints.mcp, "https://
|
|
260
|
+
assert.strictEqual(endpoints.runtime, "https://api.naxytra.com", "runtime endpoint mismatch");
|
|
261
|
+
assert.strictEqual(endpoints.mcp, "https://mcp.naxytra.com/mcp", "mcp endpoint mismatch");
|
|
262
262
|
assert.strictEqual(endpoints.website, "https://www.naxytra.com", "website endpoint mismatch");
|
|
263
263
|
assert.strictEqual(version, packageJson.version, "version export must come from package.json");
|
|
264
264
|
assert.strictEqual(require(path.join(PACKAGE_DIR, "client.js")), client, "client entry is a stable singleton");
|