EVM MCP Server

by mcpdotdirect
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Supports running the MCP server with Bun runtime, enabling faster execution and modern JavaScript features.

  • Provides comprehensive blockchain services including reading state, transferring tokens, querying balances, and interacting with smart contracts on the Ethereum mainnet.

  • Supports interaction with the Fantom blockchain, including native token transfers, balance checking, and smart contract operations.

EVM MCP 서버

여러 EVM 호환 네트워크에서 블록체인 서비스를 제공하는 포괄적인 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 서버를 통해 AI 에이전트는 통합 인터페이스를 통해 이더리움, 옵티미즘, 아비트럼, 베이스, 폴리곤 및 기타 여러 EVM 체인과 상호 작용할 수 있습니다.

📋 목차

🔭 개요

MCP EVM 서버는 모델 컨텍스트 프로토콜(Model Context Protocol)을 활용하여 AI 에이전트에 블록체인 서비스를 제공합니다. 다음을 포함한 다양한 서비스를 지원합니다.

  • 블록체인 상태(잔액, 거래, 블록 등) 읽기
  • 스마트 계약과 상호 작용
  • 토큰 전송(네이티브, ERC20, ERC721, ERC1155)
  • 토큰 메타데이터 및 잔액 쿼리
  • 30개 이상의 EVM 네트워크에 걸친 체인별 서비스
  • 모든 주소 매개변수에 대한 ENS 이름 확인 (주소 대신 'vitalik.eth'와 같은 사람이 읽을 수 있는 이름 사용)

모든 서비스는 일관된 MCP 도구 및 리소스 인터페이스를 통해 제공되므로 AI 에이전트가 블록체인 기능을 쉽게 발견하고 사용할 수 있습니다. 이더리움 주소를 허용하는 모든 도구는 ENS 이름도 지원하여 자동으로 해당 이름을 백엔드 주소로 변환합니다.

✨ 특징

블록체인 데이터 액세스

  • 30개 이상의 EVM 호환 네트워크에 대한 멀티체인 지원
  • 블록 번호, 체인 ID 및 RPC를 포함한 체인 정보
  • 숫자, 해시 또는 최신으로 데이터 액세스 차단
  • 디코딩된 로그가 포함된 거래 세부 정보 및 영수증
  • 네이티브 토큰 및 모든 토큰 표준에 대한 주소 잔액
  • 사람이 읽을 수 있는 Ethereum 주소에 대한 ENS 해상도 ('0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' 대신 'vitalik.eth' 사용)

토큰 서비스

  • ERC20 토큰
    • 토큰 메타데이터(이름, 기호, 소수점, 공급) 가져오기
    • 토큰 잔액 확인
    • 주소 간 토큰 전송
    • 지출 허용액 승인
  • NFT(ERC721)
    • 컬렉션 및 토큰 메타데이터 가져오기
    • 토큰 소유권 확인
    • 주소 간 NFT 전송
    • 토큰 URI 검색 및 보유량 계산
  • 멀티 토큰(ERC1155)
    • 토큰 잔액 및 메타데이터 가져오기
    • 수량별 토큰 전송
    • 액세스 토큰 URI

스마트 계약 상호 작용

  • view/pure 함수를 통해 계약 상태 읽기
  • 개인 키 서명으로 서비스 작성
  • EOA와 구별하기 위한 계약 검증
  • 이벤트 로그 검색 및 필터링

포괄적인 거래 지원

  • 지원되는 모든 네트워크에서 기본 토큰 전송
  • 거래 계획을 위한 가스 추정
  • 거래 상태 및 영수증 정보
  • 설명 메시지를 통한 오류 처리

🌐 지원 네트워크

메인넷

  • 이더리움(ETH)
  • 낙관주의(OP)
  • 아르비트룸(ARB)
  • 아르비트룸 노바
  • 베이스
  • 폴리곤(MATIC)
  • 폴리곤 zkEVM
  • 애벌랜치(AVAX)
  • 바이낸스 스마트 체인(BSC)
  • zkSync 시대
  • 리네아
  • 셀로
  • 영지(xDai)
  • 팬텀(FTM)
  • 파일코인(FIL)
  • 문빔
  • 문리버
  • 크로노스
  • 스크롤
  • 맨틀
  • 만타
  • 폭발
  • 프락스탈
  • 방법
  • 혼혈아
  • 크로마
  • 조라
  • 오로라
  • 흐름
  • 루미아

