Skip to main content
Glama
nguthrie
by nguthrie

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

ucp_discover

Find out what a merchant supports (capabilities, payment methods)

ucp_checkout_create

Start a purchase (add items to cart, set buyer info)

ucp_checkout_update

Apply discount codes to an existing checkout

ucp_checkout_set_fulfillment

Set up shipping (auto-selects address and delivery option)

ucp_checkout_complete

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-server

Or with uv:

uv pip install ucp-mcp-server

Use 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-server

Tools 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 implements

ucp_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 cart

ucp_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 discounts

ucp_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 method

ucp_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 order

Example 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-integration

Project 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 tests

Roadmap

  • 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

License

MIT

Available Tools

5 tools
ucp_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

ParametersJSON Schema
NameRequiredDescriptionDefault
merchant_urlYes
checkout_idYes
payment_handler_idNomock_payment_handler
card_tokenNosuccess_token
card_brandNoVisa
card_last_digitsNo4242

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
merchant_urlYes
itemsYes
buyer_nameYes
buyer_emailYes
currencyNoUSD

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
merchant_urlYes
checkout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
merchant_urlYes
checkout_idYes
discount_codesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
merchant_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv0.2.0
    • First observeducp_checkout_complete
    • First observeducp_checkout_create
    • First observeducp_checkout_set_fulfillment
    • First observeducp_checkout_update
    • First observeducp_discover

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: discover capabilities, create checkout, update with discounts, set fulfillment, and complete payment. No overlap in functionality.

Naming Consistency5/5

All tools follow the 'ucp_verb_noun' pattern with consistent snake_case and prefix, making them predictable and easy to distinguish.

Tool Count5/5

Five tools cover the essential checkout steps without unnecessary bloat. The count is well-scoped for the domain.

Completeness4/5

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

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

Latest Blog Posts

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