@kasarlabs/erc20-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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/bin/erc20-mcp.js +14 -0
  4. package/build/index.d.ts +2 -0
  5. package/build/index.js +128 -0
  6. package/build/index.js.map +1 -0
  7. package/build/lib/abis/new.d.ts +184 -0
  8. package/build/lib/abis/new.js +576 -0
  9. package/build/lib/abis/new.js.map +1 -0
  10. package/build/lib/abis/old.d.ts +122 -0
  11. package/build/lib/abis/old.js +1030 -0
  12. package/build/lib/abis/old.js.map +1 -0
  13. package/build/lib/constants/constant.d.ts +5 -0
  14. package/build/lib/constants/constant.js +36 -0
  15. package/build/lib/constants/constant.js.map +1 -0
  16. package/build/lib/dependances/types.d.ts +85 -0
  17. package/build/lib/dependances/types.js +51 -0
  18. package/build/lib/dependances/types.js.map +1 -0
  19. package/build/lib/types/types.d.ts +32 -0
  20. package/build/lib/types/types.js +6 -0
  21. package/build/lib/types/types.js.map +1 -0
  22. package/build/lib/utils/contractManager.d.ts +9 -0
  23. package/build/lib/utils/contractManager.js +26 -0
  24. package/build/lib/utils/contractManager.js.map +1 -0
  25. package/build/lib/utils/utils.d.ts +129 -0
  26. package/build/lib/utils/utils.js +176 -0
  27. package/build/lib/utils/utils.js.map +1 -0
  28. package/build/schemas/index.d.ts +370 -0
  29. package/build/schemas/index.js +88 -0
  30. package/build/schemas/index.js.map +1 -0
  31. package/build/tools/approve.d.ts +20 -0
  32. package/build/tools/approve.js +35 -0
  33. package/build/tools/approve.js.map +1 -0
  34. package/build/tools/deployERC20.d.ts +14 -0
  35. package/build/tools/deployERC20.js +32 -0
  36. package/build/tools/deployERC20.js.map +1 -0
  37. package/build/tools/getAllowance.d.ts +48 -0
  38. package/build/tools/getAllowance.js +74 -0
  39. package/build/tools/getAllowance.js.map +1 -0
  40. package/build/tools/getBalance.d.ts +25 -0
  41. package/build/tools/getBalance.js +62 -0
  42. package/build/tools/getBalance.js.map +1 -0
  43. package/build/tools/getTotalSupply.d.ts +14 -0
  44. package/build/tools/getTotalSupply.js +25 -0
  45. package/build/tools/getTotalSupply.js.map +1 -0
  46. package/build/tools/transfer.d.ts +10 -0
  47. package/build/tools/transfer.js +46 -0
  48. package/build/tools/transfer.js.map +1 -0
  49. package/build/tools/transferFrom.d.ts +12 -0
  50. package/build/tools/transferFrom.js +36 -0
  51. package/build/tools/transferFrom.js.map +1 -0
  52. package/package.json +43 -0