테스트넷

  • 세폴리아
  • 낙관주의 세폴리아
  • 아르비트룸 세폴리아
  • 베이스 세폴리아
  • 폴리곤 아모이
  • 눈사태 후지
  • BSC 테스트넷
  • zkSync 세폴리아
  • 리네아 세폴리아
  • 스크롤 세폴리아
  • 맨틀 세폴리아
  • 만타 세폴리아
  • 블라스트 세폴리아
  • 프랙탈 테스트넷
  • 모드 테스트넷
  • 메티스 세폴리아
  • 크로마 세폴리아
  • 조라 세폴리아
  • 셀로 알파호레스
  • 고를리
  • 홀레스키
  • 플로우 테스트넷
  • 루미아 테스트넷

🛠️ 필수 조건

  • Bun 1.0.0 이상
  • Node.js 18.0.0 이상(Bun을 사용하지 않는 경우)

📦 설치

지엑스피1

⚙️ 서버 구성

서버는 다음과 같은 기본 구성을 사용합니다.

  • 기본 체인 ID : 1 (이더리움 메인넷)
  • 서버 포트 : 3001
  • 서버 호스트 : 0.0.0.0(모든 네트워크 인터페이스에서 접근 가능)

이러한 값은 애플리케이션에 하드코딩되어 있습니다. 수정해야 하는 경우 다음 파일을 편집할 수 있습니다.

  • 체인 구성: src/core/chains.ts
  • 서버 구성: src/server/http-server.ts

🚀 사용법

npx 사용(설치 필요 없음)

npx를 사용하면 설치 없이 MCP EVM 서버를 직접 실행할 수 있습니다.

# Run the server in stdio mode (for CLI tools) npx @mcpdotdirect/evm-mcp-server # Run the server in HTTP mode (for web applications) npx @mcpdotdirect/evm-mcp-server --http

로컬에서 서버 실행

stdio를 사용하여 서버를 시작합니다(CLI 도구에 내장하기 위해):

# Start the stdio server bun start # Development mode with auto-reload bun dev

또는 웹 애플리케이션을 위해 SSE로 HTTP 서버를 시작합니다.

# Start the HTTP server bun start:http # Development mode with auto-reload bun dev:http

서버에 연결

MCP 호환 클라이언트를 사용하여 이 MCP 서버에 연결하세요. 테스트 및 디버깅에는 MCP Inspector를 사용할 수 있습니다.

커서에서 연결

Cursor에서 MCP 서버에 연결하려면:

  1. 커서를 열고 설정(왼쪽 하단의 기어 아이콘)으로 이동하세요.
  2. 왼쪽 사이드바에서 "기능"을 클릭하세요
  3. "MCP 서버" 섹션까지 아래로 스크롤하세요.
  4. "새 MCP 서버 추가"를 클릭하세요.
  5. 다음 세부 정보를 입력하세요.
    • 서버 이름: evm-mcp-server
    • 유형: command
    • 명령어: npx @mcpdotdirect/evm-mcp-server
  6. "저장"을 클릭하세요

연결되면 Cursor 내에서 MCP 서버의 기능을 직접 사용할 수 있습니다. 서버는 MCP 서버 목록에 나타나며 필요에 따라 활성화/비활성화할 수 있습니다.

Cursor와 함께 mcp.json 사용

팀과 공유하거나 여러 프로젝트에서 사용할 수 있는 휴대성이 뛰어난 구성을 원하시면 프로젝트의 루트 디렉토리에 .cursor/mcp.json 파일을 만드세요.

{ "mcpServers": { "evm-mcp-server": { "command": "npx", "args": [ "-y", "@mcpdotdirect/evm-mcp-server" ] }, "evm-mcp-http": { "command": "npx", "args": [ "-y", "@mcpdotdirect/evm-mcp-server", "--http" ] } } }

이 파일을 프로젝트의 .cursor 디렉터리에 넣으세요(없으면 새로 만드세요). 그러면 Cursor가 해당 프로젝트에서 작업할 때 이러한 MCP 서버 구성을 자동으로 감지하여 사용합니다. 이렇게 하면 다음 작업을 쉽게 수행할 수 있습니다.

  1. 팀과 MCP 구성을 공유하세요
  2. MCP 설정 버전 제어
  3. 다양한 프로젝트에 대해 다른 서버 구성을 사용하세요

예: SSE를 사용한 HTTP 모드

웹 애플리케이션을 개발 중이고 SSE(Server-Sent Events)를 통해 HTTP 서버에 연결하려는 경우 다음 구성을 사용할 수 있습니다.

{ "mcpServers": { "evm-mcp-sse": { "url": "http://localhost:3001/sse" } } }

