voucherify-core-mcp
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@voucherify-core-mcp what promotions are currently active?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Voucherify Core MCP
Use a MCP (Model Context Protocol) server to ask questions in plain language and explore your loyalty and promo data through Voucherify API endpoints. An MCP works like a teammate to pull the numbers for you.
Read complete Voucherify Core MCP article
Related MCP server: SE Ranking SEO Data API MCP Server
Pick your path
Set up MPC connection in two ways:
Use the published package (recommended): no local build; your agent spawns the server
Contribute or run from source: set up the repo, run locally (HTTP or
stdio), and hack away 🚀
Use the published package (recommended)
You don't need a local setup. Your agent runs the server with uvx.
Package prerequisites
To set up Voucherify Core MCP, you need:
An MCP client (for example Cursor, Claude Desktop, Visual Studio Code)
UV installed (remember to restart your client if you've installed UV for the first time)
Recommended: Use a separate Voucherify server-side app ID and token for the MCP.
Set up Voucherify Core MCP
To set up Voucherify Core MCP:
Open your MCP client.
Add the following code snippet to the
mcp.jsonfile in your client. This step may vary depending on your client; refer to the specific documentation for details.{ "version": 1, "mcpServers": { "voucherify-core-mcp": { "command": "uvx", "args": ["voucherify-core-mcp", "--transport", "stdio"], "env": { "VOUCHERIFY_APP_ID": "<app id>", "VOUCHERIFY_APP_TOKEN": "<app token>", "VOUCHERIFY_API_BASE_URL": "https://<clusterId>.api.voucherify.io" } } } }Copy your Voucherify server-side app ID and token from Project settings into the
mcp.json.Provide your Voucherify API base URL. For shared clusters:
Europe:
https://api.voucherify.ioNorth America:
https://us1.api.voucherify.ioAsia:
https://as1.api.voucherify.io
Run the connection with the MCP server.
Open a new chat to start your conversation.
Contribute or run from source
If you want to explore the code, tweak things, or run a local HTTP server, follow this setup.
Contribute: Prerequisites
Python 3.12+
Voucherify credentials:
VOUCHERIFY_APP_ID,VOUCHERIFY_APP_TOKEN(use a separate pair)UV installed (remember to restart your client if you've installed UV for the first time)
Installed dependencies:
uv sync --all-extrasConfigure project credentials
Create an .env file in the project root (useful for debugging):
## Voucherify API Configuration for localhost
VOUCHERIFY_API_BASE_URL=http://localhost:8000
VOUCHERIFY_APP_ID=<app id>
VOUCHERIFY_APP_TOKEN=<app token>
## Tests (Management API keys can be found in Team Settings if you have this feature enabled)
VOUCHERIFY_MANAGEMENT_APP_ID=
VOUCHERIFY_MANAGEMENT_APP_TOKEN=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=When running a local MCP server, you can point to a specific cluster or local environment with .env:
VOUCHERIFY_API_BASE_URL=http://localhost:8000Run it your way
You can run it by:
HTTP server
stdio
HTTP server
Start the server:
uv run python src/voucherify_core_mcp/main.pyYou’ll get an endpoint at
http://127.0.0.1:10000/mcp/.Configure your agent to connect over HTTP:
{
"mcpServers": {
"voucherify-remote-mcp": {
"url": "http://localhost:10000/mcp/",
"headers": {
"x-app-id": "your-application-id",
"x-app-token": "your-secret-key"
}
}
}
}stdio (spawned by your agent)
Let your agent spawn the server from source:
{
"version": 1,
"mcpServers": {
"voucherify-core-mcp-from-sources": {
"command": "uv",
"args": ["run", "python", "src/voucherify_core_mcp/main.py", "--transport", "stdio"],
"env": {
"VOUCHERIFY_APP_ID": "<app id>",
"VOUCHERIFY_APP_TOKEN": "<app token>",
"VOUCHERIFY_API_BASE_URL": "https://api.voucherify.io"
}
}
}
}Place the file where your agent expects it (same locations as above).
MCP test engine
Use the test engine to check MCP capabilities in a safe environment.
Initialize project data:
Create your
.envas above.Run the project preparation script:
uv run prepare_project.py This will:
- Look into tests/.test.env and delete the test project defined there.
- Create a new test project using the Management API credentials from .env.
- Generate required resources.
- Persist credentials and resource IDs for tests in .test.env.
Run scenarios
uv run pytest tests/scenario_1_basic_scenarios.pyor a specific test:
uv run pytest tests/scenario_5_get_best_deals.py::test_get_best_deals_json_outputAvailable functionalities
You can access the following endpoints with the Voucherify MCP to fetch data:
Find_customer: Displays a customer's current status and detailed information such as collected loyalty points, eligibility for rewards, and other profile data. You can use the customer's email, source ID, or Voucherify ID.
List_campaigns: Retrieves a list of campaigns to view active, scheduled, or completed campaigns.
Get_campaign_summary: Displays a performance summary of ongoing campaigns, including comparisons with past activity (for example, previous week), to visualize trends and measure success over time.
Get_promotion_tier: Fetches details about the configuration of a promotion tier, such as reward levels or thresholds that determine customer benefits.
Qualifications: Checks and returns a customer's eligibility for specific campaigns, promotions, or reward rules, ensuring only qualified users receive incentives.
Get_best_deals: Returns information about better prices contextually by showing the top 5 best incentives.
For the best results, set the Application rule to Partial in Voucherify dashboard, Redemptions section, Stacking rules tab. Read the Stacking rules article for more details.
Estimate_loyalty_points: Returns an estimation of how many points a customer will earn for an order
List_products: Retrieves the catalog of products, including attributes like pricing, availability, and categories.
Get_voucher: Returns full details of a specific voucher, such as code, status, balance, and expiration date, to support redemption or troubleshooting.
Best practices
Follow these practices to get the best results.
Ask specific questions
Use precise date ranges (for example “July 2025 redemptions”) instead of vague prompts like “recent redemptions”.
Describe exactly what you need: specific campaign names, product categories, or data types.
Broad requests (for example “all campaigns in the last 3 years”) usually lead to unclear results.
Add more context if necessary
If results look off, reframe your query or try again. If the AI loops or repeats itself, redirect with a new question or start a new chat with a more detailed prompt.
Ask more questions
Once you've got an answer you like, ask the client to:
Suggest additional insights or next steps.
Explain how it reached its conclusions to help refine your future prompts.
Change model
If you're not satisfied with answers or the overall process, use a different AI model. Each model is trained on different data, has their own strengths, and is best suited for various tasks.
Prompt examples
Read the following prompt examples for inspiration on how to use Voucherify Core MCP:
Find customer by email
tom@example.com(orsource_id, orcustomer_id). Return the ID,loyalty_balance,active_vouchers.Count total of customers in segment “VIP”. List their basic details: name, email address,
source_id. Turn the data into a CSV-friendly format.List active campaigns with fields: ID, name, type,
start_date,end_date.Get voucher by code “BK-4829” and show: status,
redemption.count,redemption.limit,balance(for gift or loyalty cards).Get campaign “BK-Sept-20OFF” data: total budget, spent budget, redemption counts, and per-customer caps.
Show the campaign with the most coupons generated. Return redemption data for this campaign.
Show me the best performing campaign in terms of number of successful redemptions. Return the budget - the total discount value that was applied.
Get redemptions aggregated by day between 2025-09-01 and 2025-09-03 (timezone Europe/Warsaw).
Get best deals for a customer with this email address. They have these items in their cart: Voucherify T-shirt (SKU: VCH-TST-001, quantity: 1, price: 25 USD), Voucherify Mug (SKU: VCH-MUG-002, quantity: 2, price: 15 USD each). Suggest if there's anything they can do to get even better deals.
The number of API calls made by the Voucherify MCP depends on your question. Complex queries, like get best deals for a given customer, will need more API calls, while simple questions can be limited to just a few or even one, like get campaign summary. The MCP client will ask for confirmation to make an API call.
The API calls made with the Voucherify MCP are included in your billing period.
Troubleshooting and feedback
The Voucherify MCP is still under development and we'd love to have your feedback to improve it. Also, if you've encountered any issues, please let us know. Contact Voucherify support or your account manager.
Disclaimer
The Model Context Protocol (MCP) is a new open-source standard and may still carry potential vulnerabilities. The Voucherify MCP server setup and instructions are provided “as is,” without warranties, and use is at your own risk.
Voucherify is not liable for issues caused by incorrect setup, misuse, or security gaps related to MCP.
If you have questions or need support, please reach out to our team, we’re here to help.
Available Tools
10 toolsestimate_loyalty_pointsA
Estimate how many loyalty points a customer will earn for a given order.
CRITICAL: customer and order are ALWAYS required, even when loyalty_card is provided. The loyalty_card only identifies the campaign — it does NOT replace customer or order.
Calculates the estimated number of points a customer will receive in a loyalty campaign based on the campaign's earning rules and the provided order.
Important Limitations:
Returns an estimation, not a precise point value
Works only for "Order paid" earning rules
For campaigns with tiers, mappings, and multiple earning rules, the actual points may differ as the customer may change tiers during final calculation
Use Case: Show loyalty point banners in checkout flows
Display estimated points before order placement
Motivate customers by showing point rewards for their current cart
Combine with get_best_deals for comprehensive loyalty estimations
Campaign Identification (at least one required):
loyalty_card: Loyalty card code or voucher ID — resolves the campaign ID only.
campaign_id: Direct loyalty campaign ID — use when already known.
Both can be provided: the tool verifies the loyalty card belongs to the given campaign.
Parameters:
customer: REQUIRED - Customer identification (id or source_id required). Always provide.
order: REQUIRED - Order details with source_id for existing orders or amount for estimation. Always provide.
loyalty_card: Loyalty card code or voucher ID (at least one of loyalty_card/campaign_id required)
campaign_id: Loyalty campaign ID with 'camp_' prefix (at least one of loyalty_card/campaign_id required)
Customer Object Structure: Required (one of):
id: Customer ID with 'cust_' prefix (e.g., "cust_abc123")
source_id: External customer identifier Optional:
metadata: Dict of custom customer attributes
Order Object Structure: Required (one of):
source_id: Existing order ID assigned by Voucherify (e.g., "ord_34567890")
amount: Total order amount in cents (e.g., 5000 for $50.00) Optional:
metadata: Dict of custom order attributes
Pricing Rules:
All amounts in cents (5000 = $50.00, 150 = $1.50)
Examples:
estimate_loyalty_points( loyalty_card="Loyalty-ZC4Vg", customer={"source_id": "customer123"}, order={"amount": 5000} )
estimate_loyalty_points( campaign_id="camp_XXXXXXXXX", customer={"id": "cust_abc123"}, order={"source_id": "ord_34567890"} )
estimate_loyalty_points( loyalty_card="Loyalty-ZC4Vg", campaign_id="camp_XXXXXXXXX", customer={"source_id": "customer123"}, order={"amount": 8000, "metadata": {"source": "checkout"}} )
Returns: JSON object containing:
campaign: Campaign details (id, name, object)
points_estimation: Estimated number of points the customer will earn
Example Response: { "campaign": { "id": "camp_XXXXXXXXX", "name": "Loyalty-campaign", "object": "campaign" }, "points_estimation": 51 }
Error Cases:
400: Campaign doesn't allow auto-join for non-members, inactive campaign, inactive loyalty card, or missing customer/order objects
404: Campaign ID or loyalty card not found
Raises:
ToolError: If parameters invalid, campaign not found, or customer not eligible
Inputs: order (required), customer (required), campaign_id, loyalty_card. Returns: result
find_customerA
Find a customer by email or ID and return complete customer object.
Lookup Behavior:
ID lookup: Direct retrieval by customer ID (faster, more reliable)
Email lookup: Searches customers and returns first match (case-insensitive)
Returns complete customer object including loyalty summary when available
Parameters:
email: Valid email address for customer search
id: Customer identifier with 'cust_' prefix for direct lookup
Validation Rules:
Exactly one parameter (email OR id) must be provided
Email must be valid email format
ID must start with 'cust_' prefix
Examples:
find_customer(email="john.doe@example.com")
find_customer(id="cust_abc123def456")
Returns: JSON object containing complete customer data including:
id, source_id, email, name
metadata (custom attributes)
loyalty summary (points, tier, etc.) when available
creation and update timestamps
Raises:
ToolError: If both/neither parameters provided, customer not found, or invalid format
Inputs: id, email. Returns: result
get_best_dealsA
Find top 5 best deal promotions for customer's order with validation analysis.
Analyzes order items against available promotions to identify highest-value deals. Returns promotions with validation rules - some may be partially valid, requiring additional items or changes to qualify for the discount.
Use Case: Upselling and cross-selling optimization
Identify best promotions for current cart
Determine what customer needs to add/change for qualification
Optimize cart value through targeted recommendations
Important: This tool is specialized for order-based promotion analysis. Do not combine with 'qualifications' tool as they serve different purposes.
Parameters: Parameters:
customer: 🔴 MANDATORY - Customer identification and profile data. This parameter is REQUIRED for every call.
order: 🔴 MANDATORY - Order with items list for promotion matching and analysis. This parameter is REQUIRED for every call.
Order Item Configuration: Each item can be specified in multiple ways:
By Product ID (most precise): {"product_id": "prod_abc123", "price": 2000, "quantity": 1}
By Source ID (requires related_object): {"source_id": "special-meal", "related_object": "product", "price": 3000, "quantity": 1}
Generic with metadata (for product collection matching): {"quantity": 2, "product": {"metadata": {"category": "Electronics"}}}
Price-less items (uses catalog price): {"source_id": "drink", "related_object": "product", "quantity": 1}
Pricing Rules:
All prices in cents (2000 = $20.00, 150 = $1.50)
Items without price use product catalog pricing
Quantity must be positive integer
Examples:
get_best_deals( customer={"id": "cust_abc123"}, order={ "items": [ {"product_id": "prod_112e92ce9a7cf5b1d8", "price": 2000, "quantity": 1}, {"source_id": "special-meal", "related_object": "product", "price": 3000, "quantity": 1} ] } )
Example of invalid usage:
get_best_deals()
Returns: JSON array of up to 5 promotion objects, each containing:
id: Promotion identifier
result: Qualification status (APPLICABLE, PARTIALLY_APPLICABLE, etc.)
is_applicable: Boolean indicating if given incentive meets all validation rules
redeemable_details: Promotion information (banner, description, campaign)
validation_rules: Array of validation requirements with status
resolved_order: Order with calculated totals and promotion effects if incentive is applicable
Each validation rule includes:
validation_rules_definition: Rule logic and requirements
validation_status: Current compliance status
validation_omitted_sub_rules: Missing requirements for qualification
See "Validation Rules Structure" section in server instructions for detailed rule format documentation
Raises:
ToolError: If customer missing required fields or order structure invalid
Inputs: order (required), customer (required). Returns: result
get_campaignA
Retrieve detailed information about a specific campaign by its ID.
Returns complete campaign configuration including discount details, validation rules, voucher settings, and current status for campaign analysis and management.
Enhanced Features:
Automatically fetches and processes validation rules for detailed rule analysis
Provides both raw validation_rules_assignments and processed assigned_validation_rules
Includes complete campaign hierarchy and voucher generation settings
Parameters:
campaign_id: Campaign identifier for lookup
Identifier Requirements:
Campaign ID: Must start with 'camp_' prefix (e.g., "camp_X26jzR8ObD55nlwOUcr63Px0")
ID must correspond to existing campaign
Validation Rules:
Campaign ID must be valid and existing
ID format is case-sensitive
Examples:
get_campaign(campaign_id="camp_X26jzR8ObD55nlwOUcr63Px0")
Returns: JSON object containing complete campaign details including:
Core Campaign Information:
id: Campaign system identifier (e.g., "camp_X26jzR8ObD55nlwOUcr63Px0")
name: Human-readable campaign name (e.g., "Burger Deluxe Family Campaign")
campaign_type: Campaign type ("DISCOUNT_COUPONS", "GIFT_VOUCHERS", "LOYALTY_PROGRAM", "PROMOTION")
type: Campaign generation type ("STATIC", "DYNAMIC")
active: Boolean campaign status
object: Always "campaign"
Campaign Configuration:
auto_join: Boolean automatic customer enrollment setting
join_once: Boolean single enrollment restriction
use_voucher_metadata_schema: Boolean voucher metadata schema usage
protected: Boolean protection status against modifications
Voucher Template Settings:
voucher: Complete voucher template configuration:
type: Voucher type ("DISCOUNT_VOUCHER", "GIFT_VOUCHER", etc.)
discount: Discount configuration (e.g., {"type": "PERCENT", "percent_off": 3})
redemption: Usage limits (e.g., {"quantity": null} for unlimited)
code_config: Code generation settings:
length: Code length (e.g., 8)
charset: Character set for code generation
pattern: Code pattern (e.g., "########")
is_referral_code: Boolean referral code status
Campaign Status and Statistics:
vouchers_count: Total vouchers generated in campaign
creation_status: Campaign creation status ("DONE", "IN_PROGRESS", "FAILED")
vouchers_generation_status: Voucher generation status ("DONE", "IN_PROGRESS", "FAILED")
created_at: Campaign creation timestamp (ISO 8601)
Access and Categorization:
access_settings_assignments: Access control assignments with data array and total count
category_id: Campaign category identifier (null if uncategorized)
categories: Array of campaign categories (empty if uncategorized)
Validation Rules (Enhanced):
assigned_validation_rules: Processed validation rules with detailed conditions (added by this tool) See "Validation Rules Structure" section in server instructions for complete field documentation
Use Cases:
Analyze campaign configuration and discount mechanics
Understand validation rules and product requirements
Check campaign status and voucher generation progress
Review campaign hierarchy and settings
Get complete campaign blueprint for duplication
Raises:
ToolError: If campaign not found or invalid campaign ID format
Inputs: campaign_id (required). Returns: result
get_campaign_summaryA
Retrieve comprehensive analytics summary for a specific campaign.
Returns detailed statistics including validations, redemptions, publications, and campaign-type-specific metrics for performance analysis.
Parameters:
campaign_id: Valid campaign identifier with 'camp_' prefix
start_date: Optional analysis period start (ISO 8601 date format)
end_date: Optional analysis period end (ISO 8601 date format)
Date Parameter Rules:
Both start_date and end_date must be provided together or omitted together
Empty strings are invalid - use null/None for no date filtering
Omitting both dates returns full campaign period summary
Date format: YYYY-MM-DD (e.g., "2025-01-01")
Examples:
get_campaign_summary(campaign_id="camp_aPVb581gdJ1xF6esnDnDocVK")
get_campaign_summary( campaign_id="camp_aPVb581gdJ1xF6esnDnDocVK", start_date="2025-01-01", end_date="2025-01-31" )
Examples of bad usage:
get_campaign_summary(campaign_id="camp_aPVb581gdJ1xF6esnDnDocVK", start_date="", end_date="")
Returns: JSON object containing campaign analytics including:
validations: Validation attempt statistics
redemptions: Successful redemption counts and values
publications: Voucher distribution metrics
campaign_type specific metrics (varies by campaign type)
date range information
performance indicators
Raises:
ToolError: If campaign not found, invalid date format, or mismatched date parameters
Inputs: campaign_id (required), end_date, start_date. Returns: result
get_promotion_tierA
Retrieve detailed information about a specific promotion tier by its ID.
Returns complete promotion tier configuration including discount rules, validation criteria, and metadata for promotion analysis and management.
Enhanced Features:
Automatically fetches and processes validation rules for detailed rule analysis
Provides both raw validation_rules_assignments and processed assigned_validation_rules
Includes complete promotion tier hierarchy and action settings
Parameters:
promotion_tier_id: Promotion tier identifier for lookup
Identifier Requirements:
Promotion Tier ID: Must start with 'promo_' prefix (e.g., "promo_abc123def456")
ID must correspond to existing promotion tier
Validation Rules:
Promotion tier ID must be valid and existing
ID format is case-sensitive
Examples:
get_promotion_tier(promotion_tier_id="promo_abc123def456")
Returns: JSON object containing complete promotion tier details including:
Core Promotion Tier Information:
id: Promotion tier system identifier (e.g., "promo_abc123def456")
name: Human-readable tier name
banner: Display banner text for promotion
object: Always "promotion_tier"
Discount Configuration:
action: Complete discount configuration including:
discount: Discount type and value settings
unit_off: Fixed amount discount (if applicable)
unit_off_formula: Dynamic discount calculation (if applicable)
percent_off: Percentage discount (if applicable)
percent_off_formula: Dynamic percentage calculation (if applicable)
Promotion Settings:
hierarchy: Tier ordering and priority within campaign
campaign: Parent campaign information
campaign_id: Parent campaign identifier
summary: Promotion tier summary and statistics
Validation Rules (Enhanced):
assigned_validation_rules: Processed validation rules with detailed conditions (added by this tool) See "Validation Rules Structure" section in server instructions for complete field documentation
Additional Data:
metadata: Custom promotion tier attributes
created_at, updated_at: ISO 8601 timestamps
Use Cases:
Analyze promotion tier configuration and discount mechanics
Understand validation rules and eligibility requirements
Review promotion tier hierarchy and priority
Get complete promotion tier blueprint for management
Check promotion tier status and performance
Raises:
ToolError: If promotion tier not found or invalid ID format
Inputs: promotion_tier_id (required). Returns: result
get_voucherA
Retrieve detailed information about a specific voucher by its code or ID.
Returns complete voucher configuration including discount details, usage limits, validation rules, and current status for voucher analysis and management.
Enhanced Features:
Automatically fetches and processes validation rules for detailed rule analysis
Provides both raw validation_rules_assignments and processed validation_rules
Includes QR/barcode assets for voucher display and distribution
Parameters:
identifier: Voucher code or ID for lookup
Identifier Types:
Voucher Code: Human-readable code with alphanumeric and special characters (e.g., "WELCOME10", "SAVE20", "TEST-ABC")
Voucher ID: System identifier with 'v_' prefix (e.g., "v_abc123def456")
Validation Rules:
Identifier must correspond to existing voucher
Both codes and IDs are case-sensitive
Examples:
get_voucher(identifier="WELCOME10")
get_voucher(identifier="v_abc123def456")
Returns: JSON object containing complete voucher details including:
Core Voucher Information:
id: Voucher system identifier (e.g., "v_4dyaDRCMD0bUDNv47pDqnGlCJhSVWtnT")
code: Human-readable voucher code (e.g., "DELUXE-SG63RY")
type: Voucher type ("DISCOUNT_VOUCHER", "GIFT_VOUCHER", "LOYALTY_CARD")
active: Boolean voucher status
object: Always "voucher"
Discount Configuration:
discount: Discount details with type and value (e.g., {"type": "PERCENT", "percent_off": 25})
gift: Gift voucher amount (null for discount vouchers)
loyalty_card: Loyalty card details (null for regular vouchers)
Validity and Constraints:
start_date, expiration_date: Validity period (ISO 8601 or null)
validity_timeframe, validity_hours: Time-based restrictions
validity_day_of_week: Array of valid weekdays (1=Monday, 7=Sunday)
Usage Tracking:
redemption: Usage statistics with quantity limits and current usage
publish: Publication information and count
holder_id: Customer ID if voucher is assigned
Campaign and Categorization:
campaign, campaign_id: Parent campaign information (null for standalone vouchers)
category, category_id, categories: Voucher categorization
Validation Rules (Enhanced):
assigned_validation_rules: Processed validation rules with detailed conditions (added by this tool) See "Validation Rules Structure" section in server instructions for complete field documentation
Additional Data:
metadata: Custom voucher attributes
additional_info: Extra voucher information
assets: QR code and barcode URLs for voucher display
is_referral_code: Boolean indicating referral voucher
created_at, updated_at: ISO 8601 timestamps
Use Cases:
Verify voucher validity and details
Check voucher usage and limits
Analyze voucher configuration and discount mechanics
Understand validation rules and product requirements
Check voucher ownership and assignment
Get QR/barcode assets for voucher display
Raises:
ToolError: If voucher not found or invalid identifier format
Inputs: identifier (required). Returns: result
list_campaignsA
List all campaigns with basic information for campaign resolution.
Primary Use Case: Resolve campaign ID when user provides only campaign name or partial name. Returns comprehensive list of all campaigns for further name-based matching.
Behavior:
Retrieves all campaigns (up to 1000) in single request
No filtering - returns complete campaign catalog
Avoid multiple calls as results are comprehensive
No Parameters Required: This tool requires no input parameters and returns all available campaigns.
Returns: JSON array of campaign objects, each containing:
id: Campaign identifier starting with 'camp_'
name: Human-readable campaign name
campaign_type: Campaign type (e.g., 'DISCOUNT_COUPONS', 'GIFT_VOUCHERS')
created_at: ISO 8601 creation timestamp
Example Output: [ { "id": "camp_abc123def456", "name": "Summer Sale 2025", "campaign_type": "DISCOUNT_COUPONS", "created_at": "2025-01-01T00:00:00.000Z" }, { "id": "camp_xyz789ghi012", "name": "Holiday Promotions", "campaign_type": "GIFT_VOUCHERS", "created_at": "2024-12-01T00:00:00.000Z" } ]
Usage Pattern:
Call list_campaigns() to get all campaigns
Match user's campaign name against returned names
Use resolved campaign ID for other campaign tools
Limitations:
Maximum 1000 campaigns returned
No filtering options available
Results sorted by creation date
Inputs: no named parameters. Returns: result
list_productsA
List products with optional filtering and pagination.
Returns paginated product catalog with flexible filtering capabilities for product discovery, inventory analysis, and catalog management.
Parameters:
filters: Optional filter criteria using field paths and operators
page: Optional page number (default: 1, provide only for page 2+)
Filter Structure: { "field_path": { "conditions": { "$operator": "value" } } }
Supported Fields:
name: Product name (string)
source_id: External product identifier (string)
price: Product price in cents (integer)
created_at: Creation date (ISO 8601)
metadata.: Custom metadata fields (various types)
Operators by Field Type: String fields (name, source_id, metadata):
$is, $is_not: Exact match
$contains, $starts_with: Partial match
$in: Match any from array
Numeric fields (price, numeric metadata):
$more_than, $less_than: Comparison
$more_than_equal, $less_than_equal: Inclusive comparison
Date fields (created_at):
$after, $before: Date comparison (ISO 8601 format)
Pricing Rules:
All prices in cents (2000 = $20.00, 150 = $1.50)
Consistent across all Voucherify tools
Examples:
list_products() # All products, page 1
list_products(page=2) # All products, page 2
list_products( filters={ "metadata.category": {"conditions": {"$is": "Electronics"}}, "price": {"conditions": {"$more_than": 5000}} } )
list_products( filters={ "name": {"conditions": {"$contains": "Premium"}}, "created_at": {"conditions": {"$after": "2025-01-01"}} }, page=3 )
Returns: JSON object containing:
products: Array of product objects with full details
total: Total number of matching products
has_more: Boolean indicating if more pages available
Each product includes: id, name, source_id, price, metadata, timestamps
Pagination:
100 products per page
Results sorted by created_at descending (newest first)
Custom sorting not supported
Raises:
ToolError: If filter structure invalid or unsupported operators used
Inputs: page, filters. Returns: result
qualificationsA
Find redeemables (vouchers, promotions, campaigns) applicable to given customer.
⚠️ CRITICAL: The 'customer' parameter is ALWAYS REQUIRED - never call this tool without it!
Returns list of available discounts, vouchers, and promotions based on customer profile and selected scenario for targeted marketing and cart optimization.
Parameters:
customer: 🔴 MANDATORY - Customer identification and profile data. This parameter is REQUIRED for every call.
scenario: 🔴 MANDATORY - Qualification scope determining which redeemables to evaluate (optional, defaults to ALL)
Customer Object Structure: Required (one of):
id: Customer ID with 'cust_' prefix (e.g., "cust_abc123")
source_id: External customer identifier Optional:
metadata: Dict of custom customer attributes for rule matching
Scenario Guide (Choose Based on Use Case):
CUSTOMER-FOCUSED:
ALL: Scenario that returns redeemables available for the customer
CUSTOMER_WALLET: returns vouchers applicable to the customer's cart based on the vouchers assigned to the customer's profile
AUDIENCE_ONLY: returns all vouchers, promotion tiers, and campaigns available to the customer. It validates the rules based on the customer profile only.
PRODUCT-FOCUSED (require product context in other tools):
PRODUCTS: returns all promotions available for the products (when a discount is defined to be applied to the item or when the item is required in the validation rule)
PRODUCTS_DISCOUNT: returns all promotions available for products when a discount is defined as applicable to specific item(s).
PRODUCTS_BY_CUSTOMER: returns all promotions available for a customer for the products (when a discount is defined to be applied to the item or when the item is required in the validation rule).
PRODUCTS_DISCOUNT_BY_CUSTOMER: returns all promotions available for a customer for products when a discount is defined as applicable to specific item(s).
ADVANCED:
PROMOTION_STACKS: returns the applicable promotion stacks
Common Usage Patterns:
Customer wallet check: Use CUSTOMER_WALLET
Matching redeemables to given context: Use ALL
Customer-based targeting: Use AUDIENCE_ONLY
✅ CORRECT Examples (always include customer):
qualifications(customer={"id": "cust_abc123"}, scenario="CUSTOMER_WALLET")
qualifications(customer={"source_id": "user_456", "metadata": {"tier": "gold"}})
qualifications(customer={"id": "cust_xyz789"}, scenario="ALL")
qualifications(customer={"id": "cust_abc123"}) # scenario defaults to ALL
🚫 WRONG Examples (missing required customer parameter):
qualifications() # ❌ NEVER do this - customer is required
qualifications(scenario="CUSTOMER_WALLET") # ❌ NEVER do this - customer is required
qualifications(scenario="ALL") # ❌ NEVER do this - customer is required
💡 Remember: ALWAYS provide the customer parameter - it's never optional!
Returns: JSON object containing:
redeemables: Array of applicable vouchers/promotions
Each redeemable includes: id, name, discount details, validation rules
Scenario-specific filtering applied
Raises:
ToolError: If customer missing required fields or invalid scenario
Inputs: customer (required), scenario. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct resource or operation: customer lookup, campaign retrieval/listing/summary, promotion tier, voucher, qualifications, best deals, loyalty points, and product listing. Even overlapping areas like qualifications and get_best_deals are clearly differentiated by descriptions and use cases.
Most tools follow a verb_noun pattern (get_campaign, list_campaigns, find_customer, etc.). The outlier is 'qualifications', which is a noun without a verb prefix, but overall the pattern is consistent and predictable.
10 tools is well-scoped for a core API server covering customers, campaigns, promotion tiers, vouchers, qualifications, deals, loyalty points, and products. It provides essential operations without being overwhelming.
The tool set is entirely read-only; there are no create, update, or delete operations for any resource (customers, campaigns, vouchers, products, etc.). Additionally, listing tools are missing for vouchers and promotion tiers. This creates significant gaps for agents needing to manage resources.
Related MCP Connectors
Ask questions in plain language, get answers from your business database. No SQL required.
Ask business questions in plain English. Get instant answers from your database, no SQL needed.
Ask questions across Shopify, Klaviyo, GA4 and 20+ e-commerce sources in plain English.
Query your SEO data in plain language: rankings, audits, backlinks, competitors and AI visibility.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables natural language interaction with Plausible Analytics data to query traffic, visitors, engagement, and more using conversational questions.41MIT
- FlicenseBqualityDmaintenanceEnables querying the SE Ranking API for SEO data and analytics using natural language.25-
- AlicenseNot gradedqualityDmaintenanceEnables read-only access to VortexIQ ecommerce AI data, including store audits, KPIs, alerts, brand DNA, and reports, through natural language queries.MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language, read-only access to your Cakto payment gateway data, including orders, revenue analytics, subscriptions, churn, customers, and products.MIT