mcpField
P
PumpFun Claims Bot

PumpFun Claims Bot

ローカル
github.com/nirholas金融データ233 週間前に更新

PumpFun Claims Bot について

PumpFun Claims Bot は、PumpFun のオンチェーン活動を Telegram チャンネルに配信する読み取り専用のボットで、信頼性スコアなどの付加情報を含みます。単独で利用できる MCP サーバーも提供しており、AI クライアントから PumpFun のオンチェーン情報を参照したい場合に適しています。

主な機能

  1. 01GitHub ソーシャル手数料の請求とトークン移行イベントの配信
  2. 02決定的ルールに基づく 0〜100 の信頼性スコア
  3. 03過去のトークンを含む開発者履歴の保存
  4. 04初回請求に対する Groq によるワンライン要約
  5. 05複数の Solana RPC エンドポイントへの自動フェイルオーバー

活用シーン

  1. 01PumpFun の請求イベントを Telegram チャンネルでリアルタイムに受け取る
  2. 02AI アシスタントから PumpFun のトークンと請求情報を照会する
  3. 03GitHub 開発者の過去のトークン履歴を確認する

MCP 対応

本プロジェクトは npx pumpfun-claims-bot で起動する MCP サーバーを提供し、Claude Desktop や Cursor などの MCP クライアントから PumpFun のオンチェーン情報を利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nirholas-pumpfun-claims-bot": {
"command": "npx",
"args": [
"-y",
"pumpfun-claims-bot"
],
"env": {
"GITHUB_TOKEN": "<GITHUB_TOKEN>",
"SOLANA_RPC_URL": "<SOLANA_RPC_URL>"
}
}
}
}
起動コマンドnpx -y pumpfun-claims-bot
設定が必要な環境変数
GITHUB_TOKENシークレットGitHub personal access token — raises API rate limit from 60 to 5000 req/hr
SOLANA_RPC_URLSolana RPC HTTP URL for on-chain queries (defaults to public mainnet)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmpumpfun-claims-bot1.0.1

ツール

9

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
mintstringはいトークンのミントアドレス

詳細

PumpFun Claims Bot

PumpFun Claims Bot — Solana オンチェーンイベント → エンリッチメントパイプライン → Telegram チャンネルカード

CI ライセンス スター Telegram npm MCP Node.js Solana Railway にデプロイ

PumpFun のオンチェーンアクティビティ(GitHub ソーシャル手数料の請求、トークンの卒業など)を配信する、読み取り専用の Telegram チャンネルフィードです。インテリジェンス情報を充実させたカードを Telegram チャンネルにリアルタイムで投稿します。

ウェブサイト · ライブチャンネル · MCP サーバー · デプロイガイド · コントリビューション


インタラクティブなモニタリングをお探しですか? telegram-bot は、監視対象の管理、グループチャット、REST API、SSE ストリーミング、Webhook に対応しています。シンプルな一方向配信専用チャンネルには、このチャンネルボットをご利用ください。

関連ソース

Pump.fun GitHub Claims — nirholas/pumpfun-github-claims は、@pumpfunclaims フィード向けの、目的を絞った関連リポジトリです。 GitHub の開発者とコインごとの初回報酬請求について、過去に請求されたコインをコンテキストとして含めた、単独で動作するボットのソースコードとドキュメントを提供します。 実装状況 では、残っているコイン帰属処理の作業状況を追跡しています。このリポジトリは、ウェブダッシュボード、MCP サーバー、信頼性スコアリング、開発者の評判追跡など、より幅広いツールキットを提供します。どちらのリポジトリも引き続きソースとして利用できます。

機能

GitHub の主張が実際に証明すること

クレームカードは、Pump.fun の GitHub ソーシャル手数料アカウントから実際にオンチェーンで出金された記録を起点とします。これは有用な証拠ですが、それだけで GitHub ユーザーがコインを作成、所有、または支持していることが証明されるわけではありません。トークンのメタデータはユーザーが入力したものであり、類似アカウントも存在します。また、1 つのソーシャル手数料アカウントが複数のコインで共有されている場合があります。

ラベル意味
検証済み GitHub 手数料クレームクレームを行った GitHub ユーザーが、トークンのメタデータにリンクされたリポジトリの所有者と完全に一致します。
作成者ウォレットの GitHub 手数料クレーム受取人のウォレットもトークンを作成していますが、リポジトリの所有権は確認されていません。
身元不一致クレームを行ったユーザー名がリンクされたリポジトリの所有者と異なります。類似アカウントには危険信号として注意してください。
未検証出金は実際に行われていますが、GitHub とコインの関係は証明されていません。
未解決のプール済み状態手数料アカウントが複数のコインに紐づいているため、主要な CA やコインごとの金額は選択されていません。