이는 HTTP 서버의 SSE 엔드포인트에 직접 연결되며, 다음과 같은 경우에 유용합니다.

  • 브라우저에서 MCP 서버에 연결해야 하는 웹 애플리케이션
  • 로컬 명령을 실행하는 것이 이상적이지 않은 환경
  • 여러 사용자 또는 애플리케이션 간에 단일 MCP 서버 인스턴스 공유

이 구성을 사용하려면:

  1. 프로젝트 루트에 .cursor 디렉토리가 없으면 생성하세요.
  2. 위의 JSON을 .cursor 디렉토리에 mcp.json 으로 저장합니다.
  3. 커서를 다시 시작하거나 프로젝트를 엽니다.
  4. 커서는 구성을 감지하고 서버를 활성화하도록 제안합니다.

예: 커서에서 MCP 서버 사용

mcp.json 으로 MCP 서버를 구성하면 Cursor에서 쉽게 사용할 수 있습니다. 다음은 워크플로 예시입니다.

  1. 프로젝트에 새로운 JavaScript/TypeScript 파일을 만듭니다.
// blockchain-example.js async function main() { try { // Get ETH balance for an address using ENS console.log("Getting ETH balance for vitalik.eth..."); // When using with Cursor, you can simply ask Cursor to: // "Check the ETH balance of vitalik.eth on mainnet" // Or "Transfer 0.1 ETH from my wallet to vitalik.eth" // Cursor will use the MCP server to execute these operations // without requiring any additional code from you // This is the power of the MCP integration - your AI assistant // can directly interact with blockchain data and operations } catch (error) { console.error("Error:", error.message); } } main();
  1. Cursor에서 파일을 열어 놓으면 Cursor에 다음 작업을 요청할 수 있습니다.
    • "vitalik.eth의 현재 ETH 잔액을 확인하세요"
    • "이더리움에서 USDC 가격을 찾아보세요"
    • "Optimism의 최신 블록을 보여주세요"
    • "0x1234...가 계약 주소인지 확인하세요"
  2. 커서는 MCP 서버를 사용하여 이러한 작업을 실행하고 대화에서 직접 결과를 반환합니다.

MCP 서버는 모든 블록체인 통신을 처리하고, Cursor가 자연어를 통해 블록체인 관련 작업을 이해하고 실행할 수 있도록 합니다.

Claude CLI를 사용하여 연결

Claude CLI를 사용하는 경우 다음 두 가지 명령만으로 MCP 서버에 연결할 수 있습니다.

# Add the MCP server claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server # Start Claude with the MCP server enabled claude

예: ENS를 사용하여 토큰 잔액 얻기

// Example of using the MCP client to check a token balance using ENS const mcp = new McpClient("http://localhost:3000"); const result = await mcp.invokeTool("get-token-balance", { tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC on Ethereum ownerAddress: "vitalik.eth", // ENS name instead of address network: "ethereum" }); console.log(result); // { // tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // owner: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", // network: "ethereum", // raw: "1000000000", // formatted: "1000", // symbol: "USDC", // decimals: 6 // }

예: ENS 이름 확인

// Example of using the MCP client to resolve an ENS name to an address const mcp = new McpClient("http://localhost:3000"); const result = await mcp.invokeTool("resolve-ens", { ensName: "vitalik.eth", network: "ethereum" }); console.log(result); // { // ensName: "vitalik.eth", // normalizedName: "vitalik.eth", // resolvedAddress: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", // network: "ethereum" // }

📚 API 참조

도구

서버는 에이전트를 위해 다음과 같은 MCP 도구를 제공합니다. 주소 매개변수를 허용하는 모든 도구는 이더리움 주소와 ENS 이름을 모두 지원합니다.

토큰 서비스

도구 이름설명주요 매개변수
get-token-infoERC20 토큰 메타데이터 가져오기tokenAddress (주소/ENS), network
get-token-balanceERC20 토큰 잔액 확인tokenAddress (주소/ENS), ownerAddress (주소/ENS), network
transfer-tokenERC20 토큰 전송privateKey , tokenAddress (주소/ENS), toAddress (주소/ENS), amount , network
approve-token-spending토큰 허용 승인privateKey , tokenAddress (주소/ENS), spenderAddress (주소/ENS), amount , network
get-nft-infoNFT 메타데이터 가져오기tokenAddress (주소/ENS), tokenId , network
check-nft-ownershipNFT 소유권 확인tokenAddress (주소/ENS), tokenId , ownerAddress (주소/ENS), network
transfer-nftNFT 전송privateKey , tokenAddress (주소/ENS), tokenId , toAddress (주소/ENS), network
get-nft-balance소유한 NFT 수 계산tokenAddress (주소/ENS), ownerAddress (주소/ENS), network
get-erc1155-token-uriERC1155 메타데이터 가져오기tokenAddress (주소/ENS), tokenId , network
get-erc1155-balanceERC1155 잔액 확인tokenAddress (주소/ENS), tokenId , ownerAddress (주소/ENS), network
transfer-erc1155ERC1155 토큰 전송privateKey , tokenAddress (주소/ENS), tokenId , amount , toAddress (주소/ENS), network

