# Aether Wealth (npm · @aetherwealth/mcp)

Aether Wealth MCP for AI assistants: trades, alerts, market data, macro calendar & indicators.

- Trust score: 64/100 (medium)
- Change this week: +63
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@aetherwealth/mcp`: 64/100 (this document), [markdown](https://verifymcp.io/servers/ai-aetherwealth-mcp/aetherwealth-mcp.md), [page](https://verifymcp.io/servers/ai-aetherwealth-mcp/aetherwealth-mcp)

## Channel facts

- Registry: `npm`
- Package: `@aetherwealth/mcp`
- Version: `0.2.13`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 94/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 13 of 26 dependencies flagged as unhealthy (13 deprecated).
- **Provenance & Transparency**: 6/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (SEE LICENSE IN LICENSE) isn't a recognized OSI-approved license.
  - Actively maintained (last published 0 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 5046 tokens (~100/item across 50 items; 49 tools + 1 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 83/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 49% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add ai-aetherwealth-mcp -- npx -y @aetherwealth/mcp
```

### Codex

```bash
codex mcp add ai-aetherwealth-mcp -- npx -y @aetherwealth/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-aetherwealth-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@aetherwealth/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-aetherwealth-mcp --command npx --arg -y --arg @aetherwealth/mcp
```

### Hermes

```yaml
mcp_servers:
  ai-aetherwealth-mcp:
    command: "npx"
    args: ["-y", "@aetherwealth/mcp"]
```

### Other

```json
{
  "mcpServers": {
    "ai-aetherwealth-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@aetherwealth/mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-03 (score 63, +2)

- [functional improvement] Dependency health: 0.00 → 0.50
- [functional] Package version: 0.2.11 → 0.2.13

### 2026-08-02 (score 61, +12)

- [security regression] Known CVEs: pass → unverified
- [security regression] Install scripts: pass → unverified
- [security regression] Stability: 0.20 → unverified
- [security regression] Provenance: fail → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Dependency health: 1.00 → 0.00
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] License: fail → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Maintenance: pass → unverified
- [functional] Dependency health: 1.00 → partial
- [functional] Licence: SEE LICENSE IN LICENSE

### 2026-08-01 (score 49, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 48, −4)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 52, 0)

- [security regression] Provenance: fail → unverified
- [security regression] Known CVEs: pass → unverified
- [security regression] Install scripts: pass → unverified
- [functional regression] License: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Maintenance: pass → unverified
- [functional] Dependency health: 1.00 → partial
- [functional] Licence: SEE LICENSE IN LICENSE
- [functional] Package version: 0.2.2 → 0.2.9
- [functional] Package version: 0.2.2 → 0.2.7

### 2026-07-29 (score 52, +51)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → pass
- [security improvement] Install scripts: unverified → pass
- [functional regression] License: unverified → fail
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: good
- [functional] First check of Schema quality: pass
- [functional] First check of Tool coverage: 49
- [functional] First check of Schema quality: fail
- [functional] Dependency health: partial → 1.00
- [functional] Licence: SEE LICENSE IN LICENSE

### 2026-07-28 (score 1, −1)

No change was recorded against any check on this day. Supply Chain Security went from 5 to 4.

## MCP tools (49)

### `login` (~38 tokens)

Sign in to Aether Wealth. Opens your browser to authenticate; once you approve, the MCP stores a per-user token and the data tools become available.

### `logout` (~23 tokens)

Sign out of Aether Wealth on this device. Clears the stored access token.

### `get_context` (~59 tokens)

Snapshot the user's live Aether Wealth state in one call — accounts, open trades, recent performance stats, and active alerts — plus the map of dashboard-only actions. Call this first to ground suggestions in what the user is actually doing. Requires sign-in.

### `list_trades` (~122 tokens)

List the authenticated user's trades. Filter by account, status, pair, or date range (ISO 8601). Requires sign-in.

Input parameters:

- `accountId` (string)
- `from` (string): ISO 8601 datetime (inclusive lower bound)
- `limit` (integer): Max rows to return
- `page` (integer): Page number (1-indexed)
- `pair` (string): e.g. EURUSD, BTCUSD
- `status` (string)
- `to` (string): ISO 8601 datetime (inclusive upper bound)

### `get_trade` (~26 tokens)

Get a single trade by id. Requires sign-in.

Input parameters:

- `id` (string, required)

### `list_accounts` (~28 tokens)

List the user's trading accounts (use an account's id when creating a trade). Requires sign-in.

### `create_account` (~106 tokens)

Create a trading account in the journal. Use accountType "demo" for paper/demo accounts and "live" for live accounts. Requires sign-in.

Input parameters:

- `accountType` (string): default: personal
- `broker` (string)
- `currency` (string): 3-letter code, default: USD
- `defaultRiskAmount` (number)
- `initialBalance` (number): default: 0
- `name` (string, required)
- `notes` (string)

### `trade_stats` (~74 tokens)

Trading performance statistics (win rate, PnL, etc.). Filter by account, pair, or date range. Requires sign-in.

Input parameters:

- `accountId` (string)
- `from` (string): ISO 8601 datetime
- `pair` (string)
- `to` (string): ISO 8601 datetime

### `create_trade` (~151 tokens)

Record a new trade. Requires sign-in. Use list_accounts to find the accountId.

Input parameters:

- `accountId` (string, required): Trading account id (see list_accounts)
- `direction` (string, required)
- `entryPrice` (number, required)
- `entryTime` (string, required): ISO 8601 datetime
- `lotSize` (number)
- `notes` (string)
- `pair` (string, required): e.g. EURUSD, BTCUSD
- `riskPercent` (number)
- `stopLoss` (number)
- `tags` (array)
- `takeProfit` (number)
- `timeframe` (string): e.g. 1h, 4h, 1d

### `update_trade` (~128 tokens)

Update fields on an existing trade. Requires sign-in.

Input parameters:

- `direction` (string)
- `entryPrice` (number)
- `entryTime` (string): ISO 8601 datetime
- `id` (string, required)
- `lotSize` (number)
- `notes` (string)
- `pair` (string)
- `riskPercent` (number)
- `stopLoss` (number)
- `tags` (array)
- `takeProfit` (number)
- `timeframe` (string): e.g. 1h, 4h, 1d

### `close_trade` (~72 tokens)

Close an open trade with an exit price + time. Requires sign-in.

Input parameters:

- `exitPrice` (number, required)
- `exitTime` (string, required): ISO 8601 datetime
- `fees` (number)
- `id` (string, required)
- `notes` (string)
- `swap` (number)

### `delete_trade` (~37 tokens)

Permanently delete a single trade by id. Only trades on demo accounts can be deleted. Requires sign-in.

Input parameters:

- `id` (string, required)

### `delete_trades` (~63 tokens)

Permanently delete trades on a specific demo account. Requires explicit status (OPEN, CLOSED, CANCELLED, or ALL). This cannot be undone. Requires sign-in.

Input parameters:

- `accountId` (string, required): Trading account id to delete from
- `status` (string, required)

### `import_trades` (~58 tokens)

Import up to 500 trades into one account. Rows with both exitPrice and exitTime are imported as closed trades. Requires sign-in.

Input parameters:

- `accountId` (string, required): Trading account id to import into
- `trades` (array, required)

### `get_broker_account` (~51 tokens)

Get the LIVE broker account balance, equity, currency, and connection status for a connected trading account (distinct from list_accounts which lists journal accounts). Requires sign-in.

Input parameters:

- `accountId` (string, required)

### `list_broker_positions` (~31 tokens)

List open broker positions with P&L. Requires sign-in.

Input parameters:

- `accountId` (string, required)

### `get_broker_quote` (~66 tokens)

Get the current broker-native bid and ask for a symbol through the connected execution account. For an MT5 executor connection, this reads the live tick from its VPS and rejects stale ticks. Requires sign-in.

Input parameters:

- `accountId` (string, required)
- `symbol` (string, required)

### `connect_broker` (~231 tokens)

Attach a live execution provider to a journal account. For MetaApi, provide its account id and region. For `mt5_executor`, provide the expected MT5 login as `providerAccountRef` and its `baseUrl` under `*.aetherwealth.ai`. `providerToken` is sensitive — never expose or log it.

Input parameters:

- `accountId` (string, required)
- `approvalMode` (string): Confirmation mode. 'auto' is not selectable here; 'push' is also set later via set_broker_approval_mode because it requires an active app push subscription.
- `baseUrl` (string): Required for `mt5_executor`; the executor's HTTPS origin under `*.aetherwealth.ai`.
- `provider` (string): Defaults to 'metaapi' when omitted.
- `providerAccountRef` (string, required): The MetaApi account id, or the expected numeric MT5 login for `mt5_executor`.
- `providerToken` (string, required): The provider token. For `mt5_executor`, use its service bearer token. Sensitive — never expose or log it.
- `region` (string)

### `broker_connection_status` (~29 tokens)

Get the current live broker connection status. Requires sign-in.

Input parameters:

- `accountId` (string, required)

### `disconnect_broker` (~60 tokens)

Disarm broker trading for a connected account instantly. Cancels pending intents, keeps executed history, and does not require confirmation because it is the kill switch. Reconnect later with connect_broker. Requires sign-in.

Input parameters:

- `accountId` (string, required)

### `set_broker_approval_mode` (~83 tokens)

Change how broker trades are confirmed for a connection between `app_otp` (authenticator), `email_otp`, and `push` (tap-to-approve in the Aether Wealth app; requires an active push subscription). The agent cannot enable `auto` here.

Input parameters:

- `accountId` (string, required)
- `approvalMode` (string, required)

### `propose_trade` (~140 tokens)

Size and PROPOSE a broker trade (does not place it). Provide exactly one of riskPercent or riskAmount; entryPrice is required for limit/stop. Returns the intent id and confirmation method. Push-mode intents are sent to the user's device and must not be executed by the agent. Requires sign-in.

Input parameters:

- `accountId` (string, required)
- `direction` (string, required)
- `entryPrice` (number)
- `orderType` (string)
- `riskAmount` (number)
- `riskPercent` (number)
- `stopLoss` (number, required)
- `symbol` (string, required)
- `takeProfit` (number)

### `execute_trade` (~64 tokens)

Place a previously proposed trade. Email/app modes require the user-provided code; auto mode requires no per-trade code. Push intents cannot be executed by the agent. NEVER guess or fabricate a code.

Input parameters:

- `code` (string)
- `intentId` (string, required)

### `trade_intent_status` (~50 tokens)

Check whether a proposed trade was approved, executed, expired, cancelled, or failed. Especially useful for push-mode intents, which the user approves on their device.

Input parameters:

- `intentId` (string, required)

### `cancel_trade_intent` (~29 tokens)

Cancel a previously proposed broker trade. Requires sign-in.

Input parameters:

- `intentId` (string, required)

### `close_position` (~97 tokens)

Propose closing an open broker position fully, or partially by passing `volume`. This does not close immediately; it returns a pending confirmation intent. For email_otp/app_otp ask the user for the code and call execute_trade. For push, do not ask for a code — the user taps Approve in the app.

Input parameters:

- `accountId` (string, required)
- `positionId` (string, required)
- `volume` (number)

### `modify_position` (~107 tokens)

Propose adjusting stop-loss / take-profit on an open position. Stop-loss changes that INCREASE risk are rejected (use the app). Pass null to clear a level. This returns a pending confirmation intent; for email_otp/app_otp ask for the code and call execute_trade, while push is approved in the app.

Input parameters:

- `accountId` (string, required)
- `positionId` (string, required)
- `stopLoss` (number|null)
- `takeProfit` (number|null)

### `list_alerts` (~45 tokens)

List your price + trendline alerts. Optionally include archived or filter by pair. Requires sign-in.

Input parameters:

- `includeArchived` (boolean)
- `pair` (string)

### `create_price_alert` (~151 tokens)

Create a price-level alert (fires when price is above/below/crosses a level). Requires sign-in.

Input parameters:

- `condition` (string, required)
- `expiresAt` (string): ISO 8601 datetime
- `isPersistent` (boolean): Re-arm after firing. default: false
- `message` (string)
- `notifyEmail` (boolean): default: true
- `notifyPush` (boolean): default: true
- `pair` (string, required): e.g. EURUSD, BTCUSD
- `price` (number, required)
- `timeframe` (string, required): e.g. 1h, 4h, 1d
- `triggerType` (string): default: close

### `create_trendline_alert` (~172 tokens)

Create a trendline alert (fires when price crosses a line defined by two points). Requires sign-in.

Input parameters:

- `condition` (string, required)
- `expiresAt` (string): ISO 8601 datetime
- `isPersistent` (boolean): Re-arm after firing. default: false
- `message` (string)
- `notifyEmail` (boolean): default: true
- `notifyPush` (boolean): default: true
- `pair` (string, required)
- `price1` (number, required)
- `price2` (number, required)
- `time1` (string, required): ISO 8601 datetime of point 1
- `time2` (string, required): ISO 8601 datetime of point 2
- `timeframe` (string, required)
- `triggerType` (string): default: close

### `update_alert` (~175 tokens)

Update a price/trendline alert (e.g. change level, archive, mute). Requires sign-in.

Input parameters:

- `condition` (string)
- `expiresAt` (string): ISO 8601 datetime
- `id` (string, required)
- `isActive` (boolean)
- `isArchived` (boolean)
- `isPersistent` (boolean): Re-arm after firing. default: false
- `message` (string)
- `notifyEmail` (boolean): default: true
- `notifyPush` (boolean): default: true
- `price` (number)
- `price1` (number)
- `price2` (number)
- `time1` (string)
- `time2` (string)
- `timeframe` (string)
- `triggerType` (string): default: close

### `delete_alert` (~29 tokens)

Delete a price/trendline alert by id. Requires sign-in.

Input parameters:

- `id` (string, required)

### `list_indicator_alerts` (~44 tokens)

List your indicator-based alerts. Optionally include archived or filter by pair. Requires sign-in.

Input parameters:

- `includeArchived` (boolean)
- `pair` (string)

### `create_indicator_alert` (~233 tokens)

Create an indicator alert (fires on an indicator output condition, e.g. RSI crosses 70). `condition` is { op, threshold } or { op, other }. Requires sign-in.

Input parameters:

- `condition` (object, required): { op: gt|gte|lt|lte|eq|crosses_above|crosses_below, threshold } or { op: *_series, other }
- `dedupMode` (string): default: edge
- `expiresAt` (string): ISO 8601 datetime
- `indicatorParams` (object, required): Indicator settings, e.g. { length: 14 }
- `indicatorType` (string, required): e.g. rsi, ema, macd
- `isPersistent` (boolean): Re-arm after firing. default: false
- `message` (string)
- `notifyEmail` (boolean): default: true
- `notifyPush` (boolean): default: true
- `outputSeries` (string, required): Which output series to watch
- `pair` (string, required)
- `timeframe` (string, required)
- `triggerType` (string): default: close

### `update_indicator_alert` (~135 tokens)

Update an indicator alert (condition, dedup, archive, mute). Requires sign-in.

Input parameters:

- `condition` (object)
- `dedupMode` (string)
- `expiresAt` (string): ISO 8601 datetime
- `id` (string, required)
- `isActive` (boolean)
- `isArchived` (boolean)
- `isPersistent` (boolean): Re-arm after firing. default: false
- `message` (string)
- `notifyEmail` (boolean): default: true
- `notifyPush` (boolean): default: true
- `triggerType` (string): default: close

### `delete_indicator_alert` (~27 tokens)

Delete an indicator alert by id. Requires sign-in.

Input parameters:

- `id` (string, required)

### `get_candles` (~315 tokens)

Get OHLC candles for a pair + timeframe and optional sourceId. Omit sourceId for Twelve Data. Non-default sources return only native timeframes advertised by get_market_config; they are never re-aggregated. Returns up to 200 bars plus nextCursor. Pass nextCursor back as cursor until it is null. The legacy offset remains available for shallow pagination; do not combine offset and cursor.

Input parameters:

- `cursor` (string): Opaque nextCursor returned by the previous get_candles page. Omit on the first page; continue until nextCursor is null. Do not combine with offset.
- `limit` (integer): Maximum candles to return (1-200). Omit for the newest 200.
- `offset` (integer): Legacy shallow pagination: number of recent candles to skip (0–4800). Use cursor instead for complete history; do not combine offset and cursor.
- `pair` (string, required): e.g. EURUSD, BTCUSD (canonical id; case-insensitive)
- `sourceId` (string): Market-data source from get_market_config, e.g. mt5-primary. Omit for Twelve Data.
- `timeframe` (string, required): A base (1m, 5m, 15m, 30m, 1h, 4h, 1d) or an integer multiple of one (e.g. 2h, 3h, 12h, 90m). No fractional (2.5h) or sub-minute values.

### `list_economic_calendar` (~144 tokens)

List economic calendar events. Filter by currency, date range, release, or minimum impact (1-5). Currency and indicator/release are validated against the catalog: unknown values return an error listing valid options, so an empty result always means "no events" rather than "bad input".

Input parameters:

- `currency` (array): ISO currency codes, e.g. ["USD","EUR"]
- `from` (string): ISO 8601 date or datetime
- `impactMin` (integer)
- `indicator` (string): release slug, e.g. cpi
- `to` (string): ISO 8601 date or datetime
- `view` (string)

### `get_macro_series` (~110 tokens)

Get a macro indicator time series (e.g. USD cpi). Currency and indicator are validated against the catalog: unknown values return an error listing valid options (case-insensitive).

Input parameters:

- `currency` (string, required): ISO currency code, e.g. USD
- `from` (string): ISO 8601 date or datetime
- `indicator` (string, required): release slug, e.g. cpi
- `limit` (integer)
- `to` (string): ISO 8601 date or datetime

### `get_macro_indicator` (~116 tokens)

Get a curated macro indicator series from FXMacroData (live + cached) with unit/frequency metadata and the central-bank target where available — use get_macro_series for raw historical calendar values. Range defaults to 12m; returns a null result when the macro data provider is not configured.

Input parameters:

- `currency` (string, required): ISO currency code, e.g. USD
- `indicator` (string, required): indicator slug in lowercase snake_case, e.g. cpi
- `range` (string): Lookback window (default 12m)

### `get_market_config` (~35 tokens)

Get supported instruments, timeframes, and per-source candle/live capabilities. Use marketDataSources before selecting a non-default sourceId.

### `get_fx_pair_context` (~121 tokens)

Macro context for a currency PAIR (e.g. EURUSD) — the per-currency macro state for both legs (recent releases, surprises, derived trend). Use for a pair-level macro read; for one currency use get_fx_currency_context. Distinct from get_macro_series (raw calendar history) and get_macro_indicator (one curated series).

Input parameters:

- `limit` (integer): Max rows to return (1-250, default 120).
- `pair` (string, required): 6-letter currency pair, e.g. EURUSD (case-insensitive)

### `get_fx_currency_context` (~77 tokens)

Macro context for a single CURRENCY (e.g. USD) — recent economic releases, surprises, and the derived macro state for that currency.

Input parameters:

- `currency` (string, required): ISO currency code, e.g. USD (case-insensitive)
- `limit` (integer): Max rows to return (1-250, default 120).

### `get_fx_predictions` (~92 tokens)

Model forecasts / predictions for a currency's upcoming macro releases. Optionally filter to one indicator by release slug (e.g. cpi).

Input parameters:

- `currency` (string, required): ISO currency code, e.g. USD (case-insensitive)
- `indicator` (string): Optional release slug filter, e.g. cpi
- `limit` (integer): Max rows to return (1-250, default 120).

### `get_fx_risk_sentiment` (~54 tokens)

Cross-market risk-on / risk-off sentiment series (not currency-scoped). Use to gauge broad market risk appetite.

Input parameters:

- `limit` (integer): Max rows to return (1-250, default 120).

### `get_fx_documents` (~84 tokens)

Source documents behind the FX macro data for a currency — news items and press releases. Filter by documentType.

Input parameters:

- `currency` (string, required): ISO currency code, e.g. USD (case-insensitive)
- `documentType` (string): Optional filter: news or press_release
- `limit` (integer): Max rows to return (1-100, default 50).

### `get_fx_sync_state` (~50 tokens)

Ingestion/sync status of the FX macro datasets (per dataset family: status, freshness, last success, next refresh). Diagnostic — check data freshness before relying on the other get_fx_* tools.

### `get_indicators` (~346 tokens)

Compute Twelve Data technical indicators for a pair + timeframe (requires sign-in). Pass up to 8 indicators by name; params are optional and default sensibly. Names — momentum: rsi, macd, stoch, stochf, stochrsi, cci, cmo, mom, roc, rocr, willr, mfi, ultosc, ppo, apo, bop, aroon, aroonosc; trend: adx, adxr, dx, plus_di, minus_di, plus_dm, minus_dm, sar, supertrend; moving averages: sma, ema, wma, dema, tema, trima, kama, t3ma, mama, vwap, midpoint, midprice; bands: bbands, keltner, percent_b; volatility: atr, natr, trange; volume: obv, ad, adosc; stats: linearreg, linearregslope, linearregangle, linearregintercept, stddev, var, tsf. Bad names/params return an error listing valid options. At most 2 distinct pairs per user at a time.

Input parameters:

- `indicators` (array, required): Up to 8 indicators to compute on the pair
- `interval` (string, required): One of 1m, 5m, 15m, 30m, 45m, 1h, 2h, 4h, 1d
- `outputsize` (integer): Bars to return per indicator (default 30)
- `pair` (string, required): Canonical id, e.g. EURUSD, XAUUSD, BTCUSD (case-insensitive)

### `render_chart` (~435 tokens)

Render an annotated candlestick chart image (PNG) for a pair + timeframe and optional market-data sourceId. Fetches recent candles and draws optional shapes (support/resistance lines, zones, trendlines, a long/short position) using the same vocabulary as draw_chart_shape. Returns the chart as an image plus a text summary. PREFER absolute time anchors (time1/time2/entryTime, epoch seconds from get_candles) over barsBack*.

Input parameters:

- `bars` (integer): Most-recent candles to show (20-200, default 120)
- `height` (integer): Image height in px (240-1440, default 720)
- `offset` (integer): Candle page offset: 0 is the latest page; larger offsets walk backward through history. Pair with bars to frame a historical setup.
- `pair` (string, required): Canonical instrument id, e.g. EURUSD (case-insensitive)
- `shapes` (array): Optional annotations. Each item is {type, ...}: horizontal_line/horizontal_ray/cross_line need `price`; zone/rectangle need `priceHigh`+`priceLow`; trendline/ray/right_ray/left_ray/extended_line/info…
- `sourceId` (string): Market-data source from get_market_config, e.g. mt5-primary. Omit for Twelve Data.
- `theme` (string): Color theme (default dark)
- `timeframe` (string, required): e.g. 1m, 5m, 15m, 30m, 1h, 4h, 1d (or an integer multiple)
- `width` (integer): Image width in px (320-2560, default 1280)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/ai-aetherwealth-mcp/aetherwealth-mcp#diagnostics

## Score history

- 2026-08-04: 64
- 2026-08-03: 63
- 2026-08-02: 61
- 2026-08-01: 49
- 2026-07-31: 48
- 2026-07-30: 52
- 2026-07-29: 52
- 2026-07-28: 1
- 2026-07-27: 2

## Links

- npm package: https://www.npmjs.com/package/@aetherwealth/mcp
- Socket report: https://socket.dev/npm/package/@aetherwealth/mcp
- Website: https://aetherwealth.ai/mcp
- Changelog RSS feed: https://verifymcp.io/servers/ai-aetherwealth-mcp/aetherwealth-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-aetherwealth-mcp/aetherwealth-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/ai-aetherwealth-mcp/aetherwealth-mcp
