钱包交互服务器

MoonGate MCP服务器是一个支持AI助手和工具通过API与MoonGate钱包交互的服务,提供交易签名、代币发送、投资组合查看和代币交换等功能。

  • by invictusdhahri
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 invictusdhahri/moongate-mcp-server

使用说明

MoonGate MCP服务器

模型上下文协议(MCP)服务器 月亮之门 -具有零摩擦认证的Solana钱包。

该服务器使人工智能助手和Claude(通过API或Desktop)、OpenClaw和Cursor等工具能够与您的MoonGate钱包进行交互:

  • 🔑 签署交易和消息
  • 💸 发送令牌(SOL和SPL令牌)
  • 📊 查看投资组合和余额
  • 🔄 交换代币
  • 🔐 基于OAuth的身份验证(谷歌/苹果)

快速开始

安装

npm install -g moongate-mcp-server

配置

适用于克劳德桌面

添加到您的 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "moongate": {
      "command": "npx",
      "args": ["-y", "moongate-mcp-server"],
      "env": {
        "MOONGATE_API_URL": "https://wallet.moongate.one"
      }
    }
  }
}

对于光标

添加到光标MCP设置中:

{
  "mcpServers": {
    "moongate": {
      "command": "npx",
      "args": ["-y", "moongate-mcp-server"]
    }
  }
}

适用于OpenClaw或自定义集成

使用MCP SDK以编程方式连接到服务器。看 MCP文件 有关客户端实现的详细信息。

认证

📖 看 作者指南.md 有关截图的详细说明。

太长,读不下去了 使用浏览器会话中的令牌(推荐):

  1. 登录 wallet.mooncote.one
  2. 打开DevTools→ 应用→ 本地存储
  3. 复制 token 价值
  4. 将其添加到MCP配置中 MOONGATE_TOKEN

对于Claude Desktop:

{
  "mcpServers": {
    "moongate": {
      "command": "npx",
      "args": ["-y", "moongate-mcp-server"],
      "env": {
        "MOONGATE_TOKEN": "eyJhbGciOiJSUzI1NiIsInR5cCI6..."
      }
    }
  }
}

代币在7天后过期 -需要时,从浏览器中获取一个新的。

可用工具

get_wallet_address

获取您的MoonGate钱包的公钥(地址)。

// No parameters required

退货:

{
  "publicKey": "5xGj3..."
}

sign_message

用你的钱包签名。

参数:

  • message (string | number[]):要签名的消息

退货:

{
  "signature": "4vJ5a..."
}

sign_transaction

签署Solana交易(可选择广播)。

参数:

  • serializedTransaction (number[]):序列化事务字节
  • type (string):交易类型-“遗留”或“版本化”(默认:“版本化的”)
  • broadcast (boolean):签名后是否广播(默认:false)
  • includePayerSignature (boolean):包括付款人签名(默认值:true)

退货:

{
  "signatures": ["..."],
  "signedTransaction": [/* bytes */],
  "txSignature": "3nZ4..." // if broadcast=true
}

send_token

将SOL或SPL令牌发送到另一个地址。获取您的投资组合以解析代币、验证余额并使用正确的小数。

参数:

  • tokenMint (string):令牌造币厂地址(如果提供了tokenName/tokenSymbol,则可选)
  • tokenName (string):在投资组合中搜索的代币名称(例如“Wrapped SOL”)
  • tokenSymbol (字符串):在投资组合中搜索的代币符号(例如“SOL”、“USDC”)
  • toAddress (string):收件人钱包地址
  • amount (number):发送金额
  • decimals (数字):代币小数(可选;从投资组合中自动提取)
  • userWallet (string):可选-发件人地址(如果省略,则自动检测)

注: 提供至少一项 tokenMint, tokenName,或 tokenSymbol。该代币必须存在于您的投资组合中。

退货:

{
  "success": true,
  "signature": "2wE3..."
}

get_portfolio

获取钱包投资组合(代币、余额、NFT)。