「初回」は GitHub 手数料アカウントを指し、必ずしも表示されているコインを指すものではありません。取引ボタンは、リポジトリとの関係または作成者ウォレットとの関係が検証された場合にのみ表示されます。フィードは発見のための証拠であり、推奨を意味するものではありません。

フィードの種類
フィード説明切り替え
GitHub ソーシャル手数料クレームGitHub 開発者が PumpFun のソーシャル手数料 PDA 報酬をクレームFEED_CLAIMS
トークンの卒業ボンディングカーブから PumpAMM に移行するトークンFEED_GRADUATIONS
クレームインテリジェンス

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

機能説明
🟢 信頼性スコアすべての信頼シグナルを総合した、決定論的な 0~100 の判定(高い/中程度/注意/高リスク)。透明性のある ±要因の内訳も表示します。
📊 開発者の実績開発者ごとの永続的な評判情報です。リピーター開発者の過去のトークンと平均信頼性を表示するため、最新のコインが問題なさそうに見えても、手数料稼ぎを繰り返す開発者をすぐに見分けられます。
🚨 初回アラートGitHub ユーザーが初めてクレームを行ったときに、🚨🚨🚨 FIRST TIME CLAIM バナーを表示します。
⚠️ 偽クレームの検出claim_social_fee_pda 命令が呼び出されたにもかかわらず、実際には手数料が支払われていない場合を検出します。
📊 クレーム回数再起動後も保持される連番のクレーム番号です。
💹 生涯 SOLPDA からこれまでにクレームされた SOL の合計です。
👤 GitHub プロフィールユーザー名、自己紹介、リポジトリ、フォロワー数、アカウント作成からの期間、所在地、ブログです。
𝕏 ソーシャルリンクGitHub プロフィールから取得した、フォロワー数付きの Twitter/X プロフィールです。
🏅 インフルエンサーバッジフォロワー数の多い GitHub/X アカウントに付与される、ティア別のバッジです。
📈 トークン情報卒業済みかボンディングカーブ上かの状態、カーブの進捗率、作成からの経過時間、返信数です。
🔗 トークンのソーシャルリンクトークンのメタデータに含まれる Twitter、Telegram、ウェブサイトへのリンクです。
🏷️ トークンフラグNSFW、禁止、キャッシュバックの状態を示します。
⚠️ 信頼シグナル作成から 30 日未満の新しい GitHub アカウント、リポジトリがないアカウント、偽クレームに対する警告です。
🔗 取引リンクアフィリエイトコード付きの Axiom、GMGN、Padre へのリンクです。
️ トークン画像写真カードとして表示する、トークン画像または GitHub アバターです。
卒業カード

情報が充実した卒業カードには、作成者のプロフィール、大口保有者の分析、24 時間の取引高、開発者ウォレットのアクティビティ、プールの流動性、バンドルの検出結果が含まれます。

インフルエンサーのティアシステム

GitHub と X/Twitter のフォロワー情報を組み合わせ、クレームを行ったユーザーを分類します。

ティアバッジX フォロワー数GitHub フォロワー数
メガ🔥🔥 メガインフルエンサー≥ 100K≥ 10K
インフルエンサー🔥 インフルエンサー≥ 10K≥ 1K
注目ユーザー⭐ 注目ユーザー≥ 1K≥ 100

どちらか一方の基準を満たすと、そのティアに該当します。X のフォロワーが 50K、GitHub のフォロワーが 50 人のユーザーも、インフルエンサーに該当します。

信頼性スコアと開発者の実績

各クレームカードには、ボットがすでに収集している信頼性シグナルに、申告した開発者の過去のトークンにおける継続的な実績を加味した、決定論的な0〜100の信頼性判定が最初に表示されます。

スコアは決定論的で透明性があります。同じ入力からは常に同じ数値が算出され、モデル呼び出しは行われません。また、各ポイントの根拠となる要因は、見出しの下に名称付きで表示されます。

TierBadgeScore
強い🟢75-100
中程度🟡55-74
注意🟠35-54
高リスク🔴0-34

