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.
29 tools: 6 change things and 23 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things6Claude Code: ask: see these tools
- Only reads23Claude Code: allow: see these tools
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/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "get_cart_promotions" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_cart_promotions" says "get": a word for reading.
The server marks "create_basket_link" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "create_basket_link" says "create": a word for a change.
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
create_basket_linkTurn product ids and quantities into one link that fills the shopper's basket on camdentools.com.Reads text others write1 finding
Why it is in this group
- The name "create_basket_link" says "create": 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 "create_basket_link" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "create_basket_link" says "create": a word for a change.
Description, as the server wrote it Turn product ids and quantities into one link that fills the shopper's basket on camdentools.com. Opening the link makes sure the basket holds at least those quantities (opening it twice does not double them); the shopper reviews the basket and pays at checkout themselves. The result says which lines are out of stock: those cannot be bought, so offer an alternative before sharing the link. Use it to finish a shopping conversation. Ids come from search_products, list_products or get_product.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- 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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "get_cart_promotions" says "get": a word for reading.
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.
- Reads text others write29
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- 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.
What this check looks forMatched 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
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/mcpRun 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.
{
"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