@purplesquirrel/hedera-mcp 0.1.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 +14 -0
- package/LICENSE +21 -0
- package/README.md +127 -0
- package/dist/context.d.ts +55 -0
- package/dist/context.js +162 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/networks.d.ts +18 -0
- package/dist/networks.js +39 -0
- package/dist/networks.js.map +1 -0
- package/dist/tools/account.d.ts +3 -0
- package/dist/tools/account.js +79 -0
- package/dist/tools/account.js.map +1 -0
- package/dist/tools/consensus.d.ts +3 -0
- package/dist/tools/consensus.js +54 -0
- package/dist/tools/consensus.js.map +1 -0
- package/dist/tools/contract.d.ts +3 -0
- package/dist/tools/contract.js +59 -0
- package/dist/tools/contract.js.map +1 -0
- package/dist/tools/file.d.ts +3 -0
- package/dist/tools/file.js +35 -0
- package/dist/tools/file.js.map +1 -0
- package/dist/tools/network.d.ts +3 -0
- package/dist/tools/network.js +26 -0
- package/dist/tools/network.js.map +1 -0
- package/dist/tools/schedule.d.ts +3 -0
- package/dist/tools/schedule.js +35 -0
- package/dist/tools/schedule.js.map +1 -0
- package/dist/tools/token.d.ts +3 -0
- package/dist/tools/token.js +194 -0
- package/dist/tools/token.js.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/logo.svg +17 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Consensus service (HCS): topics + messages. Reads via Mirror Node. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { PublicKey, TopicCreateTransaction, TopicDeleteTransaction, TopicId, TopicMessageSubmitTransaction, TopicUpdateTransaction, } from "@hashgraph/sdk";
|
|
4
|
+
import { json } from "../context.js";
|
|
5
|
+
export function registerConsensusTools(register, ctx) {
|
|
6
|
+
register("hedera_create_topic", "Build (unsigned) a new HCS topic for ordered, timestamped messages.", {
|
|
7
|
+
memo: z.string().optional().describe("Topic memo"),
|
|
8
|
+
adminKey: z.string().optional().describe("Admin public key (enables update/delete)"),
|
|
9
|
+
submitKey: z.string().optional().describe("Submit public key (restricts who can post)"),
|
|
10
|
+
payerAccountId: z.string().optional(),
|
|
11
|
+
}, async (a) => {
|
|
12
|
+
const tx = new TopicCreateTransaction();
|
|
13
|
+
if (a.memo)
|
|
14
|
+
tx.setTopicMemo(a.memo);
|
|
15
|
+
if (a.adminKey)
|
|
16
|
+
tx.setAdminKey(PublicKey.fromString(a.adminKey));
|
|
17
|
+
if (a.submitKey)
|
|
18
|
+
tx.setSubmitKey(PublicKey.fromString(a.submitKey));
|
|
19
|
+
return ctx.buildAndRender(tx, `Create HCS topic${a.memo ? ` · "${a.memo}"` : ""}`, a.payerAccountId);
|
|
20
|
+
});
|
|
21
|
+
register("hedera_submit_message", "Build (unsigned) a message submission to an HCS topic.", {
|
|
22
|
+
topicId: z.string(),
|
|
23
|
+
message: z.string().describe("UTF-8 message payload"),
|
|
24
|
+
payerAccountId: z.string().optional(),
|
|
25
|
+
}, async (a) => {
|
|
26
|
+
const tx = new TopicMessageSubmitTransaction()
|
|
27
|
+
.setTopicId(TopicId.fromString(a.topicId))
|
|
28
|
+
.setMessage(a.message);
|
|
29
|
+
return ctx.buildAndRender(tx, `Submit message to ${a.topicId} (${Buffer.from(a.message).length} bytes)`, a.payerAccountId);
|
|
30
|
+
});
|
|
31
|
+
register("hedera_update_topic", "Build (unsigned) an update to an HCS topic memo.", { topicId: z.string(), memo: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
32
|
+
const tx = new TopicUpdateTransaction().setTopicId(TopicId.fromString(a.topicId)).setTopicMemo(a.memo);
|
|
33
|
+
return ctx.buildAndRender(tx, `Update topic ${a.topicId}`, a.payerAccountId);
|
|
34
|
+
});
|
|
35
|
+
register("hedera_delete_topic", "Build (unsigned) a deletion of an HCS topic (requires admin key).", { topicId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
36
|
+
const tx = new TopicDeleteTransaction().setTopicId(TopicId.fromString(a.topicId));
|
|
37
|
+
return ctx.buildAndRender(tx, `Delete topic ${a.topicId}`, a.payerAccountId);
|
|
38
|
+
});
|
|
39
|
+
// ---- Mirror Node reads (keyless) ----
|
|
40
|
+
register("hedera_get_topic_info", "Read HCS topic info from the Mirror Node.", { topicId: z.string() }, async (a) => json(await ctx.mirror(`/api/v1/topics/${encodeURIComponent(a.topicId)}`)));
|
|
41
|
+
register("hedera_get_topic_messages", "Read recent messages from an HCS topic via the Mirror Node (decodes base64 payloads).", {
|
|
42
|
+
topicId: z.string(),
|
|
43
|
+
limit: z.number().int().min(1).max(100).optional().describe("Max messages (default 25)"),
|
|
44
|
+
}, async (a) => {
|
|
45
|
+
const data = await ctx.mirror(`/api/v1/topics/${encodeURIComponent(a.topicId)}/messages?limit=${a.limit ?? 25}&order=desc`);
|
|
46
|
+
const messages = (data.messages ?? []).map((m) => ({
|
|
47
|
+
sequence_number: m.sequence_number,
|
|
48
|
+
consensus_timestamp: m.consensus_timestamp,
|
|
49
|
+
message: m.message ? Buffer.from(m.message, "base64").toString("utf8") : null,
|
|
50
|
+
}));
|
|
51
|
+
return json({ topicId: a.topicId, count: messages.length, messages });
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=consensus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consensus.js","sourceRoot":"","sources":["../../src/tools/consensus.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,OAAO,EACP,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAa,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,sBAAsB,CAAC,QAAkB,EAAE,GAAc;IACvE,QAAQ,CACN,qBAAqB,EACrB,qEAAqE,EACrE;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACpF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QACvF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACtC,EACD,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,EAAE,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,IAAI;YAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,QAAQ;YAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,SAAS;YAAE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACpE,OAAO,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IACvG,CAAC,CACF,CAAC;IAEF,QAAQ,CACN,uBAAuB,EACvB,wDAAwD,EACxD;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACtC,EACD,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,EAAE,GAAG,IAAI,6BAA6B,EAAE;aAC3C,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aACzC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC,cAAc,CACvB,EAAE,EACF,qBAAqB,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,SAAS,EACzE,CAAC,CAAC,cAAc,CACjB,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,QAAQ,CACN,qBAAqB,EACrB,kDAAkD,EAClD,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAChF,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,EAAE,GAAG,IAAI,sBAAsB,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvG,OAAO,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAC/E,CAAC,CACF,CAAC;IAEF,QAAQ,CACN,qBAAqB,EACrB,mEAAmE,EACnE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAC9D,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,EAAE,GAAG,IAAI,sBAAsB,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAClF,OAAO,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAC/E,CAAC,CACF,CAAC;IAEF,wCAAwC;IAExC,QAAQ,CACN,uBAAuB,EACvB,2CAA2C,EAC3C,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EACvB,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CACvF,CAAC;IAEF,QAAQ,CACN,2BAA2B,EAC3B,uFAAuF,EACvF;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACzF,EACD,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,IAAI,GAAQ,MAAM,GAAG,CAAC,MAAM,CAChC,kBAAkB,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,KAAK,IAAI,EAAE,aAAa,CAC7F,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACtD,eAAe,EAAE,CAAC,CAAC,eAAe;YAClC,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;YAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;SAC9E,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/** Smart contract service (EVM). Writes are build-only; reads use Mirror Node eth_call. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { ContractCreateTransaction, ContractExecuteTransaction, ContractId, FileId, Hbar, } from "@hashgraph/sdk";
|
|
4
|
+
import { json } from "../context.js";
|
|
5
|
+
export function registerContractTools(register, ctx) {
|
|
6
|
+
register("hedera_deploy_contract", "Build (unsigned) a contract deployment from bytecode already stored in a Hedera File (see hedera_create_file).", {
|
|
7
|
+
bytecodeFileId: z.string().describe("File id holding the compiled bytecode (hex)"),
|
|
8
|
+
gas: z.number().int().positive().describe("Gas limit, e.g. 100000"),
|
|
9
|
+
initialBalanceHbar: z.number().optional().describe("Initial contract balance in HBAR"),
|
|
10
|
+
constructorParamsBase64: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("ABI-encoded constructor params as base64 (omit if none)"),
|
|
14
|
+
adminKey: z.string().optional().describe("Admin public key for the contract"),
|
|
15
|
+
payerAccountId: z.string().optional(),
|
|
16
|
+
}, async (a) => {
|
|
17
|
+
const tx = new ContractCreateTransaction()
|
|
18
|
+
.setBytecodeFileId(FileId.fromString(a.bytecodeFileId))
|
|
19
|
+
.setGas(a.gas);
|
|
20
|
+
if (a.initialBalanceHbar != null)
|
|
21
|
+
tx.setInitialBalance(new Hbar(a.initialBalanceHbar));
|
|
22
|
+
if (a.constructorParamsBase64)
|
|
23
|
+
tx.setConstructorParameters(Buffer.from(a.constructorParamsBase64, "base64"));
|
|
24
|
+
return ctx.buildAndRender(tx, `Deploy contract from file ${a.bytecodeFileId} · gas ${a.gas}`, a.payerAccountId);
|
|
25
|
+
});
|
|
26
|
+
register("hedera_execute_contract", "Build (unsigned) a state-changing contract call. Provide ABI-encoded calldata as base64.", {
|
|
27
|
+
contractId: z.string().describe("Contract id (0.0.x) or EVM address"),
|
|
28
|
+
gas: z.number().int().positive(),
|
|
29
|
+
functionParametersBase64: z
|
|
30
|
+
.string()
|
|
31
|
+
.describe("ABI-encoded calldata (selector + args) as base64"),
|
|
32
|
+
payableAmountHbar: z.number().optional().describe("HBAR to send with the call"),
|
|
33
|
+
payerAccountId: z.string().optional(),
|
|
34
|
+
}, async (a) => {
|
|
35
|
+
const tx = new ContractExecuteTransaction()
|
|
36
|
+
.setContractId(ContractId.fromString(a.contractId))
|
|
37
|
+
.setGas(a.gas)
|
|
38
|
+
.setFunctionParameters(Buffer.from(a.functionParametersBase64, "base64"));
|
|
39
|
+
if (a.payableAmountHbar != null)
|
|
40
|
+
tx.setPayableAmount(new Hbar(a.payableAmountHbar));
|
|
41
|
+
return ctx.buildAndRender(tx, `Execute contract ${a.contractId} · gas ${a.gas}`, a.payerAccountId);
|
|
42
|
+
});
|
|
43
|
+
register("hedera_query_contract", "Read a contract view/pure function via the Mirror Node eth_call endpoint (keyless, no gas spent).", {
|
|
44
|
+
contractIdOrAddress: z.string().describe("Contract id (0.0.x) or 0x EVM address"),
|
|
45
|
+
dataHex: z.string().describe("ABI-encoded calldata as 0x-prefixed hex"),
|
|
46
|
+
fromAddress: z.string().optional().describe("Optional 0x caller address"),
|
|
47
|
+
}, async (a) => {
|
|
48
|
+
const body = {
|
|
49
|
+
to: a.contractIdOrAddress,
|
|
50
|
+
data: a.dataHex.startsWith("0x") ? a.dataHex : `0x${a.dataHex}`,
|
|
51
|
+
estimate: false,
|
|
52
|
+
};
|
|
53
|
+
if (a.fromAddress)
|
|
54
|
+
body.from = a.fromAddress;
|
|
55
|
+
return json(await ctx.mirrorPost(`/api/v1/contracts/call`, body));
|
|
56
|
+
});
|
|
57
|
+
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)}`)));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/tools/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** File service: create / append / delete files (e.g. contract bytecode), plus reads. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { FileAppendTransaction, FileCreateTransaction, FileDeleteTransaction, FileId, PublicKey, } from "@hashgraph/sdk";
|
|
4
|
+
import { json } from "../context.js";
|
|
5
|
+
export function registerFileTools(register, ctx) {
|
|
6
|
+
register("hedera_create_file", "Build (unsigned) a new file. Useful for storing compiled contract bytecode before deployment.", {
|
|
7
|
+
contents: z.string().describe("File contents (UTF-8 text or hex bytecode)"),
|
|
8
|
+
key: z.string().optional().describe("Public key controlling the file (enables append/delete)"),
|
|
9
|
+
memo: z.string().optional(),
|
|
10
|
+
payerAccountId: z.string().optional(),
|
|
11
|
+
}, async (a) => {
|
|
12
|
+
const tx = new FileCreateTransaction().setContents(a.contents);
|
|
13
|
+
if (a.key)
|
|
14
|
+
tx.setKeys([PublicKey.fromString(a.key)]);
|
|
15
|
+
if (a.memo)
|
|
16
|
+
tx.setFileMemo(a.memo);
|
|
17
|
+
return ctx.buildAndRender(tx, `Create file (${Buffer.from(a.contents).length} bytes)`, a.payerAccountId);
|
|
18
|
+
});
|
|
19
|
+
register("hedera_append_file", "Build (unsigned) an append to an existing file (for bytecode larger than one transaction).", {
|
|
20
|
+
fileId: z.string(),
|
|
21
|
+
contents: z.string(),
|
|
22
|
+
payerAccountId: z.string().optional(),
|
|
23
|
+
}, async (a) => {
|
|
24
|
+
const tx = new FileAppendTransaction()
|
|
25
|
+
.setFileId(FileId.fromString(a.fileId))
|
|
26
|
+
.setContents(a.contents);
|
|
27
|
+
return ctx.buildAndRender(tx, `Append ${Buffer.from(a.contents).length} bytes to file ${a.fileId}`, a.payerAccountId);
|
|
28
|
+
});
|
|
29
|
+
register("hedera_delete_file", "Build (unsigned) a file deletion.", { fileId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
30
|
+
const tx = new FileDeleteTransaction().setFileId(FileId.fromString(a.fileId));
|
|
31
|
+
return ctx.buildAndRender(tx, `Delete file ${a.fileId}`, a.payerAccountId);
|
|
32
|
+
});
|
|
33
|
+
register("hedera_get_file_info", "Read file metadata (size, keys, expiry) from the Mirror Node.", { fileId: z.string() }, async (a) => json(await ctx.mirror(`/api/v1/files/${encodeURIComponent(a.fileId)}`)));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Network/utility tools: transactions, nodes, fees, supply, exchange rate, and tx decoding. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { Transaction } from "@hashgraph/sdk";
|
|
4
|
+
import { json, resolveTxType } from "../context.js";
|
|
5
|
+
export function registerNetworkTools(register, ctx) {
|
|
6
|
+
register("hedera_get_transaction", "Read a transaction's records/results from the Mirror Node by transaction id.", { transactionId: z.string().describe("e.g. 0.0.1234-1700000000-000000000 or 0.0.1234@1700000000.0") }, async (a) => {
|
|
7
|
+
// Mirror Node expects 0.0.x-seconds-nanos
|
|
8
|
+
const id = a.transactionId.replace("@", "-").replace(/\.(\d+)$/, "-$1");
|
|
9
|
+
return json(await ctx.mirror(`/api/v1/transactions/${encodeURIComponent(id)}`));
|
|
10
|
+
});
|
|
11
|
+
register("hedera_get_network_nodes", "List the network's consensus nodes and stake from the Mirror Node.", {}, async () => json(await ctx.mirror(`/api/v1/network/nodes?limit=50`)));
|
|
12
|
+
register("hedera_get_exchange_rate", "Read the current HBAR↔USD exchange rate from the Mirror Node.", {}, async () => json(await ctx.mirror(`/api/v1/network/exchangerate`)));
|
|
13
|
+
register("hedera_get_network_supply", "Read total/circulating HBAR supply from the Mirror Node.", {}, async () => json(await ctx.mirror(`/api/v1/network/supply`)));
|
|
14
|
+
register("hedera_get_network_fees", "Read the current network fee schedule from the Mirror Node.", {}, async () => json(await ctx.mirror(`/api/v1/network/fees`)));
|
|
15
|
+
register("hedera_decode_transaction", "Decode a base64 transaction (e.g. one built by this server) into a human-readable summary — useful for review before signing.", { transactionBase64: z.string().describe("Base64 transaction bytes") }, async (a) => {
|
|
16
|
+
const tx = Transaction.fromBytes(Buffer.from(a.transactionBase64, "base64"));
|
|
17
|
+
return json({
|
|
18
|
+
type: resolveTxType(tx),
|
|
19
|
+
transactionId: tx.transactionId?.toString() ?? null,
|
|
20
|
+
nodeAccountIds: tx.nodeAccountIds?.map((n) => n.toString()) ?? null,
|
|
21
|
+
transactionMemo: tx.transactionMemo || null,
|
|
22
|
+
maxTransactionFee: tx.maxTransactionFee?.toString() ?? null,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAa,IAAI,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,GAAc;IACrE,QAAQ,CACN,wBAAwB,EACxB,8EAA8E,EAC9E,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC,EAAE,EACrG,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,0CAA0C;QAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC,CACF,CAAC;IAEF,QAAQ,CACN,0BAA0B,EAC1B,oEAAoE,EACpE,EAAE,EACF,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CACrE,CAAC;IAEF,QAAQ,CACN,0BAA0B,EAC1B,+DAA+D,EAC/D,EAAE,EACF,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CACnE,CAAC;IAEF,QAAQ,CACN,2BAA2B,EAC3B,0DAA0D,EAC1D,EAAE,EACF,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAC7D,CAAC;IAEF,QAAQ,CACN,yBAAyB,EACzB,6DAA6D,EAC7D,EAAE,EACF,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAC3D,CAAC;IAEF,QAAQ,CACN,2BAA2B,EAC3B,+HAA+H,EAC/H,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,EACtE,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;YACV,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YACvB,aAAa,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,IAAI;YACnD,cAAc,EAAE,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI;YACnE,eAAe,EAAE,EAAE,CAAC,eAAe,IAAI,IAAI;YAC3C,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,IAAI;SAC5D,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Scheduled transactions: wrap a build-only inner transaction for multi-party signing. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { PublicKey, ScheduleCreateTransaction, ScheduleDeleteTransaction, ScheduleId, ScheduleSignTransaction, Transaction, } from "@hashgraph/sdk";
|
|
4
|
+
import { json } from "../context.js";
|
|
5
|
+
export function registerScheduleTools(register, ctx) {
|
|
6
|
+
register("hedera_create_schedule", "Build (unsigned) a scheduled transaction wrapping an inner transaction (provided as base64 bytes). Enables multi-party / threshold signing before execution.", {
|
|
7
|
+
scheduledTransactionBase64: z
|
|
8
|
+
.string()
|
|
9
|
+
.describe("Inner transaction bytes (base64) produced by another build tool"),
|
|
10
|
+
adminKey: z.string().optional().describe("Admin public key (enables schedule deletion)"),
|
|
11
|
+
schedulePayerAccountId: z.string().optional().describe("Account that pays when the schedule executes"),
|
|
12
|
+
memo: z.string().optional(),
|
|
13
|
+
payerAccountId: z.string().optional(),
|
|
14
|
+
}, async (a) => {
|
|
15
|
+
const inner = Transaction.fromBytes(Buffer.from(a.scheduledTransactionBase64, "base64"));
|
|
16
|
+
const tx = new ScheduleCreateTransaction().setScheduledTransaction(inner);
|
|
17
|
+
if (a.adminKey)
|
|
18
|
+
tx.setAdminKey(PublicKey.fromString(a.adminKey));
|
|
19
|
+
if (a.schedulePayerAccountId)
|
|
20
|
+
tx.setPayerAccountId(a.schedulePayerAccountId);
|
|
21
|
+
if (a.memo)
|
|
22
|
+
tx.setScheduleMemo(a.memo);
|
|
23
|
+
return ctx.buildAndRender(tx, `Create schedule wrapping ${inner.constructor.name}`, a.payerAccountId);
|
|
24
|
+
});
|
|
25
|
+
register("hedera_sign_schedule", "Build (unsigned) a signature add to an existing scheduled transaction.", { scheduleId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
26
|
+
const tx = new ScheduleSignTransaction().setScheduleId(ScheduleId.fromString(a.scheduleId));
|
|
27
|
+
return ctx.buildAndRender(tx, `Sign schedule ${a.scheduleId}`, a.payerAccountId);
|
|
28
|
+
});
|
|
29
|
+
register("hedera_delete_schedule", "Build (unsigned) a deletion of a scheduled transaction (requires admin key).", { scheduleId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
30
|
+
const tx = new ScheduleDeleteTransaction().setScheduleId(ScheduleId.fromString(a.scheduleId));
|
|
31
|
+
return ctx.buildAndRender(tx, `Delete schedule ${a.scheduleId}`, a.payerAccountId);
|
|
32
|
+
});
|
|
33
|
+
register("hedera_get_schedule_info", "Read scheduled-transaction info (signatures, executed status) from the Mirror Node.", { scheduleId: z.string() }, async (a) => json(await ctx.mirror(`/api/v1/schedules/${encodeURIComponent(a.scheduleId)}`)));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/tools/schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/** Token service (HTS): create, mint, burn, transfer, associate, freeze, KYC, pause, wipe, delete + reads. */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { AccountId, NftId, PublicKey, TokenAssociateTransaction, TokenBurnTransaction, TokenCreateTransaction, TokenDeleteTransaction, TokenDissociateTransaction, TokenFreezeTransaction, TokenGrantKycTransaction, TokenId, TokenMintTransaction, TokenPauseTransaction, TokenRevokeKycTransaction, TokenSupplyType, TokenType, TokenUnfreezeTransaction, TokenUnpauseTransaction, TokenWipeTransaction, TransferTransaction, } from "@hashgraph/sdk";
|
|
4
|
+
import { json } from "../context.js";
|
|
5
|
+
function maybeKey(value) {
|
|
6
|
+
return value ? PublicKey.fromString(value) : undefined;
|
|
7
|
+
}
|
|
8
|
+
export function registerTokenTools(register, ctx) {
|
|
9
|
+
register("hedera_create_fungible_token", "Build (unsigned) a new fungible token (HTS). Treasury defaults to the payer.", {
|
|
10
|
+
name: z.string().describe("Token name"),
|
|
11
|
+
symbol: z.string().describe("Token symbol"),
|
|
12
|
+
decimals: z.number().int().min(0).optional().describe("Decimals (default 0)"),
|
|
13
|
+
initialSupply: z.number().int().min(0).optional().describe("Initial supply in base units (default 0)"),
|
|
14
|
+
treasuryAccountId: z.string().optional().describe("Treasury (defaults to payer)"),
|
|
15
|
+
adminKey: z.string().optional().describe("Admin public key (enables future updates)"),
|
|
16
|
+
supplyKey: z.string().optional().describe("Supply public key (enables mint/burn)"),
|
|
17
|
+
supplyType: z.enum(["finite", "infinite"]).optional().describe("Default infinite"),
|
|
18
|
+
maxSupply: z.number().int().positive().optional().describe("Required if supplyType=finite"),
|
|
19
|
+
memo: z.string().optional(),
|
|
20
|
+
payerAccountId: z.string().optional(),
|
|
21
|
+
}, async (a) => {
|
|
22
|
+
const treasury = AccountId.fromString(a.treasuryAccountId ?? ctx.payer(a.payerAccountId).toString());
|
|
23
|
+
const tx = new TokenCreateTransaction()
|
|
24
|
+
.setTokenName(a.name)
|
|
25
|
+
.setTokenSymbol(a.symbol)
|
|
26
|
+
.setTokenType(TokenType.FungibleCommon)
|
|
27
|
+
.setDecimals(a.decimals ?? 0)
|
|
28
|
+
.setInitialSupply(a.initialSupply ?? 0)
|
|
29
|
+
.setTreasuryAccountId(treasury)
|
|
30
|
+
.setSupplyType(a.supplyType === "finite" ? TokenSupplyType.Finite : TokenSupplyType.Infinite);
|
|
31
|
+
if (a.maxSupply != null)
|
|
32
|
+
tx.setMaxSupply(a.maxSupply);
|
|
33
|
+
const admin = maybeKey(a.adminKey);
|
|
34
|
+
if (admin)
|
|
35
|
+
tx.setAdminKey(admin);
|
|
36
|
+
const supply = maybeKey(a.supplyKey);
|
|
37
|
+
if (supply)
|
|
38
|
+
tx.setSupplyKey(supply);
|
|
39
|
+
if (a.memo)
|
|
40
|
+
tx.setTokenMemo(a.memo);
|
|
41
|
+
return ctx.buildAndRender(tx, `Create fungible token ${a.name} (${a.symbol}) · treasury ${treasury} · supply ${a.initialSupply ?? 0}`, a.payerAccountId);
|
|
42
|
+
});
|
|
43
|
+
register("hedera_create_nft_collection", "Build (unsigned) a new non-fungible token collection (HTS). A supply key is required to mint.", {
|
|
44
|
+
name: z.string(),
|
|
45
|
+
symbol: z.string(),
|
|
46
|
+
treasuryAccountId: z.string().optional(),
|
|
47
|
+
adminKey: z.string().optional(),
|
|
48
|
+
supplyKey: z.string().describe("Supply public key — required to mint NFTs"),
|
|
49
|
+
maxSupply: z.number().int().positive().optional(),
|
|
50
|
+
memo: z.string().optional(),
|
|
51
|
+
payerAccountId: z.string().optional(),
|
|
52
|
+
}, async (a) => {
|
|
53
|
+
const treasury = AccountId.fromString(a.treasuryAccountId ?? ctx.payer(a.payerAccountId).toString());
|
|
54
|
+
const tx = new TokenCreateTransaction()
|
|
55
|
+
.setTokenName(a.name)
|
|
56
|
+
.setTokenSymbol(a.symbol)
|
|
57
|
+
.setTokenType(TokenType.NonFungibleUnique)
|
|
58
|
+
.setDecimals(0)
|
|
59
|
+
.setInitialSupply(0)
|
|
60
|
+
.setTreasuryAccountId(treasury)
|
|
61
|
+
.setSupplyType(a.maxSupply != null ? TokenSupplyType.Finite : TokenSupplyType.Infinite)
|
|
62
|
+
.setSupplyKey(PublicKey.fromString(a.supplyKey));
|
|
63
|
+
if (a.maxSupply != null)
|
|
64
|
+
tx.setMaxSupply(a.maxSupply);
|
|
65
|
+
const admin = maybeKey(a.adminKey);
|
|
66
|
+
if (admin)
|
|
67
|
+
tx.setAdminKey(admin);
|
|
68
|
+
if (a.memo)
|
|
69
|
+
tx.setTokenMemo(a.memo);
|
|
70
|
+
return ctx.buildAndRender(tx, `Create NFT collection ${a.name} (${a.symbol}) · treasury ${treasury}`, a.payerAccountId);
|
|
71
|
+
});
|
|
72
|
+
register("hedera_mint_fungible", "Build (unsigned) a mint of additional fungible token supply.", {
|
|
73
|
+
tokenId: z.string(),
|
|
74
|
+
amount: z.number().int().positive().describe("Amount in base units"),
|
|
75
|
+
payerAccountId: z.string().optional(),
|
|
76
|
+
}, async (a) => {
|
|
77
|
+
const tx = new TokenMintTransaction().setTokenId(TokenId.fromString(a.tokenId)).setAmount(a.amount);
|
|
78
|
+
return ctx.buildAndRender(tx, `Mint ${a.amount} of ${a.tokenId}`, a.payerAccountId);
|
|
79
|
+
});
|
|
80
|
+
register("hedera_mint_nft", "Build (unsigned) a mint of one or more NFTs with metadata (e.g. IPFS CIDs).", {
|
|
81
|
+
tokenId: z.string(),
|
|
82
|
+
metadata: z.array(z.string()).min(1).describe("Per-NFT metadata strings (≤100 bytes each)"),
|
|
83
|
+
payerAccountId: z.string().optional(),
|
|
84
|
+
}, async (a) => {
|
|
85
|
+
const meta = a.metadata.map((m) => Buffer.from(m));
|
|
86
|
+
const tx = new TokenMintTransaction().setTokenId(TokenId.fromString(a.tokenId)).setMetadata(meta);
|
|
87
|
+
return ctx.buildAndRender(tx, `Mint ${meta.length} NFT(s) into ${a.tokenId}`, a.payerAccountId);
|
|
88
|
+
});
|
|
89
|
+
register("hedera_burn_token", "Build (unsigned) a burn of fungible amount or specific NFT serials.", {
|
|
90
|
+
tokenId: z.string(),
|
|
91
|
+
amount: z.number().int().positive().optional().describe("Fungible amount to burn"),
|
|
92
|
+
serials: z.array(z.number().int().positive()).optional().describe("NFT serials to burn"),
|
|
93
|
+
payerAccountId: z.string().optional(),
|
|
94
|
+
}, async (a) => {
|
|
95
|
+
const tx = new TokenBurnTransaction().setTokenId(TokenId.fromString(a.tokenId));
|
|
96
|
+
if (a.amount != null)
|
|
97
|
+
tx.setAmount(a.amount);
|
|
98
|
+
if (a.serials?.length)
|
|
99
|
+
tx.setSerials(a.serials);
|
|
100
|
+
return ctx.buildAndRender(tx, `Burn ${a.serials?.length ? `serials ${a.serials.join(",")}` : `${a.amount}`} of ${a.tokenId}`, a.payerAccountId);
|
|
101
|
+
});
|
|
102
|
+
register("hedera_transfer_token", "Build (unsigned) a fungible token transfer between two accounts.", {
|
|
103
|
+
tokenId: z.string(),
|
|
104
|
+
fromAccountId: z.string().optional().describe("Sender (defaults to payer)"),
|
|
105
|
+
toAccountId: z.string(),
|
|
106
|
+
amount: z.number().int().positive().describe("Amount in base units"),
|
|
107
|
+
payerAccountId: z.string().optional(),
|
|
108
|
+
}, async (a) => {
|
|
109
|
+
const token = TokenId.fromString(a.tokenId);
|
|
110
|
+
const from = AccountId.fromString(a.fromAccountId ?? ctx.payer(a.payerAccountId).toString());
|
|
111
|
+
const to = AccountId.fromString(a.toAccountId);
|
|
112
|
+
const tx = new TransferTransaction()
|
|
113
|
+
.addTokenTransfer(token, from, -a.amount)
|
|
114
|
+
.addTokenTransfer(token, to, a.amount);
|
|
115
|
+
return ctx.buildAndRender(tx, `Transfer ${a.amount} of ${a.tokenId} · ${from} → ${to}`, a.payerAccountId);
|
|
116
|
+
});
|
|
117
|
+
register("hedera_transfer_nft", "Build (unsigned) an NFT transfer of a specific serial between two accounts.", {
|
|
118
|
+
tokenId: z.string(),
|
|
119
|
+
serial: z.number().int().positive(),
|
|
120
|
+
fromAccountId: z.string().optional().describe("Current owner (defaults to payer)"),
|
|
121
|
+
toAccountId: z.string(),
|
|
122
|
+
payerAccountId: z.string().optional(),
|
|
123
|
+
}, async (a) => {
|
|
124
|
+
const nftId = new NftId(TokenId.fromString(a.tokenId), a.serial);
|
|
125
|
+
const from = AccountId.fromString(a.fromAccountId ?? ctx.payer(a.payerAccountId).toString());
|
|
126
|
+
const to = AccountId.fromString(a.toAccountId);
|
|
127
|
+
const tx = new TransferTransaction().addNftTransfer(nftId, from, to);
|
|
128
|
+
return ctx.buildAndRender(tx, `Transfer NFT ${a.tokenId}#${a.serial} · ${from} → ${to}`, a.payerAccountId);
|
|
129
|
+
});
|
|
130
|
+
register("hedera_associate_token", "Build (unsigned) a token association so an account can hold the given token(s).", {
|
|
131
|
+
accountId: z.string(),
|
|
132
|
+
tokenIds: z.array(z.string()).min(1),
|
|
133
|
+
payerAccountId: z.string().optional(),
|
|
134
|
+
}, async (a) => {
|
|
135
|
+
const tx = new TokenAssociateTransaction()
|
|
136
|
+
.setAccountId(AccountId.fromString(a.accountId))
|
|
137
|
+
.setTokenIds(a.tokenIds.map((t) => TokenId.fromString(t)));
|
|
138
|
+
return ctx.buildAndRender(tx, `Associate ${a.accountId} ↔ ${a.tokenIds.join(", ")}`, a.payerAccountId);
|
|
139
|
+
});
|
|
140
|
+
register("hedera_dissociate_token", "Build (unsigned) a token dissociation.", {
|
|
141
|
+
accountId: z.string(),
|
|
142
|
+
tokenIds: z.array(z.string()).min(1),
|
|
143
|
+
payerAccountId: z.string().optional(),
|
|
144
|
+
}, async (a) => {
|
|
145
|
+
const tx = new TokenDissociateTransaction()
|
|
146
|
+
.setAccountId(AccountId.fromString(a.accountId))
|
|
147
|
+
.setTokenIds(a.tokenIds.map((t) => TokenId.fromString(t)));
|
|
148
|
+
return ctx.buildAndRender(tx, `Dissociate ${a.accountId} ↔ ${a.tokenIds.join(", ")}`, a.payerAccountId);
|
|
149
|
+
});
|
|
150
|
+
const freezeLike = [
|
|
151
|
+
["hedera_freeze_token_account", "Freeze an account for a token (blocks transfers)", (t, acc) => new TokenFreezeTransaction().setTokenId(t).setAccountId(acc)],
|
|
152
|
+
["hedera_unfreeze_token_account", "Unfreeze an account for a token", (t, acc) => new TokenUnfreezeTransaction().setTokenId(t).setAccountId(acc)],
|
|
153
|
+
["hedera_grant_kyc", "Grant KYC to an account for a token", (t, acc) => new TokenGrantKycTransaction().setTokenId(t).setAccountId(acc)],
|
|
154
|
+
["hedera_revoke_kyc", "Revoke KYC from an account for a token", (t, acc) => new TokenRevokeKycTransaction().setTokenId(t).setAccountId(acc)],
|
|
155
|
+
];
|
|
156
|
+
for (const [name, desc, make] of freezeLike) {
|
|
157
|
+
register(name, `Build (unsigned): ${desc}.`, { tokenId: z.string(), accountId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
158
|
+
const tx = make(TokenId.fromString(a.tokenId), AccountId.fromString(a.accountId));
|
|
159
|
+
return ctx.buildAndRender(tx, `${desc} · ${a.tokenId} / ${a.accountId}`, a.payerAccountId);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
register("hedera_pause_token", "Build (unsigned) a token pause (halts all transfers of the token).", { tokenId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
163
|
+
const tx = new TokenPauseTransaction().setTokenId(TokenId.fromString(a.tokenId));
|
|
164
|
+
return ctx.buildAndRender(tx, `Pause token ${a.tokenId}`, a.payerAccountId);
|
|
165
|
+
});
|
|
166
|
+
register("hedera_unpause_token", "Build (unsigned) a token unpause.", { tokenId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
167
|
+
const tx = new TokenUnpauseTransaction().setTokenId(TokenId.fromString(a.tokenId));
|
|
168
|
+
return ctx.buildAndRender(tx, `Unpause token ${a.tokenId}`, a.payerAccountId);
|
|
169
|
+
});
|
|
170
|
+
register("hedera_wipe_token", "Build (unsigned) a wipe of fungible amount or NFT serials from an account.", {
|
|
171
|
+
tokenId: z.string(),
|
|
172
|
+
accountId: z.string(),
|
|
173
|
+
amount: z.number().int().positive().optional(),
|
|
174
|
+
serials: z.array(z.number().int().positive()).optional(),
|
|
175
|
+
payerAccountId: z.string().optional(),
|
|
176
|
+
}, async (a) => {
|
|
177
|
+
const tx = new TokenWipeTransaction()
|
|
178
|
+
.setTokenId(TokenId.fromString(a.tokenId))
|
|
179
|
+
.setAccountId(AccountId.fromString(a.accountId));
|
|
180
|
+
if (a.amount != null)
|
|
181
|
+
tx.setAmount(a.amount);
|
|
182
|
+
if (a.serials?.length)
|
|
183
|
+
tx.setSerials(a.serials);
|
|
184
|
+
return ctx.buildAndRender(tx, `Wipe from ${a.accountId} · token ${a.tokenId}`, a.payerAccountId);
|
|
185
|
+
});
|
|
186
|
+
register("hedera_delete_token", "Build (unsigned) a token deletion (requires the admin key to sign).", { tokenId: z.string(), payerAccountId: z.string().optional() }, async (a) => {
|
|
187
|
+
const tx = new TokenDeleteTransaction().setTokenId(TokenId.fromString(a.tokenId));
|
|
188
|
+
return ctx.buildAndRender(tx, `Delete token ${a.tokenId}`, a.payerAccountId);
|
|
189
|
+
});
|
|
190
|
+
// ---- Mirror Node reads (keyless) ----
|
|
191
|
+
register("hedera_get_token_info", "Read token info (type, supply, keys, custom fees) from the Mirror Node.", { tokenId: z.string() }, async (a) => json(await ctx.mirror(`/api/v1/tokens/${encodeURIComponent(a.tokenId)}`)));
|
|
192
|
+
register("hedera_get_nft_info", "Read a specific NFT's info (owner, metadata, serial) from the Mirror Node.", { tokenId: z.string(), serial: z.number().int().positive() }, async (a) => json(await ctx.mirror(`/api/v1/tokens/${encodeURIComponent(a.tokenId)}/nfts/${a.serial}`)));
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/tools/token.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/logo.svg
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="640" height="200" viewBox="0 0 640 200" role="img" aria-label="hedera-mcp">
|
|
2
|
+
<rect width="640" height="200" fill="#0a0a0a"/>
|
|
3
|
+
<!-- hashgraph-style mark: nodes + ordered links -->
|
|
4
|
+
<g stroke="#3ec6a8" stroke-width="3" fill="none" opacity="0.9">
|
|
5
|
+
<line x1="60" y1="60" x2="140" y2="100"/>
|
|
6
|
+
<line x1="60" y1="140" x2="140" y2="100"/>
|
|
7
|
+
<line x1="140" y1="100" x2="60" y2="60"/>
|
|
8
|
+
<line x1="140" y1="100" x2="60" y2="140"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g fill="#e8fff8">
|
|
11
|
+
<circle cx="60" cy="60" r="9"/>
|
|
12
|
+
<circle cx="60" cy="140" r="9"/>
|
|
13
|
+
<circle cx="140" cy="100" r="11" fill="#3ec6a8"/>
|
|
14
|
+
</g>
|
|
15
|
+
<text x="190" y="92" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="46" font-weight="700" fill="#ffffff">hedera-mcp</text>
|
|
16
|
+
<text x="192" y="132" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="20" fill="#7a8a86">51 tools · build-only · never holds keys</text>
|
|
17
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@purplesquirrel/hedera-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"mcpName": "io.github.ExpertVagabond/hedera-mcp",
|
|
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
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"bin": {
|
|
9
|
+
"hedera-mcp": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"logo.svg",
|
|
14
|
+
"README.md",
|
|
15
|
+
"CHANGELOG.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"dev": "tsc --watch",
|
|
21
|
+
"start": "node dist/index.js",
|
|
22
|
+
"lint": "tsc --noEmit"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"mcp",
|
|
26
|
+
"model-context-protocol",
|
|
27
|
+
"hedera",
|
|
28
|
+
"hashgraph",
|
|
29
|
+
"hts",
|
|
30
|
+
"hcs",
|
|
31
|
+
"smart-contracts",
|
|
32
|
+
"mirror-node",
|
|
33
|
+
"web3",
|
|
34
|
+
"agent",
|
|
35
|
+
"devrel"
|
|
36
|
+
],
|
|
37
|
+
"author": "Matthew Karsten <matthewkarstenconnects@gmail.com>",
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/ExpertVagabond/hedera-mcp.git"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@hashgraph/sdk": "^2.0.0",
|
|
45
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
46
|
+
"zod": "^3.23.8"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^22.0.0",
|
|
50
|
+
"typescript": "^5.7.0"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=18.0.0"
|
|
54
|
+
}
|
|
55
|
+
}
|