Skip to content

docs: add GroypFi MCP integration for perps & Groypad#8

Open
Renryog wants to merge 41 commits intoTONresistor:devfrom
Renryog:feature/groypfi-mcp-integration
Open

docs: add GroypFi MCP integration for perps & Groypad#8
Renryog wants to merge 41 commits intoTONresistor:devfrom
Renryog:feature/groypfi-mcp-integration

Conversation

@Renryog
Copy link

@Renryog Renryog commented Feb 27, 2026

This PR adds official documentation for the GroypFi Teleton plugin and Perps MCP server.
AI agents can now natively trade perpetual futures on GroypFi and launch tokens on Groypad using the built-in MCP client.

Full guide lives at https://groypfi.io/docs/groypad#teleton-plugin

Separate agent lifecycle from WebUI lifecycle so the agent can be
started/stopped at runtime without killing the WebUI server.

- Add AgentLifecycle state machine (stopped/starting/running/stopping)
- Refactor TeletonApp: extract startAgent()/stopAgent(), wire lifecycle
- Replace process.exit(1) with throw in agent start path
- Add REST endpoints: POST /api/agent/start, stop, GET /api/agent/status
- Add SSE endpoint: GET /api/agent/events (real-time state push)
- Add useAgentStatus hook (SSE + polling fallback + reconnection)
- Add AgentControl sidebar component (badge, play/stop, confirm dialog)
- 46 new tests (20 unit + 16 route/SSE + 10 E2E), 944 total passing
- Use StreamableHTTPClientTransport as primary for URL-based MCP servers
- Fall back to SSEClientTransport if Streamable HTTP connection fails
- Close original client/transport before fallback to prevent resource leaks
  (AbortController, sockets)
- mcpServers dep accepts lazy function for dynamic live status
- Connection failure log level: warn (non-fatal, optional servers)
- Improve error logging with stack traces on connection failure
- mcpServers passed as lazy function () => [...] for live status (not a
  snapshot frozen at startup)
- Add streamable-http detection in type guard (command → stdio,
  url → streamable-http, else → sse)
- McpServerInfo.type extended with 'streamable-http' in API types
- Unused params prefixed with _ to satisfy noUnusedParameters
- Wrap entire sendJetton flow in try/catch for consistent PluginSDKError
  propagation — raw errors no longer bubble up untyped
- Remove SendMode.IGNORE_ERRORS: transaction errors are now surfaced
  instead of silently swallowed
- Fix || → ?? on jetton decimals: prevents 0-decimal tokens from
  incorrectly falling back to 9 decimals
- btn-danger: red accent → neutral surface/border (glass style)
- alert.success / alert.error: green/red backgrounds → uniform
  rgba(255,255,255,0.04) with subtle border
…l counts

- Replace DeepWiki badge with docs badge linking to docs.teletonagent.dev
- Update LLM provider count from 6 to 10 (add Moonshot, Mistral, Cocoon, Local)
- Update built-in tools count from 114 to 100+
GET /api/plugins was returning a stale snapshot created at WebUI init,
before startAgent() loaded external plugins into this.modules.

Now computes dynamically from deps.marketplace.modules (live reference)
using the same isPluginModule filter already used in marketplace routes.
Falls back to deps.plugins if marketplace is not configured.
Add a new "Claude Code (Auto)" provider that reuses the Anthropic API
but auto-reads OAuth tokens from the local Claude Code installation
(~/.claude/.credentials.json on Linux/Windows, macOS Keychain).

- Credential reader with intelligent caching (re-read on expiration)
- 401 retry in chatWithContext for expired tokens
- CLI onboard: auto-detect + confirm, fallback to manual key
- WebUI setup: detection panel with status, fallback button
- 20 tests (unit + integration + registration)
Detect SentCodeTypeFragmentSms from Telegram API and surface the
Fragment.com URL so users can retrieve their verification code via
TON wallet. Affects both WebUI setup wizard and CLI auth flow.
…seed phrase display in CLI setup

- Migrate utility model from claude-3-5-haiku-20241022 (EOL Feb 19) to claude-haiku-4-5-20251001
- Add confirm() prompt after seed phrase display so console.clear() doesn't wipe it
When a user replies to a message (DM or group), the agent now sees
an inline annotation like [↩ reply to sender: "quoted text"] before
the user message. Reply context is only fetched when the agent will
actually respond (no overhead for skipped group messages).

- Extract replyToMsgId in bridge.parseMessage() + persist in DB
- Add fetchReplyContext() on TelegramBridge with 5s timeout
- Add replyContext annotation in formatMessageEnvelope()
- Wire through handlers → runtime → envelope
- 9 new tests for envelope reply formatting
Dropdown menus were clipped by parent containers with overflow-y: auto
(e.g. modals). Render menu via createPortal to document.body with
position: fixed and z-index: 10000 to ensure dropdowns always appear
above all other UI elements.
Patches Dependabot alerts:
- hono: timing comparison hardening in basicAuth/bearerAuth
- ajv: ReDoS when using $data option
New tools (66 → 73):
- transcribe-audio: voice/audio transcription via TranscribeAudio API
- get-scheduled-messages, delete-scheduled-message, send-scheduled-now
- get-collectible-info: Fragment collectible lookup
- get-admined-channels: list admin public channels
- set-personal-channel: set/remove personal channel

Auto-transcription integrated in message handler for voice/audio messages.
Bump @mariozechner/pi-ai 0.52 → 0.54.
…ed model catalog

Dashboard: changing provider now requires entering and validating the API
key before the switch is applied. Providers without keys (claude-code,
cocoon, local) switch instantly. Adds provider-meta and validate-api-key
endpoints to config routes.