블록체인 서비스

도구 이름설명주요 매개변수
get-chain-info네트워크 정보 가져오기network
get-balance네이티브 토큰 잔액을 얻으세요address (주소/ENS), network
transfer-eth네이티브 토큰 보내기privateKey , ( to /ENS), amount , network
get-transaction거래 세부 정보 받기txHash , network
read-contract스마트 계약 상태 읽기contractAddress (주소/ENS), abi , functionName , args , network
write-contract스마트 계약에 쓰기contractAddress (주소/ENS), abi , functionName , args , privateKey , network
is-contract주소가 계약서인지 확인하세요address (주소/ENS), network
resolve-ensENS 이름을 주소로 확인ensName , network

자원

서버는 다음 MCP 리소스 URI를 통해 블록체인 데이터를 노출합니다. 주소를 허용하는 모든 리소스 URI는 ENS 이름도 지원하며, 이 이름은 자동으로 주소로 변환됩니다.

블록체인 리소스

리소스 URI 패턴설명
evm://{network}/chain특정 네트워크에 대한 체인 정보
evm://chain이더리움 메인넷 체인 정보
evm://{network}/block/{blockNumber}숫자로 블록 데이터
evm://{network}/block/latest최신 블록 데이터
evm://{network}/address/{address}/balance네이티브 토큰 잔액
evm://{network}/tx/{txHash}거래 세부 정보
evm://{network}/tx/{txHash}/receipt로그가 포함된 거래 영수증

토큰 리소스

리소스 URI 패턴설명
evm://{network}/token/{tokenAddress}ERC20 토큰 정보
evm://{network}/token/{tokenAddress}/balanceOf/{address}ERC20 토큰 잔액
evm://{network}/nft/{tokenAddress}/{tokenId}NFT(ERC721) 토큰 정보
evm://{network}/nft/{tokenAddress}/{tokenId}/isOwnedBy/{address}NFT 소유권 검증
evm://{network}/erc1155/{tokenAddress}/{tokenId}/uriERC1155 토큰 URI
evm://{network}/erc1155/{tokenAddress}/{tokenId}/balanceOf/{address}ERC1155 토큰 잔액

🔒 보안 고려 사항

  • 개인 키는 거래 서명에만 사용되며 서버에 저장되지 않습니다.
  • 프로덕션 사용을 위해 추가 인증 메커니즘 구현을 고려하세요.
  • 프로덕션 환경에서 HTTP 서버에 HTTPS를 사용하세요
  • 남용을 방지하기 위해 속도 제한을 구현하세요
  • 고가치 서비스의 경우 확인 단계를 추가하는 것을 고려하세요.

📁 프로젝트 구조

mcp-evm-server/ ├── src/ │ ├── index.ts # Main stdio server entry point │ ├── server/ # Server-related files │ │ ├── http-server.ts # HTTP server with SSE │ │ └── server.ts # General server setup │ ├── core/ │ │ ├── chains.ts # Chain definitions and utilities │ │ ├── resources.ts # MCP resources implementation │ │ ├── tools.ts # MCP tools implementation │ │ ├── prompts.ts # MCP prompts implementation │ │ └── services/ # Core blockchain services │ │ ├── index.ts # Operation exports │ │ ├── balance.ts # Balance services │ │ ├── transfer.ts # Token transfer services │ │ ├── utils.ts # Utility functions │ │ ├── tokens.ts # Token metadata services │ │ ├── contracts.ts # Contract interactions │ │ ├── transactions.ts # Transaction services │ │ └── blocks.ts # Block services │ │ └── clients.ts # RPC client utilities ├── package.json ├── tsconfig.json └── README.md

🛠️ 개발

서버를 수정하거나 확장하려면:

  1. src/core/services/ 아래의 적절한 파일에 새로운 서비스를 추가합니다.
  2. src/core/tools.ts 에 새로운 도구를 등록합니다.
  3. src/core/resources.ts 에 새로운 리소스를 등록합니다.
  4. src/core/chains.ts 에 새로운 네트워크 지원을 추가합니다.
  5. 서버 구성을 변경하려면 src/server/http-server.ts 에 있는 하드코딩된 값을 편집하세요.

📄 라이센스

이 프로젝트는 MIT 라이선스 조건에 따라 라이선스가 부여되었습니다.

ID: z9r55dx1np