Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Buy, sell and extend TRON Energy/Bandwidth on the TronSave market. Quotes need no login.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
Authorization标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
在终端中运行这条命令
claude mcp add --transport http tronsave https://mcp.tronsave.io/mcp --header 'Authorization: your-value'运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"tronsave": {
"url": "https://mcp.tronsave.io/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"tronsave": {
"type": "http",
"url": "https://mcp.tronsave.io/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
你的选择通过 Cookie 保存在这台设备上,无需账户。
Authorization 机密 HTTP header这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
工具名称和描述与服务器在 2026年11月6日 报告的完全一致。这些内容由作者撰写,不是我们写的;我们以纯文本形式显示。
tronsave_get_internal_accountRetrieve the Tronsave internal account profile for the current logged-in session (wallet/represent address, balances, deposit address). Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: Api
tronsave_get_deposit_addressFetches the specific deposit address for the TronSave internal account. Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client header. Never pass API keys as tool arguments; the
tronsave_internal_order_historyList paginated order history for the internal account linked to the API key, newest first. Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client header. Never pass API keys as t
tronsave_internal_order_detailsFetch full details for one internal-account order by order ID. Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client header. Never pass API keys as tool arguments; the server fo
tronsave_internal_order_bookReturn the current TronSave market depth/price tiers for ENERGY or BANDWIDTH via the api-key REST endpoint. Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client header. Never p
tronsave_internal_order_estimateEstimate the TRX cost and availability for a buy order before submitting it (api-key internal account). Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client header. Never pass
tronsave_internal_order_createPlace a new buy order for ENERGY or BANDWIDTH on TronSave, paid from the internal account balance. Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client header. Never pass API k
tronsave_internal_extend_delegatesReturn extendable delegations for a receiver plus an `extendData` payload for the extension flow. Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client header. Never pass API ke
tronsave_internal_create_extend_requestSubmit an extension request for existing delegated resources on TronSave via authenticated REST `POST /v2/extend-request`. Requires an internal API key: `tronsave_login` (api-key mode, or signature mode for a wallet with an internal account) or an `Authorization: ApiKey ` client
tronsave_get_sign_messageStep 1 of wallet login. Returns `{ message, timestamp }`: ask the user to sign `message` with their TRON wallet (TronWeb `signMessageV2`, TronLink, etc.), then call `tronsave_login` with `signature: " _ "`. Signing the plain decimal `timestamp` text is also accepted. No auth need
tronsave_loginLog in to TronSave for the rest of this MCP connection. Provide EXACTLY ONE of: `signature` = ` _ ` produced by the user's wallet over the `message` from `tronsave_get_sign_message` (unlocks wallet tools; also loads the wallet's internal API key if it has one), or `apiKey` = raw
tronsave_logoutRemove the TronSave login bound to this MCP connection (api-key or signature). Returns `{ loggedOut: true }`; idempotent. Header credentials configured on the client are not affected.
tronsave_get_session_statusReport the current authentication state without calling TronSave: `authMode` (none | api-key | signature), `source` (login | header), `walletAddress`, `hasInternalApiKey`, `expiresAt`, network, and which tool groups are available now. Call this first when unsure whether to log in
tronsave_get_user_infoRead the current authenticated user's profile and linked TronSave internal account. For the internal balance alone use `tronsave_get_internal_account`; for referral data `tronsave_get_referral`. Returns `{ caller, address, balance (SUN string), info, internalAccount }` — `info` c
tronsave_get_user_auto_settingRead the current user's auto-sell configuration (`autoSettings`). Returns the full `autoSettings` object — call this before `tronsave_register_auto_sell` or `tronsave_update_auto_sell_setting` to avoid overwriting fields you do not intend to change. Requires a wallet signature id
tronsave_get_user_permissionsRead the enabled permission operations (`autoSettings.permitOperations`) for the authenticated user. Returns `{ permitOperations: string[] }` — use it before mutating auto-sell or auto-buy rules to confirm the action is allowed for the wallet. Requires a wallet signature identity
tronsave_estimate_buy_resourceQuote price and availability for buying ENERGY or BANDWIDTH for a receiver address before placing an order. This quote feeds `tronsave_create_order`; for `tronsave_internal_order_create` (API key) quote with `tronsave_internal_order_estimate`. Returns `{ unitPrice (SUN/unit), dur
tronsave_get_orderRead one order by `id` and return its full snapshot for NORMAL, FAST, or EXTEND order types. With only an API key, use `tronsave_internal_order_details` instead. Use this as the source of truth before `tronsave_update_order`, `tronsave_sell_order_manual`, or `tronsave_cancel_orde
tronsave_list_ordersQuery the market order list with paging (`offset`, `limit` ≤ 10). For an API-key account's own purchases use `tronsave_internal_order_history`. Returns `{ orders: [{ id, requester?.address, receiver.address, resourceType, resourceAmount, remainAmount, durationSec, unitPrice (SUN)
tronsave_list_order_booksRead market depth buckets for `ENERGY` or `BANDWIDTH`. Public view; with an API key, `tronsave_internal_order_book` adds SLOW/MEDIUM/FAST price tiers. Returns price buckets `{ min, max, value }` optionally scoped by viewer address, minimum delegate amount, and duration. No login
tronsave_get_min_priceQuote the minimum unit price for a buy. Use when only the floor price matters; for a full purchase quote use `tronsave_estimate_buy_resource`, for a grid across amounts and durations `tronsave_get_price_table`. Returns `{ minPrice }` (SUN per resource unit; per day when `duration
tronsave_list_extendable_delegatesList extendable delegate candidates for a `receiver` and `resourceType` (ENERGY|BANDWIDTH). Optional `suggestData` scores an extend-and-buy scenario for planning purposes. Read-only; does NOT create orders or change on-chain state. No login required. NOTE: this is GraphQL market
tronsave_create_orderCreate a buy order for ENERGY/BANDWIDTH delegated to `orderReceiver`. SPENDS FUNDS — confirm the plan with the user first. API-key integrations paying from the internal balance can instead use `tronsave_internal_order_create` (FAST/MEDIUM/SLOW pricing, fill guards). Inputs: `orde
tronsave_sell_order_manualManually execute seller-side fulfillment of an existing order with a wallet `signedTx`. Returns `{ success, message, code, delegatedId }`. Side effect: broadcasts a market/delegation transaction and may consume balances/resources; not idempotent — each call re-executes. Requires
tronsave_cancel_orderCancel an open order by `orderId`. Returns `{ success, message, code }`. Side effect: marks the order non-matchable and refunds locked balance per backend rules; effectively destructive on the live order. Idempotent — cancelling an already-cancelled order is a no-op success. Fail
tronsave_update_orderUpdate an open order by `orderId` with partial fields (`receiver`, `newPrice`). Returns `{ success, message, code }`. Side effect: overwrites live order parameters; not idempotent — each call with a different `newPrice` produces a new state. Requires a wallet signature identity (
tronsave_register_auto_sellCreate the initial auto-sell configuration for the authenticated user. Returns the persisted `autoSettings` payload. Side effect: persists automation settings that affect future delegation/sell behavior; not idempotent — calling twice may reset fields. Requires a wallet signature
tronsave_update_auto_sell_settingUpdate the existing auto-sell configuration with partial fields. Returns the updated `autoSettings` payload. Side effect: overwrites stored automation settings for the current user; not idempotent across different field sets. Requires a wallet signature identity. Use for INCREMEN
tronsave_generate_api_keyGenerate a new internal API key credential for the current user. Returns `data` containing the issued key — show it to the user once and tell them to store it securely; do not repeat it in later messages. Side effect: issues secret material; not idempotent — each call mints a fre
tronsave_revoke_api_keyRevoke the caller's current internal API key. Side effect: any future request using the previous key is rejected. Existing in-flight sessions cached by the server may continue serving until their TTL expires — treat the effect as 'best-effort immediate' rather than guaranteed ins
tronsave_delete_auto_buy_settingPermanently delete one auto-buy rule by `id` (`MObjectId`). Side effect: stops all future executions matching that rule; the rule cannot be restored. Idempotent — deleting a non-existent or already-removed id returns success. Requires a wallet signature identity. Use `tronsave_ge
tronsave_get_market_overviewRead the TronSave market summary: resource currently available and total listed for ENERGY and BANDWIDTH, number of pooled sellers, and seller APY (percent). Use for a quick 'how is the market' answer before pricing; for prices use `tronsave_get_price_table` (grid) or `tronsave_e
tronsave_get_price_tableRead the price grid for ENERGY or BANDWIDTH: `prices[i][j]` is the unit price in SUN for `amounts[i]` resource units rented for `durations[j]` (e.g. '15m', '1h', '1d'). Durations of 1 day or longer are priced per day: '30d' at 40 SUN costs 40 x 30 SUN per unit in total. Use to co
tronsave_get_system_infoRead TronSave and TRON protocol parameters: latest block, minimum buy amounts, TRX burn rates per unit, dynamic buy/lowest prices, the system deposit address, max lock period and the energy cost of a USDT transfer. Use to size purchases (minimums) and to compare renting with burn
tronsave_get_account_resourcesRead the on-chain staked and delegatable ENERGY/BANDWIDTH of a TRON address, plus its TRX balance (SUN string). Use to check whether a wallet can sell, or how much resource it holds. Public (any address), read-only; does not need a login.
tronsave_suggest_create_orderAsk the market how a buy would be filled: a plain new order, buying more only, or extending existing delegations (optionally plus extra). Returns each option with `readyToFill` (percent), `payout` (SUN) and the `extendData` rows. Use before `tronsave_create_order` when the receiv
tronsave_list_extendable_receiversList the receiver addresses that have delegations bought by `requester` which can still be extended, with expiry time (Unix seconds), delegation count and total amount. Use as the first step of an extension flow to find which receiver to extend, then `tronsave_list_extendable_del
tronsave_get_seller_statsRead the logged-in seller's lifetime totals (delegations, resource delegated, TRX earned, average price per resource) and a daily earnings chart split into auto, manual, exclusive and extend delegations. Use for 'how much did I earn' totals; for the individual delegations behind
tronsave_list_delegationsList the logged-in seller's delegations (resource sent to buyers): amount, TRX amount, duration, unit price, type (AUTO, MANUAL, EXTEND, FAST), status and payout. Newest first; page with `offset`/`limit`. Use for a seller's per-delegation history; for earnings totals use `tronsav
tronsave_list_auto_buy_settingsList the logged-in user's auto-buy rules: receiver, resource, unit price cap, threshold, budget/order limits, totals bought and active state. Use before `tronsave_update_auto_buy_setting` or `tronsave_delete_auto_buy_setting` to get rule ids. Requires a wallet signature identity.
tronsave_create_auto_buy_settingCreate a rule that automatically buys `resourceAmount` for `receiver` whenever its remaining resource falls below `thresholdResourceAmount`, paying up to `unitPrice` SUN per unit from the TronSave internal balance. Side effect: SPENDS internal TRX every time the rule fires until
tronsave_update_auto_buy_settingChange an auto-buy rule by id: pause or resume it with `isActive`, or change any of price cap, amount, duration, threshold and limits (only the fields you send change). Side effect: a resumed or loosened rule can start spending internal TRX again. Idempotent for the same argument
tronsave_list_notificationsList the logged-in user's notifications (order created / filled / cancelled / reclaimed, referral payouts) newest first, with the unread count. Use to follow up on an order after creating it; page with `offset`/`limit`, and mark items read with `tronsave_mark_notifications_read`.
tronsave_mark_notifications_readMark one notification (by `id`) or, when `id` is omitted, ALL of the user's notifications as read. Get ids from `tronsave_list_notifications`. Only changes the read flag; idempotent. Requires a wallet signature identity.
tronsave_get_referralRead the logged-in user's referral status: own referral code, sponsor, referral counts, bonus earned and remaining (SUN strings), rank, the referral list (PENDING/ACTIVE) and recent commission payouts. Use for referral questions only; account profile is `tronsave_get_user_info`.
tronsave_get_telegram_notify_settingRead the Telegram alert filters of the logged-in user: seller alerts (remaining amount, duration, price and APY ranges, unlocked-only) and buyer alerts (reclaim warning time, low energy / bandwidth thresholds). `setting` is null when Telegram is not linked. Read these before chan
tronsave_update_telegram_notify_settingReplace the Telegram alert filters. Send the COMPLETE `sellerFilter` and/or `buyerFilter` objects (read the current ones with `tronsave_get_telegram_notify_setting`, edit, send back); each range or value has `isEnabled` plus its numbers. Only changes which alerts are sent; no fun
tronsave_get_agency_botRead the logged-in user's Telegram agency bot (resale bot): name, username, status (PENDING, ACTIVE, INACTIVE, BLOCKED, REJECTED), rewards (total and unpaid) and order / resource statistics. `bot` is null when none is registered. The bot token is never returned. Requires a wallet
tronsave_list_internal_transactionsList the TRX ledger of the logged-in user's internal account (deposits, order payments, refunds), newest first, with the current balance and deposit address. Amounts are SUN strings. Use to reconcile spending after orders. For the orders themselves use `tronsave_internal_order_hi
tronsave_get_flash_unstake_requestRead the logged-in user's flash-unstake request (selling staked TRX early for an immediate payout): state, payout state, amounts and release progress. `request` is null when there is none. Use for the user's own request; to preview a payout before requesting use `tronsave_estimat
tronsave_list_flash_unstake_ordersBrowse the flash-unstake market: `available` (open orders buyers can take), `ongoing` (being paid out) or `completed`. Amounts are SUN-scaled numbers; `estimateCompletionTime` is seconds. Use to browse the whole market; the user's own request is `tronsave_get_flash_unstake_reques
tronsave_estimate_flash_unstakeEstimate what an address would receive by flash-unstaking all its staked TRX now: total staked, fee percentage, payout, delegations to reclaim and the minimum unstake amount. Nothing is submitted. Use before requesting a flash unstake; check an existing request with `tronsave_get
tronsave_bulk_create_internal_ordersBuy the SAME amount of ENERGY or BANDWIDTH for several receiver addresses in one call, paid from the TronSave internal balance; returns one order id per receiver. Side effect: SPENDS `paymentAmount` SUN of the internal balance; not idempotent (a repeat buys again). Estimate one r
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 tronsave 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 360 毫秒内响应(HTTP 200)
无需登录
已读取 53 个工具描述,未发现针对 AI 的隐藏指令
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:Authorization
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(1.5.1)于前天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, sync. labs
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Lipsync videos, dub them into other languages, make talking videos and open sync. Studio.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
An agent-native Model Context Protocol server for TronSave: AI agents can quote, buy and manage TRON ENERGY / BANDWIDTH and TronSave accounts through 53 typed tools.
| Mainnet endpoint | https://mcp.tronsave.io/mcp |
| Testnet (Nile) endpoint | https://mcp.tronsave.io/testnet/mcp |
| Transport | Streamable HTTP (POST, JSON responses); legacy SSE at /sse |
| Auth | none · OAuth 2.1 sign-in at /oauth/mcp (API key or TronLink) · Authorization: ApiKey header · tronsave_login tool |
Documentation
GET /connect).GET /quickstart).tronsave://guide/agent).initialize returns instructions (auth model, units, buy workflow, safety rules); every tool has an action-oriented description, strict inputSchema, an outputSchema and MCP annotations (readOnlyHint, destructiveHint, idempotentHint).Authorization: ApiKey header instead. tronsave_get_session_status tells the agent what it can do right now.isError results with {"error":{"code","message","retryable","hint"}}; the hint names the next tool to call.tronsave://guide/agent resource and buy_resource / account_overview prompts.53 tools in two payment paths. Market path: public quotes, plus orders paid on-chain or managed with a wallet signature. Internal-balance path (tronsave_internal_*): orders paid from a pre-funded TronSave balance with an API key, for bots and backends. Each tool description says when to use its counterpart on the other path.
| Group | Tools | Auth |
|---|---|---|
| Session | get_session_status, get_sign_message, login, logout | public |
| Market data | get_market_overview, get_price_table, get_system_info, get_min_price, list_order_books, get_account_resources | public |
| Quote and buy | estimate_buy_resource, suggest_create_order, create_order, list_orders | public (on-chain payment) |
| Extend | list_extendable_receivers, list_extendable_delegates | public |
| Flash unstake | list_flash_unstake_orders, estimate_flash_unstake, get_flash_unstake_request | public / wallet |
| Orders | get_order, update_order, cancel_order, sell_order_manual | wallet signature |
| Account | get_user_info, get_user_permissions, get_referral, generate_api_key, revoke_api_key | wallet signature |
| Auto-sell | get_user_auto_setting, register_auto_sell, update_auto_sell_setting, get_seller_stats, list_delegations | wallet signature |
| Auto-buy and bulk | list_auto_buy_settings, create_auto_buy_setting, update_auto_buy_setting, delete_auto_buy_setting, bulk_create_internal_orders | wallet signature |
| Alerts | list_notifications, mark_notifications_read, get_telegram_notify_setting, update_telegram_notify_setting, get_agency_bot | wallet signature |
| Internal balance | get_internal_account, get_deposit_address, list_internal_transactions, internal_order_book, internal_order_estimate, internal_order_create, internal_order_history, internal_order_details, internal_extend_delegates, internal_create_extend_request | API key (list_internal_transactions: wallet) |
All names carry the tronsave_ prefix. Full details: docs/TOOLS.md.
Claude Code:
claude mcp add --transport http tronsave https://mcp.tronsave.io/mcp \
--header "Authorization: ApiKey YOUR_TRONSAVE_API_KEY" # header optional
Any client that accepts a remote MCP URL:
{
"mcpServers": { "tronsave": { "url": "https://mcp.tronsave.io/mcp", "headers": { "Authorization": "ApiKey YOUR_TRONSAVE_API_KEY" } } } }
Apps that support OAuth (Claude, ChatGPT, Cursor, VS Code) can use https://mcp.tronsave.io/oauth/mcp instead: the user signs in on a TronSave page with an API key or TronLink. Without a header the agent can still use all public tools and log in with tronsave_login. More clients: quickstart.
Requirements: Node.js ≥ 22, Redis ≥ 6.2.
npm ci
cp .env.example .env npm run dev # or: npm run build && npm start
docker compose up --build
| Variable | Default | Purpose |
|---|---|---|
MCP_PORT | 3000 | HTTP port |
REDIS_URL | redis://localhost:6379 | Session store. memory keeps sessions in the process (single instance, lost on restart; for trials only) |
SESSION_TTL_SECONDS | 86400 | Login / MCP session lifetime (sliding for the transport) |
SIGNATURE_MAX_AGE_SECONDS | 86400 | Oldest signed timestamp accepted for wallet login / Signature header |
SIGN_MESSAGE_TTL_SECONDS | 300 | TTL of nonces issued by tronsave_get_sign_message |
AUTH_VERIFY_CACHE_TTL_SECONDS | 60 | Cache for verified ApiKey / Signature headers |
GRAPHQL_TIMEOUT_MS / REST_TIMEOUT_MS | 10000 | Per-attempt upstream timeout |
REST_RETRIES | 2 | Retries for idempotent reads only |
READINESS_UPSTREAM_TIMEOUT_MS | 2000 | Upstream probe in /readyz |
LOG_LEVEL | info | debug adds redacted tool input/output bodies |
MCP_SERVER_NAME / MCP_SERVER_VERSION | TronSave MCP Server / 1.5.1 | Reported in initialize |
PUBLIC_BASE_URL | unset | Public origin, e.g. https://mcp.tronsave.io. Enables the OAuth authorization server and /oauth/mcp |
OAUTH_ACCESS_TOKEN_TTL_SECONDS / OAUTH_REFRESH_TOKEN_TTL_SECONDS | 3600 / 2592000 | OAuth token lifetimes (wallet sign-ins are capped at SIGNATURE_MAX_AGE_SECONDS) |
TRUST_PROXY | 1 | Reverse-proxy hops in front of the server (client IP for OAuth rate limits) |
METRICS_TOKEN | — | When set, /metrics requires Authorization: Bearer (set it whenever /metrics is public) |
TRONSAVE_NETWORK | mainnet | stdio only: mainnet or testnet (HTTP takes the network from the URL) |
TRONSAVE_API_KEY | — | stdio only: sent as Authorization: ApiKey ; unset = public tools until tronsave_login |
HTTP endpoints: POST|DELETE /mcp, POST|DELETE /testnet/mcp, with PUBLIC_BASE_URL also POST|DELETE /oauth/mcp, /oauth/testnet/mcp and the OAuth endpoints (/.well-known/oauth-authorization-server, /.well-known/oauth-protected-resource/*, /authorize, /token, /register, /revoke, /oauth/signin), GET / (server info), GET /healthz, GET /readyz, GET /metrics (Prometheus), GET /quickstart, legacy GET /sse + POST /messages.
npm ci && npm run start:stdio (or node dist/stdio.js; npm ci builds dist/ through prepare) serves the same 53 tools over stdio for one local client, without Redis (REDIS_URL defaults to memory; logs go to stderr). For example in a client config:
{ "mcpServers": { "tronsave": { "command": "node", "args": ["/path/to/tronsave-mcp/dist/stdio.js"],
"env": { "TRONSAVE_NETWORK": "mainnet", "TRONSAVE_API_KEY": " " } } } }
The hosted endpoint needs no install and is the recommended way to connect; stdio is for self-hosting and testing.
The Streamable HTTP endpoint is stateless per request: session continuity (transport marker + login) lives in Redis, so any number of replicas can serve the same client without sticky sessions, and restarts are transparent. Only the legacy SSE endpoint needs sticky routing.
npm run typecheck
npm test # unit + HTTP session-flow tests (in-memory Redis stub) npm run test:cov # with coverage gate npm run docs:tools # regenerate docs/TOOLS.md and docs/AGENT_GUIDE.md after changing tools BASE=http://127.0.0.1:3000/mcp npm run smoke # end-to-end check against a running server (throwaway wallet)
Project layout:
src/
├── app/ composition root + shutdown registry ├── clients/ infra/http GraphQL/REST clients on a shared retry + circuit-breaker HttpClient ├── config/ env + constants (network endpoints) ├── handlers/ Express app, Streamable HTTP + legacy SSE, request auth context ├── mcp/agentGuide.ts server instructions, guide resource, prompts ├── services/ auth (headers/sessions), sessions, signature verification, Redis ├── tools/ definitions (schemas + descriptions), handlers, adapters, docs renderer ├── tools.ts registration: auth gate, error envelope, metrics, logging └── utils/ errors, responses, logging, redaction, metrics
Adding a tool: add the name in src/tools/toolNames.ts, the schemas in definitions/*/schema.ts, the definition (description, auth.mode, annotations) and a handler, update tests/tools/toolsCount.test.ts, then run npm run docs:tools.
Releasing: bump package.json, server.json and the CHANGELOG, merge, then run npm run publish:public from a clean checkout. It appends the release as one snapshot commit (no private history) to https://github.com/tronsave/tronsave-mcp, tags vX.Y.Z and creates the GitHub release; then mcp-publisher publish updates the MCP Registry.
mcp-session-id values of logged-in sessions are bearer credentials until they expire or DELETE /mcp / tronsave_logout is called.debug and never for tronsave_generate_api_key.MIT — see LICENSE.