参数:

  • walletAddress (string):可选-要查询的钱包(默认为您的钱包)

退货:

{
  "tokens": [...],
  "totalValue": 1234.56,
  "nfts": [...]
}

search_token

按名称、符号或造币厂地址搜索Solana代币。返回按市值排序的顶级结果。

参数:

  • query (string):令牌名称(例如“Solana”)、符号(例如“SOL”)或造币厂地址
  • limit (数字):返回的最大结果数(默认值:10,最大值:100)

退货:

{
  "success": true,
  "results": [
    {
      "mint": "So11111111111111111111111111111111111111112",
      "name": "Wrapped SOL",
      "symbol": "SOL",
      "decimals": 9,
      "price": "$86.46",
      "marketCap": "52474839784",
      "volume24h": "139815210",
      "holders": 2877594,
      "image": "https://..."
    }
  ],
  "count": 1
}

swap_token

通过MoonGate DEX集成(Jupiter)交换代币。支持按名称/符号或薄荷地址搜索。

参数:

  • inputMint (string):输入令牌造币厂地址(如果提供inputToken,则可选)
  • inputToken (string):输入代币名称/符号(例如“SOL”、“USDC”)-搜索薄荷
  • outputMint (string):输出令牌薄荷地址(如果提供outputToken,则可选)
  • outputToken (string):输出代币名称/符号(例如“SOL”、“USDC”)-搜索薄荷
  • inputAmount (number):要交换的输入令牌数量
  • slippagePercentage (数字):基点滑动公差(默认值:100=1%)
  • transactionSpeed (string):优先级-“慢”、“正常”或“快”(默认值:“正常”)

注: 为每个令牌提供造币厂地址或名称/符号。名称/符号搜索按市值返回最高结果。

退货:

{
  "success": true,
  "signature": "4xK2...",
  "transactionCount": 1,
  "inputToken": "USDC",
  "outputToken": "SOL",
  "inputAmount": 100
}

get_token_info

获取详细的代币信息,包括安全分析和ruggull风险指标。

参数:

  • tokenMint (string):令牌造币厂地址(如果提供了tokenName,则可选)
  • tokenName (string):要搜索的令牌名称或符号

退货:

{
  "token": {
    "mint": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
    "name": "Bonk",
    "symbol": "BONK",
    "decimals": 5,
    "supply": 87995151415980.58,
    "createdAt": 1670531612
  },
  "price": {
    "usd": 0.00000646,
    "marketCap": 568745265,
    "circulatingMarketCap": 531283669
  },
  "security": {
    "mintable": false,
    "freezable": false,
    "lockedLiquidityPercent": 75,
    "topHoldersPercent": 33.56,
    "devHoldersPercent": 0.000000166,
    "snipersPercent": 0
  },
  "market": {
    "liquidity": 178311,
    "holders": 987817,
    "buyCount24h": 5165,
    "sellCount24h": 5630,
    "buyerSentimentPercent": 47.85
  },
  "socialLinks": {
    "website": "https://www.bonkcoin.com",
    "twitter": "https://twitter.com/bonk_inu",
    "telegram": "https://t.me/Official_Bonk_Inu"
  },
  "riskAssessment": {
    "overallRisk": "LOW",
    "riskIndicators": ["No major red flags detected"],
    "safetyIndicators": [
      "Good liquidity ($178.3K)",
      "987,817 holders",
      "Good distribution (top holders: 33.6%)",
      "✓ Not mintable or freezable",
      "75% liquidity locked",
      "Has social media presence"
    ],
    "recommendation": "✓ Appears relatively safe, but always DYOR (Do Your Own Research)"
  }
}

风险指标:

  • 流动性: 低流动性(<10000美元)意味着高风险
  • 持有人分布: 持股比例>50%表示存在集中风险
  • 安全: 可铸造/可冻结代币可以被操纵
  • 锁定流动性: <50%锁定是有风险的
  • 年龄: 非常新的代币(<7天)风险更高
  • 社交存在: 没有可疑的社交链接
  • 情绪: 买家比例低(<30%)表明市场看跌

风险等级:

  • LOW:0-1个风险指标
  • MODERATE:2-4个风险指标
  • HIGH:5+风险指标

环境变量

变量 描述 默认值
MOONGATE_API_URL MoonGate API基础URL https://wallet.moongate.one
MOONGATE_CALLBACK_PORT OAuth回调端口 8787
MOONGATE_MCP_DEBUG 调试日志记录(详细) true (设置为 false 禁用)
MOONGATE_TOKEN 手动令牌(用于测试) -

发展

本地设置

git clone https://github.com/invictusdhahri/moongate-mcp-server.git
cd moongate-mcp-server
npm install
npm run build

测试

为了在没有OAuth流的情况下进行快速测试,请设置一个手动令牌:

export MOONGATE_TOKEN="your-jwt-token"
npm run dev

建筑

npm run build

构建的文件将位于 dist/.

身份验证流程

sequenceDiagram
    participant User
    participant MCP as MCP Server
    participant Browser
    participant MG as MoonGate API

    MCP->>MCP: Check ~/.moongate-mcp/session.json
    
    alt Session exists & valid
        MCP->>MG: GET /api2/auth (refresh if needed)
        MG-->>MCP: Fresh token
    else No session or expired
        MCP->>Browser: Open localhost:8787
        Browser->>Browser: User clicks Google/Apple
        Browser->>MG: OAuth verification
        MG-->>Browser: JWT token
        Browser->>MCP: Redirect with token
        MCP->>MCP: Save session.json
    end
    
    MCP-->>User: Ready for tool calls

安全

  • 会话存储:令牌存储在 ~/.moongate-mcp/session.json 随着 0o600 权限(仅限用户读/写)
  • 自动刷新:代币在到期后1小时内自动刷新
  • 无密码签名:根据MoonGate OAuth设计,所有签名操作都使用空密码
  • 本地OAuth:身份验证通过localhost回调进行,不公开凭据

路线图

  • [x] 第一阶段:核心工具(获取地址、签署消息/tx)
  • [x] 阶段2:OAuth浏览器流,发送令牌
  • [x] 第3阶段:投资组合和掉期工具
  • [x] 第四阶段:代币搜索和ruggull分析
  • [x] 第五阶段:npm发布为 moongate-mcp-server
  • []第6阶段:NFT操作(列表、转移、造币)
  • []第7阶段:令牌元数据更新
  • []第8阶段:多钱包支持

故障排除

“未通过身份验证”或“无效令牌”错误

您的令牌已过期(7天有效期)。买一个新鲜的:

  1. 首选 wallet.mooncote.one 并登录
  2. 打开DevTools→ 应用→ 本地存储→ https://wallet.moongate.one
  3. 复制 token 价值
  4. 更新 MOONGATE_TOKEN 在MCP配置中
  5. 重新启动克劳德桌面/您的MCP客户端

OAuth回调超时或“localhost:8787”无法加载

解决方案: 请改用手动令牌方法(请参阅上面的身份验证部分)。本地OAuth服务器需要端口8787可用,并且可能无法在沙盒环境中工作。

如果你需要OAuth:设置 MOONGATE_CALLBACK_PORT 连接到另一个端口,并确保其可访问。

调试日志

调试日志记录是 默认启用。要禁用它,请执行以下操作:

export MOONGATE_MCP_DEBUG=false

MCP检验员测试

MCP检查器提供了一个web UI来测试您的服务器:

npx @modelcontextprotocol/inspector node dist/cli.js

这将打开一个浏览器,您可以在其中:

  • 查看所有可用工具
  • 使用表单UI进行测试工具调用
  • 实时查看请求/响应日志
  • 无需Claude Desktop即可调试

贡献

欢迎投稿!请打开问题或PR。

许可证

麻省理工学院

链接


建于❤️ 索拉纳生态系统