Skip to main content
Glama

fetchNftsOwnedByMultichainAddresses

Retrieve NFTs owned by multichain wallet addresses across specified blockchain networks. Configure filters to exclude or include specific NFT types and adjust spam confidence levels for accurate results.

Input Schema

NameRequiredDescriptionDefault
addressesYesA list of wallet address and network pairs
pageKeyNoThe cursor to start the search from. Use this to paginate through the results.
pageSizeNoThe number of results to return. Default is 100. Max is 100
withMetadataNoWhether to include metadata in the results.

Input Schema (JSON Schema)

{ "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "addresses": { "description": "A list of wallet address and network pairs", "items": { "additionalProperties": false, "properties": { "address": { "description": "The wallet address to query. e.g. \"0x1234567890123456789012345678901234567890\"", "type": "string" }, "excludeFilters": { "default": [ "SPAM", "AIRDROPS" ], "description": "The filters to exclude from the results. e.g. [\"SPAM\", \"AIRDROPS\"]", "items": { "enum": [ "SPAM", "AIRDROPS" ], "type": "string" }, "type": "array" }, "includeFilters": { "default": [], "description": "The filters to include in the results. e.g. [\"SPAM\", \"AIRDROPS\"]", "items": { "enum": [ "SPAM", "AIRDROPS" ], "type": "string" }, "type": "array" }, "networks": { "default": [ "eth-mainnet" ], "description": "The blockchain networks to query. e.g. [\"eth-mainnet\", \"base-mainnet\"]", "items": { "type": "string" }, "type": "array" }, "spamConfidenceLevel": { "default": "VERY_HIGH", "description": "The spam confidence level to query. e.g. \"LOW\" or \"HIGH\"", "enum": [ "LOW", "MEDIUM", "HIGH", "VERY_HIGH" ], "type": "string" } }, "required": [ "address" ], "type": "object" }, "type": "array" }, "pageKey": { "description": "The cursor to start the search from. Use this to paginate through the results.", "type": "string" }, "pageSize": { "default": 10, "description": "The number of results to return. Default is 100. Max is 100", "type": "number" }, "withMetadata": { "default": true, "description": "Whether to include metadata in the results.", "type": "boolean" } }, "required": [ "addresses" ], "type": "object" }

Implementation Reference

  • Core handler function that executes the NFT fetching logic by calling the Alchemy NFT API client with the provided parameters.
    async getNftsForAddress(params: NftsByAddressParams) { try { const client = createNftClient(); const response = await client.post('/by-address', { ...params }); return response.data; } catch (error) { console.error('Error fetching NFTs for address:', error); throw error; } },
  • TypeScript interfaces defining the input schema for the NFT fetching parameters, matching the Zod schema used in registration.
    export interface NftsByAddressParams { addresses: NftsByAddressPair[]; withMetadata: boolean; pageKey?: string; pageSize: number; } export interface NftsByAddressPair { address: string; networks: string[]; excludeFilters: Array<'SPAM' | 'AIRDROPS'>; includeFilters: Array<'SPAM' | 'AIRDROPS'>; spamConfidenceLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'VERY_HIGH'; }
  • index.ts:253-283 (registration)
    MCP server tool registration including Zod input schema validation and thin wrapper handler that calls the core alchemyApi.getNftsForAddress function.
    server.tool('fetchNftsOwnedByMultichainAddresses', { addresses: z.array(z.object({ address: z.string().describe('The wallet address to query. e.g. "0x1234567890123456789012345678901234567890"'), networks: z.array(z.string()).default(['eth-mainnet']).describe('The blockchain networks to query. e.g. ["eth-mainnet", "base-mainnet"]'), excludeFilters: z.array(z.enum(['SPAM', 'AIRDROPS'])).default(["SPAM", "AIRDROPS"]).describe('The filters to exclude from the results. e.g. ["SPAM", "AIRDROPS"]'), includeFilters: z.array(z.enum(['SPAM', 'AIRDROPS'])).default([]).describe('The filters to include in the results. e.g. ["SPAM", "AIRDROPS"]'), spamConfidenceLevel: z.enum(['LOW', 'MEDIUM', 'HIGH', 'VERY_HIGH']).default('VERY_HIGH').describe('The spam confidence level to query. e.g. "LOW" or "HIGH"'), })).describe('A list of wallet address and network pairs'), withMetadata: z.boolean().default(true).describe('Whether to include metadata in the results.'), pageKey: z.string().optional().describe('The cursor to start the search from. Use this to paginate through the results.'), pageSize: z.number().default(10).describe('The number of results to return. Default is 100. Max is 100'), }, async (params) => { try { const result = await alchemyApi.getNftsForAddress(params); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; } catch (error) { if (error instanceof Error) { console.error('Error in getNFTsForOwner:', error); return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true }; } return { content: [{ type: "text", text: 'Unknown error occurred' }], isError: true }; } });
  • Factory function that creates the Axios HTTP client configured for the Alchemy NFT API endpoint, used by the handler.
    export const createNftClient = () => axios.create({ baseURL: `https://api.g.alchemy.com/data/v1/${API_KEY}/assets/nfts`, headers: { 'accept': 'application/json', 'content-type': 'application/json', 'x-alchemy-client-breadcrumb': BREADCRUMB_HEADER }, });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/alchemyplatform/alchemy-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server