Skip to main content
Glama
nirholas

pumpfun-claims-bot

by nirholas

PumpFun Claims Bot


需要交互式监控? telegram-bot 支持监控管理、群聊、REST API、SSE 流和 Webhook。本频道机器人仅用于简单的广播式频道。

功能特性

订阅源类型

订阅源

描述

开关

GitHub 社交费用申领

GitHub 开发者申领 PumpFun 社交费用 PDA 奖励

FEED_CLAIMS

代币毕业

代币从联合曲线毕业进入 PumpAMM

FEED_GRADUATIONS

申领智能

每张 GitHub 社交费用申领卡片包含:

功能

描述

🟢 可信度评分

确定性 0-100 评分(强/中/谨慎/高风险),综合所有信任信号,并附透明的 ±因子明细

📊 开发者记录

持久化的按开发者信誉——重复开发者的历史代币及其平均可信度,让屡次收费欺诈者即使新代币看起来干净也无处遁形

🚨 首次申领提醒

当 GitHub 用户首次申领时显示 🚨🚨🚨 首次申领 横幅

⚠️ 虚假申领检测

检测到调用 claim_social_fee_pda 指令但实际未支付任何费用的情况

📊 申领计数

跨重启持久化的顺序申领编号

💹 终身收益

从 PDA 累计申领的 SOL 总额

👤 GitHub 资料

用户名、简介、仓库数、关注者数、账号年龄、所在地

𝕏 社交链接

Twitter/X 资料及关注者数(来自 GitHub 资料)

🏅 影响者徽章

基于高关注者数的分级徽章(GitHub/X)

📈 代币情报

毕业/联合曲线状态、曲线进度、创建时长、回复数

🔗 代币社交链接

来自代币元数据的 Twitter、Telegram、网站链接

🏷️ 代币标志

NSFW、已封禁、返现状态指示

⚠️ 信任信号

新 GitHub 账号(< 30 天)、零仓库、虚假申领警告

🔗 交易链接

带联盟链接的 Axiom、GMGN、Padre 链接

️ 代币图片

代币图片或 GitHub 头像作为卡片图片

毕业卡片

丰富的毕业卡片包含创建者资料、顶级持有者分析、24 小时交易量、开发者钱包活动、池流动性及捆绑检测。

影响者等级系统

结合 GitHub 和 X/Twitter 关注者数据对申领者进行分级:

等级

徽章

X 关注者

GitHub 关注者

Mega

🔥🔥 超级影响者

≥ 100K

≥ 10K

影响者

🔥 影响者

≥ 10K

≥ 1K

值得关注

⭐ 值得关注

≥ 1K

≥ 100

满足任一阈值即可获得对应等级——例如某用户有 50K X 关注者和 50 GitHub 关注者,仍可被评为影响者。

可信度评分与开发者记录

每张申领卡片以确定性 0-100 可信度评分开头,综合机器人已收集的信任信号,加上申领开发者在过往代币中的持久化记录。

评分是确定且透明的——相同输入始终产生相同结果,无需模型调用,且每一分都归因于标题下方显示的具名因子:

等级

徽章

分数

强

🟢

75-100

中

🟡

55-74

谨慎

🟠

35-54

高风险

🔴

0-34

评分从中性50分开始,按加权因子调整:申领验证(+22,GitHub 所有者不匹配则 -20)、账号年龄(5 年以上 +14,低于 30 天则 -18)、公开仓库数、关注者数、加星的非 fork 仓库、仿冒者(-10/-16)、捆绑交易、持有者集中度、历史跑路记录及封禁记录。

开发者记录将一次性评分转化为长期记忆。每次评分都会记录到对应的申领 GitHub 用户 ID 并持久化保存,因此当该开发者下次发布代币时,卡片会显示其历史记录——让屡次收费欺诈者即使新代币看起来干净也无处遁形,同时为真正有实绩的构建者正名:

🟢 Credibility: 100/100 · Strong
   ↑ claim verified · GitHub 6y · 42 repos · repo 150★
📊 Dev track record: 3 prior tokens · avg 🔴 19/100 (High Risk)

逻辑位于 src/credibility.ts(纯函数 scoreCredibility)和 src/dev-reputation.ts(持久化存储),两者均有完整测试覆盖。

AI 驱动的申领摘要

首次申领会获得由 Groq(llama-3.3-70b-versatile)生成的一行 AI 点评:

  • 分析 30+ 信号:代币元数据、GitHub 资料、创建者历史、交易活动

  • 最长 120 字符——直接、有观点、面向交易者

  • 5 秒超时并优雅降级(失败时返回空字符串)

  • 经过 HTML 消毒处理,可安全用于 Telegram

示例:

"真实 GitHub 项目,开发者快速申领" · "热门仓库的 fork,请谨慎操作"

Related MCP server: Solana Token Launch Scanner

架构

Solana RPC (WebSocket + HTTP polling)
        │
        ▼
┌───────────────────┐
│  SocialFeeIndex   │──▶ Bootstraps ~148K SharingConfig → mint mappings
└────────┬──────────┘
         │
┌────────▼──────────┐
│   ClaimMonitor    │──▶ Decodes PumpFees program claim transactions
│   EventMonitor    │──▶ Decodes Pump program logs (graduations)
└────────┬──────────┘
         │ FeeClaimEvent / GraduationEvent
