@covalenthq/goldrush-mcp-server
Version:
GoldRush MCP Server for interacting with Covalent GoldRush API
98 lines • 4.48 kB
JavaScript
import { stringifyWithBigInt } from "../utils/helpers.js";
import { ChainName, } from "@covalenthq/client-sdk";
import { z } from "zod";
export function addNftServiceTools(server, goldRushClient) {
server.tool("nft_for_address", "Commonly used to render the NFTs (including ERC721 and ERC1155) held by an address.\n" +
"Required: chainName (blockchain network name), walletAddress (wallet address or ENS/domain).\n" +
"Optional: noSpam (filter spam, default true), noNftAssetMetadata (exclude metadata for faster response, default true), " +
"withUncached (fetch uncached metadata, may be slower, default false).\n" +
"Returns complete details of NFTs in the wallet including metadata.", {
chainName: z
.enum(Object.values(ChainName))
.describe("The blockchain network to query (e.g., 'eth-mainnet', 'matic-mainnet', 'bsc-mainnet')."),
walletAddress: z
.string()
.describe("The wallet address to get NFTs for. Can be a wallet address or ENS/domain name."),
noSpam: z
.boolean()
.optional()
.default(true)
.describe("Filter out spam/scam NFTs from results. Default is true."),
noNftAssetMetadata: z
.boolean()
.optional()
.default(true)
.describe("Skip fetching NFT asset metadata for faster response. Default is true."),
withUncached: z
.boolean()
.optional()
.default(false)
.describe("Fetch uncached metadata directly from source (may be slower but more up-to-date). Default is false."),
}, async (params) => {
try {
const response = await goldRushClient.NftService.getNftsForAddress(params.chainName, params.walletAddress, {
noSpam: params.noSpam,
noNftAssetMetadata: params.noNftAssetMetadata,
withUncached: params.withUncached,
});
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
server.tool("nft_check_ownership", "Commonly used to verify ownership of NFTs (including ERC-721 and ERC-1155) within a collection.\n" +
"Required: chainName (blockchain network), walletAddress (wallet address), collectionContract (NFT collection).\n" +
"Optional: traitsFilter (filter by trait types), valuesFilter (filter by trait values).\n" +
"Returns ownership status and matching NFTs if owned.", {
chainName: z
.enum(Object.values(ChainName))
.describe("The blockchain network to query (e.g., 'eth-mainnet', 'matic-mainnet', 'bsc-mainnet')."),
walletAddress: z
.string()
.describe("The wallet address to check NFT ownership for. Must be a valid blockchain address."),
collectionContract: z
.string()
.describe("The NFT collection contract address to check ownership in. Must be a valid ERC-721 or ERC-1155 contract address."),
traitsFilter: z
.string()
.optional()
.describe("Filter by specific trait types (comma-separated list of trait names to filter by)."),
valuesFilter: z
.string()
.optional()
.describe("Filter by specific trait values (comma-separated list of trait values to match)."),
}, async (params) => {
try {
const response = await goldRushClient.NftService.checkOwnershipInNft(params.chainName, params.walletAddress, params.collectionContract, {
traitsFilter: params.traitsFilter,
valuesFilter: params.valuesFilter,
});
return {
content: [
{
type: "text",
text: stringifyWithBigInt(response.data),
},
],
};
}
catch (err) {
return {
content: [{ type: "text", text: `Error: ${err}` }],
isError: true,
};
}
});
}
//# sourceMappingURL=NftService.js.map