mcpField
P
Polygon MCP Server

Polygon MCP Server

ローカル
github.com/Dbillionaer金融データ482 週間前に更新

Polygon MCP Server について

Polygon MCP Serverは、ウォレット、コントラクト、ブリッジ、DeFi、トランザクションシミュレーションのツールでAIシステムをPolygonブロックチェーンに接続します。開発者は標準化されたMCPインターフェースから各操作を利用できます。READMEによると、現行のモック実装ではブリッジ操作が正常に動作しない場合があります。

主な機能

  1. 01ウォレット残高確認とトークン送金
  2. 02コントラクトテンプレートとデプロイ
  3. 03EthereumとPolygon間のブリッジ操作
  4. 04QuickSwap、Uniswap V3、Polymarketのツール
  5. 05トランザクションのシミュレーションとガス見積もり
  6. 06MainnetとAmoyのネットワーク切り替え

活用シーン

  1. 01ウォレット残高の確認とトークン送金
  2. 02対応テンプレートを使ったコントラクトのデプロイ
  3. 03スワップ見積もりの取得やDeFiツールの利用
  4. 04トランザクションのシミュレーションとガス見積もり

MCP 対応

MCPサーバーとしてブロックチェーン操作ツールを登録し、クライアント要求のパラメーターを検証してPolygonでの操作結果を返します。READMEでは、現状はモック版MaticPOSClientを使用するため、ブリッジ操作が正常に動作しない可能性があるとしています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Polygon MCP サーバー

License: MIT Node.js: v18+

Polygon ブロックチェーンネットワークとシームレスに連携する Model Context Protocol(MCP)サーバーです。このサーバーを使用すると、標準化されたインターフェースを通じて AI アシスタントが Polygon とやり取りできます。ウォレット操作、スマートコントラクトのデプロイ、L2 ブリッジング、DeFi との連携、トランザクションのシミュレーションなど、包括的なツールを提供します。

目次

はじめに

Polygon は Ethereum のレイヤー 2 スケーリングソリューションです。Ethereum のセキュリティを維持しながら、より高速で低コストのトランザクションを実現します。この MCP サーバーを使用すると、シンプルで標準化されたインターフェースを通じて、AI アシスタントが Polygon ネットワークとやり取りし、幅広いブロックチェーン操作を行えます。

このサーバーは AI システムと Polygon ブロックチェーンの橋渡し役となり、ブロックチェーンとのやり取りに伴う複雑さを処理し、一般的な操作を行うための、すっきりとした使いやすい API を提供します。

┌─────────────┐     ┌───────────────┐     ┌─────────────────┐
│             │     │               │     │                 │
│  AI System  ├─────┤  Polygon MCP  ├─────┤  Polygon Chain  │
│             │     │    Server     │     │                 │
└─────────────┘     └───────────────┘     └─────────────────┘

クイックスタート

前提条件
  • Node.js(v18 以降)
  • npm または yarn
  • Polygon ウォレットの秘密鍵(トランザクションへの署名に使用)
  • Polygon Mainnet および Amoy Testnet の RPC エンドポイント
インストール
  1. リポジトリをクローンするか、ソースコードをダウンロードします
  2. 依存関係をインストールします。
cd polygonmcp
npm install
  1. 次の変数を含む .env ファイルを作成します。
# Network RPC endpoints
POLYGON_MAINNET_RPC=https://polygon-rpc.com
POLYGON_AMOY_RPC=https://rpc-amoy.polygon.technology
ETHEREUM_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_ALCHEMY_KEY  # Sepolia for Amoy's L1

# API Keys
POLYGONSCAN_API_KEY=YOUR_EXPLORER_API_KEY  # Use OKLink API key for Amoy

# Wallet (IMPORTANT: Use secure key management in production)
PRIVATE_KEY=your_private_key_here
DEFAULT_NETWORK=amoy  # Use 'amoy' for testnet

