Skip to content

Camden Tools

by camdentools.com · remote · no sign-in to list tools · v1.4.0 · published by com.camdentools

UK tool shop: search, prices ex/inc VAT, stock, delivery, order tracking and basket links.

Changes · 6

29 tools: 6 change things and 23 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http shop https://camdentools.com/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "get_cart_promotions" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_cart_promotions" says "get": a word for reading.

    What this check looks for
  • The server marks "create_basket_link" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "create_basket_link" says "create": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

29 tools

Changes things 6Claude Code: ask
  • check_express_eligibilityWhole-basket Website Express verdict for a set of product ids and quantities: every line must be eligible (no split shipments).Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Whole-basket Website Express verdict for a set of product ids and quantities: every line must be eligible (no split shipments).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • check_shipping_availabilityWhether Camden Tools ships to a country, with any restriction message.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Whether Camden Tools ships to a country, with any restriction message.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • estimate_deliveryDelivery services, charges and transit times for a basket to a destination (country plus postcode/ZIP and city).Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Delivery services, charges and transit times for a basket to a destination (country plus postcode/ZIP and city). This is an estimate using placeholder contact details; exact rates are confirmed at checkout.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_cart_promotionsEvaluate a prospective basket for a destination country: whether it can be fulfilled, which promotions apply (including free-delivery style offers and free gifts) and the adjusted …Reads text others write1 finding

    Why it is in this group

    • The name "get_cart_promotions" says "get": a word for reading.
    • The description's first verb is "evaluate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "get_cart_promotions" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_cart_promotions" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Evaluate a prospective basket for a destination country: whether it can be fulfilled, which promotions apply (including free-delivery style offers and free gifts) and the adjusted basket value. Same check the checkout runs.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • track_guest_orderOrder status, tracking number/URL, shipping method and line items for any order, given the order number and the delivery postcode (no sign-in needed).Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Order status, tracking number/URL, shipping method and line items for any order, given the order number and the delivery postcode (no sign-in needed).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
