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
| Name | Required | Description | Default |
|---|---|---|---|
| contractAddress | Yes | ||
| operator | Yes | ||
| approved | Yes | ||
| provider | No | ||
| chainId | No | ||
| gasOptions | No |
Implementation Reference
- src/tools/erc721.ts:423-454 (registration)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)}` }] }; } } );
- src/tools/erc721.ts:88-96 (schema)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; };
- src/services/erc/erc721.ts:696-732 (helper)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'); } }); }