{
  "automatic_evidence_credit": false,
  "captures": [],
  "change_log": [
    {
      "after_hash": "145351945562c93bf9ff56794f1e1805d87c5c62b51533b454f020f0b0d76990",
      "before_hash": "145351945562c93bf9ff56794f1e1805d87c5c62b51533b454f020f0b0d76990",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "Declared provider, version, model, operator or AI self-disclosure changed",
            "kind": "DECLARED_INGREDIENTS_CHANGED",
            "path": "$.declared_ingredients_changed",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": null,
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "ce65d318298d63e724b8261b02b5e8c8cf7f525e3e33eb5278dc501ce811a220",
      "evidence_class": "FACT_CHANGE",
      "labels": [
        "DECLARED_INGREDIENTS_CHANGED"
      ],
      "observed_at_utc": "2026-11-09T04:42:52Z",
      "previous_entry_sha256": "9500fe0710375571d538c9c970f8e9287a92f772128760d7ac3f5ef3dedf96db",
      "receipt_id": null,
      "receipt_url": null,
      "sequence": 76529,
      "target_id": "obs_0e341478507d8eda9f538998",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.thestrat.ai/mcp"
    },
    {
      "after_hash": "145351945562c93bf9ff56794f1e1805d87c5c62b51533b454f020f0b0d76990",
      "before_hash": "36afe76dad5b902ab911ccd5bd017282cca31147ad4c8a4f49e3f8ee4125c4de",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[portfolio_check]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[describe_price].description",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "version minor",
            "kind": "VERSION_MINOR",
            "path": "version",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 2
        },
        "taxonomy_version": "1.0.0",
        "total": 3,
        "truncated": false
      },
      "entry_sha256": "dd10a7f7558f1cbb240214d2105b9500a30f87e8c308dbfb6f2b5b8c04b6158a",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-11-09T04:42:52Z",
      "previous_entry_sha256": "78388c0442da956e4cc32bb99732716884a611edefa03f6b3b7c7e5936e6960a",
      "receipt_id": "b2839a01-5b8f-526c-b12c-93a849c4a93a",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/b2839a01-5b8f-526c-b12c-93a849c4a93a",
      "sequence": 76527,
      "target_id": "obs_0e341478507d8eda9f538998",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://mcp.thestrat.ai/mcp"
    }
  ],
  "check_outcomes": {
    "ask": {
      "changed_since": "https://www.gaipagents.com/v1/free/observatory/changed-since?url=<endpoint>",
      "changes_and_reachability": "https://www.gaipagents.com/v1/free/changes/subscribe?url=<endpoint>",
      "conformance": "https://www.gaipagents.com/v1/free/conformance/check?url=<endpoint>"
    },
    "published": false,
    "why": "Outcomes of GAIP's own checks (whether the endpoint answered, HTTP status, response time, conformance findings) are given only to a caller who asks about the URL, never on a public page, list or feed. The same applies to every target."
  },
  "conformance": {
    "findings": "GIVEN_TO_CALLER_ONLY",
    "meaning": "The rule catalogue this manifest was read against at the observed time. The finding codes go only to a caller who checks the URL (check_outcomes.ask.conformance).",
    "observed_at_utc": "2026-11-12T19:52:17Z",
    "protocol": "MCP",
    "rule_catalogue_route": "/v1/free/knowledge/conformance-rules",
    "rule_catalogue_version": "1.0.0"
  },
  "corrections": {
    "contact": "https://www.gaipagents.com/contact",
    "exclusion": "https://www.gaipagents.com/v1/free/observatory/corrections/exclusion",
    "opt_out": "POST kind OPT_OUT to the route; the target is withdrawn from public view at once (a pause). The site's owner makes it permanent at https://www.gaipagents.com/v1/free/observatory/corrections/exclusion.",
    "queued_for_review": 0,
    "route": "https://www.gaipagents.com/v1/free/observatory/corrections"
  },
  "declared_derivations": {
    "data_appetite": {
      "categories": {},
      "fields_read": 53,
      "observed_at_utc": "2026-11-12T19:52:17Z",
      "tools_read": 16
    },
    "dependency_domains": [],
    "last_observed_at_utc": "2026-11-12T19:52:17Z",
    "meaning": "Derived by GAIP from what this agent declared, at the stated time: the categories of data its tools' input fields ask for (counts, by keyword rules gaip.data-appetite-rules.v1), the outside domains its declarations point to, and the operator as the agent itself publishes it. Facts about declarations, not an assessment of the agent or its operator.",
    "operator": {
      "as_published": "ai.thestrat",
      "source_kind": "registry_namespace_domain"
    },
    "rules_version": "gaip.data-appetite-rules.v1",
    "schema_version": "gaip.declared-derivations.v1"
  },
  "latest": {
    "baseline_at_utc": "2026-10-26T07:47:36Z",
    "manifest_sha256": "145351945562c93bf9ff56794f1e1805d87c5c62b51533b454f020f0b0d76990",
    "observed_at_utc": "2026-11-12T19:52:17Z"
  },
  "metadata_signals": {
    "meaning": "Pattern rules are published only as aggregate rates across all observed targets (see the summary), never per party. GAIP issues no overall verdict and does not rank parties.",
    "overall_verdict": null,
    "per_target_results": null,
    "published": "AGGREGATE_ONLY_IN_SUMMARY",
    "rules": [
      {
        "rationale": "Zero-width, bidirectional-control and Unicode tag characters are not visible to a human reader but are read by language models. GAIP reports whether any occur; many have ordinary uses.",
        "rule_id": "OBS-SIG-001",
        "title": "Invisible or bidirectional-control Unicode characters in names or descriptions"
      },
      {
        "rationale": "Tool and skill descriptions are read by models. GAIP reports whether a description contains phrases shaped like instructions to a model (the patterns in GAIP's public conformance rule catalogue, plus the phrases listed in the Observatory method). Such phrases can be benign.",
        "rule_id": "OBS-SIG-002",
        "title": "Instruction-like text in descriptions"
      },
      {
        "rationale": "When a description refers to a tool name that only a different observed server publishes, a model using both servers may connect the two. GAIP reports whether such a reference occurs; shared names are common and often coincidental.",
        "rule_id": "OBS-SIG-003",
        "title": "Description names a tool published by a different observed server"
      },
      {
        "rationale": "Declared OAuth scopes whose names contain wildcard or whole-account wording (*, all, admin, root, full) request wide access by name. GAIP reports whether such a scope name is declared; it does not know what the scope grants.",
        "rule_id": "OBS-SIG-004",
        "title": "Declared authorization scopes with broad-access wording"
      }
    ],
    "third_party_scanners": [
      {
        "name": "Snyk agent-scan (formerly Invariant Labs mcp-scan)",
        "status": "NOT_RUN",
        "url": "https://github.com/snyk/agent-scan"
      },
      {
        "name": "Cisco AI Defense MCP Scanner",
        "status": "NOT_RUN",
        "url": "https://github.com/cisco-ai-defense/mcp-scanner"
      }
    ]
  },
  "method": "https://www.gaipagents.com/observatory",
  "notice": "Facts observed by GAIP at the stated time (UTC); they may be out of date. This is not an assessment of safety, quality, security, legality or trustworthiness of any party, and not a recommendation. To request a correction, add a right of reply or opt out, POST to https://www.gaipagents.com/v1/free/observatory/corrections or use https://www.gaipagents.com/contact.",
  "price_gbp": 0,
  "schema_version": "gaip.observatory.v1.target",
  "silent_changes_last_30_days": {
    "days": 30,
    "entries_read_at_most": 200,
    "kinds": [],
    "line": null,
    "meaning": "Weeks (ISO) in which GAIP recorded a change to the agent's declared tools or interface (tools added or removed, descriptions re-worded, input or output schema, behaviour labels, sign-in, terms or prices, endpoint host) and no declared version (registry or card version, serverInfo.version) moved that week. A week whose version movement is not recorded is not counted. Dated facts from the public change log; not an assessment of the agent.",
    "weeks": [],
    "weeks_with_silent_changes": 0
  },
  "snapshot": {
    "capabilities": [
      "prompts",
      "resources",
      "tools"
    ],
    "description": "Quant price analysis for agents: TheStrat price action, multi-timeframe signals, simultaneous breaks",
    "name": "ai.thestrat/thestrat",
    "parts": [
      "registry_server_json",
      "mcp_initialize_tools_list"
    ],
    "protocol": "MCP",
    "protocolVersion": "2025-11-25",
    "public_copy": "Text excerpts of at most 300 characters; input schemas and security schemes as SHA-256 and size only.",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://mcp.thestrat.ai/mcp"
      }
    ],
    "scopes": [],
    "serverInfo": {
      "name": "thestrat",
      "version": "0.3.1"
    },
    "title": "TheStrat for agents",
    "tools": [
      {
        "annotations": {},
        "description": "Buy list and sell list: reversal signals in force across timeframes (technical signals\n    screener on your own data). Buy: hammer, 2d-2u, 3-2u, 1-2u in force. Sell: shooter, 2u-2d,\n    3-2d, 1-2d in force. Continuations (2u-2u, 2d-2d) do not count. Per timeframe: symbols,\n    count, % of basket, tr",
        "inputSchema": {
          "bytes": 799,
          "published": "HASH_ONLY",
          "sha256": "be4dd27ceb2da21794140d88ac8b36e2335893dab8c053a4636fc7ea86c2f106"
        },
        "name": "buy_sell_list",
        "title": null
      },
      {
        "annotations": {},
        "description": "Label every bar as TheStrat scenario 1, 2u, 2d or 3 (Truth #1).\n\n    Rule: compare each bar with the bar before it. Took the prior high only = 2u. Took the\n    prior low only = 2d. Took both = 3. Took neither = 1 (inside bar). Equal to the prior\n    high/low is NOT a take-out (still a 1). The first ",
        "inputSchema": {
          "bytes": 379,
          "published": "HASH_ONLY",
          "sha256": "d4b84603f459e60d00bbeece0b41212557ac4b9a14fe49a9895ce6cb69c2f46d"
        },
        "name": "classify_bars",
        "title": null
      },
      {
        "annotations": {},
        "description": "Define a TheStrat term with a quote from the docs and its source_url (67-term glossary:\n    definition, machine_rule where the docs state one, status \"needs Alex\" where the docs\n    conflict). If the term is not in the glossary, returns the best docs_search hits.",
        "inputSchema": {
          "bytes": 202,
          "published": "HASH_ONLY",
          "sha256": "517ba5dc759597f710330bbb0d95b74c3ea8f7b09e2ae28f4c70440adb50c36d"
        },
        "name": "define_term",
        "title": null
      },
      {
        "annotations": {},
        "description": "Multi-timeframe price analysis in plain language for one symbol (quant price action,\n    technical signals, timeframe continuity) from your own bars.\n\n    Returns `text` (one short line per timeframe, e.g. \"SPY day: 2u, above the day open\n    (green). Last 3 bars: 2d 1 2u. In force: bullish 2-1-2 ..",
        "inputSchema": {
          "bytes": 651,
          "published": "HASH_ONLY",
          "sha256": "73f84de761e220818ce1a224c088422dc3621ff16def5e41231d075aea0043d2"
        },
        "name": "describe_price",
        "title": null
      },
      {
        "annotations": {},
        "description": "Search TheStrat docs (titles and descriptions from https://thestrat.ai/llms.txt,\n    cached 24 h). Returns title, URL, section and description. Read the URL for detail.",
        "inputSchema": {
          "bytes": 296,
          "published": "HASH_ONLY",
          "sha256": "ecd7e9f412ff4dcd7c2b956ac6f699be732155a1c67ac26d6370405bebaeef4e"
        },
        "name": "docs_search",
        "title": null
      },
      {
        "annotations": {},
        "description": "Exhaustion risk: how much time is left in the signal's bar (session minutes,\n    wall-clock minutes, sessions left, fraction left), and until when the fire stays active.\n\n    Docs example: a 60-minute hammer that triggers at 9:32 has 58 minutes; at 10:25 it has 5.\n    Once the bar closes, the signal",
        "inputSchema": {
          "bytes": 465,
          "published": "HASH_ONLY",
          "sha256": "a77164c5937f8cb298c150fe1c7fbedb05f3739ea86e8d11ed815b97c6f8d0b2"
        },
        "name": "exhaustion",
        "title": null
      },
      {
        "annotations": {},
        "description": "Find TheStrat actionable signals on one timeframe.\n\n    Patterns: 2-2 reversal, 1-2-2 rev strat, 3-2-2, 2-1-2, 3-1-2, 3-2, hammer, shooter,\n    momo hammer/shooter, inside bar, outside bar reversal (2d-3u / 2u-3d), 1-3 rev strat,\n    1-3-2, I-O-I. Each signal has: trigger, target (magnitude, null if",
        "inputSchema": {
          "bytes": 873,
          "published": "HASH_ONLY",
          "sha256": "ab39d68d56b0bf92b1165cd20d137a062ecd707a5928a843973a0839e1970b0a"
        },
        "name": "find_signals",
        "title": null
      },
      {
        "annotations": {},
        "description": "Rules the docs do not state exactly, with the default this server uses. Read this before\n    you present a borderline result as a rule.",
        "inputSchema": {
          "bytes": 67,
          "published": "HASH_ONLY",
          "sha256": "069a19e6719a4d53549d19bcfd90a01ecfc3810834b5adfbe6183d387f1a4ec8"
        },
        "name": "open_decisions",
        "title": null
      },
      {
        "annotations": {},
        "description": "Protect-your-assets check for one portfolio, from your own bars: measurable conditions on the\n    losing side of the user's positions, with the evidence. Read the playbook first: MCP resource\n    thestrat://playbooks/protect-portfolio (or the prompt protect_portfolio).\n\n    Returns (1) the market co",
        "inputSchema": {
          "bytes": 2589,
          "published": "HASH_ONLY",
          "sha256": "8c591ea60397be3f5b6709b11de93d111c6e883ec23eeb499725dabc0d8e8ba1"
        },
        "name": "portfolio_check",
        "title": null
      },
      {
        "annotations": {},
        "description": "Potential signals for the next bar across a basket: every setup whose trigger the next bar\n    (or the open bar) can take, grouped by direction and pattern, with trigger, target and level\n    of reclaim per symbol. A price action watchlist for agents.",
        "inputSchema": {
          "bytes": 985,
          "published": "HASH_ONLY",
          "sha256": "daffa8882e9ceeeb01c1fe6a6f2bc52916c0d7174dc9402e70c3dc17d2a6cb88"
        },
        "name": "potential_signals_next_bar",
        "title": null
      },
      {
        "annotations": {},
        "description": "Build higher-timeframe bars from smaller bars (US equities session 09:30-16:00 New York;\n    60-minute bars start at 09:30; extended hours are dropped; a partial first period is\n    dropped). Each bar gets first_side (which prior side it took first) for 3u/3d.",
        "inputSchema": {
          "bytes": 654,
          "published": "HASH_ONLY",
          "sha256": "6cc869b6e718acd16ebe11e976fac01474e3ffc1a3a0e447ada65d37d6c099b4"
        },
        "name": "resample_bars",
        "title": null
      },
      {
        "annotations": {},
        "description": "Sector rotation by participation: a sector ETF + its holdings on one timeframe.\n\n    Returns the ETF's own state (scenario, color, last 3 bars, signals in force), the most-2s\n    split of the holdings (1 / 2u / 2d / 3, 2u red, 2d green), simultaneous breaks and\n    simultaneous setups across ETF + h",
        "inputSchema": {
          "bytes": 1099,
          "published": "HASH_ONLY",
          "sha256": "339e4331b67b15efb4161aa680cee10ab002e66aa0ddb6aa2464ca7e76cc0e80"
        },
        "name": "sector_analysis",
        "title": null
      },
      {
        "annotations": {},
        "description": "Technical signals in force across a basket: every TheStrat actionable signal whose trigger\n    is taken while its bar is open, grouped by direction and pattern, with % of basket and the\n    trigger, target and level of reclaim per symbol.",
        "inputSchema": {
          "bytes": 975,
          "published": "HASH_ONLY",
          "sha256": "bf73edb6660c636093ad9da9064c82c49aa2e8fb0197de04fb54eaef38eea404"
        },
        "name": "signals_in_force",
        "title": null
      },
      {
        "annotations": {},
        "description": "Simultaneous breaks: find which symbols in a basket broke their setup bar in the same\n    direction in the same bar (2d-2u, 1-2u, 3-1-2u up / 2u-2d, 1-2d down). Quant price action\n    and sector rotation from your own OHLC data, no third-party feed.\n\n    Docs: \"A simultaneous break is multiple corre",
        "inputSchema": {
          "bytes": 1246,
          "published": "HASH_ONLY",
          "sha256": "ba02e2ce945bcdd05e240b476c60fb9997f44877105cf1cdf335975314f3b9af"
        },
        "name": "sim_breaks",
        "title": null
      },
      {
        "annotations": {},
        "description": "Simultaneous setups (before the break): a concentration of setup bars in one direction\n    across a basket of symbols. A technical signals screener on your own data, any timeframe.\n\n    Docs: \"A concentration of signals in the same sector or index identifies a potential\n    simultaneous break: it fi",
        "inputSchema": {
          "bytes": 1246,
          "published": "HASH_ONLY",
          "sha256": "44a4cba9fb610379173f00df489d0619cf5568f838f28ed7ec14a56036b7597a"
        },
        "name": "sim_setups",
        "title": null
      },
      {
        "annotations": {},
        "description": "Full timeframe continuity (FTFC, Truth #2): is the last sale above (up) or below (down)\n    the open of every timeframe in the group, or mixed (conflict)?\n\n    Returns per-timeframe side, color and aggression (above an open: buyers more aggressive,\n    willing to buy at higher prices; below: sellers",
        "inputSchema": {
          "bytes": 564,
          "published": "HASH_ONLY",
          "sha256": "362aa6da08c80482b8ca466f49a6b31072aae7088bd7d45070cefb44a3125927"
        },
        "name": "timeframe_continuity",
        "title": null
      }
    ],
    "version": "0.3.1"
  },
  "status_history": [
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "145351945562c93bf9ff56794f1e1805d87c5c62b51533b454f020f0b0d76990",
      "observed_at_utc": "2026-11-12T19:52:17Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "145351945562c93bf9ff56794f1e1805d87c5c62b51533b454f020f0b0d76990",
      "observed_at_utc": "2026-11-11T17:51:06Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "145351945562c93bf9ff56794f1e1805d87c5c62b51533b454f020f0b0d76990",
      "observed_at_utc": "2026-11-09T04:42:52Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "36afe76dad5b902ab911ccd5bd017282cca31147ad4c8a4f49e3f8ee4125c4de",
      "observed_at_utc": "2026-10-26T07:47:36Z",
      "protocol_version": "2025-11-25"
    }
  ],
  "target": {
    "corrections_route": "https://www.gaipagents.com/v1/free/observatory/corrections",
    "first_seen_at_utc": "2026-10-26T06:37:55Z",
    "kind": "MCP_REMOTE",
    "last_observed_at_utc": "2026-11-12T19:52:17Z",
    "locator": "https://mcp.thestrat.ai/mcp",
    "name": "ai.thestrat/thestrat",
    "source": "official-mcp-registry",
    "target_id": "obs_0e341478507d8eda9f538998"
  }
}