┌────────▼──────────┐
│ Enrichment Layer  │
│  ├─ GitHub API    │──▶ User profile, repos, followers
│  ├─ X/Twitter API │──▶ Follower counts, influencer tier
│  ├─ PumpFun API   │──▶ Token info, creator profile, holders, trades
│  ├─ ClaimTracker  │──▶ First-claim detection, persistent counts
│  └─ Fake Detect   │──▶ Instruction called but no payout (amountLamports=0)
└────────┬──────────┘
         │ ClaimFeedContext
┌────────▼──────────┐
│    Formatters     │──▶ Rich HTML cards with sections & emoji layout
└────────┬──────────┘
         │
┌────────▼──────────┐
│   grammY Bot      │──▶ Posts photo + caption to Telegram channel
│   (retry + rate   │    Falls back to text-only if photo fails
│    limiting)      │
└───────────────────┘

多 RPC 故障转移

RpcFallback 类管理多个 Solana RPC 端点并自动轮换:

  • 轮询轮换——任一端点连续 3 次失败后自动切换

  • 60 秒冷却——每个失败端点冷却后方可重试

  • 最早到期回退——若所有端点均在冷却中,选择最早到期的端点

  • 成功重置——单次成功调用即重置失败计数器

  • 通过 SOLANA_RPC_URLS(逗号分隔)配置

监控的程序

程序

ID

用途

PumpFees

pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ

费用分享、社交费用 PDA 申领

Pump

6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P

联合曲线(毕业)

PumpAMM

pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA

AMM(毕业池事件)

安装

npm(MCP 服务器——推荐用于 AI 助手)

使用 npx 即刻运行 MCP 服务器——无需克隆仓库:

npx pumpfun-claims-bot

或全局安装:

npm install -g pumpfun-claims-bot
pumpfun-claims-bot

添加到你的 MCP 客户端配置(Claude Desktop、Cursor、VS Code Copilot):

{
  "mcpServers": {
    "pumpfun": {
      "command": "npx",
      "args": ["pumpfun-claims-bot"]
    }
  }
}

npm 包: npm 上的 pumpfun-claims-bot

从源码安装(完整机器人 + Telegram 订阅源)

git clone https://github.com/nirholas/pumpfun-claims-bot.git
cd pumpfun-claims-bot && npm install

快速开始

1. 创建 Telegram 机器人

  1. 在 Telegram 上给 @BotFather 发消息

  2. /newbot → 按提示操作 → 复制机器人令牌

  3. 创建一个公开频道(例如 @pumpfunclaims)

  4. 将机器人添加为频道的管理员(必须拥有"发布消息"权限)

2. 配置环境变量

cp .env.example .env
# ── Required ──────────────────────────────────────────────
TELEGRAM_BOT_TOKEN=your-bot-token-from-botfather
CHANNEL_ID=@your_channel_name    # or numeric chat ID like -100xxx

# ── Solana RPC ────────────────────────────────────────────
SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=your-key
SOLANA_WS_URL=wss://mainnet.helius-rpc.com/?api-key=your-key

# Comma-separated fallback RPCs (rotates on 429/5xx/timeout)
SOLANA_RPC_URLS=https://mainnet.helius-rpc.com/?api-key=key1,https://your-other-rpc.com

# ── Feed Toggles (all default false except FEED_CLAIMS) ───
FEED_CLAIMS=true                 # GitHub social fee claims (default: true)
FEED_GRADUATIONS=false           # Token graduations to PumpAMM (default: false)
FEED_LAUNCHES=false              # New token launches (default: false)
FEED_WHALES=false                # Large buy/sell whale alerts (default: false)
FEED_FEE_DISTRIBUTIONS=false     # Creator fee distribution events (default: false)

# ── Claim Filter ──────────────────────────────────────────
REQUIRE_GITHUB=true              # Only post claims with GitHub social fee PDA (default: true)

# ── Enrichment APIs ───────────────────────────────────────
GITHUB_TOKEN=ghp_your_token      # Raises GitHub rate limit: 60 → 5000 req/hr
GROQ_API_KEY=gsk_your_key        # Groq API for AI one-liner summaries

# X/Twitter follower counts & influencer detection
# Get cookies from x.com DevTools → Application → Cookies
# X_AUTH_TOKEN=your_auth_token_cookie
# X_CT0_TOKEN=your_ct0_cookie

# ── Affiliate Ref Codes ───────────────────────────────────
# Appended to Axiom / GMGN / Padre trading links in cards
# AXIOM_REF=your_ref
# GMGN_REF=your_ref
# PADRE_REF=your_ref

# ── Tuning ────────────────────────────────────────────────
POLL_INTERVAL_SECONDS=30         # HTTP polling fallback interval (default: 30)
WHALE_THRESHOLD_SOL=10           # Minimum SOL for whale alerts (default: 10)
LOG_LEVEL=info                   # debug | info | warn | error (default: info)

# ── Health Check ──────────────────────────────────────────
# PORT=3000                      # Set automatically by Railway

环境变量参考

变量

必填

默认值

描述

TELEGRAM_BOT_TOKEN

✅

—

机器人令牌 — 给 @BotFather 发消息 → /newbot

CHANNEL_ID

✅

—

要发布到的频道(@channelname 或 -100xxx)— 通过 @userinfobot 获取数字 ID

SOLANA_RPC_URL

✅

https://api.mainnet-beta.solana.com

主要的 Solana HTTP RPC — Helius、QuickNode 或 Alchemy 提供免费套餐

SOLANA_WS_URL

—

由 SOLANA_RPC_URL 派生

Solana WebSocket URL — 与 SOLANA_RPC_URL 使用同一提供商,将 https:// 替换为 wss://

SOLANA_RPC_URLS

—

—

逗号分隔的备用 RPC URL — 在 429 / 5xx / 超时时自动轮换

FEED_CLAIMS

—

true

发布 GitHub 社交费用领取卡片

FEED_GRADUATIONS

—

false

发布代币毕业卡片

FEED_LAUNCHES

—

false

发布新代币上线卡片

FEED_WHALES

—

false

发布巨鲸买入/卖出提醒

FEED_FEE_DISTRIBUTIONS

—

false

发布创作者费用分配事件

REQUIRE_GITHUB

—

true

跳过没有 GitHub 社交费用 PDA 的领取

GITHUB_TOKEN

—

—

GitHub PAT — 在此创建(无需任何权限范围)— 将速率限制从 60 提升至 5000 次/小时

GROQ_API_KEY

—

—

用于 AI 一句话摘要的 Groq API 密钥 — 在 console.groq.com 获取免费密钥

X_AUTH_TOKEN

—

—

X/Twitter auth_token cookie — 打开 x.com,DevTools → Application → Cookies → 复制 auth_token

X_CT0_TOKEN

—

—

X/Twitter ct0 cookie(CSRF 令牌)— 位置同上,复制 ct0

AXIOM_REF

—

—

Axiom 交易链接的联盟推荐码

GMGN_REF

—

—

GMGN 交易链接的联盟推荐码

PADRE_REF

—

—

Padre 交易链接的联盟推荐码

POLL_INTERVAL_SECONDS

—

30

WebSocket 不可用时的 HTTP 轮询间隔

WHALE_THRESHOLD_SOL

—

10

触发巨鲸提醒的最小 SOL 交易金额

LOG_LEVEL

—

info

日志详细程度:debug | info | warn | error

PORT

—

3000

健康检查 HTTP 服务器端口 — 由 Railway 自动设置

MCP_ENABLED

—

false

启用 MCP(Model Context Protocol)服务器以支持 AI 助手集成

MCP_PORT

—

3001

MCP 服务器 HTTP 端口(Streamable HTTP 传输)

3. 运行

# Install dependencies
npm install

# Development (hot reload via tsx)
npm run dev

# Production
npm run build
npm start

4. 使用 Docker 部署

docker build -t pumpfun-channel-bot .
docker run -d --env-file .env pumpfun-channel-bot

5. 部署到 Railway

Deploy on Railway

Railway 可从 GitHub 自动部署,并为领取跟踪数据提供持久化存储卷。

# Install Railway CLI
npm install -g @railway/cli
railway login

# Create & link project
railway init
railway link

# Set environment variables
railway variables set TELEGRAM_BOT_TOKEN=your-token
railway variables set CHANNEL_ID=@your_channel_name
railway variables set SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=your-key
railway variables set SOLANA_WS_URL=wss://mainnet.helius-rpc.com/?api-key=your-key
railway variables set FEED_CLAIMS=true
railway variables set REQUIRE_GITHUB=true

# Create persistent volume for claim tracker data
railway volume create --mount /app/data

# Deploy
railway up

部署配置请参阅 railway.json:

{
  "$schema": "https://railway.app/railway.schema.json",
  "build": {
    "builder": "DOCKERFILE",
    "dockerfilePath": "Dockerfile"
  },
  "deploy": {
    "restartPolicyType": "ON_FAILURE",
    "restartPolicyMaxRetries": 10
  }
}

项目结构

pumpfun-claims-bot/
├── src/
│   ├── index.ts              # Entry point — wires monitors, enrichment, & Telegram posting
│   ├── config.ts             # Environment variable loading & validation
│   ├── mcp-server.ts         # MCP server — exposes tools via Streamable HTTP or stdio
│   ├── mcp-stdio.ts          # Standalone MCP entry point (stdio transport)
│   ├── claim-monitor.ts      # PumpFees program monitor (WebSocket + HTTP polling)
│   ├── claim-routing.ts      # Decides which claims are posted, skipped, or re-routed
│   ├── claim-tracker.ts      # First-claim detection + claim counter (persisted to disk)
│   ├── credibility.ts        # Deterministic 0-100 credibility scoring
│   ├── dev-reputation.ts     # Persistent per-developer track record store
│   ├── event-monitor.ts      # Pump program log decoder (graduations, launches)
│   ├── social-fee-index.ts   # SocialFeeIndex — maps SharingConfig PDAs → mints (~148K)
│   ├── formatters.ts         # Rich HTML card builders for Telegram
│   ├── pump-client.ts        # PumpFun HTTP API client (token info, creator profiles)
│   ├── github-client.ts      # GitHub API client (user profiles, rate-limited cache)
│   ├── x-client.ts           # X/Twitter profile fetcher + influencer tier logic
│   ├── groq-client.ts        # Groq AI one-liner summaries
│   ├── rpc-fallback.ts       # Multi-RPC failover with round-robin
│   ├── health.ts             # HTTP health check server
│   ├── types.ts              # Program IDs, discriminators, event types
│   └── logger.ts             # Leveled console logger
├── src/__tests__/            # Vitest suites (203 tests) + shared fixtures
├── packages/web/             # React dashboard, mock-data build (see Web Dashboard)
├── web/web/                  # React dashboard, live-SSE build (see Web Dashboard)
├── leaderboard-bot/          # Separate Telegram bot: GitHub dev earnings leaderboard
├── data/                     # Persisted state (gitignored, Railway volume mount)
│   └── github-first-claims.json
├── Dockerfile                # Multi-stage Docker build
├── railway.json              # Railway deployment config
├── package.json
└── tsconfig.json

