Skip to main content
Glama

gavel-mcp-server

Aletheia Analytics MCP-сервер — агент-нативный интерфейс к продуктовым данным Gavel.

Тонкая TypeScript-обёртка вокруг api.thegavel.io. Предоставляет кредитные данные Gavel и ончейн-индикаторы Bitcoin как MCP-инструменты, чтобы LLM-управляемые агенты (Claude Desktop, IDE-клиенты, кастомные агенты) могли читать продуктовые данные без ручной склейки с REST.

Статус

Все три уровня спецификации AI-консьержа (aletheia-docs data/specs/mcp/ai_concierge.md) работают, плюс поверхность индикаторов и реальное разрешение ключ→уровень. Поставлено Runbook R18 и регулируется заметкой о решениях data/specs/mcp/tier_and_scope_decisions_v1.md (MD1–MD12).

Слой A — чтение состояния

Инструмент

Источник

check_wallet_status

прямой RPC (балансы, разрешения, блокировки готовности)

find_auctions_matching_criteria

/v1/auctions

get_user_positions

/v1/user/:address/positions

get_loan_status

/v1/loans/:id/status

Слой B — фабричная модель (неподписанные чертежи; подписывает пользователь)

Инструмент

Кодирует

prepare_bid_calldata

placeBid + одобрение, если allowance не хватает

prepare_create_auction_calldata

createAuction + одобрение залога

prepare_repay_loan_calldata

repayLoan + одобрение погашения

prepare_claim_collateral_calldata

claimCollateral

prepare_claim_refund_calldata

claimRefund

Слой C — каталоги

Инструмент

Примечания

list_wallet_options

статический каталог, без ранжирования

recommend_fiat_onramp

статический каталог; несёт требование газа для двух покупок

Поверхность данных

Инструмент

Источник

list_gavel_indicators

статический каталог из 32 индикаторов

get_gavel_indicator

