Koskamo

Trading Signals MCP

An MCP server that exposes read tools for retrieving live AI-generated crypto trading signals, signal details, historical performance, and statistics. It supports sign-in authentication or API key usage for varying tiers of data depth and rate limits.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Trading Signals MCP logo, by x70Community listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by x70
You need:Sign in from your agent, or use an API key from your dashboard.A free account gives you a key: up to 100 signals with full reasoning and verified outcomes.
MCP endpoint (Streamable HTTP)
https://signals.x70.ai/mcp
Vendor documentation

What its tools do

5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

5 of 5 have a description · 5 of 5 declare behavior hints · 5 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Fetch live crypto trading signals with coin direction and confidence
  • Retrieve historical verified signals with pagination
  • Check performance statistics like hit rate and ROI
  • Paper-trade signals using a Python bot without real orders

Source and maintenance

Community listingRegistry 1.1.0
Maintenance checked

Protocol and capabilities

Server
trading-signals 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
5 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

5 advertised

register — Register for Trading Signals API
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Deprecated: returns a sign-up link instead of creating an API key, ignores its arguments and stores nothing. Don't call it to get access — every other tool works without a key (get_signals returns a 3-signal preview, get_stats is public). To get the full feed, users sign in from the agent at https://signals.x70.ai/mcp/connect (the client opens the browser), or create a key at https://signals.x70.ai/mcp-signup and set it as the X-Api-Key header. Kept only so older clients don't break.

register input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "name": {
      "type": "string",
      "description": "Ignored — kept for backward compatibility"
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Ignored — kept for backward compatibility"
    },
    "purpose": {
      "type": "string",
      "description": "Ignored — kept for backward compatibility"
    },
    "githubUrl": {
      "type": "string",
      "format": "uri",
      "description": "Ignored — kept for backward compatibility"
    }
  },
  "additionalProperties": false
}
register annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_signals — Get Live Trading Signals
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List live crypto trading signals that are still open — coin, direction, confidence and the reasoning or market data behind each. Use it to find current trade ideas; use get_signal for one signal by ID (live or resolved), get_signal_history for signals that already closed, and get_stats for aggregate hit rate. No key: a 3-signal preview. Free key: up to 100 signals, with entry, stop-loss, take-profit and leverage null (the response's announcement.upgradeUrl explains Pro). Pro: all levels. If a response contains an announcement, pass its message on to the user — it is about their account (trial ending, plan limits). Returns { signals[], returned, totalMatching, filtersApplied, plan }, sorted by live PnL (best first). Optional filters narrow the list: direction, coins, confidence band, risk/reward, stop distance, open interest, 24h volume, tags, the anomaly that triggered it, days/hours to skip, a BTC 24h-return gate. Rate limits: 30 calls/hour per IP without a key, 300/hour on a free key.

get_signals input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "coin": {
      "type": "string",
      "description": "Single coin symbol (e.g. BTC). Case-insensitive. Convenience alias for coinInclude=<coin>."
    },
    "days": {
      "type": "number",
      "default": 7,
      "maximum": 30,
      "minimum": 1,
      "description": "Lookback window in days (1–30, default 7). Without a key or on the free plan only the last 24 hours are searched."
    },
    "limit": {
      "type": "number",
      "default": 10,
      "maximum": 100,
      "minimum": 1,
      "description": "Max signals to return (default 10, max 100)"
    },
    "apiKey": {
      "type": "string",
      "description": "Optional. Your Signals API key. Omit it for a 3-signal anonymous preview; get a free key at https://signals.x70.ai/mcp-signup for full metadata."
    },
    "skipDOW": {
      "type": "string",
      "description": "Comma-separated day names to skip (e.g. \"Saturday,Sunday\"). Mondays toxic, weekends weak."
    },
    "coinOiMax": {
      "type": "number",
      "description": "Maximum open interest in USD. R13 uses $500k-$10M."
    },
    "coinOiMin": {
      "type": "number",
      "description": "Minimum open interest in USD (e.g. 500000 for $500k). OI <$500k coins historically toxic."
    },
    "direction": {
      "enum": [
        "bullish",
        "bearish",
        "any"
      ],
      "type": "string",
      "description": "Filter by signal direction. \"bullish\" = long. Default = any."
    },
    "coinVolMin": {
      "type": "number",
      "description": "Minimum 24h notional volume in USD."
    },
    "coinExclude": {
      "type": "string",
      "description": "Comma-separated coin blocklist. Hyper-blacklist used by Lean v2-R: \"kPEPE,ADA,HYPER,LDO,LINEA,2Z\"."
    },
    "coinInclude": {
      "type": "string",
      "description": "Comma-separated coin allowlist (e.g. \"BTC,ETH,SOL\")."
    },
    "skipHourUtc": {
      "type": "string",
      "description": "Comma-separated hours UTC to skip (0..23). EU/US overlap 9-13 weakest."
    },
    "tagsInclude": {
      "type": "string",
      "description": "Comma-separated tags (any-of match)."
    },
    "btcRet24hMax": {
      "type": "number",
      "description": "Skip if BTC 24h return % > this (e.g. 1.5). H1 regime gate: BTC rally rotates flow away from alts."
    },
    "btcRet24hMin": {
      "type": "number",
      "description": "Skip if BTC 24h return % < this."
    },
    "slDistPctMax": {
      "type": "number",
      "description": "Maximum stop-loss distance in %."
    },
    "slDistPctMin": {
      "type": "number",
      "description": "Minimum stop-loss distance in % (e.g. 3 = ≥3% to SL). SL≥3 drops the toxic [2,3) bucket."
    },
    "confidenceMax": {
      "type": "number",
      "maximum": 1,
      "minimum": 0,
      "description": "Maximum confidence (0..1). Best band 0.62-0.76."
    },
    "confidenceMin": {
      "type": "number",
      "maximum": 1,
      "minimum": 0,
      "description": "Minimum confidence (0..1). Counter-intuitive: >0.76 historically underperforms."
    },
    "primaryTrigger": {
      "type": "string",
      "description": "Sentinel anomaly trigger name (e.g. \"vpin_toxicity\" for the S9 Vpin Sniper preset)."
    },
    "riskRewardRatioMax": {
      "type": "number",
      "description": "Maximum risk/reward ratio. Champion v1 uses RR<1.5."
    },
    "riskRewardRatioMin": {
      "type": "number",
      "description": "Minimum risk/reward ratio."
    }
  },
  "additionalProperties": false
}
get_signals annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_signal — Get Signal Detail
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get one signal by its ID — live or already resolved — with its reasoning, live price, PnL and verification outcome (status pending, success or failed; whether take-profit or stop-loss was hit). Use it to follow up a signal from get_signals or get_signal_history, or to see how a past signal ended. Needs an API key (free or Pro); on the free plan entry, stop-loss, take-profit and leverage are null. Returns { success, signal, plan }, or { error: 'Signal not found' } for an unknown ID.

