Koskamo

NotRobophobic Shop MCP

An MCP server for the NotRobophobic shop that allows AI agents to browse products, build a shopping basket, and create checkout links. It supports autonomous payment settlement via USDC using x402 protocol, or human-assisted payment via bank transfer or Stripe for digital downloads.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

NotRobophobic Shop MCP logo, by NotRobophobicVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by NotRobophobic
MCP endpoint (Streamable HTTP)
https://notrobo.shop/mcp/shop
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

11 of 11 have a description · 0 of 11 declare behavior hints · 10 of 10 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to notrobo.shop ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Browse product catalogue and categories
  • Build a shopping basket for physical or digital items
  • Create a checkout link with x402 payment URL
  • Verify order status and payment settlement

Source and maintenance

Vendor evidenceRegistry 1.0.1

Protocol and capabilities

Server
Shop 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

This server lets you browse this shop's catalogue and assemble a purchase on behalf of a customer. Auth: public — no key or login. Call initialize once to begin. A session id is returned but not required; the basket_token from create-basket is the only credential that matters, so keep it private. Flow: search-products -> get-product -> create-basket -> add-to-basket -> list-shipping-methods -> start-checkout. Exploring is safe. Bad slugs, tokens, variant IDs, discount codes and checkout fields all return isError:true with a plain reason and a hint — so probe and self-correct rather than bailing to the human. The only step that moves money is payment. Payment has two routes: a human pay_url (pay-by-bank — the customer authorises in their own banking app) AND, when offered, an x402_payment_url for autonomous USDC settlement with no human needed. State both plainly; never tell a customer an agent can't pay. Never claim to have paid — confirm with get-order-status. Money: product prices are strings in pounds (e.g. "14.99"); basket and order totals are integers in pence. Don't mix them up.

Tools

11 advertised

search-products — Search Products
Advertised by the server during the last successful anonymous check.

Search the shop catalogue. Returns matching products with their slugs, price and stock availability. Use get-product for full details and variants.

search-products input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search terms. Omit or leave empty to list the latest products."
    }
  }
}
search-products annotations
{}
get-product — Get Product
Advertised by the server during the last successful anonymous check.

Get a product's full details by slug: description, options, and every variant with its SKU, price and stock. Variant IDs are what you add to a basket.

get-product input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "The product slug, e.g. \"enamel-mug\"."
    }
  }
}
get-product annotations
{}
create-basket — Create Basket
Advertised by the server during the last successful anonymous check.

Create a new basket. Returns a basket_token — keep it and pass it to every basket and checkout tool. Treat it as a secret.

create-basket input schema
{
  "type": "object",
  "properties": {}
}
create-basket annotations
{}
add-to-basket — Add To Basket
Advertised by the server during the last successful anonymous check.

Add a product variant to a basket. Get variant IDs from get-product. Returns the updated basket.

add-to-basket input schema
{
  "type": "object",
  "required": [
    "basket_token",
    "variant_id"
  ],
  "properties": {
    "quantity": {
      "type": "integer",
      "description": "Quantity to add (default 1)."
    },
    "variant_id": {
      "type": "integer",
      "description": "The product variant ID to add."
    },
    "basket_token": {
      "type": "string",
      "description": "The basket token from create-basket."
    }
  }
}
add-to-basket annotations
{}
view-basket — View Basket
Advertised by the server during the last successful anonymous check.

View a basket: its lines, quantities and subtotal.

view-basket input schema
{
  "type": "object",
  "required": [
    "basket_token"
  ],
  "properties": {
    "basket_token": {
      "type": "string",
      "description": "The basket token from create-basket."
    }
  }
}
view-basket annotations
{}
update-basket-item — Update Basket Item
Advertised by the server during the last successful anonymous check.

Change the quantity of a basket line. A quantity of 0 removes it. Returns the updated basket.

update-basket-item input schema
{
  "type": "object",
  "required": [
    "basket_token",
    "item_id",
    "quantity"
  ],
  "properties": {
    "item_id": {
      "type": "integer",
      "description": "The basket line ID (from view-basket)."
    },
    "quantity": {
      "type": "integer",
      "description": "New quantity; 0 removes the line."
    },
    "basket_token": {
      "type": "string",
      "description": "The basket token from create-basket."
    }
  }
}
update-basket-item annotations
{}
remove-from-basket — Remove From Basket
Advertised by the server during the last successful anonymous check.

