#
tokens: 44000/50000 2/825 files (page 40/43)
lines: off (toggle) GitHub
raw markdown copy
This is page 40 of 43. Use http://codebase.md/taurgis/sfcc-dev-mcp?page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .github
│   ├── dependabot.yml
│   ├── instructions
│   │   ├── mcp-node-tests.instructions.md
│   │   └── mcp-yml-tests.instructions.md
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   ├── documentation.yml
│   │   ├── feature_request.yml
│   │   └── question.yml
│   ├── PULL_REQUEST_TEMPLATE
│   │   ├── bug_fix.md
│   │   ├── documentation.md
│   │   └── new_tool.md
│   ├── pull_request_template.md
│   └── workflows
│       ├── ci.yml
│       ├── deploy-pages.yml
│       ├── publish.yml
│       └── update-docs.yml
├── .gitignore
├── .husky
│   └── pre-commit
├── aegis.config.docs-only.json
├── aegis.config.json
├── aegis.config.with-dw.json
├── AGENTS.md
├── ai-instructions
│   ├── claude-desktop
│   │   └── claude_custom_instructions.md
│   ├── cursor
│   │   └── .cursor
│   │       └── rules
│   │           ├── debugging-workflows.mdc
│   │           ├── hooks-development.mdc
│   │           ├── isml-templates.mdc
│   │           ├── job-framework.mdc
│   │           ├── performance-optimization.mdc
│   │           ├── scapi-endpoints.mdc
│   │           ├── security-patterns.mdc
│   │           ├── sfcc-development.mdc
│   │           ├── sfra-controllers.mdc
│   │           ├── sfra-models.mdc
│   │           ├── system-objects.mdc
│   │           └── testing-patterns.mdc
│   └── github-copilot
│       └── copilot-instructions.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── docs
│   ├── best-practices
│   │   ├── cartridge_creation.md
│   │   ├── isml_templates.md
│   │   ├── job_framework.md
│   │   ├── localserviceregistry.md
│   │   ├── ocapi_hooks.md
│   │   ├── performance.md
│   │   ├── scapi_custom_endpoint.md
│   │   ├── scapi_hooks.md
│   │   ├── security.md
│   │   ├── sfra_client_side_js.md
│   │   ├── sfra_controllers.md
│   │   ├── sfra_models.md
│   │   └── sfra_scss.md
│   ├── dw_campaign
│   │   ├── ABTest.md
│   │   ├── ABTestMgr.md
│   │   ├── ABTestSegment.md
│   │   ├── AmountDiscount.md
│   │   ├── ApproachingDiscount.md
│   │   ├── BonusChoiceDiscount.md
│   │   ├── BonusDiscount.md
│   │   ├── Campaign.md
│   │   ├── CampaignMgr.md
│   │   ├── CampaignStatusCodes.md
│   │   ├── Coupon.md
│   │   ├── CouponMgr.md
│   │   ├── CouponRedemption.md
│   │   ├── CouponStatusCodes.md
│   │   ├── Discount.md
│   │   ├── DiscountPlan.md
│   │   ├── FixedPriceDiscount.md
│   │   ├── FixedPriceShippingDiscount.md
│   │   ├── FreeDiscount.md
│   │   ├── FreeShippingDiscount.md
│   │   ├── PercentageDiscount.md
│   │   ├── PercentageOptionDiscount.md
│   │   ├── PriceBookPriceDiscount.md
│   │   ├── Promotion.md
│   │   ├── PromotionMgr.md
│   │   ├── PromotionPlan.md
│   │   ├── SlotContent.md
│   │   ├── SourceCodeGroup.md
│   │   ├── SourceCodeInfo.md
│   │   ├── SourceCodeStatusCodes.md
│   │   └── TotalFixedPriceDiscount.md
│   ├── dw_catalog
│   │   ├── Catalog.md
│   │   ├── CatalogMgr.md
│   │   ├── Category.md
│   │   ├── CategoryAssignment.md
│   │   ├── CategoryLink.md
│   │   ├── PriceBook.md
│   │   ├── PriceBookMgr.md
│   │   ├── Product.md
│   │   ├── ProductActiveData.md
│   │   ├── ProductAttributeModel.md
│   │   ├── ProductAvailabilityLevels.md
│   │   ├── ProductAvailabilityModel.md
│   │   ├── ProductInventoryList.md
│   │   ├── ProductInventoryMgr.md
│   │   ├── ProductInventoryRecord.md
│   │   ├── ProductLink.md
│   │   ├── ProductMgr.md
│   │   ├── ProductOption.md
│   │   ├── ProductOptionModel.md
│   │   ├── ProductOptionValue.md
│   │   ├── ProductPriceInfo.md
│   │   ├── ProductPriceModel.md
│   │   ├── ProductPriceTable.md
│   │   ├── ProductSearchHit.md
│   │   ├── ProductSearchModel.md
│   │   ├── ProductSearchRefinementDefinition.md
│   │   ├── ProductSearchRefinements.md
│   │   ├── ProductSearchRefinementValue.md
│   │   ├── ProductVariationAttribute.md
│   │   ├── ProductVariationAttributeValue.md
│   │   ├── ProductVariationModel.md
│   │   ├── Recommendation.md
│   │   ├── SearchModel.md
│   │   ├── SearchRefinementDefinition.md
│   │   ├── SearchRefinements.md
│   │   ├── SearchRefinementValue.md
│   │   ├── SortingOption.md
│   │   ├── SortingRule.md
│   │   ├── Store.md
│   │   ├── StoreGroup.md
│   │   ├── StoreInventoryFilter.md
│   │   ├── StoreInventoryFilterValue.md
│   │   ├── StoreMgr.md
│   │   ├── Variant.md
│   │   └── VariationGroup.md
│   ├── dw_content
│   │   ├── Content.md
│   │   ├── ContentMgr.md
│   │   ├── ContentSearchModel.md
│   │   ├── ContentSearchRefinementDefinition.md
│   │   ├── ContentSearchRefinements.md
│   │   ├── ContentSearchRefinementValue.md
│   │   ├── Folder.md
│   │   ├── Library.md
│   │   ├── MarkupText.md
│   │   └── MediaFile.md
│   ├── dw_crypto
│   │   ├── CertificateRef.md
│   │   ├── CertificateUtils.md
│   │   ├── Cipher.md
│   │   ├── Encoding.md
│   │   ├── JWE.md
│   │   ├── JWEHeader.md
│   │   ├── JWS.md
│   │   ├── JWSHeader.md
│   │   ├── KeyRef.md
│   │   ├── Mac.md
│   │   ├── MessageDigest.md
│   │   ├── SecureRandom.md
│   │   ├── Signature.md
│   │   ├── WeakCipher.md
│   │   ├── WeakMac.md
│   │   ├── WeakMessageDigest.md
│   │   ├── WeakSignature.md
│   │   └── X509Certificate.md
│   ├── dw_customer
│   │   ├── AddressBook.md
│   │   ├── AgentUserMgr.md
│   │   ├── AgentUserStatusCodes.md
│   │   ├── AuthenticationStatus.md
│   │   ├── Credentials.md
│   │   ├── Customer.md
│   │   ├── CustomerActiveData.md
│   │   ├── CustomerAddress.md
│   │   ├── CustomerCDPData.md
│   │   ├── CustomerContextMgr.md
│   │   ├── CustomerGroup.md
│   │   ├── CustomerList.md
│   │   ├── CustomerMgr.md
│   │   ├── CustomerPasswordConstraints.md
│   │   ├── CustomerPaymentInstrument.md
│   │   ├── CustomerStatusCodes.md
│   │   ├── EncryptedObject.md
│   │   ├── ExternalProfile.md
│   │   ├── OrderHistory.md
│   │   ├── ProductList.md
│   │   ├── ProductListItem.md
│   │   ├── ProductListItemPurchase.md
│   │   ├── ProductListMgr.md
│   │   ├── ProductListRegistrant.md
│   │   ├── Profile.md
│   │   └── Wallet.md
│   ├── dw_extensions.applepay
│   │   ├── ApplePayHookResult.md
│   │   └── ApplePayHooks.md
│   ├── dw_extensions.facebook
│   │   ├── FacebookFeedHooks.md
│   │   └── FacebookProduct.md
│   ├── dw_extensions.paymentrequest
│   │   ├── PaymentRequestHookResult.md
│   │   └── PaymentRequestHooks.md
│   ├── dw_extensions.payments
│   │   ├── SalesforceBancontactPaymentDetails.md
│   │   ├── SalesforceCardPaymentDetails.md
│   │   ├── SalesforceEpsPaymentDetails.md
│   │   ├── SalesforceIdealPaymentDetails.md
│   │   ├── SalesforceKlarnaPaymentDetails.md
│   │   ├── SalesforcePaymentDetails.md
│   │   ├── SalesforcePaymentIntent.md
│   │   ├── SalesforcePaymentMethod.md
│   │   ├── SalesforcePaymentRequest.md
│   │   ├── SalesforcePaymentsHooks.md
│   │   ├── SalesforcePaymentsMgr.md
│   │   ├── SalesforcePaymentsSiteConfiguration.md
│   │   ├── SalesforcePayPalOrder.md
│   │   ├── SalesforcePayPalOrderAddress.md
│   │   ├── SalesforcePayPalOrderPayer.md
│   │   ├── SalesforcePayPalPaymentDetails.md
│   │   ├── SalesforceSepaDebitPaymentDetails.md
│   │   └── SalesforceVenmoPaymentDetails.md
│   ├── dw_extensions.pinterest
│   │   ├── PinterestAvailability.md
│   │   ├── PinterestFeedHooks.md
│   │   ├── PinterestOrder.md
│   │   ├── PinterestOrderHooks.md
│   │   └── PinterestProduct.md
│   ├── dw_io
│   │   ├── CSVStreamReader.md
│   │   ├── CSVStreamWriter.md
│   │   ├── File.md
│   │   ├── FileReader.md
│   │   ├── FileWriter.md
│   │   ├── InputStream.md
│   │   ├── OutputStream.md
│   │   ├── PrintWriter.md
│   │   ├── RandomAccessFileReader.md
│   │   ├── Reader.md
│   │   ├── StringWriter.md
│   │   ├── Writer.md
│   │   ├── XMLIndentingStreamWriter.md
│   │   ├── XMLStreamConstants.md
│   │   ├── XMLStreamReader.md
│   │   └── XMLStreamWriter.md
│   ├── dw_job
│   │   ├── JobExecution.md
│   │   └── JobStepExecution.md
│   ├── dw_net
│   │   ├── FTPClient.md
│   │   ├── FTPFileInfo.md
│   │   ├── HTTPClient.md
│   │   ├── HTTPRequestPart.md
│   │   ├── Mail.md
│   │   ├── SFTPClient.md
│   │   ├── SFTPFileInfo.md
│   │   ├── WebDAVClient.md
│   │   └── WebDAVFileInfo.md
│   ├── dw_object
│   │   ├── ActiveData.md
│   │   ├── CustomAttributes.md
│   │   ├── CustomObject.md
│   │   ├── CustomObjectMgr.md
│   │   ├── Extensible.md
│   │   ├── ExtensibleObject.md
│   │   ├── Note.md
│   │   ├── ObjectAttributeDefinition.md
│   │   ├── ObjectAttributeGroup.md
│   │   ├── ObjectAttributeValueDefinition.md
│   │   ├── ObjectTypeDefinition.md
│   │   ├── PersistentObject.md
│   │   ├── SimpleExtensible.md
│   │   └── SystemObjectMgr.md
│   ├── dw_order
│   │   ├── AbstractItem.md
│   │   ├── AbstractItemCtnr.md
│   │   ├── Appeasement.md
│   │   ├── AppeasementItem.md
│   │   ├── Basket.md
│   │   ├── BasketMgr.md
│   │   ├── BonusDiscountLineItem.md
│   │   ├── CouponLineItem.md
│   │   ├── CreateAgentBasketLimitExceededException.md
│   │   ├── CreateBasketFromOrderException.md
│   │   ├── CreateCouponLineItemException.md
│   │   ├── CreateOrderException.md
│   │   ├── CreateTemporaryBasketLimitExceededException.md
│   │   ├── GiftCertificate.md
│   │   ├── GiftCertificateLineItem.md
│   │   ├── GiftCertificateMgr.md
│   │   ├── GiftCertificateStatusCodes.md
│   │   ├── Invoice.md
│   │   ├── InvoiceItem.md
│   │   ├── LineItem.md
│   │   ├── LineItemCtnr.md
│   │   ├── Order.md
│   │   ├── OrderAddress.md
│   │   ├── OrderItem.md
│   │   ├── OrderMgr.md
│   │   ├── OrderPaymentInstrument.md
│   │   ├── OrderProcessStatusCodes.md
│   │   ├── PaymentCard.md
│   │   ├── PaymentInstrument.md
│   │   ├── PaymentMethod.md
│   │   ├── PaymentMgr.md
│   │   ├── PaymentProcessor.md
│   │   ├── PaymentStatusCodes.md
│   │   ├── PaymentTransaction.md
│   │   ├── PriceAdjustment.md
│   │   ├── PriceAdjustmentLimitTypes.md
│   │   ├── ProductLineItem.md
│   │   ├── ProductShippingCost.md
│   │   ├── ProductShippingLineItem.md
│   │   ├── ProductShippingModel.md
│   │   ├── Return.md
│   │   ├── ReturnCase.md
│   │   ├── ReturnCaseItem.md
│   │   ├── ReturnItem.md
│   │   ├── Shipment.md
│   │   ├── ShipmentShippingCost.md
│   │   ├── ShipmentShippingModel.md
│   │   ├── ShippingLineItem.md
│   │   ├── ShippingLocation.md
│   │   ├── ShippingMethod.md
│   │   ├── ShippingMgr.md
│   │   ├── ShippingOrder.md
│   │   ├── ShippingOrderItem.md
│   │   ├── SumItem.md
│   │   ├── TaxGroup.md
│   │   ├── TaxItem.md
│   │   ├── TaxMgr.md
│   │   ├── TrackingInfo.md
│   │   └── TrackingRef.md
│   ├── dw_order.hooks
│   │   ├── CalculateHooks.md
│   │   ├── OrderHooks.md
│   │   ├── PaymentHooks.md
│   │   ├── ReturnHooks.md
│   │   └── ShippingOrderHooks.md
│   ├── dw_rpc
│   │   ├── SOAPUtil.md
│   │   ├── Stub.md
│   │   └── WebReference.md
│   ├── dw_suggest
│   │   ├── BrandSuggestions.md
│   │   ├── CategorySuggestions.md
│   │   ├── ContentSuggestions.md
│   │   ├── CustomSuggestions.md
│   │   ├── ProductSuggestions.md
│   │   ├── SearchPhraseSuggestions.md
│   │   ├── SuggestedCategory.md
│   │   ├── SuggestedContent.md
│   │   ├── SuggestedPhrase.md
│   │   ├── SuggestedProduct.md
│   │   ├── SuggestedTerm.md
│   │   ├── SuggestedTerms.md
│   │   ├── Suggestions.md
│   │   └── SuggestModel.md
│   ├── dw_svc
│   │   ├── FTPService.md
│   │   ├── FTPServiceDefinition.md
│   │   ├── HTTPFormService.md
│   │   ├── HTTPFormServiceDefinition.md
│   │   ├── HTTPService.md
│   │   ├── HTTPServiceDefinition.md
│   │   ├── LocalServiceRegistry.md
│   │   ├── Result.md
│   │   ├── Service.md
│   │   ├── ServiceCallback.md
│   │   ├── ServiceConfig.md
│   │   ├── ServiceCredential.md
│   │   ├── ServiceDefinition.md
│   │   ├── ServiceProfile.md
│   │   ├── ServiceRegistry.md
│   │   ├── SOAPService.md
│   │   └── SOAPServiceDefinition.md
│   ├── dw_system
│   │   ├── AgentUserStatusCodes.md
│   │   ├── Cache.md
│   │   ├── CacheMgr.md
│   │   ├── HookMgr.md
│   │   ├── InternalObject.md
│   │   ├── JobProcessMonitor.md
│   │   ├── Log.md
│   │   ├── Logger.md
│   │   ├── LogNDC.md
│   │   ├── OrganizationPreferences.md
│   │   ├── Pipeline.md
│   │   ├── PipelineDictionary.md
│   │   ├── RemoteInclude.md
│   │   ├── Request.md
│   │   ├── RequestHooks.md
│   │   ├── Response.md
│   │   ├── RESTErrorResponse.md
│   │   ├── RESTResponseMgr.md
│   │   ├── RESTSuccessResponse.md
│   │   ├── SearchStatus.md
│   │   ├── Session.md
│   │   ├── Site.md
│   │   ├── SitePreferences.md
│   │   ├── Status.md
│   │   ├── StatusItem.md
│   │   ├── System.md
│   │   └── Transaction.md
│   ├── dw_util
│   │   ├── ArrayList.md
│   │   ├── Assert.md
│   │   ├── BigInteger.md
│   │   ├── Bytes.md
│   │   ├── Calendar.md
│   │   ├── Collection.md
│   │   ├── Currency.md
│   │   ├── DateUtils.md
│   │   ├── Decimal.md
│   │   ├── FilteringCollection.md
│   │   ├── Geolocation.md
│   │   ├── HashMap.md
│   │   ├── HashSet.md
│   │   ├── Iterator.md
│   │   ├── LinkedHashMap.md
│   │   ├── LinkedHashSet.md
│   │   ├── List.md
│   │   ├── Locale.md
│   │   ├── Map.md
│   │   ├── MapEntry.md
│   │   ├── MappingKey.md
│   │   ├── MappingMgr.md
│   │   ├── PropertyComparator.md
│   │   ├── SecureEncoder.md
│   │   ├── SecureFilter.md
│   │   ├── SeekableIterator.md
│   │   ├── Set.md
│   │   ├── SortedMap.md
│   │   ├── SortedSet.md
│   │   ├── StringUtils.md
│   │   ├── Template.md
│   │   └── UUIDUtils.md
│   ├── dw_value
│   │   ├── EnumValue.md
│   │   ├── MimeEncodedText.md
│   │   ├── Money.md
│   │   └── Quantity.md
│   ├── dw_web
│   │   ├── ClickStream.md
│   │   ├── ClickStreamEntry.md
│   │   ├── Cookie.md
│   │   ├── Cookies.md
│   │   ├── CSRFProtection.md
│   │   ├── Form.md
│   │   ├── FormAction.md
│   │   ├── FormElement.md
│   │   ├── FormElementValidationResult.md
│   │   ├── FormField.md
│   │   ├── FormFieldOption.md
│   │   ├── FormFieldOptions.md
│   │   ├── FormGroup.md
│   │   ├── FormList.md
│   │   ├── FormListItem.md
│   │   ├── Forms.md
│   │   ├── HttpParameter.md
│   │   ├── HttpParameterMap.md
│   │   ├── LoopIterator.md
│   │   ├── PageMetaData.md
│   │   ├── PageMetaTag.md
│   │   ├── PagingModel.md
│   │   ├── Resource.md
│   │   ├── URL.md
│   │   ├── URLAction.md
│   │   ├── URLParameter.md
│   │   ├── URLRedirect.md
│   │   ├── URLRedirectMgr.md
│   │   └── URLUtils.md
│   ├── sfra
│   │   ├── account.md
│   │   ├── address.md
│   │   ├── billing.md
│   │   ├── cart.md
│   │   ├── categories.md
│   │   ├── content.md
│   │   ├── locale.md
│   │   ├── order.md
│   │   ├── payment.md
│   │   ├── price-default.md
│   │   ├── price-range.md
│   │   ├── price-tiered.md
│   │   ├── product-bundle.md
│   │   ├── product-full.md
│   │   ├── product-line-items.md
│   │   ├── product-search.md
│   │   ├── product-tile.md
│   │   ├── querystring.md
│   │   ├── render.md
│   │   ├── request.md
│   │   ├── response.md
│   │   ├── server.md
│   │   ├── shipping.md
│   │   ├── store.md
│   │   ├── stores.md
│   │   └── totals.md
│   └── TopLevel
│       ├── APIException.md
│       ├── arguments.md
│       ├── Array.md
│       ├── ArrayBuffer.md
│       ├── BigInt.md
│       ├── Boolean.md
│       ├── ConversionError.md
│       ├── DataView.md
│       ├── Date.md
│       ├── Error.md
│       ├── ES6Iterator.md
│       ├── EvalError.md
│       ├── Fault.md
│       ├── Float32Array.md
│       ├── Float64Array.md
│       ├── Function.md
│       ├── Generator.md
│       ├── global.md
│       ├── Int16Array.md
│       ├── Int32Array.md
│       ├── Int8Array.md
│       ├── InternalError.md
│       ├── IOError.md
│       ├── Iterable.md
│       ├── Iterator.md
│       ├── JSON.md
│       ├── Map.md
│       ├── Math.md
│       ├── Module.md
│       ├── Namespace.md
│       ├── Number.md
│       ├── Object.md
│       ├── QName.md
│       ├── RangeError.md
│       ├── ReferenceError.md
│       ├── RegExp.md
│       ├── Set.md
│       ├── StopIteration.md
│       ├── String.md
│       ├── Symbol.md
│       ├── SyntaxError.md
│       ├── SystemError.md
│       ├── TypeError.md
│       ├── Uint16Array.md
│       ├── Uint32Array.md
│       ├── Uint8Array.md
│       ├── Uint8ClampedArray.md
│       ├── URIError.md
│       ├── WeakMap.md
│       ├── WeakSet.md
│       ├── XML.md
│       ├── XMLList.md
│       └── XMLStreamError.md
├── docs-site
│   ├── .gitignore
│   ├── App.tsx
│   ├── components
│   │   ├── Badge.tsx
│   │   ├── BreadcrumbSchema.tsx
│   │   ├── CodeBlock.tsx
│   │   ├── Collapsible.tsx
│   │   ├── ConfigBuilder.tsx
│   │   ├── ConfigHero.tsx
│   │   ├── ConfigModeTabs.tsx
│   │   ├── icons.tsx
│   │   ├── Layout.tsx
│   │   ├── LightCodeContainer.tsx
│   │   ├── NewcomerCTA.tsx
│   │   ├── NextStepsStrip.tsx
│   │   ├── OnThisPage.tsx
│   │   ├── Search.tsx
│   │   ├── SEO.tsx
│   │   ├── Sidebar.tsx
│   │   ├── StructuredData.tsx
│   │   ├── ToolCard.tsx
│   │   ├── ToolFilters.tsx
│   │   ├── Typography.tsx
│   │   └── VersionBadge.tsx
│   ├── constants.tsx
│   ├── index.html
│   ├── main.tsx
│   ├── metadata.json
│   ├── package-lock.json
│   ├── package.json
│   ├── pages
│   │   ├── AIInterfacesPage.tsx
│   │   ├── ConfigurationPage.tsx
│   │   ├── DevelopmentPage.tsx
│   │   ├── ExamplesPage.tsx
│   │   ├── FeaturesPage.tsx
│   │   ├── HomePage.tsx
│   │   ├── SecurityPage.tsx
│   │   ├── ToolsPage.tsx
│   │   └── TroubleshootingPage.tsx
│   ├── postcss.config.js
│   ├── public
│   │   ├── .well-known
│   │   │   └── security.txt
│   │   ├── 404.html
│   │   ├── android-chrome-192x192.png
│   │   ├── android-chrome-512x512.png
│   │   ├── apple-touch-icon.png
│   │   ├── explain-product-pricing-methods-no-mcp.png
│   │   ├── explain-product-pricing-methods.png
│   │   ├── favicon-16x16.png
│   │   ├── favicon-32x32.png
│   │   ├── favicon.ico
│   │   ├── llms.txt
│   │   ├── robots.txt
│   │   ├── site.webmanifest
│   │   └── sitemap.xml
│   ├── README.md
│   ├── scripts
│   │   ├── generate-search-index.js
│   │   ├── generate-sitemap.js
│   │   └── search-dev.js
│   ├── src
│   │   └── styles
│   │       ├── input.css
│   │       └── prism-theme.css
│   ├── tailwind.config.js
│   ├── tsconfig.json
│   ├── types.ts
│   ├── utils
│   │   ├── search.ts
│   │   └── toolsData.ts
│   └── vite.config.ts
├── eslint.config.js
├── jest.config.js
├── LICENSE
├── package-lock.json
├── package.json
├── README.md
├── scripts
│   └── convert-docs.js
├── SECURITY.md
├── server.json
├── src
│   ├── clients
│   │   ├── base
│   │   │   ├── http-client.ts
│   │   │   ├── oauth-token.ts
│   │   │   └── ocapi-auth-client.ts
│   │   ├── best-practices-client.ts
│   │   ├── cartridge-generation-client.ts
│   │   ├── docs
│   │   │   ├── class-content-parser.ts
│   │   │   ├── class-name-resolver.ts
│   │   │   ├── documentation-scanner.ts
│   │   │   ├── index.ts
│   │   │   └── referenced-types-extractor.ts
│   │   ├── docs-client.ts
│   │   ├── log-client.ts
│   │   ├── logs
│   │   │   ├── index.ts
│   │   │   ├── log-analyzer.ts
│   │   │   ├── log-client.ts
│   │   │   ├── log-constants.ts
│   │   │   ├── log-file-discovery.ts
│   │   │   ├── log-file-reader.ts
│   │   │   ├── log-formatter.ts
│   │   │   ├── log-processor.ts
│   │   │   ├── log-types.ts
│   │   │   └── webdav-client-manager.ts
│   │   ├── ocapi
│   │   │   ├── code-versions-client.ts
│   │   │   ├── site-preferences-client.ts
│   │   │   └── system-objects-client.ts
│   │   ├── ocapi-client.ts
│   │   └── sfra-client.ts
│   ├── config
│   │   ├── configuration-factory.ts
│   │   └── dw-json-loader.ts
│   ├── core
│   │   ├── handlers
│   │   │   ├── abstract-log-tool-handler.ts
│   │   │   ├── base-handler.ts
│   │   │   ├── best-practices-handler.ts
│   │   │   ├── cartridge-handler.ts
│   │   │   ├── client-factory.ts
│   │   │   ├── code-version-handler.ts
│   │   │   ├── docs-handler.ts
│   │   │   ├── job-log-handler.ts
│   │   │   ├── job-log-tool-config.ts
│   │   │   ├── log-handler.ts
│   │   │   ├── log-tool-config.ts
│   │   │   ├── sfra-handler.ts
│   │   │   ├── system-object-handler.ts
│   │   │   └── validation-helpers.ts
│   │   ├── server.ts
│   │   └── tool-definitions.ts
│   ├── index.ts
│   ├── main.ts
│   ├── services
│   │   ├── file-system-service.ts
│   │   ├── index.ts
│   │   └── path-service.ts
│   ├── tool-configs
│   │   ├── best-practices-tool-config.ts
│   │   ├── cartridge-tool-config.ts
│   │   ├── code-version-tool-config.ts
│   │   ├── docs-tool-config.ts
│   │   ├── job-log-tool-config.ts
│   │   ├── log-tool-config.ts
│   │   ├── sfra-tool-config.ts
│   │   └── system-object-tool-config.ts
│   ├── types
│   │   └── types.ts
│   └── utils
│       ├── cache.ts
│       ├── job-log-tool-config.ts
│       ├── job-log-utils.ts
│       ├── log-cache.ts
│       ├── log-tool-config.ts
│       ├── log-tool-constants.ts
│       ├── log-tool-utils.ts
│       ├── logger.ts
│       ├── ocapi-url-builder.ts
│       ├── path-resolver.ts
│       ├── query-builder.ts
│       ├── utils.ts
│       └── validator.ts
├── tests
│   ├── __mocks__
│   │   ├── docs-client.ts
│   │   ├── src
│   │   │   └── clients
│   │   │       └── base
│   │   │           └── http-client.js
│   │   └── webdav.js
│   ├── base-handler.test.ts
│   ├── base-http-client.test.ts
│   ├── best-practices-handler.test.ts
│   ├── cache.test.ts
│   ├── cartridge-handler.test.ts
│   ├── class-content-parser.test.ts
│   ├── class-name-resolver.test.ts
│   ├── client-factory.test.ts
│   ├── code-version-handler.test.ts
│   ├── code-versions-client.test.ts
│   ├── config.test.ts
│   ├── configuration-factory.test.ts
│   ├── docs-handler.test.ts
│   ├── documentation-scanner.test.ts
│   ├── file-system-service.test.ts
│   ├── job-log-handler.test.ts
│   ├── job-log-utils.test.ts
│   ├── log-client.test.ts
│   ├── log-handler.test.ts
│   ├── log-processor.test.ts
│   ├── logger.test.ts
│   ├── mcp
│   │   ├── AGENTS.md
│   │   ├── node
│   │   │   ├── activate-code-version-advanced.full-mode.programmatic.test.js
│   │   │   ├── code-versions.full-mode.programmatic.test.js
│   │   │   ├── generate-cartridge-structure.docs-only.programmatic.test.js
│   │   │   ├── get-available-best-practice-guides.docs-only.programmatic.test.js
│   │   │   ├── get-available-sfra-documents.programmatic.test.js
│   │   │   ├── get-best-practice-guide.docs-only.programmatic.test.js
│   │   │   ├── get-hook-reference.docs-only.programmatic.test.js
│   │   │   ├── get-job-execution-summary.full-mode.programmatic.test.js
│   │   │   ├── get-job-log-entries.full-mode.programmatic.test.js
│   │   │   ├── get-latest-debug.full-mode.programmatic.test.js
│   │   │   ├── get-latest-error.full-mode.programmatic.test.js
│   │   │   ├── get-latest-info.full-mode.programmatic.test.js
│   │   │   ├── get-latest-job-log-files.full-mode.programmatic.test.js
│   │   │   ├── get-latest-warn.full-mode.programmatic.test.js
│   │   │   ├── get-log-file-contents.full-mode.programmatic.test.js
│   │   │   ├── get-sfcc-class-documentation.docs-only.programmatic.test.js
│   │   │   ├── get-sfcc-class-info.docs-only.programmatic.test.js
│   │   │   ├── get-sfra-categories.docs-only.programmatic.test.js
│   │   │   ├── get-sfra-document.programmatic.test.js
│   │   │   ├── get-sfra-documents-by-category.docs-only.programmatic.test.js
│   │   │   ├── get-system-object-definition.full-mode.programmatic.test.js
│   │   │   ├── get-system-object-definitions.docs-only.programmatic.test.js
│   │   │   ├── get-system-object-definitions.full-mode.programmatic.test.js
│   │   │   ├── list-log-files.full-mode.programmatic.test.js
│   │   │   ├── list-sfcc-classes.docs-only.programmatic.test.js
│   │   │   ├── search-best-practices.docs-only.programmatic.test.js
│   │   │   ├── search-custom-object-attribute-definitions.full-mode.programmatic.test.js
│   │   │   ├── search-job-logs-by-name.full-mode.programmatic.test.js
│   │   │   ├── search-job-logs.full-mode.programmatic.test.js
│   │   │   ├── search-logs.full-mode.programmatic.test.js
│   │   │   ├── search-sfcc-classes.docs-only.programmatic.test.js
│   │   │   ├── search-sfcc-methods.docs-only.programmatic.test.js
│   │   │   ├── search-sfra-documentation.docs-only.programmatic.test.js
│   │   │   ├── search-site-preferences.full-mode.programmatic.test.js
│   │   │   ├── search-system-object-attribute-definitions.full-mode.programmatic.test.js
│   │   │   ├── search-system-object-attribute-groups.full-mode.programmatic.test.js
│   │   │   ├── summarize-logs.full-mode.programmatic.test.js
│   │   │   ├── tools.docs-only.programmatic.test.js
│   │   │   └── tools.full-mode.programmatic.test.js
│   │   ├── README.md
│   │   ├── test-fixtures
│   │   │   └── dw.json
│   │   └── yaml
│   │       ├── activate-code-version.docs-only.test.mcp.yml
│   │       ├── activate-code-version.full-mode.test.mcp.yml
│   │       ├── get_latest_error.test.mcp.yml
│   │       ├── get-available-best-practice-guides.docs-only.test.mcp.yml
│   │       ├── get-available-best-practice-guides.full-mode.test.mcp.yml
│   │       ├── get-available-sfra-documents.docs-only.test.mcp.yml
│   │       ├── get-available-sfra-documents.full-mode.test.mcp.yml
│   │       ├── get-best-practice-guide.docs-only.test.mcp.yml
│   │       ├── get-best-practice-guide.full-mode.test.mcp.yml
│   │       ├── get-code-versions.docs-only.test.mcp.yml
│   │       ├── get-code-versions.full-mode.test.mcp.yml
│   │       ├── get-hook-reference.docs-only.test.mcp.yml
│   │       ├── get-hook-reference.full-mode.test.mcp.yml
│   │       ├── get-job-execution-summary.full-mode.test.mcp.yml
│   │       ├── get-job-log-entries.full-mode.test.mcp.yml
│   │       ├── get-latest-debug.full-mode.test.mcp.yml
│   │       ├── get-latest-error.full-mode.test.mcp.yml
│   │       ├── get-latest-info.full-mode.test.mcp.yml
│   │       ├── get-latest-job-log-files.full-mode.test.mcp.yml
│   │       ├── get-latest-warn.full-mode.test.mcp.yml
│   │       ├── get-log-file-contents.full-mode.test.mcp.yml
│   │       ├── get-sfcc-class-documentation.docs-only.test.mcp.yml
│   │       ├── get-sfcc-class-documentation.full-mode.test.mcp.yml
│   │       ├── get-sfcc-class-info.docs-only.test.mcp.yml
│   │       ├── get-sfcc-class-info.full-mode.test.mcp.yml
│   │       ├── get-sfra-categories.docs-only.test.mcp.yml
│   │       ├── get-sfra-categories.full-mode.test.mcp.yml
│   │       ├── get-sfra-document.docs-only.test.mcp.yml
│   │       ├── get-sfra-document.full-mode.test.mcp.yml
│   │       ├── get-sfra-documents-by-category.docs-only.test.mcp.yml
│   │       ├── get-sfra-documents-by-category.full-mode.test.mcp.yml
│   │       ├── get-system-object-definition.docs-only.test.mcp.yml
│   │       ├── get-system-object-definition.full-mode.test.mcp.yml
│   │       ├── get-system-object-definitions.docs-only.test.mcp.yml
│   │       ├── get-system-object-definitions.full-mode.test.mcp.yml
│   │       ├── list-log-files.full-mode.test.mcp.yml
│   │       ├── list-sfcc-classes.docs-only.test.mcp.yml
│   │       ├── list-sfcc-classes.full-mode.test.mcp.yml
│   │       ├── search-best-practices.docs-only.test.mcp.yml
│   │       ├── search-best-practices.full-mode.test.mcp.yml
│   │       ├── search-custom-object-attribute-definitions.docs-only.test.mcp.yml
│   │       ├── search-custom-object-attribute-definitions.test.mcp.yml
│   │       ├── search-job-logs-by-name.full-mode.test.mcp.yml
│   │       ├── search-job-logs.full-mode.test.mcp.yml
│   │       ├── search-logs.full-mode.test.mcp.yml
│   │       ├── search-sfcc-classes.docs-only.test.mcp.yml
│   │       ├── search-sfcc-classes.full-mode.test.mcp.yml
│   │       ├── search-sfcc-methods.docs-only.test.mcp.yml
│   │       ├── search-sfcc-methods.full-mode.test.mcp.yml
│   │       ├── search-sfra-documentation.docs-only.test.mcp.yml
│   │       ├── search-sfra-documentation.full-mode.test.mcp.yml
│   │       ├── search-site-preferences.docs-only.test.mcp.yml
│   │       ├── search-site-preferences.full-mode.test.mcp.yml
│   │       ├── search-system-object-attribute-definitions.docs-only.test.mcp.yml
│   │       ├── search-system-object-attribute-definitions.full-mode.test.mcp.yml
│   │       ├── search-system-object-attribute-groups.docs-only.test.mcp.yml
│   │       ├── search-system-object-attribute-groups.full-mode.test.mcp.yml
│   │       ├── summarize-logs.full-mode.test.mcp.yml
│   │       ├── tools.docs-only.test.mcp.yml
│   │       └── tools.full-mode.test.mcp.yml
│   ├── oauth-token.test.ts
│   ├── ocapi-auth-client.test.ts
│   ├── ocapi-client.test.ts
│   ├── path-service.test.ts
│   ├── query-builder.test.ts
│   ├── referenced-types-extractor.test.ts
│   ├── servers
│   │   ├── sfcc-mock-server
│   │   │   ├── mock-data
│   │   │   │   └── ocapi
│   │   │   │       ├── code-versions.json
│   │   │   │       ├── custom-object-attributes-customapi.json
│   │   │   │       ├── custom-object-attributes-globalsettings.json
│   │   │   │       ├── custom-object-attributes-versionhistory.json
│   │   │   │       ├── site-preferences-ccv.json
│   │   │   │       ├── site-preferences-fastforward.json
│   │   │   │       ├── site-preferences-sfra.json
│   │   │   │       ├── site-preferences-storefront.json
│   │   │   │       ├── site-preferences-system.json
│   │   │   │       ├── system-object-attribute-groups-campaign.json
│   │   │   │       ├── system-object-attribute-groups-category.json
│   │   │   │       ├── system-object-attribute-groups-order.json
│   │   │   │       ├── system-object-attribute-groups-product.json
│   │   │   │       ├── system-object-attribute-groups-sitepreferences.json
│   │   │   │       ├── system-object-attributes-customeraddress.json
│   │   │   │       ├── system-object-attributes-product-expanded.json
│   │   │   │       ├── system-object-attributes-product.json
│   │   │   │       ├── system-object-definition-category.json
│   │   │   │       ├── system-object-definition-customer.json
│   │   │   │       ├── system-object-definition-customeraddress.json
│   │   │   │       ├── system-object-definition-order.json
│   │   │   │       ├── system-object-definition-product.json
│   │   │   │       ├── system-object-definitions-old.json
│   │   │   │       └── system-object-definitions.json
│   │   │   ├── package-lock.json
│   │   │   ├── package.json
│   │   │   ├── README.md
│   │   │   ├── scripts
│   │   │   │   └── setup-logs.js
│   │   │   ├── server.js
│   │   │   └── src
│   │   │       ├── app.js
│   │   │       ├── config
│   │   │       │   └── server-config.js
│   │   │       ├── middleware
│   │   │       │   ├── auth.js
│   │   │       │   ├── cors.js
│   │   │       │   └── logging.js
│   │   │       ├── routes
│   │   │       │   ├── ocapi
│   │   │       │   │   ├── code-versions-handler.js
│   │   │       │   │   ├── oauth-handler.js
│   │   │       │   │   ├── ocapi-error-utils.js
│   │   │       │   │   ├── ocapi-utils.js
│   │   │       │   │   ├── site-preferences-handler.js
│   │   │       │   │   └── system-objects-handler.js
│   │   │       │   ├── ocapi.js
│   │   │       │   └── webdav.js
│   │   │       └── utils
│   │   │           ├── mock-data-loader.js
│   │   │           └── webdav-xml.js
│   │   └── sfcc-mock-server-manager.ts
│   ├── sfcc-mock-server.test.ts
│   ├── site-preferences-client.test.ts
│   ├── system-objects-client.test.ts
│   ├── utils.test.ts
│   ├── validation-helpers.test.ts
│   └── validator.test.ts
├── tsconfig.json
└── tsconfig.test.json
```

# Files

--------------------------------------------------------------------------------
/docs-site/pages/HomePage.tsx:
--------------------------------------------------------------------------------

```typescript
import React, { useState, useRef, useCallback } from 'react';
import { NavLink } from 'react-router-dom';
import SEO from '../components/SEO';
import BreadcrumbSchema from '../components/BreadcrumbSchema';
import StructuredData from '../components/StructuredData';
import { H1, H2, H3, PageSubtitle } from '../components/Typography';
import CodeBlock, { InlineCode } from '../components/CodeBlock';
import LightCodeContainer from '../components/LightCodeContainer';
import NewcomerCTA from '../components/NewcomerCTA';

