rubenayla avatar

Partle

rubenayla/partle-mcp

Connects Claude to Partle's local marketplace of 130,000+ products across 16,000 physical stores. You get 20 tools: search and read the catalog without auth, then create or update listings with OAuth or an API key. The write side includes inventory tracking (owned, wanted, for sale, sold) and public buy requests that appear on the /wanted feed. Supports semantic search across languages, image uploads, and price filtering. Run it remotely via streamable HTTP at partle.rubenayla.xyz/mcp/ or install locally with uvx partle-mcp. Useful when you want an agent to find products near you or post items for sale without leaving the chat.

tools
30
transport
HTTP
last updated
May 10, 2026

Install

From registry metadata
$ npx add-mcp https://partle.rubenayla.xyz/mcp/ --name marketplace

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http marketplace https://partle.rubenayla.xyz/mcp/

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 30 tools

Verified live against the running server on Nov 6, 2026.

search_productsSearch 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 co...11 params

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 co...

Parameters* required
has_pricevalue
limitinteger
default: 20
max_pricevalue
min_pricevalue
offsetinteger
default: 0
query*string
semanticboolean
default: false
sort_byvalue
store_idvalue
super_searchboolean
default: false
tagsvalue
get_productGet 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 sea...1 params

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 sea...

Parameters* required
product_id*integer
search_storesSearch 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 reque...2 params

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 reque...

Parameters* required
limitinteger
default: 20
queryvalue
get_storeGet 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 retur...1 params

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 retur...

Parameters* required
store_id*integer
get_statsGet 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 r...

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 r...

No parameters. Call it with no arguments.

search_wantedBrowse 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 dema...3 params

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 dema...

Parameters* required
limitinteger
default: 20
offsetinteger
default: 0
queryvalue
create_buy_requestPost 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...9 params

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...

Parameters* required
api_keyvalue
contactvalue
currencyvalue
default: €
descriptionvalue
max_pricevalue
namevalue
product_idvalue
quantityinteger
default: 1
reference_urlvalue
submit_feedbackReport 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: `feed...2 params

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: `feed...

