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