@muhaven/mcp 0.2.5 → 0.2.6
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 +37 -0
- package/dist/broker.cjs +1 -1
- package/dist/broker.js +1 -1
- package/dist/index.cjs +3 -2
- package/dist/index.js +3 -2
- package/manifest.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.6] — 2026-05-23
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`PLACEHOLDER_SIGNATURE` uses exact `@zerodev/sdk::DUMMY_ECDSA_SIG`
|
|
15
|
+
bytes** — NOT random `0xfe`-filled high-entropy bytes (the 0.2.5
|
|
16
|
+
regression). Per `@zerodev/permissions::toPermissionValidator.js`,
|
|
17
|
+
the canonical stub signature for paymaster simulation is:
|
|
18
|
+
|
|
19
|
+
concat(["0xff", signer.getDummySignature()])
|
|
20
|
+
↓ ↓
|
|
21
|
+
"use root permission" DUMMY_ECDSA_SIG = "0xfffffff...7aa...aaa...1c"
|
|
22
|
+
|
|
23
|
+
The DUMMY_ECDSA_SIG is a CRAFTED 65-byte pattern (r is high-end of
|
|
24
|
+
secp256k1's field, s is `7aa...aaa`, v is `0x1c`) that the
|
|
25
|
+
PermissionValidator's `validateUserOp` simulation path recognizes
|
|
26
|
+
as a stub and skips real ecrecover. 0.2.5 had the right length (66
|
|
27
|
+
bytes) and the right `0xff` prefix, but filled the trailing 65
|
|
28
|
+
bytes with random `0xfe` — the validator ecrecovers them as if
|
|
29
|
+
real, gets a garbage address that doesn't match the bound session-
|
|
30
|
+
key, reverts with `AA23` → paymaster returns rpc_error → MCP maps
|
|
31
|
+
to `paymaster_rejected`.
|
|
32
|
+
|
|
33
|
+
The new `pathDFallbackDetail` echo (0.2.5) made this trivially
|
|
34
|
+
diagnosable on the very next smoke iteration — the surfaced
|
|
35
|
+
message was `zd_sponsorUserOperation → HTTP 400 → AA23 reverted`
|
|
36
|
+
which pinned the validator-revert layer.
|
|
37
|
+
|
|
38
|
+
Verified 2026-05-23 against `@zerodev/sdk@5.5.10`'s
|
|
39
|
+
`_cjs/constants.js::DUMMY_ECDSA_SIG` and
|
|
40
|
+
`@zerodev/permissions/_cjs/toPermissionValidator.js::getStubSignature`.
|
|
41
|
+
|
|
42
|
+
Regression tests pin: byte length (66), `0xff` prefix, trailing
|
|
43
|
+
65-byte byte-for-byte match against DUMMY_ECDSA_SIG, v=0x1c,
|
|
44
|
+
s-component magic pattern (rejecting the 0.2.5 `0xfe`-filled
|
|
45
|
+
shape).
|
|
46
|
+
|
|
10
47
|
## [0.2.5] — 2026-05-23
|
|
11
48
|
|
|
12
49
|
### Fixed
|
package/dist/broker.cjs
CHANGED
package/dist/broker.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1923,7 +1923,8 @@ var SUBSCRIPTION_PURCHASE_SELECTOR = viem.toFunctionSelector(
|
|
|
1923
1923
|
var SUBSCRIPTION_PURCHASE_ABI = viem.parseAbi([
|
|
1924
1924
|
"function purchase(address token, (uint256 ctHash, uint8 securityZone, uint8 utype, bytes signature) encShares, uint128 maxSharesHint, address ephemeralEOA)"
|
|
1925
1925
|
]);
|
|
1926
|
-
var
|
|
1926
|
+
var ZERODEV_DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
1927
|
+
var PLACEHOLDER_SIGNATURE = `0xff${ZERODEV_DUMMY_ECDSA_SIG.slice(2)}`;
|
|
1927
1928
|
function ok(data) {
|
|
1928
1929
|
return { ok: true, data };
|
|
1929
1930
|
}
|
|
@@ -3056,7 +3057,7 @@ var SERVER_NAME = "@muhaven/mcp";
|
|
|
3056
3057
|
var SERVER_VERSION = resolveServerVersion();
|
|
3057
3058
|
function resolveServerVersion() {
|
|
3058
3059
|
{
|
|
3059
|
-
return "0.2.
|
|
3060
|
+
return "0.2.6";
|
|
3060
3061
|
}
|
|
3061
3062
|
}
|
|
3062
3063
|
function toJsonInputSchema(schema) {
|
package/dist/index.js
CHANGED
|
@@ -1919,7 +1919,8 @@ var SUBSCRIPTION_PURCHASE_SELECTOR = toFunctionSelector(
|
|
|
1919
1919
|
var SUBSCRIPTION_PURCHASE_ABI = parseAbi([
|
|
1920
1920
|
"function purchase(address token, (uint256 ctHash, uint8 securityZone, uint8 utype, bytes signature) encShares, uint128 maxSharesHint, address ephemeralEOA)"
|
|
1921
1921
|
]);
|
|
1922
|
-
var
|
|
1922
|
+
var ZERODEV_DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
1923
|
+
var PLACEHOLDER_SIGNATURE = `0xff${ZERODEV_DUMMY_ECDSA_SIG.slice(2)}`;
|
|
1923
1924
|
function ok(data) {
|
|
1924
1925
|
return { ok: true, data };
|
|
1925
1926
|
}
|
|
@@ -3052,7 +3053,7 @@ var SERVER_NAME = "@muhaven/mcp";
|
|
|
3052
3053
|
var SERVER_VERSION = resolveServerVersion();
|
|
3053
3054
|
function resolveServerVersion() {
|
|
3054
3055
|
{
|
|
3055
|
-
return "0.2.
|
|
3056
|
+
return "0.2.6";
|
|
3056
3057
|
}
|
|
3057
3058
|
}
|
|
3058
3059
|
function toJsonInputSchema(schema) {
|
package/manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"manifest_version": "0.2",
|
|
4
4
|
"name": "muhaven-mcp",
|
|
5
5
|
"display_name": "MuHaven (RWA portfolio)",
|
|
6
|
-
"version": "0.2.
|
|
6
|
+
"version": "0.2.6",
|
|
7
7
|
"description": "Confidential RWA portfolio management on Fhenix CoFHE. Read your encrypted balances, propose yield claims and policy changes — all signing happens in a sibling broker daemon, the LLM never sees your private key.",
|
|
8
8
|
"long_description": "MuHaven MCP exposes 24 tools across read.* / position.* / policy.* / issuer.* / governance.* groups for managing real-world asset (RWA) tokens with FHE-encrypted balances. Authentication uses a one-time device-code ceremony (run `muhaven-broker login`); subsequent tool calls fetch the JWT from the broker over a Unix socket. Position / governance tools deep-link to the dashboard for passkey signing — they NEVER auto-submit to a bundler. The companion `muhaven-broker` daemon must be running before tools can be invoked. See README for setup.",
|
|
9
9
|
"author": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@muhaven/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "MuHaven MCP server — read/position/policy toolsets bridging Claude Desktop / Cursor / Claude Code to the MuHaven backend, with a sibling muhaven-broker daemon holding the session-key private half over a local IPC socket",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|