工作原理

领取检测流水线

Transaction detected on PumpFees program
  │
  ▼
Identify instruction: claim_social_fee_pda?
  │
  ├─ YES ──▶ Parse platform (2 = GitHub) + user_id from Anchor args
  │           │
  │           ▼
  │        Check amountLamports from SocialFeePdaClaimed event
  │           │
  │           ├─ amountLamports > 0 ──▶ Real claim
  │           │   ├─ Check ClaimTracker: first time for this GitHub user?
  │           │   │   ├─ YES ──▶ 🚨 FIRST TIME CLAIM banner
  │           │   │   └─ NO  ──▶ Standard claim card
  │           │   └─ Enrich: GitHub API + PumpFun API + X profile
  │           │
  │           └─ amountLamports = 0 ──▶ ⚠️ FAKE CLAIM (instruction called, no payout)
  │
  └─ NO ───▶ Other claim type (creator fee, cashback, etc.)

SocialFeeIndex 引导

启动时,机器人从 PumpFees 程序获取所有 SharingConfig 账户,构建从社交费用 PDA 地址到代币铸币地址的反向映射。这样无需额外的 RPC 调用即可解析社交费用领取属于哪个代币。

  • 启动时加载约 148K 个映射

  • 增量更新 — 通过 WebSocket 订阅 CreateFeeSharingConfig 和 UpdateFeeShares 事件

  • 查找:socialFeeIndex.getMintForPda(pdaAddress) → 代币铸币地址

  • 一个 PDA → 多个铸币地址 — 处理在多个代币间重复使用 PDA 的诈骗者

虚假领取检测

有些用户调用 claim_social_fee_pda 指令,针对随机代币 PDA,而他们在这些 PDA 上并没有可领取的费用。机器人通过以下方式检测这些行为:

  1. 指令判别器与 claim_social_fee_pda 匹配

  2. 交易日志中不包含 SocialFeePdaClaimed 事件 — 或者事件显示 amountLamports = 0

  3. 仍然从指令参数(Anchor Borsh 格式)中解析 GitHub 用户 ID 和平台

虚假领取会附带 ⚠️ FAKE CLAIM 警告和 🚩 Fake claim — no fees paid out 信任信号发布。

首次领取跟踪

ClaimTracker 维护一个持久化的 GitHub 用户 ID 集合,记录已成功领取的用户:

  • 内存集合,用于处理过程中的快速查找

  • 防抖磁盘持久化(5 秒延迟)到 data/github-first-claims.json

  • 检查/标记分离模式:hasGithubUserClaimed() 无副作用地检查,markGithubUserClaimed() 仅在 Telegram 发布成功后调用

  • 领取计数器:incrementGithubClaimCount() 返回每个用户的顺序领取编号

  • 虚假领取不会设置首次领取状态

三层首次领取验证

  1. 本地去重 — 已发布则跳过(通过持久化 JSON 在重启后仍然有效)

  2. 链上验证 — lifetimeClaimedLamports == amountLamports 确认这确实是链上的首次领取

  3. 优雅回退 — 验证失败时跳过首次领取标记(防止重新部署后出现误报)

示例领取卡片

🚨🚨🚨 FIRST TIME CLAIM 🚨🚨🚨

🐙 $PUMP — PumpCoin  💹 $45K
  ↳ GitHub dev claimed PumpFun social fees

📊 Claim #1 · 0.1043 SOL lifetime ($15.65)

🏦 0.1043 SOL ($15.65)
  ↳ 8mNp...4rWz

👤 nirholas (Nicholas)
  ↳ 📦 45 · 👁 200 · 📅 5y ago
  TypeScript SDK builder
𝕏 nichxbt · 1.2K

📈 Bonding curve (72%) · Created 3h ago · 💬 12
𝕏 @pump_coin · 💬 TG · 🌐 pumpcoin.io

⚠️ GitHub account created 15d ago

CA: 7xKXt...p3Bz
Axiom · GMGN · Padre

🔍 TX

环境要求

  • Node.js >= 20.0.0

  • Telegram 机器人令牌(通过 @BotFather 获取)

  • Telegram 频道,且机器人已添加为管理员

  • Solana RPC 端点 — 建议使用专用 RPC(Helius、QuickNode、Triton)。公共主网可用,但可能受到速率限制。

  • GitHub 令牌(可选)— 将 API 速率限制从 60 提升至 5,000 次/小时

故障排查

机器人不发布消息

  1. 检查机器人权限 — 机器人必须是频道管理员,且具有"发布消息"权限

  2. 验证 CHANNEL_ID — 公共频道使用 @channel_name,私有频道使用数字 ID(例如 -100xxx)。要查找数字 ID,请将频道消息转发给 @userinfobot

  3. Telegram 403 错误 — 表示机器人不是频道的成员/管理员。通过频道设置 → 管理员 → 添加管理员来添加

  4. 检查日志 — 设置 LOG_LEVEL=debug 以查看机器人处理的所有事件

速率限制

Telegram 将机器人向频道发送消息限制为每秒约 30 条。grammY 框架会自动处理速率限制:

  • 消息可能会延迟,但不会被丢弃

  • 机器人包含一个遵循 retry_after 头的重试辅助工具

  • 对于非常高的活动量,增加 POLL_INTERVAL_SECONDS 以减少事件量

