setNFTApprovalForAll
Enable or disable third-party operator access to all NFTs in a specific smart contract. Manage NFT permissions efficiently using contract address, operator address, and approval status.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| approved | Yes | ||
| chainId | No | ||
| contractAddress | Yes | ||
| gasOptions | No | ||
| operator | Yes | ||
| provider | No |
Implementation Reference
- src/tools/erc721.ts:433-452 (handler)The MCP tool handler function that calls the ERC721 setApprovalForAll service and formats the response.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:422-454 (registration)Registration of the setNFTApprovalForAll tool with the MCP server, including schema and inline handler.// Set Approval For All 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 type definition for SetNFTApprovalForAll parameters (note: owner not used in actual schema).type SetNFTApprovalForAllParams = { contractAddress: string; owner: string; operator: string; approved: boolean; provider?: string; chainId?: number; gasOptions?: TokenOperationOptions; };
- src/services/erc/erc721.ts:696-732 (helper)Low-level helper function that performs the actual ERC721 setApprovalForAll contract transaction using ethers.js.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'); } }); }