# DeFi Configuration (Optional)
DEFAULT_SLIPPAGE=0.5
DEFAULT_DEADLINE_MINUTES=20
サーバーの起動

サーバーを起動します。

npm start

自動再起動を有効にして開発する場合:

npm run dev
最初の手順
  1. ウォレット残高を確認する:

    import { PolygonMCPServer } from './polygon-mcp.js';
    const server = new PolygonMCPServer();
    
    async function checkBalance() {
      // Wallet is connected automatically on server start if PRIVATE_KEY is in .env
      // await server.connectWallet(process.env.PRIVATE_KEY);
      const balances = await server.listBalances();
      console.log('Wallet balances:', balances);
    }
    
    checkBalance().catch(console.error);
    
  2. テストネット POL を取得する(Amoy testnet のみ):

    async function getTestPol() {
      // Wallet is connected automatically on server start if PRIVATE_KEY is in .env
      // await server.connectWallet(process.env.PRIVATE_KEY);
      const result = await server.getTestnetPol();
      console.log('Faucet result:', result);
    }
    
  3. トランザクションをシミュレーションする:

    // Wallet is connected automatically on server start if PRIVATE_KEY is in .env
    
    async function simulateTransaction() {
      const result = await server.simulateTransaction({
        to: '0x1234...', // Recipient address
        value: '0.01',    // Amount in MATIC (or native token)
      });
      console.log('Simulation result:', result);
    }
    

機能

ウォレット操作
ツール説明例
get-address現在のウォレットアドレスを取得しますconst address = await server.getAddress()
get-testnet-polフォーセットからテストネット POL をリクエストします(Amoy testnet のみ)await server.getTestnetPol()
list-balances接続済みウォレットのトークン残高を一覧表示しますconst balances = await server.listBalances()
transfer-fundsPOL または ERC20 トークンを別のアドレスに送金しますawait server.transferFunds('0x1234...', '0.1', 'MATIC')

ウォレットマネージャーは次の機能を提供します。

  • 強化されたウォレット接続の検証
  • 複数のネットワークへの対応
  • 詳細なメッセージによるエラーハンドリングの改善
  • 秘密鍵の安全な管理
スマートコントラクト操作
ツール説明例
deploy-contractPolygon にスマートコントラクトをデプロイしますawait server.deployContract(name, code, args)
verify-contractPolygonscan でデプロイ済みコントラクトを検証しますawait server.verifyContract(address, name, code, args)
list-contract-templates利用可能なコントラクトテンプレートを一覧表示しますconst templates = await server.listContractTemplates()

対応するコントラクトの種類:

  • ERC20 トークン
  • ERC721 NFT コレクション
  • ERC1155 マルチトークン
  • ステーキングコントラクト
  • マルチシグウォレット
L2 ブリッジ操作
ツール説明例
deposit-ethEthereum から Polygon に ETH を入金しますawait server.mcpServer.callTool('deposit-eth', { amount: '0.1' })
withdraw-ethPolygon から Ethereum に ETH/POL を出金しますawait server.mcpServer.callTool('withdraw-eth', { amount: '0.1' })
deposit-tokenEthereum から Polygon に ERC20 を入金しますawait server.mcpServer.callTool('deposit-token', { token: 'USDC', amount: '100' })
withdraw-tokenPolygon から Ethereum に ERC20 を出金しますawait server.mcpServer.callTool('withdraw-token', { token: 'USDC', amount: '100' })
check-bridge-statusブリッジトランザクションのステータスを確認します(ツールとしては未実装です)N/A

機能:

  • PolygonBridge クラスを介して、ETH と ERC20 トークンの両方のブリッジに対応します。
  • bridge-operations.js 内で MaticPOSClient の使用をカプセル化しています。
  • ブリッジ操作のエラーハンドリングを強化しています。
  • チェックポイントを認識します(MaticPOSClient に組み込まれています)。

注記: 現在の実装では、ESM との互換性の問題により、MaticPOSClient のモック版を使用しています。ESM 互換の適切な実装が作成されるまでは、ブリッジ操作が正しく機能しない可能性があります。

