Skip to main content

MetaMask Connect EVM SDK methods

MetaMask Connect EVM (@metamask/connect-evm) provides several convenience methods for connecting to and interacting with MetaMask, including the following.

connect

Connects to MetaMask and requests account access.

Parameters

NameTypeRequiredDescription
options.chainIdsHex[]NoArray of hex chain IDs to request permission for (defaults to ['0x1'] if not provided). Ethereum Mainnet (0x1) is always included in the request regardless of what is passed.
options.accountstringNoSpecific account address to connect.
options.forceRequestbooleanNoForce a new connection request even if already connected.

Returns

A promise that resolves to an object containing accounts (an array of account addresses) and chainId.

Example

const { accounts, chainId } = await evmClient.connect({
chainIds: ['0x1', '0x89'],
})
console.log('Connected accounts:', accounts)

connectAndSign

Connects to MetaMask and signs a personal_sign message in a single user approval.

Parameters

NameTypeRequiredDescription
options.messagestringYesThe message to sign.
options.chainIdsHex[]NoArray of hex chain IDs to request permission for (defaults to ['0x1']).

Returns

A promise that resolves to an object containing accounts (an array of account addresses), chainId, and signature.

Example

const { accounts, chainId, signature } = await evmClient.connectAndSign({
message: 'Sign in to My DApp',
chainIds: ['0x1'],
})
console.log('Connected:', accounts[0])
console.log('Signature:', signature)

connectWith

Connects to MetaMask and executes a specific JSON-RPC method in a single user approval.

Parameters

NameTypeRequiredDescription
options.methodstringYesThe JSON-RPC method name.
options.paramsany[] | FunctionYesThe parameters for the method. Can be a function (accounts: Address[]) => any[] for dynamic account injection.
options.chainIdsHex[]NoArray of hex chain IDs to request permission for (defaults to ['0x1']).

Returns

A promise that resolves to an object containing accounts, chainId, and result (the return value of the RPC call).

Example

const { accounts, chainId, result } = await evmClient.connectWith({
method: 'eth_sendTransaction',
params: [
{
from: '0xYourAddress',
to: '0xRecipientAddress',
value: '0x2386F26FC10000',
},
],
chainIds: ['0x1'],
})
console.log('Transaction hash:', result)

switchChain

Switches the active chain on the EVM client. If the chain is not already added to the user's MetaMask wallet, the optional chainConfiguration parameter triggers a wallet_addEthereumChain request as a fallback.

Parameters

NameTypeRequiredDescription
options.chainIdHexYesThe hex chain ID to switch to.
options.chainConfigurationobjectNoFallback chain details if the chain is not yet added to MetaMask.
options.chainConfiguration.chainNamestringYesHuman-readable chain name.
options.chainConfiguration.nativeCurrencyobjectYes{ name, symbol, decimals } for the native token.
options.chainConfiguration.rpcUrlsstring[]YesArray of RPC endpoint URLs.
options.chainConfiguration.blockExplorerUrlsstring[]NoArray of block explorer URLs.

Example

await evmClient.switchChain({
chainId: '0xa4b1',
chainConfiguration: {
chainName: 'Arbitrum One',
nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
rpcUrls: ['https://arb1.arbitrum.io/rpc'],
blockExplorerUrls: ['https://arbiscan.io'],
},
})

getProvider

Returns the active EIP-1193 Ethereum provider object. The provider is available immediately after createEVMClient resolves, even before calling connect(). Read-only RPC calls work immediately; account-dependent calls require connect() first.

Returns

An EIP-1193 compatible provider object.

Example

const provider = evmClient.getProvider()
const chainId = await provider.request({ method: 'eth_chainId' })
console.log('Current chain:', chainId)

isInitialized

Checks if MetaMask Connect has been initialized.

Returns

true if MetaMask Connect is initialized, false otherwise.

Example

if (evmClient.isInitialized()) {
console.log('SDK is ready to use')
}

disconnect

Disconnects all EVM (eip155) scopes from MetaMask and cleans up local state. This only revokes the EVM-specific scopes currently held in the session; it does not terminate the broader multichain session if non-EVM scopes (such as Solana) are also active.

Example

await evmClient.disconnect()