Koskamo

StockMap MCP

StockMap MCP allows AI assistants to query US stock research, including model calls, reasons, and track records for over 4,200 stocks. It supports watchlist management, sector analysis, crypto insights, and market changes, providing a graded record of past predictions rather than financial advice.

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.

StockMap MCP logo, by StockMapVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by StockMap
You need:Sign in with your StockMap account when askedSame account, same plan and the same allowance as on stockmap.io
MCP endpoint (Streamable HTTP)
https://stockmap.io/mcp
Vendor documentation

What you can do with it

  • Ask about any of the more than 4,200 US stocks and get the model's call
  • Show me the market and see last night's changes and graded calls
  • Manage watchlists by adding or removing stocks with your StockMap account
  • Analyze crypto trends and determine if it is altseason

Source and maintenance

Vendor evidenceRegistry 1.9.0

Protocol and capabilities

Server
io.stockmap/stockmap 1.9.0
MCP protocol
2025-06-18
Tools
12 advertised
Resources
8 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

StockMap's tools answer questions about how US stocks, sectors and the market look, from a model's nightly 14-day calls and how its past calls did: stock_call for one stock, compare_stocks for two to five side by side, market_map for the market and which sectors lead or lag, sector for one sector or industry, and last_night for what changed overnight. Each answer carries the not-advice line and the run date. StockMap publishes the same calls to every reader and gives no personal advice: for someone asking what to do with a stock or with their own money, it has its published call and its record, as research, and no call weighs a person's holdings, age, goals or situation.

Tools

12 advertised

stock_call — Stock call
Advertised by the server during the last successful anonymous check.
Advertised read-only

StockMap's published call on one US stock, the same for every reader, by symbol or company name: the model's nightly 14-day call, the strongest reasons for and against, how its past calls on the stock did, the price and the day's change, and what changed last night. Use it when someone asks how a US stock looks, whether it reads strong or weak right now, or what the model's call on it is. Each answer carries the not-advice line and the run date.

