@purplesquirrel/hedera-mcp 0.4.0 → 0.5.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,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0
4
+
5
+ - **ABI-aware contract calls.** `query_contract` and `execute_contract` now accept `{ abi, functionName, args }` — calldata is encoded (and read results decoded) automatically via viem, with integer args coerced to BigInt from the ABI. Raw `dataHex` / `functionParametersBase64` remain as fallbacks. Agents no longer need to hand-encode selectors.
6
+ - Verified live: `test-contract-abi.mjs` reads a deployed contract by ABI — `answer()` → 73 (uint), `title()` → "hedera-mcp" (string), `ping()` → 73 (pure) — with zero hand-encoded calldata.
7
+
3
8
  ## 0.4.0
4
9
 
5
10
  - **MCP resources** (4): `hedera://network/exchange-rate`, `hedera://network/supply`, and templated `hedera://account/{id}` and `hedera://token/{id}` — addressable, keyless state agents can read by URI, alongside the 73 tools.
package/README.md CHANGED
@@ -101,7 +101,7 @@ hedera_decode_transaction { transactionBase64: "<bytes>" }
101
101
 
102
102
  **Consensus / HCS (6):** create_topic · submit_message · update_topic · delete_topic · get_topic_info · get_topic_messages
103
103
 
104
- **Smart contract / EVM (6):** deploy_contract · execute_contract · update_contract · delete_contract · query_contract (eth_call) · get_contract_info
104
+ **Smart contract / EVM (6):** deploy_contract · execute_contract · update_contract · delete_contract · query_contract · get_contract_info — `execute_contract` & `query_contract` are **ABI-aware** (pass `{ abi, functionName, args }`; calldata encoded + results decoded automatically)
105
105
 
106
106
  **File (4):** create_file · append_file · update_file · delete_file
107
107
 
@@ -121,14 +121,16 @@ Besides tools, the server exposes addressable, keyless MCP **resources** agents
121
121
 
122
122
  - [`examples/TUTORIAL.md`](examples/TUTORIAL.md) — **Build on Hedera in 5 prompts** (the certified→shipping learning path)
123
123
  - [`examples/agent-demo.md`](examples/agent-demo.md) — wire into Claude Desktop and build by asking; `node examples/agent-sim.mjs` prints a reproducible agent transcript
124
+ - [`examples/scenarios/`](examples/scenarios/) — unique use cases, each runnable + Mirror Node-verified: **HCS notary**, **AI agent audit trail**, **agent-to-agent payments**, **self-taxing token**
124
125
 
125
126
  ## Verification
126
127
 
127
128
  - `npm run lint` / `npm run build` — clean against `@hashgraph/sdk` 2.81.0
128
- - `node test-battle.mjs` — **72/73** build + read tools pass against live testnet
129
+ - `node test-battle.mjs` — 72/73 in the auto-discovery suite (1 skip: `query_contract` needs a known ABI, verified separately) → **all 73 tools verified**
129
130
  - `node test-live.mjs` — **10/10 write paths executed on testnet**, Mirror Node-verified
130
131
  - `node test-battle-live.mjs` — **battle mode: 31/31 operations on testnet** across two accounts (full token lifecycle incl. freeze/KYC/pause/wipe, NFT, topic, file, scheduled transfer requiring a 2nd signer, PRNG), Mirror Node-verified
131
132
  - `node test-contract.mjs` — real Solidity contract **compiled → deployed → executed → read** end-to-end (`store(42)` → `retrieve()` = 42), confirming the full EVM path and `query_contract`
133
+ - `node test-contract-abi.mjs` — **ABI-aware** `query_contract`: fed a raw ABI, it auto-encodes/decodes — `answer()` → 73 (uint), `title()` → "hedera-mcp" (string), `ping()` → 73 (pure)
132
134
 
133
135
  ## Development
134
136
 
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@ import { registerResources } from "./resources.js";
31
31
  const ctx = new HederaCtx();
32
32
  const server = new McpServer({
33
33
  name: "hedera-mcp",
34
- version: "0.4.0",
34
+ version: "0.5.0",
35
35
  });
36
36
  let toolCount = 0;
