Partle
Search products in nearby stores. Agents can also list items for sale on a user's behalf.
| Endpoint | https://partle.rubenayla.xyz/mcp/ (streamable-http) |
|---|---|
| Registry version | 1.2.0 |
| Now | 30 tools · grade F (44) · pin ts_2aea5d0ea8e4e536ace799b946b87aea · protocol 2025-06-18 |
| First / last listed | 2026-11-12 00:24 UTC / 2026-11-12 00:24 UTC |
| Grade over time | 2026-11-12: F (44), 30 tools |
Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.
Tools: search_products get_product search_stores get_store get_stats search_wanted create_buy_request submit_feedback create_product update_product delete_product delete_product_image get_my_products get_upload_url upload_product_image get_my_inventory add_inventory_item update_inventory_item delete_inventory_item mark_for_sale mark_sold get_account_settings update_account_settings set_account_username list_account_api_keys create_account_api_key rotate_account_api_key revoke_account_api_key list_connected_apps revoke_connected_app
search_products | Search Partle's product catalog by name or description.
CRITICAL SEARCH INSTRUCTION: Reason from the job to the product class first,
then search with a descriptive product phrase (e.g. including substrate, material,
or size class). DO NOT blindly search using the user's raw conversational words.
Transform questions like 'what do I need to attach a mirror to a brick wall?'
params: query*, min_price, max_price, tags, store_id, sort_by, has_price, semantic, super_search, limit, offset |
get_product | Get the full record for a single product by its numeric ID.
Use after `search_products` returns a candidate the user is interested in,
when you need fields not in the search summary (full description, all
images, sold status, expiration). Don't loop `get_product` over many search
results — re-search with tighter filters instead.
Read-only. No authentication.
Args:
params: product_id* |
search_stores | Search or list stores in the Partle marketplace.
Use for store-led questions ("what hardware shops are in Madrid?") rather
than product-led ones (use `search_products` for that). Pass no query to
browse the whole catalog.
Read-only. No authentication. Rate-limited to 100 requests/hour per IP.
Args:
query: Free-text search over store name and address. Omit to list
params: query, limit |
get_store | Get the full record for a single store by its numeric ID.
Use after `search_stores` to retrieve fields not in the search summary
(full address, owner profile, contact details). For a list of *products*
in that store, call `search_products(store_id=…)` instead — this tool
returns store metadata only.
Read-only. No authentication.
Args:
store_id: Integer `id` from params: store_id* |
get_stats | Get top-level Partle platform statistics.
Use for size questions ("how big is Partle?", "how many stores does
Partle cover?"). Aggregate counts only — no per-product or per-store
data; use `search_products` / `search_stores` for that.
Read-only. No authentication. Cheap, but rarely changes — long-running
agents should cache the result.
Returns:
``{"total_products params: none |
search_wanted | Browse public buy requests — what users are looking to buy but
haven't found through normal supply.
The demand side of Partle. Use this when an agent wants to **offer
matches** (cross-reference open requests against `search_products`
and surface hits) or just survey unmet demand. Every result is a
public posting — users put these up specifically so suppliers can
reach them params: query, limit, offset |
create_buy_request | Post a public buy request — an ad asking suppliers to reach out.
Use when the user wants others to know they're looking to buy
something. **Independent of personal inventory** — inventory is the
user's private workshop tracking; a buy request is a sales-facing
ad on the public demand feed at /wanted.
Authenticated. Required OAuth scope: ``inventory:write``.
**Not idempote params: name, description, quantity, max_price, currency, contact, reference_url, product_id, api_key |
submit_feedback | Report a problem with **the Partle marketplace API/MCP itself**.
Authenticated. Prefer **OAuth**: connect once via the consent flow and the
bearer token is attached automatically. **Fallback**: pass an `api_key`
(prefix `pk_`, generate at /account). Required OAuth scope: `feedback:write`.
Feedback is attributed to your account so reports are trustworthy and the
channel can't b params: feedback*, api_key |
create_product | Create a new product listing on Partle.
Authenticated. Prefer **OAuth**: connect once via the consent flow on
claude.ai (or any MCP client that supports OAuth) and the bearer token
is attached automatically — no `api_key` parameter needed. **Fallback**:
pass an `api_key` (prefix `pk_`, generate at /account) for programmatic
or non-OAuth clients.
Required OAuth scope: `pro params: name*, description, price, currency, url, store_id, listing_type, idempotency_key, api_key |
update_product | Update an existing product listing. Only provided fields are changed.
Authenticated. OAuth (scope `products:write`) preferred; `api_key` accepted
as fallback.
Only fields you pass are changed; omitted fields are preserved.
Idempotent — calling twice with the same input yields the same final
state. For creating a new listing, use `create_product` instead.
Caller must own params: product_id*, name, description, price, currency, url, api_key |
delete_product | Permanently delete a product listing and all its images. Destructive.
Authenticated. OAuth (scope `products:write`) preferred; `api_key` fallback.
Use only when the user explicitly asks to remove a listing they own.
Cannot be undone — there is no soft-delete or trash bin. Idempotent:
deleting a product that no longer exists returns an error, not duplicate
side effects.
C params: product_id*, api_key |
delete_product_image | Remove a specific image from a product. Destructive, idempotent.
Authenticated. OAuth (scope `products:write`) preferred; `api_key` fallback.
Use when an image was uploaded by mistake or the merchant updated their
listing. The product itself is preserved — only the image record and its
file are removed. To remove the product entirely use `delete_product`.
Args:
produ params: product_id*, image_id*, api_key |
get_my_products | List products created by the authenticated user.
Authenticated. OAuth (scope `products:read`) preferred; `api_key` fallback.
Use when the user asks "what have I listed?" or before bulk operations
like updating prices across multiple of their products. Distinct from
`search_products`, which searches the public catalog without owner
scoping.
Read-only.
Args:
l params: limit, api_key |
get_upload_url | Mint a one-shot signed upload URL for a product you own.
Authenticated. OAuth (scope `products:write`) preferred; `api_key` fallback.
Use this when you have **local image bytes** (a file the user attached,
bytes you generated/downloaded in your sandbox) and you want to attach
them to a product that already exists. Common cases:
- `create_product` returned 409 (duplicate name params: product_id*, api_key |
upload_product_image | Attach an image to an existing product by giving Partle a public URL
to download the image from.
Authenticated. OAuth (scope `products:write`) preferred; `api_key` fallback.
**When to use this tool**: the image is already hosted at a public URL
(a scraped product page, an Imgur link, a CDN URL the user provided).
Partle's server fetches it and stores it.
**When NOT to us params: product_id*, image_url*, api_key |
get_my_inventory | List the caller's personal inventory items.
Authenticated. Required OAuth scope: `inventory:read` (or pass an
`api_key` for legacy/programmatic clients).
Use this when the user asks "what do I own?", "what's on my
wishlist?", "what am I selling?", etc. The returned rows include
every status by default; pass `status` to filter.
Args:
status: Filter by lifecycle. O params: status, product_id, project, q, limit, offset, api_key |
add_inventory_item | Add an item to the caller's personal inventory.
Authenticated. Required OAuth scope: `inventory:write`.
One creation tool covers all lifecycle states — set ``status`` based
on the user's intent: "I bought" → ``owned``, "I want" → ``wanted``,
"I'm selling" → ``for_sale``. Either ``product_id`` (linked to an
existing Partle product) or ``name`` (freeform) must be set.
**No params: name, product_id, status, quantity, notes, acquisition_price, acquisition_currency, purchased_at, asking_price, asking_currency, condition, external_link, external_id, project, api_key |
update_inventory_item | Patch an existing inventory item. Only provided fields change.
Authenticated. Required OAuth scope: `inventory:write`. Caller must
own the item (404 otherwise — we don't leak existence).
Idempotent: calling twice with the same input yields the same final
state. For lifecycle convenience, see `mark_for_sale` and
`mark_sold` which set the right combination of fields atomically. params: item_id*, name, product_id, status, quantity, notes, acquisition_price, acquisition_currency, purchased_at, asking_price, asking_currency, condition, external_link, external_id, project, api_key |
delete_inventory_item | Permanently delete an inventory row.
Authenticated. Required OAuth scope: `inventory:write`. Caller must
own the item (404 otherwise). Hard delete — no soft-delete.
Args:
item_id: ID of the row to delete.
api_key: Optional API key (`pk_*`, generate at /account).
Used when there is no OAuth token, and also when the OAuth
token lacks the required params: item_id*, api_key |
mark_for_sale | Move an inventory item to status=for_sale and set listing fields.
Convenience wrapper over `update_inventory_item` that matches a
natural user request ("list my drill for sale at 30€"). Sets all
three columns (`status`, `asking_price`, `asking_currency`, and
optionally `condition`) atomically.
Authenticated. Required OAuth scope: `inventory:write`. Caller must
own the ite params: item_id*, asking_price*, asking_currency, condition, api_key |
mark_sold | Mark an inventory item as sold (status=sold).
Convenience wrapper over `update_inventory_item` for the natural
"I sold the drill" request.
Authenticated. Required OAuth scope: `inventory:write`. Caller must
own the item.
Args:
item_id: ID of the inventory row.
api_key: Optional API key (`pk_*`, generate at /account).
Used when there is no OAuth to params: item_id*, api_key |
get_account_settings | Read your account ID, email, username and theme. Requires OAuth account:read.
Passwords and key secrets are never returned. No other account can be selected.
A null theme means no account preference has been set; the browser keeps its local choice.
params: none |
update_account_settings | Set your account theme to light, dark, or system. Requires OAuth account:write.
The website applies it on login, reload or return to its tab. This only
changes the theme; passwords, roles and sign-in providers cannot be changed.
params: theme* |
set_account_username | Set your username once, only if unset. Requires OAuth account:write.
Use 3–20 letters, digits, underscores or dashes. Existing usernames cannot
be changed. Ask the user which public username they want before setting it.
params: username* |
list_account_api_keys | List your key IDs, labels, prefixes and dates, never secrets. Requires OAuth security:read. params: none |
create_account_api_key | Create a full-access catalog/inventory API key. Requires OAuth security:write.
The secret is returned ONCE. Store it securely; never include it in a public
message or logs. This grants broader catalog/inventory access than a limited
OAuth token. It cannot manage account settings or credentials through MCP.
Each call creates a new key; do not retry blindly after a lost response.
params: label |
rotate_account_api_key | Create a replacement for your key, keeping the old key ACTIVE. Requires OAuth security:write.
Returns the replacement secret ONCE with its new ID. Install it in the
consumer, test it, then call revoke_account_api_key with previous_key_id.
Do not revoke until the replacement is working. Each call creates a key;
do not retry blindly after a lost response. Never publish the secret.
params: key_id* |
revoke_account_api_key | Immediately revoke one of your API keys. Requires OAuth security:write.
Consumers using the key will lose access. For rotation, first install and
test the replacement returned by rotate_account_api_key.
params: key_id* |
list_connected_apps | List apps with active access to your account and their permissions. Requires OAuth security:read. params: none |
revoke_connected_app | Revoke an app's access AND refresh tokens for your account. Requires OAuth security:write.
This disconnects the app immediately. Revoking your own calling app also
works, but subsequent requests will fail until you reconnect with consent.
params: client_id* |
Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.