chia-explorer 0.1.5 → 0.2.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.
Files changed (54) hide show
  1. package/README.md +172 -10
  2. package/dist/chia/offer.d.ts +58 -0
  3. package/dist/chia/offer.js +356 -0
  4. package/dist/chia/offer.js.map +1 -0
  5. package/dist/chips/index.d.ts +68 -0
  6. package/dist/chips/index.js +214 -0
  7. package/dist/chips/index.js.map +1 -0
  8. package/dist/chips/parser.d.ts +30 -0
  9. package/dist/chips/parser.js +208 -0
  10. package/dist/chips/parser.js.map +1 -0
  11. package/dist/github/cache.d.ts +3 -0
  12. package/dist/github/cache.js +18 -0
  13. package/dist/github/cache.js.map +1 -0
  14. package/dist/github/client.d.ts +5 -0
  15. package/dist/github/client.js +68 -0
  16. package/dist/github/client.js.map +1 -0
  17. package/dist/schemas/chips.d.ts +8 -0
  18. package/dist/schemas/chips.js +39 -0
  19. package/dist/schemas/chips.js.map +1 -0
  20. package/dist/server.js +24 -2
  21. package/dist/server.js.map +1 -1
  22. package/dist/tools/chips/get-chip.d.ts +2 -0
  23. package/dist/tools/chips/get-chip.js +30 -0
  24. package/dist/tools/chips/get-chip.js.map +1 -0
  25. package/dist/tools/chips/list-chip-drafts.d.ts +2 -0
  26. package/dist/tools/chips/list-chip-drafts.js +19 -0
  27. package/dist/tools/chips/list-chip-drafts.js.map +1 -0
  28. package/dist/tools/chips/list-chips.d.ts +2 -0
  29. package/dist/tools/chips/list-chips.js +33 -0
  30. package/dist/tools/chips/list-chips.js.map +1 -0
  31. package/dist/tools/chips/search-chips.d.ts +2 -0
  32. package/dist/tools/chips/search-chips.js +31 -0
  33. package/dist/tools/chips/search-chips.js.map +1 -0
  34. package/dist/tools/coins/get-puzzle-and-solution.js +23 -3
  35. package/dist/tools/coins/get-puzzle-and-solution.js.map +1 -1
  36. package/dist/tools/mempool/estimate-fee.d.ts +2 -0
  37. package/dist/tools/mempool/estimate-fee.js +73 -0
  38. package/dist/tools/mempool/estimate-fee.js.map +1 -0
  39. package/dist/tools/mempool/get-mempool.d.ts +2 -0
  40. package/dist/tools/mempool/get-mempool.js +51 -0
  41. package/dist/tools/mempool/get-mempool.js.map +1 -0
  42. package/dist/tools/mempool/is-in-mempool.d.ts +2 -0
  43. package/dist/tools/mempool/is-in-mempool.js +37 -0
  44. package/dist/tools/mempool/is-in-mempool.js.map +1 -0
  45. package/dist/tools/offers/decode-offer.d.ts +2 -0
  46. package/dist/tools/offers/decode-offer.js +20 -0
  47. package/dist/tools/offers/decode-offer.js.map +1 -0
  48. package/dist/tools/offers/decode-spend-bundle.d.ts +2 -0
  49. package/dist/tools/offers/decode-spend-bundle.js +20 -0
  50. package/dist/tools/offers/decode-spend-bundle.js.map +1 -0
  51. package/dist/tools/offers/decompile-puzzle.d.ts +2 -0
  52. package/dist/tools/offers/decompile-puzzle.js +62 -0
  53. package/dist/tools/offers/decompile-puzzle.js.map +1 -0
  54. package/package.json +2 -1
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod';
2
+ export const chipNumberSchema = z
3
+ .union([z.number().int().nonnegative(), z.string().regex(/^\d+$/)])
4
+ .transform((v) => (typeof v === 'string' ? Number(v) : v))
5
+ .pipe(z.number().int().min(0).max(99999))
6
+ .describe('CHIP number, e.g. 42 or "0042". Accepts the integer or a zero-padded string.');
7
+ export const chipStatusFilterSchema = z
8
+ .string()
9
+ .min(1)
10
+ .max(40)
11
+ .optional()
12
+ .describe("Restrict to a status, e.g. 'Final', 'Review', 'Draft', 'Last Call', 'Living', 'Stagnant', 'Withdrawn', 'Obsolete'. Case-insensitive.");
13
+ export const chipCategoryFilterSchema = z
14
+ .string()
15
+ .min(1)
16
+ .max(40)
17
+ .optional()
18
+ .describe("Restrict to a category, e.g. 'Standards Track', 'Process', 'Informational'. Case-insensitive.");
19
+ export const includeBodySchema = z
20
+ .boolean()
21
+ .default(false)
22
+ .describe('If true, include the full markdown body of the CHIP. Defaults to false.');
23
+ export const searchQuerySchema = z
24
+ .string()
25
+ .min(1)
26
+ .max(200)
27
+ .describe('Case-insensitive keyword matched against title, description, abstract, and authors.');
28
+ export const searchSourceSchema = z
29
+ .enum(['merged', 'draft', 'both'])
30
+ .default('both')
31
+ .describe("Where to search: 'merged' (CHIPs on main), 'draft' (open PRs), or 'both' (default).");
32
+ export const searchLimitSchema = z
33
+ .number()
34
+ .int()
35
+ .positive()
36
+ .max(100)
37
+ .default(20)
38
+ .describe('Maximum results. Default 20, max 100.');
39
+ //# sourceMappingURL=chips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chips.js","sourceRoot":"","sources":["../../src/schemas/chips.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KAClE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACzD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACxC,QAAQ,CAAC,8EAA8E,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,QAAQ,EAAE;KACV,QAAQ,CACP,sIAAsI,CACvI,CAAC;AAEJ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,QAAQ,EAAE;KACV,QAAQ,CACP,+FAA+F,CAChG,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,OAAO,EAAE;KACT,OAAO,CAAC,KAAK,CAAC;KACd,QAAQ,CAAC,yEAAyE,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,QAAQ,CAAC,qFAAqF,CAAC,CAAC;AAEnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;KACjC,OAAO,CAAC,MAAM,CAAC;KACf,QAAQ,CAAC,qFAAqF,CAAC,CAAC;AAEnG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,EAAE;KACR,GAAG,EAAE;KACL,QAAQ,EAAE;KACV,GAAG,CAAC,GAAG,CAAC;KACR,OAAO,CAAC,EAAE,CAAC;KACX,QAAQ,CAAC,uCAAuC,CAAC,CAAC"}
package/dist/server.js CHANGED
@@ -20,6 +20,16 @@ import { register as registerConvertXchToFiat } from './tools/price/convert-xch-
20
20
  import { register as registerGetPrefarmStatus } from './tools/prefarm/get-prefarm-status.js';