Parameters* required
api_keyvalue
feedback*string
create_productCreate 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` (pref...9 params

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` (pref...

Parameters* required
api_keyvalue
currencyvalue
default: €
descriptionvalue
idempotency_keyvalue
listing_typestring
default: in_stock
name*string
pricevalue
store_idvalue
urlvalue
update_productUpdate 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...7 params

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...

Parameters* required
api_keyvalue
currencyvalue
descriptionvalue
namevalue
pricevalue
product_id*integer
urlvalue
delete_productPermanently 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. Idem...2 params

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. Idem...

Parameters* required
api_keyvalue
product_id*integer
delete_product_imageRemove 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 recor...3 params

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 recor...

Parameters* required
api_keyvalue
image_id*integer
product_id*integer
get_my_productsList 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_pro...2 params

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_pro...

Parameters* required
api_keyvalue
limitinteger
default: 50
get_upload_urlMint 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...2 params

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...

Parameters* required
api_keyvalue
product_id*integer
upload_product_imageAttach 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 Imgu...3 params

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 Imgu...

Parameters* required
api_keyvalue
image_url*string
product_id*integer
get_my_inventoryList 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 includ...7 params

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 includ...

Parameters* required
api_keyvalue
limitinteger
default: 50
offsetinteger
default: 0
product_idvalue
projectvalue
qvalue
statusvalue
add_inventory_itemAdd 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``. Eithe...15 params

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``. Eithe...

Parameters* required
acquisition_currencyvalue
acquisition_pricevalue
api_keyvalue
asking_currencyvalue
asking_pricevalue
conditionvalue
external_idvalue
external_linkvalue
namevalue
notesvalue
product_idvalue
projectvalue
purchased_atvalue
quantitynumber
default: 1
statusstring
default: owned
update_inventory_itemPatch 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 c...16 params

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 c...

Parameters* required
acquisition_currencyvalue
acquisition_pricevalue
api_keyvalue
asking_currencyvalue
asking_pricevalue
conditionvalue
external_idvalue
external_linkvalue
item_id*integer
namevalue
notesvalue
product_idvalue
projectvalue
purchased_atvalue
quantityvalue
statusvalue
delete_inventory_itemPermanently 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 ther...2 params

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 ther...

Parameters* required
api_keyvalue
item_id*integer
mark_for_saleMove 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 `condit...5 params

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 `condit...

Parameters* required
api_keyvalue
asking_currencystring
default: €
asking_price*number
conditionvalue
item_id*integer
mark_soldMark 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: Optiona...2 params

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: Optiona...

Parameters* required
api_keyvalue
item_id*integer
get_account_settingsRead 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.

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.

No parameters. Call it with no arguments.

update_account_settingsSet 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.1 params

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.

Parameters* required
theme*string
set_account_usernameSet 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.1 params

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.

Parameters* required
username*string
list_account_api_keysList your key IDs, labels, prefixes and dates, never secrets. Requires OAuth security:read.

List your key IDs, labels, prefixes and dates, never secrets. Requires OAuth security:read.

No parameters. Call it with no arguments.

create_account_api_keyCreate 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 settin...1 params

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 settin...

Parameters* required
labelvalue
rotate_account_api_keyCreate 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...1 params

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...

Parameters* required
key_id*integer
revoke_account_api_keyImmediately 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.1 params

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.

Parameters* required
key_id*integer
list_connected_appsList apps with active access to your account and their permissions. Requires OAuth security:read.

List apps with active access to your account and their permissions. Requires OAuth security:read.

No parameters. Call it with no arguments.

revoke_connected_appRevoke 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.1 params

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.

Parameters* required
client_id*string

Sponsors

Readme

Partle Marketplace MCP Server

Verified on MseeP

Model Context Protocol server for the Partle marketplace — let your AI shop here: search products and stores, get prices and purchase links, or ask it to add a listing for you, all without leaving your assistant.

Live product and store coverage is available through the get_stats tool. Public catalogue reads need no auth. Writes and private inventory reads need OAuth or a pk_… API key.

Two ways to run it

Remote (recommended — zero setup)

Point your MCP client at:

https://partle.rubenayla.xyz/mcp/

That's it. Streamable HTTP transport, MCP spec 2025-06-18. Per-client install instructions: /documentation/mcp-setup/.

Local stdio (for clients that prefer installable servers, or for Glama / Smithery scoring)

pip install partle-mcp
partle-mcp

Or with uvx (no install):

uvx partle-mcp

Or with Docker:

docker run --rm -i ghcr.io/rubenayla/partle-mcp

View the full README on GitHub

Details

Repository
github.com/rubenayla/partle-mcp
Website
partle.rubenayla.xyz
Category
Search & Web Crawling
Transport
HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026

Related Search & Web Crawling MCP servers

View all
1trusteed avatarMcp Gatewaytrusteed/mcpwebstoreAgentic commerce gateway: discovery, search, checkout across Shopify/Woo/Odoo/PrestaShop.0stars
2yevhen-kalyna avatarAUTO.RIA Used Carsyevhen-kalyna/autoria-mcpMCP server for the AUTO.RIA (ria.com) used-car API: search, listings, AI average prices.0stars
3yybd avatarmulti-mailyybd/multi-mail-mcpSeveral Gmail accounts: search, read, draft, send, labels and Google Calendar. Own OAuth client.0stars
4waggle-ai avatarWagglewaggle-ai/waggle-claude-code-pluginDiscover, search, invoke, and rate A2A (Agent-to-Agent) protocol agents.0stars
5zoulouzaza76 avatarLe Scribe Audio — Transcription Audio & Vidéo (FR)zoulouzaza76/lescribeaudio-mcpOfficial Le Scribe Audio MCP server: search, read, summarize & code French audio transcripts.0stars
6pipeworx-io avatarBrave Searchpipeworx-io/mcp-brave-searchBrave Search MCP — independent web index (no Google/Bing dependency)0stars