@kasarlabs/avnu-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 (46) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/bin/avnu-mcp.js +2 -0
  4. package/build/index.d.ts +2 -0
  5. package/build/index.js +49 -0
  6. package/build/index.js.map +1 -0
  7. package/build/interfaces/index.d.ts +7 -0
  8. package/build/interfaces/index.js +2 -0
  9. package/build/interfaces/index.js.map +1 -0
  10. package/build/lib/abis/erc20Abi.d.ts +92 -0
  11. package/build/lib/abis/erc20Abi.js +676 -0
  12. package/build/lib/abis/erc20Abi.js.map +1 -0
  13. package/build/lib/constants/index.d.ts +2 -0
  14. package/build/lib/constants/index.js +3 -0
  15. package/build/lib/constants/index.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/index.d.ts +51 -0
  20. package/build/lib/types/index.js +2 -0
  21. package/build/lib/types/index.js.map +1 -0
  22. package/build/lib/utils/contractInteractor.d.ts +16 -0
  23. package/build/lib/utils/contractInteractor.js +114 -0
  24. package/build/lib/utils/contractInteractor.js.map +1 -0
  25. package/build/lib/utils/transactionMonitor.d.ts +11 -0
  26. package/build/lib/utils/transactionMonitor.js +82 -0
  27. package/build/lib/utils/transactionMonitor.js.map +1 -0
  28. package/build/lib/utils/utils.d.ts +6 -0
  29. package/build/lib/utils/utils.js +9 -0
  30. package/build/lib/utils/utils.js.map +1 -0
  31. package/build/schemas/index.d.ts +28 -0
  32. package/build/schemas/index.js +20 -0
  33. package/build/schemas/index.js.map +1 -0
  34. package/build/tools/approval.d.ts +8 -0
  35. package/build/tools/approval.js +46 -0
  36. package/build/tools/approval.js.map +1 -0
  37. package/build/tools/fetchRoute.d.ts +13 -0
  38. package/build/tools/fetchRoute.js +67 -0
  39. package/build/tools/fetchRoute.js.map +1 -0
  40. package/build/tools/fetchTokens.d.ts +10 -0
  41. package/build/tools/fetchTokens.js +30 -0
  42. package/build/tools/fetchTokens.js.map +1 -0
  43. package/build/tools/swap.d.ts +17 -0
  44. package/build/tools/swap.js +92 -0
  45. package/build/tools/swap.js.map +1 -0
  46. package/package.json +44 -0