Extracts shared model-catalog.ts (60+ models across 11 providers) used by
CLI onboard, setup wizard, and dashboard — eliminates ~220 lines of
duplicated model options.

New/updated models:
- Anthropic: +claude-sonnet-4-6
- OpenAI: +gpt-5-pro, +gpt-5-mini, +gpt-5.1, +o4-mini, +codex-mini
- Google: +gemini-3-pro-preview, +gemini-3-flash-preview, +gemini-2.5-flash-lite
- xAI: +grok-4-1-fast, +grok-code-fast-1
- OpenRouter: +claude-sonnet-4-6, +deepseek-r1-0528, +deepseek-v3.2/v3.1,
  +qwen3-coder/max/235b, +nemotron-nano-9b, +sonar-pro, +minimax-m2.5

Updates README: tool count 66→73, 11 providers, supported models table,
dashboard provider switching, current model names in config example.
…ollution

Model selection was in a separate "Config" step, far from provider/API key
selection. Users expect to pick their model right after choosing a provider.
Moved it into the Provider step (CLI advanced mode + WebUI).

Also fixes a bug where pino-pretty's async worker thread would emit workspace
creation logs after the inquirer prompt was already rendered, corrupting the
CLI display and requiring an extra Enter press. Added silent option to
ensureWorkspace to suppress logs during the interactive wizard.
Reorder both CLI and WebUI setup wizards to group Telegram credentials
right before the Connect step instead of early in the flow. New order:
Welcome > Provider > Config > Wallet > Telegram > Connect.

- Move userId (Admin ID) from Telegram step to Config step
- Wallet: always offer Generate/Import choice (was auto-generating)
- Modules: remove interactive trading thresholds, make bot token recommended
- Deals auto-disabled when no bot token is configured
- Deals buy_max_floor_percent default: 100 > 95
- Update server-side validation + tests to match new step order
Extract shared hooks and components from the monolithic Dashboard:
- useConfigState hook for shared state management
- AgentSettingsPanel and TelegramSettingsPanel components
- PillBar tab navigation component

Dashboard now shows only status, memory, and quick-access settings.
Config page uses pill-bar tabs (LLM, Telegram, Session, API Keys, Advanced)
for the full settings experience.

Also fixes embedding model cache dir creation on fresh install
and surfaces the Update All button in the Plugins installed tab.
- Add array type support with ArrayInput component
- Add labels and option labels to all config keys
- Add Telegram keys (admin_ids, allow_from, rate limits, etc.)
- Add Deals, Embedding, Cocoon and Agent base_url keys
- Auto-sync owner_id to admin_ids
- Remove deprecated "pairing" DM policy
- Persist GramJS bot session to disk
- Memory sources browser with chunk viewer
- Workspace raw image preview with MIME detection
- Tool RAG persistence to YAML + alwaysInclude/skipUnlimitedProviders
- Tasks bulk clean by terminal status
- Wire gramjsSessionPath in deals module for bot session persistence
- Fix Soul editor textarea to fill available height
TONresistor and others added 11 commits February 25, 2026 06:35
Replace green (#30D158) with accent blue (#0A84FF) on checked toggles
for visual consistency with button styling.
Add check, set, and create-with-username support for channel public usernames via GramJS channels.CheckUsername and channels.UpdateUsername APIs.
Unified save patterns across all config tabs:
- Text/number fields: dirty-state inline Save/Cancel (replaces blur-save)
- Toggles/selects: immediate save on change (unchanged)
- API keys: password field with Set/Not set badge

New components: InfoTip (hover tooltip on all field labels),
EditableField (dirty detection + Save/Cancel), ConfigSection
(generic renderer by field type). Added hotReload metadata to
all 43 config keys with restart badge on 6 keys.

Removed renderKeyValueList, absorbed all Telegram keys into
TelegramSettingsPanel, replaced Session/API Keys/Advanced tabs
with ConfigSection.
Add toncenter_api_key across config, CLI wizard, and WebUI setup.
Centralize TonClient via getCachedTonClient() with automatic API
key injection and cache invalidation on 429/5xx.

Dynamic TonAPI rate limiting: 5 rps with key, 1 rps without.
Merge ModulesStep into ConfigStep with clearer field descriptions.
Frosted-glass tooltip with smooth CSS transitions.
- Migrate Ston.fi from DEX.v1 to dexFactory pattern with proper
  Jetton→TON swap path (was silently failing)
- Wrap all transactional tools in withTxLock() to prevent seqno
  races on concurrent calls
- Remove SendMode.IGNORE_ERRORS — failed on-chain actions now
  bounce back instead of silently losing funds
- Normalize addresses to user-friendly format
- Reject zero-amount jetton transfers (exclusiveMinimum)
- Disable link preview in Telegram notifications
- Keep typing status active during long agent responses (4s refresh)
- Retry LLM server errors (500/502/503/529) with exponential backoff
- Retry GramJS connection on transient DC overload
- Deduplicate incoming messages to prevent double-processing
- Fix compaction API key for claude-code provider
- Dashboard: status bar, side-by-side settings, integrated live logs (removes Logs page)
- Tools: table layout with search and enabled/disabled counters
- Plugins: redesigned management UI
- Config: merge Session into Advanced, move Tool RAG to Advanced tab
- Telegram settings: split into core and advanced cards, fix section title contrast
- Setup wizard: PasswordInput for API keys, masked keys in review step
- InfoTip: WCAG-compliant tooltips (keyboard, Escape, aria)
- Keyboard navigation on all interactive table rows
- Config API keys (tonapi, toncenter) invalidate caches on change
…on Groypad

- Adds Teleton plugin guide
- Perps MCP tools
- MCP plugin configuration examples
- Closes #<issue-if-any>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants