pumpfun-claims-bot
PumpFun Claims Bot
インタラクティブな監視をお探しですか? telegram-bot は、ウォッチ管理、グループチャット、REST API、SSE ストリーミング、Webhook をサポートしています。こちらは配信専用のシンプルなチャンネルには、この channel-bot を使ってください。
機能
フィードタイプ
フィード | 説明 | トグル |
GitHub ソーシャルフィークレーム | PumpFun のソーシャルフィー PDA 報酬をクレームする GitHub 開発者 |
|
トークンの卒業 | ボンディングカーブから PumpAMM へ卒業するトークン |
|
クレームのインテリジェンス
GitHub ソーシャルフィークレームカードには、次の情報が含まれます。
機能 | 説明 |
🟢 信頼性スコア | すべてのトラストシグナルから総合した決定論的な 0〜100 の判定(Strong/Moderate/Caution/High Risk)。透明な ±要因の内訳付き |
📊 開発者の実績 | 開発者ごとに永続化されるレピュテーション。常連開発者の過去のトークンとその平均信頼度を表示。最新のコインがきれいでも、常習のフィーファーマーを一目で見抜けます |
🚨 初回クレームアラート | GitHub ユーザーが史上初めてクレームした場合に |
⚠️ 偽クレーム検出 |
|
📊 クレームカウンター | 再起動をまたいで永続的に記録される連続クレーム番号 |
💹 累計 SOL | PDA からこれまでに取得された総 SOL 量 |
👤 GitHub プロフィール | ユーザー名、bio、リポジトリ、フォロワー数、アカウント年齢、場所、ブログ |
𝕏 ソーシャルリンク | Twitter/X のプロフィールとフォロワー数(GitHub プロフィールから取得) |
🏅 インフルエンサーバッジ | 高フォロワーの GitHub/X アカウント向けティア別バッジ |
📈 トークン情報 | 卒業済み/ボンディングカーブの状態、カーブ進捗率、作成時からの経過期間、リプライ数 |
🔗 トークン SNS | トークンメタデータから取得した Twitter、Telegram、ウェブサイトへのリンク |
🏷️ トークンフラグ | NSFW、禁止、キャッシュバックステータス表示 |
⚠️ トラストシグナル | 新しい GitHub アカウント(30 日未満)、リポジトリ 0 個、偽クレームなどの警告 |
🔗 取引リンク | Axiom、GMGN、Padre へのアフィリエイトリンク |
️ トークン画像 | トークン画像または GitHub アバターをフォトカードで表示 |
卒業カード
リッチな卒業カードには、作成者プロフィール、トップホルダー情報、24 時間取引量、開発者のウォレット情報、プール流動性、バンドル検出が含まれます。
インフルエンサーティアシステム
GitHub と X/Twitter のフォロワー情報を組み合わせ、クレーマーを分類します。
ティア | バッジ | X フォロワー | GitHub フォロワー |
Mega | 🔥🔥 MEGA INFLUENCER | ≥ 100K | ≥ 10K |
Influencer | 🔥 Influencer | ≥ 10K | ≥ 1K |
Notable | ⭐ Notable | ≥ 1K | ≥ 100 |
どちらかのしきい値を満たせばティアが適用されます — X フォロワー 50K・GitHub フォロワー 50 でも、まだ Influencer に該当します。
信頼性スコアと開発者実績
すべてのクレームカードは、あらかじめボットが収集するトラストシグナルを合成した決定固の 0〜100 信頼性判定と、クレームした開発者の診断ティブ実績(過去のトークンなど)を先頭に表示します。
このスコアは 決定論的で透明性があります。同じ入力であれば常に同じ結果を出し、モデル呼び出しを行って**である、ポイントのすべては見出しの下に表示される明示された要因に紐づきます。
ティア | バッジ | スコア |
Strong | 🟢 | 75-100 |
Moderate | 🟡 | 55-74 |
Caution | 🟠 | 35-54 |
High Risk | 🔴 | 0-34 |
スコアリングは中立の 50 から始まり、重み付けされた要因で調整されます:クレーム検証(+22、または GitHub オーナー不一致の場合は -20)、アカウント年齢(5 年以上は +14、30 日未満は -18)、公開リポジトリ、フォロワー、スター付き non-fork リポジトリ、コピーキャット(-10 / -16)、バンドル、ホルダー集中、過去のラグプル、BAN が評価されます。
開発者の実績記録は、一時的なスコアを記憶に変えます。すべてのスコアは、クレームした 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) が生成した 1 行形式の AI 見解が提供されます。
トークンメタデータ、GitHub プロフィール、Creator の履歴、トレード動向など、30 以上のシグナルを分析
最大文字数 120。直接的、明断で、トレーダー向け
5 秒のタイムアウトと優雅なフォールバック(失敗時は空文字列)
Telegram でも安全な HTML サニタイズ済みの出力
例:
"本物の GitHub プロジェクト、開発者は速やかに処理した" · "人気レポのフォーク、注意して進める"
Related MCP server: NoesisAPI
アーキテクチャ
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 秒クールダウン — 失敗したエンドポイントは待振り 60 秒間休止します
最早期限フォールバック — すべてのエンドポイントがクールダウンの場合、最も近い期限が切れそうなものを選択
成功時のリセット — 1 回成功すると失敗カウンタがリセット
SOLANA_RPC_URLS(カンマ区切り)で設定
検知プログラム
プログラム | ID | 目的 |
PumpFees |
| フィー分散、ソーシャルフィー PDA クレーム |
Pump |
| ボンディングカーブ(卒業) |
ھپAMPump` |
| 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 パッケージ: pumpfun-claims-bot on npm
ソースから(フルボット + Telegram フィード)
git clone https://github.com/nirholas/pumpfun-claims-bot.git
cd pumpfun-claims-bot && npm installクイックスタート
1. Telegram ボットを作成
Telegram で @BotFather にメッセージを送信
/newbot→ 指示に従う → ボットトークンをコピー公開チャンネルを作成(例:
@pumpfunclaims)ボットをチャンネルの管理者に追加("メッセージ投稿" 権限が必須)
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環境変数リファレンス
変数 | 必須 | デフォルト | 説明 |
| ✅ | — | ボットトークン — @BotFather にメッセージ → |
| ✅ | — | 投稿先チャンネル( |
| ✅ |
| |
| — |
| Solana WebSocket URL — |
| — | — | カンマ区切りのフォールバックRPC URL — 429 / 5xx / タイムアウト時に自動ローテーション |
| — |
| GitHubソーシャルフィー請求カードを投稿 |
| — |
| トークン卒業カードを投稿 |
| — |
| 新規トークンローンチカードを投稿 |
| — |
| クジラの買い/売りアラートを投稿 |
| — |
| クリエイター手数料分配イベントを投稿 |
| — |
| GitHubソーシャルフィーPDAがない請求をスキップ |
| — | — | GitHub PAT — こちらで作成(スコープ不要)— レート制限を60 → 5000 req/hr に引き上げ |
| — | — | AIワンライナー要約用のGroq APIキー — console.groq.com で無料キーを取得 |
| — | — | X/Twitter の |
| — | — | X/Twitter の |
| — | — | Axiom 取引リンク用のアフィリエイト参照コード |
| — | — | GMGN 取引リンク用のアフィリエイト参照コード |
| — | — | Padre 取引リンク用のアフィリエイト参照コード |
| — |
| WebSocketが利用できない場合のHTTPポーリング間隔 |
| — |
| クジラアラートをトリガーする最小SOL取引サイズ |
| — |
| ログの詳細度: |
| — |
| ヘルスチェックHTTPサーバーポート — Railway が自動設定 |
| — |
| AIアシスタント統合用のMCP(Model Context Protocol)サーバーを有効化 |
| — |
| MCPサーバーHTTPポート(Streamable HTTP トランスポート) |
3. 実行
# Install dependencies
npm install
# Development (hot reload via tsx)
npm run dev
# Production
npm run build
npm start4. Dockerでデプロイ
docker build -t pumpfun-channel-bot .
docker run -d --env-file .env pumpfun-channel-bot5. 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のマッピングを読み込み
増分更新 —
CreateFeeSharingConfigとUpdateFeeSharesイベントのWebSocketサブスクリプションによるルックアップ:
socialFeeIndex.getMintForPda(pdaAddress)→ トークンミント1つのPDA → 複数のミント — 複数のトークンにわたってPDAを再利用する詐欺師に対応
偽の請求検出
一部のユーザーは、徴収する手数料がないランダムなトークンPDAを対象に claim_social_fee_pda 命令を呼び出します。ボットは以下をチェックしてこれらを検出します:
命令のディスクリミネータが
claim_social_fee_pdaと一致するトランザクションログに
SocialFeePdaClaimedイベントが含まれない — またはイベントがamountLamports = 0を示すGitHubユーザーIDとプラットフォームは命令引数(Anchor Borsh形式)から引き続き解析される
偽の請求は ⚠️ FAKE CLAIM 警告と 🚩 Fake claim — no fees paid out トラストシグナル付きで投稿されます。
初回請求トラッキング
ClaimTracker は正常に請求したGitHubユーザーIDの永続セットを維持します:
インメモリセット — 処理中の高速ルックアップ用
デバウンス付きディスク永続化(5秒遅延)—
data/github-first-claims.jsonへチェック/マーク分割パターン:
hasGithubUserClaimed()は副作用なしでチェック、markGithubUserClaimed()はTelegram投稿成功後にのみ呼び出し請求カウンター:
incrementGithubClaimCount()はユーザーごとの連番請求番号を返す初回請求ステータスは偽の請求には設定されない
3層の初回請求検証
ローカル重複排除 — 既に投稿済みの場合はスキップ(永続化されたJSONで再起動後も維持)
オンチェーン検証 —
lifetimeClaimedLamports == amountLamportsでオンチェーン上で本当に初回請求であることを確認グレースフルフォールバック — 検証が失敗した場合は初回請求バナーをスキップ(再デプロイ後の誤検知を防止)
請求カードの例
🚨🚨🚨 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 req/hrに引き上げ
トラブルシューティング
ボットがメッセージを投稿しない
ボットの権限を確認 — ボットはチャンネルの管理者で「メッセージを投稿」権限が必要です
CHANNEL_ID を確認 — 公開チャンネルは
@channel_name、プライベートチャンネルは数値ID(例:-100xxx)を使用。数値IDを見つけるには、チャンネルメッセージを @userinfobot に転送Telegram 403エラー — ボットがチャンネルのメンバー/管理者ではないことを意味します。チャンネル設定 → 管理者 → 管理者を追加 で追加してください
ログを確認 —
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 req/hrを許可。
GITHUB_TOKENを設定して5,000 req/hrに
パイプライン統計
ボットは60秒ごとにパイプラインカウンターをログに記録します:
Pipeline: 15 total → 8 social → 3 first / 5 repeat → 8 posted (skip: 7 cashback)total: 受信したすべての請求イベント
social: GitHubソーシャルフィーPDA請求
first/repeat: 初回 vs. リピート請求者
posted: Telegramへの投稿に成功
skip cashback: キャッシュバック請求(ユーザー返金、クリエイター活動ではない)
Webダッシュボード
2つのReactフロントエンドがチェックインされており、それらは同じアプリではありません:
ディレクトリ | 概要 | ビルド |
| 完全なダッシュボード: SSEイベントストリーム、ウォッチリスト、SEOアセット( |
|
| 同じUIの初期の小規模版。ダッシュボードは生成されたサンプルイベントをレンダリングし、SSEクライアントはありません。 |
|
以下に記載する機能は web/web/ を説明したものです。両ディレクトリとも現在はクリーンにビルドできますが、1つに統合する作業はまだ未完了です。
ディープリンク(/dashboard、/docs など)はクライアントサイドルートのため、任意の静的ホストで未知のパスを index.html にリライトする必要があります。各アプリには現在、そのリライト設定を含む vercel.json が同梱されています。Vercel以外のホストでは、同等のSPAフォールバックを設定してください。
ページ
ページ | ルート | 説明 |
ホーム |
| プロジェクト概要のランディングページ |
ダッシュボード |
| SSEストリーミングによるライブイベントフィード |
コイン作成 |
| トークン作成インターフェース |
ドキュメント |
| APIドキュメント & Telegramコマンド |
パッケージ |
| パッケージブラウザ |
ダッシュボード機能
サーバー送信イベント(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ツール
ツール | 説明 |
| トークンメタデータ、時価総額、ボンディングカーブの進捗、フラグ |
| 集中度メトリクス付きの上位ホルダー |
| 最近の取引アクティビティ — 出来高、買い/売り回数 |
| 卒業トークンのPumpSwap AMMプール流動性 |
| バンドル検出(詐欺インジケーター) |
| クリエイターのローンチ履歴、詐欺推定、最近のコイン |
| ユーザー名または数値IDによるGitHubプロファイル |
| ウォレットのクレーム履歴と残りのクレーム |
| 現在の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使用方法: Streamable HTTPトランスポート(組み込み)
メインボットと並行して実行するには、MCP_ENABLED=true を設定します:
MCP_ENABLED=true MCP_PORT=3001 npm run devMCPエンドポイントは設定されたポートの POST /mcp で利用可能です。クライアントはStreamable HTTPトランスポートを使用して接続します。
クエリ例
接続後、AIアシスタントに次のように尋ねます:
"ミントアドレス 7xKXt...p3Bz のトークン情報を調べて"
"GitHubユーザー 12345 はPumpFunの手数料をクレームしたことがある?"
"このトークンの上位ホルダーは誰?"
"このトークンのローンチがバンドルされていたか確認して"
"現在のSOLの価格は?"
ヘルスチェックAPI
このボットはRailway / Dockerプローブ用のHTTPヘルスチェックサーバーを公開しています。
エンドポイント | メソッド | 説明 |
| GET | 稼働状況と統計情報を返します |
| GET |
|
レスポンス:
{
"status": "ok",
"uptime": "12345s",
"uptimeMs": 12345000
}正常時は 200、低下時は 503 を返します
コールバックを介して動的統計情報を注入(パイプラインカウンター、接続ステータス)
ポートは
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 |
| 初回クレーム検出、永続化、カウンター、生涯合計 |
Claim Routing |
| どのクレームが投稿されるか、スキップされるか、どのフィードにルーティングされるか |
Credibility |
| 決定的0〜100スコアリング、要因別内訳、ティア境界 |
Dev Reputation |
| 開発者ごとの永続的なトラックレコードと平均値 |
Formatters |
| HTMLカード生成、エスケープ、null処理、エッジケース |
GitHub Client |
| URL解析、APIレスポンス処理、キャッシュ動作 |
Groq Client |
| AI要約生成、APIキー処理、HTML安全性 |
Pump Client |
| トークン、ホルダー、取引、クリエイターAPIレスポンス処理 |
RPC Fallback |
| ラウンドロビンローテーション、クールダウン、再試行可能なエラー処理 |
X Client |
| インフルエンサーティア分類、フォロワー数フォーマット |
E2E Pipeline |
| エンドツーエンドのクレーム追跡、フォーマット、GitHubフィード |
ローカル開発
# Install dependencies
npm install
# Run with hot reload (tsx)
npm run dev
# Type-check without emitting
npm run typecheckLOG_LEVEL=debug を設定すると、Telegramに投稿されるかどうかに関係なく、すべてのイベントがstdoutに記録されます。
技術スタック
コンポーネント | 技術 |
ランタイム | Node.js >= 20 (ESM) |
言語 | TypeScript 5.7 (strict mode) |
ブロックチェーン |
|
Telegram | grammYフレームワーク |
AI | Groq API (llama-3.3-70b-versatile) |
フロントエンド | React 18 + Vite 5 + Tailwind CSS |
テスト | Vitest |
コンテナ | Docker(マルチステージAlpine、非root) |
MCP |
|
ホスティング | Railway(GitHubからの自動デプロイ) |
依存関係 | 本番6、開発4 — 意図的に最小限 |
コントリビューション
コントリビューションを歓迎します!ガイドラインは CONTRIBUTING.md を参照してください。
リポジトリをフォーク
フィーチャーブランチを作成(
git checkout -b feat/my-feature)テスト(
npm test)と型チェック(npm run typecheck)を実行プルリクエストを開く
セキュリティ
脆弱性を発見しましたか?責任を持って報告してください — SECURITY.md を参照してください。
ライセンス
全著作権所有。 LICENSE を参照してください。
ドキュメント
完全なドキュメントサイト: https://nirholas.github.io/pumpfun-claims-bot/
Available Tools
9 toolsget_bundle_infoB
Detect if a token launch was bundled (scam indicator)
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| githubUserId | Yes | GitHub numeric user ID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | Creator wallet address |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | GitHub numeric user ID | |
| username | No | GitHub username (login) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address | |
| usdMarketCap | No | Current USD market cap (for context) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v1.0.4- First observed
get_bundle_info - First observed
get_claim_history - First observed
get_creator_profile - First observed
get_github_user - First observed
get_pool_liquidity - First observed
get_sol_price - First observed
get_token_holders - First observed
get_token_info - First observed
get_token_trades
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Solana + pump.fun intel for agents: launch verdicts, token risk, dev/wallet records, smart money.
Memecoin safety scanner for Solana, BNB and Robinhood Chain with an onchain track record
Signals, scores and payout data for stonkfun coins on Solana, for bots and AI agents.
1pump.fun graduation radar for trading bots and AI agents. x402 USDC per scan, no key.
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time radar for Solana memecoins, Pump.fun launches, and KOL trades.86MIT
- AlicenseNot gradedqualityDmaintenanceSolana on-chain intelligence API — token scans, wallet PnL, bundle detection, fresh wallets, dev profiling. MCP server for Claude, Cursor & AI agents. Live PumpFun/Raydium streams1MIT
- FlicenseBqualityDmaintenanceReal-time Solana pump.fun token scanner with MCP stdio transport and HTTP API. Enables AI agents to monitor and trade pump.fun tokens via natural language.84-
- AlicenseNot gradedqualityCmaintenanceScans new Solana token launches from pump.fun, Raydium, PumpSwap, and Orca with liquidity and holder data. Pay-per-call via x402 micropayments.MIT