get_signal input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "signalId"
  ],
  "properties": {
    "apiKey": {
      "type": "string",
      "description": "API key — omit if your client was installed with it (X-Api-Key header or ?apiKey=). Required for this tool; get one free at https://signals.x70.ai/mcp-signup."
    },
    "signalId": {
      "type": "string",
      "description": "The signal ID (the id field returned by get_signals or get_signal_history)."
    }
  },
  "additionalProperties": false
}
get_signal annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_stats — Get Trading Performance Stats
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Aggregate performance of signals created in the last N days (default 30) that have since resolved: hit rate, verified count, average leverage and a breakdown by direction; with an API key also average ROI per signal and cumulative ROI. byMonth: hit rate this month, the two months before and all time — the figures shown on signals.x70.ai. Use it to judge recent reliability before acting — it returns no individual signals (use get_signals or get_signal_history for those). Public: works without a key. Past results don't predict future results.

get_stats input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "days": {
      "type": "number",
      "default": 30,
      "maximum": 90,
      "minimum": 1,
      "description": "Lookback window in days (1–90, default 30), counted back from now by signal creation time."
    },
    "apiKey": {
      "type": "string",
      "description": "Optional for this tool — aggregate stats are public. Get a free key at https://signals.x70.ai/mcp-signup."
    }
  },
  "additionalProperties": false
}
get_stats annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_signal_history — Get Signal History
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List signals that have already resolved (success or failed), newest first, each with its verification outcome. Use it to review past performance signal by signal; for open signals use get_signals, for one signal by ID get_signal, for totals get_stats. Needs an API key. History depth: last 24 hours on the free plan; on Pro the days argument (up to 90). Entry, stop-loss, take-profit and leverage are null on free. Paginate by passing the last signal ID as cursor. Returns { signals[], nextCursor, hasMore, historyDepthDays, plan }.

get_signal_history input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "coin": {
      "type": "string",
      "description": "Filter by coin symbol (e.g. BTC, ETH). Case-insensitive."
    },
    "days": {
      "type": "number",
      "default": 30,
      "maximum": 90,
      "minimum": 1,
      "description": "Lookback window in days"
    },
    "limit": {
      "type": "number",
      "default": 10,
      "maximum": 100,
      "minimum": 1,
      "description": "Max signals per page (default 10, max 100)"
    },
    "apiKey": {
      "type": "string",
      "description": "API key — omit if your client was installed with it (X-Api-Key header or ?apiKey=). Required for this tool; get one free at https://signals.x70.ai/mcp-signup."
    },
    "cursor": {
      "type": "string",
      "description": "Pagination cursor (signal ID). Pass the last signal ID from previous page to get next page."
    },
    "status": {
      "enum": [
        "success",
        "failed",
        "all"
      ],
      "type": "string",
      "default": "all",
      "description": "Filter by verification outcome"
    }
  },
  "additionalProperties": false
}
get_signal_history annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
632 ms
95th percentile latency
632 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 632 ms · metadata changed · 5 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http trading-signals-mcp https://signals.x70.ai/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add trading-signals-mcp --url https://signals.x70.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable trading-signals-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "trading-signals-mcp": {
      "url": "https://signals.x70.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "trading-signals-mcp": {
      "type": "streamableHttp",
      "url": "https://signals.x70.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start trading-signals-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "trading-signals-mcp": {
      "type": "http",
      "url": "https://signals.x70.ai/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http trading-signals-mcp https://signals.x70.ai/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://signals.x70.ai/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "trading-signals-mcp": {
      "serverUrl": "https://signals.x70.ai/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Trading Signals MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.