# Trading Signals

> Live AI crypto trading signals for agents. Try 3 signals without a key; sign in from your agent.

- name: io.github.roman-rr/trading-signals
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 74/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.roman-rr%2Ftrading-signals
- tools: https://api.protogrid.dev/v1/servers/io.github.roman-rr%2Ftrading-signals/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "trading-signals": {
      "type": "http",
      "url": "https://signals.x70.ai/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-8d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 74/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: 100 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- pass `auth.cimd`: Client ID Metadata Documents supported
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 5 of 5 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: register (idempotentHint); get_signals (idempotentHint); get_signal (idempotentHint); …
- pass `tools.token_cost`: about 2,143 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 13 tool changes in 30 days
- fail `stability.rug_pull`: 7 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 2,143 tokens to load them all
- tool set hash: 06732ab2e6c0107f7230cd60e820dc3e
- tools last changed: 2026-10-12T13:12:16.950Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.roman-rr/trading-signals.svg)](https://protogrid.dev/servers/io.github.roman-rr/trading-signals)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-12 `get_stats` changed (description)
  - before: 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. 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.
  - after: 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.
- 2026-10-12 `get_signals` changed (description)
  - before: List live crypto trading signals that are still open — coin, direction, confidence and the reasoning 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. 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.
  - after: 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.
- 2026-10-12 `register` changed (description, annotations)
  - before: 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). Users create keys at https://signals.x70.ai/mcp-signup and set them as the X-Api-Key header. Kept only so older clients don't break.
  - after: 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.
- 2026-10-08 `get_signal_history` changed (description, inputSchema) **meaning changed**
  - before: Fetch historical (verified) signals with pagination. Returns resolved signals (success/failed) ordered newest-first.
  - after: 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 }.
- 2026-10-08 `get_stats` changed (description, inputSchema) **meaning changed**
  - before: Get aggregated performance: hit rate, average ROI per signal, average leverage, breakdown by direction. No API key required.
  - after: 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. 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.
- 2026-10-08 `get_signal` changed (description, inputSchema) **meaning changed**
  - before: Fetch a single signal by ID with live price and PnL. Use to check verification status and outcome.
  - after: 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.
- 2026-10-08 `get_signals` changed (description, inputSchema) **meaning changed**
  - before: Fetch live (active) crypto trading signals with entry, SL, TP, leverage, confidence. Optional research-backed filters let you build your own strategy: direction, coin include/exclude, SL distance %, R/R, confidence band, Open Interest range, 24h volume, tags, primary anomaly trigger, day-of-week skips, BTC 24h regime gate. Sorted by live PnL (most profitable first). WORKS WITHOUT AN API KEY: omit apiKey for a free 3-signal preview (coin + direction + confidence); a free account returns up to 100 signals with full reasoning and verified outcomes.
  - after: List live crypto trading signals that are still open — coin, direction, confidence and the reasoning 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. 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.
- 2026-10-08 `register` changed (description) **meaning changed**
  - before: DEPRECATED — no longer issues API keys. Returns a link to https://signals.x70.ai/mcp-signup, where keys are created from a free account. Every other tool works without a key (3-signal preview), so there is no need to call this or to collect anyone's personal details for it.
  - after: 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). Users create keys at https://signals.x70.ai/mcp-signup and set them as the X-Api-Key header. Kept only so older clients don't break.
- 2026-09-28 `get_signal_history` changed (description) **meaning changed**
  - before: Fetch historical (verified) signals with pagination. Returns resolved signals (success/failed) ordered newest-first. Star the repo to support free access: https://github.com/roman-rr/trading-skills
  - after: Fetch historical (verified) signals with pagination. Returns resolved signals (success/failed) ordered newest-first.
- 2026-09-28 `get_stats` changed (description)
  - before: Get aggregated performance: hit rate, average ROI per signal, average leverage, breakdown by direction. No API key required. Star the repo to support free access: https://github.com/roman-rr/trading-skills
  - after: Get aggregated performance: hit rate, average ROI per signal, average leverage, breakdown by direction. No API key required.

Full history: https://api.protogrid.dev/v1/servers/io.github.roman-rr%2Ftrading-signals/changes

## Remotes

- https://signals.x70.ai/mcp (streamable-http, auth none, reachable true, uptime30d 1)
- https://signals.x70.ai/mcp/connect (streamable-http, auth oauth2, reachable true, uptime30d 1)
- https://signals.x70.ai/sse (sse, auth unknown, reachable false, uptime30d 0)

## Packages

_none_

## Tools (5)

- `get_signal`: 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_history`: 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_signals`: 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_stats`: 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.
- `register`: 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.
