Skip to main content
Glama

scan_crypto_market

Machine-readable crypto market intelligence: the currently published long opportunities from an upstream advice system, ranked by opportunity_score (0-100 heuristic, never a calibrated win probability). Per opportunity: signal_id, version, coin, classification (STRONG_LONG..AVOID), opportunity type, publication status, entry validity and freshness in seconds. No execution, no custody, no position sizing. Each response names the next useful call. Paid per request; an empty list is a valid answer.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countYesNumber of items in opportunities[].
queryYesThe validated input echoed back; this tool takes no input, so it is always an empty object.
checked_atYesWhen we produced this answer (ISO 8601, UTC). The only ISO timestamp in the payload; every other timestamp is unix seconds.
disclaimerYesOur product boundary, verbatim in every paid advice response: market intelligence only, no execution, no custody, no position sizing, and opportunity_score is a heuristic rather than a calibrated win probability.
source_as_ofYesUnix seconds — freshness of the upstream advice system's answer.
opportunitiesYesCompact items sorted by opportunity_score descending; an empty array is a valid paid answer meaning nothing is published right now.
next_check_afterNoOnly present when opportunities[] is empty — unix seconds before which scanning again is pointless (now + 900).
source_disclaimerNoVerbatim disclaimer of the upstream advice system, passed through unedited.
recommended_next_callYesMachine-readable next step in the chain (scan → signal → validate → evidence → check), so you can follow the workflow without documentation. null means there is explicitly nothing useful to call now; next_check_after then says when to come back.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "checked_at": {
      +      "description": "When we produced this answer (ISO 8601, UTC). The only ISO timestamp in the payload; every other timestamp is unix seconds.",
      +      "format": "date-time",
      +      "type": "string"
      +    },
      +    "count": {
      +      "description": "Number of items in opportunities[].",
      +      "type": "integer"
      +    },
      +    "disclaimer": {
      +      "description": "Our product boundary, verbatim in every paid advice response: market intelligence only, no execution, no custody, no position sizing, and opportunity_score is a heuristic rather than a calibrated win probability.",
      +      "type": "string"
      +    },
      +    "next_check_after": {
      +      "description": "Only present when opportunities[] is empty — unix seconds before which scanning again is pointless (now + 900).",
      +      "type": "integer"
      +    },
      +    "opportunities": {
      +      "description": "Compact items sorted by opportunity_score descending; an empty array is a valid paid answer meaning nothing is published right now.",
      +      "items": {
      +        "description": "Compact opportunity — enough to rank and pick, not enough to act on; call get_crypto_signal for the full advice.",
      +        "properties": {
      +          "classification": {
      +            "description": "Spot-long classification derived from opportunity_score (shorts are never advised). Bands: 80-100 STRONG_LONG, 65-79 LONG, 50-64 CONDITIONAL_LONG, 35-49 SPECULATIVE_LONG (concrete entry setup) or WATCH (no concrete setup, so entry_zone/stop_loss/take_profit are null), below 35 AVOID (actively negative signals) or NEUTRAL. EXIT is a fresh strong exit condition. Candidates with internal execution blockers are capped upstream at CONDITIONAL_LONG.",
      +            "enum": [
      +              "STRONG_LONG",
      +              "LONG",
      +              "CONDITIONAL_LONG",
      +              "SPECULATIVE_LONG",
      +              "WATCH",
      +              "NEUTRAL",
      +              "AVOID",
      +              "EXIT"
      +            ],
      +            "type": "string"
      +          },
      +          "coin": {
      +            "description": "Product id of the market, e.g. 'BTC-EUR'.",
      +            "type": "string"
      +          },
      +          "entry_valid_until": {
      +            "description": "Unix seconds — end of the 30-minute new-entry window; after it this is no longer a current entry advice.",
      +            "type": "integer"
      +          },
      +          "freshness_seconds": {
      +            "description": "Age in seconds at scan time (now minus published_at); lower is fresher.",
      +            "type": "integer"
      +          },
      +          "opportunity_score": {
      +            "description": "0-100 heuristic ranking of setup quality (trend alignment, EMA separation, momentum, volume, breakout/pullback strength, efficiency ratio, regime direction, ML horizon scores, estimated net edge, data/spread quality). NOT a calibrated win probability; the measured win rate lives in get_crypto_evidence.",
      +            "maximum": 100,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "opportunity_type": {
      +            "description": "Setup shape: PULLBACK enters on a retracement inside an existing trend, BREAKOUT enters on a move through resistance.",
      +            "enum": [
      +              "PULLBACK",
      +              "BREAKOUT"
      +            ],
      +            "type": "string"
      +          },
      +          "publication_status": {
      +            "description": "Publication state of the advice. PUBLISHED = live and current, STALE = retrievable history whose entry window closed, INVALIDATED = an invalidation condition triggered. Expired ids stay retrievable with their real status.",
      +            "enum": [
      +              "PUBLISHED",
      +              "STALE",
      +              "INVALIDATED"
      +            ],
      +            "type": "string"
      +          },
      +          "published_at": {
      +            "description": "Unix seconds — when this version was published.",
      +            "type": "integer"
      +          },
      +          "score_type": {
      +            "description": "Which scheme produced opportunity_score. 'heuristic_v1' is a deterministic, unit-tested heuristic and explicitly signals that the score is not a calibrated probability. Scores are only comparable within one score_type: a 70 of heuristic_v1 says nothing about a 70 of a future heuristic_v2, so any ranking, threshold or history you build resets when this value changes.",
      +            "enum": [
      +              "heuristic_v1"
      +            ],
      +            "type": "string"
      +          },
      +          "signal_id": {
      +            "description": "Stable id of the opportunity across versions; the input for every other call in the chain.",
      +            "pattern": "^sig_[0-9a-f]{12}$",
      +            "type": "string"
      +          },
      +          "version": {
      +            "description": "Version of this advice; starts at 1 and increments on every material change.",
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "query": {
      +      "description": "The validated input echoed back; this tool takes no input, so it is always an empty object.",
      +      "type": "object"
      +    },
      +    "recommended_next_call": {
      +      "description": "Machine-readable next step in the chain (scan → signal → validate → evidence → check), so you can follow the workflow without documentation. null means there is explicitly nothing useful to call now; next_check_after then says when to come back.",
      +      "properties": {
      +        "arguments": {
      +          "description": "Arguments to pass verbatim, e.g. {\"signal_id\":\"sig_a1b2c3d4e5f6\"}, plus known_version for check_crypto_signal.",
      +          "type": "object"
      +        },
      +        "reason": {
      +          "description": "Why this is the useful next step, in plain language.",
      +          "type": "string"
      +        },
      +        "tool": {
      +          "description": "Name of the MCP tool to call next.",
      +          "enum": [
      +            "get_crypto_signal",
      +            "validate_crypto_signal",
      +            "get_crypto_evidence",
      +            "check_crypto_signal"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "source_as_of": {
      +      "description": "Unix seconds — freshness of the upstream advice system's answer.",
      +      "type": "integer"
      +    },
      +    "source_disclaimer": {
      +      "description": "Verbatim disclaimer of the upstream advice system, passed through unedited.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "query",
      +    "checked_at",
      +    "source_as_of",
      +    "count",
      +    "opportunities",
      +    "recommended_next_call",
      +    "disclaimer"
      +  ],
      +  "type": "object"
      +}
  2. Added

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description fully discloses behavioral traits: the score is a heuristic not a calibrated probability, no execution/custody/position sizing, paid per request, empty list valid. This is comprehensive and leaves no ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with key information front-loaded. Each sentence adds value, though it could be slightly more concise without losing clarity. Overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and presence of output schema, the description is complete: it describes return fields (signal_id, version, coin, classification, etc.), explains the scoring heuristic, notes response naming next call, and covers edge cases like empty list. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so as per guidelines baseline is 4. The description does not need to add parameter information since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool returns machine-readable crypto market long opportunities from an upstream advice system, ranked by a heuristic score. It distinguishes from siblings by specifying it's about 'long opportunities' and an 'upstream advice system', which is distinct from tools like check_crypto_signal or get_crypto_signal that focus on individual signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use: to obtain a list of current long opportunities. It clarifies what the tool does NOT do (no execution, no custody, no position sizing), which guides against misuse. However, it does not explicitly compare with alternative tools or provide when-not-to-use guidance, hence slightly below perfect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation5/5

Every tool targets a distinct action and domain: country-specific company checks (check_ch_company, check_fr_company, etc.), insolvency checks, crypto signals, x402 network tools, etc. Descriptions are detailed and make boundaries clear, with no two tools appearing to do the same thing.

Naming Consistency5/5

Tool names follow very consistent patterns: 'check_<country>_<entity>' for registers, 'crypto_*' for crypto intelligence, 'x402_*' for x402 network functions, 'screen_*' for screening, and a few free-form names like 'verify_eu_vat' and 'lookup_lei' that still fit the verb_noun style. No mixing of conventions.

Tool Count4/5

39 tools is high but justified by the broad scope: the server aggregates many country-specific checks, insolvency registers, crypto tools, x402 monitoring, and auxiliary functions (like phone number buying, LEI lookup). Each tool serves a clear purpose, and the count is not excessive given the coverage. A slight reduction could be possible by merging some country checks, but overall it's reasonable.

Completeness4/5

The server covers major European company registers (CH, UK, FR, NL, NO, PL, CZ, FI), insolvency checks (NL, FR), sanctions screening, VAT validation, crypto market intelligence, and x402 network tools. It acknowledges gaps (e.g., no German check) and provides fallback tools like 'screen_eu_supplier' and 'file_agent_want'. Minor missing pieces (e.g., Italian company check) keep it from a perfect 5.

Resources