Only reads 23Claude Code: allow
  • compare_productsSide-by-side comparison of 2 to 5 products by SKU: price ex/inc VAT, stock, brand, weight and the specification bullet points, so an agent can recommend between options.Reads text others writeNo findings

    Why it is in this group

    • The name "compare_products" says "compare": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Side-by-side comparison of 2 to 5 products by SKU: price ex/inc VAT, stock, brand, weight and the specification bullet points, so an agent can recommend between options.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_blog_postA blog post's full text (plain text) by slug.Reads text others writeNo findings

    Why it is in this group

    • The name "get_blog_post" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe name "get_blog_post" says "get" and "post": it reads posts, which other people can write.
    • untrusted-inputThe description's first sentence says "post": it reads posts, which other people can write.
    Description, as the server wrote it
    A blog post's full text (plain text) by slug.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_brand_productsA brand's details, its active promotions and its products (paged) by brand slug.Reads text others writeNo findings

    Why it is in this group

    • The name "get_brand_products" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    A brand's details, its active promotions and its products (paged) by brand slug.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_categoryA category's name, description and its products (paged) by category slug.Reads text others writeNo findings

    Why it is in this group

    • The name "get_category" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    A category's name, description and its products (paged) by category slug.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_collection_point_infoThe London Click & Collect warehouse: address, opening hours, whether it is open right now (Europe/London, bank holidays respected) and when it next opens.Reads text others writeNo findings

    Why it is in this group

    • The name "get_collection_point_info" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    The London Click & Collect warehouse: address, opening hours, whether it is open right now (Europe/London, bank holidays respected) and when it next opens.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_express_delivery_statusWhether Website Express (free same-working-day dispatch for eligible UK orders) is available right now, the order-by cutoff and the promised dispatch date.Reads text others writeNo findings

    Why it is in this group

    • The name "get_express_delivery_status" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "website": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Whether Website Express (free same-working-day dispatch for eligible UK orders) is available right now, the order-by cutoff and the promised dispatch date.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_policyFull text (markdown) of a store policy: delivery, returns, payment-options, faqs or contact.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_policy" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "contact": it reads contacts.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Full text (markdown) of a store policy: delivery, returns, payment-options, faqs or contact.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_prices_for_countryCountry-specific pricing for a set of products (the checkout applies the destination country's currency and pricing).Reads text others writeNo findings

    Why it is in this group

    • The name "get_prices_for_country" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Country-specific pricing for a set of products (the checkout applies the destination country's currency and pricing). Returns unit, sale and final prices plus the subtotal.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_productFull details for one product by slug, SKU or id: description, specifications, prices ex/inc VAT with bulk breaks, stock, variants, safety/spec documents and the canonical page URL.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_product" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Full details for one product by slug, SKU or id: description, specifications, prices ex/inc VAT with bulk breaks, stock, variants, safety/spec documents and the canonical page URL. Provide exactly one of slug, sku or id.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_product_documentsSafety data sheets, specification sheets and COSHH hazard codes for a product (by slug or SKU).Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_product_documents" says "get": a word for reading.

    What it can reach

    • private-dataThe name "get_product_documents" says "get" and "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Safety data sheets, specification sheets and COSHH hazard codes for a product (by slug or SKU). Returns document URLs.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_product_promotionsActive promotions that apply to one SKU (discounts, free gifts, end dates).Reads text others writeNo findings

    Why it is in this group

    • The name "get_product_promotions" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Active promotions that apply to one SKU (discounts, free gifts, end dates).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_productsLook up up to 50 products at once by SKU or by numeric id.Reads text others writeNo findings

    Why it is in this group

    • The name "get_products" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Look up up to 50 products at once by SKU or by numeric id. Returns compact products (name, price ex/inc VAT, stock, link).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_site_infoWho Camden Tools is, how to contact them, VAT display rules, key page links, current announcements and a summary of each policy (delivery, returns, payment, FAQs).Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_site_info" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "contact": it reads contacts.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Who Camden Tools is, how to contact them, VAT display rules, key page links, current announcements and a summary of each policy (delivery, returns, payment, FAQs). Call get_policy for the full text of a policy.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • get_stock_levelLive availability check for a SKU (is it available now and how many are in the London warehouse).Reads text others writeNo findings

    Why it is in this group

    • The name "get_stock_level" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Live availability check for a SKU (is it available now and how many are in the London warehouse).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_brandsBrands sold by Camden Tools (DeWalt, Makita, Milwaukee, Bosch, Stanley …).Reads text others writeNo findings

    Why it is in this group

    • The name "list_brands" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Brands sold by Camden Tools (DeWalt, Makita, Milwaukee, Bosch, Stanley …). Without a query returns the popular brands; with a query searches brand names.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_bundlesCurated product bundles (kits) with their items and prices.Reads text others writeNo findings

    Why it is in this group

    • The name "list_bundles" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Curated product bundles (kits) with their items and prices.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_categoriesProduct categories with slugs and links.Reads text others writeNo findings

    Why it is in this group

    • The name "list_categories" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Product categories with slugs and links. Use popular_only for the curated set shown on the site; otherwise the full list.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_offersCurrent storefront promotions (percentage/fixed discounts and free gifts), optionally grouped by brand or category.Reads text others writeNo findings

    Why it is in this group

    • The name "list_offers" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Current storefront promotions (percentage/fixed discounts and free gifts), optionally grouped by brand or category. Also points at the /offers page.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • list_productsBrowse a product collection: most popular, newest, on sale, Website Express eligible, or a category by slug (see list_categories).Reads text others writeNo findings

    Why it is in this group

    • The name "list_products" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "browse": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Browse a product collection: most popular, newest, on sale, Website Express eligible, or a category by slug (see list_categories). Supports paging, sorting and brand/price filters.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • lookup_uk_postcodeAddresses for a UK postcode (rate limited upstream).Reads text others writeNo findings

    Why it is in this group

    • The name "lookup_uk_postcode" says "lookup": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Addresses for a UK postcode (rate limited upstream). Returns matching addresses or suggestions when the postcode is incomplete.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • search_blog_postsGuides and articles from the Camden Tools blog (how-tos, buying guides, brand news).Reads text others writeNo findings

    Why it is in this group

    • The name "search_blog_posts" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe name "search_blog_posts" says "search" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    Guides and articles from the Camden Tools blog (how-tos, buying guides, brand news).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • search_productsFull-text search of the Camden Tools catalogue (hand tools, power tools, accessories, safety equipment).Reads text others writeNo findings

    Why it is in this group

    • The name "search_products" says "search": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Full-text search of the Camden Tools catalogue (hand tools, power tools, accessories, safety equipment). Returns compact products with prices ex/inc VAT, stock and a link. Use page/per_page to paginate and brand/min_price/max_price to narrow down.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data4
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Looked at Oct 22, 2026, 14:29 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
200
tools/list served without credentials
yes
Tools that change things, listed without credentials
6
Protocol version
2025-06-18
WWW-Authenticate on 401
not observed
resource_metadata in WWW-Authenticate
none
RFC 9728 protected resource metadata
https://camdentools.com/.well-known/oauth-protected-resource
Authorization servers
https://api.camdentools.com
Legacy HTTP+SSE transport
no
Dynamic client registration
yes
Client ID metadata documents
no
  • WarnThe whole server

    The endpoint served tools/list without credentials, and the list has 6 tools that change things (6 write). Whether a call also works without credentials was not tested: tools are never called.

    Matched text

    https://camdentools.com/mcp: tools/list returned 29 tools to an anonymous client, including get_cart_promotions (write), check_express_eligibility (write), check_shipping_availability (write), estimate_delivery (write), create_basket_link (write) and 1 more

    What this check looks for

Install

Pinned to version 1.4.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http shop https://camdentools.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__shop__search_products",
      "mcp__shop__list_products",
      "mcp__shop__get_product",
      "mcp__shop__get_products",
      "mcp__shop__get_stock_level",
      "mcp__shop__compare_products",
      "mcp__shop__get_related_products",
      "mcp__shop__get_product_documents",
      "mcp__shop__list_categories",
      "mcp__shop__get_category",
      "mcp__shop__list_brands",
      "mcp__shop__get_brand_products",
      "mcp__shop__list_offers",
      "mcp__shop__get_product_promotions",
      "mcp__shop__list_bundles",
      "mcp__shop__get_express_delivery_status",
      "mcp__shop__get_prices_for_country",
      "mcp__shop__lookup_uk_postcode",
      "mcp__shop__get_site_info",
      "mcp__shop__get_policy",
      "mcp__shop__get_collection_point_info",
      "mcp__shop__search_blog_posts",
      "mcp__shop__get_blog_post"
    ],
    "ask": [
      "mcp__shop__get_cart_promotions",
      "mcp__shop__check_express_eligibility",
      "mcp__shop__check_shipping_availability",
      "mcp__shop__estimate_delivery",
      "mcp__shop__create_basket_link",
      "mcp__shop__track_guest_order"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as shop. Review it before you use it.

Capability tags behind 29 rules
  • mcp__shop__search_products untrusted-input
  • mcp__shop__list_products untrusted-input
  • mcp__shop__get_product private-data, untrusted-input
  • mcp__shop__get_products untrusted-input
  • mcp__shop__get_stock_level untrusted-input
  • mcp__shop__compare_products untrusted-input
  • mcp__shop__get_related_products untrusted-input
  • mcp__shop__get_product_documents private-data, untrusted-input
  • mcp__shop__list_categories untrusted-input
  • mcp__shop__get_category untrusted-input
  • mcp__shop__list_brands untrusted-input
  • mcp__shop__get_brand_products untrusted-input
  • mcp__shop__list_offers untrusted-input
  • mcp__shop__get_product_promotions untrusted-input
  • mcp__shop__list_bundles untrusted-input
  • mcp__shop__get_cart_promotions untrusted-input
  • mcp__shop__get_express_delivery_status untrusted-input
  • mcp__shop__check_express_eligibility untrusted-input
  • mcp__shop__check_shipping_availability untrusted-input
  • mcp__shop__get_prices_for_country untrusted-input
  • mcp__shop__estimate_delivery untrusted-input
  • mcp__shop__lookup_uk_postcode untrusted-input
  • mcp__shop__create_basket_link untrusted-input
  • mcp__shop__track_guest_order untrusted-input
  • mcp__shop__get_site_info private-data, untrusted-input
  • mcp__shop__get_policy private-data, untrusted-input
  • mcp__shop__get_collection_point_info untrusted-input
  • mcp__shop__search_blog_posts untrusted-input
  • mcp__shop__get_blog_post untrusted-input