@covalenthq/goldrush-mcp-server
Version:
GoldRush MCP Server for interacting with Covalent GoldRush API
237 lines • 8.75 kB
JavaScript
import { validQuoteValues } from "../utils/constants.js";
import { TOOL_DESCRIPTIONS, PARAM_DESCRIPTIONS, } from "../utils/generated-descriptions.js";
import { stringifyWithBigInt } from "../utils/helpers.js";
import { ChainName, } from "@covalenthq/client-sdk";
import { z } from "zod";
export function addBaseServiceTools(server, goldRushClient) {
server.tool("gas_prices", TOOL_DESCRIPTIONS["gas_prices"], {
chainName: z
.enum(Object.values(ChainName))
.describe(PARAM_DESCRIPTIONS["gas_prices"]["chainName"]),
eventType: z
.enum(["erc20", "nativetokens", "uniswapv3"])
.describe(PARAM_DESCRIPTIONS["gas_prices"]["eventType"]),
quoteCurrency: z
.enum(Object.values(validQuoteValues))
.optional()
.describe(PARAM_DESCRIPTIONS["gas_prices"]["quoteCurrency"]),
}, async (params) => {
try {
const response = await goldRushClient.BaseService.getGasPrices(params.chainName, params.eventType, {
quoteCurrency: params.quoteCurrency,
});
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
server.tool("block", TOOL_DESCRIPTIONS["block"], {
chainName: z
.enum(Object.values(ChainName))
.describe(PARAM_DESCRIPTIONS["block"]["chainName"]),
blockHeight: z
.string()
.describe(PARAM_DESCRIPTIONS["block"]["blockHeight"]),
}, async (params) => {
try {
const response = await goldRushClient.BaseService.getBlock(params.chainName, params.blockHeight);
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
server.tool("block_heights", TOOL_DESCRIPTIONS["block_heights"], {
chainName: z
.enum(Object.values(ChainName))
.describe(PARAM_DESCRIPTIONS["block_heights"]["chainName"]),
startDate: z
.string()
.describe(PARAM_DESCRIPTIONS["block_heights"]["startDate"]),
endDate: z
.union([z.string(), z.literal("latest")])
.describe(PARAM_DESCRIPTIONS["block_heights"]["endDate"]),
pageSize: z
.number()
.optional()
.default(10)
.describe(PARAM_DESCRIPTIONS["block_heights"]["pageSize"]),
pageNumber: z
.number()
.optional()
.default(0)
.describe(PARAM_DESCRIPTIONS["block_heights"]["pageNumber"]),
}, async (params) => {
try {
const response = await goldRushClient.BaseService.getBlockHeightsByPage(params.chainName, params.startDate, params.endDate, {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
});
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
server.tool("log_events_by_address", TOOL_DESCRIPTIONS["log_events_by_address"], {
chainName: z
.enum(Object.values(ChainName))
.describe(PARAM_DESCRIPTIONS["log_events_by_address"]["chainName"]),
contractAddress: z
.string()
.describe(PARAM_DESCRIPTIONS["log_events_by_address"]["contractAddress"]),
startingBlock: z
.union([z.string(), z.number()])
.optional()
.describe(PARAM_DESCRIPTIONS["log_events_by_address"]["startingBlock"]),
endingBlock: z
.union([z.string(), z.number()])
.optional()
.describe(PARAM_DESCRIPTIONS["log_events_by_address"]["endingBlock"]),
pageSize: z
.number()
.optional()
.default(10)
.describe(PARAM_DESCRIPTIONS["log_events_by_address"]["pageSize"]),
pageNumber: z
.number()
.optional()
.default(0)
.describe(PARAM_DESCRIPTIONS["log_events_by_address"]["pageNumber"]),
}, async (params) => {
try {
const response = await goldRushClient.BaseService.getLogEventsByAddressByPage(params.chainName, params.contractAddress, {
startingBlock: params.startingBlock,
endingBlock: params.endingBlock,
pageSize: params.pageSize,
pageNumber: params.pageNumber,
});
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
server.tool("log_events_by_topic", TOOL_DESCRIPTIONS["log_events_by_topic"], {
chainName: z
.enum(Object.values(ChainName))
.describe(PARAM_DESCRIPTIONS["log_events_by_topic"]["chainName"]),
topicHash: z
.string()
.describe(PARAM_DESCRIPTIONS["log_events_by_topic"]["topicHash"]),
startingBlock: z
.union([z.string(), z.number()])
.optional()
.describe(PARAM_DESCRIPTIONS["log_events_by_topic"]["startingBlock"]),
endingBlock: z
.union([z.string(), z.number()])
.optional()
.describe(PARAM_DESCRIPTIONS["log_events_by_topic"]["endingBlock"]),
secondaryTopics: z
.string()
.optional()
.describe(PARAM_DESCRIPTIONS["log_events_by_topic"]["secondaryTopics"]),
pageSize: z
.number()
.optional()
.default(10)
.describe(PARAM_DESCRIPTIONS["log_events_by_topic"]["pageSize"]),
pageNumber: z
.number()
.optional()
.default(0)
.describe(PARAM_DESCRIPTIONS["log_events_by_topic"]["pageNumber"]),
}, async (params) => {
try {
const response = await goldRushClient.BaseService.getLogEventsByTopicHashByPage(params.chainName, params.topicHash, {
startingBlock: params.startingBlock,
endingBlock: params.endingBlock,
secondaryTopics: params.secondaryTopics,
pageSize: params.pageSize,
pageNumber: params.pageNumber,
});
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
server.tool("resolve_address", TOOL_DESCRIPTIONS["resolve_address"], {
chainName: z
.enum(Object.values(ChainName))
.describe(PARAM_DESCRIPTIONS["resolve_address"]["chainName"]),
walletAddress: z
.string()
.describe(PARAM_DESCRIPTIONS["resolve_address"]["walletAddress"]),
}, async (params) => {
try {
const response = await goldRushClient.BaseService.getResolvedAddress(params.chainName, params.walletAddress);
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
}
//# sourceMappingURL=BaseService.js.map