スコアは中立値の50から始まり、重み付けされた要因に基づいて調整されます。クレームの検証(GitHub所有者の不一致時は +22、または -20)、アカウントの年齢(5年以上で +14、30日未満で -18)、公開リポジトリ数、フォロワー数、スターが付いた非フォークリポジトリ、模倣(-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所見が表示されます。

  • 30以上のシグナルを分析します。トークンのメタデータ、GitHubプロフィール、作成者の履歴、取引アクティビティなどが対象です。
  • 最大120文字で、率直かつ明確な意見を、トレーダー向けに提示します。
  • タイムアウトは5秒で、失敗時は適切にフォールバックします(空文字列)。
  • 出力はHTMLサニタイズ済みで、Telegram上でも安全です。

例:

「実在するGitHubプロジェクト。開発者はすぐに申告」 · 「人気リポジトリのフォーク。注意して進めてください」

アーキテクチャ

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秒間クールダウン
  • 有効期限が最も近いエンドポイントにフォールバック — すべてのエンドポイントがクールダウン中の場合、クールダウンの終了が最も近いものを選択します
  • 成功時にリセット — 1回成功すると、失敗カウンターがリセットされます
  • SOLANA_RPC_URLS(カンマ区切り)で設定します
監視対象のプログラム
プログラムID用途
PumpFeespfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ手数料の共有、ソーシャル手数料 PDA の請求
Pump6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6Pボンディングカーブ(卒業)
PumpAMMpAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEAAMM(卒業済みプールのイベント)

デコードされる請求命令(v1 と、2026 年 10 月のアップグレードで導入された V2 バリアント):

命令プログラム備考
claim_social_fee_pda, claim_social_fee_pda_v2PumpFeesGitHub ソーシャル手数料の請求。V2 では USDC などのクォートミントで支払えます
collect_creator_fee, collect_creator_fee_v2Pumpクリエイターボールトからクリエイターへの支払い
distribute_creator_fees, distribute_creator_fees_v2Pumpクリエイター手数料を株主に分配
transfer_creator_fees_to_pump, transfer_creator_fees_to_pump_v2PumpAMMプールのクリエイター手数料を Pump ボールトに戻す(支払いイベントなし)
collect_coin_creator_feePumpAMMプールのクリエイター手数料をクリエイターに支払う
claim_cashback, claim_cashback_v2Pump, PumpAMMトレーダーへのキャッシュバック

sweep_creator_fee と sweep_protocol_fee(Pump と PumpAMM)は認識されますが、請求としてカウントされることはありません。スイープでは、カーブまたはプールに残っている手数料をクリエイターボールトに移すだけで、誰にも支払われないためです。請求トランザクションでは通常、最初にスイープが実行され、その後に請求が行われます。報告されるのは請求(ボールトからクリエイターへの支払い)のみで、各請求はそれぞれのイベントで支払われるため、二重にカウントされることはありません。スイープだけのトランザクションは何も投稿しません。

イベントデコーダーは、既知のプレフィックスから必要なフィールドを読み取り、末尾のバイトを無視するため、アップグレード前のイベントと、2026 年 10 月のより長い形式の両方をデコードできます。トレードでは、buy_v3、sell_v3、buy_exact_quote_in_v3、multi_hop_swap という命令名が認識されます。アップグレード後は、1 つの命令でボンディングカーブの完了後に新しい PumpSwap プールでも買い続けることができます(migrate の実行前に行われる合成移行)。クジラフィードは、その PostCompleteBuyEvent の数量を購入者の合計に加算し、トレードがカーブを完了したことを示します。

インストール

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.comSolana のプライマリ 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—trueGitHub のソーシャル手数料請求カードを投稿します
FEED_GRADUATIONS—falseトークンのグラデュエーションカードを投稿します
FEED_LAUNCHES—false新規トークンのローンチカードを投稿します
FEED_WHALES—falseクジラの買い/売りアラートを投稿します
FEED_FEE_DISTRIBUTIONS—falseクリエイター手数料の分配イベントを投稿します
REQUIRE_GITHUB—trueGitHub のソーシャル手数料 PDA がない請求をスキップします
GITHUB_TOKEN——GitHub PAT — こちらで作成(スコープは不要)— レート制限を 60 req/hr から 5000 req/hr に引き上げます
GROQ_API_KEY——AI による一文要約用の Groq API キー — console.groq.com で無料キーを取得
X_AUTH_TOKEN——X/Twitter の auth_token Cookie — x.com を開き、DevTools → Application → Cookies から auth_token をコピーします
X_CT0_TOKEN——X/Twitter の ct0 Cookie(CSRF トークン)— 上記と同じ場所から ct0 をコピーします
AXIOM_REF——Axiom の取引リンク用アフィリエイト紹介コード
GMGN_REF——GMGN の取引リンク用アフィリエイト紹介コード
PADRE_REF——Padre の取引リンク用アフィリエイト紹介コード
POLL_INTERVAL_SECONDS—30WebSocket を利用できない場合の HTTP ポーリング間隔
WHALE_THRESHOLD_SOL—10クジラアラートを発生させる最小 SOL 取引量
LOG_LEVEL—infoログの詳細度:debug | info | warn | error
PORT—3000ヘルスチェック用 HTTP サーバーのポート — Railway によって自動設定されます
MCP_ENABLED—falseAI アシスタントとの連携用に MCP(Model Context Protocol)サーバーを有効にします
MCP_PORT—3001MCP サーバーの 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 にデプロイ

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
  │
  ▼
Skip sweep_creator_fee / sweep_protocol_fee (not a payout)
  │
  ▼
Identify instruction: claim_social_fee_pda or claim_social_fee_pda_v2?
  │
  ├─ 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 または claim_social_fee_pda_v2 と一致する
  2. トランザクションログに SocialFeePdaClaimed イベントが含まれていない、またはイベントの amountLamports = 0 である
  3. GitHub ユーザー ID とプラットフォームは、命令の引数(Anchor Borsh 形式)から引き続き解析される

偽の請求は、⚠️ FAKE CLAIM の警告と 🚩 Fake claim — no fees paid out の信頼性シグナルを付けて投稿されます。

初回請求の追跡

ClaimTracker は、請求に成功した GitHub ユーザー ID の永続的なセットを管理します。

  • 処理中にすばやく検索できるメモリ内セット
  • data/github-first-claims.json へのディスク保存のデバウンス(5 秒の遅延)
  • 確認と記録を分けるパターン: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 req/hr から 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 の請求のみですか? — GitHub のソーシャル手数料の請求のみを投稿するには、REQUIRE_GITHUB=true を設定します
  • フィードが無効ですか? — FEED_CLAIMS=true が設定されていることを確認してください
  • SocialFeeIndex の処理が遅いですか? — 初回のブートストラップでは約 148K 個のアカウントを取得します。起動時に 30~60 秒かかります。ログで SocialFeeIndex: loaded N mappings を確認してください
  • レート制限がかかっていますか? — GitHub API の認証なしでの利用は 60 req/hr までです。5,000 req/hr にするには GITHUB_TOKEN を設定してください
パイプライン統計

ボットは60秒ごとにパイプラインのカウンターを記録します。

Pipeline: 15 total → 8 social → 3 first / 5 repeat → 8 posted (skip: 7 cashback)
  • total:受信したすべての請求イベント
  • social:GitHub のソーシャルフィー PDA の請求
  • first/repeat:初回請求者とリピーター
  • posted:Telegram への投稿に成功した件数
  • skip cashback:キャッシュバックの請求(ユーザーへの返金であり、クリエイターの活動ではありません)

Web ダッシュボード

React フロントエンドが2つチェックインされていますが、同じアプリではありません。

ディレクトリ内容ビルド
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 フォールバックを設定してください。

ページ
ページルート説明
ホーム/プロジェクトの概要を紹介するランディングページ
ダッシュボード/dashboardSSE ストリーミングによるライブイベントフィード
コイン作成/createトークン作成インターフェース
ドキュメント/docsAPI ドキュメントと Telegram コマンド
パッケージ/packagesパッケージブラウザー
ダッシュボードの機能
  • Server-Sent Events(SSE) — /api/v1/claims/stream 経由のリアルタイムストリーミングと自動再接続(3秒の遅延)
  • イベントフィルター — すべて、ローンチ、クジラ、卒業、請求、分配
  • ライブ統計バー — イベント種別ごとのカウンター
  • ウォッチリスト — 監視するウォレットアドレスを追加・削除(GET/POST/DELETE /api/v1/watches)
  • 詳細なイベントカード — トークンのローンチ、クジラの取引、卒業、手数料の請求をコンテキストとともに表示
  • 接続ステータス — エラーメッセージ付きの視覚的なインジケーター
  • モックデータへのフォールバック — SSE が利用できない場合にシミュレートされたフィードを表示
技術スタック
レイヤーテクノロジー
フレームワークReact 18
ルーターReact Router
ビルドVite 5
スタイリングTailwind CSS
言語TypeScript

MCP サーバー

ボットには、AI アシスタント(Claude、Copilot、Cursor など)が PumpFun のオンチェーンデータを対話形式で照会できる、組み込みのModel Context Protocol(MCP)サーバーが含まれています。

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_historyGitHub ユーザーの請求状況 — 件数、請求したミント
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 ヘルスチェックサーバーを公開します。

エンドポイントメソッド説明
/healthGET稼働時間と統計情報を含むヘルスステータス
/GET/health のエイリアス

レスポンス:

{
  "status": "ok",
  "uptime": "12345s",
  "uptimeMs": 12345000
}
  • ok の場合は 200、degraded の場合は 503 を返します
  • コールバックを介して動的な統計情報を注入します(パイプラインのカウンター、接続ステータス)
  • ポートは PORT または HEALTH_PORT 環境変数で設定できます(デフォルト:3000)

テスト

このプロジェクトでは Vitest を使用しています。12 個のスイートにわたる 204 件のテストがあり、npm test ですべて成功します。

# Run all tests
npm test

# Watch mode (re-runs on file changes)
npm run test:watch
テストスイート

各スイートは src/__tests__/ にあります(共有サンプルデータの fixtures.ts も含みます)。

スイートファイルカバレッジ
クレームトラッカーclaim-tracker.test.ts初回クレームの検出、永続化、カウンター、累計
MCP Stdiomcp-stdio.test.tsCLI の初期化、ツールの検出、リリースバージョン、プロトコル出力の整合性
クレームルーティングclaim-routing.test.ts投稿、スキップ、または振り分け先フィードが決まるクレーム
信頼性credibility.test.ts決定論的な 0~100 のスコアリング、要因ごとの帰属、ティアの範囲
開発者の評判dev-reputation.test.ts開発者ごとの永続的な実績と平均値
フォーマッターformatters.test.tsHTML カードの生成、エスケープ、null の処理、エッジケース
GitHub クライアントgithub-client.test.tsURL の解析、API レスポンスの処理、キャッシュの動作
Groq クライアントgroq-client.test.tsAI 要約の生成、API キーの処理、HTML の安全性
Pump クライアントpump-client.test.tsトークン、保有者、取引、作成者に関する API レスポンスの処理
RPC フォールバックrpc-fallback.test.tsラウンドロビンのローテーション、クールダウン、再試行可能なエラーの処理
X クライアントx-client.test.tsインフルエンサーのティア分類、フォロワー数のフォーマット
E2E パイプラインe2e.test.tsクレーム追跡、フォーマット、GitHub フィードのエンドツーエンドテスト

ローカル開発

# Install dependencies
npm install

# Run with hot reload (tsx)
npm run dev

# Type-check without emitting
npm run typecheck

LOG_LEVEL=debug を設定すると、Telegram に投稿されるかどうかにかかわらず、すべてのイベントが stdout に記録されます。

技術スタック

コンポーネント技術
ランタイムNode.js >= 20(ESM)
言語TypeScript 5.7(strict モード)
ブロックチェーン@solana/web3.js 経由の Solana
TelegramgrammY フレームワーク
AIGroq 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 をご覧ください。

ライセンス

All rights reserved. 詳細については LICENSE をご覧ください。

ドキュメント

ドキュメントサイト全文:https://nirholas.github.io/pumpfun-claims-bot/

  • はじめにでは、インストールと初回実行について説明しています。
  • 例には、コピーして貼り付けて使えるスニペットがあります。

スター履歴

スター履歴チャート

プロジェクトを応援する

pumpfun-claims-bot が時間の節約に役立ったら、GitHub でスターを付けてください。スターがあることで、ほかの開発者や AI エージェントが信頼できるリポジトリを見つけやすくなります。クリックは 1 回で済みます。

使ってくれそうな人を知っていますか? X に投稿する · Bluesky で共有する · LinkedIn で共有する · Hacker News に投稿する · Reddit で共有する

AI エージェントにも対応

コーディングエージェントや LLM ツールは、このリポジトリを直接参照できます。AGENTS.md、llms.txt、llms-full.txt。エージェントに https://github.com/nirholas/pumpfun-claims-bot を指定すれば、必要なコンテキストを取得できます。

同じ作者によるその他のプロジェクト

コントリビューター

コントリビューター

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。