Remove a line from a basket. Returns the updated basket.

remove-from-basket input schema
{
  "type": "object",
  "required": [
    "basket_token",
    "item_id"
  ],
  "properties": {
    "item_id": {
      "type": "integer",
      "description": "The basket line ID (from view-basket)."
    },
    "basket_token": {
      "type": "string",
      "description": "The basket token from create-basket."
    }
  }
}
remove-from-basket annotations
{}
apply-discount-to-basket — Apply Discount To Basket
Advertised by the server during the last successful anonymous check.

Apply a discount code to a basket. Returns the updated basket with the discount reflected in the totals.

apply-discount-to-basket input schema
{
  "type": "object",
  "required": [
    "basket_token",
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "The discount code to apply."
    },
    "basket_token": {
      "type": "string",
      "description": "The basket token from create-basket."
    }
  }
}
apply-discount-to-basket annotations
{}
list-shipping-methods — List Shipping Methods
Advertised by the server during the last successful anonymous check.

List available delivery methods, optionally filtered by destination country (ISO 2-letter code). Use the method ID in start-checkout.

list-shipping-methods input schema
{
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "description": "Optional ISO 3166-1 alpha-2 destination country, e.g. \"GB\"."
    }
  }
}
list-shipping-methods annotations
{}
start-checkout — Start Checkout
Advertised by the server during the last successful anonymous check.

Turn a basket into an order and get payment links. Two ways to pay: a human pay_url (pay-by-bank, the customer authorises in their banking app) and, when offered, an x402_payment_url for autonomous USDC settlement with no human needed. Never claim to have paid — confirm with get-order-status. For digital-only baskets, only name and country are required in shipping_address.

start-checkout input schema
{
  "type": "object",
  "required": [
    "basket_token",
    "email",
    "shipping_address"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Customer email for order confirmation."
    },
    "basket_token": {
      "type": "string",
      "description": "The basket token from create-basket."
    },
    "shipping_address": {
      "type": "object",
      "required": [
        "name",
        "country"
      ],
      "properties": {
        "city": {
          "type": "string",
          "description": "Required for physical delivery; omit for digital-only baskets."
        },
        "name": {
          "type": "string"
        },
        "line1": {
          "type": "string",
          "description": "Street address. Required for physical delivery; omit for digital-only baskets."
        },
        "line2": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "county": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "description": "ISO 2-letter country code, e.g. GB."
        },
        "postcode": {
          "type": "string",
          "description": "Required for physical delivery; omit for digital-only baskets."
        }
      },
      "description": "Customer address. For digital-only baskets only name and country are needed; physical orders also need line1, city and postcode."
    },
    "shipping_method_id": {
      "type": "integer",
      "description": "Delivery method ID from list-shipping-methods. Omit for baskets containing only digital products."
    }
  }
}
start-checkout annotations
{}
get-order-status — Get Order Status
Advertised by the server during the last successful anonymous check.

Check an order's status. Requires the order number AND the email it was placed with.

get-order-status input schema
{
  "type": "object",
  "required": [
    "order_number",
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "The email address the order was placed with."
    },
    "order_number": {
      "type": "string",
      "description": "The order number, e.g. ORD-260612-AB3D."
    }
  }
}
get-order-status annotations
{}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2250 ms
95th percentile latency
2250 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2250 ms · metadata changed · 11 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http notrobophobic-shop-mcp https://notrobo.shop/mcp/shop

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add notrobophobic-shop-mcp --url https://notrobo.shop/mcp/shop

Cursor

Merge this server into .cursor/mcp.json in your project, then enable notrobophobic-shop-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "notrobophobic-shop-mcp": {
      "url": "https://notrobo.shop/mcp/shop"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "notrobophobic-shop-mcp": {
      "type": "streamableHttp",
      "url": "https://notrobo.shop/mcp/shop",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start notrobophobic-shop-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "notrobophobic-shop-mcp": {
      "type": "http",
      "url": "https://notrobo.shop/mcp/shop"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http notrobophobic-shop-mcp https://notrobo.shop/mcp/shop

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://notrobo.shop/mcp/shop

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "notrobophobic-shop-mcp": {
      "serverUrl": "https://notrobo.shop/mcp/shop"
    }
  }
}

Let your agent find its tools

Find servers like NotRobophobic Shop MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run NotRobophobic Shop MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing