Skip to main content
Glama
nirholas

pumpfun-claims-bot

by nirholas

PumpFun Claims Bot


インタラクティブな監視をお探しですか? telegram-bot は、ウォッチ管理、グループチャット、REST API、SSE ストリーミング、Webhook をサポートしています。こちらは配信専用のシンプルなチャンネルには、この channel-bot を使ってください。

機能

フィードタイプ

フィード

説明

トグル

GitHub ソーシャルフィークレーム

PumpFun のソーシャルフィー PDA 報酬をクレームする GitHub 開発者

FEED_CLAIMS

トークンの卒業

ボンディングカーブから PumpAMM へ卒業するトークン

FEED_GRADUATIONS

クレームのインテリジェンス

GitHub ソーシャルフィークレームカードには、次の情報が含まれます。

機能

説明

🟢 信頼性スコア

すべてのトラストシグナルから総合した決定論的な 0〜100 の判定(Strong/Moderate/Caution/High Risk)。透明な ±要因の内訳付き

📊 開発者の実績

開発者ごとに永続化されるレピュテーション。常連開発者の過去のトークンとその平均信頼度を表示。最新のコインがきれいでも、常習のフィーファーマーを一目で見抜けます

🚨 初回クレームアラート

GitHub ユーザーが史上初めてクレームした場合に 🚨🚨🚨 FIRST TIME CLAIM バナーを表示

⚠️ 偽クレーム検出

claim_social_fee_pda 命令が呼び出されたのに、実際には手数料が支払われていないことを検出

📊 クレームカウンター

再起動をまたいで永続的に記録される連続クレーム番号

💹 累計 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

PfeEaB1g6jkeY1HxDGCsFCAjAhHA9rWtchMGdZ6VojVZ

フィー分散、ソーシャルフィー PDA クレーム

Pump

6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P

ボンディングカーブ(卒業)

ھپAMPump`

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 パッケージ: pumpfun-claims-bot on npm

ソースから(フルボット + 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)— 数値IDは @userinfobot で取得

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 req/hr に引き上げ

GROQ_API_KEY

—

—

AIワンライナー要約用のGroq APIキー — console.groq.com で無料キーを取得

X_AUTH_TOKEN

—

—

X/Twitter の auth_token クッキー — x.com を開き、DevTools → Application → Cookies → auth_token をコピー

X_CT0_TOKEN

—

—

X/Twitter の ct0 クッキー(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

AIアシスタント統合用のMCP(Model Context Protocol)サーバーを有効化

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のマッピングを読み込み

  • 増分更新 — CreateFeeSharingConfig と UpdateFeeShares イベントのWebSocketサブスクリプションによる

  • ルックアップ: socialFeeIndex.getMintForPda(pdaAddress) → トークンミント

  • 1つのPDA → 複数のミント — 複数のトークンにわたってPDAを再利用する詐欺師に対応

偽の請求検出

一部のユーザーは、徴収する手数料がないランダムなトークンPDAを対象に claim_social_fee_pda 命令を呼び出します。ボットは以下をチェックしてこれらを検出します:

  1. 命令のディスクリミネータが claim_social_fee_pda と一致する

  2. トランザクションログに SocialFeePdaClaimed イベントが含まれない — またはイベントが amountLamports = 0 を示す

  3. 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層の初回請求検証

  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 req/hrに引き上げ

トラブルシューティング

ボットがメッセージを投稿しない

  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 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フロントエンドがチェックインされており、それらは同じアプリではありません:

ディレクトリ

概要

ビルド

web/web/

完全なダッシュボード: SSEイベントストリーム、ウォッチリスト、SEOアセット(robots.txt、sitemap.xml、llms.txt)。独自のロックファイルを持つため、npm ci が機能します。

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

packages/web/

同じUIの初期の小規模版。ダッシュボードは生成されたサンプルイベントをレンダリングし、SSEクライアントはありません。

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

以下に記載する機能は web/web/ を説明したものです。両ディレクトリとも現在はクリーンにビルドできますが、1つに統合する作業はまだ未完了です。

ディープリンク(/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

ウォレットのクレーム履歴と残りのクレーム

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

使用方法: Streamable HTTPトランスポート(組み込み)

メインボットと並行して実行するには、MCP_ENABLED=true を設定します:

MCP_ENABLED=true MCP_PORT=3001 npm run dev

MCPエンドポイントは設定されたポートの POST /mcp で利用可能です。クライアントはStreamable HTTPトランスポートを使用して接続します。

クエリ例

接続後、AIアシスタントに次のように尋ねます:

  • "ミントアドレス 7xKXt...p3Bz のトークン情報を調べて"

  • "GitHubユーザー 12345 はPumpFunの手数料をクレームしたことがある?"

  • "このトークンの上位ホルダーは誰?"

  • "このトークンのローンチがバンドルされていたか確認して"

  • "現在のSOLの価格は?"

ヘルスチェックAPI

このボットはRailway / Dockerプローブ用のHTTPヘルスチェックサーバーを公開しています。

エンドポイント

メソッド

説明

/health

GET

稼働状況と統計情報を返します

/

GET

/health のエイリアス

レスポンス:

{
  "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-tracker.test.ts

初回クレーム検出、永続化、カウンター、生涯合計

Claim Routing

claim-routing.test.ts

どのクレームが投稿されるか、スキップされるか、どのフィードにルーティングされるか

Credibility

credibility.test.ts

決定的0〜100スコアリング、要因別内訳、ティア境界

Dev Reputation

dev-reputation.test.ts

開発者ごとの永続的なトラックレコードと平均値

Formatters

formatters.test.ts

HTMLカード生成、エスケープ、null処理、エッジケース

GitHub Client

github-client.test.ts

URL解析、APIレスポンス処理、キャッシュ動作

Groq Client

groq-client.test.ts

AI要約生成、APIキー処理、HTML安全性

Pump Client

pump-client.test.ts

トークン、ホルダー、取引、クリエイターAPIレスポンス処理

RPC Fallback

rpc-fallback.test.ts

ラウンドロビンローテーション、クールダウン、再試行可能なエラー処理

X Client

x-client.test.ts

インフルエンサーティア分類、フォロワー数フォーマット

E2E Pipeline

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に投稿されるかどうかに関係なく、すべてのイベントがstdoutに記録されます。

技術スタック

コンポーネント

技術

ランタイム

Node.js >= 20 (ESM)

言語

TypeScript 5.7 (strict mode)

ブロックチェーン

@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 (Streamable HTTP + stdio)

ホスティング

Railway(GitHubからの自動デプロイ)

依存関係

本番6、開発4 — 意図的に最小限

コントリビューション

コントリビューションを歓迎します!ガイドラインは CONTRIBUTING.md を参照してください。

  1. リポジトリをフォーク

  2. フィーチャーブランチを作成(git checkout -b feat/my-feature)

  3. テスト(npm test)と型チェック(npm run typecheck)を実行

  4. プルリクエストを開く

セキュリティ

脆弱性を発見しましたか?責任を持って報告してください — 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)

ParametersJSON Schema
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

ParametersJSON Schema
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

ParametersJSON Schema
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

ParametersJSON Schema
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

ParametersJSON Schema
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

ParametersJSON Schema
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

ParametersJSON Schema
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

ParametersJSON Schema
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)

ParametersJSON Schema
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
    D
    maintenance
    Solana on-chain intelligence API — token scans, wallet PnL, bundle detection, fresh wallets, dev profiling. MCP server for Claude, Cursor & AI agents. Live PumpFun/Raydium streams
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Real-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.
    8
    4
    -
  • 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