21
21
  import { register as registerGetPrefarmSpends } from './tools/prefarm/get-prefarm-spends.js';
22
22
  import { register as registerListPrefarmAddresses } from './tools/prefarm/list-prefarm-addresses.js';
23
+ import { register as registerDecodeOffer } from './tools/offers/decode-offer.js';
24
+ import { register as registerDecodeSpendBundle } from './tools/offers/decode-spend-bundle.js';
25
+ import { register as registerDecompilePuzzle } from './tools/offers/decompile-puzzle.js';
26
+ import { register as registerGetMempool } from './tools/mempool/get-mempool.js';
27
+ import { register as registerIsInMempool } from './tools/mempool/is-in-mempool.js';
28
+ import { register as registerEstimateFee } from './tools/mempool/estimate-fee.js';
29
+ import { register as registerListChips } from './tools/chips/list-chips.js';
30
+ import { register as registerGetChip } from './tools/chips/get-chip.js';
31
+ import { register as registerListChipDrafts } from './tools/chips/list-chip-drafts.js';
32
+ import { register as registerSearchChips } from './tools/chips/search-chips.js';
23
33
  import { register as registerNetworkStatusPrompt } from './prompts/network-status.js';
24
34
  import { register as registerAddressSummaryPrompt } from './prompts/address-summary.js';
