{
  "schema_version": "1.0",
  "registry_version": "2026-09-13.v4",
  "positioning": "AI Operating Team for Global Commerce",
  "purpose": "Public discovery metadata for YEEDOOR business-intent agent capabilities. The Remote MCP endpoint is a restricted read-only Pilot; merchant access requires OAuth authorization and runtime gates.",
  "publication": {
    "remote_mcp_server": "pilot_live_read_only",
    "remote_mcp_endpoint": "https://merchant.yeedoor.com/mcp",
    "transport": "streamable_http",
    "authentication": "oauth2_authorization_code_pkce",
    "pilot_tool_count": 5,
    "pilot_scope": "merchant_authorized_read_only",
    "openai_custom_app": "development_connected_not_submitted",
    "public_developer_docs": "live_foundation",
    "oauth_discovery": "RFC9728 protected-resource metadata + OAuth authorization-server metadata",
    "oauth_pkce": "S256",
    "refresh_token_policy": "rotating_30_day_when_offline_access_requested",
    "rule": "Only the five verified R0 read-only contracts are externally reachable. The ChatGPT development custom MCP is connected and real read-only E2E passed. Submission/public listing is a separate later step.",
    "oauth_scopes_supported": [
      "mcp:read",
      "offline_access"
    ],
    "access_token_ttl_seconds": 3600,
    "current_chatgpt_connection": {
      "status": "development_connected",
      "granted_scope": "mcp:read",
      "refresh_token_issued": false,
      "reason": "ChatGPT development client requested mcp:read only and did not request offline_access.",
      "continuity_policy": "reauthorize_after_access_token_expiry when the client has no refresh token",
      "tools_discovered": 5,
      "real_tool_call_verified": "yeedoor_get_operating_snapshot",
      "e2e_status": "passed"
    },
    "runtime_acceptance": {
      "status": "passed_5_of_5",
      "operating_snapshot": "ok:no_snapshot_yet",
      "google_asset_mapping": "ok:google_connections=1,stores=0",
      "shopify_catalog": "expected_gate:store_not_configured",
      "shopify_inventory": "expected_gate:store_not_configured",
      "shopify_business_metrics": "expected_gate:store_not_configured"
    },
    "lifecycle_acceptance": {
      "access_only_valid": true,
      "no_refresh_without_offline_access": true,
      "expired_access_rejected": true,
      "refresh_issued_with_offline_access": true,
      "refresh_rotation_access_valid": true,
      "old_refresh_reuse_rejected": true
    }
  },
  "safety_contract": [
    "Merchant and store scope resolve before provider access.",
    "Provider OAuth/tokens remain server-side and are never exposed to the model.",
    "R2/R3 actions require merchant approval or strong confirmation as defined by the runtime policy.",
    "Write success is not accepted without the configured verification/readback step.",
    "Entitlement, provider authorization, account scope and runtime feature gates all remain independent execution gates."
  ],
  "tool_contracts": [
    {
      "tool_id": "store.get_operating_snapshot",
      "name": "Get store operating snapshot",
      "business_intent": "Review the selected Shopify store as one operating scope before diagnosing issues.",
      "phase": "observe",
      "app_refs": [
        "yeedoor.ai_store_manager"
      ],
      "role_refs": [
        "ai_store_manager"
      ],
      "problem_refs": [
        "yeedoor.store_health"
      ],
      "capability_refs": [
        "shopify.observe.snapshot"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "implemented",
        "external_agent_invocation": "pilot_live_read_only"
      },
      "notes": []
    },
    {
      "tool_id": "store.read_catalog",
      "name": "Read store catalog",
      "business_intent": "Read products and variants from the selected Shopify store for operating analysis.",
      "phase": "observe",
      "app_refs": [
        "yeedoor.ai_store_manager"
      ],
      "role_refs": [
        "ai_store_manager"
      ],
      "problem_refs": [],
      "capability_refs": [
        "shopify.catalog.product.read"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "pilot_live_read_only"
      },
      "notes": [
        "Availability depends on granted Shopify scopes."
      ]
    },
    {
      "tool_id": "store.read_inventory",
      "name": "Read store inventory",
      "business_intent": "Read inventory context for the selected Shopify store without changing quantities.",
      "phase": "observe",
      "app_refs": [
        "yeedoor.ai_store_manager",
        "yeedoor.multichannel_inventory_sync"
      ],
      "role_refs": [
        "ai_store_manager",
        "ai_inventory_manager"
      ],
      "problem_refs": [
        "yeedoor.inventory_mismatch",
        "yeedoor.overselling_risk"
      ],
      "capability_refs": [
        "shopify.inventory.read"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "pilot_live_read_only"
      },
      "notes": []
    },
    {
      "tool_id": "store.read_orders",
      "name": "Read store orders",
      "business_intent": "Read order context for store operations and fulfillment diagnosis.",
      "phase": "observe",
      "app_refs": [
        "yeedoor.ai_store_manager",
        "yeedoor.multichannel_fulfillment"
      ],
      "role_refs": [
        "ai_store_manager",
        "ai_fulfillment_manager"
      ],
      "problem_refs": [],
      "capability_refs": [
        "shopify.orders.read"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_published"
      },
      "notes": []
    },
    {
      "tool_id": "store.read_business_metrics",
      "name": "Read store business metrics",
      "business_intent": "Read sales, conversion and inventory/sell-through metrics for the selected Shopify store.",
      "phase": "observe",
      "app_refs": [
        "yeedoor.ai_store_manager"
      ],
      "role_refs": [
        "ai_store_manager",
        "ai_growth_analyst"
      ],
      "problem_refs": [
        "yeedoor.store_health"
      ],
      "capability_refs": [
        "shopify.analytics.business_metrics"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "pilot_live_read_only"
      },
      "notes": [
        "Production activation follows the required Shopify read_reports scope after the current review scope freeze."
      ]
    },
    {
      "tool_id": "inventory.compare_across_channels",
      "name": "Compare inventory across channels",
      "business_intent": "Compare the same inventory identity across connected channels and surface mismatches before any write.",
      "phase": "analyze",
      "app_refs": [
        "yeedoor.multichannel_inventory_sync"
      ],
      "role_refs": [
        "ai_inventory_manager"
      ],
      "problem_refs": [
        "yeedoor.inventory_mismatch",
        "yeedoor.overselling_risk"
      ],
      "capability_refs": [
        "shopify.inventory.read",
        "amazon.inventory.read"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_enabled"
      },
      "notes": [
        "Unified cross-channel identity and merchant-facing runtime are still incomplete."
      ]
    },
    {
      "tool_id": "inventory.set_shopify_guarded",
      "name": "Set Shopify inventory with compare guard",
      "business_intent": "Prepare and apply a Shopify inventory quantity change only when compare-and-set checks and merchant approval pass.",
      "phase": "act",
      "app_refs": [
        "yeedoor.multichannel_inventory_sync"
      ],
      "role_refs": [
        "ai_inventory_manager"
      ],
      "problem_refs": [
        "yeedoor.inventory_mismatch",
        "yeedoor.overselling_risk"
      ],
      "capability_refs": [
        "shopify.inventory.set",
        "shopify.verify.readback"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R2",
        "approval_policy": "merchant_approval_required",
        "verification_policy": "mandatory_readback"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_enabled"
      },
      "notes": [
        "Requires Shopify inventory scopes and controlled merchant reauthorization; the add-on remains Coming Soon."
      ]
    },
    {
      "tool_id": "fulfillment.read_cross_channel_orders",
      "name": "Read cross-channel order context",
      "business_intent": "Read order context from supported connected channels before routing or fulfillment decisions.",
      "phase": "observe",
      "app_refs": [
        "yeedoor.multichannel_fulfillment"
      ],
      "role_refs": [
        "ai_fulfillment_manager"
      ],
      "problem_refs": [
        "yeedoor.order_routing",
        "yeedoor.fulfillment_exceptions"
      ],
      "capability_refs": [
        "shopify.orders.read",
        "amazon.orders.read",
        "ebay.orders.read"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_enabled"
      },
      "notes": []
    },
    {
      "tool_id": "fulfillment.preview_amazon_mcf",
      "name": "Preview Amazon MCF fulfillment",
      "business_intent": "Preview an Amazon Multi-Channel Fulfillment path before creating any real fulfillment order.",
      "phase": "act",
      "app_refs": [
        "yeedoor.multichannel_fulfillment"
      ],
      "role_refs": [
        "ai_fulfillment_manager"
      ],
      "problem_refs": [
        "yeedoor.order_routing",
        "yeedoor.fulfillment_exceptions"
      ],
      "capability_refs": [
        "amazon.mcf.preview"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R1",
        "approval_policy": "preview_only",
        "verification_policy": "preview_result"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_enabled"
      },
      "notes": []
    },
    {
      "tool_id": "fulfillment.create_amazon_mcf",
      "name": "Create Amazon MCF fulfillment",
      "business_intent": "Create a real Amazon MCF fulfillment order only after strong confirmation and runtime safety gates pass.",
      "phase": "act",
      "app_refs": [
        "yeedoor.multichannel_fulfillment"
      ],
      "role_refs": [
        "ai_fulfillment_manager"
      ],
      "problem_refs": [
        "yeedoor.order_routing",
        "yeedoor.fulfillment_exceptions"
      ],
      "capability_refs": [
        "amazon.mcf.create"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R3",
        "approval_policy": "strong_confirmation_required",
        "verification_policy": "mandatory_readback_or_provider_status"
      },
      "availability": {
        "runtime_status": "partial_hard_gated",
        "external_agent_invocation": "blocked"
      },
      "notes": [
        "Real dispatch master switch is off; do not expose this as an executable external agent tool."
      ]
    },
    {
      "tool_id": "google.review_gmc_product_issues",
      "name": "Review Merchant Center product issues",
      "business_intent": "Review product and account issue context for the Merchant Center account mapped to the selected store.",
      "phase": "analyze",
      "app_refs": [],
      "role_refs": [
        "ai_feed_manager",
        "ai_google_manager"
      ],
      "problem_refs": [
        "yeedoor.gmc_disapprovals",
        "yeedoor.feed_price_availability_mismatch"
      ],
      "capability_refs": [
        "gmc.products.observe",
        "gmc.issues.analyze"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_published"
      },
      "notes": []
    },
    {
      "tool_id": "google.analyze_ads_performance",
      "name": "Analyze Google Ads performance",
      "business_intent": "Analyze ecommerce advertising performance in the Google Ads client account mapped to the selected store.",
      "phase": "analyze",
      "app_refs": [],
      "role_refs": [
        "ai_ads_manager",
        "ai_google_manager"
      ],
      "problem_refs": [
        "yeedoor.pmax_underperformance"
      ],
      "capability_refs": [
        "google_ads.gaql.query",
        "google_ads.performance.analyze"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_published"
      },
      "notes": []
    },
    {
      "tool_id": "google.inspect_conversion_tracking",
      "name": "Inspect ecommerce conversion tracking",
      "business_intent": "Inspect Google Ads and GA4 measurement context for missing, duplicated or inconsistent ecommerce conversions.",
      "phase": "analyze",
      "app_refs": [],
      "role_refs": [
        "ai_google_manager",
        "ai_ads_manager"
      ],
      "problem_refs": [
        "yeedoor.conversion_tracking_integrity"
      ],
      "capability_refs": [
        "google_ads.gaql.query",
        "ga4.report.read",
        "ga4.funnel.analyze"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_published"
      },
      "notes": []
    },
    {
      "tool_id": "google.inspect_store_asset_mapping",
      "name": "Inspect store-to-Google asset mapping",
      "business_intent": "Inspect which Google Ads, Merchant Center, GA4 and Search Console assets are mapped to the selected store.",
      "phase": "observe",
      "app_refs": [],
      "role_refs": [
        "ai_google_manager"
      ],
      "problem_refs": [
        "yeedoor.google_asset_mapping_conflict"
      ],
      "capability_refs": [
        "google_ads.assets.discover",
        "gmc.accounts.discover",
        "ga4.assets.discover",
        "gsc.assets.discover"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R0",
        "approval_policy": "not_required",
        "verification_policy": "readback_or_evidence"
      },
      "availability": {
        "runtime_status": "implemented_foundations",
        "external_agent_invocation": "pilot_live_read_only"
      },
      "notes": []
    },
    {
      "tool_id": "google.prepare_ads_change",
      "name": "Prepare and execute a guarded Google Ads change",
      "business_intent": "Create a merchant-scoped Google Ads action, validate it, require approval, execute it and verify with GAQL readback.",
      "phase": "act",
      "app_refs": [],
      "role_refs": [
        "ai_ads_manager",
        "ai_google_manager"
      ],
      "problem_refs": [
        "yeedoor.pmax_underperformance"
      ],
      "capability_refs": [
        "google_ads.mutate",
        "google_ads.verify.gaql"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R2",
        "approval_policy": "merchant_approval_required",
        "verification_policy": "mandatory_gaql_readback"
      },
      "availability": {
        "runtime_status": "implemented_guarded",
        "external_agent_invocation": "not_published"
      },
      "notes": []
    },
    {
      "tool_id": "google.write_gmc_product_guarded",
      "name": "Apply a guarded Merchant Center product input change",
      "business_intent": "Apply a supported Merchant Center product input change only inside the selected store/account binding and verify eventual processing.",
      "phase": "act",
      "app_refs": [],
      "role_refs": [
        "ai_feed_manager",
        "ai_google_manager"
      ],
      "problem_refs": [
        "yeedoor.gmc_disapprovals",
        "yeedoor.feed_price_availability_mismatch"
      ],
      "capability_refs": [
        "gmc.products.write",
        "gmc.verify.readback"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R2",
        "approval_policy": "merchant_approval_required",
        "verification_policy": "eventual_consistency_readback"
      },
      "availability": {
        "runtime_status": "partial",
        "external_agent_invocation": "not_published"
      },
      "notes": []
    },
    {
      "tool_id": "google.create_ga4_key_event",
      "name": "Create GA4 key event",
      "business_intent": "Create a GA4 key event in the merchant-authorized property after an explicit write confirmation.",
      "phase": "act",
      "app_refs": [],
      "role_refs": [
        "ai_google_manager"
      ],
      "problem_refs": [
        "yeedoor.conversion_tracking_integrity"
      ],
      "capability_refs": [
        "ga4.key_event.create",
        "ga4.verify.report"
      ],
      "scope": {
        "merchant_required": true,
        "store_required": true,
        "provider_connection_required": true
      },
      "risk": {
        "level": "R1",
        "approval_policy": "explicit_write_confirmation",
        "verification_policy": "report_or_admin_readback"
      },
      "availability": {
        "runtime_status": "implemented_guarded",
        "external_agent_invocation": "not_published"
      },
      "notes": []
    }
  ]
}