37
37
  const register = (name, description, shape, handler) => {
@@ -1,7 +1,35 @@
1
- /** Smart contract service (EVM). Writes are build-only; reads use Mirror Node eth_call. */
1
+ /** Smart contract service (EVM). Writes are build-only; reads use Mirror Node eth_call.
2
+ *
3
+ * Contract calls are ABI-aware: pass { abi, functionName, args } and the tool encodes
4
+ * the calldata (and decodes read results) via viem — no hand-encoded hex required.
5
+ * Raw `dataHex` / `functionParametersBase64` remain supported as a fallback. */
2
6
  import { z } from "zod";
7
+ import { decodeFunctionResult, encodeFunctionData } from "viem";
3
8
  import { AccountId, ContractCreateTransaction, ContractDeleteTransaction, ContractExecuteTransaction, ContractId, ContractUpdateTransaction, FileId, Hbar, } from "@hashgraph/sdk";
4
9
  import { json } from "../context.js";
10
+ // Coerce JSON args to the types viem expects, based on the function's ABI inputs
11
+ // (integers → BigInt, bool strings → boolean). Addresses/strings pass through.
12
+ function coerceArgs(abi, functionName, args = []) {
13
+ const fn = abi.find((x) => x?.type === "function" && x?.name === functionName);
14
+ const inputs = fn?.inputs ?? [];
15
+ return args.map((v, i) => {
16
+ const t = inputs[i]?.type ?? "";
17
+ if (/^u?int\d*$/.test(t) && !Array.isArray(v))
18
+ return BigInt(v);
19
+ if (t === "bool")
20
+ return typeof v === "boolean" ? v : v === "true";
21
+ return v;
22
+ });
23
+ }
24
+ // BigInt-safe JSON (decoded results often contain bigints).
25
+ function abiJson(v) {
26
+ return JSON.stringify(v, (_k, val) => (typeof val === "bigint" ? val.toString() : val), 2);
27
+ }
28
+ const ABI_FIELDS = {
29
+ abi: z.array(z.any()).optional().describe("Contract ABI (JSON array) — enables auto encode/decode"),
30
+ functionName: z.string().optional().describe("Function name to call (used with abi)"),
31
+ args: z.array(z.any()).optional().describe("Function arguments (used with abi)"),
32
+ };
5
33
  export function registerContractTools(register, ctx) {
6
34
  register("hedera_deploy_contract", "Build (unsigned) a contract deployment from bytecode already stored in a Hedera File (see hedera_create_file).", {
7
35
  bytecodeFileId: z.string().describe("File id holding the compiled bytecode (hex)"),
@@ -23,22 +51,40 @@ export function registerContractTools(register, ctx) {
23
51
  tx.setConstructorParameters(Buffer.from(a.constructorParamsBase64, "base64"));
24
52
  return ctx.buildAndRender(tx, `Deploy contract from file ${a.bytecodeFileId} · gas ${a.gas}`, a.payerAccountId);
25
53
  });
26
- register("hedera_execute_contract", "Build (unsigned) a state-changing contract call. Provide ABI-encoded calldata as base64.", {
54
+ register("hedera_execute_contract", "Build (unsigned) a state-changing contract call. Pass { abi, functionName, args } for automatic encoding, or raw functionParametersBase64.", {
27
55
  contractId: z.string().describe("Contract id (0.0.x) or EVM address"),
28
56
  gas: z.number().int().positive(),
57
+ ...ABI_FIELDS,
29
58
  functionParametersBase64: z
30
59
  .string()
31
- .describe("ABI-encoded calldata (selector + args) as base64"),
60
+ .optional()
61
+ .describe("Fallback: ABI-encoded calldata (selector + args) as base64"),
32
62
  payableAmountHbar: z.number().optional().describe("HBAR to send with the call"),
33
63
  payerAccountId: z.string().optional(),
34
64
  }, async (a) => {
65
+ let params;
66
+ if (a.abi && a.functionName) {
67
+ const hex = encodeFunctionData({
68
+ abi: a.abi,
69
+ functionName: a.functionName,
70
+ args: coerceArgs(a.abi, a.functionName, a.args),
71
+ });
72
+ params = Buffer.from(hex.slice(2), "hex");
73
+ }
74
+ else if (a.functionParametersBase64) {
75
+ params = Buffer.from(a.functionParametersBase64, "base64");
76
+ }
77
+ else {
78
+ throw new Error("Provide either { abi, functionName, args? } or functionParametersBase64.");
79
+ }
35
80
  const tx = new ContractExecuteTransaction()
36
81
  .setContractId(ContractId.fromString(a.contractId))
37
82
  .setGas(a.gas)
38
- .setFunctionParameters(Buffer.from(a.functionParametersBase64, "base64"));
83
+ .setFunctionParameters(params);
39
84
  if (a.payableAmountHbar != null)
40
85
  tx.setPayableAmount(new Hbar(a.payableAmountHbar));
41
- return ctx.buildAndRender(tx, `Execute contract ${a.contractId} · gas ${a.gas}`, a.payerAccountId);
86
+ const label = a.functionName ? `${a.functionName}()` : "calldata";
87
+ return ctx.buildAndRender(tx, `Execute contract ${a.contractId} · ${label} · gas ${a.gas}`, a.payerAccountId);
42
88
  });
43
89
  register("hedera_update_contract", "Build (unsigned) an update to a contract's memo or admin key (requires admin key to sign).", {
44
90
  contractId: z.string(),
@@ -60,19 +106,39 @@ export function registerContractTools(register, ctx) {
60
106
  .setTransferAccountId(AccountId.fromString(a.transferAccountId));
61
107
  return ctx.buildAndRender(tx, `Delete contract ${a.contractId}`, a.payerAccountId);
62
108
  });
63
- register("hedera_query_contract", "Read a contract view/pure function via the Mirror Node eth_call endpoint (keyless, no gas spent).", {
109
+ register("hedera_query_contract", "Read a contract view/pure function via Mirror Node eth_call (keyless, no gas). Pass { abi, functionName, args } for auto encode/decode, or raw dataHex.", {
64
110
  contractIdOrAddress: z.string().describe("Contract id (0.0.x) or 0x EVM address"),
65
- dataHex: z.string().describe("ABI-encoded calldata as 0x-prefixed hex"),
111
+ ...ABI_FIELDS,
112
+ dataHex: z.string().optional().describe("Fallback: ABI-encoded calldata as 0x-prefixed hex"),
66
113
  fromAddress: z.string().optional().describe("Optional 0x caller address"),
67
114
  }, async (a) => {
68
- const body = {
69
- to: a.contractIdOrAddress,
70
- data: a.dataHex.startsWith("0x") ? a.dataHex : `0x${a.dataHex}`,
71
- estimate: false,
72
- };
115
+ let data;
116
+ if (a.abi && a.functionName) {
117
+ data = encodeFunctionData({
118
+ abi: a.abi,
119
+ functionName: a.functionName,
120
+ args: coerceArgs(a.abi, a.functionName, a.args),
121
+ });
122
+ }
123
+ else if (a.dataHex) {
124
+ data = a.dataHex.startsWith("0x") ? a.dataHex : `0x${a.dataHex}`;
125
+ }
126
+ else {
127
+ throw new Error("Provide either { abi, functionName, args? } or dataHex.");
128
+ }
129
+ const body = { to: a.contractIdOrAddress, data, estimate: false };
73
130
  if (a.fromAddress)
74
131
  body.from = a.fromAddress;
75
- return json(await ctx.mirrorPost(`/api/v1/contracts/call`, body));
132
+ const res = await ctx.mirrorPost(`/api/v1/contracts/call`, body);
133
+ if (a.abi && a.functionName && res?.result) {
134
+ const decoded = decodeFunctionResult({
135
+ abi: a.abi,
136
+ functionName: a.functionName,
137
+ data: res.result,
138
+ });
139
+ return abiJson({ function: a.functionName, result: res.result, decoded });
140
+ }
141
+ return abiJson(res);
76
142
  });
77
143
  register("hedera_get_contract_info", "Read contract info (admin key, bytecode metadata, EVM address) from the Mirror Node.", { contractId: z.string() }, async (a) => json(await ctx.mirror(`/api/v1/contracts/${encodeURIComponent(a.contractId)}`)));
78
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/tools/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/tools/contract.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purplesquirrel/hedera-mcp",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "mcpName": "io.github.ExpertVagabond/hedera-mcp",
5
5
  "description": "Comprehensive MCP server for Hedera (Hashgraph) — full coverage of Account, Token (HTS), Consensus (HCS), Smart Contract (EVM), File, Schedule, and Network services. Reads via Mirror Node (keyless); writes are build-only (returns unsigned serialized transactions). Never holds keys.",
6
6
  "type": "module",
@@ -43,6 +43,7 @@
43
43
  "dependencies": {
44
44
  "@hashgraph/sdk": "^2.0.0",
45
45
  "@modelcontextprotocol/sdk": "^1.12.1",
46
+ "viem": "^2.51.3",
46
47
  "zod": "^3.23.8"
47
48
  },
48
49
  "devDependencies": {