RPC 连接问题

  • 公共 RPC 端点有速率限制 — 生产环境请使用专用 RPC

  • 设置 SOLANA_RPC_URLS 为多个端点以实现自动故障转移

  • 如果 WebSocket 断开,机器人会以 POLL_INTERVAL_SECONDS 的间隔回退到 HTTP 轮询

  • RpcFallback 类在配置的端点之间提供轮询调度

  • 设置 LOG_LEVEL=debug 以查看连接状态

缺少领取

  • 仅 GitHub 领取? — 设置 REQUIRE_GITHUB=true 以仅发布 GitHub 社交费用领取

  • 信息流已禁用? — 确认已设置 FEED_CLAIMS=true

  • SocialFeeIndex 慢? — 初始引导会获取约 148K 个账户。启动时需要 30-60 秒。检查日志中的 SocialFeeIndex: loaded N mappings

  • 受到速率限制? — GitHub API 未认证时允许 60 次/小时。设置 GITHUB_TOKEN 可获得 5,000 次/小时

流水线统计

机器人每 60 秒记录一次流水线计数器:

Pipeline: 15 total → 8 social → 3 first / 5 repeat → 8 posted (skip: 7 cashback)
  • total:收到的所有领取事件

  • social:GitHub 社交费用 PDA 领取

  • first/repeat:首次领取者与再次领取者

  • posted:成功发布到 Telegram

  • skip cashback:现金返还领取(用户退款,非创作者活动)

Web 仪表盘

仓库中包含两个 React 前端,它们不是同一个应用:

目录

用途

构建

web/web/

完整仪表盘:SSE 事件流、关注列表、SEO 资源(robots.txt、sitemap.xml、llms.txt)。拥有独立的锁文件,因此 npm ci 可直接使用。

cd web/web && npm ci && npm run build

packages/web/

同一 UI 的早期精简副本。其 Dashboard 渲染生成的示例事件,无 SSE 客户端。

cd packages/web && npm ci && npm run build

以下列出的功能描述的是 web/web/。两个目录目前均可正常构建;将它们合并为一个仍是待办工作。

深链接(/dashboard、/docs 等)是客户端路由,因此任何静态主机都必须将未知路径重写到 index.html。每个应用现在都附带一个包含该重写规则的 vercel.json;在非 Vercel 主机上,请配置等效的 SPA 回退。

页面

页面

路由

描述

首页

/

带项目概览的落地页

仪表盘

/dashboard

带 SSE 流式传输的实时事件源

创建代币

/create

代币创建界面

文档

/docs

API 文档与 Telegram 命令

包

/packages

包浏览器

仪表盘功能

  • 服务器发送事件(SSE) — 通过 /api/v1/claims/stream 实时流式传输,支持自动重连(3 秒延迟)

  • 事件过滤器 — 全部、启动、巨鲸、毕业、领取、分发

  • 实时统计栏 — 每种事件类型的计数器

  • 关注列表 — 添加/移除要监控的钱包地址(GET/POST/DELETE /api/v1/watches)

  • 富事件卡片 — 代币启动、巨鲸交易、毕业、费用领取,附完整上下文

  • 连接状态 — 带错误消息的可视化指示器

  • 模拟数据回退 — 当 SSE 不可用时提供模拟数据源

技术栈

层

技术

框架

React 18

路由

React Router

构建

Vite 5

样式

Tailwind CSS

语言

TypeScript

MCP 服务器

该机器人内置了一个 Model Context Protocol(MCP)服务器,允许 AI 助手(Claude、Copilot、Cursor 等)以对话方式查询 PumpFun 链上数据。

MCP 工具

工具

描述

get_token_info

代币元数据、市值、联合曲线进度、标志

get_token_holders

前十大持有者及集中度指标

get_token_trades

近期交易活动 — 成交量、买入/卖出次数

get_pool_liquidity

已毕业代币的 PumpSwap AMM 池流动性

get_bundle_info

捆绑检测(诈骗指标)

get_creator_profile

创建者发布历史、诈骗评估、近期代币

get_github_user

按用户名或数字 ID 查询 GitHub 个人资料

get_claim_history

GitHub 用户的领取状态 — 次数、已领取的铸币

get_sol_price

当前 SOL/USD 价格

用法:Stdio 传输(Claude Desktop / Cursor / VS Code)

添加到您的 MCP 客户端配置(例如 claude_desktop_config.json):

{
  "mcpServers": {
    "pumpfun": {
      "command": "npx",
      "args": ["pumpfun-claims-bot"]
    }
  }
}

或从源码运行:

# Development (tsx)
npm run mcp:dev

# Production (compiled)
npm run build && npm run mcp

用法:可流式 HTTP 传输(嵌入式)

通过设置 MCP_ENABLED=true 与主机器人一起运行:

MCP_ENABLED=true MCP_PORT=3001 npm run dev

MCP 端点在配置的端口上以 POST /mcp 提供。客户端使用可流式 HTTP 传输进行连接。

示例查询

连接后,向您的 AI 助手提问:

  • "查询铸币地址 7xKXt...p3Bz 的代币信息"

  • "GitHub 用户 12345 是否领取过 PumpFun 费用?"

  • "这个代币的前十大持有者是谁?"

  • "检查这个代币的发布是否被捆绑"

  • "当前 SOL 价格是多少?"