DeFi の操作
QuickSwap DEX
ツール説明例
swap-tokensQuickSwap を使用してトークンをスワップしますawait server.swapTokens('MATIC', 'USDC', '10')
get-swap-quoteトークンスワップの価格見積もりを取得しますconst quote = await server.getSwapQuote('MATIC', 'USDC', '10')
add-liquidityQuickSwap プールに流動性を追加しますawait server.addLiquidity('MATIC', 'USDC', '10', '20')
Uniswap V3
ツール説明例
uniswapV3SwapSingleシングルホップスワップを実行しますawait server.uniswapV3SwapSingle(tokenIn, tokenOut, amount, fee)
uniswapV3SwapMultiマルチホップスワップを実行しますawait server.uniswapV3SwapMulti(path, amounts)
getUniswapV3QuoteSingleシングルホップスワップの見積もりを取得しますconst quote = await server.getUniswapV3QuoteSingle(tokenIn, tokenOut, amount, fee)
getUniswapV3QuoteMultiマルチホップスワップの見積もりを取得しますconst quote = await server.getUniswapV3QuoteMulti(path, amount)
Polymarket 予測市場
ツール説明例
getPolymarketInfo市場情報を取得しますconst info = await server.getPolymarketInfo(marketId)
placePolymarketBetポジショントークンを購入して賭けを行いますawait server.placePolymarketBet(marketId, outcome, amount)
getPolymarketPositions市場におけるユーザーのポジションを取得しますconst positions = await server.getPolymarketPositions(marketId)
トランザクションのシミュレーション
ツール説明例
simulate-transactionトランザクションをシミュレートして、その影響を事前に確認しますconst result = await server.simulateTransaction(txParams)
estimate-gasトランザクションのガスを見積もりますconst gas = await server.estimateGas(txParams)

機能:

  • EIP-1559 に対応したガス見積もり
  • トークン送金の検出と分析
  • コントラクト操作のシミュレーション
  • BigInt の処理を強化
  • エラーコンテキストを改善
ネットワークツール
ツール説明例
get-gas-pricePolygon の現在のガス価格を取得しますconst price = await server.getGasPrice()
switch-networkPolygon Mainnet と Amoy Testnet を切り替えますawait server.switchNetwork('mainnet')

アーキテクチャ

Polygon MCP サーバーは、関心事を分離し、保守性を高めるモジュール型アーキテクチャで構築されています。

flowchart TD
    MCPServer["Polygon MCP Server (polygon-mcp.js)"]

    subgraph Modules
        BridgeOps["Bridge Operations (bridge-operations.js)"]
        ContractOps["Contract Templates (contract-templates.js)"]
        DeFiOps["DeFi Interactions (defi-interactions.js)"]
        SimOps["Transaction Simulator (transaction-simulation.js)"]
    end

    subgraph Common ["Common Utilities (common/)"]
        WalletManager["Wallet Manager (Singleton)"]
        ConfigManager["Configuration Manager"]
        Utils["Utility Functions (utils.js)"]
        Constants["Constants"]
        Logger["Logger (logger.js)"]
        Errors["Error Handling (errors.js)"]
        Validation["Validation (validation.js)"]
    end

    MCPServer -- instantiates/uses --> Modules
    MCPServer -- uses --> Common
    Modules -- use --> Common
主要コンポーネント
  1. Polygon MCP サーバー(polygon-mcp.js):メインエントリーポイントです。MCP 通信を処理し、モジュールをインスタンス化してツールを登録し、呼び出しを委譲します。
  2. 共通ユーティリティ(common/):
    • ウォレットマネージャー:ウォレットの状態とアクセスを一元管理するシングルトンです。
    • 設定マネージャー:設定の読み込み(getConfig)を一元管理するシングルトンです。
    • ユーティリティ関数:resolveTokenAddress などの共有ヘルパーです。
    • 定数:共有 ABI、アドレスです。
    • ロガー、エラー、検証:サポートコンポーネントです。
  3. 機能モジュール:
    • ブリッジ操作(bridge-operations.js):MaticPOSClient とブリッジロジックをカプセル化します。
    • コントラクトテンプレート(contract-templates.js):コントラクトのコンパイルと、テンプレートからのデプロイを処理します。
    • DeFi インタラクション(defi-interactions.js):DEX(QuickSwap、Uniswap)および Polymarket と連携します。
    • トランザクションシミュレーター(transaction-simulation.js):eth_call を使用してトランザクションをシミュレートします。
