MCP server providing merchant and transaction data retrieval tools for fraud investigation assistance using AWS Bedrock and Strands Agents
This fraud investigation MCP server has 9 well-defined tools with generally comprehensive descriptions and schemas. Tool naming follows verb_noun patterns (get_*, search_, filter_) which is correct. Input schemas are properly declared with types, patterns, and constraints. However, output schemas are described in prose form within tool descriptions rather than as formal JSON Schema documentation, which limits downstream tool chaining visibility and LLM reasoning precision. Error handling and recovery guidance are not evident. No tool annotations (readOnlyHint, destructiveHint) are present despite all tools being READ_ONLY. Parameter descriptions are thorough but some lack explicit type info in schema definitions. The server demonstrates solid foundational quality but lacks production-grade polish in output documentation and error patterns.
Filter merchant statistics to focus on specific metric types - Key features: * Targeted statistical data for specific analysis needs * Supports various metric types (sales, refunds, disputes, etc.) * Multiple time period options - Parameters: * merchant_number (required): Merchant identification number (format: MRCH####) * stat_date (optional): Time period for stats - "Day", "Month", or "Year" (default: "Day") * metric_type (optional): Type of metrics to return (default: "all") - options include: - credit_sales, credit_refunds, credit_disputes, credit_reversals - debit_sales, debit_refunds, debit_disputes - authorizations, forced_sales, entry_methods, all - Returns: * Filtered subset of merchant statistics based on the selected metric_type * For example, with metric_type="credit_sales": - credit_sales_count: Number of credit sales transactions (int) - credit_sales_volume: Total volume of credit sales (str) - credit_sales_average_ticket: Average credit sale amount (str)
Filters transactions based on specified criteria and field values - Key features: * Flexible field-based filtering across multiple attributes * Supports filtering on transaction type, payment method, status and more * Returns all transactions matching the specified criteria * Includes count of matching transactions * Ideal for targeted fraud investigation and pattern analysis - Parameters: * field (required): Field name to filter on - options include: - transaction_type, payment_method, approval_status, transaction_status, - card_issue_type, transaction_mode, card_country, card_class, - amount, currency, auth_code, transaction_datetime, decline_reason * value (required): Value to filter by (1-100 characters) - Returns: * items: Array of AuthorizationTransactionResponse and SettlementTransactionResponse * count: Total number of matching transactions (int)
Output schemas documented only in prose descriptions, not as formal JSON Schema. This prevents LLMs from reliably extracting and chaining results. E.g., get_merchant_stats returns 40+ fields described as prose text within the tool description rather than a structured schema object.
No tool annotations despite all tools being READ_ONLY operations. Missing readOnlyHint would help agents understand safety guarantees and retry behavior. Current MCP spec (2026-07-28) supports tool annotations for this use case.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 71 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Retrieves detailed authorization transaction information by transaction ID - Key features: * Fetches complete transaction records from the authorization system * Provides merchant identification, transaction amounts, and payment details * Includes approval status and decline reasons when applicable * Returns timestamp information for audit and tracking * Supports fraud analysis with comprehensive transaction attributes - Parameters: * auth_transaction_id (required): Unique identifier for the authorization transaction - Returns: * id: Unique transaction identifier * merchant_number: Merchant identification code * account_number: Associated account number (partially masked) * amount: Transaction amount * currency: Transaction currency code * transaction_type: Type of transaction * payment_method: Method used for payment * card_expiry_date: Expiration date of payment card * auth_code: Authorization code from payment processor * transaction_datetime: Date and time of transaction * approval_status: Approval status (Approved/Declined) * decline_reason: Reason for decline if applicable * created_at: Record creation timestamp * updated_at: Record last update timestamp
Retrieve comprehensive merchant profile information - Key features: * Comprehensive merchant business information * Complete address and contact details * Account status and merchant categorization - Parameters: * merchant_number (required): Unique merchant identifier (format: MRCH####) - Returns: * merchant_number: Unique merchant identifier (str) * affiliate_address_line1: Affiliate address line 1 (str) * affiliate_address_line2: Affiliate address line 2 (str or null) * affiliate_city: Affiliate city (str) * affiliate_name: Affiliate name (str) * affiliate_state: Affiliate state (str) * billing_address_line1: Billing address line 1 (str) * billing_address_line2: Billing address line 2 (str) * billing_attention: Billing attention name (str) * billing_city: Billing city (str) * billing_county: Billing county (str) * billing_name: Billing name (str) * billing_phone: Billing phone number (str) * billing_state: Billing state (str) * billing_zip_code: Billing postal code (str) * business_contact_name: Business contact name (str or null) * business_email: Business email address (str or null) * business_phone_line1: Business phone number (str) * business_name: Business name (str) * business_pin: Business PIN number (str or null) * business_zip_code: Business postal code (str) * business_address_line1: Business address line 1 (str) * business_city: Business city (str) * legal_contact_name: Legal contact name (str) * legal_phone_line1: Legal contact phone number (str) * legal_name: Legal business name (str) * country_code: Country code (str) * customer_contact: Customer contact name (str) * email_address: Primary email address (str) * merchant_category_code: MCC code (str) * merchant_category_description: MCC description (str) * merchant_id_status: Merchant ID status (str) * merchant_phone: Merchant phone number (str) * merchant_zip_code: Merchant postal code (str) * number_of_outlets: Number of business outlets (int) * outlet_name: Outlet name (str) * outlets_count: Count of outlets (int) * security_code: Security code (str) * standard_industrial_classification: SIC description (str) * sic_code: SIC code (str) * exclusion_indicator: Exclusion indicator (str) * account_status: Current account status (str) * chain_agent: Chain agent (str) * chain_bank: Chain bank (str) * chain_business: Chain business (str) * chain_code: Chain code (str) * chain_name: Chain name (str) * points_credit_limit: Points credit limit (str) * points_cumulative_credit_limit: Points cumulative credit limit (str) * points_sales_limit: Points sales limit (str) * signature_amount: Signature required amount (str) * signature_volume: Signature volume (str)
Get comprehensive merchant statistics for a specific period - Key features: * Multiple aggregation period options (Day, Month, Year) * Comprehensive credit and debit transaction statistics * Detailed breakdown of sales, refunds, disputes, and reversals * Entry method distribution analysis * Authorization and decline metrics - Parameters: * merchant_number (required): Merchant identification number (format: MRCH####) * stat_date (optional): Time period for stats - "Day", "Month", or "Year" (default: "Day") - Returns: * id: Unique stats record identifier (int) * merchant_number: Merchant identification code (str) * stat_date: Date of statistics (str) * credit_sales_count: Number of credit sales transactions (int) * credit_sales_volume: Total volume of credit sales (str) * credit_sales_average_ticket: Average credit sale amount (str) * credit_refunds_count: Number of credit refund transactions (int) * credit_refunds_volume: Total volume of credit refunds (str) * credit_refunds_average_ticket: Average credit refund amount (str) * credit_refunds_percent: Percentage of credit refunds (str) * credit_disputes_count: Number of credit dispute transactions (int) * credit_disputes_volume: Total volume of credit disputes (str) * credit_disputes_average_ticket: Average credit dispute amount (str) * credit_disputes_percent: Percentage of credit disputes (str) * credit_reversals_count: Number of credit reversals (int) * credit_reversals_volume: Total volume of credit reversals (str) * credit_reversals_percent: Percentage of credit reversals (str) * entry_method_keyed_percent: Percentage of keyed entry methods (str) * entry_method_ecomm_percent: Percentage of e-commerce entries (str) * entry_method_chipped_percent: Percentage of chip card entries (str) * entry_method_swiped_percent: Percentage of swiped card entries (str) * authorizations_count: Number of authorizations (int) * authorizations_volume: Total volume of authorizations (str) * authorizations_declines_count: Number of declined authorizations (int) * authorizations_declines_volume: Volume of declined authorizations (str) * authorizations_declines_percent: Percentage of declined authorizations (str) * forced_sales_count: Number of forced sales (int) * forced_sales_volume: Total volume of forced sales (str) * forced_sales_average_ticket: Average forced sale amount (str) * forced_sales_percent: Percentage of forced sales (str) * debit_sales_count: Number of debit sales transactions (int) * debit_sales_volume: Total volume of debit sales (str) * debit_sales_average_ticket: Average debit sale amount (str) * debit_refunds_count: Number of debit refund transactions (int) * debit_refunds_volume: Total volume of debit refunds (str) * debit_refunds_average_ticket: Average debit refund amount (str) * debit_disputes_count: Number of debit dispute transactions (int) * debit_disputes_volume: Total volume of debit disputes (str) * debit_disputes_percent: Percentage of debit disputes (str) * created_at: Record creation timestamp (str) * updated_at: Record last update timestamp (str)
Fetches the most recent transactions for a merchant, sorted by transaction datetime - Key features: * Returns transactions sorted by recency (newest first) * Configurable result limit (1-100 transactions) * Supports both authorization and settlement transaction types * Includes helpful summary statistics * Ideal for quick review of latest merchant activity - Parameters: * merchant_number (required): Merchant identification number (format: MRCH####) * transaction_type (optional): Type of transaction - "authorization" or "settlement" (default: "authorization") * limit (optional): Maximum number of transactions to retrieve (range: 1-100, default: 5) - Returns: * items: Array of recent transaction objects sorted by date (newest first) * summary: Object containing: - total_returned: Number of transactions returned (int) - total_available: Total number of transactions available (int)
Retrieves settlement transaction information by transaction ID - Key features: * Provides complete settlement transaction data for reconciliation * Shows processed amounts versus authorized amounts * Includes card classification and country information * Tracks transaction status throughout the settlement process * Supports investigation of settlement discrepancies - Parameters: * settlement_transaction_id (required): Unique identifier for the settlement transaction - Returns: * id: Unique settlement identifier (int) * merchant_number: Merchant identification code (str) * account_number: Associated account number (str, masked) * same_card: Indicates if same card as authorization (str) * transaction_date: Date of the settlement transaction (str) * processed_amount: Amount that was processed (str) * auth_amount: Original authorized amount (str) * tran_id: Transaction reference ID (str) * transaction_type: Type of settlement transaction (str) * transaction_status: Current status of transaction (str) * card_issue_type: Type of card issued (str) * transaction_mode: Mode of transaction processing (str) * payment_method: Method used for payment (str) * auth_code: Authorization code from processor (str) * auth_date: Date of original authorization (str) * card_country: Country of card issuance (str) * card_class: Classification of payment card (str) * created_at: Record creation timestamp (str) * updated_at: Record last update timestamp (str)
Retrieves complete transaction history for a merchant within specified date range - Key features: * Supports both authorization and settlement transaction types * Optional date range filtering for targeted analysis * Comprehensive transaction listing for merchant activity review * Ideal for pattern recognition and merchant behavior analysis * Helps identify unusual transaction volumes or amounts - Parameters: * merchant_number (required): Merchant identification number (format: MRCH####) * transaction_type (optional): Type of transaction to retrieve - "authorization" or "settlement" (default: "authorization") * date_from (optional): Start date in YYYY-MM-DD format * date_to (optional): End date in YYYY-MM-DD format - Returns: * item: Array of transaction objects containing all transaction details * Each transaction object includes all fields from either AuthorizationTransactionResponse or SettlementTransactionResponse depending on transaction_type
Search for merchants based on various criteria with pagination - Key features: * Flexible search by business name or category code * Paginated results for managing large result sets * Configurable page size * Returns merchant summary information - Parameters: * business_name (optional): Business name to search for (1-100 characters) * category_code (optional): 4-digit merchant category code * page (optional): Page number for pagination (minimum: 1, default: 1) * page_size (optional): Number of items per page (range: 1-100, default: 10) - Returns: * merchants: Array of merchant objects, each containing: - merchant_number: Unique merchant identifier (str) - business_name: Name of the business (str) - merchant_category_code: MCC code (str) - business_city: City location (str) - business_state: State location (str) - account_status: Current status of the merchant account (str) * pagination: Object containing: - total: Total number of matching merchants (int) - pages: Total number of pages (int) - current_page: Current page number (int) - page_size: Number of items per page (int)
No error handling or recovery guidance in tool descriptions. Tools lack statements like 'If merchant not found, try search_merchants()' or error classification (retryable vs user-fixable). Agents cannot self-correct on failures.
filter_merchant_stats has inconsistent enum values: stat_date enum includes 'Daily' as default but tool description lists 'Day', 'Month', 'Year'. This mismatch will cause validation failures.
filter_transactions 'field' parameter accepts arbitrary strings (minLength 1, maxLength 100) rather than an enum. Description lists valid options but LLMs may hallucinate fields not in the list, causing silent failures.
get_merchant_details returns 50+ fields without documented pagination or limits. Large result sets risk context window exhaustion. Tool description lacks guidance on result size.
search_merchants returns merchant data but lacks indication of which merchants match the user's intent most strongly. No relevance scoring or sorting guidance for cases with many results.