Polygon MCP Server について
Polygon MCP Serverは、ウォレット、コントラクト、ブリッジ、DeFi、トランザクションシミュレーションのツールでAIシステムをPolygonブロックチェーンに接続します。開発者は標準化されたMCPインターフェースから各操作を利用できます。READMEによると、現行のモック実装ではブリッジ操作が正常に動作しない場合があります。
主な機能
- 01ウォレット残高確認とトークン送金
- 02コントラクトテンプレートとデプロイ
- 03EthereumとPolygon間のブリッジ操作
- 04QuickSwap、Uniswap V3、Polymarketのツール
- 05トランザクションのシミュレーションとガス見積もり
- 06MainnetとAmoyのネットワーク切り替え
活用シーン
- 01ウォレット残高の確認とトークン送金
- 02対応テンプレートを使ったコントラクトのデプロイ
- 03スワップ見積もりの取得やDeFiツールの利用
- 04トランザクションのシミュレーションとガス見積もり
MCP 対応
MCPサーバーとしてブロックチェーン操作ツールを登録し、クライアント要求のパラメーターを検証してPolygonでの操作結果を返します。READMEでは、現状はモック版MaticPOSClientを使用するため、ブリッジ操作が正常に動作しない可能性があるとしています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Polygon MCP サーバー
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 エンドポイント
インストール
- リポジトリをクローンするか、ソースコードをダウンロードします
- 依存関係をインストールします。
cd polygonmcp
npm install
- 次の変数を含む
.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
最初の手順
-
ウォレット残高を確認する:
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); -
テストネット 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); } -
トランザクションをシミュレーションする:
// 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-funds | POL または ERC20 トークンを別のアドレスに送金します | await server.transferFunds('0x1234...', '0.1', 'MATIC') |
ウォレットマネージャーは次の機能を提供します。
- 強化されたウォレット接続の検証
- 複数のネットワークへの対応
- 詳細なメッセージによるエラーハンドリングの改善
- 秘密鍵の安全な管理
スマートコントラクト操作
| ツール | 説明 | 例 |
|---|---|---|
deploy-contract | Polygon にスマートコントラクトをデプロイします | await server.deployContract(name, code, args) |
verify-contract | Polygonscan でデプロイ済みコントラクトを検証します | await server.verifyContract(address, name, code, args) |
list-contract-templates | 利用可能なコントラクトテンプレートを一覧表示します | const templates = await server.listContractTemplates() |
対応するコントラクトの種類:
- ERC20 トークン
- ERC721 NFT コレクション
- ERC1155 マルチトークン
- ステーキングコントラクト
- マルチシグウォレット
L2 ブリッジ操作
| ツール | 説明 | 例 |
|---|---|---|
deposit-eth | Ethereum から Polygon に ETH を入金します | await server.mcpServer.callTool('deposit-eth', { amount: '0.1' }) |
withdraw-eth | Polygon から Ethereum に ETH/POL を出金します | await server.mcpServer.callTool('withdraw-eth', { amount: '0.1' }) |
deposit-token | Ethereum から Polygon に ERC20 を入金します | await server.mcpServer.callTool('deposit-token', { token: 'USDC', amount: '100' }) |
withdraw-token | Polygon から 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-tokens | QuickSwap を使用してトークンをスワップします | await server.swapTokens('MATIC', 'USDC', '10') |
get-swap-quote | トークンスワップの価格見積もりを取得します | const quote = await server.getSwapQuote('MATIC', 'USDC', '10') |
add-liquidity | QuickSwap プールに流動性を追加します | 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-price | Polygon の現在のガス価格を取得します | const price = await server.getGasPrice() |
switch-network | Polygon 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
主要コンポーネント
- Polygon MCP サーバー(
polygon-mcp.js):メインエントリーポイントです。MCP 通信を処理し、モジュールをインスタンス化してツールを登録し、呼び出しを委譲します。 - 共通ユーティリティ(
common/):- ウォレットマネージャー:ウォレットの状態とアクセスを一元管理するシングルトンです。
- 設定マネージャー:設定の読み込み(
getConfig)を一元管理するシングルトンです。 - ユーティリティ関数:
resolveTokenAddressなどの共有ヘルパーです。 - 定数:共有 ABI、アドレスです。
- ロガー、エラー、検証:サポートコンポーネントです。
- 機能モジュール:
- ブリッジ操作(
bridge-operations.js):MaticPOSClientとブリッジロジックをカプセル化します。 - コントラクトテンプレート(
contract-templates.js):コントラクトのコンパイルと、テンプレートからのデプロイを処理します。 - DeFi インタラクション(
defi-interactions.js):DEX(QuickSwap、Uniswap)および Polymarket と連携します。 - トランザクションシミュレーター(
transaction-simulation.js):eth_callを使用してトランザクションをシミュレートします。
- ブリッジ操作(
データフロー
- クライアントからのリクエストを MCP サーバーが受信します
- リクエストを検証し、パラメーターを確認します
- 適切なモジュールがリクエストを処理します
- ethers.js を介してブロックチェーンとやり取りします
- 結果を整形し、クライアントに返します
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 接続の問題が発生した場合は、次のことを試してください:
- インターネット接続を確認する
.envファイルの RPC エンドポイント URL を確認する- 別の 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:*
コントリビューション
コントリビューションを歓迎します!次の手順で参加できます:
- リポジトリをフォークする
- フィーチャーブランチを作成する:
git checkout -b feature/my-feature - 変更をコミットする:
git commit -am 'Add my feature' - ブランチにプッシュする:
git push origin feature/my-feature - プルリクエストを送信する
開発環境のセットアップ
- リポジトリをクローンする
- 依存関係をインストールする:
npm install - テスト用の認証情報を含む
.env.testファイルを作成する - テストを実行する:
npm test - リントを実行する:
npm run lint
セキュリティに関する考慮事項
このサーバーは秘密鍵と機密性の高いブロックチェーン操作を扱います。本番環境では、次の点に注意してください:
- 秘密鍵をコードや環境変数に保存しない
- 安全な鍵管理システムまたはハードウェアウォレットとの連携を使用する
- 適切な認証と認可を実装する
- 不正使用を防ぐためにレート制限を追加する
- 包括的なログ記録と監視を追加する
- すべての入力パラメーターを検証する
- 適切なエラー処理を実装する
- 安全な設定管理を使用する
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 ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。