const HomePage: React.FC = () => {
  const [isWithoutMcpModalOpen, setIsWithoutMcpModalOpen] = useState(false);
  const [isWithMcpModalOpen, setIsWithMcpModalOpen] = useState(false);
  const [zoomPosition1, setZoomPosition1] = useState({ x: 0, y: 0 });
  const [isZooming1, setIsZooming1] = useState(false);
  const [zoomPosition2, setZoomPosition2] = useState({ x: 0, y: 0 });
  const [isZooming2, setIsZooming2] = useState(false);
  const imageRef1 = useRef<HTMLImageElement>(null);
  const imageRef2 = useRef<HTMLImageElement>(null);

  const handleMouseMove1 = useCallback((e: React.MouseEvent<HTMLImageElement>) => {
    if (!imageRef1.current) return;
    
    const rect = imageRef1.current.getBoundingClientRect();
    const x = e.clientX - rect.left;
    const y = e.clientY - rect.top;
    
    setZoomPosition1({ x, y });
  }, []);

  const handleMouseEnter1 = useCallback(() => {
    setIsZooming1(true);
  }, []);

  const handleMouseLeave1 = useCallback(() => {
    setIsZooming1(false);
  }, []);

  const handleMouseMove2 = useCallback((e: React.MouseEvent<HTMLImageElement>) => {
    if (!imageRef2.current) return;
    
    const rect = imageRef2.current.getBoundingClientRect();
    const x = e.clientX - rect.left;
    const y = e.clientY - rect.top;
    
    setZoomPosition2({ x, y });
  }, []);

  const handleMouseEnter2 = useCallback(() => {
    setIsZooming2(true);
  }, []);

  const handleMouseLeave2 = useCallback(() => {
    setIsZooming2(false);
  }, []);

  const homePageStructuredData = {
    "@context": "https://schema.org",
    "@type": "WebPage",
    "name": "SFCC Development MCP Server - AI-Powered Commerce Cloud Development Tools",
    "description": "Model Context Protocol server for Salesforce B2C Commerce Cloud development with comprehensive documentation access, log analysis, and development best practices.",
    "url": "https://sfcc-mcp-dev.rhino-inquisitor.com/",
    "mainEntity": {
      "@type": "SoftwareApplication",
      "name": "SFCC Development MCP Server",
      "applicationCategory": "DeveloperApplication",
      "description": "A comprehensive MCP server providing AI assistants with direct access to SFCC development tools, documentation, and debugging capabilities.",
      "operatingSystem": "Node.js",
      "downloadUrl": "https://www.npmjs.com/package/sfcc-dev-mcp",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock"
      }
    },
    "breadcrumb": {
      "@type": "BreadcrumbList",
      "itemListElement": [{
        "@type": "ListItem",
        "position": 1,
        "name": "Home",
        "item": "https://sfcc-mcp-dev.rhino-inquisitor.com/"
      }]
    }
  };

  return (
    <div className="max-w-6xl mx-auto px-6 py-8">
      <SEO 
        title="SFCC Development MCP Server - AI-Powered Commerce Cloud Development Tools"
        description="Model Context Protocol server for Salesforce B2C Commerce Cloud development. Access comprehensive documentation, analyze logs, explore system objects, and get best practices with AI assistance."
        keywords="SFCC, Salesforce Commerce Cloud, Model Context Protocol, MCP server, AI development tools, SFCC documentation, Commerce Cloud development, SFCC debugging, AI-assisted development, SFCC best practices"
        canonical="/"
        ogType="website"
      />
      <BreadcrumbSchema items={[
        { name: "Home", url: "/" }
      ]} />
      <StructuredData structuredData={homePageStructuredData} />
      
      {/* Hero Section */}
      <div className="text-center mb-16">
        <div className="inline-flex items-center gap-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white px-4 py-2 rounded-full text-sm font-medium mb-6">
          <span className="bg-white/20 rounded-full p-1">
            <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
              <path fillRule="evenodd" d="M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 01.947 2.287c-.836 1.372.734 2.942 2.106 2.106a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z" clipRule="evenodd" />
            </svg>
          </span>
          AI-Powered Development Tools for SFCC
        </div>
        
        <H1 id="sfcc-development-mcp-server" className="text-5xl md:text-6xl font-extrabold bg-gradient-to-r from-gray-900 via-blue-900 to-purple-900 bg-clip-text text-transparent mb-6">
          SFCC Development MCP Server
        </H1>
        
        <PageSubtitle className="text-xl md:text-2xl text-gray-600 max-w-4xl mx-auto leading-relaxed">
          Supercharge your Salesforce B2C Commerce Cloud development with AI-powered documentation access, 
          real-time log analysis, and intelligent best practices guidance
        </PageSubtitle>
      </div>
      {/* Quick Start Section */}
      <div className="mb-16 bg-gradient-to-r from-blue-50 via-indigo-50 to-purple-50 rounded-2xl p-8 shadow-xl border border-blue-100">
          <div className="text-center mb-8">
            <div className="inline-flex items-center gap-2 bg-green-100 text-green-800 px-4 py-2 rounded-full text-sm font-medium mb-4">
              <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
                <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
              </svg>
              No Credentials Required
            </div>
            <H2 id="quick-start" className="text-3xl font-bold mb-4">🚀 Zero-Config Quick Start</H2>
            <p className="text-lg text-gray-700 max-w-3xl mx-auto">
              Jump straight into SFCC development with AI assistance. Get access to comprehensive documentation, 
              best practices, and cartridge generation tools instantly.
            </p>
          </div>
          
          {/* Newcomer CTA */}
          <NewcomerCTA className="mb-8" />
          
          <div className="grid md:grid-cols-2 gap-8 items-center">
            <div>
              <h3 className="text-lg font-semibold text-gray-900 mb-4">Add to your AI client:</h3>
              <LightCodeContainer>
                <CodeBlock language="json" code={`{
  "mcpServers": {
    "sfcc-dev": {
      "command": "npx", 
      "args": ["sfcc-dev-mcp"]
    }
  }
}`} />
              </LightCodeContainer>
            </div>
            
            <div className="space-y-4">
              <div className="flex items-start gap-3 md:mt-24">
                <div className="bg-blue-100 rounded-full p-2 mt-1">
                  <svg className="w-5 h-5 text-blue-600" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M6.267 3.455a3.066 3.066 0 001.745-.723 3.066 3.066 0 013.976 0 3.066 3.066 0 001.745.723 3.066 3.066 0 012.812 2.812c.051.643.304 1.254.723 1.745a3.066 3.066 0 010 3.976 3.066 3.066 0 00-.723 1.745 3.066 3.066 0 01-2.812 2.812 3.066 3.066 0 00-1.745.723 3.066 3.066 0 01-3.976 0 3.066 3.066 0 00-1.745-.723 3.066 3.066 0 01-2.812-2.812 3.066 3.066 0 00-.723-1.745 3.066 3.066 0 010-3.976 3.066 3.066 0 00.723-1.745 3.066 3.066 0 012.812-2.812zm7.44 5.252a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                  </svg>
                </div>
                <div>
                  <h4 className="font-semibold text-gray-900 mt-0">Instant Access</h4>
                  <p className="text-gray-600 text-sm">Start using SFCC documentation and tools immediately</p>
                </div>
              </div>
              
              <div className="flex items-start gap-3">
                <div className="bg-green-100 rounded-full p-2 mt-1">
                  <svg className="w-5 h-5 text-green-600" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                  </svg>
                </div>
                <div>
                  <h4 className="font-semibold text-gray-900 mt-0">No Setup Required</h4>
                  <p className="text-gray-600 text-sm">Works out of the box with documentation-only mode</p>
                </div>
              </div>
              
              <div className="flex items-start gap-3">
                <div className="bg-purple-100 rounded-full p-2 mt-1">
                  <svg className="w-5 h-5 text-purple-600" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clipRule="evenodd" />
                  </svg>
                </div>
                <div>
                  <h4 className="font-semibold text-gray-900 mt-0">Full Documentation</h4>
                  <p className="text-gray-600 text-sm">Complete SFCC API docs, SFRA guides, and best practices</p>
                </div>
              </div>
            </div>
          </div>
          
          <div className="mt-6 p-4 bg-blue-50 border border-blue-200 rounded-lg">
            <p className="text-sm text-blue-800 text-center">
              💡 <strong>Want more features?</strong> Add SFCC credentials via <InlineCode>--dw-json</InlineCode> for 
              real-time log analysis, system & custom object exploration, and advanced debugging tools.
            </p>
          </div>
      </div>

      {/* CTA Buttons */}
      <div className="flex flex-col sm:flex-row gap-4 justify-center mt-8 mb-8">
        <NavLink 
          to="/ai-interfaces/" 
          className="group bg-gradient-to-r from-blue-600 to-purple-600 text-white px-8 py-4 rounded-xl font-semibold text-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 no-underline hover:no-underline focus:no-underline"
        >
          Get Started in 2 Minutes
          <span className="ml-2 group-hover:translate-x-1 inline-block transition-transform">→</span>
        </NavLink>
        <NavLink 
          to="/examples/" 
          className="border-2 border-gray-300 text-gray-700 px-8 py-4 rounded-xl font-semibold text-lg hover:border-blue-500 hover:text-blue-600 transition-all duration-300 no-underline hover:no-underline focus:no-underline"
        >
          See Examples
        </NavLink>
      </div>

      {/* AI Instructions Warning */}
      <div className="mb-16 bg-gradient-to-r from-red-100 to-orange-100 border-l-4 border-red-500 rounded-xl p-6 shadow-lg">
          <div className="flex items-start gap-4">
            <div className="bg-red-100 rounded-full p-3 flex-shrink-0">
              <svg className="w-6 h-6 text-red-600" fill="currentColor" viewBox="0 0 20 20">
                <path fillRule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clipRule="evenodd" />
              </svg>
            </div>
            <div className="flex-1">
              <H3 id="important-ai-instructions" className="text-red-800 text-xl font-bold mb-3">
                ⚠️ Essential: AI Instructions Required
              </H3>
              <p className="text-red-800 mb-4">
                Your AI needs specific instructions to use the MCP server effectively. We've created ready-to-use 
                instruction files for GitHub Copilot, Claude, and Cursor.
              </p>
              <div className="flex items-center gap-4">
                <a 
                  href="https://github.com/taurgis/sfcc-dev-mcp/tree/main/ai-instructions" 
                  className="inline-flex items-center gap-2 bg-red-600 text-white px-4 py-2 rounded-lg font-medium hover:bg-red-700 transition-colors no-underline hover:no-underline focus:no-underline" 
                  target="_blank" 
                  rel="noopener noreferrer"
                >
                  <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M3 4a1 1 0 011-1h4a1 1 0 010 2H6.414l2.293 2.293a1 1 0 01-1.414 1.414L5 6.414V8a1 1 0 01-2 0V4zm9 1a1 1 0 010-2h4a1 1 0 011 1v4a1 1 0 01-2 0V6.414l-2.293 2.293a1 1 0 11-1.414-1.414L13.586 5H12zm-9 7a1 1 0 012 0v1.586l2.293-2.293a1 1 0 111.414 1.414L6.414 15H8a1 1 0 010 2H4a1 1 0 01-1-1v-4zm13-1a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 010-2h1.586l-2.293-2.293a1 1 0 111.414-1.414L15 13.586V12a1 1 0 011-1z" clipRule="evenodd" />
                  </svg>
                  Download AI Instructions
                </a>
                <NavLink 
                  to="/ai-interfaces/" 
                  className="inline-flex no-underline items-center gap-1 text-red-600 hover:text-red-800 font-medium transition-colors"
                >
                  📖 Setup Guide
                  <svg className="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z" clipRule="evenodd" />
                  </svg>
                </NavLink>
              </div>
            </div>
          </div>
      </div>

      {/* Value Proposition Section */}
      <div className="mb-16">
        <div className="text-center mb-12">
          <H2 id="why-use-this" className="text-4xl font-bold mb-6">
            <span className="bg-gradient-to-r from-gray-900 via-blue-900 to-purple-900 bg-clip-text text-transparent">
              Stop Fighting Documentation
            </span>
          </H2>
          <p className="text-xl text-gray-600 max-w-4xl mx-auto leading-relaxed">
            Transform your SFCC development workflow from manual documentation hunting to AI-powered assistance
          </p>
        </div>
        
        {/* Before/After Comparison */}
        <div className="mb-12 bg-gradient-to-r from-blue-50/50 via-purple-50/50 to-pink-50/50 rounded-3xl p-8 shadow-2xl border border-gray-200">
            
            {/* Timeline Header */}
            <div className="text-center mb-8">
              <div className="inline-flex items-center gap-4 bg-gradient-to-r from-gray-800 to-gray-900 text-white px-6 py-3 rounded-full text-sm font-medium">
                <span className="bg-white/20 rounded-full p-1">
                  <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clipRule="evenodd" />
                  </svg>
                </span>
                Development Timeline Comparison
              </div>
            </div>

            <div className="grid lg:grid-cols-2 gap-8 relative">
              {/* Connecting Line */}
              <div className="hidden lg:block absolute left-1/2 top-16 bottom-16 w-px bg-gradient-to-b from-red-300 via-yellow-300 to-green-300 transform -translate-x-1/2"></div>
              
              {/* Before Timeline */}
              <div className="relative">
                <div className="flex items-center gap-3 mb-6">
                  <div className="bg-gradient-to-r from-red-500 to-orange-500 rounded-xl p-3 shadow-lg">
                    <svg className="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 20 20">
                      <path fillRule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clipRule="evenodd" />
                    </svg>
                  </div>
                  <div>
                    <h3 className="text-2xl font-bold text-gray-900">Traditional</h3>
                    <p className="text-red-600 font-medium">Frustrating & Time-Consuming</p>
                  </div>
                </div>
                
                {/* Timeline Steps */}
                <div className="space-y-4">
                  <div className="flex gap-4 p-4 bg-red-50 border border-red-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-red-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-red-600 font-bold text-sm">1</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Documentation Hunt</h4>
                      <p className="text-sm text-gray-600">Open 10+ browser tabs searching for method signatures</p>
                      <div className="text-xs text-red-600 font-medium mt-1">⏱️ 15-30 minutes</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-red-50 border border-red-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-red-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-red-600 font-bold text-sm">2</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Copy-Paste Engineering</h4>
                      <p className="text-sm text-gray-600">Hunt for code examples across forums and docs</p>
                      <div className="text-xs text-red-600 font-medium mt-1">⏱️ 20-45 minutes</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-red-50 border border-red-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-red-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-red-600 font-bold text-sm">3</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Debug Blindly</h4>
                      <p className="text-sm text-gray-600">Manual log analysis without proper context</p>
                      <div className="text-xs text-red-600 font-medium mt-1">⏱️ 1-3 hours</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-red-50 border border-red-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-red-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-red-600 font-bold text-sm">4</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Feature Scaffolding</h4>
                      <p className="text-sm text-gray-600">Manually create cartridge structures and boilerplate code for new cartridges, new SCAPI endpoints, ...</p>
                      <div className="text-xs text-red-600 font-medium mt-1">⏱️ 30-60 minutes</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-red-50 border border-red-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-red-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-red-600 font-bold text-sm">5</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Context Switching</h4>
                      <p className="text-sm text-gray-600">Jump between IDE, browser, logs, and documentation</p>
                      <div className="text-xs text-red-600 font-medium mt-1">⏱️ Constant overhead</div>
                    </div>
                  </div>
                </div>
                
                <div className="mt-6 p-4 bg-red-100 border border-red-300 rounded-xl">
                  <div className="flex items-center gap-2 text-red-800">
                    <svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
                      <path fillRule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clipRule="evenodd" />
                    </svg>
                    <span className="font-bold">Total Time Lost: 2-4 hours daily</span>
                  </div>
                </div>
              </div>

              {/* After Timeline */}
              <div className="relative">
                <div className="flex items-center gap-3 mb-6">
                  <div className="bg-gradient-to-r from-green-500 to-emerald-500 rounded-xl p-3 shadow-lg">
                    <svg className="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 20 20">
                      <path fillRule="evenodd" d="M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 01.947 2.287c-.836 1.372.734 2.942 2.106 2.106a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z" clipRule="evenodd" />
                    </svg>
                  </div>
                  <div>
                    <h3 className="text-2xl font-bold text-gray-900">AI-Enhanced</h3>
                    <p className="text-green-600 font-medium">Efficient & Intelligent</p>
                  </div>
                </div>
                
                {/* Timeline Steps */}
                <div className="space-y-4">
                  <div className="flex gap-4 p-4 bg-green-50 border border-green-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-green-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-green-600 font-bold text-sm">1</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Ask AI Directly</h4>
                      <p className="text-sm text-gray-600">"Show me Product pricing methods" → instant comprehensive answer</p>
                      <div className="text-xs text-green-600 font-medium mt-1">⏱️ 30 seconds</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-green-50 border border-green-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-green-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-green-600 font-bold text-sm">2</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Get Complete Examples</h4>
                      <p className="text-sm text-gray-600">AI generates proper SFCC patterns with best practices</p>
                      <div className="text-xs text-green-600 font-medium mt-1">⏱️ 1-2 minutes</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-green-50 border border-green-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-green-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-green-600 font-bold text-sm">3</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Smart Debugging</h4>
                      <p className="text-sm text-gray-600">"Find errors from last 24h" → AI analyzes and filters logs</p>
                      <div className="text-xs text-green-600 font-medium mt-1">⏱️ 2-5 minutes</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-green-50 border border-green-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-green-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-green-600 font-bold text-sm">4</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Instant Scaffolding</h4>
                      <p className="text-sm text-gray-600">"Create custom SCAPI endpoint for wishlist" → complete cartridge with routes</p>
                      <div className="text-xs text-green-600 font-medium mt-1">⏱️ 1-2 minutes</div>
                    </div>
                  </div>
                  
                  <div className="flex gap-4 p-4 bg-green-50 border border-green-200 rounded-xl transition-all hover:shadow-md">
                    <div className="bg-green-100 rounded-full p-2 mt-1 flex-shrink-0">
                      <span className="text-green-600 font-bold text-sm">5</span>
                    </div>
                    <div>
                      <h4 className="font-semibold text-gray-900 mb-1">Stay in Flow</h4>
                      <p className="text-sm text-gray-600">All SFCC knowledge accessible within your editor</p>
                      <div className="text-xs text-green-600 font-medium mt-1">⏱️ Zero context switching</div>
                    </div>
                  </div>
                </div>
                
                <div className="mt-6 p-4 bg-green-100 border border-green-300 rounded-xl">
                  <div className="flex items-center gap-2 text-green-800">
                    <svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
                      <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                    </svg>
                    <span className="font-bold">Total Time Saved: 2-3 hours daily</span>
                  </div>
                </div>
              </div>
            </div>

            {/* Bottom CTA */}
            <div className="mt-10 text-center">
              <div className="inline-flex items-center gap-4 bg-gradient-to-r from-blue-600 via-purple-600 to-pink-600 text-white px-8 py-4 rounded-2xl shadow-lg">
                <svg className="w-6 h-6" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M11.3 1.046A1 1 0 0112 2v5h4a1 1 0 01.82 1.573l-7 10A1 1 0 018 18v-5H4a1 1 0 01-.82-1.573l7-10a1 1 0 011.12-.38z" clipRule="evenodd" />
                </svg>
                <div className="text-left">
                  <div className="font-bold text-lg">Ready to 10x your SFCC productivity?</div>
                  <div className="text-blue-100 text-sm">Set up in under 2 minutes • No SFCC credentials required to start</div>
                </div>
              </div>
            </div>
        </div>
      </div>

      {/* What You Get */}
      <div className="mb-16">
        <div className="text-center mb-10">
          <H2 id="what-you-get" className="text-3xl font-bold mb-4">🎯 What You Get</H2>
          <p className="text-lg text-gray-600 max-w-3xl mx-auto">
            Two modes to match your needs: start instantly with documentation-only mode, 
            then upgrade to full mode for live data analysis
          </p>
        </div>
        
        <div className="grid lg:grid-cols-2 gap-8">
          {/* Documentation Mode */}
          <div className="bg-gradient-to-br from-green-50 to-emerald-50 rounded-2xl p-8 border border-green-200">
            <div className="flex items-center gap-3 mb-6">
              <div className="bg-green-500 rounded-full p-3">
                <svg className="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
              </div>
              <div>
                <H3 id="documentation-mode" className="text-2xl font-bold text-green-800">Documentation Mode</H3>
                <p className="text-green-600 font-medium" style={{
                  marginTop: '-12px'
                }}>Zero setup required</p>
              </div>
            </div>
            
            <ul className="space-y-3">
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-green-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">Complete SFCC API documentation</span>
              </li>
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-green-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">SFRA guides and best practices</span>
              </li>
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-green-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">Cartridge generation tools</span>
              </li>
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-green-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">Security and performance guidance</span>
              </li>
            </ul>
          </div>

          {/* Full Mode */}
          <div className="bg-gradient-to-br from-blue-50 to-purple-50 rounded-2xl p-8 border border-blue-200">
            <div className="flex items-center gap-3 mb-6">
              <div className="bg-gradient-to-r from-blue-500 to-purple-500 rounded-full p-3">
                <svg className="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 01.947 2.287c-.836 1.372.734 2.942 2.106 2.106a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z" clipRule="evenodd" />
                </svg>
              </div>
              <div>
                <H3 id="full-mode" className="text-2xl font-bold text-blue-800 mb-">Full Mode</H3>
                <p className="text-blue-600 font-medium" style={{
                  marginTop: '-12px'
                }}>Everything + live data</p>
              </div>
            </div>
            
            <ul className="space-y-3">
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-blue-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">All documentation features</span>
              </li>
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-blue-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">Real-time log analysis</span>
              </li>
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-blue-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">System & custom object exploration</span>
              </li>
              <li className="flex items-center gap-3">
                <svg className="w-5 h-5 text-blue-500 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                <span className="text-gray-700">Code version management</span>
              </li>
            </ul>
            
            <div className="mt-6 p-4 bg-blue-100 rounded-lg">
              <p className="text-blue-800 text-sm font-medium">🔐 Requires SFCC credentials</p>
            </div>
          </div>
        </div>
      </div>

      {/* Key Features Overview */}
      <div className="mb-16">
        <div className="text-center mb-8">
          <H2 id="key-features" className="text-3xl font-bold mb-4">✨ Everything You Need</H2>
          <p className="text-lg text-gray-600 max-w-3xl mx-auto">
            36+ specialized tools for comprehensive SFCC development support
          </p>
        </div>
        
        <div className="grid grid-cols-2 md:grid-cols-5 gap-6">
          <div className="text-center">
            <div className="bg-blue-100 rounded-full p-4 w-16 h-16 mx-auto mb-3">
              <svg className="w-8 h-8 text-blue-600" fill="currentColor" viewBox="0 0 20 20">
                <path d="M9 4.804A7.968 7.968 0 005.5 4c-1.255 0-2.443.29-3.5.804v10A7.969 7.969 0 005.5 14c1.669 0 3.218.51 4.5 1.385A7.962 7.962 0 0114.5 14c1.255 0 2.443.29 3.5.804v-10A7.968 7.968 0 0014.5 4c-1.255 0-2.443.29-3.5.804V12a1 1 0 11-2 0V4.804z" />
              </svg>
            </div>
            <h3 className="font-semibold text-gray-900">Documentation</h3>
            <p className="text-sm text-gray-600">Complete API docs</p>
          </div>
          
          <div className="text-center">
            <div className="bg-green-100 rounded-full p-4 w-16 h-16 mx-auto mb-3">
              <svg className="w-8 h-8 text-green-600" fill="currentColor" viewBox="0 0 20 20">
                <path fillRule="evenodd" d="M3 3a1 1 0 000 2v8a2 2 0 002 2h2.586l-1.293 1.293a1 1 0 101.414 1.414L10 15.414l2.293 2.293a1 1 0 001.414-1.414L12.414 15H15a2 2 0 002-2V5a1 1 0 100-2H3zm11.707 4.707a1 1 0 00-1.414-1.414L10 9.586 8.707 8.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
            </div>
            <h3 className="font-semibold text-gray-900">Log Analysis</h3>
            <p className="text-sm text-gray-600">Real-time monitoring</p>
          </div>
          
          <div className="text-center">
            <div className="bg-purple-100 rounded-full p-4 w-16 h-16 mx-auto mb-3">
              <svg className="w-8 h-8 text-purple-600" fill="currentColor" viewBox="0 0 20 20">
                <path fillRule="evenodd" d="M4 4a2 2 0 00-2 2v8a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2H4zm2 6a2 2 0 104 0 2 2 0 00-4 0zm6 0a2 2 0 104 0 2 2 0 00-4 0z" clipRule="evenodd" />
                </svg>
            </div>
            <h3 className="font-semibold text-gray-900">System Objects</h3>
            <p className="text-sm text-gray-600">Live exploration</p>
          </div>
          
          <div className="text-center">
            <div className="bg-orange-100 rounded-full p-4 w-16 h-16 mx-auto mb-3">
              <svg className="w-8 h-8 text-orange-600" fill="currentColor" viewBox="0 0 20 20">
                <path d="M3 4a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1V4zm0 4a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1V8zm8 0a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1h-6a1 1 0 01-1-1V8z" />
              </svg>
            </div>
            <h3 className="font-semibold text-gray-900">Cartridges</h3>
            <p className="text-sm text-gray-600">Auto generation</p>
          </div>
          <div className="text-center">
            <div className="bg-yellow-100 rounded-full p-4 w-16 h-16 mx-auto mb-3">
              <svg className="w-8 h-8 text-yellow-600" fill="currentColor" viewBox="0 0 20 20">
                <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3-9a1 1 0 00-1-1H8a1 1 0 100 2h1v3a1 1 0 102 0v-3h1a1 1 0 001-1z" clipRule="evenodd" />
              </svg>
            </div>
            <h3 className="font-semibold text-gray-900">Job Logs</h3>
            <p className="text-sm text-gray-600">Execution insights</p>
          </div>
        </div>
      </div>

      {/* Quick Test Drive Section */}
      <div className="mb-16 bg-gradient-to-r from-emerald-50 via-teal-50 to-cyan-50 rounded-2xl p-8 shadow-xl border border-emerald-200">
            <div className="text-center mb-8">
              <div className="inline-flex items-center gap-2 bg-emerald-100 text-emerald-800 px-4 py-2 rounded-full text-sm font-medium mb-4">
                <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
                  <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                </svg>
                Test Drive
              </div>
              <H2 id="quick-test-drive" className="text-3xl font-bold mb-4">🧪 Try It Right Now</H2>
              <p className="text-lg text-gray-600 max-w-3xl mx-auto">
                After setup, ask your AI assistant this question to see the MCP server in action. No SFCC credentials needed.
              </p>
            </div>
            
            <div className="space-y-8">
              <div>
                <h3 className="text-lg font-semibold text-gray-900 mb-4 text-center">Ask Your AI This</h3>
                <div className="bg-gradient-to-r from-blue-50 to-indigo-50 border border-blue-200 rounded-xl p-6">
                  <div className="flex items-start gap-4">
                    <div className="flex-1">
                      <p className="font-medium text-blue-900 mb-3">Copy this prompt:</p>
                      <div className="bg-white rounded-lg p-4 border border-blue-200">
                        <p className="text-base font-mono text-gray-800 leading-relaxed">
                          "Explain how to get the sale price for a product variant in SFCC. Keep it short and a quick example"
                        </p>
                      </div>
                      <div className="mt-3 flex justify-center gap-2 flex-wrap">
                        <button 
                          onClick={() => navigator.clipboard.writeText('Explain how to get the sale price for a product variant in SFCC. Keep it short and a quick example')}
                          className="inline-flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition font-medium text-sm"
                        >
                          <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
                            <path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
                            <path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
                          </svg>
                          Copy Prompt
                        </button>
                        <button 
                          onClick={() => setIsWithoutMcpModalOpen(true)}
                          className="inline-flex items-center gap-2 bg-red-600 hover:bg-red-700 text-white px-4 py-2 rounded-lg transition font-medium text-sm"
                        >
                          <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
                            <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clipRule="evenodd" />
                          </svg>
                          View Without MCP
                        </button>
                        <button 
                          onClick={() => setIsWithMcpModalOpen(true)}
                          className="inline-flex items-center gap-2 bg-green-600 hover:bg-green-700 text-white px-4 py-2 rounded-lg transition font-medium text-sm"
                        >
                          <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
                            <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                          </svg>
                          View With MCP
                        </button>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
              
              <div>
                <h3 className="text-lg font-semibold text-gray-900 mb-4 text-center">What You Should See</h3>
                <div className="grid md:grid-cols-3 gap-4">
                  <div className="bg-green-50 border border-green-200 rounded-lg p-4 flex flex-col h-full">
                    <div className="grid grid-cols-[auto_1fr] gap-2 items-center mb-3">
                      <div className="bg-green-100 rounded-full p-1">
                        <svg className="w-4 h-4 text-green-600" fill="currentColor" viewBox="0 0 20 20">
                          <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                        </svg>
                      </div>
                      <p className="font-medium text-green-800">SFCC Methods</p>
                    </div>
                    <p className="text-sm text-green-700 flex-grow">Lists actual methods like getPriceModel(), getVariationModel()</p>
                  </div>
                  
                  <div className="bg-green-50 border border-green-200 rounded-lg p-4 flex flex-col h-full">
                    <div className="grid grid-cols-[auto_1fr] gap-2 items-center mb-3">
                      <div className="bg-green-100 rounded-full p-1">
                        <svg className="w-4 h-4 text-green-600" fill="currentColor" viewBox="0 0 20 20">
                          <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                        </svg>
                      </div>
                      <p className="font-medium text-green-800">Code Examples</p>
                    </div>
                    <p className="text-sm text-green-700 flex-grow">Shows real SFCC code patterns with proper syntax</p>
                  </div>
                  
                  <div className="bg-green-50 border border-green-200 rounded-lg p-4 flex flex-col h-full">
                    <div className="grid grid-cols-[auto_1fr] gap-2 items-center mb-3">
                      <div className="bg-green-100 rounded-full p-1">
                        <svg className="w-4 h-4 text-green-600" fill="currentColor" viewBox="0 0 20 20">
                          <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                        </svg>
                      </div>
                      <p className="font-medium text-green-800">Documentation</p>
                    </div>
                    <p className="text-sm text-green-700 flex-grow">References accurate SFCC API information</p>
                  </div>
                </div>
              </div>
            </div>            <div className="mt-8 p-4 bg-yellow-50 border border-yellow-200 rounded-lg">
              <div className="flex items-start gap-3">
                <div className="bg-yellow-100 rounded-full p-1 mt-0.5">
                  <svg className="w-4 h-4 text-yellow-600" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clipRule="evenodd" />
                  </svg>
                </div>
                <div className="flex-1">
                  <p className="font-medium text-yellow-800 mb-1">Without MCP Server</p>
                  <p className="text-sm text-yellow-700">
                    Your AI would give generic responses or outdated information. With MCP, it accesses live SFCC documentation and provides accurate, specific answers.
                  </p>
                </div>
              </div>
            </div>
            
            <div className="mt-8 text-center">
              <p className="text-gray-600 mb-4">✅ Getting SFCC-specific answers? Your setup is working perfectly!</p>
              <div className="flex flex-col sm:flex-row gap-3 justify-center">
                <NavLink to="/examples/" className="inline-flex items-center justify-center px-6 py-3 rounded-full text-sm font-semibold bg-emerald-600 text-white shadow hover:bg-emerald-700 transition group no-underline hover:no-underline focus:no-underline">
                  Try More Examples
                  <span className="ml-2 transition group-hover:translate-x-0.5">→</span>
                </NavLink>
                <NavLink to="/configuration/" className="inline-flex items-center justify-center px-6 py-3 rounded-full text-sm font-semibold bg-white text-gray-800 border border-gray-300 hover:border-gray-400 hover:bg-gray-50 transition no-underline hover:no-underline focus:no-underline">
                  Add Full Mode
                </NavLink>
              </div>
            </div>
      </div>

      {/* Final CTA */}
      <div className="text-center">
        <div className="bg-gradient-to-r from-gray-50 to-blue-50 rounded-2xl p-8 border border-gray-200 mb-8">
          <p className="text-lg text-gray-700 italic leading-relaxed max-w-4xl mx-auto mb-6">
            "Empower your AI assistant with comprehensive SFCC knowledge for faster, more accurate development assistance."
          </p>
          <div className="flex flex-col sm:flex-row gap-4 justify-center">
            <NavLink 
              to="/ai-interfaces/" 
              className="group bg-gradient-to-r from-blue-600 to-purple-600 text-white px-8 py-4 rounded-xl font-semibold text-lg shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 no-underline hover:no-underline focus:no-underline"
            >
              Get Started Now
              <span className="ml-2 group-hover:translate-x-1 inline-block transition-transform">→</span>
            </NavLink>
            <NavLink 
              to="/features/" 
              className="border-2 border-gray-300 text-gray-700 px-8 py-4 rounded-xl font-semibold text-lg hover:border-blue-500 hover:text-blue-600 transition-all duration-300 no-underline hover:no-underline focus:no-underline"
            >
              Explore Features
            </NavLink>
          </div>
        </div>
      </div>

      {/* Modal for WITHOUT MCP screenshot */}
      {isWithoutMcpModalOpen && (
        <div 
          className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50"
          onClick={() => setIsWithoutMcpModalOpen(false)}
        >
          <div 
            className="bg-white rounded-2xl shadow-2xl max-w-5xl max-h-[90vh] overflow-auto"
            onClick={(e) => e.stopPropagation()}
          >
            <div className="sticky top-0 bg-white border-b border-gray-200 px-6 py-4 rounded-t-2xl">
              <div className="flex items-center justify-between">
                <h3 className="text-xl font-semibold text-gray-900 flex items-center gap-2">
                  <svg className="w-5 h-5 text-red-600" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clipRule="evenodd" />
                  </svg>
                  AI Response Without MCP Server
                </h3>
                <button
                  onClick={() => setIsWithoutMcpModalOpen(false)}
                  className="text-gray-400 hover:text-gray-600 transition-colors"
                  aria-label="Close modal"
                >
                  <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                    <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
                  </svg>
                </button>
              </div>
            </div>
            <div className="p-6">
              <div className="mb-6 relative">
                <div className="relative overflow-hidden rounded-lg shadow-lg border border-gray-200">
                  <img
                    ref={imageRef1}
                    src="/explain-product-pricing-methods-no-mcp.png"
                    alt="AI response without MCP server - generic and potentially inaccurate information"
                    className="w-full h-auto cursor-crosshair"
                    onMouseMove={handleMouseMove1}
                    onMouseEnter={handleMouseEnter1}
                    onMouseLeave={handleMouseLeave1}
                  />
                  
                  {/* Zoom circle */}
                  {isZooming1 && (
                    <div
                      className="absolute pointer-events-none border-4 border-white shadow-lg rounded-full overflow-hidden"
                      style={{
                        width: '300px',
                        height: '300px',
                        left: `${zoomPosition1.x - 150}px`,
                        top: `${zoomPosition1.y - 150}px`,
                        backgroundImage: `url('/explain-product-pricing-methods-no-mcp.png')`,
                        backgroundSize: `${imageRef1.current ? imageRef1.current.offsetWidth * 2 : 0}px ${imageRef1.current ? imageRef1.current.offsetHeight * 2 : 0}px`,
                        backgroundPosition: `-${zoomPosition1.x * 2 - 150}px -${zoomPosition1.y * 2 - 150}px`,
                        backgroundRepeat: 'no-repeat',
                        transform: 'translate(0, 0)',
                        zIndex: 1000
                      }}
                    >
                      <div className="absolute inset-0 ring-2 ring-red-500 ring-opacity-50 rounded-full"></div>
                    </div>
                  )}
                </div>
              </div>
              
              <div className="bg-red-50 border border-red-200 rounded-xl p-6">
                <h4 className="text-lg font-semibold text-red-900 mb-4 flex items-center gap-2">
                  <svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clipRule="evenodd" />
                  </svg>
                  Problems with This Response
                </h4>
                <div className="space-y-4">
                  <div className="p-4 bg-white border border-red-300 rounded-lg">
                    <p className="font-semibold text-red-800 mb-2">🎯 Wrong API Usage:</p>
                    <p className="text-sm text-red-700">
                      Suggests non-existent methods like <code className="bg-red-200 px-1 rounded font-mono">product.getVariant('variant-id')</code> 
                      and shows client-side fetch to non-standard endpoints. These approaches don't exist in SFCC 
                      and would cause runtime errors in production.
                    </p>
                  </div>
                  <div className="p-4 bg-white border border-red-300 rounded-lg">
                    <p className="font-semibold text-red-800 mb-2">📚 Outdated Patterns:</p>
                    <p className="text-sm text-red-700">
                      Shows generic client-side fetch patterns to non-standard endpoints like 
                      <code className="bg-red-200 px-1 rounded font-mono">/on/demandware.store/Sites-SiteGenesis-Site/</code> 
                      instead of current SFRA controller patterns. This leads developers down the wrong implementation path.
                    </p>
                  </div>
                  <div className="p-4 bg-white border border-red-300 rounded-lg">
                    <p className="font-semibold text-red-800 mb-2">🤔 Generic Assumptions:</p>
                    <p className="text-sm text-red-700">
                      Makes assumptions about SFCC architecture without understanding the actual API structure. 
                      Provides general e-commerce patterns that don't align with SFCC's specific implementation.
                    </p>
                  </div>
                  <div className="grid md:grid-cols-2 gap-4">
                    <div>
                      <h5 className="font-semibold text-red-800 mb-2">Other Issues:</h5>
                      <ul className="text-sm text-red-700 space-y-1">
                        <li>Non-existent API methods suggested</li>
                        <li>Generic client-side fetch patterns</li>
                        <li>Broken endpoint examples</li>
                        <li>Generic assumptions about SFCC</li>
                      </ul>
                    </div>
                    <div>
                      <h5 className="font-semibold text-red-800 mb-2">Developer Impact:</h5>
                      <ul className="text-sm text-red-700 space-y-1">
                        <li>Runtime errors from wrong API calls</li>
                        <li>Time wasted on deprecated patterns</li>
                        <li>Following incorrect implementation paths</li>
                        <li>Loss of confidence in AI guidance</li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      )}

      {/* Modal for WITH MCP screenshot */}
      {isWithMcpModalOpen && (
        <div 
          className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50"
          onClick={() => setIsWithMcpModalOpen(false)}
        >
          <div 
            className="bg-white rounded-2xl shadow-2xl max-w-5xl max-h-[90vh] overflow-auto"
            onClick={(e) => e.stopPropagation()}
          >
            <div className="sticky top-0 bg-white border-b border-gray-200 px-6 py-4 rounded-t-2xl">
              <div className="flex items-center justify-between">
                <h3 className="text-xl font-semibold text-gray-900 flex items-center gap-2">
                  <svg className="w-5 h-5 text-green-600" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                  </svg>
                  AI Response With MCP Server
                </h3>
                <button
                  onClick={() => setIsWithMcpModalOpen(false)}
                  className="text-gray-400 hover:text-gray-600 transition-colors"
                  aria-label="Close modal"
                >
                  <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                    <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
                  </svg>
                </button>
              </div>
            </div>
            <div className="p-6">
              <div className="mb-6 relative">
                <div className="relative overflow-hidden rounded-lg shadow-lg border border-gray-200">
                  <img
                    ref={imageRef2}
                    src="/explain-product-pricing-methods.png"
                    alt="AI response with MCP server - accurate SFCC-specific information and code examples"
                    className="w-full h-auto cursor-crosshair"
                    onMouseMove={handleMouseMove2}
                    onMouseEnter={handleMouseEnter2}
                    onMouseLeave={handleMouseLeave2}
                  />
                  
                  {/* Zoom circle */}
                  {isZooming2 && (
                    <div
                      className="absolute pointer-events-none border-4 border-white shadow-lg rounded-full overflow-hidden"
                      style={{
                        width: '300px',
                        height: '300px',
                        left: `${zoomPosition2.x - 150}px`,
                        top: `${zoomPosition2.y - 150}px`,
                        backgroundImage: `url('/explain-product-pricing-methods.png')`,
                        backgroundSize: `${imageRef2.current ? imageRef2.current.offsetWidth * 2 : 0}px ${imageRef2.current ? imageRef2.current.offsetHeight * 2 : 0}px`,
                        backgroundPosition: `-${zoomPosition2.x * 2 - 150}px -${zoomPosition2.y * 2 - 150}px`,
                        backgroundRepeat: 'no-repeat',
                        transform: 'translate(0, 0)',
                        zIndex: 1000
                      }}
                    >
                      <div className="absolute inset-0 ring-2 ring-green-500 ring-opacity-50 rounded-full"></div>
                    </div>
                  )}
                </div>
              </div>
              
              <div className="bg-green-50 border border-green-200 rounded-xl p-6">
                <h4 className="text-lg font-semibold text-green-900 mb-4 flex items-center gap-2">
                  <svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
                    <path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
                  </svg>
                  Why This Response is Accurate
                </h4>
                <div className="space-y-4">
                  <div className="p-4 bg-white border border-green-300 rounded-lg">
                    <p className="font-semibold text-green-800 mb-2">✅ Accurate SFCC Implementation:</p>
                    <p className="text-sm text-green-700">
                      The AI correctly uses <code className="bg-green-200 px-1 rounded font-mono">ProductMgr.getProduct()</code> 
                      and <code className="bg-green-200 px-1 rounded font-mono">getPriceModel().getPrice()</code> with 
                      proper syntax. It also mentions the correct <code className="bg-green-200 px-1 rounded font-mono">Money</code> 
                      object return type and <code className="bg-green-200 px-1 rounded font-mono">toFormattedString()</code> method.
                    </p>
                  </div>
                  <div className="p-4 bg-white border border-green-300 rounded-lg">
                    <p className="font-semibold text-green-800 mb-2">🔍 Comprehensive Context:</p>
                    <p className="text-sm text-green-700">
                      Explains important details like <code className="bg-green-200 px-1 rounded font-mono">Money.NOT_AVAILABLE</code> 
                      handling, quantity-based pricing options, and <code className="bg-green-200 px-1 rounded font-mono">getPriceInfo()</code> 
                      for additional price book details. Shows understanding of SFCC pricing architecture.
                    </p>
                  </div>
                  <div className="p-4 bg-white border border-green-300 rounded-lg">
                    <p className="font-semibold text-green-800 mb-2">🎯 Real-World Ready:</p>
                    <p className="text-sm text-green-700">
                      Code examples are production-ready and follow current SFRA patterns. The AI shows 
                      MCP server integration by using actual SFCC documentation tools during the response.
                    </p>
                  </div>
                  <div className="grid md:grid-cols-2 gap-4">
                    <div>
                      <h5 className="font-semibold text-green-800 mb-2">Key Benefits:</h5>
                      <ul className="text-sm text-green-700 space-y-1">
                        <li>Syntactically correct SFCC code</li>
                        <li>Proper ProductPriceModel usage</li>
                        <li>Current SFRA best practices</li>
                        <li>Real-time documentation access</li>
                      </ul>
                    </div>
                    <div>
                      <h5 className="font-semibold text-green-800 mb-2">Developer Impact:</h5>
                      <ul className="text-sm text-green-700 space-y-1">
                        <li>Copy-paste ready code examples</li>
                        <li>Production-ready implementations</li>
                        <li>Comprehensive error handling info</li>
                        <li>Advanced API usage patterns</li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      )}
    </div>
  );
};