健康检查 API

该机器人暴露了一个 HTTP 健康检查服务器,用于 Railway / Docker 探针。

端点

方法

描述

/health

GET

健康状态,含运行时间和统计信息

/

GET

/health 的别名

响应:

{
  "status": "ok",
  "uptime": "12345s",
  "uptimeMs": 12345000
}
  • 返回 200 表示 ok,503 表示 degraded

  • 通过回调注入动态统计信息(流水线计数器、连接状态)

  • 端口可通过 PORT 或 HEALTH_PORT 环境变量配置(默认:3000)

测试

项目使用 Vitest:11 个测试套件共 203 个测试,npm test 全部通过。

# Run all tests
npm test

# Watch mode (re-runs on file changes)
npm run test:watch

测试套件

每个套件都位于 src/__tests__/ 中(外加 fixtures.ts,共享示例数据)。

套件

文件

覆盖范围

领取追踪器

claim-tracker.test.ts

首次领取检测、持久化、计数器、终身总计

领取路由

claim-routing.test.ts

哪些领取被发布、跳过或路由到哪个数据源

可信度

credibility.test.ts

确定性 0-100 评分、各因素归因、等级边界

开发者声誉

dev-reputation.test.ts

每位开发者的持久化跟踪记录和平均值

格式化器

formatters.test.ts

HTML 卡片生成、转义、空值处理、边界情况

GitHub 客户端

github-client.test.ts

URL 解析、API 响应处理、缓存行为

Groq 客户端

groq-client.test.ts

AI 摘要生成、API 密钥处理、HTML 安全性

Pump 客户端

pump-client.test.ts

代币、持有者、交易和创建者 API 响应处理

RPC 回退

rpc-fallback.test.ts

轮询轮转、冷却时间、可重试错误处理

X 客户端

x-client.test.ts

影响者等级分类、关注者格式化

E2E 流水线

e2e.test.ts

端到端领取追踪、格式化、GitHub 数据源

本地开发

# Install dependencies
npm install

# Run with hot reload (tsx)
npm run dev

# Type-check without emitting
npm run typecheck

设置 LOG_LEVEL=debug — 所有事件都会记录到标准输出,无论是否发布到 Telegram。

技术栈

组件

技术

运行时

Node.js >= 20 (ESM)

语言

TypeScript 5.7(严格模式)

区块链

通过 @solana/web3.js 的 Solana

Telegram

grammY 框架

AI

Groq API (llama-3.3-70b-versatile)

前端

React 18 + Vite 5 + Tailwind CSS

测试

Vitest

容器

Docker(多阶段 Alpine,非 root)

MCP

@modelcontextprotocol/sdk(可流式 HTTP + stdio)

托管

Railway(从 GitHub 自动部署)

依赖

6 个生产依赖、4 个开发依赖 — 刻意保持精简

贡献

欢迎贡献!请参阅 CONTRIBUTING.md 了解指南。

  1. Fork 仓库

  2. 创建功能分支(git checkout -b feat/my-feature)

  3. 运行测试(npm test)和类型检查(npm run typecheck)

  4. 提交 Pull Request

安全

发现漏洞?请负责任地报告 — 请参阅 SECURITY.md。

许可证

保留所有权利。请参阅 LICENSE。

文档

完整文档站点:https://nirholas.github.io/pumpfun-claims-bot/

  • 入门指南 涵盖安装和首次运行。

  • 示例 提供可直接复制粘贴的代码片段。

Available Tools

9 tools
get_bundle_infoB

Detect if a token launch was bundled (scam indicator)

NameRequiredDescriptionDefault
mintYesToken mint address

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only states the tool's purpose but does not disclose what the tool returns (e.g., a boolean, a score, details), whether it makes external calls, or any side effects. For a detection tool, the output format and interpretation are critical, and this is not addressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the purpose. It is efficient and contains no fluff. However, it could be slightly more structured by including a note about the output or usage, but for its length, it is well-written.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a detection tool with a single parameter and no output schema), the description is incomplete. It does not explain what the tool returns, how to interpret the result, or any limitations. The agent would need to guess the output format, which is a significant gap for a tool that provides a scam indicator.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% for the single parameter 'mint', which is described as 'Token mint address'. The description adds no additional meaning beyond the schema, but since the schema fully covers the parameter, a baseline of 3 is appropriate. The description does not clarify the format or any constraints beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: detecting if a token launch was bundled, which is a scam indicator. It uses a specific verb ('Detect') and resource ('token launch'), and it distinguishes itself from sibling tools like get_token_info or get_token_holders by focusing on the bundling scam aspect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for scam detection but does not explicitly state when to use this tool versus alternatives. It doesn't mention when not to use it or provide context on how it fits with other token analysis tools. The purpose is clear enough that an agent could infer usage, but explicit guidance is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_claim_historyA

Check claim history for a GitHub user — whether they have claimed, claim count, and which token mints they claimed from

