
PumpFun Claims Bot
io.github.nirholasPublished by GitHub account nirholasv1.0.1Updated Oct 25, 2026
MCP server for PumpFun on-chain intelligence — tokens, claims, holders, and bundles.
Overview
A local MCP server that gives an assistant read-only PumpFun on-chain intelligence: token info, holders, trades, liquidity, bundles, creator profiles, GitHub/fe
- What you can do
- Look up token metadata, market cap, bonding curve progress and flags, plus PumpSwap pool liquidity for graduated tokens and bundle detection as a scam indicator. Inspect top holders with concentration metrics and recent trade activity with volume and buy/sell counts. Check creator launch history, scam estimate and recent coins, and fetch GitHub profiles by username or numeric ID. Check a GitHub user's PumpFun claim history (count and mints claimed) and get the current SOL/USD price.
- When to use it
- Useful when you want an assistant to research PumpFun tokens and their creators on Solana — checking holders, liquidity, bundling, creator track record or whether a GitHub user has claimed social fees — without leaving the chat.
- Requirements
- Runs locally via npx or a global npm install; Node.js 20 or newer. A Solana RPC HTTP URL is used for on-chain queries and defaults to public mainnet, which may rate-limit; a dedicated RPC is recommended. GITHUB_TOKEN is optional and raises the GitHub API rate limit from 60 to 5000 requests per hour. Network access to Solana RPC and GitHub is needed.
Installation
In SourceWeft
- Open PumpFun Claims Bot in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
PumpFun Claims Bot
[PumpFun Claims Bot — Solana on-chain events → enrichment pipeline → Telegram channel cards]
[CI] [License] [Stars] [Telegram] [npm] [MCP] [Node.js] [Solana] [Deploy on Railway]
Read-only Telegram channel feed that broadcasts PumpFun on-chain activity — GitHub social fee claims, token graduations, and more. Posts rich, intelligence-enriched cards to a Telegram channel in real time.
Website · Live Channel · MCP Server · Deploy Guide · Contributing
Looking for interactive monitoring? The telegram-bot supports watch management, group chats, REST API, SSE streaming, and webhooks. Use this channel-bot for simple broadcast-only channels.
Related Source
Pump.fun GitHub Claims — nirholas/pumpfun-github-claims
is a focused companion repository for the @pumpfunclaims
feed. It provides standalone bot source and documentation for first reward
claims per GitHub developer and coin, with previous claimed coins as context.
Its implementation status
tracks the remaining coin-attribution work. This repository offers the broader
toolkit, including web dashboards, an MCP server, credibility scoring and
developer reputation tracking. Both repositories remain available as sources.
Features
What a GitHub claim actually proves
A claim card starts with a real on-chain withdrawal from a Pump.fun GitHub social-fee account. That is useful evidence, but it is not automatically proof that the GitHub user created, owns, or endorses a coin. Token metadata is user-supplied, lookalike accounts exist, and one social-fee account can be shared by several coins.
“First-ever” refers to the GitHub fee account, not necessarily the displayed coin. Trade buttons are shown only for verified repository or creator-wallet relationships. The feed is discovery evidence, never an endorsement.
Feed Types
Claim Intelligence
Every GitHub social fee claim card includes:
Graduation Cards
Rich graduation cards include creator profile, top holders analysis, 24h trading volume, dev wallet activity, pool liquidity, and bundle detection.
Influencer Tier System
Combines GitHub and X/Twitter follower data to classify claimers:
Either threshold triggers the tier — a user with 50K X followers and 50 GitHub followers still qualifies as Influencer.
Credibility Score & Dev Track Record
Every claim card leads with a deterministic 0-100 credibility verdict synthesised from the trust signals the bot already gathers, plus the claiming dev's persistent track record across prior tokens.
The score is deterministic and transparent — same inputs always produce the same number, no model call, and every point is attributed to a named factor shown under the headline:
Scoring starts at a neutral 50 and adjusts by weighted factors: claim verification (+22, or -20 on a GitHub-owner mismatch), account age (+14 for 5y+ down to -18 for < 30 days), public repos, followers, starred non-fork repo, copycats (-10/-16), bundling, holder concentration, prior rugs, and bans.
Dev track record turns that one-shot score into memory. Every score is recorded against the claiming GitHub user id and persisted, so the next time that dev launches a token the card shows their history — exposing a serial fee-farmer whose newest coin looks clean, and crediting a builder with a real record:
Logic lives in src/credibility.ts (pure scoreCredibility) and src/dev-reputation.ts (persistent store), both fully covered by tests.
AI-Powered Claim Summaries
First-time claims get a one-line AI take generated by Groq (llama-3.3-70b-versatile):
- Analyzes 30+ signals: token metadata, GitHub profile, creator history, trading activity
- Max 120 characters — direct, opinionated, trader-focused
- 5-second timeout with graceful fallback (empty string on failure)
- HTML-sanitized output safe for Telegram
Examples:
"Real GitHub project, dev claimed fast" · "Fork of popular repo, proceed with caution"
Architecture
Multi-RPC Failover
The RpcFallback class manages multiple Solana RPC endpoints with automatic rotation:
- Round-robin rotation after 3 consecutive failures on any endpoint
- 60-second cooldown per failed endpoint before retrying
- Earliest-expiry fallback — if all endpoints are in cooldown, picks the one expiring soonest
- Success resets — a single successful call resets the failure counter
- Configure via
SOLANA_RPC_URLS(comma-separated)
Programs Monitored
Claim instructions decoded (v1 and the V2 variants from the October 2026 upgrade):
sweep_creator_fee and sweep_protocol_fee (Pump and PumpAMM) are recognised but are never counted as a claim: a sweep only moves fees the curve or pool still holds into the creator vault, and pays nobody. A claim transaction usually carries a sweep first, then the claim; only the claim (vault to creator) is reported, and each claim is paid by its own event, so nothing is counted twice. A sweep-only transaction posts nothing.
Event decoders read the fields they need from the known prefix and ignore trailing bytes, so both pre-upgrade events and the longer October 2026 layouts decode. Trades recognise the buy_v3, sell_v3, buy_exact_quote_in_v3 and multi_hop_swap instruction names. Since the upgrade a buy can complete the bonding curve and keep buying on the new PumpSwap pool in the same instruction (synthetic migration, before migrate runs); the whale feed adds that PostCompleteBuyEvent amount to the buyer's total and marks the trade as having completed the curve.
Install
npm (MCP server — recommended for AI assistants)
Run the MCP server instantly with npx — no clone needed:
Or install globally:
Add to your MCP client config (Claude Desktop, Cursor, VS Code Copilot):
npm package: pumpfun-claims-bot on npm
From source (full bot + Telegram feed)
Quick Start
1. Create a Telegram Bot
- Message @BotFather on Telegram
/newbot→ follow prompts → copy the bot token- Create a public channel (e.g.,
@pumpfunclaims) - Add the bot as an admin to the channel (must have "Post Messages" permission)
2. Configure Environment
Environment Variables Reference
3. Run
4. Deploy with Docker
5. Deploy to Railway
Railway auto-deploys from GitHub and provides persistent volumes for claim tracking data.
See railway.json for the deployment config:
Project Structure
How It Works
Claim Detection Pipeline
SocialFeeIndex Bootstrap
On startup, the bot fetches all SharingConfig accounts from the PumpFees program to build a reverse mapping from social fee PDA addresses to token mints. This enables resolving which token a social fee claim belongs to without additional RPC calls.
- ~148K mappings loaded at startup
- Incremental updates via WebSocket subscription on
CreateFeeSharingConfigandUpdateFeeSharesevents - Lookup:
socialFeeIndex.getMintForPda(pdaAddress)→ token mint - One PDA → many mints — handles scammers who reuse PDAs across multiple tokens
Fake Claim Detection
Some users call the claim_social_fee_pda instruction targeting random token PDAs where they have no fees to collect. The bot detects these by checking:
- The instruction discriminator matches
claim_social_fee_pdaorclaim_social_fee_pda_v2 - The transaction logs contain no
SocialFeePdaClaimedevent — OR the event showsamountLamports = 0 - The GitHub user ID and platform are still parsed from the instruction args (Anchor Borsh format)
Fake claims are posted with a ⚠️ FAKE CLAIM warning and a 🚩 Fake claim — no fees paid out trust signal.
First-Claim Tracking
The ClaimTracker maintains a persistent set of GitHub user IDs that have successfully claimed:
- In-memory set for fast lookup during processing
- Debounced disk persistence (5-second delay) to
data/github-first-claims.json - Split check/mark pattern:
hasGithubUserClaimed()checks without side effects,markGithubUserClaimed()only called after successful Telegram post - Claim counter:
incrementGithubClaimCount()returns sequential claim number per user - First-claim status is NOT set for fake claims
Three-Layer First-Claim Verification
- Local dedup — Skip if already posted (survives restarts via persisted JSON)
- On-chain verification —
lifetimeClaimedLamports == amountLamportsconfirms it's truly the first claim on-chain - Graceful fallback — Skips first-claim banner if verification fails (prevents false positives after redeployment)
Example Claim Card
Requirements
- Node.js >= 20.0.0
- Telegram bot token (via @BotFather)
- Telegram channel with the bot added as admin
- Solana RPC endpoint — dedicated RPC recommended (Helius, QuickNode, Triton). Public mainnet works but may rate-limit.
- GitHub token (optional) — raises API rate limit from 60 to 5,000 req/hr
Troubleshooting
Bot Not Posting Messages
- Check bot permissions — The bot must be an admin in the channel with "Post Messages" permission
- Verify CHANNEL_ID — Use
@channel_namefor public channels or the numeric ID (e.g.,-100xxx) for private channels. To find the numeric ID, forward a channel message to @userinfobot - Telegram 403 error — Means the bot is NOT a member/admin of the channel. Add it via channel settings → Administrators → Add Administrator
- Check logs — Set
LOG_LEVEL=debugto see all events the bot processes
Rate Limiting
Telegram limits bots to ~30 messages per second to a channel. The grammY framework handles rate limiting automatically:
- Messages may be delayed but won't be dropped
- The bot includes a retry helper that respects
retry_afterheaders - For very high activity, increase
POLL_INTERVAL_SECONDSto reduce event volume
RPC Connection Issues
- Public RPC endpoints have rate limits — for production use a dedicated RPC
- Set
SOLANA_RPC_URLSwith multiple endpoints for automatic failover - If WebSocket disconnects, the bot falls back to HTTP polling at
POLL_INTERVAL_SECONDS - The
RpcFallbackclass provides round-robin across configured endpoints - Set
LOG_LEVEL=debugto see connection status
Missing Claims
- GitHub claims only? — Set
REQUIRE_GITHUB=trueto only post GitHub social fee claims - Feed disabled? — Verify
FEED_CLAIMS=trueis set - SocialFeeIndex slow? — Initial bootstrap fetches ~148K accounts. This takes 30-60 seconds on startup. Check logs for
SocialFeeIndex: loaded N mappings - Rate limited? — GitHub API allows 60 req/hr unauthenticated. Set
GITHUB_TOKENfor 5,000 req/hr
Pipeline Stats
The bot logs pipeline counters every 60 seconds:
- total: All claim events received
- social: GitHub social fee PDA claims
- first/repeat: First-time vs. returning claimers
- posted: Successfully posted to Telegram
- skip cashback: Cashback claims (user refunds, not creator activity)
Web Dashboard
Two React frontends are checked in, and they are not the same app:
The features listed below describe web/web/. Both directories build clean today;
consolidating them onto one is still open work.
Deep links (/dashboard, /docs, ...) are client-side routes, so any static host
must rewrite unknown paths to index.html. Each app now ships a vercel.json with
that rewrite; on a non-Vercel host, configure the equivalent SPA fallback.
Pages
Dashboard Features
- Server-Sent Events (SSE) — Real-time streaming via
/api/v1/claims/streamwith auto-reconnect (3s delay) - Event Filters — All, Launches, Whales, Graduations, Claims, Distributions
- Live Stats Bar — Counters for each event type
- Watch Lists — Add/remove wallet addresses to monitor (
GET/POST/DELETE /api/v1/watches) - Rich Event Cards — Token launches, whale trades, graduations, fee claims with full context
- Connection Status — Visual indicator with error messages
- Mock Data Fallback — Simulated feed when SSE is unavailable
Tech Stack
MCP Server
The bot includes a built-in Model Context Protocol (MCP) server that lets AI assistants (Claude, Copilot, Cursor, etc.) query PumpFun on-chain data conversationally.
MCP Tools
Usage: Stdio Transport (Claude Desktop / Cursor / VS Code)
Add to your MCP client config (e.g. claude_desktop_config.json):
Or run from source:
Usage: Streamable HTTP Transport (Embedded)
Run alongside the main bot by setting MCP_ENABLED=true:
The MCP endpoint is available at POST /mcp on the configured port. Clients connect using the Streamable HTTP transport.
Example Queries
Once connected, ask your AI assistant:
- "Look up token info for mint address 7xKXt...p3Bz"
- "Has GitHub user 12345 ever claimed PumpFun fees?"
- "Who are the top holders of this token?"
- "Check if this token launch was bundled"
- "What's the current SOL price?"
Health Check API
The bot exposes an HTTP health check server for Railway / Docker probes.
Response:
- Returns 200 for
ok, 503 fordegraded - Dynamic stats injected via callback (pipeline counters, connection status)
- Port configurable via
PORTorHEALTH_PORTenv vars (default: 3000)
Testing
The project uses Vitest: 204 tests across 12 suites, all green on npm test.
Test Suites
Every suite lives in src/__tests__/ (plus fixtures.ts, shared sample data).
Local Development
Set LOG_LEVEL=debug — all events are logged to stdout regardless of whether they're posted to Telegram.
Tech Stack
Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
- Fork the repo
- Create a feature branch (
git checkout -b feat/my-feature) - Run tests (
npm test) and typecheck (npm run typecheck) - Open a Pull Request
Security
Found a vulnerability? Please report it responsibly — see SECURITY.md.
License
All rights reserved. See LICENSE.
Documentation
Full documentation site: https://nirholas.github.io/pumpfun-claims-bot/
- Getting started covers install and first run.
- Examples has copy-paste snippets.
Star History
Support the project
If pumpfun-claims-bot saves you time, star it on GitHub. Stars are how other developers and AI agents find the repositories worth trusting, and they cost you one click.
Know someone who would use it? Post on X · Share on Bluesky · Share on LinkedIn · Submit to Hacker News · Share on Reddit
Built for AI agents too
Coding agents and LLM tooling can read this repo directly: AGENTS.md, llms.txt, llms-full.txt. Point an agent at https://github.com/nirholas/pumpfun-claims-bot and it has the context it needs.
More from the same author
- All repositories by nirholas: the full catalog, grouped by topic
- three.ws: the platform for 3D AI agents with Solana wallets, a skill marketplace and x402 payments
- Questions or ideas: open an issue or start a discussion
Contributors
Source: README.md at commit 476cbb0
Tools
0Version history
1- v1.0.1LatestSep 16, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.