Skip to main content
Glama

setNFTApprovalForAll

Grant or revoke permission for an operator to manage all your NFTs from a specific smart contract, enabling delegated asset management on Ethereum networks.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
contractAddressYes
operatorYes
approvedYes
providerNo
chainIdNo
gasOptionsNo

Implementation Reference

  • MCP server.tool registration for 'setNFTApprovalForAll', including input schema validation, description omitted in excerpt, and the execution handler that calls the service helper.
    server.tool( "setNFTApprovalForAll", { contractAddress: contractAddressSchema, operator: addressSchema, approved: z.boolean(), provider: providerSchema, chainId: chainIdSchema, gasOptions: gasOptionsSchema }, async ({ contractAddress, operator, approved, provider, chainId, gasOptions }) => { try { const tx = await setApprovalForAll(ethersService, contractAddress, operator, approved, provider, chainId, gasOptions); return { content: [{ type: "text", text: `Successfully ${approved ? 'approved' : 'revoked approval for'} ${operator} to manage all your NFTs from collection ${contractAddress} Transaction Hash: ${tx.hash} Waiting for confirmation...` }] }; } catch (error) { return { isError: true, content: [{ type: "text", text: `Error setting approval for all: ${error instanceof Error ? error.message : String(error)}` }] }; } } );
  • TypeScript interface defining parameters for setNFTApprovalForAll (note: 'owner' param not used in actual handler).
    type SetNFTApprovalForAllParams = { contractAddress: string; owner: string; operator: string; approved: boolean; provider?: string; chainId?: number; gasOptions?: TokenOperationOptions; };
  • Supporting helper function that performs the actual setApprovalForAll contract transaction using ethers.js, called by the tool handler.
    export async function setApprovalForAll( ethersService: EthersService, contractAddress: string, operatorAddress: string, approved: boolean, provider?: string, chainId?: number, options: TokenOperationOptions = {} ): Promise<ethers.TransactionResponse> { metrics.incrementCounter('erc721.setApprovalForAll'); return timeAsync('erc721.setApprovalForAll', async () => { try { // Get signer from ethers service const signer = ethersService['getSigner'](provider, chainId); // Create contract instance with signer const contractWithSigner = new ethers.Contract(contractAddress, ERC721_ABI, signer); // Prepare transaction overrides const overrides: ethers.Overrides = {}; if (options.gasLimit) overrides.gasLimit = options.gasLimit; if (options.gasPrice) overrides.gasPrice = options.gasPrice; if (options.maxFeePerGas) overrides.maxFeePerGas = options.maxFeePerGas; if (options.maxPriorityFeePerGas) overrides.maxPriorityFeePerGas = options.maxPriorityFeePerGas; if (options.nonce !== undefined) overrides.nonce = options.nonce; // Send transaction const tx = await contractWithSigner.setApprovalForAll(operatorAddress, approved, overrides); return tx; } catch (error) { logger.debug('Error setting approval for all NFTs', { contractAddress, operatorAddress, approved, error }); throw handleTokenError(error, 'Failed to set approval for all NFTs'); } }); }

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/crazyrabbitLTC/mcp-ethers-server'

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