{
  "automatic_evidence_credit": false,
  "captures": [],
  "change_log": [
    {
      "after_hash": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "before_hash": "a565701c184f22b3eb2a06ba190dce23e04d15aca4028bf3a55d7c6f0bae9cbb",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[get_ungate_brands]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[start_a2a_finder_scan].description",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "INFO",
            "fact": "tool description changed",
            "kind": "TOOL_DESCRIPTION_CHANGED",
            "path": "tools[start_reverse_source_scan].description",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 2,
          "NON_BREAKING": 1
        },
        "taxonomy_version": "1.0.0",
        "total": 3,
        "truncated": false
      },
      "entry_sha256": "d537329ef1e27bb8a477042d27e821dc5761354a5fedfb5cf572930d3c7c1f8d",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-10-09T19:11:56Z",
      "previous_entry_sha256": "092bc1a8c336b01ed4e971448f10349857533bec57b46a43b565e56665fbf8f7",
      "receipt_id": "0b1b0954-359d-555b-bb55-339bad2762d8",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/0b1b0954-359d-555b-bb55-339bad2762d8",
      "sequence": 21104,
      "target_id": "obs_dbb172710f8c4b8d68a2c9d5",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://sorsa.app/mcp"
    },
    {
      "after_hash": "a565701c184f22b3eb2a06ba190dce23e04d15aca4028bf3a55d7c6f0bae9cbb",
      "before_hash": "14ea6ffbd4e05f7555aace6bf14e2c83fd87b9d3c97add48983a817b700175df",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[confirm_ungate_supplier]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[create_finder_monitor]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[get_ungate_status]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[get_ungate_suppliers]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[request_ungate_check]",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 0,
          "NON_BREAKING": 5
        },
        "taxonomy_version": "1.0.0",
        "total": 5,
        "truncated": false
      },
      "entry_sha256": "97238837ab413d695321c95812b7cca24533492352fd22d7fe8a9a1613cf06ad",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-10-07T16:26:04Z",
      "previous_entry_sha256": "567894958c8d649c737fcfc75c9bf54b19e4583895acafc05860eded800ee61e",
      "receipt_id": "f8ae0d24-a115-5145-9d74-ce4b28af378f",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/f8ae0d24-a115-5145-9d74-ce4b28af378f",
      "sequence": 19042,
      "target_id": "obs_dbb172710f8c4b8d68a2c9d5",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://sorsa.app/mcp"
    },
    {
      "after_hash": "14ea6ffbd4e05f7555aace6bf14e2c83fd87b9d3c97add48983a817b700175df",
      "before_hash": "c6910a2f3a4eb6ad739eb30c77470a65a9162be2fe37b6491dcbc189dda5032e",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "input field added",
            "kind": "INPUT_FIELD_ADDED",
            "path": "tools[find_products].inputSchema.properties[min_sellers]",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 0,
          "NON_BREAKING": 1
        },
        "taxonomy_version": "1.0.0",
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "f916be48d2e5271d9e5e4e0f18de150c3deb413fdfd884433c42e161d6f6e440",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED"
      ],
      "observed_at_utc": "2026-10-03T11:02:28Z",
      "previous_entry_sha256": "317e71e0d44929c2d24fdc1f11cc864846bd14248d7fc6997b12c24c63ee0258",
      "receipt_id": "63596157-2678-571a-a143-68f168035358",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/63596157-2678-571a-a143-68f168035358",
      "sequence": 8230,
      "target_id": "obs_dbb172710f8c4b8d68a2c9d5",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://sorsa.app/mcp"
    },
    {
      "after_hash": "c6910a2f3a4eb6ad739eb30c77470a65a9162be2fe37b6491dcbc189dda5032e",
      "before_hash": "0294c9d55cacc3036a2af877ffab0db69108662f78e8fd970282201238e49adf",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[add_purchase]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[create_listing]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[generate_sku]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[get_sheet_status]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[run_sheet_action]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[set_cog]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "protocol version changed",
            "kind": "PROTOCOL_VERSION_CHANGED",
            "path": "protocolVersion",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 0,
          "NON_BREAKING": 7
        },
        "taxonomy_version": "1.0.0",
        "total": 7,
        "truncated": false
      },
      "entry_sha256": "046235c605c2541d8ff10a5d860f42f7c7e034ad8657466ee1d24ffb42a83d29",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-10-02T06:52:29Z",
      "previous_entry_sha256": "98332d1aa89fa34cd24d7bf0a637955532299df0cf2beccb345e2e9851ae2219",
      "receipt_id": "1b0becc2-3240-556d-b515-0404d00001cc",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/1b0becc2-3240-556d-b515-0404d00001cc",
      "sequence": 4092,
      "target_id": "obs_dbb172710f8c4b8d68a2c9d5",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://sorsa.app/mcp"
    },
    {
      "after_hash": "0294c9d55cacc3036a2af877ffab0db69108662f78e8fd970282201238e49adf",
      "before_hash": "17ea23c12bcaaacfbff475636cb17d769345983572ba9ed84916fb7bcba4c4d5",
      "diff": {
        "changes": [
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[find_products]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "tool added",
            "kind": "TOOL_ADDED",
            "path": "tools[get_keepa_key_status]",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 0,
          "NON_BREAKING": 2
        },
        "taxonomy_version": "1.0.0",
        "total": 2,
        "truncated": false
      },
      "entry_sha256": "9703631f3e1e207ead16952d98dd3930e41cba762b67cba5862b4eebe00fcefb",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "TOOL_LIST_OR_TOOL_TEXT_CHANGED"
      ],
      "observed_at_utc": "2026-09-30T18:07:30Z",
      "previous_entry_sha256": "dfd699a144ef331d7b8a92a798d77a1273497cc3f0f8dc0bd82990f2e85d9739",
      "receipt_id": "93a69966-4d33-5a5c-a1df-b2719f76b509",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/93a69966-4d33-5a5c-a1df-b2719f76b509",
      "sequence": 81,
      "target_id": "obs_dbb172710f8c4b8d68a2c9d5",
      "target_kind": "MCP_REMOTE",
      "target_locator": "https://sorsa.app/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-10-17T06:24:44Z",
    "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": 200,
      "observed_at_utc": "2026-10-17T06:24:44Z",
      "tools_read": 70
    },
    "dependency_domains": [],
    "last_observed_at_utc": "2026-10-17T06:24:44Z",
    "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": "app.sorsa",
      "source_kind": "registry_namespace_domain"
    },
    "rules_version": "gaip.data-appetite-rules.v1",
    "schema_version": "gaip.declared-derivations.v1"
  },
  "latest": {
    "baseline_at_utc": "2026-09-29T09:32:51Z",
    "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
    "observed_at_utc": "2026-10-17T06:24:44Z"
  },
  "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": [
      "tool_changed_past_the_64_kept_in_full",
      "tool_descriptions_reworded",
      "tools_added"
    ],
    "line": "In the last 30 days its declared tools or interface changed with no declared version change in 1 week: 2026-W41 (2026-10-07, 2026-10-09); kinds: a tool past the 64 kept in full changed, tool descriptions re-worded, tools added.",
    "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": [
      {
        "dates": [
          "2026-10-07",
          "2026-10-09"
        ],
        "kinds": [
          "tool_changed_past_the_64_kept_in_full",
          "tool_descriptions_reworded",
          "tools_added"
        ],
        "week": "2026-W41"
      }
    ],
    "weeks_with_silent_changes": 1
  },
  "snapshot": {
    "capabilities": [
      "experimental",
      "prompts",
      "resources",
      "tools"
    ],
    "description": "Amazon FBA arbitrage toolkit: product analysis, deal feeds, price alerts and sourcing management.",
    "name": "app.sorsa/sorsa",
    "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://sorsa.app/mcp"
      }
    ],
    "scopes": [],
    "serverInfo": {
      "name": "sorsa",
      "version": "1.28.1"
    },
    "title": "Sorsa",
    "tools": [
      {
        "annotations": {},
        "description": "Add an item the user has BOUGHT to their Items Purchased list (the\n    next step after sourcing). Returns the created item incl. its `id` \u2014\n    use that id with generate_sku and create_listing. cost is per unit;\n    sourced_from is the retailer/site they bought from.\n\n    projected_sale_price: defau",
        "inputSchema": {
          "bytes": 930,
          "published": "HASH_ONLY",
          "sha256": "8b16e2aa21fe8f60b37d03d0a8f96057fbfd1e80e66f18c8fa6d52d52b7178bf"
        },
        "name": "add_purchase",
        "title": null
      },
      {
        "annotations": {},
        "description": "Start monitoring another Amazon seller's storefront \u2014 new products they\n    list will appear in the user's store results. storefront_id is the Amazon\n    seller ID (e.g. A1B2C3D4E5F6G7, found in the seller page URL). Call when\n    the user says 'track this seller'.",
        "inputSchema": {
          "bytes": 161,
          "published": "HASH_ONLY",
          "sha256": "6387e33a1726221ca7e9f311ffdcfb12c547de8046bd4bd706611811b7913e46"
        },
        "name": "add_storefront_monitor",
        "title": null
      },
      {
        "annotations": {},
        "description": "Add a product to the user's sourcing list (their buy list). Call when\n    the user says 'add this to my buy list' \u2014 typically after analysing a\n    product, passing through the numbers from the analysis. sourced_from is\n    where they'd buy it (retailer/site).",
        "inputSchema": {
          "bytes": 1075,
          "published": "HASH_ONLY",
          "sha256": "7b3a29c1f96f3840f36f22cb818c2d5f417fc17db4ed6e78a575d5bea86b1ff7"
        },
        "name": "add_to_sourcing_list",
        "title": null
      },
      {
        "annotations": {},
        "description": "Quick analysis of an Amazon product by ASIN: title, brand, current/90-day\n    pricing, sales rank and estimated monthly sales, FBA fees and profit basics.\n    Call this first whenever the user asks about a specific ASIN. Costs the user\n    1 analyse credit unless cached. Domain is the Amazon marketp",
        "inputSchema": {
          "bytes": 186,
          "published": "HASH_ONLY",
          "sha256": "d248b248a92e1f54d03ece11fb1f5e417db92982c898ebba4af24f39ea597b0c"
        },
        "name": "analyse_product",
        "title": null
      },
      {
        "annotations": {},
        "description": "Full analysis of an Amazon product by ASIN \u2014 everything in analyse_product\n    plus seller/stock breakdown, buy-box history and variations. Slower and\n    heavier than analyse_product; use when the user wants seller-level or\n    historical detail in one shot. Costs 1 analyse credit unless the ASIN w",
        "inputSchema": {
          "bytes": 191,
          "published": "HASH_ONLY",
          "sha256": "4c0f4f88667851c5c3f18db97be6eab080800f9e10e513b605029c59ce34a91d"
        },
        "name": "analyse_product_full",
        "title": null
      },
      {
        "annotations": {},
        "description": "Calculate Amazon FBA profit and ROI for given sell/cost prices using the\n    full fee engine (tiered referral fees, digital services tax, VAT on fees).\n    Call for what-if questions like 'what would I make selling at \u00a324.99 if I\n    buy at \u00a312?'. Prices are in the marketplace currency.",
        "inputSchema": {
          "bytes": 486,
          "published": "HASH_ONLY",
          "sha256": "4c76508c955fbf68b9549e36fd10bfd92f8980aed09945c80fbfe6d3cf9ec8e9"
        },
        "name": "calculate_profit",
        "title": null
      },
      {
        "annotations": {},
        "description": "Check whether the user is allowed to sell (ungated for) one or more\n    ASINs on their Amazon account. Call for 'am I ungated for this?' or 'can I\n    sell these ASINs?'. Returns per-ASIN {state, gated, apply_link}. Uncached\n    ASINs are queued for a fresh check, so re-call shortly for any still\n  ",
        "inputSchema": {
          "bytes": 227,
          "published": "HASH_ONLY",
          "sha256": "4e9a0a233643bf282cf845a3e20a6953cba067a5de8cc23a869961bb626f6464"
        },
        "name": "check_eligibility",
        "title": null
      },
      {
        "annotations": {},
        "description": "Record that a supplier's invoice got the user approved (ungated) for a\n    brand. This increments that supplier's confirmation count for the brand so\n    other users see which suppliers actually work.",
        "inputSchema": {
          "bytes": 207,
          "published": "HASH_ONLY",
          "sha256": "9a352d26ce3ca25c532113032739e81837804e7476bc0bd3d04893054b32afbd"
        },
        "name": "confirm_ungate_supplier",
        "title": null
      },
      {
        "annotations": {},
        "description": "Create an A2A deal-monitor task: the user gets notified whenever the\n    deal feed finds products matching these filters. Call when the user says\n    e.g. 'notify me about deals over \u00a35 profit and 40% ROI in Toys'.",
        "inputSchema": {
          "bytes": 815,
          "published": "HASH_ONLY",
          "sha256": "1dbfdaa277d14ef4c0f0d88789198491028cdf099053e7890a6470d61106718a"
        },
        "name": "create_deal_task",
        "title": null
      },
      {
        "annotations": {},
        "description": "Create a LIVE Keepa Product Finder monitor from the same filters as\n    find_products. It runs on the user's OWN Keepa key and sends a Discord\n    alert to `webhook_url` whenever a NEW product starts matching the filters \u2014\n    the saved/recurring version of find_products.\n\n    REQUIRED: a `name` for",
        "inputSchema": {
          "bytes": 2392,
          "published": "HASH_ONLY",
          "sha256": "997b8808c65e7fb183a28dc7c5286d9e7671e58b2e38fcfec9e8e66b062198f5"
        },
        "name": "create_finder_monitor",
        "title": null
      },
      {
        "annotations": {},
        "description": "Create the Amazon listing for a purchased item \u2014 the final step.\n    Requires the item to have an ASIN, a listing_sku (run generate_sku first)\n    and a sale price.\n\n    SALE PRICE RULE: set `sale_price` to the product's 90-day average price\n    (from analyse_product) as a sensible default \u2014 but ALW",
        "inputSchema": {
          "bytes": 469,
          "published": "HASH_ONLY",
          "sha256": "aa109e0d32d24159c315c4a0440c6812b04af96fe4de9a4d5b4e9564e135e174"
        },
        "name": "create_listing",
        "title": null
      },
      {
        "annotations": {},
        "description": "Watch an ASIN and alert the user when its price drops to the target.\n    Call when the user says things like 'watch this' or 'alert me if it goes\n    below \u00a320'. source is the marketplace: Amazon UK, Amazon DE, Amazon IT,\n    Amazon ES, Amazon FR, Amazon US or Amazon Business UK.",
        "inputSchema": {
          "bytes": 269,
          "published": "HASH_ONLY",
          "sha256": "3719b1a1dedc9d843e993bac60c523dd5e399fe03e00d59941e29d2f08072c47"
        },
        "name": "create_price_monitor",
        "title": null
      },
      {
        "annotations": {},
        "description": "Search Amazon via Keepa's Product Finder and return the matching ASINs\n    (up to 100). Runs on the USER'S OWN Keepa key \u2014 call get_keepa_key_status\n    first; if not connected, tell them to add their key in Sorsa Settings.\n\n    Provide at least one filter. Prices are in the marketplace's currency\n ",
        "inputSchema": {
          "bytes": 2249,
          "published": "HASH_ONLY",
          "sha256": "0fb46758940b4e2b1834a2f85bbaf09d3d8bea752eb739dbb91050494299448c"
        },
        "name": "find_products",
        "title": null
      },
      {
        "annotations": {},
        "description": "Generate a SKU for a purchased item (from its title/cost/qty using the\n    user's SKU convention) and save it to the row. Pass the `id` returned by\n    add_purchase or shown in get_items_purchased. Do this before create_listing.\n    Returns the item with its new listing_sku.",
        "inputSchema": {
          "bytes": 134,
          "published": "HASH_ONLY",
          "sha256": "aaf37134f5629b6d40bc0c2154f821443a6f1016291284c8d90080b73a267816"
        },
        "name": "generate_sku",
        "title": null
      },
      {
        "annotations": {},
        "description": "List the user's recent A2A Finder scan jobs and their status. Call to\n    find a job_id whose results to fetch.",
        "inputSchema": {
          "bytes": 72,
          "published": "HASH_ONLY",
          "sha256": "3aaa3ea6dd2ac370632df39afea988d7a5aec5478abc41c54e71905ca4fd7390"
        },
        "name": "get_a2a_finder_jobs",
        "title": null
      },
      {
        "annotations": {},
        "description": "Status and results of an A2A Finder scan started with\n    start_a2a_finder_scan. Returns progress % and, once complete, the\n    profitable cross-marketplace flips found (per ASIN, per country).",
        "inputSchema": {
          "bytes": 139,
          "published": "HASH_ONLY",
          "sha256": "89eb5c7d67c54ba45034a543f7c1fe9db2ae7aec9d622a71a637496d5c7b580d"
        },
        "name": "get_a2a_finder_status",
        "title": null
      },
      {
        "annotations": {},
        "description": "Age profile of the user's on-hand FBA stock, bucketed by days on shelf\n    (0-30, 31-90, 91-180, 181-365, 365+), with capital tied up and how much is\n    aged 90+ days (long-term storage-fee risk). Call for 'what stock is old or\n    at risk?' or 'how much capital is stuck in aged inventory?'. Requir",
        "inputSchema": {
          "bytes": 67,
          "published": "HASH_ONLY",
          "sha256": "e7f115006bb72f830a174c733e813437ca9b1aec41b332bc6b3e9af40d71f33d"
        },
        "name": "get_aged_stock",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's live FBA inventory: SKUs, quantities, conditions. Call when\n    the user asks what stock they have or about a specific SKU/product they\n    sell. Requires their Amazon account to be connected (closed beta).",
        "inputSchema": {
          "bytes": 368,
          "published": "HASH_ONLY",
          "sha256": "544b94e6daf881e547545942c2e5626a3e537ae835fc183915df100e571b5317"
        },
        "name": "get_amazon_inventory",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's Amazon orders with fees and COGS-based profit. Call for\n    questions like 'how are sales today?' or 'show orders for this SKU'.\n    timeframe: today, yesterday, week, month; or use date_from/date_to\n    (YYYY-MM-DD). Requires a connected Amazon account (closed beta).",
        "inputSchema": {
          "bytes": 627,
          "published": "HASH_ONLY",
          "sha256": "b363dad77550a5504113b296211c1f565383defb568457a0b44a0c7d549eac18"
        },
        "name": "get_amazon_orders",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's recent product analyses (ASIN, title, when). Call when the\n    user asks what they looked at recently, or to re-find a product they\n    mention having analysed. limit max 50.",
        "inputSchema": {
          "bytes": 127,
          "published": "HASH_ONLY",
          "sha256": "f3289f13b37a0b0c633eaef8db0ca9612f82a66797505e1534fd698c83f3739d"
        },
        "name": "get_analyse_history",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's own top-selling ASINs by net profit for each of the last N\n    months, derived from their sales. Call for 'what are my best sellers?' or\n    'top products this year'. months up to 24, top_n up to 50. Requires a\n    connected Amazon account.",
        "inputSchema": {
          "bytes": 182,
          "published": "HASH_ONLY",
          "sha256": "d50dabe9c1a180ab9ae89720a4276888c7e0ec53322cfd0c054b7328ef02f791"
        },
        "name": "get_best_sellers",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's remaining monthly analyse and AI credits and the reset date.\n    Call when the user asks about their usage limits, or after a credit-limit\n    error from an analysis tool.",
        "inputSchema": {
          "bytes": 64,
          "published": "HASH_ONLY",
          "sha256": "a2c3cf2a34818f20aa4c010ef8477e0de0e58d72fb5921a81b02b1fc32354654"
        },
        "name": "get_credits",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's Sorsa dashboard summary \u2014 headline stats across their\n    monitors and results. Call for a general 'how's it looking' overview before\n    drilling into specific feeds.",
        "inputSchema": {
          "bytes": 74,
          "published": "HASH_ONLY",
          "sha256": "a710d3d04cc497ee048ffe6bd1e3b2a97329f16fdcf882e603c0a1dc24edbe38"
        },
        "name": "get_dashboard_summary",
        "title": null
      },
      {
        "annotations": {},
        "description": "Search Sorsa's Amazon-to-Amazon (A2A) deal database \u2014 products found by\n    the deal monitors with profit, ROI, sales rank and pricing. Call when the\n    user asks for current deals, e.g. 'show me deals over \u00a35 profit and 50%\n    ROI'. Free to call. sort_field: timestamp, profit, roi_percentage,\n   ",
        "inputSchema": {
          "bytes": 1062,
          "published": "HASH_ONLY",
          "sha256": "97b145f7996010d9c05992a6702755f9e0365eaf432f9b865f3776a255b47b4b"
        },
        "name": "get_deal_results",
        "title": null
      },
      {
        "annotations": {},
        "description": "List the user's A2A deal-monitor tasks (saved filters that generate\n    notifications). Call before creating one, or when the user asks what\n    monitors they have set up.",
        "inputSchema": {
          "bytes": 67,
          "published": "HASH_ONLY",
          "sha256": "331eddab160c8452f5689182e3870b9a3d6d5643dc46e0e01b041aae3a607fc9"
        },
        "name": "get_deal_tasks",
        "title": null
      },
      {
        "annotations": {},
        "description": "Refunds issued to the user's customers. Call when the user asks about\n    refunds or money returned to buyers. Requires a connected Amazon account\n    (closed beta).",
        "inputSchema": {
          "bytes": 263,
          "published": "HASH_ONLY",
          "sha256": "1375a570c157f7ae88234531a657faf602954cee2590b706ac6eac408a5bbb57"
        },
        "name": "get_fba_refunds",
        "title": null
      },
      {
        "annotations": {},
        "description": "Reimbursements Amazon has paid the user (lost/damaged stock etc).\n    Call when the user asks what Amazon has paid them back. Requires a\n    connected Amazon account (closed beta).",
        "inputSchema": {
          "bytes": 357,
          "published": "HASH_ONLY",
          "sha256": "1b9dc58096465be8a2fa15fd649f0b9a97272b0df5ff2cda337e8ef14a5c1434"
        },
        "name": "get_fba_reimbursements",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's FBA customer returns with dispositions (sellable, damaged,\n    etc). Call when the user asks about returns. Requires a connected Amazon\n    account (closed beta).",
        "inputSchema": {
          "bytes": 360,
          "published": "HASH_ONLY",
          "sha256": "2ef0c6bc0dea1f76db623bf029fe397d941efc80f758aacba68aa1c24946867a"
        },
        "name": "get_fba_returns",
        "title": null
      },
      {
        "annotations": {},
        "description": "The line items inside one FBA shipment (expected vs received\n    quantities). Call after get_fba_shipments when the user asks what was in\n    a specific shipment or whether everything was received.",
        "inputSchema": {
          "bytes": 155,
          "published": "HASH_ONLY",
          "sha256": "fa9c6f40946a9cc63e94772f6699a38ccd02794b4e5f28265bb7f237d84ac5cd"
        },
        "name": "get_fba_shipment_items",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's inbound FBA shipments with summary stats. Call when the\n    user asks about shipments they've sent to Amazon. Requires a connected\n    Amazon account (closed beta).",
        "inputSchema": {
          "bytes": 352,
          "published": "HASH_ONLY",
          "sha256": "79513a529ba30d902a7e84d3cfdab94547bb73652adcd019471c8da34d08f069"
        },
        "name": "get_fba_shipments",
        "title": null
      },
      {
        "annotations": {},
        "description": "Prices for the same ASIN across international Amazon marketplaces. Call\n    when the user asks about cross-market price differences or EU arbitrage\n    opportunities for a product. Costs 1 analyse credit unless the ASIN was\n    analysed in the last 24 hours.",
        "inputSchema": {
          "bytes": 195,
          "published": "HASH_ONLY",
          "sha256": "b81d3960c3010372adab2613b355ebe200e8092968425ddae5c22cdfae39d1f2"
        },
        "name": "get_international_prices",
        "title": null
      },
      {
        "annotations": {},
        "description": "Items the user has actually purchased from their sourcing list,\n    including listing status (SKU, listing errors). Call when the user asks\n    what they've bought or about listing progress.",
        "inputSchema": {
          "bytes": 72,
          "published": "HASH_ONLY",
          "sha256": "e62263e0fc4477908e6e92a2c888e66033884852f79088776c2a34d4e4582236"
        },
        "name": "get_items_purchased",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's sourcing list \u2014 products they've found and are considering\n    buying, with cost/profit projections and status. Call when the user asks\n    about their buy list or sourcing pipeline.",
        "inputSchema": {
          "bytes": 70,
          "published": "HASH_ONLY",
          "sha256": "84bfdcf9ba437fba7ea7af15e37e088d720340fd4d54024ce86ec9b5b6c3fa5c"
        },
        "name": "get_items_sourced",
        "title": null
      },
      {
        "annotations": {},
        "description": "Whether the user has connected their own Keepa API key (needed for\n    find_products). If not connected, tell them to add it in Sorsa Settings.\n    Never returns the key itself.",
        "inputSchema": {
          "bytes": 73,
          "published": "HASH_ONLY",
          "sha256": "32f4044f1c61e73c7f8a8a30d258dcb2d53142e418343c83bca134cb9e73c779"
        },
        "name": "get_keepa_key_status",
        "title": null
      },
      {
        "annotations": {},
        "description": "Per-SKU profit & loss for one calendar month: revenue, Amazon fees,\n    COGS, refunds and net profit, plus account totals. Call for 'what was my\n    profit in <month>?' or 'break down last month's P&L'. month is 'YYYY-MM'.\n    Requires a connected Amazon account.",
        "inputSchema": {
          "bytes": 207,
          "published": "HASH_ONLY",
          "sha256": "93bfe57157c63d910ec053023e22cd847152c4d0aaaa61594f4ddd1c361d33d3"
        },
        "name": "get_monthly_pnl",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's price-alert notifications from their A2A monitor tasks,\n    grouped by task. Call when the user asks what alerts or notifications they\n    have. show_checked: 'unchecked' (default), 'checked' or 'all'.",
        "inputSchema": {
          "bytes": 147,
          "published": "HASH_ONLY",
          "sha256": "d43016dd38b992cf9f63e674169017f94c09e6a4fb352fe7cee74bbc9eb884bd"
        },
        "name": "get_notifications",
        "title": null
      },
      {
        "annotations": {},
        "description": "Profitable online-arbitrage (OA) deals: retail products matched to Amazon\n    listings with profit and ROI. Call when the user asks about OA or retail\n    sourcing opportunities. sort: roi, profit, price, newest, sell, rank,\n    monthly_sold or sellers.",
        "inputSchema": {
          "bytes": 797,
          "published": "HASH_ONLY",
          "sha256": "fe69b490ed5741183d9738324c3b2c2034173072b0c00ae27fc6a80c1d878539"
        },
        "name": "get_oa_deals",
        "title": null
      },
      {
        "annotations": {},
        "description": "List the retailers available in the OA deals feed. Call to know which\n    retailer names are valid filters for get_oa_deals.",
        "inputSchema": {
          "bytes": 69,
          "published": "HASH_ONLY",
          "sha256": "366ac3ea121d15b8091eadecbe9d48db93be050686dc28147fd5ce1510f04747"
        },
        "name": "get_oa_retailers",
        "title": null
      },
      {
        "annotations": {},
        "description": "List the user's ASIN price monitors (watched products with target\n    prices). Call before creating one to avoid duplicates, or when the user\n    asks what they're watching.",
        "inputSchema": {
          "bytes": 71,
          "published": "HASH_ONLY",
          "sha256": "421a1ea36158f99d7610073c3f49258dbfd522adcb15fa52616d9b80a61ad379"
        },
        "name": "get_price_monitors",
        "title": null
      },
      {
        "annotations": {},
        "description": "Per-SKU profitability over the last N days: units, revenue, profit, ROI,\n    return rate, current price vs break-even and a selling-at-a-loss flag. Call\n    for 'which products make or lose me money?' or 'what's selling below\n    break-even?'. days 7-365. Requires a connected Amazon account.",
        "inputSchema": {
          "bytes": 129,
          "published": "HASH_ONLY",
          "sha256": "060aa80f2d95c2aa1e163dfe79d32f7236482d40155796439bacbab7c475ff4e"
        },
        "name": "get_product_performance",
        "title": null
      },
      {
        "annotations": {},
        "description": "Current sellers and their stock levels for an Amazon ASIN. Call when the\n    user asks who is selling a product, how many sellers there are, or how much\n    stock competitors hold. Costs 1 analyse credit unless the ASIN was analysed\n    in the last 24 hours.",
        "inputSchema": {
          "bytes": 190,
          "published": "HASH_ONLY",
          "sha256": "7615ec0b5fc40baf8121f982ce3e261c34014a9586365b7641630a633288e9dd"
        },
        "name": "get_product_sellers",
        "title": null
      },
      {
        "annotations": {},
        "description": "Purchase statistics: total spent, projected profit, items bought and\n    ROI, broken down daily/monthly/yearly and by category and source. Call\n    for questions like 'how much have I spent this month?'.",
        "inputSchema": {
          "bytes": 71,
          "published": "HASH_ONLY",
          "sha256": "0408b0cb038acf50023b7d7bef8c849a66d52f9dc3701a7eda48ac8b6c4662e4"
        },
        "name": "get_purchase_stats",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's logged purchase history. timeframe: all, day, week, month\n    or year. Call when the user asks what they've bought recently.",
        "inputSchema": {
          "bytes": 131,
          "published": "HASH_ONLY",
          "sha256": "a139b76eac67ac60d23ee909acf66ce8a858de1710efd613bca5465eb6034468"
        },
        "name": "get_purchases",
        "title": null
      },
      {
        "annotations": {},
        "description": "Individual reclaim opportunities with evidence \u2014 what to claim from\n    Amazon and why. Call after get_reconciliation_summary to list the actual\n    claims. status: open, dismissed, filed or all. Requires a connected\n    Amazon account (closed beta).",
        "inputSchema": {
          "bytes": 315,
          "published": "HASH_ONLY",
          "sha256": "1998d1894791b3202d289581a97061bc7cdc2ff76b8c3c05834c51b931f4fb2f"
        },
        "name": "get_reconciliation_claims",
        "title": null
      },
      {
        "annotations": {},
        "description": "Totals of reclaimable money Sorsa has detected the user is owed by\n    Amazon, broken down by claim type (shipment shortages, lost inventory,\n    unreturned refunds...). Call for 'how much does Amazon owe me?'.\n    Requires a connected Amazon account (closed beta).",
        "inputSchema": {
          "bytes": 79,
          "published": "HASH_ONLY",
          "sha256": "3cd70dfe210593667c820383e0d7140c40f2138df47ea7f28c3d3b0d115e57a6"
        },
        "name": "get_reconciliation_summary",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's repricer SKUs with live pricing state: current price, Buy Box\n    price, lowest FBA price, cost/min/max, strategy, computed profit/ROI at the\n    current price, floor price and stock. Call when the user asks what the\n    repricer is doing, whether they hold the Buy Box on something, or wh",
        "inputSchema": {
          "bytes": 353,
          "published": "HASH_ONLY",
          "sha256": "c54ebfc6f11051b6b3e6b8c1dd0f04fb3603265b391fdced4486411d6a857b7c"
        },
        "name": "get_repricer_items",
        "title": null
      },
      {
        "annotations": {},
        "description": "Recent repricer price changes, newest first: SKU, old \u2192 new price, the\n    reason, the reference price it repriced against (Buy Box / lowest FBA) and\n    whether the floor or ceiling capped the move. Call when the user asks what\n    the repricer changed recently or why a price moved. limit max 500.",
        "inputSchema": {
          "bytes": 177,
          "published": "HASH_ONLY",
          "sha256": "8c55d8c0f709e17c6f45b97428ec00077fb0cf69b7e852bd174e453e2089b17e"
        },
        "name": "get_repricer_log",
        "title": null
      },
      {
        "annotations": {},
        "description": "The user's global repricer settings: whether repricing is globally\n    enabled, seller ID, default strategy, default minimum ROI, allowed\n    strategies and VAT registration. Read-only \u2014 changing settings is\n    web-app only.",
        "inputSchema": {
          "bytes": 74,
          "published": "HASH_ONLY",
          "sha256": "42d169e6ccb338376c45ea0fcac4d1a6d62c872063fb6fc6309ac7c0362e1932"
        },
        "name": "get_repricer_settings",
        "title": null
      },
      {
        "annotations": {},
        "description": "Repricer dashboard summary: total/active SKU counts, per-status\n    breakdown, Buy Box wins and win %, items matching the Buy Box exactly,\n    units actively repricing and the last update time. Call first for broad\n    questions like 'how's the repricer doing?'.",
        "inputSchema": {
          "bytes": 71,
          "published": "HASH_ONLY",
          "sha256": "18483e260282062ef70151ad1182f78d7bf30e08eaa1058ab457b3f0096ef3ba"
        },
        "name": "get_repricer_stats",
        "title": null
      },
      {
        "annotations": {},
        "description": "What the user should reorder now. Per-SKU sales velocity vs stock on\n    hand -> days of cover left, a suggested reorder quantity and its potential\n    profit. Call for 'what should I restock?' or 'what's running low?'.\n    lead_time_days = how long a resupply takes to land; cover_days = days of\n   ",
        "inputSchema": {
          "bytes": 215,
          "published": "HASH_ONLY",
          "sha256": "81776d3928f88b1432e4937cdef844ba303925a6874af045f9154160b0e357b3"
        },
        "name": "get_restock_suggestions",
        "title": null
      },
      {
        "annotations": {},
        "description": "List the user's recent Reverse Source scan jobs and their status. Call\n    to find a job_id whose results to fetch.",
        "inputSchema": {
          "bytes": 76,
          "published": "HASH_ONLY",
          "sha256": "c32695b3c925082fe8a9824e053bd1576148188e39d86b01e27befa911a9fd71"
        },
        "name": "get_reverse_source_jobs",
        "title": null
      },
      {
        "annotations": {},
        "description": "Status and results of a Reverse Source scan started with\n    start_reverse_source_scan. Returns progress % and, once complete, the\n    cheapest Google Shopping source found per ASIN (retailer, price, link).",
        "inputSchema": {
          "bytes": 143,
          "published": "HASH_ONLY",
          "sha256": "925567ec39a6a37f194ff223e09640e53279f7ee81a1b293f0e0e2682d88ead2"
        },
        "name": "get_reverse_source_status",
        "title": null
      },
      {
        "annotations": {},
        "description": "Whether the user has connected their own Google Sheet (a deployed Apps\n    Script web app) that run_sheet_action can trigger. If not connected, tell\n    them to add their web-app URL in Sorsa Settings. Never returns the URL.",
        "inputSchema": {
          "bytes": 69,
          "published": "HASH_ONLY",
          "sha256": "011a17227be9979f9b7b5c221b802d045afd775b7512d92e43ea4d889a09f1c7"
        },
        "name": "get_sheet_status",
        "title": null
      },
      {
        "annotations": {},
        "description": "Products found by the user's storefront monitors (tracking other sellers'\n    Amazon storefronts), newest first. Call when the user asks what their\n    storefront monitors have found; optionally filter to one store_id.\n    Paginated \u2014 'total' in the response is the full count, request further\n    pa",
        "inputSchema": {
          "bytes": 275,
          "published": "HASH_ONLY",
          "sha256": "88a9a9c16aa40f93b3fdc20239b95087541664ecdcd23db90d58f341e7fec258"
        },
        "name": "get_store_results",
        "title": null
      },
      {
        "annotations": {},
        "description": "List the Amazon storefronts (competitor sellers) the user is\n    monitoring. Call before adding one, or when the user asks which\n    storefronts they track.",
        "inputSchema": {
          "bytes": 76,
          "published": "HASH_ONLY",
          "sha256": "32f768bb2b7bc377ec319215cb79d800e5e227d8fc7f554b59860af981f784c2"
        },
        "name": "get_storefront_monitors",
        "title": null
      },
      {
        "annotations": {},
        "description": "Summary stats for the user's storefront monitors (stores tracked,\n    result counts). Call for an overview before drilling into\n    get_store_results.",
        "inputSchema": {
          "bytes": 73,
          "published": "HASH_ONLY",
          "sha256": "093cb1f2cea6261b6054f829fd5ec0aadf686134faa8e7a91dab0e00d0b4a533"
        },
        "name": "get_storefront_stats",
        "title": null
      },
      {
        "annotations": {},
        "description": "The curated Sorsa ungate brand list (~1300 brands), each with a\n    representative ASIN that can be run through request_ungate_check. Use this to\n    look up the ASIN for a brand the user names (e.g. \"can you ungate me for\n    Adidas?\" -> find Adidas here -> request_ungate_check([that asin])), or to",
        "inputSchema": {
          "bytes": 214,
          "published": "HASH_ONLY",
          "sha256": "3e91931b2f34d4ca02246ac3e4e6377da1ccc0c0524fbcf7d4c96d5038ed6831"
        },
        "name": "get_ungate_brands",
        "title": null
      },
      {
        "annotations": {},
        "description": "Status + outcome of an ungate job. Status is queued | in_progress |\n    completed | failed | expired; outcome (when set) is approved,\n    already_approved, documents_required, not_accepting_applications,\n    login_required or unknown.\n\n    While status is 'queued' or 'in_progress', CALL THIS AGAIN a",
        "inputSchema": {
          "bytes": 135,
          "published": "HASH_ONLY",
          "sha256": "a8071f4b46e62659b59d39b500c83813c9822827c09531635ae47675ad4f2992"
        },
        "name": "get_ungate_status",
        "title": null
      },
      {
        "annotations": {},
        "description": "Suppliers (manufacturers / authorised distributors / wholesalers that\n    issue proper invoices) for a brand or category, with how many Sorsa users\n    confirmed each one got them ungated for that brand. Provide a brand and/or a\n    category.",
        "inputSchema": {
          "bytes": 248,
          "published": "HASH_ONLY",
          "sha256": "03f96547c840b22734895c1b1477fd0fcc47cc2a8dde9a78b66ec3a737dbe96d"
        },
        "name": "get_ungate_suppliers",
        "title": null
      },
      {
        "annotations": {},
        "description": "List the user's recent Wholesale Scanner jobs and their status. Call to\n    find a job_id whose results to fetch.",
        "inputSchema": {
          "bytes": 71,
          "published": "HASH_ONLY",
          "sha256": "d04bbd6896289d3d1bf048e6487bfdf657769cf794feab1c4860f6d4ec73bcd0"
        },
        "name": "get_wholesale_jobs",
        "title": null
      },
      {
        "annotations": {},
        "description": "Status and results of a Wholesale Scanner run. Returns progress % and,\n    once complete, each supplier product matched to Amazon with sell price,\n    profit and ROI.",
        "inputSchema": {
          "bytes": 138,
          "published": "HASH_ONLY",
          "sha256": "275bf1e3ab45e92231c84cb96b7ca2839859e6835db993aeb142888cfaade1de"
        },
        "name": "get_wholesale_status",
        "title": null
      },
      {
        "annotations": {},
        "description": "Resolve a barcode (EAN/UPC, 8-14 digits) to an Amazon ASIN. Call when the\n    user gives a barcode instead of an ASIN, then feed the returned ASIN into\n    analyse_product.",
        "inputSchema": {
          "bytes": 184,
          "published": "HASH_ONLY",
          "sha256": "123afc3d79da19f6cf70d2d37e6736b03525e9b6cfa0055c2a1b467ac5d733ba"
        },
        "name": "lookup_by_ean",
        "title": null
      },
      {
        "annotations": {},
        "description": "Mark one of the user's notifications as checked (reviewed) or unchecked.\n    Call after the user says they've dealt with an alert, or to un-mark one.",
        "inputSchema": {
          "bytes": 225,
          "published": "HASH_ONLY",
          "sha256": "914eca82d8865ead2ac2663cb1ca7bc251d496c747308131a4495aeaec6effad"
        },
        "name": "mark_notification",
        "title": null
      },
      {
        "annotations": {},
        "description": "Request an ungate check for one or more gated ASINs. For each ASIN this\n    confirms it's gated (via the eligibility check) and, if so, QUEUES a job that\n    the user's Sorsa browser extension works through \u2014 it opens the Seller Central\n    approval request in their own logged-in session and reports",
        "inputSchema": {
          "bytes": 160,
          "published": "HASH_ONLY",
          "sha256": "01d6be550a1c32a2a932a90219d9b3710dfb097dfc86e8ce6eacc062939c90fc"
        },
        "name": "request_ungate_check",
        "title": null
      },
      {
        "annotations": {},
        "description": "Trigger a function on the user's OWN connected Google Sheet by POSTing to\n    their deployed Apps Script web app. Call get_sheet_status first; if not\n    connected, tell them to connect their sheet in Sorsa Settings.\n\n    `action` is the name their script's doPost dispatches on (e.g. 'send_invoice',",
        "inputSchema": {
          "bytes": 249,
          "published": "HASH_ONLY",
          "sha256": "0e8805502249a419312e5d2a885738fe51da9d990768dece17b82f6bfc511b1a"
        },
        "name": "run_sheet_action",
        "title": null
      },
      {
        "annotations": {},
        "description": "Search Amazon by product title via Keepa and return the top matching\n    ASINs with thumbnails. Call when the user names a product without an ASIN\n    or barcode; present the candidates and let them pick before analysing.\n    limit is 1-10.",
        "inputSchema": {
          "bytes": 244,
          "published": "HASH_ONLY",
          "sha256": "5310c0bc70ac8199b651bd674007197666c0c8a38df4a6420d0cd45ae08309b0"
        },
        "name": "search_by_title",
        "title": null
      },
      {
        "annotations": {},
        "description": "Set the cost of goods (COG) for a SKU \u2014 the per-unit price the user\n    paid. Feeds profit/ROI across the whole app and the repricer's floors.\n    cost in the user's currency (e.g. \u00a3). Pass cost=0 or empty to clear it.",
        "inputSchema": {
          "bytes": 163,
          "published": "HASH_ONLY",
          "sha256": "dfcff9a8879c612c1b8ff98efefb354c2a8e13ca709158774ac3f0aecdc40b98"
        },
        "name": "set_cog",
        "title": null
      },
      {
        "annotations": {},
        "description": "Start an A2A Finder scan: check a list of ASINs for profitable\n    Amazon-to-Amazon flips across marketplaces (buy on one Amazon country, sell\n    on another). Up to 100 ASINs. Optional `countries` = list of country codes\n    to compare (e.g. [\"UK\",\"DE\",\"FR\"]); defaults to all. Uses the user's saved",
        "inputSchema": {
          "bytes": 279,
          "published": "HASH_ONLY",
          "sha256": "8114007e261332c97bfc568073402c6e2bbeef4fe768d305b1cce3899c7d55ed"
        },
        "name": "start_a2a_finder_scan",
        "title": null
      },
      {
        "annotations": {},
        "description": "Start a Reverse Source scan: for each ASIN, search Google Shopping for a\n    cheaper source than Amazon \u2014 i.e. where to buy the product to flip it. Up\n    to 250 ASINs. Uses the user's saved Keepa key if they've added one in\n    settings; otherwise the shared scan key (which counts against their dai",
        "inputSchema": {
          "bytes": 165,
          "published": "HASH_ONLY",
          "sha256": "50a08579dd271689436a188efed3f3a918be57551eab8ac2d444f5888ce8782d"
        },
        "name": "start_reverse_source_scan",
        "title": null
      },
      {
        "annotations": {},
        "description": "Start a Wholesale Scanner run against a supplier price list. Each item in\n    `products` is a dict with 'title', 'price' (cost per unit), and 'ean'\n    (barcode \u2014 needed to match, the default scan is EAN-based). Up to 500 items.\n    Matches each product to Amazon and returns profit/ROI. Returns a jo",
        "inputSchema": {
          "bytes": 197,
          "published": "HASH_ONLY",
          "sha256": "f0b6f50bc1eff981cf3004fb46c3d7c2e44ac5d1618c5921e0dab25532127716"
        },
        "name": "start_wholesale_scan",
        "title": null
      }
    ],
    "version": "1.0.0"
  },
  "status_history": [
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-17T06:24:44Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-16T04:56:28Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-15T03:29:15Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-14T02:08:53Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-13T00:38:47Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-11T23:12:50Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-10T20:35:16Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "bfd4a99d1db970793a3f83ec2483d1697e110b5d77ee1d1c017a304c8a9a49da",
      "observed_at_utc": "2026-10-09T19:11:56Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "a565701c184f22b3eb2a06ba190dce23e04d15aca4028bf3a55d7c6f0bae9cbb",
      "observed_at_utc": "2026-10-08T17:49:49Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "a565701c184f22b3eb2a06ba190dce23e04d15aca4028bf3a55d7c6f0bae9cbb",
      "observed_at_utc": "2026-10-07T16:26:04Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "14ea6ffbd4e05f7555aace6bf14e2c83fd87b9d3c97add48983a817b700175df",
      "observed_at_utc": "2026-10-06T15:05:29Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "14ea6ffbd4e05f7555aace6bf14e2c83fd87b9d3c97add48983a817b700175df",
      "observed_at_utc": "2026-10-05T13:46:07Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "14ea6ffbd4e05f7555aace6bf14e2c83fd87b9d3c97add48983a817b700175df",
      "observed_at_utc": "2026-10-04T12:18:20Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "14ea6ffbd4e05f7555aace6bf14e2c83fd87b9d3c97add48983a817b700175df",
      "observed_at_utc": "2026-10-03T11:02:28Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "c6910a2f3a4eb6ad739eb30c77470a65a9162be2fe37b6491dcbc189dda5032e",
      "observed_at_utc": "2026-10-02T06:52:29Z",
      "protocol_version": "2025-11-25"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "0294c9d55cacc3036a2af877ffab0db69108662f78e8fd970282201238e49adf",
      "observed_at_utc": "2026-09-30T18:07:30Z",
      "protocol_version": "2025-06-18"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "registry_server_json",
        "mcp_initialize_tools_list"
      ],
      "manifest_sha256": "17ea23c12bcaaacfbff475636cb17d769345983572ba9ed84916fb7bcba4c4d5",
      "observed_at_utc": "2026-09-29T09:32:51Z",
      "protocol_version": "2025-06-18"
    }
  ],
  "target": {
    "corrections_route": "https://www.gaipagents.com/v1/free/observatory/corrections",
    "first_seen_at_utc": "2026-09-29T05:01:53Z",
    "kind": "MCP_REMOTE",
    "last_observed_at_utc": "2026-10-17T06:24:44Z",
    "locator": "https://sorsa.app/mcp",
    "name": "app.sorsa/sorsa",
    "source": "official-mcp-registry",
    "target_id": "obs_dbb172710f8c4b8d68a2c9d5"
  }
}