データフロー
  1. クライアントからのリクエストを MCP サーバーが受信します
  2. リクエストを検証し、パラメーターを確認します
  3. 適切なモジュールがリクエストを処理します
  4. ethers.js を介してブロックチェーンとやり取りします
  5. 結果を整形し、クライアントに返します

API リファレンス

ウォレット操作(MCP ツール経由)
get-address

接続されているウォレットのアドレスを取得します。

戻り値: JSON 文字列 { "address": "0x..." }

list-balances

接続されているウォレット(または指定したアドレス)のネイティブトークンと既知のトークンの残高を一覧表示します。

パラメーター(省略可):

  • address(string):確認するアドレス(デフォルトは接続されているウォレット)

戻り値: JSON 文字列 { "address": "...", "nativeBalance": "...", "tokens": { "USDC": "...", ... } }

transfer-funds

ネイティブトークン(POL)または ERC20 トークンを別のアドレスに送金します。

パラメーター:

  • to(string):送金先アドレス
  • amount(string):送金する金額
  • token(string、省略可):トークンのシンボルまたはアドレス(ネイティブ POL の場合は省略)

戻り値: JSON 文字列 { "success": true, "txHash": "0x...", ... }

コントラクト操作(MCP ツール経由)
list-contract-templates

利用可能なコントラクトテンプレートを一覧表示します。

戻り値: JSON 文字列 [{ "id": "erc20", "name": "...", ... }, ...]

deploy-contract

テンプレートからコントラクトをデプロイします。

パラメーター:

  • templateId(string):テンプレートの ID(例:'erc20'、'nft')
  • params(object):テンプレート固有のパラメーター(例:{ "name": "MyToken", ... })
  • constructorArgs(Array、省略可):コントラクトコンストラクターの引数

戻り値: JSON 文字列 { "address": "0x...", "transactionHash": "0x...", ... }

verify-contract(現在、MCP ツールとして公開されていません)

Polygonscan 上でコントラクトを検証します。

パラメーター:

  • address(string):コントラクトのアドレス
  • name(string):コントラクト名
  • code(string):コントラクトのソースコード
  • constructorArgs(Array):コンストラクターの引数

戻り値: オブジェクト — 検証結果(ツールとして実装されている場合)

ブリッジ操作(MCP ツール経由)
deposit-eth

Ethereum から Polygon に ETH を預け入れます。

パラメーター:

  • amount(string):預け入れる ETH の金額

戻り値: JSON 文字列 { "txHash": "0x...", "status": "pending" }

withdraw-eth

Polygon から Ethereum にネイティブトークン(POL)を引き出します。注:Polygon はメインネットとテストネットの両方で、MATIC から POL へリブランドされています。

パラメーター:

  • amount(string):引き出すネイティブトークン(POL)の金額

戻り値: JSON 文字列 { "txHash": "0x...", "status": "pending" }

deposit-token

Ethereum から Polygon に ERC20 トークンを預け入れます。

パラメーター:

  • token(string):トークンのシンボルまたはアドレス
  • amount(string):預け入れる金額

戻り値: JSON 文字列 { "txHash": "0x...", "status": "pending" }

withdraw-token

ERC20 トークンを Polygon から Ethereum に出金します。

パラメーター:

  • token (string):トークンのシンボルまたはアドレス
  • amount (string):出金する数量

戻り値: JSON 文字列 { "txHash": "0x...", "status": "pending" }

(注:check-bridge-status は PolygonBridge に実装されていますが、まだ MCP ツールとして公開されていません)

高度な使用方法

複数の操作の組み合わせ
// Example: Swap tokens and then bridge to Ethereum (Conceptual using MCP tools)
async function swapAndBridge() {
  // Assume server is running and wallet connected via env/config

  // Swap MATIC to USDC (using a hypothetical swap tool - needs implementation)
  // const swapResult = await server.mcpServer.callTool('swap-tokens', { fromToken: 'MATIC', toToken: 'USDC', amount: '10' });
  // console.log('Swap result:', swapResult);
  // await server.provider.waitForTransaction(swapResult.content[0].text.txHash); // Wait for swap tx

  // Bridge USDC to Ethereum
  const bridgeResult = await server.mcpServer.callTool('withdraw-token', { token: 'USDC', amount: '10' });
  console.log('Bridge result:', bridgeResult);
}
カスタムコントラクトのデプロイ
// Deploy a custom ERC20 token using templates (Conceptual using MCP tools)
async function deployCustomToken() {
  // Assume server is running and wallet connected via env/config

  // Get the ERC20 template info (optional step)
  // const templates = await server.mcpServer.callTool('list-contract-templates', {});
  // console.log(templates);

  // Define parameters
  const templateId = 'erc20';
  const params = { name: 'MyCustomToken' }; // Name is used in template processing
  const constructorArgs = ['MyCustomToken', 'MCT', '1000000000000000000000000']; // Name, Symbol, InitialSupply (in wei)

  // Deploy the contract
  const deployResult = await server.mcpServer.callTool('deploy-contract', {
    templateId,
    params,
    constructorArgs
  });
  const deployData = JSON.parse(deployResult.content[0].text);
  console.log('Contract deployed at:', deployData.address);

  // Verification would need the source code, which isn't directly returned by deploy-contract
  // Verification might need a separate tool or manual process.
}
  const customizedCode = erc20Template.code
    .replace('{{name}}', 'MyCustomToken')
    .replace('initialSupply * 10 ** decimals()', '1000000 * 10 ** 18');

  // Deploy the contract
  const result = await server.deployContract(
    'MyCustomToken',
    customizedCode,
    ['MyCustomToken', 'MCT', 1000000]
  );
セキュリティのためのトランザクションシミュレーション
// Simulate a transaction before executing it (Conceptual using MCP tools)
async function safeTransfer() {
  // Assume server is running and wallet connected via env/config

  const txParams = {
    to: '0x1234...',
    value: '1000000000000000000', // 1 POL in wei
    // data: '0x' // Optional data
  };

  // Simulate first
  const simResult = await server.mcpServer.callTool('simulate-transaction', { transaction: txParams });
  const simulation = JSON.parse(simResult.content[0].text);

  // Check for issues
  if (!simulation.success) {
    console.error('Transaction would fail:', simulation.errorMessage);
    return;
  }

  // Check gas costs
  console.log('Estimated gas cost:', simulation.gasCost.ether, 'MATIC');
  // Execute if simulation was successful (using transfer-funds tool)
  const transferResult = await server.mcpServer.callTool('transfer-funds', {
    to: txParams.to,
    amount: '1.0' // Amount in POL for the tool
  });
  console.log('Transaction sent:', transferResult);
}

トラブルシューティング

現在のステータスと既知の問題

重要: 現在の実装では、ESM との互換性の問題により、MaticPOSClient のモック版を使用しています。適切な ESM 互換実装が作成されるまでは、ブリッジ操作(入金/出金)が正しく機能しない可能性があります。

よくある問題
「ウォレットが接続されていません」エラー

.env ファイルまたは MCP サーバーの設定で PRIVATE_KEY が正しく設定されていることを確認してください。キーが指定されている場合、サーバーの起動時にウォレットは自動的に接続されます。手動での connectWallet 呼び出しは、現在は主な接続方法ではありません。

RPC 接続の問題

