io.github.gigshow/decker
REMOTE · API.DECKER-AI.COM · SCANNED SEP 25
Deterministic market-state engine for trading agents — state, gate, coordinates, with receipts.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 15 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability75
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4922 tokens (~289/item across 17 items; 15 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage94
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 81% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities20
- Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
How do I install the io.github.gigshow/decker MCP server?
io.github.gigshow/decker is a hosted endpoint at https://api.decker-ai.com/api/v1/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.decker-ai.com
claude mcp add --transport http gigshow-decker 'https://api.decker-ai.com/api/v1/mcp'
{
"mcpServers": {
"gigshow-decker": {
"url": "https://api.decker-ai.com/api/v1/mcp"
}
}
} {
"servers": {
"gigshow-decker": {
"type": "http",
"url": "https://api.decker-ai.com/api/v1/mcp"
}
}
} [mcp_servers.gigshow-decker] url = "https://api.decker-ai.com/api/v1/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gigshow-decker": {
"type": "remote",
"url": "https://api.decker-ai.com/api/v1/mcp",
"enabled": true
}
}
} openclaw mcp add gigshow-decker --url 'https://api.decker-ai.com/api/v1/mcp' --transport streamable-http
mcp_servers:
gigshow-decker:
url: "https://api.decker-ai.com/api/v1/mcp" {
"McpServers": {
"gigshow-decker": {
"Transport": "http",
"Url": "https://api.decker-ai.com/api/v1/mcp"
}
}
} assistant mcp add gigshow-decker -t streamable-http -u 'https://api.decker-ai.com/api/v1/mcp'
{
"mcpServers": {
"gigshow-decker": {
"type": "http",
"url": "https://api.decker-ai.com/api/v1/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 0
- Schema quality: 4391 → 4858 ▼ functional
- New tool “decker.get_price_axis_state” functional
- 19 Sept 26 0
- Tool “decker.get_assembly” rewrote its description, which is the text the model reads security
- 3 Sept 26 0
- Tool “decker.get_market_state” rewrote its description, which is the text the model reads security
- 27 Aug 26 77
- Tool “decker.get_market_state” rewrote its description, which is the text the model reads security
- Tool “decker.get_signals” rewrote its description, which is the text the model reads security
- Tool “decker.get_user_skills” rewrote its description, which is the text the model reads security
- Tool “decker.validate_intent” rewrote its description, which is the text the model reads security
- Schema quality: 3718 → 4225 ▼ functional
- New tool “decker.get_trigger_history” functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 0
- Stability: 0.97 → pass security
- 21 Aug 26 0
- Tool “decker.get_reading” rewrote its description, which is the text the model reads security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 25 Sept 2026 · Probed https://api.decker-ai.com/api/v1/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=api.decker-ai.com | CN=YR1,O=Let's Encrypt,C=US | 10 Sept 2026 | 9 Dec 2026 | RSA 2048 | SHA256-RSA | 518d066575963c428df8b77e62b2cff060a |
| SANs: api.decker-ai.com | ||||||
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.decker-ai.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| decker-ai.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| content-security-policy | default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; img-src 'self' data: https://fastapi.tiangolo.com https://cdn.jsdelivr.net; font-src 'self' data:; connect-src 'self' http://localhost:* ws://localhost:* https://* wss://* |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | geolocation=(), microphone=(), camera=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.decker-ai.com/api/v1/mcp | Verified | 200 | |
| http (plaintext) | http://api.decker-ai.com/api/v1/mcp | HTTPS enforced | 301 | https://api.decker-ai.com/api/v1/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
decker.close_position ~258
Axis③ (Order/Execution) — closes (or partially reduces) an existing position through DECKER'S OWN execution engine (see decker.place_order for what that means — same account-linkage requirement applies here for real positions). Unlike place_order, there is no crypto-6 restriction — this reduces risk, not adds it, so any symbol you actually hold (including HL-synthetic/KRX paper positions) can be closed. Mode is NOT chosen by the caller — this looks up whatever position(s) actually exist for the symbol (real via live exchange query, virtual via the paper ledger) and closes whichever are open; if both a real and a virtual position exist for the same symbol, both are closed and the response reports execution_mode as 'mixed'. No open position for the symbol = a clean not-found response, not an error — safe to call speculatively.
| Name | Type | Req | Description |
|---|---|---|---|
| close_fraction | number | – | Fraction of the current position to close, 0 < x <= 1. Default 1.0 = full close. E.g. 0.5 closes half. |
| symbol | string | yes | e.g. BTCUSDT, XYZ_GOLDUSD — whatever symbol you hold. Aliases resolve like other tools. |
No output schema declared.
No examples provided.
decker.get_assembly ~321
Multi-timeframe optimal-path assembly per symbol (STRATEGY_LAYER §8): one deterministic machine verdict combining all live timeframes — direction, grade (aligned | structure+pullback | exhaustion-reversal), entry (now vs wait, with source TF), stop (risk stop), target (upper-TF target), RR, and a conditional switch coordinate on mixed structure. Upper TF supplies the target (slower = higher success), lower TF supplies the entry. This is the single judgment authority — narrate or filter it, do not re-decide coordinates. Omit symbol for all 14 universe symbols. ⚠ grade='aligned' means no OPPOSING-direction row exists among the active timeframes — it does NOT mean every timeframe's gate is GO/actionable right now. Check matrix_summary[].gate per timeframe before treating 'aligned' as 'all timeframes tradeable now'. ⚠ entry.mode='지금'(now) is a pure price-geometry verdict (STRATEGY_LAYER §8 R3 — is current price within the exhaustion-reversal zone or the ±0.3% entry band), independent of any timeframe's trigger/gate state — it does NOT mean the engine has confirmed a break event on this bar. Check the entry TF's row in matrix_summary[].gate before treating entry.mode='지금' as 'a trigger just fired, act now'.
| Name | Type | Req | Description |
|---|---|---|---|
| symbol | string | – | Optional symbol or alias (BTC, 비트코인, GOLD, 테슬라...). Omit for the full universe. |
No output schema declared.
No examples provided.
decker.get_market_state ~627
Market State v0 — current engine structural state for a symbol/timeframe (latest evaluated bar, persisted engine emit read as-is, zero recompute). DOMAIN FRAME (why this engine exists): the market is read as a TARGET GAME — every coordinate comes from a *verified anchor* (a past level where a triggered move actually succeeded). The `game` block tells you the context that matters: game.status = forming_target (new anchor set, awaiting test) | testing_target (price is testing whether the declared target holds) | direction_resolved (game decided, price traveling); game.target = WHO is being judged (anchor id/phase/band); game.progress_dest = where price goes if the move proceeds (the opposing verified anchor to conquer); game.reverse_dest = where it goes if the move fails (the opposite house — also the stop logic's home); game.why_gate = full gate derivation chain; game.zt_regime = output canonicality (restored = deterministic delta lineage). action_gate alone (GO/WATCH/HOLD) is only a posture — the game context is the information. RAW CONTRACT: fields are engine-native vocabulary (c_state, hold_reason, R_* risk enums …), NOT customer-facing prose — for a human-language view use decker.get_view (with tf) or decker.get_reading. layer=STATE: this is a market-state reading, NOT a trade instruction. Absent fields are null (engine did not emit that axis — no filling). IMPORTANT: top-level state.c_state/action_gate/trigger_kind reflect the TRIGGER SNAPSHOT (only populated on a bar that actually had a trigger event) — null on most bars is normal, not a data gap. For the always-present, every-bar-populated view of the same axes use game.phase.c_state / game.phase.action_gate instead (different freshness, same underlying engine state machine). Don't read a null top-level field as 'engine has no state' — check game.phase first. object_context (top-level, W1-C1 standard object block, present when a recent trigger bar exists): my_anchor/opp_anchor(reversal destination)/judgment_r…
| Name | Type | Req | Description |
|---|---|---|---|
| symbol | string | yes | e.g. BTCUSDT |
| timeframe | string | yes | – |
No output schema declared.
No examples provided.
decker.get_positions ~115
Axis③ (Order/Execution) — this user's actual exposure: real open futures positions (execution_mode=real, with live sl_price/tp_price), virtual (paper) open positions, and the last 10 closed round-trips per mode. This is what your money actually did, distinct from decker.get_signals (axis②, what the engine recommends) — use this before deciding whether to place another order (avoid duplicate/over-exposure) and to check current protective stop/target on a real position.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
decker.get_price_axis_state ~531
Price-axis (가격축) state v0 — latest engine emit for a symbol/timeframe on the SEPARATE close-price target-selection loop (parallel to MAIN, same underlying CBA principle applied to the closing-price series alone; see PRICE_AXIS_CLOSE_STATE_ARCHITECTURE_2026-09-19.md). Zero recompute — reads engine_bar_state.reason_summary.price_axis as persisted (Store-Output-Read, same architecture as decker.get_market_state, just a different axis). session.active = a target is currently being judged (test phase in progress). active_target = {price, run_direction, born_ts} of the candidate that opened the current/most-recent judging session — 'what price was most recently selected as a target'. canonical_tail = {phase, direction_hint, confirmed_direction} from the canonical CONFIRMED/FAILED tracker — C_TARGET (just selected) | TESTING (test phase) | CONFIRMED | FAILED. pending_targets = up to 5 untouched candidate prices, nearest-to-current-close first (a watchlist of future targets). events = this bar's PriceAxisEvent list (target_touch_inside/break, missing, test_try, confirm, post_confirm_retouch) — empty list is normal (no event this bar). post_confirm_retouch is a CONTEXT TAG that always accompanies a target_touch_inside/break, never replaces it: it marks that this session-opening touch follows a completed (confirmed) judging session, i.e. a re-entry rather than a cold start. It does not carry its own coordinate. move_proposal = {posture, triggering_events, strategy_version} from the PRICE strategy box (propose_move) when this bar had events, else null — posture is currently always 'immediate' (v0 default, not yet tuned per-event). This is a PROPOSAL, not an instruction or a gate. IMPORTANT — action_gate is always null here BY DESIGN, even when move_proposal is populated: this axis is diagnostic-only (OUT_CONTRACT §1), NOT wired to engine_action_gate or any order-execution path yet — do not read events/canonical_tail/move_proposal as a trade signal. For actual GO/WATCH/HOLD po…
| Name | Type | Req | Description |
|---|---|---|---|
| symbol | string | yes | e.g. BTCUSDT |
| timeframe | string | yes | – |
No output schema declared.
No examples provided.
decker.get_reading ~302
AI-synthesized market reading for a symbol/timeframe, in customer-facing language: current state description, directional bias scores, bidirectional break targets, MTF verdict per timeframe, and an execution hint (stance + long/short setups). Engine-native raw fields are NOT exposed here — use the REST raw contract (GET /public/reading) or decker.get_market_state for those — except object_context (W1-C1 standard object block, explicit exception: my_anchor/opp_anchor/judgment_ref/geometry/reverse_branch + why limited to action_gate/trigger_kind (internal reason codes scrubbed on this customer surface), present when a recent trigger bar exists, null otherwise incl. individual KRX stocks). object_context.reverse_direction_conflict is present only when a local reversal shows stage='confirmed' but the swing's confirmed direction still disagrees — read it before treating reverse_branch.stage='confirmed' as a swing-level reversal. execution_hint.preferred_direction is derived from key_direction alone and is NOT guaranteed to have a matching long_setup/short_setup (they come from an independent break-target resolver) — check that the setup for the preferred side is non-null before treating preferred_direction as an actionable side.
| Name | Type | Req | Description |
|---|---|---|---|
| include_tfs | string | – | Comma-separated additional TFs (e.g. '1h,4h,1d'). |
| symbol | string | yes | e.g. BTCUSDT |
| tf | string | – | – |
No output schema declared.
No examples provided.
decker.get_signals ~593
Active trading signals for the current user (with Skill Overlay applied), in customer-facing shape: coordinates (entry/target/stop), decision (ENTER/WAIT/SKIP — is_actual_trigger=true only for ENTER; WAIT/SKIP are standing candidates, not executed triggers), action_gate posture (GO/WATCH/HOLD — a stance, not an order command), progress, MTF verdict, and a plain-language summary_ko line. risk_reward_ratio is computed on the DISPLAYED coordinates (after overlay). Signals are retained rather than cut when they age (turn-retention policy) — read freshness_state (open|aged) / age_bars / freshness_sec before treating an old PENDING row as current. Filtered by symbols / min_progress / action_gate — action_gate here filters the CURRENT-MOMENT representative state, it does not search history (almost always 0 rows unless a gate is GO right now); for past GO events with their entry/target/stop and realized performance use decker.get_trigger_history instead. object_context (W1-C1 standard object block, present when a recent trigger bar exists): my_anchor / opp_anchor (reversal destination) / judgment_ref / geometry / why (action_gate + trigger_kind only — internal reason codes are scrubbed on this customer surface, use decker.get_market_state for those) / reverse_branch context (object_context.reverse_direction_conflict is present only when a local reversal shows stage='confirmed' but the swing's confirmed direction still disagrees — read it before treating reverse_branch.stage='confirmed' as a swing-level reversal). null on non-trigger bars or symbols outside the narrative universe (e.g. individual KRX stocks). Before placing any order through any execution tool, check the intent with decker.validate_intent.
| Name | Type | Req | Description |
|---|---|---|---|
| action_gate | string | – | Engine action gate filter (3-layer grammar: gate = transition posture, not an order command). Rows where the engine emitted no gate for this bar (effective_action_gate null, e.g. KRX daily) are exclu… |
| limit | integer | – | – |
| min_progress | number | – | Minimum progress_pct (0-100). |
| symbols | array | – | Symbol filter (e.g. ['BTCUSDT','ETHUSDT']). Omit for all. |
| timeframe | string | – | Signal horizon filter (30m=scalp, 1h=swing, 4h/8h/1d=position). The same symbol can hold OPPOSITE directions on different horizons — omit to get the latest active signal regardless of horizon (its ti… |
No output schema declared.
No examples provided.
decker.get_state_timeline ~156
Market State v0 — per-bar state timeline for a symbol/timeframe (same schema as decker.get_market_state, except each item carries a SLIM `game` tag {status, target_id, zt_regime, provenance} instead of the full game block — read status transitions across bars to see how the target game unfolded (forming → testing → resolved/failed); ascending by bar_ts). Bars the engine did not emit are simply absent (honest gaps, no filling).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| since | string | – | ISO8601 lower bound on bar_ts (exclusive). Optional. |
| symbol | string | yes | e.g. BTCUSDT |
| timeframe | string | yes | – |
No output schema declared.
No examples provided.
decker.get_trigger_history ~227
ACTION axis — actual historical GO triggers (not standing WATCH/HOLD candidates) for a symbol, with entry/target/stop coordinates and realized performance (mfe_pct/mae_pct/exit_reason/exit_price from trigger_performance, null = still open). Distinct from decker.get_signals (which reflects only the current-moment state, not a searchable history — its action_gate filter answers 'what does symbol×tf look like right now', not 'when did this last fire'). Use this to answer 'what did the engine actually trigger recently and at what price' — decker.get_signals/get_market_state cannot answer that. direction is judgment_signals-native vocabulary ("long"/"short"), distinct from the "+"/"-" convention used by other tools — read as-is, no translation.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| since | string | – | ISO8601 lower bound on trigger time (exclusive). Optional. |
| symbol | string | yes | e.g. BTCUSDT |
| timeframe | string | – | Optional — omit for all timeframes. |
No output schema declared.
No examples provided.
decker.get_user_skills ~67
Trading skill catalog + currently active overlay for this user. Returns 8 published skills (conservative_v0/standard_v0/aggressive_v0/default_v0/scalp_v0/tight_v0/wide_v0/swing_v0) and the user's selected one.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
decker.get_view ~341
The engine's VIEW for a symbol — the same composed card the daily briefing sends (single composer, verbatim): overall verdict, big/main timeframe alignment, the current game narrative in plain language, coordinates (baseline ref_price / target / invalidation), 'at this price, this view', and recent self-scoring verdicts (receipts). layer=STATE_VIEW: a market-state reading, NOT a trade instruction. Prefer this over get_market_state when you want the interpreted view instead of raw engine fields. object_context (W1-C1 standard object block, present when a recent trigger bar exists): my_anchor/opp_anchor(reversal destination)/judgment_ref/geometry/why(action_gate+trigger_kind only, reason codes scrubbed on this customer surface)/reverse_branch context (object_context.reverse_direction_conflict is present only when a local reversal shows stage='confirmed' but the swing's confirmed direction still disagrees — read it before treating reverse_branch.stage='confirmed' as a swing-level reversal). null on non-trigger bars or symbols outside the narrative universe. Before placing any order through any execution tool, check the intent with decker.validate_intent.
| Name | Type | Req | Description |
|---|---|---|---|
| symbol | string | yes | e.g. BTCUSDT, XYZ_GOLDUSD (crypto + HL TradFi synthetics; KRX daily lineage not yet covered by view v1) |
| tf | string | – | Optional view timeframe — the grounded narrative is composed on this TF's bar (e.g. '1h' when the user asks about the 1-hour picture). Omit for the engine's default action TF (usually 4h, same as the… |
No output schema declared.
No examples provided.
decker.place_order ~423
Axis③ (Order/Execution) — unlike every other tool here, this one moves money. It places a market order through DECKER'S OWN execution engine (same path as the decker-ai.com chat trading UI, source='mcp') — it does NOT hand off to your own broker connection or exchange account; Decker executes using whatever exchange credentials this user has separately linked to their Decker account on the website. execution_mode (virtual|real) is NOT chosen by the caller — it is resolved server-side from this user's account settings (user_settings.execution_mode) AND the platform's real-trading kill switch; a real-money order requires both an explicit user opt-in AND role/tier eligibility (PRO/ENTERPRISE or admin) AND passing the tier's hard notional/leverage/daily-count caps (checked here before dispatch — violation blocks the order, does not downgrade it to virtual). The response always states which mode actually executed — treat 'virtual' in the response as authoritative even if you expected real. Restricted to the crypto-6 universe (BTCUSDT/ETHUSDT/SOLUSDT/BNBUSDT/XRPUSDT/DOGEUSDT) for this MCP path — HL-synthetic and KRX symbols are read-only via other tools. Call decker.validate_intent first to read the engine's current stance; this tool does not check it for you. Positions are tracked as ONE net row per user+symbol+mode, not per order — if you already hold a position on this symbol, this order nets into it and the response's pre_existing_position field says so. A later close_position call closes the combined total, not just what this call added.
| Name | Type | Req | Description |
|---|---|---|---|
| notional_usd | number | yes | Order size in USD (quantity = notional_usd / current price). This is the value checked against the account's tier notional cap. |
| side | string | yes | Order direction (buy/long or sell/short). |
| symbol | string | yes | Crypto-6 only for this MCP write path. |
No output schema declared.
No examples provided.
decker.set_skill_overlay ~53
Change active trading skill overlay for this user. Immediately affects all subsequent get_signals calls and downstream channels.
| Name | Type | Req | Description |
|---|---|---|---|
| skill_id | string | yes | trading_skills.id (e.g. 'aggressive_v0'). |
No output schema declared.
No examples provided.
decker.update_protective_stops ~281
Axis③ (Order/Execution) — modifies the stop-loss and/or take-profit on an EXISTING open position. There is no cancel_order tool because Decker only places market orders (there is no resting order to cancel) — the actual gap this fills is modifying protective stops on a position you already hold. real: cancels the old exchange stop/take-profit order(s) and places new ones at the given price(s) (new order placed first, old one canceled only after — no unprotected window). virtual: updates the paper position's stop_loss/take_profit columns directly (polled by the paper monitor). Provide at least one of sl_price/tp_price — the other side, if omitted, is left at its current value. If both a real and a virtual position are open for this symbol, pass mode explicitly or the call is rejected asking which one.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | – | Only required when both a real and a virtual position are open for this symbol — says which one to modify. |
| sl_price | number | – | New stop-loss price. Omit to leave the current stop unchanged. |
| symbol | string | yes | e.g. BTCUSDT — must be a symbol you currently hold. |
| tp_price | number | – | New take-profit price. Omit to leave the current target unchanged. |
No output schema declared.
No examples provided.
decker.validate_intent ~526
Pre-trade gate check for a proposed order intent. Call this BEFORE placing any order through any execution tool (e.g. a broker MCP's review→place flow). Checks the intent (symbol + side) against Decker's deterministic market state: engine action_gate (GO/WATCH/HOLD — a transition posture, not an order command), current structural state, and the active signal's direction / invalidation (stop) coordinates. Returns a stance reading, NOT an approval or rejection: the vocabulary is the engine gate as-is plus a mechanical side_alignment (aligned/opposed vs the active signal's direction). covered=false means the engine does not emit state for this symbol — treat as unknown, not as HOLD. top-level action_gate can be null even when covered=true — this is not a missing field, it means the current bar has no fresh trigger reading; check gate_null_reason ('no_gate_available' = neither the current bar nor the carried-forward signal had a gate at all, vs 'signal_stale' = a value existed but the underlying signal exceeded the staleness threshold and was deliberately suppressed rather than served as a confident-but-old answer). The order decision and responsibility remain with the calling agent/user. Every check is persisted to an auditable decision ledger (check_id). signal.object_context (W1-C1 standard object block, present when a recent trigger bar exists): my_anchor/opp_anchor(reversal destination)/judgment_ref/geometry/why(action_gate+trigger_kind only, reason codes scrubbed)/reverse_branch context (object_context.reverse_direction_conflict is present only when a local reversal shows stage='confirmed' but the swing's confirmed direction still disagrees — read it before treating reverse_branch.stage='confirmed' as a swing-level reversal) — null when there is no active signal or no trigger bar.
| Name | Type | Req | Description |
|---|---|---|---|
| order_type | string | – | Optional, informational (market/limit/…) — recorded in the ledger, does not change the state verdict. |
| side | string | yes | Proposed order direction (buy/long = +, sell/short = -). |
| symbol | string | yes | e.g. BTCUSDT, SILVER, 테슬라 — aliases resolve to the engine symbol (XYZ_SILVERUSD, XYZ_TSLAUSD, …). |
| timeframe | string | – | Gate horizon. Omit = your open position's entry TF if you hold one on this symbol, else decker.get_assembly's entry TF (the single judgment authority's current best-path TF), else the engine's defaul… |
No output schema declared.
No examples provided.
What is the io.github.gigshow/decker MCP server?
io.github.gigshow/decker is an MCP server listed in the public MCP registry as io.github.gigshow/decker. Deterministic market-state engine for trading agents, state, gate, coordinates, with receipts. This page covers its hosted endpoint (https://api.decker-ai.com/api/v1/mcp).
Is the io.github.gigshow/decker MCP server safe to use?
io.github.gigshow/decker scores 77 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.gigshow/decker MCP server expose?
io.github.gigshow/decker exposes 15 tools: decker.get_signals, decker.get_assembly, decker.get_reading, decker.get_view, decker.get_market_state, and 10 more. Their descriptions and schemas cost roughly 4,821 tokens of context every time the server is loaded.
Does the io.github.gigshow/decker MCP server require authentication?
No. We connected to io.github.gigshow/decker without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.gigshow/decker MCP server still maintained?
io.github.gigshow/decker is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.