@blindmarket/mcp-server 0.3.4 → 0.3.5

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/dist/wallet.js CHANGED
@@ -1,4 +1,15 @@
1
1
  import { Wallet, JsonRpcProvider, formatEther } from 'ethers';
2
+ /**
3
+ * Local signing wallet for the trust-preserving (Tier 2) flows: rent_service /
4
+ * post_task fund escrow from THIS wallet, and briefs are encrypted locally —
5
+ * the platform never sees plaintext or keys.
6
+ *
7
+ * The private key never appears in any tool output or log. Configure via:
8
+ * BLINDMARKET_PRIVATE_KEY hex private key of the funding wallet
9
+ * BLINDMARKET_RPC_URL optional; defaults to 0G Mainnet
10
+ * BLINDMARKET_CHAIN_ID optional; defaults to 16661 (0G Mainnet)
11
+ */
12
+ import { derivePublicKeyHex } from './crypto.js';
2
13
  export const DEFAULT_RPC_URL = 'https://evmrpc.0g.ai';
3
14
  export const DEFAULT_CHAIN_ID = 16661;
4
15
  export function loadWallet() {
@@ -11,30 +22,53 @@ export function loadWallet() {
11
22
  const wallet = new Wallet(pk.startsWith('0x') ? pk : `0x${pk}`, provider);
12
23
  return { wallet, provider, rpcUrl, chainId };
13
24
  }
14
- export function registerWalletTools(server, ctx) {
25
+ /** `settlement` is the resolver rent.ts builds — how spends are paid for. It
26
+ * is reported here because "is a private key set" stopped being the whole
27
+ * answer once Base landed: on Base nothing signs locally, so a missing key
28
+ * is fine and the thing to show is the relay wallet instead. */
29
+ export function registerWalletTools(server, ctx, settlement) {
15
30
  server.registerTool('wallet_status', {
16
31
  title: 'Wallet Status',
17
- description: 'The local funding wallet used by rent_service/post_task: address, native 0G balance, chain. Returns not_configured if BLINDMARKET_PRIVATE_KEY is unset.',
32
+ description: 'How rent_service/post_task/cancel_task/claim_timeout pay: the settlement chain the backend is in (Base USDC via the gas-sponsored relay, or native 0G from the local wallet), the wallet that pays, and its balance. The local wallet section is not_configured if BLINDMARKET_PRIVATE_KEY is unset — that only matters for 0G.',
18
33
  inputSchema: {},
19
34
  annotations: { readOnlyHint: true, openWorldHint: true },
20
35
  }, async () => {
21
- if (!ctx) {
22
- return {
23
- content: [{
24
- type: 'text',
25
- text: JSON.stringify({ configured: false, hint: 'Set BLINDMARKET_PRIVATE_KEY (and optionally BLINDMARKET_RPC_URL) to enable spending tools' }),
26
- }],
27
- };
36
+ const localWallet = ctx
37
+ ? {
38
+ configured: true, address: ctx.wallet.address, chainId: ctx.chainId, rpcUrl: ctx.rpcUrl,
39
+ // What to pass as `publicKey` to register_as_executor. Posters ECIES-wrap
40
+ // the brief key to it, and fetch_brief decrypts with the matching
41
+ // private key — so an executor that registers any OTHER pubkey can
42
+ // accept a private task and never open it.
43
+ executorPublicKey: derivePublicKeyHex(ctx.wallet.privateKey),
44
+ }
45
+ : { configured: false, hint: 'Set BLINDMARKET_PRIVATE_KEY (and optionally BLINDMARKET_RPC_URL) to spend on 0G. Not needed when the backend settles on Base.' };
46
+ if (ctx) {
47
+ try {
48
+ localWallet.balance0G = formatEther(await ctx.provider.getBalance(ctx.wallet.address));
49
+ }
50
+ catch { /* RPC unreachable — report address anyway */ }
28
51
  }
29
- let balance = null;
30
- try {
31
- balance = formatEther(await ctx.provider.getBalance(ctx.wallet.address));
52
+ let settlementReport;
53
+ if (!settlement) {
54
+ settlementReport = { mode: 'unknown' };
55
+ }
56
+ else {
57
+ try {
58
+ const s = await settlement();
59
+ settlementReport = s.mode === 'base'
60
+ ? { mode: 'base', chainId: s.chainId, escrowAddress: s.escrowAddress, usdcAddress: s.usdcAddress, relayChain: s.relayChain, payFrom: s.payFrom, signs: 'backend relay (Privy) — no local key involved. Gas: sponsored in USDC where Privy sponsorship is enabled for this chain, otherwise from payFrom\'s own native balance' }
61
+ : { mode: '0g', payFrom: ctx?.wallet.address ?? null, signs: ctx ? 'local wallet' : 'NOTHING — set BLINDMARKET_PRIVATE_KEY' };
62
+ }
63
+ catch (err) {
64
+ settlementReport = { mode: 'unknown', error: err.message };
65
+ }
32
66
  }
33
- catch { /* RPC unreachable — report address anyway */ }
34
67
  return {
35
68
  content: [{
36
69
  type: 'text',
37
- text: JSON.stringify({ configured: true, address: ctx.wallet.address, balance0G: balance, chainId: ctx.chainId, rpcUrl: ctx.rpcUrl }, null, 2),
70
+ // `configured` kept at top level for existing readers of this tool.
71
+ text: JSON.stringify({ configured: !!ctx, ...localWallet, settlement: settlementReport }, null, 2),
38
72
  }],
39
73
  };
40
74
  });
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAqB9D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC/C,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,eAAe,CAAC;IAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,GAAqB;IAC1E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,yJAAyJ;QACtK,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACzD,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,2FAA2F,EAAE,CAAC;qBAC/I,CAAC;aACH,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;QACzD,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC/I,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blindmarket/mcp-server",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "MCP server exposing BlindMarket tools — task marketplace, agent management, A2A, and persistent executor loop",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "test": "npm run build && node --test test/*.test.mjs"
18
18
  },
19
19
  "dependencies": {
20
- "@blindmarket/sdk": "^0.5.0",
20
+ "@blindmarket/sdk": "^0.6.1",
21
21
  "@modelcontextprotocol/sdk": "^1.12.0",
22
22
  "ethers": "^6.13.1",
23
23
  "zod": "^3.24.0"