ucp-mcp-server
Click on "Install 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., "@ucp-mcp-serverFind out what the flower shop at http://flowers.example.com supports"
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.
ucp-mcp-server
Let AI assistants shop. An MCP server that gives Claude, Cursor, and any MCP-compatible AI the ability to interact with UCP-enabled merchants.
UCP (Universal Commerce Protocol) is Google's new open standard for agentic commerce, backed by Shopify, Stripe, Visa, Mastercard, Target, Walmart, and 20+ partners.
MCP (Model Context Protocol) is the standard for giving AI assistants access to tools.
This project connects them.
What Can It Do?
Tool | Description |
| Find out what a merchant supports (capabilities, payment methods) |
| Start a purchase (add items to cart, set buyer info) |
| Apply discount codes to an existing checkout |
| Set up shipping (auto-selects address and delivery option) |
| Complete the purchase by submitting payment |
Your AI assistant gets structured, type-safe access to the entire UCP shopping flow. No scraping, no browser automation, no brittle hacks.
Related MCP server: Synchronity
Quick Start
Install
pip install ucp-mcp-serverOr with uv:
uv pip install ucp-mcp-serverUse with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"ucp-shopping": {
"command": "ucp-mcp-server"
}
}
}Use with Cursor
Add to your .cursor/mcp.json:
{
"mcpServers": {
"ucp-shopping": {
"command": "ucp-mcp-server"
}
}
}Run Directly
# As a module
python -m ucp_mcp_server
# Or via the entry point
ucp-mcp-serverTools Reference
ucp_discover
Discover what a UCP merchant supports before shopping.
Arguments:
merchant_url (str): Base URL of a UCP-enabled merchant
Returns:
capabilities: List of supported UCP capabilities (checkout, discount, fulfillment)
payment_handlers: Accepted payment methods (Shop Pay, Google Pay, etc.)
ucp_version: Protocol version the merchant implementsucp_checkout_create
Create a new shopping cart / checkout session.
Arguments:
merchant_url (str): Base URL of the merchant
items (list): Items to buy, each with "id" and "quantity"
buyer_name (str): Full name of the buyer
buyer_email (str): Email address
currency (str): Currency code (default: "USD")
Returns:
checkout_id: Session ID for tracking this purchase
status: Current checkout status
total: Total price in smallest currency unit (cents)
subtotal: Subtotal before discounts
line_items: What's in the cartucp_checkout_update
Apply discount codes or modify an existing checkout.
Arguments:
merchant_url (str): Base URL of the merchant
checkout_id (str): The checkout session to update
discount_codes (list[str]): Promo codes to apply
Returns:
checkout_id: Session ID
total: Updated total after discounts
discount_applied: How much was saved
discounts: Details of applied discountsucp_checkout_set_fulfillment
Set up shipping for a checkout. Automatically selects the first available address and delivery option.
Arguments:
merchant_url (str): Base URL of the merchant
checkout_id (str): The checkout session
Returns:
checkout_id: Session ID
status: Current status
total: Updated total (may include shipping costs)
fulfillment: Details of selected shipping methoducp_checkout_complete
Complete a checkout by submitting payment. This finalizes the purchase and returns an order ID.
Arguments:
merchant_url (str): Base URL of the merchant
checkout_id (str): The checkout session to complete
payment_handler_id (str): Payment handler to use (from ucp_discover)
card_token (str): Payment token from the provider
card_brand (str): Card brand (e.g., "Visa")
card_last_digits (str): Last 4 digits of the card
Returns:
checkout_id: Session ID
status: "complete" or "completed"
total: Final amount charged
order_id: Order ID for tracking
order_url: Permalink to the orderExample Conversation
You: "Find out what the flower shop at http://flowers.example.com supports"
Claude: calls ucp_discover "This merchant supports checkout, discounts, and fulfillment tracking. They accept Shop Pay and Google Pay."
You: "Buy 2 bouquets of roses for me"
Claude: calls ucp_checkout_create "I've created a checkout for 2 Bouquet of Red Roses. Total: $70.00. Would you like to proceed?"
You: "Try the code 10OFF first"
Claude: calls ucp_checkout_update "Applied 10OFF - saved $7.00! New total: $63.00."
Why This Exists
Every AI app is going to need shopping capabilities. UCP standardizes how merchants expose commerce APIs. MCP standardizes how AI assistants use tools. This project is the bridge.
Without this, connecting AI to commerce means:
Scraping websites (brittle, breaks constantly)
Building custom integrations per merchant (doesn't scale)
Browser automation (slow, unreliable, expensive)
With UCP + MCP:
One protocol, every merchant
Structured data in, structured data out
Works with any MCP-compatible AI assistant
Development
# Clone the repo
git clone https://github.com/nguthrie/ucp-mcp-server.git
cd ucp-mcp-server
# Install dependencies
uv sync --extra dev
# Run tests
uv run pytest -v
# Run integration tests (requires a live UCP server on port 8182)
uv run pytest -v -m integration --run-integrationProject Structure
ucp-mcp-server/
├── src/ucp_mcp_server/
│ ├── __init__.py # Package version
│ ├── __main__.py # python -m entry point
│ ├── server.py # MCP server + tool definitions
│ ├── ucp_client.py # HTTP client for UCP APIs
│ └── models.py # Pydantic models for UCP data
└── tests/
├── conftest.py # Test fixtures with mock UCP responses
├── test_discovery.py # Discovery tool tests
├── test_checkout.py # Checkout tool tests
├── test_errors.py # Error handling tests
└── test_integration.py # Live server integration testsRoadmap
Merchant capability discovery
Checkout session creation
Discount code application
Fulfillment / shipping setup
Purchase completion / payment submission
Order fulfillment tracking
Returns and exchanges
Multi-merchant comparison shopping
Hosted managed version (so you don't have to self-host)
Resources
UCP Specification - The Universal Commerce Protocol
MCP Documentation - Model Context Protocol
License
MIT
Available Tools
5 toolsucp_checkout_completeA
Complete a checkout session by submitting payment. This finalizes the purchase.
Args: merchant_url: The base URL of the UCP-enabled merchant checkout_id: The ID of the checkout session to complete payment_handler_id: The ID of the payment handler to use (from ucp_discover) card_token: Payment token from the payment provider card_brand: Card brand (e.g., Visa, Mastercard) card_last_digits: Last 4 digits of the card
Returns: Dictionary containing: - checkout_id: The checkout session ID - status: Final status (should be 'complete') - total: Final total charged - order_id: The order ID for tracking - order_url: Permalink to the order
| Name | Required | Description | Default |
|---|---|---|---|
| merchant_url | Yes | ||
| checkout_id | Yes | ||
| payment_handler_id | No | mock_payment_handler | |
| card_token | No | success_token | |
| card_brand | No | Visa | |
| card_last_digits | No | 4242 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It states 'finalizes the purchase' (a write operation) and lists returns, but does not disclose idempotency, failure behavior, side effects, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description has a clear Args/Returns structure, but it redundantly lists all parameter descriptions which are already explained. Slightly verbose but still well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (context signals confirm), the description adequately covers inputs and returns. However, it lacks details on error handling, idempotency, and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description fully explains each parameter's purpose (e.g., 'merchant_url: The base URL of the UCP-enabled merchant'). This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool completes a checkout session by submitting payment and finalizing the purchase. It uses a specific verb ('complete') with a clear resource ('checkout session'), and is distinct from sibling tools like create, update, or discover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the final step in the checkout process but does not explicitly state when to use it versus alternatives (e.g., update or create). No guidance on prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_checkout_createB
Create a new checkout session with a UCP merchant.
Args: merchant_url: The base URL of the UCP-enabled merchant items: List of items to purchase, each with 'id' and 'quantity' buyer_name: Full name of the buyer buyer_email: Email address of the buyer currency: Currency code (default: USD)
Returns: Dictionary containing: - checkout_id: The ID of the created checkout session - status: Current status of the checkout - total: Total amount in smallest currency unit (e.g., cents) - line_items: List of items in the cart
| Name | Required | Description | Default |
|---|---|---|---|
| merchant_url | Yes | ||
| items | Yes | ||
| buyer_name | Yes | ||
| buyer_email | Yes | ||
| currency | No | USD |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. While it explains inputs and outputs, it omits details like side effects (does this create a persistent session?), required authentication, idempotency, or error conditions. The fact that it 'creates' implies mutation, but no further safety or state info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with 'Args' and 'Returns' sections, each parameter on a separate line. It is concise enough—5 parameters described in a few sentences—but could be slightly more compact by omitting the explicit 'Args' label if not needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5 parameters, no annotations, and presence of an output schema, the description covers all inputs and defines the return structure. However, it lacks mention of authentication, error handling, or prerequisites (e.g., merchant must be discoverable via ucp_discover). Enough for basic use but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description fully compensates by explaining each parameter's meaning, including the structure of 'items' (list with 'id' and 'quantity') and default for 'currency'. All 5 parameters are clearly defined, and the return dictionary is detailed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new checkout session') and the resource ('UCP merchant'). It provides specific parameter explanations and return values, but does not explicitly differentiate from sibling tools like ucp_checkout_complete or ucp_checkout_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, typical workflow (e.g., start a checkout before completing it), or scenarios where another sibling would be appropriate. Sibling tool names are listed but without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_checkout_set_fulfillmentA
Set up shipping/fulfillment for a checkout. Automatically selects the first available shipping address and delivery option. Must be called before completing checkout if the merchant requires fulfillment.
Args: merchant_url: The base URL of the UCP-enabled merchant checkout_id: The ID of the checkout session
Returns: Dictionary containing: - checkout_id: The checkout session ID - status: Current status - total: Updated total (may include shipping costs) - fulfillment: Details of selected shipping method
| Name | Required | Description | Default |
|---|---|---|---|
| merchant_url | Yes | ||
| checkout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the key behavioral trait: 'Automatically selects the first available shipping address and delivery option,' informing the agent of this autonomous action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the purpose and usage guidance. It includes structured Args and Returns sections, making it easy to scan. A slight reduction in verbosity could be possible, but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple 2-parameter schema and presence of an output schema, the description adequately covers purpose, when to call, behavioral details, and return fields. It could mention error conditions but is sufficiently complete for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description only lists the parameter names without adding meaning. The parameter names (merchant_url, checkout_id) are self-explanatory, but the description fails to provide additional context or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Set up shipping/fulfillment for a checkout.' It also explains automatic selection of shipping address and delivery option, distinguishing it from sibling tools like ucp_checkout_complete or ucp_checkout_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit usage guidance: 'Must be called before completing checkout if the merchant requires fulfillment.' This tells when to use it, though it does not mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_checkout_updateA
Update an existing checkout session (e.g., apply discount codes).
Args: merchant_url: The base URL of the UCP-enabled merchant checkout_id: The ID of the checkout session to update discount_codes: List of discount/promo codes to apply
Returns: Dictionary containing updated checkout information: - checkout_id: The checkout session ID - status: Current status - total: Updated total amount - discount_applied: Amount discounted - discounts: Details of applied discounts
| Name | Required | Description | Default |
|---|---|---|---|
| merchant_url | Yes | ||
| checkout_id | Yes | ||
| discount_codes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions updating and applying discount codes but fails to clarify whether the tool only updates discount codes (as suggested by parameters) or other fields, nor does it address side effects, idempotency, or authorization.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear summary, args section, and returns section. Every sentence serves a purpose, and the structure is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description includes a detailed return structure in the missing output schema. However, it omits error conditions, prerequisites, or limitations. Given the output coverage, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning to all three parameters: merchant_url (base URL), checkout_id (ID), and discount_codes (list of codes). This compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing checkout session, with an example of applying discount codes. It differentiates from sibling tools like create, complete, and set_fulfillment, which handle distinct stages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying a session (e.g., applying discount codes) but does not explicitly contrast with siblings or provide when-not-to-use guidance. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_discoverA
Discover a merchant's UCP capabilities and supported payment methods.
Args: merchant_url: The base URL of the UCP-enabled merchant (e.g., http://localhost:8182)
Returns: Dictionary containing: - capabilities: List of UCP capabilities the merchant supports - payment_handlers: List of payment methods accepted - ucp_version: The UCP protocol version
| Name | Required | Description | Default |
|---|---|---|---|
| merchant_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the input and output but does not mention side effects, auth requirements, or error conditions. 'Discover' suggests a read-only operation, but this is not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three distinct sections (summary, args, returns), front-loaded with the purpose, and contains no redundant or irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the input parameter and return values sufficiently, and an output schema exists. However, it could mention potential failures (e.g., if the merchant is not UCP-enabled) or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the single parameter 'merchant_url' by explaining it as 'The base URL of the UCP-enabled merchant' and providing an example, compensating for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Discover' and resource 'a merchant's UCP capabilities and supported payment methods', clearly distinguishing it from sibling tools like ucp_checkout_create which focus on checkout operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is the first step for interacting with a UCP merchant, but it does not explicitly state when to use it versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.2.0- First observed
ucp_checkout_complete - First observed
ucp_checkout_create - First observed
ucp_checkout_set_fulfillment - First observed
ucp_checkout_update - First observed
ucp_discover
TDQS
Each tool has a clearly distinct purpose: discover capabilities, create checkout, update with discounts, set fulfillment, and complete payment. No overlap in functionality.
All tools follow the 'ucp_verb_noun' pattern with consistent snake_case and prefix, making them predictable and easy to distinguish.
Five tools cover the essential checkout steps without unnecessary bloat. The count is well-scoped for the domain.
The set covers the full checkout lifecycle: discovery, creation, discount updates, fulfillment setup, and payment completion. Missing cancellation or refund capabilities but core flow is complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI shopping gateway for product search, inventory, carts, and merchant-hosted checkout.
Agentic commerce with 58 MCP tools for product search, checkout, A2A negotiation, C-Suite analytics.
Agentic commerce gateway: discovery, search, checkout across Shopify/Woo/Odoo/PrestaShop.
Directory of APIs, merchants, and tools AI agents can actually use.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search products, manage shopping carts, place orders, and retrieve order history from Amazon and Target accounts.2MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to search, compare, and buy products across connected WooCommerce stores with human-in-the-loop approval.MIT
- FlicenseNot gradedqualityDmaintenanceEnables e-commerce shopping assistant capabilities including product search, cart management, payment processing, and order fulfillment via MCP tools.-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse product catalogs, search products with filters, and initiate checkouts, generating order summaries and checkout URLs.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nguthrie/ucp-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server