@@ -0,0 +1,67 @@
1
+ import { fetchQuotes } from '@avnu/avnu-sdk';
2
+ import { TokenService } from './fetchTokens.js';
3
+ import { ContractInteractor } from '../lib/utils/contractInteractor.js';
4
+ export class RouteFetchService {
5
+ constructor() {
6
+ this.tokenService = new TokenService();
7
+ }
8
+ async initialize() {
9
+ await this.tokenService.initializeTokens();
10
+ }
11
+ async fetchRoute(params, env, accountAddress) {
12
+ try {
13
+ await this.initialize();
14
+ const { sellToken, buyToken } = this.tokenService.validateTokenPair(params.sellTokenSymbol, params.buyTokenSymbol);
15
+ const contractInteractor = new ContractInteractor(env.provider);
16
+ const formattedAmountStr = contractInteractor.formatTokenAmount(params.sellAmount.toString(), sellToken.decimals);
17
+ const formattedAmount = BigInt(formattedAmountStr);
18
+ const quoteParams = {
19
+ sellTokenAddress: sellToken.address,
20
+ buyTokenAddress: buyToken.address,
21
+ sellAmount: formattedAmount,
22
+ takerAddress: accountAddress,
23
+ size: 1,
24
+ };
25
+ const quotes = await fetchQuotes(quoteParams);
26
+ if (!quotes?.length) {
27
+ return {
28
+ status: 'failure',
29
+ error: 'No routes available for this swap',
30
+ };
31
+ }
32
+ const quote = quotes[0];
33
+ const route = quote.routes?.[0];
34
+ if (!route) {
35
+ return {
36
+ status: 'failure',
37
+ error: 'No valid route found in quote',
38
+ };
39
+ }
40
+ return {
41
+ status: 'success',
42
+ route,
43
+ quote,
44
+ };
45
+ }
46
+ catch (error) {
47
+ return {
48
+ status: 'failure',
49
+ error: error instanceof Error ? error.message : 'Unknown error',
50
+ };
51
+ }
52
+ }
53
+ }
54
+ export const getRoute = async (env, params) => {
55
+ try {
56
+ const routeService = new RouteFetchService();
57
+ const result = await routeService.fetchRoute(params, env, env.account.address);
58
+ return JSON.stringify(result, (_, value) => typeof value === 'bigint' ? value.toString() : value);
59
+ }
60
+ catch (error) {
61
+ return {
62
+ status: 'failure',
63
+ error: error instanceof Error ? error.message : 'Unknown error',
64
+ };
65
+ }
66
+ };
67
+ //# sourceMappingURL=fetchRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchRoute.js","sourceRoot":"","sources":["../../src/tools/fetchRoute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Token } from '@avnu/avnu-sdk';
2
+ export declare class TokenService {
3
+ private tokenCache;
4
+ initializeTokens(): Promise<void>;
5
+ getToken(symbol: string): Token | undefined;
6
+ validateTokenPair(sellSymbol: string, buySymbol: string): {
7
+ sellToken: Token;
8
+ buyToken: Token;
9
+ };
10
+ }
@@ -0,0 +1,30 @@
1
+ import { fetchTokens } from '@avnu/avnu-sdk';
2
+ export class TokenService {
3
+ constructor() {
4
+ this.tokenCache = new Map();
5
+ }
6
+ async initializeTokens() {
7
+ try {
8
+ const response = await fetchTokens();
9
+ response.content.forEach((token) => {
10
+ this.tokenCache.set(token.symbol.toLowerCase(), token);
11
+ });
12
+ }
13
+ catch (error) {
14
+ throw new Error(`Failed to initialize tokens: ${error.message}`);
15
+ }
16
+ }
17
+ getToken(symbol) {
18
+ return this.tokenCache.get(symbol.toLowerCase());
19
+ }
20
+ validateTokenPair(sellSymbol, buySymbol) {
21
+ const sellToken = this.getToken(sellSymbol);
22
+ const buyToken = this.getToken(buySymbol);
23
+ if (!sellToken)
24
+ throw new Error(`Sell token ${sellSymbol} not supported`);
25
+ if (!buyToken)
26
+ throw new Error(`Buy token ${buySymbol} not supported`);
27
+ return { sellToken, buyToken };
28
+ }
29
+ }
30
+ //# sourceMappingURL=fetchTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchTokens.js","sourceRoot":"","sources":["../../src/tools/fetchTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMpD,MAAM,OAAO,YAAY;IAAzB;QAMU,eAAU,GAAuB,IAAI,GAAG,EAAE,CAAC;IAiDrD,CAAC;IA1CC,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;YACrC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAOD,QAAQ,CAAC,MAAc;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IASD,iBAAiB,CACf,UAAkB,EAClB,SAAiB;QAKjB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE1C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,gBAAgB,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,gBAAgB,CAAC,CAAC;QAEvE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { onchainWrite } from '@kasarlabs/ask-starknet-core';
2
+ import { SwapParams, SwapResult } from '../lib/types/index.js';
3
+ export declare class SwapService {
4
+ private env;
5
+ private tokenService;
6
+ private approvalService;
7
+ constructor(env: onchainWrite);
8
+ initialize(): Promise<void>;
9
+ private extractSpenderAddress;
10
+ executeSwapTransaction(params: SwapParams): Promise<SwapResult>;
11
+ private monitorSwapStatus;
12
+ }
13
+ export declare const createSwapService: (env: onchainWrite) => SwapService;
14
+ export declare const swapTokens: (env: onchainWrite, params: SwapParams) => Promise<string | {
15
+ status: string;
16
+ error: string;
17
+ }>;
@@ -0,0 +1,92 @@
1
+ import { executeSwap, fetchQuotes } from '@avnu/avnu-sdk';
2
+ import { ApprovalService } from './approval.js';
3
+ import { DEFAULT_QUOTE_SIZE, SLIPPAGE_PERCENTAGE, } from '../lib/constants/index.js';
4
+ import { TokenService } from './fetchTokens.js';
5
+ import { ContractInteractor } from '../lib/utils/contractInteractor.js';
6
+ import { TransactionMonitor } from '../lib/utils/transactionMonitor.js';
7
+ export class SwapService {
8
+ constructor(env) {
9
+ this.env = env;
10
+ this.tokenService = new TokenService();
11
+ this.approvalService = new ApprovalService(env);
12
+ }
13
+ async initialize() {
14
+ await this.tokenService.initializeTokens();
15
+ }
16
+ extractSpenderAddress(quote) {
17
+ if (quote.routes?.length > 0) {
18
+ const mainRoute = quote.routes[0];
19
+ return mainRoute.address;
20
+ }
21
+ return undefined;
22
+ }
23
+ async executeSwapTransaction(params) {
24
+ try {
25
+ await this.initialize();
26
+ const contractInteractor = new ContractInteractor(this.env.provider);
27
+ const account = this.env.account;
28
+ const { sellToken, buyToken } = this.tokenService.validateTokenPair(params.sellTokenSymbol, params.buyTokenSymbol);
29
+ const formattedAmount = BigInt(contractInteractor.formatTokenAmount(params.sellAmount.toString(), sellToken.decimals));
30
+ const quoteParams = {
31
+ sellTokenAddress: sellToken.address,
32
+ buyTokenAddress: buyToken.address,
33
+ sellAmount: formattedAmount,
34
+ takerAddress: account.address,
35
+ size: DEFAULT_QUOTE_SIZE,
36
+ };
37
+ const quotes = await fetchQuotes(quoteParams);
38
+ if (!quotes?.length) {
39
+ throw new Error('No quotes available for this swap');
40
+ }
41
+ const quote = quotes[0];
42
+ const spenderAddress = this.extractSpenderAddress(quote);
43
+ if (!spenderAddress) {
44
+ throw new Error(`Could not determine spender address from quote. Available properties: ${Object.keys(quote).join(', ')}`);
45
+ }
46
+ await this.approvalService.checkAndApproveToken(account, sellToken.address, spenderAddress, formattedAmount.toString());
47
+ const swapResult = await executeSwap(account, quote, {
48
+ slippage: SLIPPAGE_PERCENTAGE,
49
+ });
50
+ const { receipt, events } = await this.monitorSwapStatus(swapResult.transactionHash);
51
+ return {
52
+ status: 'success',
53
+ message: `Successfully swapped ${params.sellAmount} ${params.sellTokenSymbol} for ${params.buyTokenSymbol}`,
54
+ transactionHash: swapResult.transactionHash,
55
+ sellAmount: params.sellAmount,
56
+ sellToken: params.sellTokenSymbol,
57
+ buyToken: params.buyTokenSymbol,
58
+ receipt,
59
+ events,
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ status: 'failure',
65
+ error: error instanceof Error ? error.message : 'Unknown error',
66
+ };
67
+ }
68
+ }
69
+ async monitorSwapStatus(txHash) {
70
+ const transactionMonitor = new TransactionMonitor(this.env.provider);
71
+ const receipt = await transactionMonitor.waitForTransaction(txHash, (status) => console.error('Swap status:', status));
72
+ const events = await transactionMonitor.getTransactionEvents(txHash);
73
+ return { receipt, events };
74
+ }
75
+ }
76
+ export const createSwapService = (env) => {
77
+ return new SwapService(env);
78
+ };
79
+ export const swapTokens = async (env, params) => {
80
+ try {
81
+ const swapService = createSwapService(env);
82
+ const result = await swapService.executeSwapTransaction(params);
83
+ return JSON.stringify(result);
84
+ }
85
+ catch (error) {
86
+ return {
87
+ status: 'failure',
88
+ error: error instanceof Error ? error.message : 'Unknown error',
89
+ };
90
+ }
91
+ };
92
+ //# sourceMappingURL=swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/tools/swap.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@kasarlabs/avnu-mcp",
3
+ "version": "0.1.0",
4
+ "main": "index.js",
5
+ "type": "module",
6
+ "bin": {
7
+ "avnu-mcp": "./bin/avnu-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
+ "@avnu/avnu-sdk": "^3.1.1",
20
+ "@kasarlabs/ask-starknet-core": "0.1.0",
21
+ "@langchain/core": "^0.3.75",
22
+ "@modelcontextprotocol/sdk": "^1.11.2",
23
+ "dotenv": "^16.4.7",
24
+ "starknet": "^7.6.4",
25
+ "winston": "^3.17.0",
26
+ "zod": "^3.24.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^22.13.10",
30
+ "typescript": "^5.8.2"
31
+ },
32
+ "keywords": [
33
+ "mcp",
34
+ "starknet",
35
+ "avnu"
36
+ ],
37
+ "author": "kasarlabs",
38
+ "license": "MIT",
39
+ "description": "MCP server for AVNU token swapping on Starknet",
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "gitHead": "2239ec60f8e369abd318807cecd22fe97c0ab917"
44
+ }