export default HomePage;
```

--------------------------------------------------------------------------------
/tests/mcp/yaml/get-sfcc-class-documentation.full-mode.test.mcp.yml:
--------------------------------------------------------------------------------

```yaml
# ==================================================================================
# SFCC MCP Server - get_sfcc_class_documentation Tool YAML Tests
# Comprehensive testing for SFCC class documentation retrieval functionality
# Tests both successful responses and error handling scenarios
# 
# Quick Test Commands:
# aegis "tests/mcp/yaml/get-sfcc-class-documentation.full-mode.test.mcp.yml" --config "aegis.config.with-dw.json" --verbose
# aegis "tests/mcp/yaml/get-sfcc-class-documentation.full-mode.test.mcp.yml" --config "aegis.config.with-dw.json" --debug --timing
# aegis query get_sfcc_class_documentation '{"className": "dw.catalog.Product"}' --config "aegis.config.with-dw.json"
# aegis query get_sfcc_class_documentation '{"className": "dw.order.Order"}' --config "aegis.config.with-dw.json"
# ==================================================================================
description: "SFCC MCP Server get_sfcc_class_documentation tool - comprehensive validation"

# ==================================================================================
# BASIC TOOL STRUCTURE VALIDATION
# ==================================================================================
tests:
  - it: "should list get_sfcc_class_documentation tool in available tools"
    request:
      jsonrpc: "2.0"
      id: "tool-available"
      method: "tools/list"
      params: {}
    expect:
      response:
        jsonrpc: "2.0"
        id: "tool-available"
        result:
          match:extractField: "tools.*.name"
          value: "match:arrayContains:get_sfcc_class_documentation"
      stderr: "toBeEmpty"

  - it: "should have get_sfcc_class_documentation in tools list with proper structure"
    request:
      jsonrpc: "2.0"
      id: "tool-metadata"
      method: "tools/list"
      params: {}
    expect:
      response:
        jsonrpc: "2.0"
        id: "tool-metadata"
        result:
          tools: "match:arrayContains:name:get_sfcc_class_documentation"
      stderr: "toBeEmpty"

  - it: "should have tool with meaningful description"
    request:
      jsonrpc: "2.0"
      id: "tool-description-quality"
      method: "tools/list"
      params: {}
    expect:
      response:
        jsonrpc: "2.0"
        id: "tool-description-quality"
        result:
          tools:
            match:arrayElements:
              match:partial:
                name: "match:type:string"
                description: "match:regex:.{20,}"  # At least 20 characters
      stderr: "toBeEmpty"

  - it: "should have proper inputSchema structure for get_sfcc_class_documentation"
    request:
      jsonrpc: "2.0"
      id: "tool-schema-structure"
      method: "tools/list"
      params: {}
    expect:
      response:
        jsonrpc: "2.0"
        id: "tool-schema-structure"
        result:
          tools:
            match:arrayElements:
              match:partial:
                name: "match:type:string"
                inputSchema:
                  type: "object"
                  properties: "match:type:object"
      stderr: "toBeEmpty"

# ==================================================================================
# SUCCESSFUL EXECUTION TESTS - CORE CLASSES
# ==================================================================================

  - it: "should execute with dw.catalog.Product class"
    request:
      jsonrpc: "2.0"
      id: "exec-product-basic"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-product-basic"
        result:
          content:
            - type: "text"
              text: "match:contains:## Package: dw.catalog"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return complete documentation for dw.catalog.Product"
    request:
      jsonrpc: "2.0"
      id: "exec-product-complete"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-product-complete"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Product"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include inheritance hierarchy in Product documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-product-inheritance"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-product-inheritance"
        result:
          content:
            - type: "text"
              text: "match:contains:## Inheritance Hierarchy"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include properties section in Product documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-product-properties"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-product-properties"
        result:
          content:
            - type: "text"
              text: "match:contains:## Properties"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include method summary in Product documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-product-methods"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-product-methods"
        result:
          content:
            - type: "text"
              text: "match:contains:## Method Summary"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include method details in Product documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-product-method-details"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-product-method-details"
        result:
          content:
            - type: "text"
              text: "match:contains:## Method Details"
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# CLASS NAME VARIATIONS TESTING
# ==================================================================================

  - it: "should work with fully qualified class names"
    request:
      jsonrpc: "2.0"
      id: "exec-fqn"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-fqn"
        result:
          content:
            - type: "text"
              text: "match:contains:dw.catalog.Product"
          isError: false
      stderr: "toBeEmpty"

  - it: "should work with dw.order.Order class"
    request:
      jsonrpc: "2.0"
      id: "exec-order-class"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Order"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-order-class"
        result:
          content:
            - type: "text"
              text: "match:contains:## Package: dw.order"
          isError: false
      stderr: "toBeEmpty"

  - it: "should work with dw.system.Site class"
    request:
      jsonrpc: "2.0"
      id: "exec-site-class"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Site"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-site-class"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Site"
          isError: false
      stderr: "toBeEmpty"

  - it: "should work with dw.customer.Customer class"
    request:
      jsonrpc: "2.0"
      id: "exec-customer-class"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.Customer"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-customer-class"
        result:
          content:
            - type: "text"
              text: "match:contains:dw.customer.Customer"
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# CORE SFCC CLASSES VALIDATION - TOP 15 MOST IMPORTANT CLASSES
# ==================================================================================

  - it: "should return documentation for dw.catalog.Catalog class"
    request:
      jsonrpc: "2.0"
      id: "core-catalog"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Catalog"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-catalog"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Catalog"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.Category class"
    request:
      jsonrpc: "2.0"
      id: "core-category"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Category"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-category"
        result:
          content:
            - type: "text"
              text: "match:contains:## Package: dw.catalog"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.Basket class"
    request:
      jsonrpc: "2.0"
      id: "core-basket"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Basket"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-basket"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Basket"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.ProductLineItem class"
    request:
      jsonrpc: "2.0"
      id: "core-lineitem"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.ProductLineItem"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-lineitem"
        result:
          content:
            - type: "text"
              text: "match:contains:ProductLineItem"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.customer.CustomerMgr class"
    request:
      jsonrpc: "2.0"
      id: "core-customermgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.CustomerMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-customermgr"
        result:
          content:
            - type: "text"
              text: "match:contains:CustomerMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.Session class"
    request:
      jsonrpc: "2.0"
      id: "core-session"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Session"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-session"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Session"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.Request class"
    request:
      jsonrpc: "2.0"
      id: "core-request"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Request"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-request"
        result:
          content:
            - type: "text"
              text: "match:contains:## Package: dw.system"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.Response class"
    request:
      jsonrpc: "2.0"
      id: "core-response"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Response"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-response"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Response"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.web.URLUtils class"
    request:
      jsonrpc: "2.0"
      id: "core-urlutils"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.web.URLUtils"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-urlutils"
        result:
          content:
            - type: "text"
              text: "match:contains:URLUtils"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.ProductMgr class"
    request:
      jsonrpc: "2.0"
      id: "core-productmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.ProductMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-productmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:ProductMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.OrderMgr class"
    request:
      jsonrpc: "2.0"
      id: "core-ordermgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.OrderMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-ordermgr"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class OrderMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.BasketMgr class"
    request:
      jsonrpc: "2.0"
      id: "core-basketmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.BasketMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-basketmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:BasketMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.ArrayList class"
    request:
      jsonrpc: "2.0"
      id: "core-arraylist"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.ArrayList"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-arraylist"
        result:
          content:
            - type: "text"
              text: "match:contains:ArrayList"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.HashMap class"
    request:
      jsonrpc: "2.0"
      id: "core-hashmap"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.HashMap"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-hashmap"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class HashMap"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.value.Money class"
    request:
      jsonrpc: "2.0"
      id: "core-money"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.value.Money"
    expect:
      response:
        jsonrpc: "2.0"
        id: "core-money"
        result:
          content:
            - type: "text"
              text: "match:contains:## Package: dw.value"
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# EXTENDED SFCC CLASSES VALIDATION - 30 ADDITIONAL IMPORTANT CLASSES
# ==================================================================================

  - it: "should return documentation for dw.content.ContentMgr class"
    request:
      jsonrpc: "2.0"
      id: "ext-contentmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.content.ContentMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-contentmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:ContentMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.content.Content class"
    request:
      jsonrpc: "2.0"
      id: "ext-content"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.content.Content"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-content"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Content"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.ProductSearchModel class"
    request:
      jsonrpc: "2.0"
      id: "ext-productsearch"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.ProductSearchModel"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-productsearch"
        result:
          content:
            - type: "text"
              text: "match:contains:ProductSearchModel"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.SearchModel class"
    request:
      jsonrpc: "2.0"
      id: "ext-searchmodel"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.SearchModel"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-searchmodel"
        result:
          content:
            - type: "text"
              text: "match:contains:SearchModel"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.PriceBook class"
    request:
      jsonrpc: "2.0"
      id: "ext-pricebook"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.PriceBook"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-pricebook"
        result:
          content:
            - type: "text"
              text: "match:contains:PriceBook"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.Variant class"
    request:
      jsonrpc: "2.0"
      id: "ext-variant"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Variant"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-variant"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Variant"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.PaymentInstrument class"
    request:
      jsonrpc: "2.0"
      id: "ext-paymentinstrument"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.PaymentInstrument"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-paymentinstrument"
        result:
          content:
            - type: "text"
              text: "match:contains:PaymentInstrument"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.Shipment class"
    request:
      jsonrpc: "2.0"
      id: "ext-shipment"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Shipment"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-shipment"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Shipment"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.ShippingMethod class"
    request:
      jsonrpc: "2.0"
      id: "ext-shippingmethod"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.ShippingMethod"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-shippingmethod"
        result:
          content:
            - type: "text"
              text: "match:contains:ShippingMethod"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.customer.CustomerGroup class"
    request:
      jsonrpc: "2.0"
      id: "ext-customergroup"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.CustomerGroup"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-customergroup"
        result:
          content:
            - type: "text"
              text: "match:contains:CustomerGroup"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.customer.Profile class"
    request:
      jsonrpc: "2.0"
      id: "ext-profile"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.Profile"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-profile"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Profile"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.Logger class"
    request:
      jsonrpc: "2.0"
      id: "ext-logger"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Logger"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-logger"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Logger"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.Transaction class"
    request:
      jsonrpc: "2.0"
      id: "ext-transaction"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Transaction"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-transaction"
        result:
          content:
            - type: "text"
              text: "match:contains:Transaction"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.web.Cookie class"
    request:
      jsonrpc: "2.0"
      id: "ext-cookie"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.web.Cookie"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-cookie"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Cookie"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.web.Resource class"
    request:
      jsonrpc: "2.0"
      id: "ext-resource"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.web.Resource"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-resource"
        result:
          content:
            - type: "text"
              text: "match:contains:Resource"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.web.Form class"
    request:
      jsonrpc: "2.0"
      id: "ext-form"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.web.Form"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-form"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Form"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.Collection class"
    request:
      jsonrpc: "2.0"
      id: "ext-collection"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.Collection"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-collection"
        result:
          content:
            - type: "text"
              text: "match:contains:Collection"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.Iterator class"
    request:
      jsonrpc: "2.0"
      id: "ext-iterator"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.Iterator"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-iterator"
        result:
          content:
            - type: "text"
              text: "match:contains:Iterator"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.Calendar class"
    request:
      jsonrpc: "2.0"
      id: "ext-calendar"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.Calendar"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-calendar"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Calendar"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.value.Quantity class"
    request:
      jsonrpc: "2.0"
      id: "ext-quantity"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.value.Quantity"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-quantity"
        result:
          content:
            - type: "text"
              text: "match:contains:Quantity"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.net.HTTPClient class"
    request:
      jsonrpc: "2.0"
      id: "ext-httpclient"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.net.HTTPClient"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-httpclient"
        result:
          content:
            - type: "text"
              text: "match:contains:HTTPClient"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.net.Mail class"
    request:
      jsonrpc: "2.0"
      id: "ext-mail"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.net.Mail"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-mail"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Mail"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.io.File class"
    request:
      jsonrpc: "2.0"
      id: "ext-file"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.io.File"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-file"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class File"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.io.Reader class"
    request:
      jsonrpc: "2.0"
      id: "ext-reader"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.io.Reader"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-reader"
        result:
          content:
            - type: "text"
              text: "match:contains:Reader"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.svc.ServiceRegistry class"
    request:
      jsonrpc: "2.0"
      id: "ext-serviceregistry"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.svc.ServiceRegistry"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-serviceregistry"
        result:
          content:
            - type: "text"
              text: "match:contains:ServiceRegistry"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.svc.HTTPService class"
    request:
      jsonrpc: "2.0"
      id: "ext-httpservice"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.svc.HTTPService"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-httpservice"
        result:
          content:
            - type: "text"
              text: "match:contains:HTTPService"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.campaign.Campaign class"
    request:
      jsonrpc: "2.0"
      id: "ext-campaign"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.campaign.Campaign"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-campaign"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Campaign"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.campaign.Promotion class"
    request:
      jsonrpc: "2.0"
      id: "ext-promotion"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.campaign.Promotion"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-promotion"
        result:
          content:
            - type: "text"
              text: "match:contains:Promotion"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.object.CustomObject class"
    request:
      jsonrpc: "2.0"
      id: "ext-customobject"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.object.CustomObject"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-customobject"
        result:
          content:
            - type: "text"
              text: "match:contains:CustomObject"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.object.CustomObjectMgr class"
    request:
      jsonrpc: "2.0"
      id: "ext-customobjectmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.object.CustomObjectMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "ext-customobjectmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:CustomObjectMgr"
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# ADVANCED SFCC CLASSES VALIDATION - 30 MORE SPECIALIZED CLASSES
# ==================================================================================

  - it: "should return documentation for dw.catalog.CatalogMgr class"
    request:
      jsonrpc: "2.0"
      id: "adv-catalogmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.CatalogMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-catalogmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:CatalogMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.ProductOption class"
    request:
      jsonrpc: "2.0"
      id: "adv-productoption"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.ProductOption"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-productoption"
        result:
          content:
            - type: "text"
              text: "match:contains:ProductOption"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.ProductOptionModel class"
    request:
      jsonrpc: "2.0"
      id: "adv-productoptionmodel"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.ProductOptionModel"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-productoptionmodel"
        result:
          content:
            - type: "text"
              text: "match:contains:ProductOptionModel"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.Recommendation class"
    request:
      jsonrpc: "2.0"
      id: "adv-recommendation"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Recommendation"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-recommendation"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Recommendation"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.catalog.ProductAttributeModel class"
    request:
      jsonrpc: "2.0"
      id: "adv-productattributemodel"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.ProductAttributeModel"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-productattributemodel"
        result:
          content:
            - type: "text"
              text: "match:contains:ProductAttributeModel"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.LineItem class"
    request:
      jsonrpc: "2.0"
      id: "adv-lineitem"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.LineItem"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-lineitem"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class LineItem"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.OrderAddress class"
    request:
      jsonrpc: "2.0"
      id: "adv-orderaddress"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.OrderAddress"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-orderaddress"
        result:
          content:
            - type: "text"
              text: "match:contains:OrderAddress"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.PaymentMethod class"
    request:
      jsonrpc: "2.0"
      id: "adv-paymentmethod"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.PaymentMethod"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-paymentmethod"
        result:
          content:
            - type: "text"
              text: "match:contains:PaymentMethod"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.PaymentMgr class"
    request:
      jsonrpc: "2.0"
      id: "adv-paymentmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.PaymentMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-paymentmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:PaymentMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.order.ShippingMgr class"
    request:
      jsonrpc: "2.0"
      id: "adv-shippingmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.ShippingMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-shippingmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:ShippingMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.customer.AddressBook class"
    request:
      jsonrpc: "2.0"
      id: "adv-addressbook"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.AddressBook"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-addressbook"
        result:
          content:
            - type: "text"
              text: "match:contains:AddressBook"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.customer.CustomerAddress class"
    request:
      jsonrpc: "2.0"
      id: "adv-customeraddress"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.CustomerAddress"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-customeraddress"
        result:
          content:
            - type: "text"
              text: "match:contains:CustomerAddress"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.customer.CustomerPaymentInstrument class"
    request:
      jsonrpc: "2.0"
      id: "adv-custpaymentinstrument"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.CustomerPaymentInstrument"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-custpaymentinstrument"
        result:
          content:
            - type: "text"
              text: "match:contains:CustomerPaymentInstrument"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.customer.Wallet class"
    request:
      jsonrpc: "2.0"
      id: "adv-wallet"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.Wallet"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-wallet"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Wallet"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.Pipeline class"
    request:
      jsonrpc: "2.0"
      id: "adv-pipeline"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Pipeline"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-pipeline"
        result:
          content:
            - type: "text"
              text: "match:contains:Pipeline"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.HookMgr class"
    request:
      jsonrpc: "2.0"
      id: "adv-hookmgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.HookMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-hookmgr"
        result:
          content:
            - type: "text"
              text: "match:contains:HookMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.CacheMgr class"
    request:
      jsonrpc: "2.0"
      id: "adv-cachemgr"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.CacheMgr"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-cachemgr"
        result:
          content:
            - type: "text"
              text: "match:contains:CacheMgr"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.web.Forms class"
    request:
      jsonrpc: "2.0"
      id: "adv-forms"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.web.Forms"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-forms"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Forms"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.web.PageMetaData class"
    request:
      jsonrpc: "2.0"
      id: "adv-pagemetadata"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.web.PageMetaData"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-pagemetadata"
        result:
          content:
            - type: "text"
              text: "match:contains:PageMetaData"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.web.PagingModel class"
    request:
      jsonrpc: "2.0"
      id: "adv-pagingmodel"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.web.PagingModel"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-pagingmodel"
        result:
          content:
            - type: "text"
              text: "match:contains:PagingModel"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.StringUtils class"
    request:
      jsonrpc: "2.0"
      id: "adv-stringutils"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.StringUtils"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-stringutils"
        result:
          content:
            - type: "text"
              text: "match:contains:StringUtils"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.Map class"
    request:
      jsonrpc: "2.0"
      id: "adv-map"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.Map"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-map"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Map"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.Locale class"
    request:
      jsonrpc: "2.0"
      id: "adv-locale"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.Locale"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-locale"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Locale"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.util.List class"
    request:
      jsonrpc: "2.0"
      id: "adv-list"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.util.List"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-list"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class List"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.value.EnumValue class"
    request:
      jsonrpc: "2.0"
      id: "adv-enumvalue"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.value.EnumValue"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-enumvalue"
        result:
          content:
            - type: "text"
              text: "match:contains:EnumValue"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.net.FTPClient class"
    request:
      jsonrpc: "2.0"
      id: "adv-ftpclient"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.net.FTPClient"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-ftpclient"
        result:
          content:
            - type: "text"
              text: "match:contains:FTPClient"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.net.SFTPClient class"
    request:
      jsonrpc: "2.0"
      id: "adv-sftpclient"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.net.SFTPClient"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-sftpclient"
        result:
          content:
            - type: "text"
              text: "match:contains:SFTPClient"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.io.CSVStreamWriter class"
    request:
      jsonrpc: "2.0"
      id: "adv-csvstreamwriter"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.io.CSVStreamWriter"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-csvstreamwriter"
        result:
          content:
            - type: "text"
              text: "match:contains:CSVStreamWriter"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.io.XMLStreamWriter class"
    request:
      jsonrpc: "2.0"
      id: "adv-xmlstreamwriter"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.io.XMLStreamWriter"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-xmlstreamwriter"
        result:
          content:
            - type: "text"
              text: "match:contains:XMLStreamWriter"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return documentation for dw.system.Status class"
    request:
      jsonrpc: "2.0"
      id: "adv-status"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.system.Status"
    expect:
      response:
        jsonrpc: "2.0"
        id: "adv-status"
        result:
          content:
            - type: "text"
              text: "match:contains:# Class Status"
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# DOCUMENTATION CONTENT VALIDATION
# ==================================================================================

  - it: "should include class description in Order documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-order-description"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Order"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-order-description"
        result:
          content:
            - type: "text"
              text: "match:contains:## Description"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include constants in Order documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-order-constants"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Order"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-order-constants"
        result:
          content:
            - type: "text"
              text: "match:contains:## Constants"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include constructor summary in Order documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-order-constructors"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Order"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-order-constructors"
        result:
          content:
            - type: "text"
              text: "match:contains:## Constructor Summary"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include method signatures in documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-method-signatures"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-method-signatures"
        result:
          content:
            - type: "text"
              text: "match:contains:**Signature:**"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include property types in documentation"
    request:
      jsonrpc: "2.0"
      id: "exec-property-types"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-property-types"
        result:
          content:
            - type: "text"
              text: "match:contains:**Type:**"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include return valid markdown format"
    request:
      jsonrpc: "2.0"
      id: "exec-markdown-format"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "exec-markdown-format"
        result:
          content:
            - type: "text"
              text: "match:regex:[\\s\\S]*#{1,6}[\\s\\S]*"  # Contains markdown headers
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# ERROR HANDLING TESTS
# ==================================================================================

  - it: "should handle invalid class names gracefully"
    request:
      jsonrpc: "2.0"
      id: "error-invalid-class"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "NonExistentClass"
    expect:
      response:
        jsonrpc: "2.0"
        id: "error-invalid-class"
        result:
          content:
            - type: "text"
              text: "match:contains:Error"
          isError: true
      stderr: "toBeEmpty"

  - it: "should handle invalid class with specific error message"
    request:
      jsonrpc: "2.0"
      id: "error-invalid-specific"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "InvalidClassName"
    expect:
      response:
        jsonrpc: "2.0"
        id: "error-invalid-specific"
        result:
          content:
            - type: "text"
              text: "match:contains:not found"
          isError: true
      stderr: "toBeEmpty"

  - it: "should handle empty class name"
    request:
      jsonrpc: "2.0"
      id: "error-empty-class"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: ""
    expect:
      response:
        jsonrpc: "2.0"
        id: "error-empty-class"
        result:
          content:
            - type: "text"
              text: "match:contains:non-empty string"
          isError: true
      stderr: "toBeEmpty"

  - it: "should handle missing className parameter with error response"
    request:
      jsonrpc: "2.0"
      id: "error-missing-param"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments: {}
    expect:
      response:
        jsonrpc: "2.0"
        id: "error-missing-param"
        result:
          content:
            - type: "text"
              text: "match:contains:non-empty string"
          isError: true
      stderr: "toBeEmpty"

  - it: "should handle null className gracefully"
    request:
      jsonrpc: "2.0"
      id: "error-null-class"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: null
    expect:
      response:
        jsonrpc: "2.0"
        id: "error-null-class"
        result:
          content:
            - type: "text"
              text: "match:contains:Error"
          isError: true
      stderr: "toBeEmpty"

  - it: "should handle numeric className gracefully"
    request:
      jsonrpc: "2.0"
      id: "error-numeric-class"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: 123
    expect:
      response:
        jsonrpc: "2.0"
        id: "error-numeric-class"
        result:
          content:
            - type: "text"
              text: "match:contains:Error"
          isError: true
      stderr: "toBeEmpty"

# ==================================================================================
# EDGE CASE TESTING
# ==================================================================================

  - it: "should handle whitespace-only className"
    request:
      jsonrpc: "2.0"
      id: "edge-whitespace"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "   "
    expect:
      response:
        jsonrpc: "2.0"
        id: "edge-whitespace"
        result:
          content:
            - type: "text"
              text: "match:contains:Error"
          isError: true
      stderr: "toBeEmpty"

  - it: "should handle class names with special characters"
    request:
      jsonrpc: "2.0"
      id: "edge-special-chars"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product@#$"
    expect:
      response:
        jsonrpc: "2.0"
        id: "edge-special-chars"
        result:
          content:
            - type: "text"
              text: "match:contains:Error"
          isError: true
      stderr: "toBeEmpty"

  - it: "should handle very long invalid class names"
    request:
      jsonrpc: "2.0"
      id: "edge-long-invalid"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.very.long.nonexistent.package.that.does.not.exist.anywhere.InvalidClass"
    expect:
      response:
        jsonrpc: "2.0"
        id: "edge-long-invalid"
        result:
          content:
            - type: "text"
              text: "match:contains:Error"
          isError: true
      stderr: "toBeEmpty"

# ==================================================================================
# COMPREHENSIVE CONTENT VALIDATION
# ==================================================================================

  - it: "should return substantial documentation content for Product class"
    request:
      jsonrpc: "2.0"
      id: "content-substantial"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "content-substantial"
        result:
          content:
            - type: "text"
              text: "match:regex:[\\s\\S]{5000,}"  # At least 5000 characters
          isError: false
      stderr: "toBeEmpty"

  - it: "should include multiple sections in complete documentation"
    request:
      jsonrpc: "2.0"
      id: "content-multiple-sections"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "content-multiple-sections"
        result:
          content:
            - type: "text"
              text: "match:contains:## Properties"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include detailed method information"
    request:
      jsonrpc: "2.0"
      id: "content-method-info"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "content-method-info"
        result:
          content:
            - type: "text"
              text: "match:contains:**Parameters:**"
          isError: false
      stderr: "toBeEmpty"

  - it: "should include return value information"
    request:
      jsonrpc: "2.0"
      id: "content-return-info"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "content-return-info"
        result:
          content:
            - type: "text"
              text: "match:contains:**Returns:**"
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# PERFORMANCE AND CONSISTENCY VALIDATION
# ==================================================================================

  - it: "should have consistent response structure across different classes"
    request:
      jsonrpc: "2.0"
      id: "consistency-structure"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Order"
    expect:
      response:
        jsonrpc: "2.0"
        id: "consistency-structure"
        result:
          content:
            - type: "text"
              text: "match:type:string"
          isError: false
      stderr: "toBeEmpty"

  - it: "should not include isError field for successful responses"
    request:
      jsonrpc: "2.0"
      id: "success-no-error-flag"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "success-no-error-flag"
        result:
          content: "match:type:array"
          isError: false
      stderr: "toBeEmpty"

# ==================================================================================
# PERFORMANCE TIMING TESTS - CI-FRIENDLY
# ==================================================================================

  - it: "should respond within reasonable time for Product class lookup"
    request:
      jsonrpc: "2.0"
      id: "perf-product-timing"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "perf-product-timing"
        result:
          content:
            - type: "text"
              text: "match:contains:dw.catalog.Product"
          isError: false
      performance:
        maxResponseTime: "500ms"  # CI-friendly timeout for documentation lookup
      stderr: "toBeEmpty"

  - it: "should respond within reasonable time for Order class lookup"
    request:
      jsonrpc: "2.0"
      id: "perf-order-timing"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.order.Order"
    expect:
      response:
        jsonrpc: "2.0"
        id: "perf-order-timing"
        result:
          content:
            - type: "text"
              text: "match:contains:dw.order.Order"
          isError: false
      performance:
        maxResponseTime: "500ms"  # CI-friendly timeout for documentation lookup
      stderr: "toBeEmpty"

  - it: "should respond within reasonable time for Customer class lookup"
    request:
      jsonrpc: "2.0"
      id: "perf-customer-timing"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.customer.Customer"
    expect:
      response:
        jsonrpc: "2.0"
        id: "perf-customer-timing"
        result:
          content:
            - type: "text"
              text: "match:contains:dw.customer.Customer"
          isError: false
      performance:
        maxResponseTime: "500ms"  # CI-friendly timeout for documentation lookup
      stderr: "toBeEmpty"

  - it: "should handle error cases quickly"
    request:
      jsonrpc: "2.0"
      id: "perf-error-timing"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "NonExistentClass"
    expect:
      response:
        jsonrpc: "2.0"
        id: "perf-error-timing"
        result:
          content:
            - type: "text"
              text: "match:contains:Error"
          isError: true
      performance:
        maxResponseTime: "300ms"  # Error handling should be faster
      stderr: "toBeEmpty"

  - it: "should handle validation errors very quickly"
    request:
      jsonrpc: "2.0"
      id: "perf-validation-timing"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: ""
    expect:
      response:
        jsonrpc: "2.0"
        id: "perf-validation-timing"
        result:
          content:
            - type: "text"
              text: "match:contains:non-empty string"
          isError: true
      performance:
        maxResponseTime: "200ms"  # Validation errors should be very fast
      stderr: "toBeEmpty"

# ==================================================================================
# RESPONSE FORMAT VALIDATION
# ==================================================================================

  - it: "should return proper content array structure"
    request:
      jsonrpc: "2.0"
      id: "format-content-array"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "format-content-array"
        result:
          content: "match:arrayLength:1"
          isError: false
      stderr: "toBeEmpty"

  - it: "should return content with proper type field"
    request:
      jsonrpc: "2.0"
      id: "format-content-type"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "dw.catalog.Product"
    expect:
      response:
        jsonrpc: "2.0"
        id: "format-content-type"
        result:
          content:
            - type: "text"
              text: "match:type:string"
          isError: false
      stderr: "toBeEmpty"

  - it: "should maintain consistent error response format"
    request:
      jsonrpc: "2.0"
      id: "format-error-consistent"
      method: "tools/call"
      params:
        name: "get_sfcc_class_documentation"
        arguments:
          className: "InvalidClass"
    expect:
      response:
        jsonrpc: "2.0"
        id: "format-error-consistent"
        result:
          content:
            - type: "text"
              text: "match:type:string"
          isError: true
      stderr: "toBeEmpty"

```
Page 40/43FirstPrevNextLast