BuyingMesh Procurement
by buyingmesh.com · remote · no sign-in to list tools · v0.3.1 · published by com.buyingmesh
Structured B2B supply search, quoting, sandbox orders and fulfillment status for agents.
20 tools: 3 can delete or cancel things, 2 do something that can't be undone, 3 change things and 12 only read.
Scanned Oct 21, 2026
- Deletes or cancels3Claude Code: deny: see these tools
- Can't be undone2Claude Code: ask: see these tools
- Changes things3Claude Code: ask: see these tools
- Only reads12Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http procurement https://buyingmesh.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Infosearch_suppliers
The description mentions "credentials".
What this check looks forMatched text
description: "...pplier storefronts and inspect reviewed credentials and platform-observed performance."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
20 tools
Deletes or cancels 3Claude Code: deny
cancel_orderCancel an order before fulfillment when the state machine permits it.No findings
Why it is in this group
- The name "cancel_order" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Cancel an order before fulfillment when the state machine permits it. Cancellation is terminal and emits order.cancelled.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
create_orderRequest an order from a buyer-approved production quote.No findings
Why it is in this group
- The name "create_order" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Request an order from a buyer-approved production quote. Live order creation is currently closed: this tool returns the stable error code ordering_not_open and recommends submit_inquiry until settlement and fulfillment are enabled. It never charges the buyer while closed.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
update_order_statusAdvance an enabled order through an allowed fulfillment state transition and emit its webhook event.No findings
Why it is in this group
- The name "update_order_status" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Advance an enabled order through an allowed fulfillment state transition and emit its webhook event. Use only when the responsible fulfillment party has supplied evidence.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Can't be undone 2Claude Code: ask
contact_supportSend a support request from an agent to the BuyingMesh operator by email.Reads text others writeCan send data outNo findings
Why it is in this group
- The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe description's first verb is "send": it sends or publishes something to other people.
Description, as the server wrote it Send a support request from an agent to the BuyingMesh operator by email. Never include private keys, passwords or payment secrets.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
submit_inquirySend a structured, non-binding product inquiry to the responsible merchant.Reads text others writeNo findings
Why it is in this group
- The name "submit_inquiry" says "submit": a word for a change.
- The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
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 Send a structured, non-binding product inquiry to the responsible merchant. Use this when inventory is unknown, a buyer needs a supplier answer, or a quote cannot yet be issued. The inquiry stores SKU, quantity, destination, buyer and agent identity and does not create an order or payment.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Changes things 3Claude Code: ask
create_quoteCreate a retrievable, non-binding quote snapshot for published merchant SKUs.No findings
Why it is in this group
- The name "create_quote" says "create": a word for a change.
Description, as the server wrote it Create a retrievable, non-binding quote snapshot for published merchant SKUs. Real order creation remains disabled until production settlement and fulfillment are ready.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
estimate_landed_costCombine product subtotal, estimated shipping and preliminary duty into a destination landed-cost range.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 Combine product subtotal, estimated shipping and preliminary duty into a destination landed-cost range. The response includes assumptions and must not be treated as a binding quote.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
request_buyer_confirmationCreate a short-lived explicit confirmation request for a quote before any order mutation.No findings
Why it is in this group
- The name "request_buyer_confirmation" says "request": a word for a change.
Description, as the server wrote it Create a short-lived explicit confirmation request for a quote before any order mutation. This tool has no payment or order side effect.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 12Claude Code: allow
compare_quotesCompare non-binding quote options for approved merchant SKUs by quantity and destination.Reads text others writeNo findings
Why it is in this group
- The name "compare_quotes" 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 Compare non-binding quote options for approved merchant SKUs by quantity and destination. Returns no options when the catalog is empty.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
compare_supplier_offersCompare eligible supplier offers for the same requested SKUs, quantity and destination.Reads text others writeNo findings
Why it is in this group
- The name "compare_supplier_offers" 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 Compare eligible supplier offers for the same requested SKUs, quantity and destination. This is read-only and returns estimated shipping separately from item subtotal.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_order_statusRead order status, tracking number, ETA, payment mode and fulfillment events.No findings
Why it is in this group
- The name "get_order_status" says "get": a word for reading.
Description, as the server wrote it Read order status, tracking number, ETA, payment mode and fulfillment events.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_productRetrieve a product as Schema.org JSON-LD from the selected catalog environment.No findings
Why it is in this group
- The name "get_product" says "get": a word for reading.
Description, as the server wrote it Retrieve a product as Schema.org JSON-LD from the selected catalog environment.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_quoteRetrieve a previously created quote by quoteId and inspect its expiry, line items, destination and supplier options.No findings
Why it is in this group
- The name "get_quote" says "get": a word for reading.
Description, as the server wrote it Retrieve a previously created quote by quoteId and inspect its expiry, line items, destination and supplier options.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_supplierRetrieve a public supplier storefront by stable supplier ID or public slug.No findings
Why it is in this group
- The name "get_supplier" says "get": a word for reading.
Description, as the server wrote it Retrieve a public supplier storefront by stable supplier ID or public slug.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_supplier_performanceRetrieve platform-observed supplier fulfillment metrics, order sample size and as-of timestamp.No findings
Why it is in this group
- The name "get_supplier_performance" says "get": a word for reading.
Description, as the server wrote it Retrieve platform-observed supplier fulfillment metrics, order sample size and as-of timestamp. Self-reported claims are not substituted for observed data.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_supplier_productsList precisely filtered, approved catalog products for a public supplier storefront.No findings
Why it is in this group
- The name "list_supplier_products" says "list": a word for reading.
Description, as the server wrote it List precisely filtered, approved catalog products for a public supplier storefront.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
lookup_tariffsReturn a preliminary HS-code and destination tariff estimate.Reads text others writeNo findings
Why it is in this group
- The name "lookup_tariffs" 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 Return a preliminary HS-code and destination tariff estimate. Customs classification and the final duty remain subject to broker confirmation.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_productsSearch structured products using exact SKU or GTIN, supplier, material, dimensions, MOQ, price, inventory state, lead time and qualification filters.No findings
Why it is in this group
- The name "search_products" says "search": a word for reading.
Description, as the server wrote it Search structured products using exact SKU or GTIN, supplier, material, dimensions, MOQ, price, inventory state, lead time and qualification filters. Returns approved merchant listings; inventory may be unknown and must be freshly confirmed before quote or order.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_shipping_ratesReturn non-binding shipping estimates from an origin to a destination.Reads text others writeNo findings
Why it is in this group
- The name "search_shipping_rates" 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 Return non-binding shipping estimates from an origin to a destination. Carrier confirmation is required before any transaction.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_suppliersFind approved public supplier storefronts and inspect reviewed credentials and platform-observed performance.Reads private data1 finding
Why it is in this group
- The name "search_suppliers" says "search": a word for reading.
What it can reach
- private-dataThe description's first sentence says "find" and "credential": it reads secrets.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...pplier storefronts and inspect reviewed credentials and platform-observed performance."
Description, as the server wrote it Find approved public supplier storefronts and inspect reviewed credentials and platform-observed performance.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
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.
7 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data1
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write7
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__procurement__contact_support"
]
}
}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:28 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
- 8
- Protocol version
- 2024-11-05
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- none
- RFC 9728 protected resource metadata
- none
- Authorization servers
- none
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- not observed
- Client ID metadata documents
- not observed
- HighThe whole server
The endpoint served tools/list without credentials, and the list has 8 tools that change things (3 destructive, 2 irreversible, 3 write). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://buyingmesh.com/mcp: tools/list returned 20 tools to an anonymous client, including create_order (destructive), update_order_status (destructive), cancel_order (destructive), submit_inquiry (irreversible), contact_support (irreversible) and 3 more
Install
Pinned to version 0.3.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http procurement https://buyingmesh.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__procurement__search_products",
"mcp__procurement__search_suppliers",
"mcp__procurement__get_supplier",
"mcp__procurement__list_supplier_products",
"mcp__procurement__get_product",
"mcp__procurement__compare_quotes",
"mcp__procurement__get_quote",
"mcp__procurement__get_order_status",
"mcp__procurement__compare_supplier_offers",
"mcp__procurement__get_supplier_performance",
"mcp__procurement__search_shipping_rates",
"mcp__procurement__lookup_tariffs"
],
"ask": [
"mcp__procurement__create_quote",
"mcp__procurement__estimate_landed_cost",
"mcp__procurement__request_buyer_confirmation",
"mcp__procurement__submit_inquiry",
"mcp__procurement__contact_support"
],
"deny": [
"mcp__procurement__create_order",
"mcp__procurement__update_order_status",
"mcp__procurement__cancel_order"
]
}
}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 procurement. Review it before you use it.
Capability tags behind 8 rules
- mcp__procurement__search_suppliers private-data
- mcp__procurement__compare_quotes untrusted-input
- mcp__procurement__compare_supplier_offers untrusted-input
- mcp__procurement__search_shipping_rates untrusted-input
- mcp__procurement__lookup_tariffs untrusted-input
- mcp__procurement__estimate_landed_cost untrusted-input
- mcp__procurement__submit_inquiry untrusted-input
- mcp__procurement__contact_support untrusted-input, outbound