RPC 接続の問題が発生した場合は、次のことを試してください:

  1. インターネット接続を確認する
  2. .env ファイルの RPC エンドポイント URL を確認する
  3. 別の RPC プロバイダーを使用する
残高不足

ガス代が必要な操作では、ウォレットにネイティブトークン(POL)が十分にあることを確認してください:

const balances = await server.listBalances();
// Check native token balance (POL)
const nativeToken = 'POL';
console.log(`${nativeToken} balance:`, balances.nativeBalance);
トランザクションの失敗

送信前にトランザクションシミュレーターを使用して問題を診断してください:

const simulation = await server.simulateTransaction(tx);
if (!simulation.success) {
  console.error('Transaction would fail:', simulation.errorMessage);
}
デバッグ

環境変数を設定してデバッグログを有効にします:

DEBUG=polygon-mcp:*

コントリビューション

コントリビューションを歓迎します!次の手順で参加できます:

  1. リポジトリをフォークする
  2. フィーチャーブランチを作成する:git checkout -b feature/my-feature
  3. 変更をコミットする:git commit -am 'Add my feature'
  4. ブランチにプッシュする:git push origin feature/my-feature
  5. プルリクエストを送信する
開発環境のセットアップ
  1. リポジトリをクローンする
  2. 依存関係をインストールする:npm install
  3. テスト用の認証情報を含む .env.test ファイルを作成する
  4. テストを実行する:npm test
  5. リントを実行する:npm run lint

セキュリティに関する考慮事項

このサーバーは秘密鍵と機密性の高いブロックチェーン操作を扱います。本番環境では、次の点に注意してください:

  1. 秘密鍵をコードや環境変数に保存しない
  2. 安全な鍵管理システムまたはハードウェアウォレットとの連携を使用する
  3. 適切な認証と認可を実装する
  4. 不正使用を防ぐためにレート制限を追加する
  5. 包括的なログ記録と監視を追加する
  6. すべての入力パラメーターを検証する
  7. 適切なエラー処理を実装する
  8. 安全な設定管理を使用する

MCP 連携

MCP 設定への追加

このサーバーを Claude やその他の MCP 互換システムで使用するには、MCP 設定ファイルに追加します:

Cursor/Claude Dev の場合:

{
  "mcpServers": {
    "polygon": {
      "command": "node",
      "args": ["path/to/polygon-mcp.js"],
      "env": {
        "POLYGON_MAINNET_RPC": "https://polygon-rpc.com",
        "POLYGON_AMOY_RPC": "https://rpc-amoy.polygon.technology",
        "ETHEREUM_RPC_URL": "https://eth-sepolia.g.alchemy.com/v2/YOUR_ALCHEMY_KEY",
        "POLYGONSCAN_API_KEY": "YOUR_EXPLORER_API_KEY",
        "PRIVATE_KEY": "your_private_key_here",
        "DEFAULT_NETWORK": "amoy",
        "DEFAULT_SLIPPAGE": "0.5",
        "DEFAULT_DEADLINE_MINUTES": "20"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

プロジェクト構成

  • polygon-mcp.js - メインサーバーの実装
  • bridge-operations.js - L2 ブリッジ操作
  • contract-templates.js - コントラクトのデプロイテンプレート
  • defi-interactions.js - DeFi プロトコルとの連携
  • transaction-simulation.js - トランザクションシミュレーションのロジック。
  • logger.js - 構造化ログユーティリティ。
  • errors.js - カスタムエラークラスとヘルパー。
  • validation.js - 入力検証ヘルパー(十分に活用されていない可能性があります)。
  • common/ - 共有ユーティリティと定数:
    • config-manager.js - 一元化された設定の読み込み(getConfig)。
    • constants.js - 共有 ABI、アドレス。
    • wallet-manager.js - シングルトンのウォレットマネージャー。
    • utils.js - 一元化されたユーティリティ関数(例:resolveTokenAddress)。

ライセンス

このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細については LICENSE ファイルを参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。