pumpfun-claims-bot
PumpFun Claims Bot
Нужен интерактивный мониторинг? telegram-bot поддерживает управление списками отслеживания, групповые чаты, REST API, SSE-стриминг и вебхуки. Используйте этого channel-бота для простых каналов, где нужна только публикация.
Возможности
Типы лент
Лента | Описание | Переключатель |
Клеймы социальных комиссий GitHub | GitHub-разработчики, клеймящие награды PumpFun social fee PDA |
|
Градуации токенов | Токены, выходящие с bonding curve на PumpAMM |
|
Аналитика клеймов
Каждая карточка клейма социальной комиссии GitHub включает:
Возможность | Описание |
🟢 Оценка достоверности | Детерминированный вердикт 0-100 (Strong/Moderate/Caution/High Risk), синтезированный из всех сигналов доверия, с прозрачной разбивкой по факторам ± |
📊 История разработчика | Постоянная репутация каждого разработчика — предыдущие токены повторного разработчика и их средняя достоверность, так что серийный сборщик комиссий, чья новейшая монета выглядит чистой, раскрывается с первого взгляда |
🚨 Алерт о первом клейме | Баннер |
⚠️ Детекция фейковых клеймов | Определяет, когда вызывается инструкция |
📊 Счётчик клеймов | Последовательный номер клейма, постоянно отслеживаемый между перезапусками |
💹 SOL за всё время | Всего SOL, полученных из PDA за всё время |
👤 Профиль GitHub | Имя пользователя, био, репозитории, подписчики, возраст аккаунта, местоположение, блог |
𝕏 Соцсети | Профиль Twitter/X с количеством подписчиков (из профиля GitHub) |
🏅 Бейдж инфлюенсера | Уровневый бейдж для аккаунтов GitHub/X с большим числом подписчиков |
📈 Данные о токене | Статус выхода на AMM/bonding curve, прогресс кривой в %, возраст с момента создания, количество ответов |
🔗 Соцсети токена | Ссылки на Twitter, Telegram, сайт из метаданных токена |
🏷️ Флаги токена | Индикаторы NSFW, бана, кэшбэка |
⚠️ Сигналы доверия | Предупреждения для новых GitHub-аккаунтов (< 30 дней), нулевых репозиториев, фейковых клеймов |
🔗 Торговые ссылки | Ссылки Axiom, GMGN, Padre с аффилиат-кодами |
️ Изображение токена | Изображение токена или аватар GitHub в виде фото-карточки |
Карточки градуаций
Богатые карточки градуаций включают профиль создателя, анализ топ-холдеров, объём торгов за 24 часа, активность кошелька разработчика, ликвидность пула и детекцию бандлов.
Система уровней инфлюенсеров
Объединяет данные подписчиков GitHub и X/Twitter для классификации клеймеров:
Уровень | Бейдж | Подписчики X | Подписчики GitHub |
Мега | 🔥🔥 MEGA INFLUENCER | ≥ 100K | ≥ 10K |
Инфлюенсер | 🔥 Influencer | ≥ 10K | ≥ 1K |
Заметный | ⭐ Notable | ≥ 1K | ≥ 100 |
Достаточно одного порога из пары — пользователь с 50K подписчиков в X и 50 подписчиков в GitHub всё равно попадает в уровень Инфлюенсер.
Оценка достоверности и история разработчика
Каждая карточка клейма начинается с детерминированного вердикта достоверности 0-100, синтезированного из сигналов доверия, которые бот уже собирает, а также с постоянной истории разработчика по его предыдущим токенам.
Оценка детерминирована и прозрачна — одинаковые входные данные всегда дают одно и то же число, без вызова модели, и каждый балл привязан к именованному фактору, показанному под заголовком:
Уровень | Бейдж | Оценка |
Сильный | 🟢 | 75-100 |
Умеренный | 🟡 | 55-74 |
Осторожно | 🟠 | 35-54 |
Высокий риск | 🔴 | 0-34 |
Расчёт начинается с нейтральных 50 и корректируется взвешенными факторами: проверка клейма (+22 или -20 при несовпадении владельца GitHub), возраст аккаунта (+14 за 5+ лет, вплоть до -18 за < 30 дней), публичные репозитории, подписчики, звёзды на не-форк-репозитории, копикаты (-10/-16), бандлинг, концентрация холдеров, предыдущие скамы и баны.
История разработчика превращает разовую оценку в память. Каждая оценка сохраняется за идентификатором клеймящего GitHub-пользователя и персистится, поэтому при следующем запуске токена этим разработчиком карточка покажет его историю — выставляя напоказ серийного сборщика комиссий, чья новая монета выглядит чистой, и отдавая должное билдеру с реальными заслугами:
🟢 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-резюме клеймов
Первые клеймы получают однострочную AI-оценку, сгенерированную Groq (llama-3.3-70b-versatile):
Анализирует 30+ сигналов: метаданные токена, профиль GitHub, историю создателя, торговую активность
Максимум 120 символов — прямо, со своей позицией, с фокусом на трейдера
Тайм-аут 5 секунд с корректным запасным вариантом (пустая строка при сбое)
HTML-санитизированный вывод, безопасный для Telegram
Примеры:
«Настоящий 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) │
└───────────────────┘Отказоустойчивость Multi-RPC
Класс RpcFallback управляет несколькими Solana RPC-эндпоинтами с автоматической ротацией:
Ротация по кругу после 3 подряд неудач на любом эндпоинте
Пауза 60 секунд для каждого сбойного эндпоинта перед повторной попыткой
Фолбэк по ближайшему истечению — если все эндпоинты на паузе, выбирается тот, чья пауза истекает раньше всех
Успех сбрасывает счётчик — один успешный вызов сбрасывает счётчик неудач
Настройка через
SOLANA_RPC_URLS(через запятую)
Отслеживаемые программы
Программа | ID | Назначение |
PumpFees |
| Распределение комиссий, клеймы social fee PDA |
Pump |
| Bonding curve (градуации) |
PumpAMM |
| AMM (события градуированных пулов) |
Установка
npm (MCP-сервер — рекомендуется для AI-ассистентов)
Запустите MCP-сервер мгновенно с помощью npx — клонирование не требуется:
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 на npm
Из исходников (полный бот + Telegram-лента)
git clone https://github.com/nirholas/pumpfun-claims-bot.git
cd pumpfun-claims-bot && npm installБыстрый старт
1. Создайте Telegram-бота
Напишите @BotFather в Telegram
/newbot→ следуйте подсказкам → скопируйте токен ботаСоздайте публичный канал (например,
@pumpfunclaims)Добавьте бота в канал как администратора (требуется разрешение «Отправлять сообщения»)
2. Настройте окружение
cp .env.example .env# ── Required ──────────────────────────────────────────────
TELEGRAM_BOT_TOKEN=your-bot-token-from-botfather
CHANNEL_ID=@your_channel_name # or numeric chat ID like -100xxx
# ── Solana RPC ────────────────────────────────────────────
SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=your-key
SOLANA_WS_URL=wss://mainnet.helius-rpc.com/?api-key=your-key
# Comma-separated fallback RPCs (rotates on 429/5xx/timeout)
SOLANA_RPC_URLS=https://mainnet.helius-rpc.com/?api-key=key1,https://your-other-rpc.com
# ── Feed Toggles (all default false except FEED_CLAIMS) ───
FEED_CLAIMS=true # GitHub social fee claims (default: true)
FEED_GRADUATIONS=false # Token graduations to PumpAMM (default: false)
FEED_LAUNCHES=false # New token launches (default: false)
FEED_WHALES=false # Large buy/sell whale alerts (default: false)
FEED_FEE_DISTRIBUTIONS=false # Creator fee distribution events (default: false)
# ── Claim Filter ──────────────────────────────────────────
REQUIRE_GITHUB=true # Only post claims with GitHub social fee PDA (default: true)
# ── Enrichment APIs ───────────────────────────────────────
GITHUB_TOKEN=ghp_your_token # Raises GitHub rate limit: 60 → 5000 req/hr
GROQ_API_KEY=gsk_your_key # Groq API for AI one-liner summaries
# X/Twitter follower counts & influencer detection
# Get cookies from x.com DevTools → Application → Cookies
# X_AUTH_TOKEN=your_auth_token_cookie
# X_CT0_TOKEN=your_ct0_cookie
# ── Affiliate Ref Codes ───────────────────────────────────
# Appended to Axiom / GMGN / Padre trading links in cards
# AXIOM_REF=your_ref
# GMGN_REF=your_ref
# PADRE_REF=your_ref
# ── Tuning ────────────────────────────────────────────────
POLL_INTERVAL_SECONDS=30 # HTTP polling fallback interval (default: 30)
WHALE_THRESHOLD_SOL=10 # Minimum SOL for whale alerts (default: 10)
LOG_LEVEL=info # debug | info | warn | error (default: info)
# ── Health Check ──────────────────────────────────────────
# PORT=3000 # Set automatically by RailwayСправочник переменных окружения
Переменная | Обязательно | По умолчанию | Описание |
| ✅ | — | Токен бота — напишите @BotFather → |
| ✅ | — | Канал для публикации ( |
| ✅ |
| Основной HTTP RPC Solana — бесплатный тариф на Helius, QuickNode или Alchemy |
| — | Производное от | WebSocket URL Solana — тот же провайдер, что и |
| — | — | Резервные RPC URL через запятую — автоматическая ротация при 429 / 5xx / таймауте |
| — |
| Публиковать карточки заявок на социальные сборы GitHub |
| — |
| Публиковать карточки выпуска токенов |
| — |
| Публиковать карточки запуска новых токенов |
| — |
| Публиковать оповещения о крупных покупках/продажах |
| — |
| Публиковать события распределения комиссий создателей |
| — |
| Пропускать заявки без GitHub социального PDA комиссии |
| — | — | GitHub PAT — создайте здесь (права не нужны) — повышает лимит запросов с 60 до 5000 в час |
| — | — | Ключ API Groq для AI-сводок в одну строку — получите бесплатный ключ на console.groq.com |
| — | — | Cookie |
| — | — | Cookie |
| — | — | Реферальный код для торговых ссылок Axiom |
| — | — | Реферальный код для торговых ссылок GMGN |
| — | — | Реферальный код для торговых ссылок Padre |
| — |
| Интервал HTTP-опроса при недоступности WebSocket |
| — |
| Минимальный размер сделки в SOL для срабатывания оповещения о ките |
| — |
| Уровень детализации логов: |
| — |
| Порт HTTP-сервера проверки здоровья — автоматически устанавливается Railway |
| — |
| Включить MCP-сервер (Model Context Protocol) для интеграций с AI-ассистентами |
| — |
| HTTP-порт MCP-сервера (транспорт Streamable HTTP) |
3. Запуск
# Install dependencies
npm install
# Development (hot reload via tsx)
npm run dev
# Production
npm run build
npm start4. Развертывание с Docker
docker build -t pumpfun-channel-bot .
docker run -d --env-file .env pumpfun-channel-bot5. Развертывание на Railway
Railway автоматически развертывает из GitHub и предоставляет постоянные тома для данных отслеживания заявок.
# Install Railway CLI
npm install -g @railway/cli
railway login
# Create & link project
railway init
railway link
# Set environment variables
railway variables set TELEGRAM_BOT_TOKEN=your-token
railway variables set CHANNEL_ID=@your_channel_name
railway variables set SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=your-key
railway variables set SOLANA_WS_URL=wss://mainnet.helius-rpc.com/?api-key=your-key
railway variables set FEED_CLAIMS=true
railway variables set REQUIRE_GITHUB=true
# Create persistent volume for claim tracker data
railway volume create --mount /app/data
# Deploy
railway upСм. railway.json для конфигурации развертывания:
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "DOCKERFILE",
"dockerfilePath": "Dockerfile"
},
"deploy": {
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 10
}
}Структура проекта
pumpfun-claims-bot/
├── src/
│ ├── index.ts # Entry point — wires monitors, enrichment, & Telegram posting
│ ├── config.ts # Environment variable loading & validation
│ ├── mcp-server.ts # MCP server — exposes tools via Streamable HTTP or stdio
│ ├── mcp-stdio.ts # Standalone MCP entry point (stdio transport)
│ ├── claim-monitor.ts # PumpFees program monitor (WebSocket + HTTP polling)
│ ├── claim-routing.ts # Decides which claims are posted, skipped, or re-routed
│ ├── claim-tracker.ts # First-claim detection + claim counter (persisted to disk)
│ ├── credibility.ts # Deterministic 0-100 credibility scoring
│ ├── dev-reputation.ts # Persistent per-developer track record store
│ ├── event-monitor.ts # Pump program log decoder (graduations, launches)
│ ├── social-fee-index.ts # SocialFeeIndex — maps SharingConfig PDAs → mints (~148K)
│ ├── formatters.ts # Rich HTML card builders for Telegram
│ ├── pump-client.ts # PumpFun HTTP API client (token info, creator profiles)
│ ├── github-client.ts # GitHub API client (user profiles, rate-limited cache)
│ ├── x-client.ts # X/Twitter profile fetcher + influencer tier logic
│ ├── groq-client.ts # Groq AI one-liner summaries
│ ├── rpc-fallback.ts # Multi-RPC failover with round-robin
│ ├── health.ts # HTTP health check server
│ ├── types.ts # Program IDs, discriminators, event types
│ └── logger.ts # Leveled console logger
├── src/__tests__/ # Vitest suites (203 tests) + shared fixtures
├── packages/web/ # React dashboard, mock-data build (see Web Dashboard)
├── web/web/ # React dashboard, live-SSE build (see Web Dashboard)
├── leaderboard-bot/ # Separate Telegram bot: GitHub dev earnings leaderboard
├── data/ # Persisted state (gitignored, Railway volume mount)
│ └── github-first-claims.json
├── Dockerfile # Multi-stage Docker build
├── railway.json # Railway deployment config
├── package.json
└── tsconfig.jsonКак это работает
Конвейер обнаружения заявок
Transaction detected on PumpFees program
│
▼
Identify instruction: claim_social_fee_pda?
│
├─ YES ──▶ Parse platform (2 = GitHub) + user_id from Anchor args
│ │
│ ▼
│ Check amountLamports from SocialFeePdaClaimed event
│ │
│ ├─ amountLamports > 0 ──▶ Real claim
│ │ ├─ Check ClaimTracker: first time for this GitHub user?
│ │ │ ├─ YES ──▶ 🚨 FIRST TIME CLAIM banner
│ │ │ └─ NO ──▶ Standard claim card
│ │ └─ Enrich: GitHub API + PumpFun API + X profile
│ │
│ └─ amountLamports = 0 ──▶ ⚠️ FAKE CLAIM (instruction called, no payout)
│
└─ NO ───▶ Other claim type (creator fee, cashback, etc.)Инициализация SocialFeeIndex
При запуске бот получает все аккаунты SharingConfig из программы PumpFees для построения обратного сопоставления адресов PDA социальных комиссий с минтами токенов. Это позволяет определить, к какому токену относится заявка на социальную комиссию, без дополнительных RPC-вызовов.
~148K сопоставлений загружается при запуске
Инкрементальные обновления через WebSocket-подписку на события
CreateFeeSharingConfigиUpdateFeeSharesПоиск:
socialFeeIndex.getMintForPda(pdaAddress)→ минт токенаОдин PDA → много минтов — обрабатывает мошенников, которые переиспользуют PDA для нескольких токенов
Обнаружение фейковых заявок
Некоторые пользователи вызывают инструкцию claim_social_fee_pda для случайных PDA токенов, где у них нет комиссий для получения. Бот обнаруживает такие вызовы, проверяя:
Дискриминатор инструкции совпадает с
claim_social_fee_pdaВ логах транзакции нет события
SocialFeePdaClaimed— ИЛИ событие показываетamountLamports = 0Идентификатор пользователя GitHub и платформа по-прежнему извлекаются из аргументов инструкции (формат Anchor Borsh)
Фейковые заявки публикуются с предупреждением ⚠️ FAKE CLAIM и сигналом доверия 🚩 Fake claim — no fees paid out.
Отслеживание первых заявок
ClaimTracker поддерживает постоянный набор идентификаторов пользователей GitHub, которые успешно подали заявку:
Набор в памяти для быстрого поиска во время обработки
Отложенная запись на диск (задержка 5 секунд) в
data/github-first-claims.jsonРаздельный паттерн проверки/отметки:
hasGithubUserClaimed()проверяет без побочных эффектов,markGithubUserClaimed()вызывается только после успешной публикации в TelegramСчетчик заявок:
incrementGithubClaimCount()возвращает порядковый номер заявки для каждого пользователяСтатус первой заявки НЕ устанавливается для фейковых заявок
Трехуровневая проверка первой заявки
Локальная дедупликация — пропуск, если уже опубликовано (переживает перезапуски через сохраненный JSON)
Проверка в цепочке —
lifetimeClaimedLamports == amountLamportsподтверждает, что это действительно первая заявка в цепочкеБезопасный откат — пропускает баннер первой заявки, если проверка не удалась (предотвращает ложные срабатывания после повторного развертывания)
Пример карточки заявки
🚨🚨🚨 FIRST TIME CLAIM 🚨🚨🚨
🐙 $PUMP — PumpCoin 💹 $45K
↳ GitHub dev claimed PumpFun social fees
📊 Claim #1 · 0.1043 SOL lifetime ($15.65)
🏦 0.1043 SOL ($15.65)
↳ 8mNp...4rWz
👤 nirholas (Nicholas)
↳ 📦 45 · 👁 200 · 📅 5y ago
TypeScript SDK builder
𝕏 nichxbt · 1.2K
📈 Bonding curve (72%) · Created 3h ago · 💬 12
𝕏 @pump_coin · 💬 TG · 🌐 pumpcoin.io
⚠️ GitHub account created 15d ago
CA: 7xKXt...p3Bz
Axiom · GMGN · Padre
🔍 TXТребования
Node.js >= 20.0.0
Токен бота Telegram (через @BotFather)
Канал Telegram с ботом, добавленным как администратор
RPC-эндпоинт Solana — рекомендуется выделенный RPC (Helius, QuickNode, Triton). Публичная mainnet работает, но может ограничивать частоту запросов.
Токен GitHub (необязательно) — повышает лимит API с 60 до 5 000 запросов в час
Устранение неполадок
Бот не публикует сообщения
Проверьте права бота — бот должен быть администратором канала с правом "Отправка сообщений"
Проверьте CHANNEL_ID — используйте
@channel_nameдля публичных каналов или числовой ID (например,-100xxx) для приватных. Чтобы найти числовой ID, перешлите сообщение из канала @userinfobotОшибка Telegram 403 — означает, что бот НЕ является участником/администратором канала. Добавьте его через настройки канала → Администраторы → Добавить администратора
Проверьте логи — установите
LOG_LEVEL=debug, чтобы видеть все события, которые обрабатывает бот
Ограничение частоты запросов
Telegram ограничивает ботов примерно 30 сообщениями в секунду на канал. Фреймворк grammY автоматически обрабатывает ограничение частоты:
Сообщения могут задерживаться, но не будут отброшены
Бот включает помощник повтора, который учитывает заголовки
retry_afterПри очень высокой активности увеличьте
POLL_INTERVAL_SECONDS, чтобы уменьшить объем событий
Проблемы с RPC-подключением
Публичные RPC-эндпоинты имеют ограничения частоты — для продакшена используйте выделенный RPC
Установите
SOLANA_RPC_URLSс несколькими эндпоинтами для автоматического переключенияЕсли WebSocket отключается, бот переключается на HTTP-опрос с интервалом
POLL_INTERVAL_SECONDSКласс
RpcFallbackобеспечивает циклический перебор настроенных эндпоинтовУстановите
LOG_LEVEL=debug, чтобы видеть статус подключения
Отсутствующие заявки
Только заявки GitHub? — установите
REQUIRE_GITHUB=true, чтобы публиковать только заявки на социальные комиссии GitHubЛента отключена? — проверьте, что установлено
FEED_CLAIMS=trueSocialFeeIndex медленный? — начальная инициализация загружает ~148K аккаунтов. Это занимает 30-60 секунд при запуске. Проверьте логи на наличие
SocialFeeIndex: loaded N mappingsОграничение частоты? — GitHub API позволяет 60 запросов/час без аутентификации. Установите
GITHUB_TOKENдля 5 000 запросов/час
Статистика конвейера
Бот записывает счетчики конвейера каждые 60 секунд:
Pipeline: 15 total → 8 social → 3 first / 5 repeat → 8 posted (skip: 7 cashback)total: все полученные события заявок
social: заявки на социальные комиссии GitHub PDA
first/repeat: впервые подавшие vs. повторные заявители
posted: успешно опубликовано в Telegram
skip cashback: кэшбэк-заявки (возвраты пользователям, не активность создателей)
Веб-панель
В репозиторий включены два React-фронтенда, и это не одно и то же приложение:
Каталог | Что это | Сборка |
| Полная панель управления: поток событий SSE, списки наблюдения, SEO-активы ( |
|
| Более ранняя, уменьшенная копия того же интерфейса. Его панель управления отображает сгенерированные примеры событий без SSE-клиента. |
|
Перечисленные ниже возможности описывают web/web/. Оба каталога сегодня собираются без ошибок;
объединение их в один — всё ещё открытая задача.
Глубокие ссылки (/dashboard, /docs, ...) — это клиентские маршруты, поэтому любой статический
хостинг должен перенаправлять неизвестные пути на index.html. Каждое приложение теперь поставляется с vercel.json,
содержащим такое перенаправление; на хостинге, отличном от Vercel, настройте эквивалентный SPA-fallback.
Страницы
Страница | Маршрут | Описание |
Главная |
| Посадочная страница с обзором проекта |
Панель |
| Живая лента событий с потоковой передачей SSE |
Создать монету |
| Интерфейс создания токена |
Документация |
| Документация API и команды Telegram |
Пакеты |
| Обозреватель пакетов |
Возможности панели управления
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-сервер
Бот включает встроенный Model Context Protocol (MCP) сервер, который позволяет ИИ-ассистентам (Claude, Copilot, Cursor и др.) запрашивать ончейн-данные PumpFun в диалоговом режиме.
MCP-инструменты
Инструмент | Описание |
| Метаданные токена, рыночная капитализация, прогресс bonding curve, флаги |
| Крупнейшие держатели с метриками концентрации |
| Недавняя торговая активность — объём, количество покупок/продаж |
| Ликвидность пула AMM PumpSwap для выпущенных токенов |
| Обнаружение бандлов (индикатор скама) |
| История запусков создателя, оценка скама, недавние монеты |
| Профиль GitHub по имени пользователя или числовому ID |
| Статус клеймов для пользователя GitHub — количество, заявленные минты |
| Текущая цена SOL/USD |
Использование: транспорт Stdio (Claude Desktop / Cursor / VS Code)
Добавьте в конфигурацию вашего MCP-клиента (например, claude_desktop_config.json):
{
"mcpServers": {
"pumpfun": {
"command": "npx",
"args": ["pumpfun-claims-bot"]
}
}
}Или запустите из исходников:
# Development (tsx)
npm run mcp:dev
# Production (compiled)
npm run build && npm run mcpИспользование: потоковый HTTP-транспорт (встроенный)
Запускается вместе с основным ботом при установке MCP_ENABLED=true:
MCP_ENABLED=true MCP_PORT=3001 npm run devКонечная точка MCP доступна по адресу POST /mcp на настроенном порту. Клиенты подключаются с использованием потокового HTTP-транспорта.
Примеры запросов
После подключения спросите вашего ИИ-ассистента:
«Найди информацию о токене по адресу минта 7xKXt...p3Bz»
«Подавал ли пользователь GitHub 12345 когда-либо клеймы на комиссии PumpFun?»
«Кто крупнейшие держатели этого токена?»
«Проверь, был ли запуск этого токена бандлом»
«Какая текущая цена SOL?»
API проверки состояния
Бот предоставляет HTTP-сервер проверки состояния для проб Railway / Docker.
Конечная точка | Метод | Описание |
| GET | Статус здоровья с аптаймом и статистикой |
| GET | Псевдоним для |
Ответ:
{
"status": "ok",
"uptime": "12345s",
"uptimeMs": 12345000
}Возвращает 200 для
ok, 503 дляdegradedДинамическая статистика внедряется через колбэк (счётчики конвейера, статус подключения)
Порт настраивается через переменные окружения
PORTилиHEALTH_PORT(по умолчанию: 3000)
Тестирование
Проект использует Vitest: 203 теста в 11 наборах, все проходят при npm test.
# Run all tests
npm test
# Watch mode (re-runs on file changes)
npm run test:watchНаборы тестов
Каждый набор находится в src/__tests__/ (плюс fixtures.ts — общие примеры данных).
Набор | Файл | Покрытие |
Трекер клеймов |
| Обнаружение первого клейма, персистентность, счётчики, пожизненные итоги |
Маршрутизация клеймов |
| Какие клеймы публикуются, пропускаются или направляются в какую ленту |
Достоверность |
| Детерминированная оценка 0–100, факторная атрибуция, границы уровней |
Репутация разработчика |
| Персистентная история разработчика и средние показатели |
Форматтеры |
| Генерация HTML-карточек, экранирование, обработка null, крайние случаи |
GitHub-клиент |
| Разбор URL, обработка ответов API, поведение кэша |
Groq-клиент |
| Генерация ИИ-сводок, обработка ключей API, безопасность HTML |
Pump-клиент |
| Обработка ответов API токенов, держателей, сделок и создателей |
RPC-резерв |
| Ротация round-robin, кулдауны, обработка повторяемых ошибок |
X-клиент |
| Классификация уровней инфлюенсеров, форматирование подписчиков |
E2E-конвейер |
| Сквозное отслеживание клеймов, форматирование, лента GitHub |
Локальная разработка
# Install dependencies
npm install
# Run with hot reload (tsx)
npm run dev
# Type-check without emitting
npm run typecheckУстановите LOG_LEVEL=debug — все события записываются в stdout независимо от того, публикуются ли они в Telegram.
Технологический стек
Компонент | Технология |
Среда выполнения | Node.js >= 20 (ESM) |
Язык | TypeScript 5.7 (строгий режим) |
Блокчейн | Solana через |
Telegram | фреймворк grammY |
ИИ | Groq API (llama-3.3-70b-versatile) |
Фронтенд | React 18 + Vite 5 + Tailwind CSS |
Тестирование | Vitest |
Контейнер | Docker (многоступенчатый Alpine, non-root) |
MCP |
|
Хостинг | Railway (автодеплой из GitHub) |
Зависимости | 6 production, 4 dev — намеренно минимально |
Участие в разработке
Вклад приветствуется! См. CONTRIBUTING.md с рекомендациями.
Сделайте форк репозитория
Создайте ветку для функции (
git checkout -b feat/my-feature)Запустите тесты (
npm test) и проверку типов (npm run typecheck)Откройте Pull Request
Безопасность
Нашли уязвимость? Пожалуйста, сообщите о ней ответственно — см. SECURITY.md.
Лицензия
Все права защищены. См. LICENSE.
Документация
Полный сайт документации: https://nirholas.github.io/pumpfun-claims-bot/
Начало работы — установка и первый запуск.
Примеры — готовые фрагменты для копирования.
Available Tools
9 toolsget_bundle_infoB
Detect if a token launch was bundled (scam indicator)
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only states the tool's purpose but does not disclose what the tool returns (e.g., a boolean, a score, details), whether it makes external calls, or any side effects. For a detection tool, the output format and interpretation are critical, and this is not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the purpose. It is efficient and contains no fluff. However, it could be slightly more structured by including a note about the output or usage, but for its length, it is well-written.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a detection tool with a single parameter and no output schema), the description is incomplete. It does not explain what the tool returns, how to interpret the result, or any limitations. The agent would need to guess the output format, which is a significant gap for a tool that provides a scam indicator.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% for the single parameter 'mint', which is described as 'Token mint address'. The description adds no additional meaning beyond the schema, but since the schema fully covers the parameter, a baseline of 3 is appropriate. The description does not clarify the format or any constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: detecting if a token launch was bundled, which is a scam indicator. It uses a specific verb ('Detect') and resource ('token launch'), and it distinguishes itself from sibling tools like get_token_info or get_token_holders by focusing on the bundling scam aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for scam detection but does not explicitly state when to use this tool versus alternatives. It doesn't mention when not to use it or provide context on how it fits with other token analysis tools. The purpose is clear enough that an agent could infer usage, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_claim_historyA
Check claim history for a GitHub user — whether they have claimed, claim count, and which token mints they claimed from
| Name | Required | Description | Default |
|---|---|---|---|
| githubUserId | Yes | GitHub numeric user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly indicates this is a read-only operation ('Check claim history') and explains what information is returned (claim status, count, and token mints). However, it doesn't disclose any other behavioral traits like whether it requires authentication, rate limits, or any side effects, but for a simple read tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that is front-loaded with the purpose, then details what is checked. It is concise without unnecessary words, but it could be slightly more structured (e.g., separating purpose from details), yet it is efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and no output schema, the description is fairly complete for a simple query tool. It tells the agent what to expect (claim status, count, and token mints). However, it lacks information on edge cases, such as what happens if the user hasn't claimed anything or if the user ID is invalid, which would be helpful but not critical given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (only one parameter, githubUserId, which is described as 'GitHub numeric user ID'). The description adds context by explaining what the tool does with that user ID (checks their claim history), which is helpful. However, since the schema already fully documents the parameter, the baseline is 3, and the description doesn't add much beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Check') and specific resource ('claim history'), and distinguishes the tool from siblings by stating it checks 'whether they have claimed, claim count, and which token mints they claimed from'. This is specific and unambiguous, differentiating it from other get_* tools that focus on tokens or pools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you need to check a GitHub user's claim history), but it does not provide explicit guidance on when not to use it or alternatives. Unlike the high-scoring example, it doesn't name alternative tools or exclude scenarios, so it's adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creator_profileA
Fetch PumpFun creator profile — username, launch count, scam estimate, recent coins
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | Creator wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. The use of 'Fetch' implies a read-only operation, but it does not explicitly state that the tool does not modify data or mention any potential side effects, rate limits, or authentication requirements. It does, however, add context by listing the returned fields, which is helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that starts with the verb and resource, then lists the return fields. No unnecessary words or redundancy, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description adequately explains what the tool returns (username, launch count, scam estimate, recent coins), which is sufficient for an agent to understand the expected result. Complexity is low, and the description covers the key aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% since the wallet parameter has a clear description ('Creator wallet address'). The tool description does not add any additional meaning beyond the schema; it only lists the fields returned, not further elaboration on the parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a PumpFun creator profile and lists specific return fields (username, launch count, scam estimate, recent coins). This is a specific verb+resource that distinguishes it from sibling tools like get_token_info or get_github_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving creator profiles but does not explicitly state when to use it versus alternatives or any exclusions. It lacks guidance such as 'use when you need creator details' or when not to use it. The intent is clear from the resource type but not explicitly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_github_userB
Fetch GitHub user profile by username or numeric ID — repos, followers, bio, account age
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | GitHub numeric user ID | |
| username | No | GitHub username (login) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, and the description does not disclose any behavioral traits such as read-only nature, side effects, rate limits, or required permissions. The tool appears to be a simple fetch, but without explicit disclosure, the agent cannot assess side effects or constraints. This fails to carry the behavioral transparency burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that packs in the essential information: what it does, the input method, and the output scope. No unnecessary words or redundancy. It is well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides a partial view of the output (repos, followers, bio, account age) but does not mention error handling, return format, or any limitations. Since there is no output schema, the description should compensate more fully. However, given the simplicity of the tool, a score of 3 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear descriptions for each parameter ('GitHub numeric user ID' and 'GitHub username (login)'). The tool description adds meaningful clarification that either parameter can be used, reinforcing the intended usage. This goes beyond the schema's individual field descriptions, earning a high score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Fetch GitHub user profile' and specifies the input method ('by username or numeric ID') and the key data returned ('repos, followers, bio, account age'). This is a specific verb+resource statement that distinguishes it from other tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. While the sibling tools are clearly different (e.g., token info, pool liquidity), the description does not state conditions, exclusions, or preferences. It only describes the basic function, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pool_liquidityA
Fetch PumpSwap AMM pool liquidity for a graduated token
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address | |
| usdMarketCap | No | Current USD market cap (for context) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It states it fetches data, implying a read operation, but does not elaborate on whether the pool exists, what happens if the token is not graduated, or any specific data returned. It adds 'for a graduated token' which is useful, but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the main purpose. No wasted words. It is appropriately sized and conveys the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a simple purpose and full schema coverage, the description is adequate but could mention what data is returned (e.g., liquidity amounts, reserve values) even without an output schema. It lacks details on error cases or prerequisites, but is sufficient for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions. The description does not add additional meaning beyond the schema, but the schema already provides adequate guidance. Baseline of 3 is appropriate since no extra context is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and the specific resource ('PumpSwap AMM pool liquidity') qualified by 'for a graduated token'. It distinguishes the tool from siblings that fetch token info, holders, trades, etc., by focusing on liquidity of an AMM pool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage in the context of graduated tokens, which helps the agent understand when to use it (post-graduation). However, it does not explicitly mention when not to use it or alternatives, though siblings are available and the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sol_priceA
Fetch current SOL/USD price
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation ('Fetch') but does not mention any behavioral details such as return format, potential delays, rate limits, or whether it requires authentication. For a simple read tool this is acceptable but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, highly concise with zero filler. It is front-loaded with the key verb and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters, no nested objects, no output schema), the description is largely sufficient. However, it does not specify the exact return value (e.g., numeric price, string representation, or whether it includes historical data), which could leave slight ambiguity. Still, for a straightforward price getter, it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is trivially 100%. Per rubric, 0 parameters yields a baseline score of 4. The description adds no parameter details, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch current SOL/USD price' with a specific verb ('Fetch') and resource ('SOL/USD price'), distinguishing it from sibling tools like get_token_info or get_pool_liquidity. The purpose is unambiguous and directly maps to the tool's name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context for when to use this tool is obvious: whenever the user needs the current SOL/USD price. Since the tool has no parameters and a unique niche among siblings, no exclusions or alternatives are necessary. It is implicitly clear, though not explicitly expressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_holdersA
Fetch top holders for a PumpFun token including concentration metrics
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. The verb 'Fetch' implies a read-only operation, and it adds that concentration metrics are included, but it does not disclose any other behaviors such as rate limits, data volume, or potential errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action, and contains no unnecessary words. It is perfectly concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one parameter and no output schema. The description provides a sufficient overview of the output (top holders with concentration metrics), though it could specify more details like the number of holders or format of metrics, but this is adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the 'mint' parameter with a sufficient description ('Token mint address'), and the tool description does not add any extra meaning beyond what the schema provides. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches top holders for a PumpFun token and includes concentration metrics, which distinguishes it from sibling tools like get_token_info or get_token_trades.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that this is for top holder concentration analysis, but it does not explicitly mention alternatives or when not to use it. However, the purpose is clear enough that an agent would know when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_infoA
Fetch PumpFun token metadata, market cap, bonding curve progress, and flags
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly indicates a fetch/read operation and lists the returned data categories, but does not disclose potential behaviors such as whether the token must exist, how invalid addresses are handled, or whether data is cached. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that lists the resource and returned data categories. There is no filler, repetition, or unnecessary detail, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter metadata-fetch tool with no output schema, the description sufficiently covers what the tool returns. It could mention that the input must be a PumpFun token and could clarify what 'flags' means, but the overall context is adequate for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% because the only parameter 'mint' is described as 'Token mint address'. The description adds no additional parameter semantics beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and identifies the exact resource (PumpFun token metadata) plus the specific data categories returned (market cap, bonding curve progress, flags). This clearly differentiates from sibling tools like get_token_holders, get_token_trades, and get_pool_liquidity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need token metadata, market cap, bonding curve progress, or flags. However, it does not explicitly state when not to use it or point to alternative sibling tools for different data needs, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_tradesA
Fetch recent trade activity for a PumpFun token (volume, buy/sell counts)
| Name | Required | Description | Default |
|---|---|---|---|
| mint | Yes | Token mint address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'recent' trade activity, but does not define the time window (e.g., last 24h, last hour, etc.) or any behavior like pagination, rate limits, or whether this is a read-only operation. It does not disclose how the counts are aggregated (e.g., on-chain vs. API-source) or whether it includes wash trading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the main purpose, and every word adds value. No unnecessary details. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no nested objects, no output schema), so the bare description may be sufficient for an agent to know what it returns (volume, buy/sell counts). However, without annotations, more context on the 'recent' window or return format would increase completeness. Still, given its simplicity, it doesn't require extensive documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – the only parameter 'mint' is described as 'Token mint address', which is sufficient. The description adds context that the param is for a PumpFun token, but since the schema already covers the parameter adequately, the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and a specific resource ('recent trade activity for a PumpFun token') and mentions the key outputs (volume, buy/sell counts). It clearly distinguishes from siblings like get_token_info or get_token_holders by focusing strictly on trade activity (volume, buy/sell counts).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for trade monitoring, but it doesn't explicitly state when to use it vs alternatives (e.g., when tracking volume changes vs. holding distribution). No exclusions or alternatives are named, but in the context of sibling tools like get_token_holders or get_pool_liquidity, the purpose is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v1.0.4- First observed
get_bundle_info - First observed
get_claim_history - First observed
get_creator_profile - First observed
get_github_user - First observed
get_pool_liquidity - First observed
get_sol_price - First observed
get_token_holders - First observed
get_token_info - First observed
get_token_trades
TDQS
Each tool targets a distinct data resource: token info, holders, trades, liquidity, bundle status, creator profile, GitHub user, claim history, and SOL price. There is no meaningful overlap or ambiguity between tool purposes.
All tools follow a consistent get_<noun> pattern with snake_case, making the read-only nature and target resource immediately clear. No mixed conventions or vague verb variations exist.
Nine tools is a well-scoped size for a claims-verification bot. Each tool covers a distinct piece of the investigation workflow without unnecessary redundancy or bloat.
The toolkit covers token intelligence, holder analysis, liquidity, scam signals, creator background, GitHub identity, claim history, and SOL pricing—strong coverage for pre-claim due diligence. However, there is no active claim or eligibility-check action, which leaves a minor gap if the bot is expected to execute claims directly.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Real-time labelled pump.fun intelligence, paid per tool call with x402 (USDC on Solana). No API key.
1Solana address risk grades and token scans for AI agents. Pay-per-call via x402 (USDC on Base).
Solana onchain intelligence for AI agents: wallet risk, due-diligence, perps funding, smart money.
Rug pull risk and on-chain forensics for tokens on Solana, Ethereum, Base and Robinhood.
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time radar for Solana memecoins, Pump.fun launches, and KOL trades.82MIT
- AlicenseNot gradedqualityDmaintenanceSolana on-chain intelligence API — token scans, wallet PnL, bundle detection, fresh wallets, dev profiling. MCP server for Claude, Cursor & AI agents. Live PumpFun/Raydium streams1MIT

Pique Signalofficial
AlicenseAqualityCmaintenanceLive scored Solana memecoin signals with safety profiles, conviction scoring, and paper trading for AI agents.6MIT- FlicenseBqualityCmaintenanceReal-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.83-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nirholas/pumpfun-claims-bot'
If you have feedback or need assistance with the MCP directory API, please join our Discord server