stock_call input schema
{
  "type": "object",
  "title": "stock_callArguments",
  "required": [
    "stock"
  ],
  "properties": {
    "stock": {
      "type": "string",
      "title": "Stock",
      "description": "A US stock's symbol (NVDA, BRK.B) or its company name (Nvidia)"
    }
  }
}
stock_call output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Call": {
      "type": "object",
      "title": "Call",
      "required": [
        "band",
        "label",
        "signal",
        "for_count",
        "against_count"
      ],
      "properties": {
        "band": {
          "type": "string",
          "title": "Band"
        },
        "label": {
          "type": "string",
          "title": "Label",
          "description": "The call as the stock page's pill names it"
        },
        "signal": {
          "type": "number",
          "title": "Signal",
          "description": "−1 bearish to +1 bullish"
        },
        "agreement": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Agreement",
          "default": null
        },
        "for_count": {
          "type": "integer",
          "title": "For Count",
          "description": "Insights for the call"
        },
        "confidence": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Confidence",
          "default": null,
          "description": "0 low to 1 high"
        },
        "against_count": {
          "type": "integer",
          "title": "Against Count",
          "description": "Insights against it"
        }
      }
    },
    "Price": {
      "type": "object",
      "title": "Price",
      "properties": {
        "on": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "On",
          "default": null,
          "description": "The trading day"
        },
        "close": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Close",
          "default": null,
          "description": "The close of the run's trading day; the run is nightly"
        },
        "change_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Change Pct",
          "default": null,
          "description": "That day's change, in %"
        },
        "vs_index_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Vs Index Pct",
          "default": null,
          "description": "That day's change less the index's, in points"
        }
      }
    },
    "Stock": {
      "type": "object",
      "title": "Stock",
      "required": [
        "symbol",
        "name",
        "price",
        "call",
        "reasons_for",
        "reasons_against",
        "record",
        "changed",
        "price_series",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url",
          "description": "The stock's page on StockMap"
        },
        "call": {
          "$ref": "#/$defs/Call"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "price": {
          "$ref": "#/$defs/Price"
        },
        "record": {
          "$ref": "#/$defs/Record"
        },
        "sector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Sector",
          "default": null
        },
        "symbol": {
          "type": "string",
          "title": "Symbol",
          "description": "As people write it (BRK.B)"
        },
        "changed": {
          "$ref": "#/$defs/Changed"
        },
        "industry": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Industry",
          "default": null
        },
        "reasons_for": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Reason"
          },
          "title": "Reasons For"
        },
        "sector_lean": {
          "anyOf": [
            {
              "$ref": "#/$defs/SectorLean"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "price_series": {
          "$ref": "#/$defs/Sparkline",
          "description": "The last three months' closes"
        },
        "reasons_against": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Reason"
          },
          "title": "Reasons Against"
        }
      }
    },
    "Driver": {
      "type": "object",
      "title": "Driver",
      "required": [
        "label",
        "short"
      ],
      "properties": {
        "label": {
          "type": "string",
          "title": "Label",
          "description": "The factor as the insight names it"
        },
        "short": {
          "type": "string",
          "title": "Short",
          "description": "The stock page's short label for it"
        },
        "favoured": {
          "anyOf": [
            {
              "enum": [
                "high",
                "low"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Favoured",
          "default": null,
          "description": "The side of the factor the insight favours"
        },
        "stock_side": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Stock Side",
          "default": null,
          "description": "Where this stock sits on it: favoured, against or middle"
        }
      }
    },
    "Reason": {
      "type": "object",
      "title": "Reason",
      "required": [
        "line",
        "sentence",
        "right",
        "drivers"
      ],
      "properties": {
        "line": {
          "type": "string",
          "title": "Line",
          "description": "The reason in one short line: its strongest factors, as the page's chips read"
        },
        "right": {
          "type": "string",
          "title": "Right",
          "description": "How often the insight has been right beside its base rate, as the page says it; empty when it has no accuracy"
        },
        "scope": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Scope",
          "default": null,
          "description": "stock, industry or sector: what the insight is graded against"
        },
        "drivers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Driver"
          },
          "title": "Drivers",
          "description": "The factors the line names"
        },
        "hit_rate": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Hit Rate",
          "default": null
        },
        "sentence": {
          "type": "string",
          "title": "Sentence",
          "description": "The insight's rule in full"
        },
        "base_rate": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base Rate",
          "default": null,
          "description": "How often the same calls would be right by chance; null before the rule's blocks carry the counts"
        }
      }
    },
    "Record": {
      "type": "object",
      "title": "Record",
      "required": [
        "text",
        "hits",
        "graded",
        "too_few"
      ],
      "properties": {
        "hits": {
          "type": "integer",
          "title": "Hits"
        },
        "last": {
          "anyOf": [
            {
              "$ref": "#/$defs/LastCall"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The last graded call"
        },
        "line": {
          "type": "string",
          "title": "Line",
          "default": "",
          "description": "The record line alone: 'Right in h of k two-week windows on SYM since ... (as of ...).', or the too-few line"
        },
        "text": {
          "type": "string",
          "title": "Text",
          "description": "The model's record on this stock, as the stock page says it: the counts of two-week windows and the chance line, or the too-few line"
        },
        "unit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit",
          "default": null
        },
        "since": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Since",
          "default": null
        },
        "chance": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Chance",
          "default": null,
          "description": "What a blind call on the same dates scored, a market number (never this stock's percentage); null without a base rate"
        },
        "graded": {
          "type": "integer",
          "title": "Graded",
          "description": "Independent two-week windows graded"
        },
        "too_few": {
          "type": "boolean",
          "title": "Too Few",
          "description": "True: too few two-week windows graded to judge yet, so no record is given"
        },
        "last_line": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Last Line",
          "default": null,
          "description": "The last graded call, as a sentence"
        }
      }
    },
    "Changed": {
      "type": "object",
      "title": "Changed",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "title": "Text"
        },
        "band_to": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band To",
          "default": null
        },
        "flipped": {
          "type": "integer",
          "title": "Flipped",
          "default": 0,
          "description": "Insights that changed side"
        },
        "run_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Run Date",
          "default": null
        },
        "band_from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band From",
          "default": null
        }
      }
    },
    "Listing": {
      "type": "object",
      "title": "Listing",
      "required": [
        "symbol",
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol"
        }
      }
    },
    "LastCall": {
      "type": "object",
      "title": "LastCall",
      "required": [
        "date",
        "called",
        "verdict"
      ],
      "properties": {
        "date": {
          "type": "string",
          "title": "Date"
        },
        "called": {
          "type": "string",
          "title": "Called",
          "description": "up or down"
        },
        "verdict": {
          "type": "string",
          "title": "Verdict",
          "description": "right or wrong"
        }
      }
    },
    "Sparkline": {
      "type": "object",
      "title": "Sparkline",
      "required": [
        "dates",
        "close"
      ],
      "properties": {
        "close": {
          "type": "array",
          "items": {
            "type": "number"
          },
          "title": "Close"
        },
        "dates": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Dates"
        }
      }
    },
    "SectorLean": {
      "type": "object",
      "title": "SectorLean",
      "required": [
        "name",
        "net",
        "band",
        "text"
      ],
      "properties": {
        "net": {
          "type": "integer",
          "title": "Net",
          "description": "This stock against its sector: the mean read of the page's sector insights on it, −100 to +100 (the page's sector scale). Not the sector's own lean"
        },
        "band": {
          "type": "string",
          "title": "Band"
        },
        "lean": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Lean",
          "default": null,
          "description": "The sector's own 2-week lean, −100 to +100, the number market_map and sector give for the same run; None when that feed is on another run"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "text": {
          "type": "string",
          "title": "Text"
        },
        "lean_band": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Lean Band",
          "default": null
        }
      }
    }
  },
  "title": "StockCallAnswer",
  "required": [
    "query",
    "covers",
    "run"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run"
    },
    "query": {
      "type": "string",
      "title": "Query"
    },
    "stock": {
      "anyOf": [
        {
          "$ref": "#/$defs/Stock"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "None when no one stock matched"
    },
    "covers": {
      "type": "integer",
      "title": "Covers",
      "description": "How many stocks StockMap calls"
    },
    "closest": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Listing"
      },
      "title": "Closest",
      "description": "The stocks the query may have meant"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    }
  }
}
stock_call annotations
{
  "title": "Stock call",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_stocks — Compare stocks
Advertised by the server during the last successful anonymous check.
Advertised read-only

StockMap's published calls on two to five US stocks side by side, the same for every reader, by symbol or company name: each stock's nightly 14-day call, whether it changed last night, the insights for and against it, and how the model's past calls on it did. Use it when someone asks how two to five US stocks stack up against each other, or which of them the model's calls read stronger. Each answer carries the not-advice line and the run date.

compare_stocks input schema
{
  "type": "object",
  "title": "compare_stocksArguments",
  "required": [
    "stocks"
  ],
  "properties": {
    "stocks": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Stocks",
      "maxItems": 5,
      "description": "Two to five US stocks, each by symbol (NVDA, BRK.B) or company name (Nvidia)"
    }
  }
}
compare_stocks output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Call": {
      "type": "object",
      "title": "Call",
      "required": [
        "band",
        "label",
        "signal",
        "for_count",
        "against_count"
      ],
      "properties": {
        "band": {
          "type": "string",
          "title": "Band"
        },
        "label": {
          "type": "string",
          "title": "Label",
          "description": "The call as the stock page's pill names it"
        },
        "signal": {
          "type": "number",
          "title": "Signal",
          "description": "−1 bearish to +1 bullish"
        },
        "agreement": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Agreement",
          "default": null
        },
        "for_count": {
          "type": "integer",
          "title": "For Count",
          "description": "Insights for the call"
        },
        "confidence": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Confidence",
          "default": null,
          "description": "0 low to 1 high"
        },
        "against_count": {
          "type": "integer",
          "title": "Against Count",
          "description": "Insights against it"
        }
      }
    },
    "Price": {
      "type": "object",
      "title": "Price",
      "properties": {
        "on": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "On",
          "default": null,
          "description": "The trading day"
        },
        "close": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Close",
          "default": null,
          "description": "The close of the run's trading day; the run is nightly"
        },
        "change_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Change Pct",
          "default": null,
          "description": "That day's change, in %"
        },
        "vs_index_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Vs Index Pct",
          "default": null,
          "description": "That day's change less the index's, in points"
        }
      }
    },
    "Missed": {
      "type": "object",
      "title": "Missed",
      "required": [
        "query",
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "title": "Text",
          "description": "Why it is not compared, as the answer says it"
        },
        "query": {
          "type": "string",
          "title": "Query"
        },
        "closest": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Listing"
          },
          "title": "Closest",
          "description": "The stocks it may have meant"
        }
      }
    },
    "Record": {
      "type": "object",
      "title": "Record",
      "required": [
        "text",
        "hits",
        "graded",
        "too_few"
      ],
      "properties": {
        "hits": {
          "type": "integer",
          "title": "Hits"
        },
        "last": {
          "anyOf": [
            {
              "$ref": "#/$defs/LastCall"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The last graded call"
        },
        "line": {
          "type": "string",
          "title": "Line",
          "default": "",
          "description": "The record line alone: 'Right in h of k two-week windows on SYM since ... (as of ...).', or the too-few line"
        },
        "text": {
          "type": "string",
          "title": "Text",
          "description": "The model's record on this stock, as the stock page says it: the counts of two-week windows and the chance line, or the too-few line"
        },
        "unit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit",
          "default": null
        },
        "since": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Since",
          "default": null
        },
        "chance": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Chance",
          "default": null,
          "description": "What a blind call on the same dates scored, a market number (never this stock's percentage); null without a base rate"
        },
        "graded": {
          "type": "integer",
          "title": "Graded",
          "description": "Independent two-week windows graded"
        },
        "too_few": {
          "type": "boolean",
          "title": "Too Few",
          "description": "True: too few two-week windows graded to judge yet, so no record is given"
        },
        "last_line": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Last Line",
          "default": null,
          "description": "The last graded call, as a sentence"
        }
      }
    },
    "Changed": {
      "type": "object",
      "title": "Changed",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "title": "Text"
        },
        "band_to": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band To",
          "default": null
        },
        "flipped": {
          "type": "integer",
          "title": "Flipped",
          "default": 0,
          "description": "Insights that changed side"
        },
        "run_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Run Date",
          "default": null
        },
        "band_from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band From",
          "default": null
        }
      }
    },
    "Listing": {
      "type": "object",
      "title": "Listing",
      "required": [
        "symbol",
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol"
        }
      }
    },
    "LastCall": {
      "type": "object",
      "title": "LastCall",
      "required": [
        "date",
        "called",
        "verdict"
      ],
      "properties": {
        "date": {
          "type": "string",
          "title": "Date"
        },
        "called": {
          "type": "string",
          "title": "Called",
          "description": "up or down"
        },
        "verdict": {
          "type": "string",
          "title": "Verdict",
          "description": "right or wrong"
        }
      }
    },
    "CompareStock": {
      "type": "object",
      "title": "CompareStock",
      "required": [
        "symbol",
        "name",
        "price",
        "call",
        "last_night",
        "changed",
        "record",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url",
          "description": "The stock's page on StockMap"
        },
        "call": {
          "$ref": "#/$defs/Call"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "price": {
          "$ref": "#/$defs/Price"
        },
        "record": {
          "$ref": "#/$defs/Record"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol",
          "description": "As people write it (BRK.B)"
        },
        "changed": {
          "$ref": "#/$defs/Changed"
        },
        "last_night": {
          "type": "string",
          "title": "Last Night",
          "description": "The last-night column: Unchanged, or up or down from the band it left"
        }
      }
    }
  },
  "title": "CompareAnswer",
  "required": [
    "queries",
    "stocks",
    "covers",
    "run"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run"
    },
    "covers": {
      "type": "integer",
      "title": "Covers",
      "description": "How many stocks StockMap calls"
    },
    "missed": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Missed"
      },
      "title": "Missed"
    },
    "stocks": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CompareStock"
      },
      "title": "Stocks",
      "description": "In the order asked, each once"
    },
    "queries": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Queries"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    }
  }
}
compare_stocks annotations
{
  "title": "Compare stocks",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
last_night — Last night
Advertised by the server during the last successful anonymous check.
Advertised read-only

What changed in StockMap's calls last night: how many stocks' calls changed band on the market map and the biggest of them, the calls graded last night (made 14 days earlier) with one line on why each was right or wrong, and when the next run starts. Each answer carries the not-advice line and the run date.

last_night input schema
{
  "type": "object",
  "title": "last_nightArguments",
  "properties": {}
}
last_night output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Grade": {
      "type": "object",
      "title": "Grade",
      "required": [
        "symbol",
        "called",
        "verdict",
        "why"
      ],
      "properties": {
        "why": {
          "type": "string",
          "title": "Why",
          "description": "One line on why the call was right or wrong"
        },
        "date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Date",
          "default": null,
          "description": "The day the call was made; it is graded 14 days later"
        },
        "called": {
          "type": "string",
          "title": "Called",
          "description": "bullish or bearish"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol"
        },
        "verdict": {
          "enum": [
            "hit",
            "miss"
          ],
          "type": "string",
          "title": "Verdict"
        }
      }
    },
    "Graded": {
      "type": "object",
      "title": "Graded",
      "required": [
        "n",
        "right",
        "wrong"
      ],
      "properties": {
        "n": {
          "type": "integer",
          "title": "N"
        },
        "right": {
          "type": "integer",
          "title": "Right"
        },
        "wrong": {
          "type": "integer",
          "title": "Wrong"
        },
        "chance": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Chance",
          "default": null,
          "description": "The base rate as one sentence, or None when there is none"
        },
        "base_rate_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Base Rate Pct",
          "default": null,
          "description": "How often a blind call on the same dates was right, over all stocks (a market number, not a score of these calls)"
        }
      }
    },
    "BandChange": {
      "type": "object",
      "title": "BandChange",
      "required": [
        "symbol",
        "to",
        "url"
      ],
      "properties": {
        "to": {
          "type": "string",
          "title": "To",
          "description": "The band the stock's call moved to, as the map paints it"
        },
        "url": {
          "type": "string",
          "title": "Url"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Name",
          "default": null
        },
        "arrow": {
          "anyOf": [
            {
              "enum": [
                "▲",
                "▼"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Arrow",
          "default": null,
          "description": "▲ the call moved up the band order, ▼ down; none when the band it left is not known"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol"
        },
        "band_from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band From",
          "default": null,
          "description": "The band the stock's call left, when the feed records it"
        }
      }
    }
  },
  "title": "LastNightAnswer",
  "required": [
    "run",
    "run_in_flight",
    "changes",
    "more_changes",
    "grades"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run",
      "description": "The run the night is from: the day it ran and the close it called from"
    },
    "graded": {
      "anyOf": [
        {
          "$ref": "#/$defs/Graded"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The calls graded last night"
    },
    "grades": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Grade"
      },
      "title": "Grades"
    },
    "changes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/BandChange"
      },
      "title": "Changes",
      "description": "The biggest of them by market cap"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    },
    "record_url": {
      "type": "string",
      "title": "Record Url",
      "default": "https://stockmap.io/track-record"
    },
    "calls_issued": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Calls Issued",
      "default": null,
      "description": "Calls the run made"
    },
    "more_changes": {
      "type": "integer",
      "title": "More Changes",
      "description": "The changes not listed; all of them are on /what-changed"
    },
    "next_run_utc": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Next Run Utc",
      "default": null,
      "description": "When the next run starts"
    },
    "run_in_flight": {
      "type": "boolean",
      "title": "Run In Flight",
      "description": "True: tonight's run has not landed yet, so this is the previous night (B2's name for run.not_landed)"
    },
    "changed_on_map": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Changed On Map",
      "default": null,
      "description": "Stocks whose call changed band on the map"
    },
    "all_changes_url": {
      "type": "string",
      "title": "All Changes Url",
      "default": "https://stockmap.io/what-changed"
    }
  }
}
last_night annotations
{
  "title": "Last night",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
market_map — Market map
Advertised by the server during the last successful anonymous check.
Advertised read-only

The US stock market on StockMap's map: the 11 sectors, each with its share of the market, its 2-week lean from the model's nightly calls on its stocks, its move on the day and its best and worst stock. A summary, not every stock. Use it when someone asks how the US market looks, or which sectors lead or lag. Each answer carries the not-advice line and the run date.

market_map input schema
{
  "type": "object",
  "title": "market_mapArguments",
  "properties": {}
}
market_map output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Mover": {
      "type": "object",
      "title": "Mover",
      "required": [
        "symbol",
        "name",
        "change_pct",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol",
          "description": "As people write it (BRK.B)"
        },
        "change_pct": {
          "type": "number",
          "title": "Change Pct",
          "description": "Its move on the day, in %"
        }
      }
    },
    "MapSector": {
      "type": "object",
      "title": "MapSector",
      "required": [
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "band": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band",
          "default": null,
          "description": "The lean's band on the map"
        },
        "best": {
          "anyOf": [
            {
              "$ref": "#/$defs/Mover"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Its stock that rose most on the day"
        },
        "lean": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Lean",
          "default": null,
          "description": "The 2-week lean, −100 to +100: the cap-weighted mean of its stocks' calls, the block's colour; None when none of them has a call"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "worst": {
          "anyOf": [
            {
              "$ref": "#/$defs/Mover"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Its stock that fell most on the day"
        },
        "stocks": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Stocks",
          "default": null
        },
        "move_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Move Pct",
          "default": null,
          "description": "Its cap-weighted move on the day, in %"
        },
        "weight_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Weight Pct",
          "default": null,
          "description": "Its share of the market's cap, in %: the block's size"
        }
      }
    }
  },
  "title": "MarketMapAnswer",
  "required": [
    "sectors",
    "stocks",
    "run"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run"
    },
    "stocks": {
      "type": "integer",
      "title": "Stocks",
      "description": "The stocks on the map"
    },
    "map_url": {
      "type": "string",
      "title": "Map Url",
      "default": "https://stockmap.io/heatmap"
    },
    "sectors": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/MapSector"
      },
      "title": "Sectors",
      "description": "Biggest first"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    },
    "sectors_url": {
      "type": "string",
      "title": "Sectors Url",
      "default": "https://stockmap.io/sectors"
    }
  }
}
market_map annotations
{
  "title": "Market map",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
sector — Sector
Advertised by the server during the last successful anonymous check.
Advertised read-only

StockMap's read of one US sector or industry, by name (Information Technology, semiconductors, banks): its 2-week lean from the model's nightly calls, how its stocks' calls split, its industries, and its largest stocks with each one's call and move on the day. Use it when someone asks how a US sector or industry looks, or which of its stocks look strong or weak. Each answer carries the not-advice line and the run date.

sector input schema
{
  "type": "object",
  "title": "sectorArguments",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "title": "Name",
      "description": "A US sector or industry by name: Information Technology, Health Care, semiconductors, banks, software"
    }
  }
}
sector output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Listing": {
      "type": "object",
      "title": "Listing",
      "required": [
        "kind",
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "kind": {
          "enum": [
            "sector",
            "industry"
          ],
          "type": "string",
          "title": "Kind"
        },
        "name": {
          "type": "string",
          "title": "Name"
        }
      }
    },
    "Industry": {
      "type": "object",
      "title": "Industry",
      "required": [
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "band": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band",
          "default": null
        },
        "lean": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Lean",
          "default": null
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "stocks": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Stocks",
          "default": null
        }
      }
    },
    "ScopeRead": {
      "type": "object",
      "title": "ScopeRead",
      "required": [
        "kind",
        "name",
        "largest",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "band": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band",
          "default": null,
          "description": "The lean's band on the map"
        },
        "kind": {
          "enum": [
            "sector",
            "industry"
          ],
          "type": "string",
          "title": "Kind"
        },
        "lean": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Lean",
          "default": null,
          "description": "The 2-week lean, −100 to +100: the cap-weighted mean of its stocks' calls; None when none of them has a call"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "split": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Split",
          "default": null,
          "description": "How its stocks' calls split, in the page's words"
        },
        "sector": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Sector",
          "default": null,
          "description": "An industry's sector"
        },
        "stocks": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Stocks",
          "default": null
        },
        "largest": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/SectorStock"
          },
          "title": "Largest",
          "description": "Its largest stocks by market cap: 10 signed in, 3 otherwise"
        },
        "industries": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Industry"
          },
          "title": "Industries",
          "description": "A sector's industries, biggest first"
        },
        "market_cap": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Market Cap",
          "default": null,
          "description": "As the page writes it ($31.0T)"
        },
        "market_share_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Market Share Pct",
          "default": null,
          "description": "A sector's share of the market's cap, in %"
        }
      }
    },
    "SectorStock": {
      "type": "object",
      "title": "SectorStock",
      "required": [
        "symbol",
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "band": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Band",
          "default": null,
          "description": "The call's band on the map"
        },
        "lean": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Lean",
          "default": null,
          "description": "The model's call as a lean, −100 to +100; None: no call"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol",
          "description": "As people write it (BRK.B)"
        },
        "move_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Move Pct",
          "default": null,
          "description": "Its move on the day, in %"
        },
        "band_changed": {
          "type": "boolean",
          "title": "Band Changed",
          "default": false,
          "description": "True: its band on the map changed last night"
        }
      }
    }
  },
  "title": "SectorAnswer",
  "required": [
    "query",
    "run"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run"
    },
    "query": {
      "type": "string",
      "title": "Query"
    },
    "scope": {
      "anyOf": [
        {
          "$ref": "#/$defs/ScopeRead"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "None when no one sector or industry matched"
    },
    "closest": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Listing"
      },
      "title": "Closest",
      "description": "The sectors and industries it may have meant"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    }
  }
}
sector annotations
{
  "title": "Sector",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
crypto_today — Crypto today
Advertised by the server during the last successful anonymous check.
Advertised read-only

Why crypto is up or down today, from StockMap's Crypto today page: Bitcoin's 24-hour move, how many coins beat it, funding, and the hour's paragraph, every number with its source. Market data with no call on any coin. Each answer carries the stamp, the sources and the not-advice line.

crypto_today input schema
{
  "type": "object",
  "title": "crypto_todayArguments",
  "properties": {}
}
crypto_today output schema
{
  "type": "object",
  "$defs": {
    "CryptoNumber": {
      "type": "object",
      "title": "CryptoNumber",
      "required": [
        "label",
        "value",
        "source"
      ],
      "properties": {
        "sub": {
          "type": "string",
          "title": "Sub",
          "default": ""
        },
        "label": {
          "type": "string",
          "title": "Label"
        },
        "value": {
          "type": "string",
          "title": "Value",
          "description": "As the page prints it (\"−0.1 %\", \"28 of 83\")"
        },
        "source": {
          "type": "string",
          "title": "Source",
          "description": "Where the number comes from (CoinGecko, OKX, alternative.me, StockMap model)"
        }
      }
    }
  },
  "title": "CryptoAnswer",
  "required": [
    "question",
    "answer_text",
    "sentences",
    "numbers",
    "stamp",
    "source_names",
    "page_url",
    "stale"
  ],
  "properties": {
    "card": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "title": "Card",
      "default": null,
      "description": "The page's share card data, with its image URLs (C-1b)"
    },
    "as_of": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "As Of",
      "default": null,
      "description": "The feed's time, ISO 8601 UTC"
    },
    "stale": {
      "type": "boolean",
      "title": "Stale",
      "description": "True when the feed is behind: the page shows the same numbers under a banner"
    },
    "stamp": {
      "type": "string",
      "title": "Stamp",
      "description": "When the numbers are from, as the page stamps them; two clocks give two stamps"
    },
    "numbers": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CryptoNumber"
      },
      "title": "Numbers",
      "description": "The page's tiles"
    },
    "page_url": {
      "type": "string",
      "title": "Page Url"
    },
    "question": {
      "type": "string",
      "title": "Question"
    },
    "sentences": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Sentences"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "We don't tell you what to buy. Research and education, not investment advice."
    },
    "answer_text": {
      "type": "string",
      "title": "Answer Text",
      "description": "The page's own sentences, joined"
    },
    "source_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Source Names"
    },
    "stale_reason": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Stale Reason",
      "default": null
    }
  }
}
crypto_today annotations
{
  "title": "Crypto today",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
is_it_altseason — Is it altseason?
Advertised by the server during the last successful anonymous check.
Advertised read-only

Is it altseason: how many of the top-100 coins (stablecoins out) beat Bitcoin over the last 7 days, beside how many lag it in a typical week, from StockMap's Altseason page. Market data with no call on any coin. Each answer carries the stamp, the sources and the not-advice line.

is_it_altseason input schema
{
  "type": "object",
  "title": "is_it_altseasonArguments",
  "properties": {}
}
is_it_altseason output schema
{
  "type": "object",
  "$defs": {
    "CryptoNumber": {
      "type": "object",
      "title": "CryptoNumber",
      "required": [
        "label",
        "value",
        "source"
      ],
      "properties": {
        "sub": {
          "type": "string",
          "title": "Sub",
          "default": ""
        },
        "label": {
          "type": "string",
          "title": "Label"
        },
        "value": {
          "type": "string",
          "title": "Value",
          "description": "As the page prints it (\"−0.1 %\", \"28 of 83\")"
        },
        "source": {
          "type": "string",
          "title": "Source",
          "description": "Where the number comes from (CoinGecko, OKX, alternative.me, StockMap model)"
        }
      }
    }
  },
  "title": "CryptoAnswer",
  "required": [
    "question",
    "answer_text",
    "sentences",
    "numbers",
    "stamp",
    "source_names",
    "page_url",
    "stale"
  ],
  "properties": {
    "card": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "title": "Card",
      "default": null,
      "description": "The page's share card data, with its image URLs (C-1b)"
    },
    "as_of": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "As Of",
      "default": null,
      "description": "The feed's time, ISO 8601 UTC"
    },
    "stale": {
      "type": "boolean",
      "title": "Stale",
      "description": "True when the feed is behind: the page shows the same numbers under a banner"
    },
    "stamp": {
      "type": "string",
      "title": "Stamp",
      "description": "When the numbers are from, as the page stamps them; two clocks give two stamps"
    },
    "numbers": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CryptoNumber"
      },
      "title": "Numbers",
      "description": "The page's tiles"
    },
    "page_url": {
      "type": "string",
      "title": "Page Url"
    },
    "question": {
      "type": "string",
      "title": "Question"
    },
    "sentences": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Sentences"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "We don't tell you what to buy. Research and education, not investment advice."
    },
    "answer_text": {
      "type": "string",
      "title": "Answer Text",
      "description": "The page's own sentences, joined"
    },
    "source_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Source Names"
    },
    "stale_reason": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Stale Reason",
      "default": null
    }
  }
}
is_it_altseason annotations
{
  "title": "Is it altseason?",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
crypto_stocks — Crypto stocks
Advertised by the server during the last successful anonymous check.
Advertised read-only

Which US crypto stocks StockMap's model leans on: how many it leans outperform, neutral or underperform, how many of its graded two-week windows on them were right, and Bitcoin's move since the last US close. The calls are the stock model's, on the stocks, never on coins. Each answer carries the stamp, the sources and the not-advice line.

crypto_stocks input schema
{
  "type": "object",
  "title": "crypto_stocksArguments",
  "properties": {}
}
crypto_stocks output schema
{
  "type": "object",
  "$defs": {
    "CryptoNumber": {
      "type": "object",
      "title": "CryptoNumber",
      "required": [
        "label",
        "value",
        "source"
      ],
      "properties": {
        "sub": {
          "type": "string",
          "title": "Sub",
          "default": ""
        },
        "label": {
          "type": "string",
          "title": "Label"
        },
        "value": {
          "type": "string",
          "title": "Value",
          "description": "As the page prints it (\"−0.1 %\", \"28 of 83\")"
        },
        "source": {
          "type": "string",
          "title": "Source",
          "description": "Where the number comes from (CoinGecko, OKX, alternative.me, StockMap model)"
        }
      }
    }
  },
  "title": "CryptoAnswer",
  "required": [
    "question",
    "answer_text",
    "sentences",
    "numbers",
    "stamp",
    "source_names",
    "page_url",
    "stale"
  ],
  "properties": {
    "card": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "title": "Card",
      "default": null,
      "description": "The page's share card data, with its image URLs (C-1b)"
    },
    "as_of": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "As Of",
      "default": null,
      "description": "The feed's time, ISO 8601 UTC"
    },
    "stale": {
      "type": "boolean",
      "title": "Stale",
      "description": "True when the feed is behind: the page shows the same numbers under a banner"
    },
    "stamp": {
      "type": "string",
      "title": "Stamp",
      "description": "When the numbers are from, as the page stamps them; two clocks give two stamps"
    },
    "numbers": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CryptoNumber"
      },
      "title": "Numbers",
      "description": "The page's tiles"
    },
    "page_url": {
      "type": "string",
      "title": "Page Url"
    },
    "question": {
      "type": "string",
      "title": "Question"
    },
    "sentences": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Sentences"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "We don't tell you what to buy. Research and education, not investment advice."
    },
    "answer_text": {
      "type": "string",
      "title": "Answer Text",
      "description": "The page's own sentences, joined"
    },
    "source_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Source Names"
    },
    "stale_reason": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Stale Reason",
      "default": null
    }
  }
}
crypto_stocks annotations
{
  "title": "Crypto stocks",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
bitcoin_test — Did my coins beat Bitcoin?
Advertised by the server during the last successful anonymous check.
Advertised read-only

Did the person's coins beat Bitcoin: their holdings as they would paste them on StockMap's Bitcoin test page ("ETH 2, SOL 40 since Jan 15"), priced then and now beside the same dollars held in Bitcoin, from CoinGecko's prices. Nothing is stored. Arithmetic on past prices: no call on any coin, and no advice on the holdings. Each answer carries the stamp, the sources and the not-advice line.

bitcoin_test input schema
{
  "type": "object",
  "title": "bitcoin_testArguments",
  "required": [
    "holdings"
  ],
  "properties": {
    "since": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Since",
      "default": null,
      "description": "When they bought, for holdings the paste gives no date (the page's \"Held since\"), YYYY-MM-DD"
    },
    "holdings": {
      "type": "string",
      "title": "Holdings",
      "maxLength": 4000,
      "minLength": 1,
      "description": "The coins and amounts as the person would paste them, with a date if they gave one: \"ETH 2, SOL 40, DOGE 10000 since Jan 15\""
    }
  }
}
bitcoin_test output schema
{
  "type": "object",
  "$defs": {
    "CryptoNumber": {
      "type": "object",
      "title": "CryptoNumber",
      "required": [
        "label",
        "value",
        "source"
      ],
      "properties": {
        "sub": {
          "type": "string",
          "title": "Sub",
          "default": ""
        },
        "label": {
          "type": "string",
          "title": "Label"
        },
        "value": {
          "type": "string",
          "title": "Value",
          "description": "As the page prints it (\"−0.1 %\", \"28 of 83\")"
        },
        "source": {
          "type": "string",
          "title": "Source",
          "description": "Where the number comes from (CoinGecko, OKX, alternative.me, StockMap model)"
        }
      }
    }
  },
  "title": "CryptoAnswer",
  "required": [
    "question",
    "answer_text",
    "sentences",
    "numbers",
    "stamp",
    "source_names",
    "page_url",
    "stale"
  ],
  "properties": {
    "card": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "title": "Card",
      "default": null,
      "description": "The page's share card data, with its image URLs (C-1b)"
    },
    "as_of": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "As Of",
      "default": null,
      "description": "The feed's time, ISO 8601 UTC"
    },
    "stale": {
      "type": "boolean",
      "title": "Stale",
      "description": "True when the feed is behind: the page shows the same numbers under a banner"
    },
    "stamp": {
      "type": "string",
      "title": "Stamp",
      "description": "When the numbers are from, as the page stamps them; two clocks give two stamps"
    },
    "numbers": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CryptoNumber"
      },
      "title": "Numbers",
      "description": "The page's tiles"
    },
    "page_url": {
      "type": "string",
      "title": "Page Url"
    },
    "question": {
      "type": "string",
      "title": "Question"
    },
    "sentences": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Sentences"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "We don't tell you what to buy. Research and education, not investment advice."
    },
    "answer_text": {
      "type": "string",
      "title": "Answer Text",
      "description": "The page's own sentences, joined"
    },
    "source_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Source Names"
    },
    "stale_reason": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Stale Reason",
      "default": null
    }
  }
}
bitcoin_test annotations
{
  "title": "Did my coins beat Bitcoin?",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
my_watchlists — My watchlists
Advertised by the server during the last successful anonymous check.
Advertised read-only

The signed-in person's StockMap watchlists: each list's stocks with the model's published call on each (the same call every reader sees), the calls that changed last night first. Each answer carries the not-advice line and the run date.

my_watchlists input schema
{
  "type": "object",
  "title": "my_watchlistsArguments",
  "properties": {}
}
my_watchlists output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Watched": {
      "type": "object",
      "title": "Watched",
      "required": [
        "symbol",
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "call": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Call",
          "default": null,
          "description": "The model's call, as the watchlist shows it; None: no call this run"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "signal": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Signal",
          "default": null,
          "description": "The call's signal, −100 to +100"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol",
          "description": "As people write it (BRK.B)"
        },
        "changed_from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Changed From",
          "default": null,
          "description": "The call before last night, when last night changed it"
        }
      }
    },
    "WatchList": {
      "type": "object",
      "title": "WatchList",
      "required": [
        "name",
        "stocks",
        "changed"
      ],
      "properties": {
        "name": {
          "type": "string",
          "title": "Name"
        },
        "stocks": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Watched"
          },
          "title": "Stocks",
          "description": "The calls that changed last night first, then in the list's order"
        },
        "changed": {
          "type": "integer",
          "title": "Changed",
          "description": "Its stocks whose call changed last night"
        },
        "read_only": {
          "type": "boolean",
          "title": "Read Only",
          "default": false,
          "description": "Beyond the plan's number of lists: it keeps its stocks, takes no more"
        }
      }
    }
  },
  "title": "WatchlistsAnswer",
  "required": [
    "lists",
    "run"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run"
    },
    "url": {
      "type": "string",
      "title": "Url",
      "default": "https://stockmap.io/watchlist"
    },
    "lists": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/WatchList"
      },
      "title": "Lists"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    }
  }
}
my_watchlists annotations
{
  "title": "My watchlists",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
watch — Watch a stock
Advertised by the server during the last successful anonymous check.

Add a US stock to the signed-in person's StockMap watchlist: to the list named (made if it is new) or their first list. A stock is on one list at a time, so naming another list moves it.

watch input schema
{
  "type": "object",
  "title": "watchArguments",
  "required": [
    "stock"
  ],
  "properties": {
    "stock": {
      "type": "string",
      "title": "Stock",
      "description": "A US stock's symbol (NVDA, BRK.B) or its company name (Nvidia)"
    },
    "watchlist": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Watchlist",
      "default": null,
      "description": "The list's name, made if the person has none by that name; left out, their first list"
    }
  }
}
watch output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Watched": {
      "type": "object",
      "title": "Watched",
      "required": [
        "symbol",
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "call": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Call",
          "default": null,
          "description": "The model's call, as the watchlist shows it; None: no call this run"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "signal": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Signal",
          "default": null,
          "description": "The call's signal, −100 to +100"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol",
          "description": "As people write it (BRK.B)"
        },
        "changed_from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Changed From",
          "default": null,
          "description": "The call before last night, when last night changed it"
        }
      }
    }
  },
  "title": "WatchAnswer",
  "required": [
    "stock",
    "list",
    "run"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run"
    },
    "url": {
      "type": "string",
      "title": "Url",
      "default": "https://stockmap.io/watchlist"
    },
    "list": {
      "type": "string",
      "title": "List",
      "description": "The list it is on now"
    },
    "stock": {
      "$ref": "#/$defs/Watched"
    },
    "already": {
      "type": "boolean",
      "title": "Already",
      "default": false,
      "description": "True: it was on that list already, and nothing changed"
    },
    "moved_from": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Moved From",
      "default": null,
      "description": "The list it was moved off, if it was on another"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    }
  }
}
watch annotations
{
  "title": "Watch a stock",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
unwatch — Stop watching a stock
Advertised by the server during the last successful anonymous check.
Advertised destructive

Remove a US stock from the signed-in person's StockMap watchlists.

unwatch input schema
{
  "type": "object",
  "title": "unwatchArguments",
  "required": [
    "stock"
  ],
  "properties": {
    "stock": {
      "type": "string",
      "title": "Stock",
      "description": "A US stock's symbol (NVDA, BRK.B) or its company name (Nvidia)"
    }
  }
}
unwatch output schema
{
  "type": "object",
  "$defs": {
    "Run": {
      "type": "object",
      "title": "Run",
      "properties": {
        "not_landed": {
          "type": "boolean",
          "title": "Not Landed",
          "default": false,
          "description": "True: tonight's run has not landed yet, so this is the previous run"
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "default": null
        },
        "trading_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trading Date",
          "default": null
        }
      }
    },
    "Watched": {
      "type": "object",
      "title": "Watched",
      "required": [
        "symbol",
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "call": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Call",
          "default": null,
          "description": "The model's call, as the watchlist shows it; None: no call this run"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "signal": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Signal",
          "default": null,
          "description": "The call's signal, −100 to +100"
        },
        "symbol": {
          "type": "string",
          "title": "Symbol",
          "description": "As people write it (BRK.B)"
        },
        "changed_from": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Changed From",
          "default": null,
          "description": "The call before last night, when last night changed it"
        }
      }
    }
  },
  "title": "UnwatchAnswer",
  "required": [
    "stock",
    "run"
  ],
  "properties": {
    "run": {
      "$ref": "#/$defs/Run"
    },
    "url": {
      "type": "string",
      "title": "Url",
      "default": "https://stockmap.io/watchlist"
    },
    "stock": {
      "$ref": "#/$defs/Watched"
    },
    "not_advice": {
      "type": "string",
      "title": "Not Advice",
      "default": "The model's track-recorded read, not financial advice."
    },
    "removed_from": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Removed From",
      "default": null,
      "description": "The list it was taken off; None: it was on none"
    }
  }
}
unwatch annotations
{
  "title": "Stop watching a stock",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

8 advertised

stock — Stock call

Advertised by the server during the last successful anonymous check.

The model's track-recorded call, reasons for and against, price and record for one stock

stock URI
ui://stockmap/stock.html

MIME type: text/html;profile=mcp-app

compare — Compare stocks

Advertised by the server during the last successful anonymous check.

StockMap's calls on two to five US stocks side by side: call, last night, for · against, and record

compare URI
ui://stockmap/compare.html

MIME type: text/html;profile=mcp-app

last_night — Last night

Advertised by the server during the last successful anonymous check.

What changed in StockMap's calls last night: calls changed on the map and the night's graded calls

last_night URI
ui://stockmap/last_night.html

MIME type: text/html;profile=mcp-app

map — Market map

Advertised by the server during the last successful anonymous check.

The US market on StockMap's map: the 11 sectors sized by their share of the market and coloured by the model's 2-week lean

map URI
ui://stockmap/map.html

MIME type: text/html;profile=mcp-app

watchlist — Watchlist

Advertised by the server during the last successful anonymous check.

The signed-in person's StockMap watchlists: each list's stocks with the model's call, the calls that changed last night first

watchlist URI
ui://stockmap/watchlist.html

MIME type: text/html;profile=mcp-app

crypto_today — Crypto today

Advertised by the server during the last successful anonymous check.

Why crypto is up or down today: Bitcoin's move, breadth, funding, and the hour's paragraph

crypto_today URI
ui://stockmap/crypto_today.html

MIME type: text/html;profile=mcp-app

crypto_altseason — Is it altseason?

Advertised by the server during the last successful anonymous check.

Whether it is altseason: top-100 coins beating Bitcoin over 7 days, beside the typical-week base rate

crypto_altseason URI
ui://stockmap/crypto_altseason.html

MIME type: text/html;profile=mcp-app

crypto_stocks — Crypto stocks

Advertised by the server during the last successful anonymous check.

US crypto-exposed stocks with the model's lean, graded record and Bitcoin's move since the US close

crypto_stocks URI
ui://stockmap/crypto_stocks.html

MIME type: text/html;profile=mcp-app

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
723 ms
95th percentile latency
723 ms

Maintenance history

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

  • · probe · passed · 723 ms · metadata changed · 12 tool(s), 8 resource(s), 0 resource template(s), 0 prompt(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 stockmap-mcp https://stockmap.io/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 stockmap-mcp --url https://stockmap.io/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start stockmap-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "stockmap-mcp": {
      "type": "http",
      "url": "https://stockmap.io/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 stockmap-mcp https://stockmap.io/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "stockmap-mcp": {
      "url": "https://stockmap.io/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": {
    "stockmap-mcp": {
      "serverUrl": "https://stockmap.io/mcp"
    }
  }
}

Let your agent find its tools

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

Do you run StockMap MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing