analyze — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited analyze (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
TradeOS exposes 5 MCP tools on https://ai.tradeos.xyz. This skill maps user intent to the correct tool, argument shape, and analysis playbook.
| # | Section |
|---|---|
| 1 | Prerequisites |
| 2 | Tool picker |
| 3 | Tool usage |
| 4 | Parameters and enums |
| 5 | Common errors and wrong use cases |
mcp_health first after OAuth.userId in tool arguments (OAuth injects it).TRADEOS_ACCESS_TOKEN must be set.| # | User wants | Tool | Not this |
|---|---|---|---|
| 2.1 | Check MCP / auth | mcp_health | — |
| 2.2 | Resolve symbol from name or fuzzy text | search_tickers | technical_analysis, customize-agent |
| 2.3 | Create/list/update/delete My Agent; read stored report | customize-agent | technical_analysis for new analysis |
| 2.4 | New chart / TA / trade question | technical_analysis | latest_analysis, bloomberg-oracle-terminal |
| 2.5 | Macro, news, policy, “why did X move” | bloomberg-oracle-terminal | technical_analysis |
Default call chain: search_tickers → customize-agent (optional) → technical_analysis
Each subsection below is a how-to for one tool (mcp_health omitted — call with no args after OAuth).
search_tickersPurpose: Symbol lookup only. Read-only — no agents, LLM, or charts.
When to use
customize-agent or technical_analysis.assetA and assetB separately).When NOT to use
technical_analysiscustomize-agentbloomberg-oracle-terminalHow to call
{ "q": "apple", "limit": 5, "exchange": "NASDAQ" }| Step | Action |
|---|---|
| 1 | Pass q (required). Add limit (1–50) or exchange filter if helpful. |
| 2 | Read data[] — use exact ticker string in later tools. |
| 3 | Skip this step if ticker is already exact (e.g. NASDAQ:AAPL). |
Spread / ratio: search each leg, then join as "<tickerA> / <tickerB>" (see §4.6).
Response: ok, query, count, data[] (ticker, name, exchange, score, isWatch, …).
customize-agentPurpose: My Agent CRUD + read last stored analysis from DB. Does not run a new LLM — use technical_analysis for live analysis.
When to use
| Action | Use case |
|---|---|
create | Save a reusable agent (ticker, strategy, indicators, prompt, trigger) |
update | Change agent config |
delete | Remove an agent |
get | Read one agent's config |
list | List all user's agents |
latest_analysis | Read previous stored report only (no new LLM run) |
When NOT to use
technical_analysissearch_tickersHow to call — list agents
{ "action": "list" }How to call — create agent
| Step | Action |
|---|---|
| 1 | search_tickers if ticker is ambiguous |
| 2 | Choose interval, strategy, indicators (see §4) |
| 3 | Call create with nested or flat args |
{
"action": "create",
"create": {
"ticker": "NASDAQ:AAPL",
"interval": "1D",
"extraWindow": ["1W", "4W"],
"strategy": "Trend-Analysis",
"indicators": [
"Moving Average",
"Bollinger Bands",
"Relative Strength Index"
],
"prompt": "Daily trend and key levels for AAPL.",
"trigger": { "condition": [] }
}
}How to call — update / delete / get
{
"action": "update",
"update": { "agentId": "<id>", "strategy": "Smart-Money-Concept" }
}{ "action": "delete", "delete": { "agentId": "<id>" } }{ "action": "get", "get": { "agentId": "<id>" } }How to call — read stored report (not fresh analysis)
{
"action": "latest_analysis",
"latest_analysis": { "agentId": "<id>" }
}After create: run technical_analysis with action=agent and customizeAgentId from create/list response.
Rules
title on create (server-generated).update requires agentId + at least one mutable field; if indicators is sent, must be non-empty."assetA / assetB" (see §4.6). Pro users keep full spread on create/update.technical_analysisPurpose: Live Ticker-Analyze — server captures multi-timeframe chart screenshots for the LLM. Returns streamPreview (Markdown) + screenshotHints[] (text only).
When to use: Chart TA, levels, strategy framing, trade questions.
When NOT to use: Agent CRUD / stored report → customize-agent · symbol search → search_tickers · news → bloomberg-oracle-terminal.
Two modes
| Mode | When |
|---|---|
ad_hoc | One-off question; pass ticker, mainWindow, strategy, indicators inline |
agent | Reuse saved My Agent config from customize-agent |
Time windows — common usage
| Horizon | Intervals | Typical use |
|---|---|---|
| Short / scalp | 1, 5, 15 | Intraday entries, quick momentum, tight stops |
| Intraday / swing | 30, 60, 240 | Session structure, 1–5 day holds |
| Medium / position | 1D, 1W | Swing to multi-week trend, daily structure |
| Long / macro chart | 1W, 4W | Primary trend filter; avoid fighting higher TF |
1D for equities).["4W", "1W", "1D", "60"] (max 8 on ad_hoc).Scalping-EMA on 5/15; Trend-Following on 1D/1W; Smart-Money-Concept on 60/240/1D.Valid interval enum values: see §4.1.
#### 3.3.1 Single asset
One symbol (not a spread). Example: NASDAQ:AAPL, X:BTCUSD.
Path A — ad_hoc (one-off, no saved agent)
| Step | Action |
|---|---|
| 1 | search_tickers unless ticker is exact |
| 2 | Pick mainWindow, optional extraWindows, strategy, indicators (§4) |
| 3 | Call technical_analysis ad_hoc with a structured userQuestion |
{
"action": "ad_hoc",
"ad_hoc": {
"ticker": "NASDAQ:AAPL",
"mainWindow": "1D",
"extraWindows": ["1W", "4W"],
"strategy": "Trend-Analysis",
"indicators": [
"Moving Average",
"Moving Average Convergence Divergence",
"Relative Strength Index",
"Bollinger Bands"
],
"userQuestion": "Is the daily structure still bullish? List key support/resistance, momentum confirmation, and volatility regime."
}
}Path B — agent (reusable My Agent)
| Step | Action |
|---|---|
| 1 | customize-agent create (or list existing agent) |
| 2 | technical_analysis agent with customizeAgentId + userQuestion |
{
"action": "agent",
"agent": {
"customizeAgentId": "<from create or list>",
"userQuestion": "Trend and key levels on the daily chart?"
}
}Suggested `userQuestion` checklist (single asset)
mainWindow (bullish / bearish / range)extraWindows#### 3.3.2 Multi asset (spread vs benchmark)
Compare many symbols against one benchmark using ratio charts. One ticker per pair: "<symbol> / <benchmark>".
Common benchmarks
| Benchmark | When to use | Example |
|---|---|---|
| SPY / QQQ | US equities vs broad market | MSFT / SPY, LLY / SPY |
| C:XAUUSD | vs gold / risk-off context | AAPL / C:XAUUSD |
| Sector ETF | Peer group | NVDA / QQQ |
Workflow
| Step | Action |
|---|---|
| 1 | search_tickers for each leg (every symbol + benchmark once) |
| 2 | For each symbol, one technical_analysis ad_hoc with spread ticker |
| 3 | Ask trend / momentum / volatility scoring in userQuestion |
| 4 | Synthesize all results: rank composite 0–100 (0 = strong short spread, 100 = strong long spread) |
| 5 | _(Optional)_ one bloomberg-oracle-terminal call for basket-level macro context |
Example payload (one pair)
{
"action": "ad_hoc",
"ad_hoc": {
"ticker": "LLY / SPY",
"mainWindow": "1D",
"extraWindows": ["1W", "4W"],
"strategy": "Trend-Analysis",
"indicators": [
"Moving Average",
"Relative Strength Index",
"Moving Average Convergence Divergence",
"Bollinger Bands",
"Average True Range"
],
"userQuestion": "Analyze this spread for trend, momentum, and volatility. Score each 0–100. Summarize bias: long spread, short spread, or neutral."
}
}Scoring dimensions (state explicitly in userQuestion)
| Dimension | Judge on ratio chart | Indicators (see §4.5) |
|---|---|---|
| Trend | Ratio direction, MA slope, HH/HL vs LH/LL | Moving Average, Ichimoku Cloud, Super Trend, Average Directional Index |
| Momentum | Acceleration vs benchmark | Moving Average Convergence Divergence, Relative Strength Index, KDJ Oscillator, Squeeze Momentum |
| Volatility | Band width, ATR expansion, squeeze risk | Bollinger Bands, Average True Range, Z-Score |
Example user prompts
LLY / SPY, …), rank 0–100.”_Prefer one `ad_hoc` call per pair (parallel if host allows). Each call gets its own screenshots and cleaner streamPreview.Multi asset via saved agents: create one My Agent per spread pair (customize-agent create with "LLY / SPY"), then technical_analysis agent for each — same scoring logic in userQuestion.
bloomberg-oracle-terminalPurpose: Grounded search for macro / news / policy narrative. Returns Markdown summary — not chart TA.
When to use
When NOT to use
technical_analysissearch_tickerscustomize-agentHow to call
{
"query": "Why did NVDA drop this week? Include earnings, AI sector news, and Fed context."
}| Step | Action |
|---|---|
| 1 | Be specific: symbol, dates, region when helpful (query 1–2000 chars) |
| 2 | Read data.summary (Markdown) from response |
| 3 | If user also wants chart levels → follow with technical_analysis |
Response: ok, data.summary, data.query. Balance checked per account. No screenshots; host may timeout on slow searches.
Combined workflow (news + chart):
bloomberg-oracle-terminal — “why”technical_analysis — “where on the chart”All enum values must match exactly (case-sensitive). Invalid values → invalid_input.
interval, mainWindow, extraWindows, extraWindow)1 | 5 | 15 | 30 | 60 | 240 | 1D | 1W | 4WLimits: extraWindows max 8 on ad_hoc; extraWindow optional on agent create.
customize-agent actionscreate | update | delete | get | list | latest_analysistechnical_analysis actionsagent | ad_hoc| Action | Required fields |
|---|---|
agent | customizeAgentId, userQuestion |
ad_hoc | ticker, mainWindow, userQuestion |
Optional (both modes): clientLang, selectedVisibilityType
Use with customize-agent create/update and technical_analysis ad_hoc. 28 values — spelling and hyphenation must match exactly.
1. `Quantum-Athena` · Systematic
2. `Chiroptera` · Systematic
3. `Quantum-Valkyrie` · Systematic
4. `Ultimate-Breakout-System` · Volatility / breakout
5. `Technical-SEPA` · Trend / momentum
6. `Trend-Analysis` · Trend / momentum
AAPL / SPY) for relative strength.7. `Smart-Money-Concept` · SMC / structure
60 / 240 / 1D structure with precise level framing.8. `Liquidity-Sweep` · SMC / structure
9. `Pullback-Retracement` · Pullback / range
10. `Scalping-EMA` · Systematic
1 / 5 / 15 intervals.11. `Volatility-Breakout` · Volatility / breakout
12. `Breakout-Retest` · Pullback / range
13. `Squeeze-Momentum` · Volatility / breakout
Squeeze Momentum and Bollinger Bands indicators.14. `Mean-Reversion` · Pullback / range
Z-Score / RSI).15. `Momentum-Swing` · Trend / momentum
1D / 1W.16. `Trend-Following` · Trend / momentum
17. `Trend-Reversal` · Trend / momentum
18. `Divergence-Play` · Trend / momentum
19. `Continuation-Pattern` · Trend / momentum
20. `Range-Bound` · Pullback / range
21. `Multi-TF-BOS-Alignment` · SMC / structure
22. `SR-Failure-Trap` · SMC / structure
23. `SuperTrend-Ladder-Pullback` · Systematic
24. `Tri-MA-Slope-Compression-Break` · Systematic
1D or 240.25. `MACD-Zero-Line-Recycle-Gate` · Systematic
26. `RSI-Range-Shift-Continuation` · Systematic
27. `Squeeze-Fakeout-Reversal` · Volatility / breakout
28. `Fractal-Sync-Confluence` · Trend / momentum
4W / 1W / 1D (or similar stack) align same bias.Quick picks
| Scenario | Strategy |
|---|---|
| Default / general TA / benchmark spread | Trend-Analysis |
| Order blocks, liquidity, ICT | Smart-Money-Concept |
| Rank many names vs SPY | Trend-Analysis |
| Intraday scalps | Scalping-EMA |
| Squeeze / volatility | Squeeze-Momentum or Volatility-Breakout |
| Established trend ride | Trend-Following |
| Range / fade | Mean-Reversion or Range-Bound |
English full names only — no abbreviations (e.g. not RSI, use Relative Strength Index). My Agent: 1–20; ad_hoc: up to 50. 26 values — must match exactly.
1. `Moving Average` · Trend
1D/1W most common for equities.2. `Exponential Moving Average` · Trend
Scalping-EMA) and reactive trend filter.3. `Average Directional Index` · Trend
Trend-Following vs Range-Bound fits the chart.4. `Bollinger Bands` · Volatility
5. `Volume` · Volume
6. `Price Volume Trend` · Volume
7. `Relative Volume` · Volume
8. `Moving Average Convergence Divergence` · Momentum
Trend-Analysis, Momentum-Swing, Divergence-Play.9. `Ichimoku Cloud` · Trend
1D / 1W position trades and swing holds.10. `KDJ Oscillator` · Momentum
5/15/60).11. `Relative Strength Index` · Momentum
Divergence-Play / RSI-Range-Shift-Continuation.12. `Squeeze Momentum` · Momentum
Bollinger Bands and Squeeze-Momentum strategy.13. `Support and Resistance` · Levels
Breakout-Retest, Range-Bound, SR-Failure-Trap.14. `High Low Markers` · SMC
Liquidity-Sweep and SMC workflows.15. `Fair Value Gap` · SMC
Smart-Money-Concept and post-impulse retrace levels.16. `Fibonacci Retracement` · Levels
Pullback-Retracement entry zone selection.17. `Z-Score` · Volatility
18. `Volume Profile Visible Range` · Volume
19. `Pivot Points` · Levels
30 / 60 / 240 intraday S/R framework.20. `Footprint` · Volume
1/5/15) order-flow confirmation.21. `News and Fundamentals` · Context
bloomberg-oracle-terminal deep news search.22. `Volume Weighted Average Price` · Volume
60 / 240.23. `Break of Structure` · SMC
Smart-Money-Concept, Multi-TF-BOS-Alignment.24. `Average True Range` · Volatility
25. `Super Trend` · Trend
Trend-Following and SuperTrend-Ladder-Pullback strategies.26. `Premium & Discount` · SMC
Starter packs
| Goal | Indicators |
|---|---|
| Benchmark spread (trend + momentum + vol) | Moving Average, Moving Average Convergence Divergence, Relative Strength Index, Bollinger Bands, Average True Range |
| SMC / liquidity | Break of Structure, Fair Value Gap, Premium & Discount, Support and Resistance |
| Intraday | Volume Weighted Average Price, Volume, Relative Volume, Exponential Moving Average |
| Swing daily | Moving Average, Moving Average Convergence Divergence, Relative Strength Index, Ichimoku Cloud, Support and Resistance |
| Rule | Detail |
|---|---|
| Format | One string: "<tickerA> / <tickerB>" (spaces around /) |
| assetA | Numerator — symbol you analyze or rank |
| assetB | Denominator — benchmark |
| Lookup | search_tickers each leg; use exact codes from data[] |
| Examples | MSFT / SPY · AAPL / C:XAUUSD · X:BTCUSD / X:ETHUSD · NVDA / QQQ |
| Pro | Full spread kept on create/update for Pro; Non-Pro may store assetA only; ad_hoc always accepts full spread |
search_tickers exchange filterNASDAQ | NYSE | CRYPTO | NYSE Arca | NYSE American| Field | Enum / limit | Used in |
|---|---|---|
clientLang | en · fr · hk · ko · zh · ja | technical_analysis |
selectedVisibilityType | public · private | technical_analysis |
q | 1–200 chars | search_tickers |
limit | 1–50 (default 5) | search_tickers |
query | 1–2000 chars | bloomberg-oracle-terminal |
userQuestion | 1–10000 chars | technical_analysis |
customizeAgentId / agentId | 1–64 chars | technical_analysis / customize-agent |
| Signal | Meaning | Fix |
|---|---|---|
unauthorized | Bearer auth failed | Reconnect MCP OAuth or refresh TRADEOS_ACCESS_TOKEN |
invalid_input | Bad action, missing field, or wrong enum | Check §4 enums; verify required fields per action |
search_tickers_failed | Search service error | Retry; simplify q |
customize_agent_failed | Agent CRUD error | Check payload shape; nested vs flat args |
build_agent_body_failed | Cannot build TA request from agent config | Verify agent exists via list / get |
agent_not_found | Unknown agentId | Use list to get valid id |
no_permission | Agent belongs to another user | Use caller's own agents only |
agent_fetch_failed | DB read error on latest_analysis | Retry or use technical_analysis for fresh run |
bloomberg_oracle_terminal_failed | News search error | Retry; check balance |
| balance / forbidden | Insufficient account balance | User checks TradeOS quota |
| rate_limit / service_busy | Quota or lock (~180s per chatId) | Wait and retry; avoid parallel overload |
| 500 | Server / mcp-call URL issue | Check endpoint and dev server |
| Missing tool in host | Wrong MCP server connected | Confirm TradeOS, not another bridge |
| # | Wrong | Correct |
|---|---|---|
| 5.2.1 | latest_analysis when user wants fresh chart TA | technical_analysis |
| 5.2.2 | bloomberg-oracle-terminal for per-symbol K-line / levels | technical_analysis |
| 5.2.3 | search_tickers for news or “why did X move” | bloomberg-oracle-terminal |
| 5.2.4 | technical_analysis for create/update/delete agent | customize-agent |
| 5.2.5 | Invent ticker strings (e.g. "silver" instead of C:XAGUSD) | search_tickers → exact ticker |
| 5.2.6 | Two separate tickers for a spread in one call | One string: "AAPL / SPY" |
| 5.2.7 | Pass userId in any tool args | Omit — OAuth injects it |
| 5.2.8 | Pass title on agent create | Omit — server generates title |
| 5.2.9 | Empty indicators on agent update | Send non-empty array or omit field |
| 5.2.10 | Wrong strategy spelling (e.g. Trend Analysis with space) | Exact enum: Trend-Analysis |
| 5.2.11 | Abbreviated indicator (e.g. RSI, MACD) | Full name: Relative Strength Index, Moving Average Convergence Divergence |
| 5.2.12 | One technical_analysis call for 8 spread pairs with no synthesis | One call per pair, then rank in assistant response |
| 5.2.13 | mainWindow = 1D but strategy = Scalping-EMA without user intent | Match strategy to timeframe (see §3.3) |
| Tool | Read this | Ignore / note |
|---|---|---|
technical_analysis | streamPreview (Markdown) | screenshotHints are text hints only — no image bytes in MCP JSON |
technical_analysis | Check streamTruncated | Long runs may timeout; prior retry text dropped from preview |
bloomberg-oracle-terminal | data.summary | Single JSON blob — not streaming |
customize-agent latest_analysis | Stored report body | Not a live LLM run |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.