NameRequiredDescriptionDefault
githubUserIdYesGitHub numeric user ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It clearly indicates this is a read-only operation ('Check claim history') and explains what information is returned (claim status, count, and token mints). However, it doesn't disclose any other behavioral traits like whether it requires authentication, rate limits, or any side effects, but for a simple read tool, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that is front-loaded with the purpose, then details what is checked. It is concise without unnecessary words, but it could be slightly more structured (e.g., separating purpose from details), yet it is efficient and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one parameter and no output schema, the description is fairly complete for a simple query tool. It tells the agent what to expect (claim status, count, and token mints). However, it lacks information on edge cases, such as what happens if the user hasn't claimed anything or if the user ID is invalid, which would be helpful but not critical given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (only one parameter, githubUserId, which is described as 'GitHub numeric user ID'). The description adds context by explaining what the tool does with that user ID (checks their claim history), which is helpful. However, since the schema already fully documents the parameter, the baseline is 3, and the description doesn't add much beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('Check') and specific resource ('claim history'), and distinguishes the tool from siblings by stating it checks 'whether they have claimed, claim count, and which token mints they claimed from'. This is specific and unambiguous, differentiating it from other get_* tools that focus on tokens or pools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (when you need to check a GitHub user's claim history), but it does not provide explicit guidance on when not to use it or alternatives. Unlike the high-scoring example, it doesn't name alternative tools or exclude scenarios, so it's adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_creator_profileA

Fetch PumpFun creator profile — username, launch count, scam estimate, recent coins

NameRequiredDescriptionDefault
walletYesCreator wallet address

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. The use of 'Fetch' implies a read-only operation, but it does not explicitly state that the tool does not modify data or mention any potential side effects, rate limits, or authentication requirements. It does, however, add context by listing the returned fields, which is helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that starts with the verb and resource, then lists the return fields. No unnecessary words or redundancy, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema. The description adequately explains what the tool returns (username, launch count, scam estimate, recent coins), which is sufficient for an agent to understand the expected result. Complexity is low, and the description covers the key aspects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% since the wallet parameter has a clear description ('Creator wallet address'). The tool description does not add any additional meaning beyond the schema; it only lists the fields returned, not further elaboration on the parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a PumpFun creator profile and lists specific return fields (username, launch count, scam estimate, recent coins). This is a specific verb+resource that distinguishes it from sibling tools like get_token_info or get_github_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving creator profiles but does not explicitly state when to use it versus alternatives or any exclusions. It lacks guidance such as 'use when you need creator details' or when not to use it. The intent is clear from the resource type but not explicitly articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_github_userB

Fetch GitHub user profile by username or numeric ID — repos, followers, bio, account age

NameRequiredDescriptionDefault
userIdNoGitHub numeric user ID
usernameNoGitHub username (login)

TDQS

B3.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations provided, and the description does not disclose any behavioral traits such as read-only nature, side effects, rate limits, or required permissions. The tool appears to be a simple fetch, but without explicit disclosure, the agent cannot assess side effects or constraints. This fails to carry the behavioral transparency burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that packs in the essential information: what it does, the input method, and the output scope. No unnecessary words or redundancy. It is well-structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides a partial view of the output (repos, followers, bio, account age) but does not mention error handling, return format, or any limitations. Since there is no output schema, the description should compensate more fully. However, given the simplicity of the tool, a score of 3 is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides clear descriptions for each parameter ('GitHub numeric user ID' and 'GitHub username (login)'). The tool description adds meaningful clarification that either parameter can be used, reinforcing the intended usage. This goes beyond the schema's individual field descriptions, earning a high score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Fetch GitHub user profile' and specifies the input method ('by username or numeric ID') and the key data returned ('repos, followers, bio, account age'). This is a specific verb+resource statement that distinguishes it from other tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given on when to use this tool versus alternatives. While the sibling tools are clearly different (e.g., token info, pool liquidity), the description does not state conditions, exclusions, or preferences. It only describes the basic function, leaving the agent to infer usage from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pool_liquidityA

Fetch PumpSwap AMM pool liquidity for a graduated token

NameRequiredDescriptionDefault
mintYesToken mint address
usdMarketCapNoCurrent USD market cap (for context)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the burden of behavioral disclosure. It states it fetches data, implying a read operation, but does not elaborate on whether the pool exists, what happens if the token is not graduated, or any specific data returned. It adds 'for a graduated token' which is useful, but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the main purpose. No wasted words. It is appropriately sized and conveys the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a simple purpose and full schema coverage, the description is adequate but could mention what data is returned (e.g., liquidity amounts, reserve values) even without an output schema. It lacks details on error cases or prerequisites, but is sufficient for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters have descriptions. The description does not add additional meaning beyond the schema, but the schema already provides adequate guidance. Baseline of 3 is appropriate since no extra context is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetch') and the specific resource ('PumpSwap AMM pool liquidity') qualified by 'for a graduated token'. It distinguishes the tool from siblings that fetch token info, holders, trades, etc., by focusing on liquidity of an AMM pool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage in the context of graduated tokens, which helps the agent understand when to use it (post-graduation). However, it does not explicitly mention when not to use it or alternatives, though siblings are available and the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sol_priceA

Fetch current SOL/USD price

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read-only operation ('Fetch') but does not mention any behavioral details such as return format, potential delays, rate limits, or whether it requires authentication. For a simple read tool this is acceptable but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, highly concise with zero filler. It is front-loaded with the key verb and resource. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (no parameters, no nested objects, no output schema), the description is largely sufficient. However, it does not specify the exact return value (e.g., numeric price, string representation, or whether it includes historical data), which could leave slight ambiguity. Still, for a straightforward price getter, it is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema coverage is trivially 100%. Per rubric, 0 parameters yields a baseline score of 4. The description adds no parameter details, but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch current SOL/USD price' with a specific verb ('Fetch') and resource ('SOL/USD price'), distinguishing it from sibling tools like get_token_info or get_pool_liquidity. The purpose is unambiguous and directly maps to the tool's name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context for when to use this tool is obvious: whenever the user needs the current SOL/USD price. Since the tool has no parameters and a unique niche among siblings, no exclusions or alternatives are necessary. It is implicitly clear, though not explicitly expressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_holdersA

Fetch top holders for a PumpFun token including concentration metrics

NameRequiredDescriptionDefault
mintYesToken mint address

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. The verb 'Fetch' implies a read-only operation, and it adds that concentration metrics are included, but it does not disclose any other behaviors such as rate limits, data volume, or potential errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action, and contains no unnecessary words. It is perfectly concise for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one parameter and no output schema. The description provides a sufficient overview of the output (top holders with concentration metrics), though it could specify more details like the number of holders or format of metrics, but this is adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes the 'mint' parameter with a sufficient description ('Token mint address'), and the tool description does not add any extra meaning beyond what the schema provides. With 100% schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches top holders for a PumpFun token and includes concentration metrics, which distinguishes it from sibling tools like get_token_info or get_token_trades.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context that this is for top holder concentration analysis, but it does not explicitly mention alternatives or when not to use it. However, the purpose is clear enough that an agent would know when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_infoA

Fetch PumpFun token metadata, market cap, bonding curve progress, and flags

NameRequiredDescriptionDefault
mintYesToken mint address

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It clearly indicates a fetch/read operation and lists the returned data categories, but does not disclose potential behaviors such as whether the token must exist, how invalid addresses are handled, or whether data is cached. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence that lists the resource and returned data categories. There is no filler, repetition, or unnecessary detail, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter metadata-fetch tool with no output schema, the description sufficiently covers what the tool returns. It could mention that the input must be a PumpFun token and could clarify what 'flags' means, but the overall context is adequate for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% because the only parameter 'mint' is described as 'Token mint address'. The description adds no additional parameter semantics beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch') and identifies the exact resource (PumpFun token metadata) plus the specific data categories returned (market cap, bonding curve progress, flags). This clearly differentiates from sibling tools like get_token_holders, get_token_trades, and get_pool_liquidity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need token metadata, market cap, bonding curve progress, or flags. However, it does not explicitly state when not to use it or point to alternative sibling tools for different data needs, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_tradesA

Fetch recent trade activity for a PumpFun token (volume, buy/sell counts)

NameRequiredDescriptionDefault
mintYesToken mint address

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions 'recent' trade activity, but does not define the time window (e.g., last 24h, last hour, etc.) or any behavior like pagination, rate limits, or whether this is a read-only operation. It does not disclose how the counts are aggregated (e.g., on-chain vs. API-source) or whether it includes wash trading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the main purpose, and every word adds value. No unnecessary details. Perfectly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no nested objects, no output schema), so the bare description may be sufficient for an agent to know what it returns (volume, buy/sell counts). However, without annotations, more context on the 'recent' window or return format would increase completeness. Still, given its simplicity, it doesn't require extensive documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – the only parameter 'mint' is described as 'Token mint address', which is sufficient. The description adds context that the param is for a PumpFun token, but since the schema already covers the parameter adequately, the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch') and a specific resource ('recent trade activity for a PumpFun token') and mentions the key outputs (volume, buy/sell counts). It clearly distinguishes from siblings like get_token_info or get_token_holders by focusing strictly on trade activity (volume, buy/sell counts).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for trade monitoring, but it doesn't explicitly state when to use it vs alternatives (e.g., when tracking volume changes vs. holding distribution). No exclusions or alternatives are named, but in the context of sibling tools like get_token_holders or get_pool_liquidity, the purpose is clear enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv1.0.4
    • First observedget_bundle_info
    • First observedget_claim_history
    • First observedget_creator_profile
    • First observedget_github_user
    • First observedget_pool_liquidity
    • First observedget_sol_price
    • First observedget_token_holders
    • First observedget_token_info
    • First observedget_token_trades

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct data resource: token info, holders, trades, liquidity, bundle status, creator profile, GitHub user, claim history, and SOL price. There is no meaningful overlap or ambiguity between tool purposes.

Naming Consistency5/5

All tools follow a consistent get_<noun> pattern with snake_case, making the read-only nature and target resource immediately clear. No mixed conventions or vague verb variations exist.

Tool Count5/5

Nine tools is a well-scoped size for a claims-verification bot. Each tool covers a distinct piece of the investigation workflow without unnecessary redundancy or bloat.

Completeness4/5

The toolkit covers token intelligence, holder analysis, liquidity, scam signals, creator background, GitHub identity, claim history, and SOL pricing—strong coverage for pre-claim due diligence. However, there is no active claim or eligibility-check action, which leaves a minor gap if the bot is expected to execute claims directly.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Scans new Solana token launches from pump.fun, Raydium, PumpSwap, and Orca with liquidity and holder data. Pay-per-call via x402 micropayments.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Rug pull risk scores and on-chain forensics for memecoins on Solana, Ethereum, Base and Robinhood Chain - launch-bundle detection, funding-origin tracing, deployer history, insider networks and whale flow. 15 read-only tools.
    15
    32 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables agents to query real-time labelled pump.fun intelligence—launch risk cards, creator reputation, rug/graduation flags, wallet profiles, and market regime—with paid endpoints settled per request via x402 USDC on Solana and free sample/regime tools.
    27
    1
    MIT