MCP server providing tools for the AdventureWorks business simulation platform, including order management, product search, manufacturing operations, procurement, inventory, customer generation, banking, and reporting
This is a well-structured AdventureWorks simulation MCP server with 30 tools covering e-commerce, manufacturing, financial, and customer management domains. Strengths: all tools have descriptions (194 char average, within baseline), all parameters are typed, and the server organizes tools logically across multiple concern areas. Weaknesses: descriptions are often generic and lack actionability; many parameters lack detailed format constraints; output schemas are not documented in the tool definitions; error handling guidance is minimal; no tool annotations (readOnlyHint/destructiveHint) despite clear risk levels; parameter descriptions often lack examples of valid values or range constraints. The tool set is comprehensive but definition quality is uneven, some tools (e.g., SearchProducts, GetCustomerOrders) have better descriptions than others (e.g., GetProductDetails lacks context on when to use it vs. others). Per-tool analysis shows most tools at 50-70 range, consistent with a C+/B- tier server.
Analyze and summarize customer reviews for a product. Returns average rating, review count, sentiment analysis, and common themes from customer feedback. Supports multiple languages.
Record a credit (incoming money) to a virtual bank account. Use this when a customer sale is completed, a return is received, or any other money-in event occurs. Foreign currency sales (e.g. a EUR sale) should use the appropriate currency code so that a Euro balance is maintained separately. The amount must be positive.
Record a debit (outgoing money) from a virtual bank account. Use this when paying vendors for purchased components (always use USD), paying worker wages (USD), or any other money-out event. Negative balances are permitted. The amount must be positive — it will be debited automatically.
Start a new manufacturing production run for a finished good. Explodes the bill of materials, creates work orders for all components, and queues routing operations. The productId must be a finished good with MakeFlag=true. Use GetProductionFeasibility first to verify sufficient component stock.
Check real-time inventory availability for a product in finished goods locations. Returns stock levels, finished goods storage locations, and availability status. Supports multiple languages.
Output schemas not documented. Tool definitions describe parameters but lack explicit documentation of return types/fields. LLMs cannot plan multi-step operations without knowing what fields to extract from responses.
Missing tool annotations. Tools with clear risk levels (READ_ONLY, WRITE, IRREVERSIBLE, DESTRUCTIVE) lack explicit MCP toolAnnotations. No readOnlyHint, destructiveHint, or idempotentHint metadata to guide agent reasoning about side effects and retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
Find products that are frequently purchased together with a specific product. Great for product recommendations. Supports multiple languages.
Generate a complete random fictitious customer profile for the shopping simulator. Returns a fully randomised customer with: first name, last name, realistic personal email address, international cell phone number, full street address (line1, city, state/province code, postal code), country (randomly selected from AdventureWorks supported cultures), a secure random password, and a credit card (type, number, expiry month, expiry year). All data is fake but realistic and culturally appropriate for the randomly chosen country. Use this tool whenever you need to create a new customer for order simulation instead of inventing customer details yourself.
Generate a complete random fictitious customer profile for a specific locale/culture. Accepts a locale code (e.g. 'fr', 'de', 'ja', 'en-gb', 'es', 'ko', 'ar', 'zh', 'th', 'id', etc.) and returns a culturally appropriate fake customer profile with: first name, last name, realistic personal email, international cell phone number, full address, country, secure random password, and credit card details. Use this when you need a customer from a specific country/culture for the shopping simulator.
List all manufacturing routing operations that are currently in progress, including elapsed time, product name, location, and operation sequence number. Use this to see what the shop floor is actively working on.
Get the current balance for a specific currency account. For example, 'USD' for the main account or 'EUR' for the Euro account. Returns the balance in that currency's denomination.
Get the current virtual bank status: all currency account balances and a USD-equivalent total calculated using live exchange rates. The USD account is seeded from total historical AdventureWorks profit on first use. Use this to understand the current financial position of the simulation.
List the most recent bank transactions across all currencies or filtered to a specific currency. Each entry shows the currency, amount (positive=credit, negative=debit), running balance after the transaction, transaction type, description, and timestamp. Use this to audit the simulation's financial history.
Get order history and status for a customer by their CustomerID. Returns up to 10 most recent orders with status information. Supports multiple languages.
Get a financial summary across all simulators showing procurement spend (PO approvals and refunds), manufacturing WO overhead costs, payroll charges per routing operation, and scrap write-offs. Provides totals and transaction counts for each category.
Get recent manufacturing financial transactions. Use the 'type' filter to narrow to: 'completions' (WO overhead), 'payroll' (per-operation labour charges), 'scrap' (write-offs for scrapped units), or 'all' (default). Specify maxCount to control how many to return.
Retrieve scrap events recorded during manufacturing. Optionally filter by vendorId to investigate scrap attributable to components from a specific supplier. Shows product name, location, scrapped quantity, and scrap reason.
Get the current live status of the manufacturing simulation: whether it is running, queue depth, work order counts (pending/in-progress/completed today), material shortages, recent scrap events, and load per production location.
Get a headcount summary of the manufacturing workforce grouped by production location and shift. Shows total workers and how many are currently active.
Get detailed information about a specific order including items, pricing, and shipping status. Optional: Validates order belongs to customer. Supports multiple languages.
Get personalized product recommendations for a customer based on their purchase history, preferences, and buying patterns. Returns products the customer might like. Requires an existing customer ID with purchase history. Supports multiple languages.
Get recent procurement transactions — PO approval debits and refunds for rejected deliveries. Use this to audit which purchase orders have been paid for and which were refunded. Specify maxCount to control how many to return (default 20, max 500).
Get detailed information about a specific product including specifications, pricing, and inventory.
Get products with inventory and sales data to support promotion creation. Returns products ranked by their suitability for the given promotion type. For 'Clearance': high stock + low recent sales. For 'Volume Discount': popular items with high sales. Optionally filter by productCategoryId or productSubcategoryId.
Get the current per-location scrap failure rates and applicable scrap reason codes. Use this to understand the current quality configuration of each production station before making adjustments.
List all currencies supported by this virtual bank. Currency accounts are automatically created for every currency in the AdventureWorks Sales.Currency database table. New transactions in any of these currencies are accepted.
Get an aggregated quality report per supplier vendor showing total components supplied, number of scrap events, total scrapped quantity, and scrap rate. Optionally scope to a single vendor by providing vendorId.
Reset ALL simulators together in the correct order: (1) clears the manufacturing work-order queue, (2) resets the supply chain and re-seeds vendor stock, (3) resets the bank and re-seeds the USD balance from historical profit. Use this instead of individual resets to ensure bank transactions remain consistent with simulator state. WARNING: all transaction history, vendor stock levels, and in-flight work orders will be permanently cleared.
Search for products by name, category, or attributes. Returns matching products with details. Supports multiple languages: ar, de, en (default), en-au, en-ca, en-gb, en-ie, en-nz, es, fr, he, id, it, ja, ko, nl, pt, ru, th, tr, vi, zh, zh-cht.
Stop the manufacturing simulation by clearing the production queue. In-flight operations will finish but no new ones will be started. Use this when you need to pause manufacturing, for example to reconfigure scrap rates or location capacity before restarting.
Update the scrap failure rate for a specific production location. Used to simulate quality improvements or degradation. failureRatePct must be between 0.0 (no failures) and 1.0 (100% failure). Optionally provide scrapReasonIds (array of ints) to restrict which scrap reasons apply.
Parameter constraints underspecified. Many numeric and string parameters lack explicit bounds, enums, or format rules in descriptions. E.g., 'limit' parameters in multiple tools lack min/max ranges; 'cultureId' lacks enum of supported values; 'failureRatePct' in UpdateScrapConfiguration lacks range hints in description.
Generic descriptions lacking actionability. Many tool descriptions state what the tool does but lack clear guidance on when to use it vs. similar tools, or what prerequisites exist. E.g., GetProductDetails vs. SearchProducts distinction is unclear; no indication of when each should be called first.
Error recovery guidance absent. No tool descriptions include recovery hints (e.g., 'If customer not found, call SearchCustomers'). Error responses are not documented, LLMs have no guidance on retry eligibility or next steps.
Confirmation pattern not explicit for destructive operations. BeginManufacturingRun, StopManufacturing, UpdateScrapConfiguration, and ResetAllSimulators accept a 'confirmed' boolean parameter, but tool descriptions do not mention that a dry-run or preview is available. LLMs may not understand to request confirmation first.
Parameter naming inconsistency for locale/culture. Tools use both 'cultureId' and 'locale' for similar purposes (SearchProducts, GenerateRandomCustomer, GenerateRandomCustomerForLocale). Inconsistent naming forces LLMs to reason about field mappings.
Missing composition chains. Common agent workflows (e.g., SearchProducts → GetProductDetails → CheckInventoryAvailability) are not documented as suggested call sequences. Descriptions do not indicate which tools are often used together or in what order.