/v1/credit/*, /v1/onchain/*, /v1/market/*

get_yield_curve

/v1/yield-curve

get_mvrv

/v1/onchain/mvrv

get_protocol_reference

статический — адреса, сигнатуры, соглашения

list_onchain_indicators

статический каталог

Инвариант

Aletheia строит; пользователь подписывает. В этой кодовой базе нет поверхности подписания — ни кошелька, ни аккаунта, ни ключевого материала. viem импортируется только для encodeFunctionData. Именно это делает «Aletheia никогда не подписывает» архитектурным фактом, а не обещанием политики, и так должно оставаться.

Не менее важно: ни один инструмент не ранжирует, не оценивает и не выбирает от имени пользователя. Фильтрация по заданным пользователем критериям — это информационная услуга; ранжирование по внутренней модели — инвестиционный совет. find_auctions_matching_criteria назван так намеренно, и это название не косметическое.

Related MCP server: Stelar Signals MCP

Архитектура

LLM Client → mcp.thegavel.io (this server) → api.thegavel.io (REST) → PostgreSQL
              [tool catalog, descriptions,        [authoritative endpoints]
               response shaping, auth, limits]

Единый источник истины: REST API. MCP-сервер никогда не обращается к Postgres напрямую. Инструменты формируют ответы для потребления LLM (текстовый контент в JSON-строке), но никогда не перереализуют бизнес-логику. Когда REST API обновляется, MCP автоматически наследует обновление.

Локальная разработка

# Install deps (Node 20+)
npm install

# Copy and edit env file
cp .env.example .env
nano .env  # set GAVEL_API_BASE_URL etc.

# Dev mode (tsx watch)
npm run dev

# Type check
npm run typecheck

# Build to dist/
npm run build

Направьте клиент разработки MCP (MCP Inspector, Claude Desktop с HTTP-коннектором) на http://localhost:3002/mcp, чтобы опробовать инструменты.

Развёртывание

Цель: хост Hetzner gavel-btc, рядом с gavel-api.

# Local — build and stage
npm install
npm run build

# Copy to server
scp -r dist/ package.json package-lock.json deployment/ \
    root@gavel-btc:/root/gavel-mcp/

# On server — install runtime deps (not the full dev set)
ssh root@gavel-btc
cd /root/gavel-mcp
npm install --omit=dev

# Configure
cp .env.example .env
nano .env
# Set:
#   GAVEL_API_BASE_URL=https://api.thegavel.io  (public API, for tool reads)
#   GAVEL_API_INTERNAL_URL=http://127.0.0.1:4012  (loopback, for tier lookup)
#   INTERNAL_API_SECRET=<must match gavel-indexer/.env.mainnet>
#   PORT=3002
#   NODE_ENV=production

# Install systemd unit
cp deployment/gavel-mcp.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable gavel-mcp.service
systemctl start gavel-mcp.service

# Verify
journalctl -u gavel-mcp -n 50 --no-pager
curl http://localhost:3002/health

# Reverse proxy
cp deployment/nginx-mcp.conf /etc/nginx/sites-available/mcp.thegavel.io
ln -s /etc/nginx/sites-available/mcp.thegavel.io \
      /etc/nginx/sites-enabled/mcp.thegavel.io
nginx -t && systemctl reload nginx

# TLS (Let's Encrypt)
certbot --nginx -d mcp.thegavel.io

# End-to-end check
curl https://mcp.thegavel.io/health

Конфигурация

Все настройки находятся в .env:

Переменная

По умолчанию

Назначение

PORT

3002

HTTP-порт прослушивания

NODE_ENV

—

production для JSON-логов

LOG_LEVEL

info

уровень pino (trace/debug/info/warn/error)

GAVEL_API_BASE_URL

http://localhost:3001

Базовый URL вышестоящего REST

RATE_LIMIT_ANONYMOUS_PER_MINUTE

60

Размер анонимного ведра

RATE_LIMIT_PAID_PER_MINUTE

300

Размер платного ведра

CORS_ALLOWED_ORIGINS

пусто

Через запятую; пусто = нет CORS

HEALTH_CHECK_SECRET

пусто

Если задан, /health требует ?secret=...

GAVEL_API_INTERNAL_URL

http://127.0.0.1:4012

Поиск ключ→уровень. Должен быть loopback-адрес — /internal/resolve-tier отклоняет любой запрос с X-Forwarded-For, поэтому публичный хост api.thegavel.io не подойдёт

INTERNAL_API_SECRET

пусто

Общий секрет для поиска уровня. Должен совпадать с gavel-indexer/.env.mainnet. Если не задан ⇒ каждый вызывающий разрешается как free

MCP_TIER_ENFORCEMENT

false

Принудительное применение уровней к инструментам. Оставьте false до Gate B — см. Модель уровней

ARBITRUM_RPC_URL

публичный RPC

Чтение цепочки для слоёв A/B. В продакшене укажите платную конечную точку

ARBITRUM_SEPOLIA_RPC_URL

публичный RPC

Эквивалент для тестнета

Модель уровней

Лестница: free / pro / enterprise — идентична продуктовой (gavel-indexer/lib/tiers.js) и тому, что продаёт Stripe. Изначальная anonymous / developer / professional / enterprise из каркаса была вторым словарём для одного права и удалена (MD1).

gavel-indexer/lib/api-keys.js — единственный авторитет по тому, какой уровень у ключа. MCP не открывает собственный пул базы данных; он запрашивает GET /internal/resolve-tier через loopback, кэширует ответ на 60 секунд и открывается вниз до free при любой ошибке. MCP данных, который выдаёт 500 из-за сбоя базы ключей, хуже, чем тот, который кратко обслуживает анонимно.

Принуждение написано, но ВЫКЛЮЧЕНО

MCP_TIER_ENFORCEMENT по умолчанию false, и это правильное состояние на сегодня. Монетизация отложена до Gate B (D16–D18): не стройте платёжный барьер, пока кто-то не попросил платить. Runbook A2 отозвал коммерческую поверхность, и www.thegavel.io/pricing в настоящее время заявляет, что доступ к данным бесплатен и открыт — так что отказ в инструменте и указание пользователю на страницу, которая отрицает существование уровней, было бы самопровергающим путём.

При выключенном флаге requireTier всё равно определяет реальный уровень вызывающего и логирует, что бы он отказал. Этот лог — доказательство для M6, условия ворот «кто-нибудь вообще просил платить?».

Перед включением прочтите MD2. Есть две несовместимые трактовки того, что означает платный MCP — плата за всю поверхность (lib/tiers.js несёт mcp: false на free) против платы за глубину (MD3, одобренная). Это очень разные продукты.

Что бесплатно и почему

Согласно MD3, наследуя карту маршрутов/глубины D5: сырое ончейн-состояние, обнаружение аукционов, статус кошелька, товарные ончейн-индикаторы, текущее значение любой оценки, производной от Gavel, и история — всё бесплатно. История бесплатна, потому что D9 отменил 30-дневный REST-лимит, и MCP не должен вводить заново забор, который отказалась от поверхности, которую он отражает. Платная граница — пакетная доставка, которую этот сервер не предлагает.

Участие никогда не ограничивается (D3). Каждый инструмент слоёв A/B/C — free: потенциальный участник торгов никогда не должен встретить платёжный барьер между решением сделать ставку и возможностью это сделать.

Лимиты скорости — защита инфраструктуры, а не биллинговый счётчик (D2), и применяются независимо от флага принуждения.

Повторное развёртывание изменения

npm run build            # tsc -> dist/ ; must be clean
systemctl restart gavel-mcp
systemctl is-active gavel-mcp
journalctl -u gavel-mcp -n 30 --no-pager

Этот сервис — systemd, а не pm2. pm2 на этом хосте несёт quorum-mcp-testnet, другой сервис — pm2 restart gavel-mcp — это no-op, который выглядит как успешное развёртывание. В R18 v1 это было неправильно; это записано в §8 этого ранбука.

Сервис запускает dist/, а не src/, поэтому изменение, которое не собрано, — это изменение, которое не развёрнуто.

Добавление инструмента

  1. Создайте src/tools/<category>/<name>.ts. Скопируйте credit/yield-curve.ts как шаблон — это самый чистый проработанный пример.

  2. Определите Zod-схему для входных данных с .describe() на каждом поле; это описание видит LLM при обнаружении инструмента.

  3. Напишите описание инструмента как многострочную строку. Начните с того, что такое индикатор, дайте интерпретационный контекст (ничего не рекомендуя), и задокументируйте форму ответа. MCP SDK использует это дословно в каталоге.

  4. Тело: requireTier(...) → upstreamGet(...) → вернуть { content: [{ type: 'text', text: JSON.stringify(...) }] }.

  5. Зарегистрируйте инструмент в src/tools/index.ts.

  6. Добавьте запись в src/tools/discovery/list-onchain.ts (или эквивалентный каталог обнаружения для этого домена).

Ручное тестирование

# 1. Health
curl -s http://localhost:3002/health | jq

# 2. MCP Inspector
npx @modelcontextprotocol/inspector
# Connect to http://localhost:3002/mcp
# Verify: tools/list returns 3 tools, get_yield_curve returns live data,
# get_mvrv returns a structured McpError "not found".

Лицензия

Проприетарная © 2026 Aletheia Analytics SASU. Все права защищены.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to perform complex crypto operations like cross-chain routing, contract decoding, portfolio management, and anti-rug security checks, returning unsigned transactions for safe signing by the agent.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Safe, read-only market data for AI trading agents, offering 44 tools to query prediction markets, perpetuals, and cross-venue signals without the ability to execute trades.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides LLMs and agents with read-only access to Magpie Capital's Solana lending protocol data, including live stats, collateral catalog, and per-token loan terms, plus guidance for agent borrowing via x402 endpoints.
    10 npm
    2
    MIT