25
35
  import { register as registerBlockSummaryPrompt } from './prompts/block-summary.js';
@@ -27,11 +37,13 @@ import { register as registerPrefarmSummaryPrompt } from './prompts/prefarm-summ
27
37
  export function createServer() {
28
38
  const server = new McpServer({ name: 'chia-explorer', version: VERSION }, {
29
39
  instructions: 'chia-explorer answers questions about the Chia blockchain via the public coinset.org API, ' +
30
- 'plus XCH spot price and fiat conversion via the public CoinGecko API. ' +
40
+ 'plus XCH spot price and fiat conversion via the public CoinGecko API, ' +
41
+ 'plus Chia Improvement Proposals (CHIPs) read directly from the Chia-Network/chips GitHub repo (merged on main and open PR drafts). ' +
31
42
  'Read-only: no signing, no key material, no push_tx. ' +
32
43
  "Blockchain tools accept an optional `network: 'mainnet' | 'testnet11'` argument; mainnet is the default. " +
33
44
  'When an address is provided, the network is auto-detected from the prefix (xch / txch). ' +
34
- 'Price tools take no network argument.',
45
+ 'Price and CHIPs tools take no network argument. ' +
46
+ 'An optional GITHUB_TOKEN env var lifts the unauthenticated GitHub rate limit on CHIPs listings.',
35
47
  });
36
48
  registerGetBlockchainState(server);
37
49
  registerGetNetspace(server);
@@ -53,6 +65,16 @@ export function createServer() {
53
65
  registerGetPrefarmStatus(server);
54
66
  registerGetPrefarmSpends(server);
55
67
  registerListPrefarmAddresses(server);
68
+ registerDecodeOffer(server);
69
+ registerDecodeSpendBundle(server);
70
+ registerDecompilePuzzle(server);
71
+ registerGetMempool(server);
72
+ registerIsInMempool(server);
73
+ registerEstimateFee(server);
74
+ registerListChips(server);
75
+ registerGetChip(server);
76
+ registerListChipDrafts(server);
77
+ registerSearchChips(server);
56
78
  registerNetworkStatusPrompt(server);
57
79
  registerAddressSummaryPrompt(server);
58
80
  registerBlockSummaryPrompt(server);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,30 @@
1
+ import { findChipByNumber } from '../../chips/index.js';
2
+ import { chipNumberSchema, includeBodySchema } from '../../schemas/chips.js';
3
+ import { errorText, jsonText } from '../shared/response.js';
4
+ export function register(server) {
5
+ server.tool('get_chip', 'Get a single CHIP by number. Looks first on main (merged) and also surfaces any open PRs proposing changes to the same number. Returns parsed front matter, abstract, source URL, and (with include_body=true) the full markdown body.', {
6
+ number: chipNumberSchema,
7
+ include_body: includeBodySchema,
8
+ }, async ({ number, include_body }) => {
9
+ try {
10
+ const { merged, drafts } = await findChipByNumber(number, { includeBody: include_body });
11
+ if (!merged && drafts.length === 0) {
12
+ return jsonText({
13
+ number,
14
+ found: false,
15
+ message: `no CHIP ${number} on main or in open PRs`,
16
+ });
17
+ }
18
+ return jsonText({
19
+ number,
20
+ found: true,
21
+ merged,
22
+ drafts,
23
+ });
24
+ }
25
+ catch (err) {
26
+ return errorText(err);
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=get-chip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-chip.js","sourceRoot":"","sources":["../../../src/tools/chips/get-chip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,UAAU,EACV,wOAAwO,EACxO;QACE,MAAM,EAAE,gBAAgB;QACxB,YAAY,EAAE,iBAAiB;KAChC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,QAAQ,CAAC;oBACd,MAAM;oBACN,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,WAAW,MAAM,yBAAyB;iBACpD,CAAC,CAAC;YACL,CAAC;YACD,OAAO,QAAQ,CAAC;gBACd,MAAM;gBACN,KAAK,EAAE,IAAI;gBACX,MAAM;gBACN,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,19 @@
1
+ import { listChipDrafts } from '../../chips/index.js';
2
+ import { errorText, jsonText } from '../shared/response.js';
3
+ export function register(server) {
4
+ server.tool('list_chip_drafts', 'List open pull requests against Chia-Network/chips that add or modify a CHIP file. Each entry includes parsed front matter from the proposed file plus PR context (number, url, author, requested reviewers, draft flag, updated_at) and a modifies_existing flag for amendments. PRs that do not touch a CHIPs/chip-*.md file are filtered out.', {}, async () => {
5
+ try {
6
+ const drafts = await listChipDrafts();
7
+ return jsonText({
8
+ source: 'github',
9
+ repo: 'Chia-Network/chips',
10
+ count: drafts.length,
11
+ drafts,
12
+ });
13
+ }
14
+ catch (err) {
15
+ return errorText(err);
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=list-chip-drafts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-chip-drafts.js","sourceRoot":"","sources":["../../../src/tools/chips/list-chip-drafts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,kVAAkV,EAClV,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;YACtC,OAAO,QAAQ,CAAC;gBACd,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,MAAM,CAAC,MAAM;gBACpB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,33 @@
1
+ import { listMergedChips } from '../../chips/index.js';
2
+ import { chipCategoryFilterSchema, chipStatusFilterSchema } from '../../schemas/chips.js';
3
+ import { errorText, jsonText } from '../shared/response.js';
4
+ export function register(server) {
5
+ server.tool('list_chips', 'List Chia Improvement Proposals (CHIPs) merged on the main branch of Chia-Network/chips. Returns parsed metadata (number, title, status, category, authors, abstract, dates) for every CHIP. Optional filters: status, category. For in-progress CHIPs in open PRs use list_chip_drafts.', {
6
+ status: chipStatusFilterSchema,
7
+ category: chipCategoryFilterSchema,
8
+ }, async ({ status, category }) => {
9
+ try {
10
+ const all = await listMergedChips();
11
+ const statusLc = status?.toLowerCase();
12
+ const categoryLc = category?.toLowerCase();
13
+ const filtered = all.filter((c) => {
14
+ if (statusLc && (c.status?.toLowerCase() ?? '') !== statusLc)
15
+ return false;
16
+ if (categoryLc && (c.category?.toLowerCase() ?? '') !== categoryLc)
17
+ return false;
18
+ return true;
19
+ });
20
+ return jsonText({
21
+ source: 'github',
22
+ repo: 'Chia-Network/chips',
23
+ ref: 'main',
24
+ count: filtered.length,
25
+ chips: filtered,
26
+ });
27
+ }
28
+ catch (err) {
29
+ return errorText(err);
30
+ }
31
+ });
32
+ }
33
+ //# sourceMappingURL=list-chips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-chips.js","sourceRoot":"","sources":["../../../src/tools/chips/list-chips.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,0RAA0R,EAC1R;QACE,MAAM,EAAE,sBAAsB;QAC9B,QAAQ,EAAE,wBAAwB;KACnC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,QAAQ,EAAE,WAAW,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC3E,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,UAAU;oBAAE,OAAO,KAAK,CAAC;gBACjF,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;gBACd,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,oBAAoB;gBAC1B,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,QAAQ,CAAC,MAAM;gBACtB,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,31 @@
1
+ import { searchChips } from '../../chips/index.js';
2
+ import { chipStatusFilterSchema, searchLimitSchema, searchQuerySchema, searchSourceSchema, } from '../../schemas/chips.js';
3
+ import { errorText, jsonText } from '../shared/response.js';
4
+ export function register(server) {
5
+ server.tool('search_chips', 'Case-insensitive keyword search across merged CHIPs and open PR drafts. Matches against title, description, abstract, authors, and CHIP number. Optional filters: status, source (merged | draft | both, default both), limit (default 20).', {
6
+ query: searchQuerySchema,
7
+ status: chipStatusFilterSchema,
8
+ source: searchSourceSchema,
9
+ limit: searchLimitSchema,
10
+ }, async ({ query, status, source, limit }) => {
11
+ try {
12
+ const opts = {
13
+ source,
14
+ limit,
15
+ };
16
+ if (status !== undefined)
17
+ opts.status = status;
18
+ const matches = await searchChips(query, opts);
19
+ return jsonText({
20
+ query,
21
+ source,
22
+ count: matches.length,
23
+ matches,
24
+ });
25
+ }
26
+ catch (err) {
27
+ return errorText(err);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=search-chips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-chips.js","sourceRoot":"","sources":["../../../src/tools/chips/search-chips.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6OAA6O,EAC7O;QACE,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,kBAAkB;QAC1B,KAAK,EAAE,iBAAiB;KACzB,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,GAA4E;gBACpF,MAAM;gBACN,KAAK;aACN,CAAC;YACF,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO,QAAQ,CAAC;gBACd,KAAK;gBACL,MAAM;gBACN,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -2,9 +2,10 @@ import { get_puzzle_and_solution } from 'chia-agent/api/rpc/full_node/index.js';
2
2
  import { getAgent } from '../../coinset/agent.js';
3
3
  import { hex32Schema, heightSchema, networkSchema } from '../../schemas/common.js';
4
4
  import { stripHexPrefix } from '../../chia/hex.js';
5
+ import { classifyPuzzle, parseConditions } from '../../chia/offer.js';
5
6
  import { errorText, jsonText } from '../shared/response.js';
6
7
  export function register(server) {
7
- server.tool('get_puzzle_and_solution', 'Fetch the CLVM puzzle reveal and solution for a coin at its spent block height. Reveals what a spend actually did — required for decoding singleton state transitions.', {
8
+ server.tool('get_puzzle_and_solution', 'Fetch the CLVM puzzle reveal and solution for a coin at its spent block height. Reveals what a spend actually did — required for decoding singleton state transitions. Now also returns a `classification` of the puzzle (xch / cat / nft / did / unknown, plus asset_id / launcher_id) and the `parsed_conditions` emitted by running the puzzle with its solution.', {
8
9
  coin_id: hex32Schema.describe('32-byte coin name'),
9
10
  height: heightSchema.describe('The spent_block_index of the coin (the block where the coin was spent)'),
10
11
  network: networkSchema,
@@ -16,12 +17,31 @@ export function register(server) {
16
17
  coin_id: normalized,
17
18
  height,
18
19
  });
19
- return jsonText({
20
+ const out = {
20
21
  network,
21
22
  coin_id: normalized,
22
23
  height,
23
24
  coin_solution: res.coin_solution,
24
- });
25
+ };
26
+ const puzzleReveal = res.coin_solution?.puzzle_reveal;
27
+ const solution = res.coin_solution?.solution;
28
+ if (typeof puzzleReveal === 'string') {
29
+ try {
30
+ out.classification = classifyPuzzle(puzzleReveal);
31
+ }
32
+ catch (err) {
33
+ out.classification_error = err instanceof Error ? err.message : String(err);
34
+ }
35
+ if (typeof solution === 'string') {
36
+ try {
37
+ out.parsed_conditions = parseConditions(puzzleReveal, solution);
38
+ }
39
+ catch (err) {
40
+ out.parsed_conditions_error = err instanceof Error ? err.message : String(err);
41
+ }
42
+ }
43
+ }
44
+ return jsonText(out);
25
45
  }
26
46
  catch (err) {
27
47
  return errorText(err);
@@ -1 +1 @@
1
- {"version":3,"file":"get-puzzle-and-solution.js","sourceRoot":"","sources":["../../../src/tools/coins/get-puzzle-and-solution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,wKAAwK,EACxK;QACE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAClD,MAAM,EAAE,YAAY,CAAC,QAAQ,CAC3B,wEAAwE,CACzE;QACD,OAAO,EAAE,aAAa;KACvB,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAkB,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,KAAK,EAAE;gBAC/C,OAAO,EAAE,UAAU;gBACnB,MAAM;aACP,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;gBACd,OAAO;gBACP,OAAO,EAAE,UAAU;gBACnB,MAAM;gBACN,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-puzzle-and-solution.js","sourceRoot":"","sources":["../../../src/tools/coins/get-puzzle-and-solution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,sWAAsW,EACtW;QACE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAClD,MAAM,EAAE,YAAY,CAAC,QAAQ,CAC3B,wEAAwE,CACzE;QACD,OAAO,EAAE,aAAa;KACvB,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAkB,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,KAAK,EAAE;gBAC/C,OAAO,EAAE,UAAU;gBACnB,MAAM;aACP,CAAC,CAAC;YACH,MAAM,GAAG,GAA4B;gBACnC,OAAO;gBACP,OAAO,EAAE,UAAU;gBACnB,MAAM;gBACN,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC,CAAC;YACF,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC;YACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC;YAC7C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBACpD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,oBAAoB,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9E,CAAC;gBACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,IAAI,CAAC;wBACH,GAAG,CAAC,iBAAiB,GAAG,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBAClE,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,uBAAuB,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,73 @@
1
+ import { z } from 'zod';
2
+ import { get_fee_estimate } from 'chia-agent/api/rpc/full_node/index.js';
3
+ import { getAgent } from '../../coinset/agent.js';
4
+ import { networkSchema } from '../../schemas/common.js';
5
+ import { mojoToXch, toBigInt } from '../../chia/amounts.js';
6
+ import { errorText, jsonText } from '../shared/response.js';
7
+ const SPEND_TYPES = [
8
+ 'send_xch_transaction',
9
+ 'cat_spend',
10
+ 'take_offer',
11
+ 'cancel_offer',
12
+ 'nft_set_nft_did',
13
+ 'nft_transfer_nft',
14
+ 'create_new_pool_wallet',
15
+ 'pw_absorb_rewards',
16
+ 'create_new_did_wallet',
17
+ ];
18
+ export function register(server) {
19
+ server.tool('estimate_fee', 'Estimate the recommended mojo fee for inclusion in the next block within each target time (in seconds). Default target_times = [60, 300, 900] (1, 5, 15 minutes). Optionally bias the estimate by passing `spend_type` and `spend_count`, or supply an explicit CLVM `cost`.', {
20
+ target_times: z
21
+ .array(z.number().int().positive())
22
+ .min(1)
23
+ .max(20)
24
+ .default([60, 300, 900])
25
+ .describe('Target inclusion times in seconds. Non-empty array, max 20 entries.'),
26
+ cost: z
27
+ .number()
28
+ .int()
29
+ .positive()
30
+ .optional()
31
+ .describe('Optional CLVM cost of the spend bundle you plan to send.'),
32
+ spend_type: z
33
+ .enum(SPEND_TYPES)
34
+ .optional()
35
+ .describe('Optional hint about the kind of spend (biases the estimate).'),
36
+ spend_count: z
37
+ .number()
38
+ .int()
39
+ .positive()
40
+ .optional()
41
+ .describe('Optional hint: number of spends in the bundle.'),
42
+ network: networkSchema,
43
+ }, async ({ target_times, cost, spend_type, spend_count, network }) => {
44
+ try {
45
+ const agent = getAgent(network);
46
+ const payload = { target_times };
47
+ if (cost !== undefined)
48
+ payload.cost = cost;
49
+ if (spend_type !== undefined)
50
+ payload.spend_type = spend_type;
51
+ if (spend_count !== undefined)
52
+ payload.spend_count = spend_count;
53
+ const res = await get_fee_estimate(agent, payload);
54
+ const estimates_mojo = (res.estimates ?? []).map((e) => toBigInt(e).toString());
55
+ const estimates_xch = estimates_mojo.map((m) => mojoToXch(m));
56
+ return jsonText({
57
+ network,
58
+ target_times: res.target_times,
59
+ estimates_mojo,
60
+ estimates_xch,
61
+ current_fee_rate: res.current_fee_rate,
62
+ mempool_size: res.mempool_size,
63
+ mempool_fees: res.mempool_fees,
64
+ full_node_synced: res.full_node_synced,
65
+ peak_height: res.peak_height,
66
+ });
67
+ }
68
+ catch (err) {
69
+ return errorText(err);
70
+ }
71
+ });
72
+ }
73
+ //# sourceMappingURL=estimate-fee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate-fee.js","sourceRoot":"","sources":["../../../src/tools/mempool/estimate-fee.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ import { get_all_mempool_items, get_all_mempool_tx_ids, } from 'chia-agent/api/rpc/full_node/index.js';
3
+ import { getAgent } from '../../coinset/agent.js';
4
+ import { networkSchema } from '../../schemas/common.js';
5
+ import { errorText, jsonText } from '../shared/response.js';
6
+ export function register(server) {
7
+ server.tool('get_mempool', 'List transaction ids currently in the full node mempool. By default returns the first `limit` ids (default 100, max 1000) plus a `truncated` flag. Pass `include_items: true` to also return the full mempool items (warning: can be large on a busy mempool).', {
8
+ limit: z
9
+ .number()
10
+ .int()
11
+ .min(1)
12
+ .max(1000)
13
+ .default(100)
14
+ .describe('Maximum number of tx_ids (and items) to return. 1..1000.'),
15
+ include_items: z
16
+ .boolean()
17
+ .default(false)
18
+ .describe('If true, also fetch full mempool items via get_all_mempool_items.'),
19
+ network: networkSchema,
20
+ }, async ({ limit, include_items, network }) => {
21
+ try {
22
+ const agent = getAgent(network);
23
+ const idsRes = await get_all_mempool_tx_ids(agent);
24
+ const allIds = idsRes.tx_ids ?? [];
25
+ const truncated = allIds.length > limit;
26
+ const tx_ids = allIds.slice(0, limit);
27
+ const out = {
28
+ network,
29
+ count: allIds.length,
30
+ tx_ids,
31
+ truncated,
32
+ limit,
33
+ };
34
+ if (include_items) {
35
+ const itemsRes = await get_all_mempool_items(agent);
36
+ const all = itemsRes.mempool_items ?? {};
37
+ const items = {};
38
+ for (const id of tx_ids) {
39
+ if (id in all)
40
+ items[id] = all[id];
41
+ }
42
+ out.items = items;
43
+ }
44
+ return jsonText(out);
45
+ }
46
+ catch (err) {
47
+ return errorText(err);
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=get-mempool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-mempool.js","sourceRoot":"","sources":["../../../src/tools/mempool/get-mempool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,aAAa,EACb,gQAAgQ,EAChQ;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,IAAI,CAAC;aACT,OAAO,CAAC,GAAG,CAAC;aACZ,QAAQ,CAAC,0DAA0D,CAAC;QACvE,aAAa,EAAE,CAAC;aACb,OAAO,EAAE;aACT,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,mEAAmE,CAAC;QAChF,OAAO,EAAE,aAAa;KACvB,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAkB,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAEtC,MAAM,GAAG,GAA4B;gBACnC,OAAO;gBACP,KAAK,EAAE,MAAM,CAAC,MAAM;gBACpB,MAAM;gBACN,SAAS;gBACT,KAAK;aACN,CAAC;YAEF,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC;gBACzC,MAAM,KAAK,GAA4B,EAAE,CAAC;gBAC1C,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;oBACxB,IAAI,EAAE,IAAI,GAAG;wBAAE,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrC,CAAC;gBACD,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YACpB,CAAC;YAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,37 @@
1
+ import { get_mempool_item_by_tx_id } from 'chia-agent/api/rpc/full_node/index.js';
2
+ import { getAgent } from '../../coinset/agent.js';
3
+ import { hex32Schema, networkSchema } from '../../schemas/common.js';
4
+ import { stripHexPrefix } from '../../chia/hex.js';
5
+ import { errorText, jsonText } from '../shared/response.js';
6
+ export function register(server) {
7
+ server.tool('is_in_mempool', 'Check whether a specific transaction id (the spend bundle hash) is currently sitting in the full node mempool. Returns `in_mempool: true` with the mempool item, or `in_mempool: false` if the node has no record of it.', {
8
+ tx_id: hex32Schema.describe('32-byte transaction id (spend bundle hash). Hex, optional 0x prefix.'),
9
+ network: networkSchema,
10
+ }, async ({ tx_id, network }) => {
11
+ const normalized = stripHexPrefix(tx_id).toLowerCase();
12
+ try {
13
+ const agent = getAgent(network);
14
+ try {
15
+ const res = await get_mempool_item_by_tx_id(agent, { tx_id: normalized });
16
+ const item = res.mempool_item;
17
+ if (!item) {
18
+ return jsonText({ network, tx_id: normalized, in_mempool: false });
19
+ }
20
+ return jsonText({ network, tx_id: normalized, in_mempool: true, item });
21
+ }
22
+ catch (rpcErr) {
23
+ // Coinset returns an error response when the tx_id isn't in the mempool.
24
+ // Treat both null and thrown-RPC as "not found".
25
+ const message = rpcErr instanceof Error ? rpcErr.message : String(rpcErr);
26
+ if (/not in the mempool|not.*found|no.*mempool/i.test(message)) {
27
+ return jsonText({ network, tx_id: normalized, in_mempool: false });
28
+ }
29
+ throw rpcErr;
30
+ }
31
+ }
32
+ catch (err) {
33
+ return errorText(err);
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=is-in-mempool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-in-mempool.js","sourceRoot":"","sources":["../../../src/tools/mempool/is-in-mempool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,eAAe,EACf,0NAA0N,EAC1N;QACE,KAAK,EAAE,WAAW,CAAC,QAAQ,CACzB,sEAAsE,CACvE;QACD,OAAO,EAAE,aAAa;KACvB,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAkB,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC1E,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;gBAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC;gBACD,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,yEAAyE;gBACzE,iDAAiD;gBACjD,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1E,IAAI,4CAA4C,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/D,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM,MAAM,CAAC;YACf,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import { decodeOfferString } from '../../chia/offer.js';
3
+ import { errorText, jsonText } from '../shared/response.js';
4
+ export function register(server) {
5
+ server.tool('decode_offer', "Decode a Chia 'offer1...' string locally (no external API). Returns a structured trade summary: what assets are offered, what is requested, and per-asset amounts and IDs. Classifies XCH, CATs (with asset_id), NFTs (with launcher_id), and DIDs.", {
6
+ offer: z
7
+ .string()
8
+ .min(1)
9
+ .describe("A Chia offer string starting with 'offer1'. Bech32m-encoded."),
10
+ }, async ({ offer }) => {
11
+ try {
12
+ const summary = decodeOfferString(offer);
13
+ return jsonText(summary);
14
+ }
15
+ catch (err) {
16
+ return errorText(err);
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=decode-offer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-offer.js","sourceRoot":"","sources":["../../../src/tools/offers/decode-offer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,qPAAqP,EACrP;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,8DAA8D,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import { summarizeSpendBundleHex } from '../../chia/offer.js';
3
+ import { errorText, jsonText } from '../shared/response.js';
4
+ export function register(server) {
5
+ server.tool('decode_spend_bundle', 'Decode a raw hex-encoded Chia spend bundle (e.g. a mempool item, or any bundle that is not wrapped in an offer string) into the same structured trade-summary shape as decode_offer. Useful for inspecting pending mempool transactions.', {
6
+ spend_bundle: z
7
+ .string()
8
+ .min(1)
9
+ .describe('Hex-encoded spend bundle bytes (with or without 0x prefix).'),
10
+ }, async ({ spend_bundle }) => {
11
+ try {
12
+ const summary = summarizeSpendBundleHex(spend_bundle);
13
+ return jsonText(summary);
14
+ }
15
+ catch (err) {
16
+ return errorText(err);
17
+ }
18
+ });
19
+ }
20
+ //# sourceMappingURL=decode-spend-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-spend-bundle.js","sourceRoot":"","sources":["../../../src/tools/offers/decode-spend-bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,0OAA0O,EAC1O;QACE,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,6DAA6D,CAAC;KAC3E,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;YACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;