@@ -0,0 +1,74 @@
1
+ import { Contract } from 'starknet';
2
+ import { formatBalance, validateToken, detectAbiType, extractAssetInfo, } from '../lib/utils/utils.js';
3
+ export const getAllowance = async (env, params) => {
4
+ try {
5
+ const provider = env.provider;
6
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
7
+ const token = await validateToken(provider, assetSymbol || undefined, assetAddress || undefined);
8
+ const abi = await detectAbiType(token.address, provider);
9
+ const tokenContract = new Contract(abi, token.address, provider);
10
+ const allowanceResponse = await tokenContract.allowance(params.ownerAddress, params.spenderAddress);
11
+ return {
12
+ status: 'success',
13
+ owner: params.ownerAddress,
14
+ spender: params.spenderAddress,
15
+ allowance: formatBalance(allowanceResponse, token.decimals),
16
+ symbol: token.symbol,
17
+ };
18
+ }
19
+ catch (error) {
20
+ return {
21
+ status: 'failure',
22
+ error: error instanceof Error ? error.message : 'Unknown error',
23
+ };
24
+ }
25
+ };
26
+ export const getMyGivenAllowance = async (env, params) => {
27
+ try {
28
+ const provider = env.provider;
29
+ const ownerAddress = env.account.address;
30
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
31
+ const token = await validateToken(provider, assetSymbol || undefined, assetAddress || undefined);
32
+ const abi = await detectAbiType(token.address, provider);
33
+ const tokenContract = new Contract(abi, token.address, provider);
34
+ const allowanceResponse = await tokenContract.allowance(ownerAddress, params.spenderAddress);
35
+ return {
36
+ status: 'success',
37
+ owner: ownerAddress,
38
+ spender: params.spenderAddress,
39
+ allowance: formatBalance(allowanceResponse, token.decimals),
40
+ symbol: token.symbol,
41
+ };
42
+ }
43
+ catch (error) {
44
+ return {
45
+ status: 'failure',
46
+ error: error instanceof Error ? error.message : 'Unknown error',
47
+ };
48
+ }
49
+ };
50
+ export const getAllowanceGivenToMe = async (env, params) => {
51
+ try {
52
+ const provider = env.provider;
53
+ const spenderAddress = env.account.address;
54
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
55
+ const token = await validateToken(provider, assetSymbol || undefined, assetAddress || undefined);
56
+ const abi = await detectAbiType(token.address, provider);
57
+ const tokenContract = new Contract(abi, token.address, provider);
58
+ const allowanceResponse = await tokenContract.allowance(params.ownerAddress, spenderAddress);
59
+ return {
60
+ status: 'success',
61
+ owner: params.ownerAddress,
62
+ spender: spenderAddress,
63
+ allowance: formatBalance(allowanceResponse, token.decimals),
64
+ symbol: token.symbol,
65
+ };
66
+ }
67
+ catch (error) {
68
+ return {
69
+ status: 'failure',
70
+ error: error instanceof Error ? error.message : 'Unknown error',
71
+ };
72
+ }
73
+ };
74
+ //# sourceMappingURL=getAllowance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAllowance.js","sourceRoot":"","sources":["../../src/tools/getAllowance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { onchainWrite } from '@kasarlabs/ask-starknet-core';
2
+ import { z } from 'zod';
3
+ import { getBalanceSchema, getOwnBalanceSchema } from '../schemas/index.js';
4
+ export declare const getOwnBalance: (env: onchainWrite, params: z.infer<typeof getOwnBalanceSchema>) => Promise<{
5
+ status: string;
6
+ balance: string;
7
+ symbol: string;
8
+ error?: undefined;
9
+ } | {
10
+ status: string;
11
+ error: string;
12
+ balance?: undefined;
13
+ symbol?: undefined;
14
+ }>;
15
+ export declare const getBalance: (env: onchainWrite, params: z.infer<typeof getBalanceSchema>) => Promise<{
16
+ status: string;
17
+ balance: string;
18
+ symbol: string;
19
+ error?: undefined;
20
+ } | {
21
+ status: string;
22
+ error: string;
23
+ balance?: undefined;
24
+ symbol?: undefined;
25
+ }>;
@@ -0,0 +1,62 @@
1
+ import { Contract } from 'starknet';
2
+ import { detectAbiType } from '../lib/utils/utils.js';
3
+ import { formatBalance, validateToken, extractAssetInfo, } from '../lib/utils/utils.js';
4
+ export const getOwnBalance = async (env, params) => {
5
+ try {
6
+ const provider = env.provider;
7
+ const account = env.account;
8
+ const accountAddress = account.address;
9
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
10
+ const token = await validateToken(provider, assetSymbol, assetAddress);
11
+ const abi = await detectAbiType(token.address, provider);
12
+ if (!accountAddress) {
13
+ throw new Error('Wallet address not configured');
14
+ }
15
+ const tokenContract = new Contract(abi, token.address, provider);
16
+ const balanceResponse = await tokenContract.balance_of(accountAddress);
17
+ if (balanceResponse === undefined || balanceResponse === null) {
18
+ throw new Error('No balance value received from contract');
19
+ }
20
+ const formattedBalance = formatBalance(balanceResponse, token.decimals);
21
+ return {
22
+ status: 'success',
23
+ balance: formattedBalance,
24
+ symbol: token.symbol,
25
+ };
26
+ }
27
+ catch (error) {
28
+ return {
29
+ status: 'failure',
30
+ error: error instanceof Error ? error.message : 'Unknown error',
31
+ };
32
+ }
33
+ };
34
+ export const getBalance = async (env, params) => {
35
+ try {
36
+ if (!params?.accountAddress) {
37
+ throw new Error('Account address are required');
38
+ }
39
+ const provider = env.provider;
40
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
41
+ const token = await validateToken(provider, assetSymbol, assetAddress);
42
+ const abi = await detectAbiType(token.address, provider);
43
+ const tokenContract = new Contract(abi, token.address, provider);
44
+ const balanceResponse = await tokenContract.balanceOf(params.accountAddress);
45
+ const balanceValue = typeof balanceResponse === 'object' && 'balance' in balanceResponse
46
+ ? balanceResponse.balance
47
+ : balanceResponse;
48
+ const formattedBalance = formatBalance(balanceValue, token.decimals);
49
+ return {
50
+ status: 'success',
51
+ balance: formattedBalance,
52
+ symbol: token.symbol,
53
+ };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ status: 'failure',
58
+ error: error instanceof Error ? error.message : 'Unknown error',
59
+ };
60
+ }
61
+ };
62
+ //# sourceMappingURL=getBalance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBalance.js","sourceRoot":"","sources":["../../src/tools/getBalance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { onchainWrite } from '@kasarlabs/ask-starknet-core';
2
+ import { z } from 'zod';
3
+ import { getTotalSupplySchema } from '../schemas/index.js';
4
+ export declare const getTotalSupply: (env: onchainWrite, params: z.infer<typeof getTotalSupplySchema>) => Promise<{
5
+ status: string;
6
+ totalSupply: string;
7
+ symbol: string;
8
+ error?: undefined;
9
+ } | {
10
+ status: string;
11
+ error: string;
12
+ totalSupply?: undefined;
13
+ symbol?: undefined;
14
+ }>;
@@ -0,0 +1,25 @@
1
+ import { Contract } from 'starknet';
2
+ import { validateToken, formatBalance, detectAbiType, extractAssetInfo, } from '../lib/utils/utils.js';
3
+ export const getTotalSupply = async (env, params) => {
4
+ try {
5
+ const provider = env.provider;
6
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
7
+ const token = await validateToken(provider, assetSymbol, assetAddress);
8
+ const abi = await detectAbiType(token.address, provider);
9
+ const tokenContract = new Contract(abi, token.address, provider);
10
+ const totalSupply = await tokenContract.total_supply();
11
+ const formattedSupply = formatBalance(totalSupply, token.decimals);
12
+ return {
13
+ status: 'success',
14
+ totalSupply: formattedSupply,
15
+ symbol: token.symbol,
16
+ };
17
+ }
18
+ catch (error) {
19
+ return {
20
+ status: 'failure',
21
+ error: error instanceof Error ? error.message : 'Unknown error',
22
+ };
23
+ }
24
+ };
25
+ //# sourceMappingURL=getTotalSupply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTotalSupply.js","sourceRoot":"","sources":["../../src/tools/getTotalSupply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,GAAiB,EACjB,MAA4C,EAC5C,EAAE;IACF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE9B,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErE,MAAM,KAAK,GAAe,MAAM,aAAa,CAC3C,QAAQ,EACR,WAAW,EACX,YAAY,CACb,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEzD,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;QAEvD,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEnE,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,eAAe;YAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { onchainWrite } from '@kasarlabs/ask-starknet-core';
2
+ import { z } from 'zod';
3
+ import { transferSchema } from '../schemas/index.js';
4
+ export declare const transfer: (env: onchainWrite, params: z.infer<typeof transferSchema>) => Promise<string | {
5
+ status: string;
6
+ amount: string;
7
+ symbol: string;
8
+ recipients_address: string;
9
+ transaction_hash: string;
10
+ }>;
@@ -0,0 +1,46 @@
1
+ import { Contract } from 'starknet';
2
+ import { validateAndFormatParams, executeV3Transaction, validateToken, detectAbiType, extractAssetInfo, } from '../lib/utils/utils.js';
3
+ export const transfer = async (env, params) => {
4
+ try {
5
+ const provider = env.provider;
6
+ const account = env.account;
7
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
8
+ const token = await validateToken(provider, assetSymbol, assetAddress);
9
+ const abi = await detectAbiType(token.address, provider);
10
+ const { address, amount } = validateAndFormatParams(params.recipientAddress, params.amount, token.decimals);
11
+ const recipientAddress = address;
12
+ try {
13
+ const nonce = await account.getNonce();
14
+ console.error(`Account nonce: ${nonce}`);
15
+ }
16
+ catch (error) {
17
+ throw new Error(`Account not found on this network. Please verify your account address and network. Account: ${account.address}. Error: ${error.message}`);
18
+ }
19
+ const contract = new Contract(abi, token.address, provider);
20
+ contract.connect(account);
21
+ const calldata = contract.populate('transfer', {
22
+ recipient: recipientAddress,
23
+ amount: amount,
24
+ });
25
+ const txH = await executeV3Transaction({
26
+ call: calldata,
27
+ account: account,
28
+ });
29
+ return {
30
+ status: 'success',
31
+ amount: params.amount,
32
+ symbol: token.symbol,
33
+ recipients_address: recipientAddress,
34
+ transaction_hash: txH,
35
+ };
36
+ }
37
+ catch (error) {
38
+ const transferResult = {
39
+ status: 'failure',
40
+ error: error instanceof Error ? error.message : 'Unknown error',
41
+ step: 'transfer execution',
42
+ };
43
+ return JSON.stringify(transferResult);
44
+ }
45
+ };
46
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/tools/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,QAAQ,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAc/B,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,GAAiB,EACjB,MAAsC,EACtC,EAAE;IACF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAE5B,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErE,MAAM,KAAK,GAAe,MAAM,aAAa,CAC3C,QAAQ,EACR,WAAW,EACX,YAAY,CACb,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,uBAAuB,CACjD,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,MAAM,EACb,KAAK,CAAC,QAAQ,CACf,CAAC;QAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC;QAGjC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,+FAA+F,OAAO,CAAC,OAAO,YAAY,KAAK,CAAC,OAAO,EAAE,CAC1I,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5D,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC7C,SAAS,EAAE,gBAAgB;YAC3B,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC;YACrC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,kBAAkB,EAAE,gBAAgB;YACpC,gBAAgB,EAAE,GAAG;SACtB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,GAAmB;YACrC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;YAC/D,IAAI,EAAE,oBAAoB;SAC3B,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { onchainWrite } from '@kasarlabs/ask-starknet-core';
2
+ import { z } from 'zod';
3
+ import { transferFromSchema } from '../schemas/index.js';
4
+ export declare const transferFrom: (env: onchainWrite, params: z.infer<typeof transferFromSchema>) => Promise<{
5
+ status: string;
6
+ transactionHash: string;
7
+ error?: undefined;
8
+ } | {
9
+ status: string;
10
+ error: string;
11
+ transactionHash?: undefined;
12
+ }>;
@@ -0,0 +1,36 @@
1
+ import { Contract, validateAndParseAddress, } from 'starknet';
2
+ import { validateAndFormatParams, executeV3Transaction, validateToken, detectAbiType, extractAssetInfo, } from '../lib/utils/utils.js';
3
+ export const transferFrom = async (env, params) => {
4
+ try {
5
+ const account = env.account;
6
+ const provider = env.provider;
7
+ const { assetSymbol, assetAddress } = extractAssetInfo(params.asset);
8
+ const token = await validateToken(provider, assetSymbol, assetAddress);
9
+ const abi = await detectAbiType(token.address, provider);
10
+ const { address, amount } = validateAndFormatParams(params.fromAddress, params.amount, token.decimals);
11
+ const fromAddress = address;
12
+ const toAddress = validateAndParseAddress(params.toAddress);
13
+ const contract = new Contract(abi, token.address, provider);
14
+ contract.connect(account);
15
+ const calldata = contract.populate('transfer_from', [
16
+ fromAddress,
17
+ toAddress,
18
+ amount,
19
+ ]);
20
+ const txH = await executeV3Transaction({
21
+ call: calldata,
22
+ account: account,
23
+ });
24
+ return {
25
+ status: 'success',
26
+ transactionHash: txH,
27
+ };
28
+ }
29
+ catch (error) {
30
+ return {
31
+ status: 'failure',
32
+ error: error instanceof Error ? error.message : 'Unknown error',
33
+ };
34
+ }
35
+ };
36
+ //# sourceMappingURL=transferFrom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferFrom.js","sourceRoot":"","sources":["../../src/tools/transferFrom.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,uBAAuB,GAExB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAe/B,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,GAAiB,EACjB,MAA0C,EAC1C,EAAE;IACF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE9B,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,uBAAuB,CACjD,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,MAAM,EACb,KAAK,CAAC,QAAQ,CACf,CAAC;QAEF,MAAM,WAAW,GAAG,OAAO,CAAC;QAC5B,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE5D,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE5D,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE;YAClD,WAAW;YACX,SAAS;YACT,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC;YACrC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,eAAe,EAAE,GAAG;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@kasarlabs/erc20-mcp",
3
+ "version": "0.1.0",
4
+ "main": "index.js",
5
+ "type": "module",
6
+ "bin": {
7
+ "erc20-mcp": "./bin/erc20-mcp.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc && chmod 755 build/index.js",
11
+ "clean": "rm -rf build",
12
+ "clean:all": "rm -rf build node_modules",
13
+ "start": "node build/index.js"
14
+ },
15
+ "files": [
16
+ "build"
17
+ ],
18
+ "dependencies": {
19
+ "@kasarlabs/ask-starknet-core": "0.1.0",
20
+ "@langchain/core": "^0.3.42",
21
+ "@modelcontextprotocol/sdk": "^1.11.2",
22
+ "dotenv": "^16.4.7",
23
+ "starknet": "^7.6.4",
24
+ "winston": "^3.17.0",
25
+ "zod": "^3.24.2"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^22.13.10",
29
+ "typescript": "^5.8.2"
30
+ },
31
+ "keywords": [
32
+ "mcp",
33
+ "starknet",
34
+ "erc20"
35
+ ],
36
+ "author": "kasarlabs",
37
+ "license": "MIT",
38
+ "description": "MCP server for comprehensive ERC20 token operations including transfers, allowances, and contract deployment.",
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "gitHead": "2239ec60f8e369abd318807cecd22fe97c0ab917"
43
+ }