MCP App Store
by KeenEthics

Overview

Tusella is a workspace for Etsy sellers. Connect it to work on your own shop's listings from a conversation. Ask about your shop: how many listings are active, which have unpublished changes, the available details of a listing and how it differs from what is live on Etsy. Ask for changes: edit titles, tags, descriptions and prices on one listing or many, arrange photos, create a new listing or copy an existing one. Changes stay in Tusella until you publish. Recover journaled edits when undo is available; photo changes use supported inverse actions. Nothing is published from the conversation. When you are ready, ask for a review and open the link: you confirm publishing yourself in Tusella. Requires a Tusella account with a connected Etsy shop.

Tools

change_revert

ChatGPT
Undo a change by the recovery_ref its receipt returned, or the recovery_ref operation_read or operations_find shows for an applied operation. A single-listing change is undone at once and returns a receipt; an operation is rolled back by a new operation whose handle this returns, and a listing whose field changed again since is reported as blocked rather than overwritten. A recovery_ref that is unknown or already undone is refused with recovery_unavailable. Org-scoped.

listing_create

ChatGPT
Create a listing from nothing, or from_listing_id to deep-copy an existing listing's workspace fields into a new one (never its Etsy identity or state). Give exactly one form. Returns the new listing_id, the target for every later edit.

listing_photos_edit

ChatGPT
Arrange one listing's photos and videos: add a photo from a chat file, URL or uploaded asset, reserve an upload slot, reorder, remove, set alt text, or add, replace, or remove a video. Not destructive — a remove is recovered by re-adding the asset, not by field revert. Variation-photo associations move only through the variation authoring family (listing_variations_preview/apply/propose).

listing_read

ChatGPT
Read everything about one listing, on demand and by part. parts is a subset of the eleven listing parts; include adds summary, the publish-grade Etsy diff, or plain-words publish blockers. media_candidates pages candidate photos with asset IDs for listing_photos_edit add target=active; Use media_gallery for browsing and selecting active photos: an exclusive bounded page without read_id or full photos coverage. Continue on request with next_offset and revision, or use the widget navigation. photo_preview={media_id} returns one bounded native MCP photo preview for an explicitly requested individual image; never use a preview-call burst as a fallback for an oversized gallery or photos read. it is exclusive of other read modes and grants no read coverage. A fitting category_attributes read gives attribute_entries keyed by property_id for an attributes write, preserving value ids, scale ids and multiple values; attributes itself is display text only. A fitting read returns read_id for a later write. Description is available through content exact mode in bounded fragments; other oversized indivisible fields retain their refusal. Content preview is an excerpt with no write coverage. content.field=notes reads private Workspace notes through the same bounded chain, without write coverage or an Etsy source. compact=true replaces repeated description comparison values with exact-content selectors, without covering omitted values, and counts successful readiness checks while retaining every failed check. Prefer compact when combining photos and publish_blockers. Use shop_overview for a shop-wide question and listings_find to locate a listing by seller-facing facts; never ask the seller for an internal listing_id. Read-only; listing-scoped.

listings_edit

ChatGPT
Change listing fields on one listing, on the listings named by listing_ids, or on every listing a query finds. For one seller intent on the same targets, bundle compatible changes in one changes array rather than calling once per field. Resolve needed references first. Change category before looking up category-dependent attributes. Send attributes, annotations, labels, and description replace_text separately from other field changes. Use a fresh client_request_id for a new intent; reuse it only to retry the identical request. Each change is {field, apply}: set a value, merge items into a list, transform with a named op (replace_text {find, replace} in text, increase_percent on price, remove_values from a list), or assign one value per listing id. For assign, include at most 10 listings per call; split larger sets into smaller calls. Setting return_policy_id to null clears Workspace only; if Etsy has a selected policy, publish will refuse that clear. Use another policy id to replace it. A change to one listing is saved at once and returns a receipt whose recovery_ref undoes it through change_revert; there, a replace_text find must occur exactly once in the description and needs based_on_read. A change across several listings, or one that needs confirming such as a category change, returns an operation handle: read its summary and confirm it with operation_authorize, or set apply_safe_proposals=true to confirm a self-authorizable proposal in this call using the same policy and frozen-preview checks. This requires the operation_authorize grant for a name-scoped connection. Seller-only proposals remain proposed. Execution is asynchronous: use the returned status and handle with operation_read to check completion; authorized does not mean applied. Labels apply at once across any number of listings with no operation_authorize step; follow its handle with operation_read. Example: {"client_request_id": "c1", "listing_id": "<id>", "changes": [{"field": "tags", "apply": {"mode": "merge", "append": ["gift"]}}, {"field": "materials", "apply": {"mode": "set", "value": ["cotton"]}}]}. Org-scoped.

listings_find

ChatGPT
Discover and size a set of listings by a ListingQuery, or read named fields for explicit listing_ids. Returns bounded rows and a read_id a later set-write can bind to. Rows paginate to fit the budget; use next_offset. External MCP display_rows add presentation fields without expanding requested rows or read coverage. When the host displays the widget, avoid duplicating its photos and returned statistics as a Markdown table unless requested. For one listing card, use listing_ids=[id]. Selection supplies context for the next seller request, not write authority. Never both query and listing_ids. Read-only; org-scoped.

operation_authorize

ChatGPT
Authorize a proposed operation so it proceeds to execution — the normal next step after a proposal returns its handle. Refuses only where the operation is marked for the seller alone, answering with the Tusella review link. Repeating it changes nothing. Org-scoped.

operation_control

ChatGPT
Cancel a proposed or authorized operation, or pause, resume, or cancel queued or executing asynchronous work. Cancelling one that has not started yet ends it outright; cancelling a running one stops further work. Repeating an action changes nothing. Org-scoped.

operation_read

ChatGPT
Follow an operation a proposal created: what it will do, what it did, where it stands. detail is summary (default), targets, or preview — never embeds every target in a summary. Read-only; org-scoped.

operations_find

ChatGPT
Locate operations by conversation, listing, kind, or status — reaching one proposed in an earlier turn with no producer call. conversation defaults to current when the call carries a durable conversation, else any (the whole organization, including operations with no origin conversation). Every returned operation_id is admitted for operation_read and operation_control in this turn; a returned recovery_ref undoes that operation through change_revert. Read-only; org-scoped.

pin_create

ChatGPT
Create one real Tusella Pin draft. Drafting never submits. Choose a photo or ordered slides, account, board, text and destination.

pin_edit

ChatGPT
Edit one draft using its last read revision. To undo a draft edit, read current state and edit the prior values. Submitted Pins refuse this draft operation.

pin_read

ChatGPT
Read a real Tusella Pin’s current draft, revisions, delivery outcome and remote URL. Unknown or simulated outcomes are not publication proof.

pin_revert

ChatGPT
Undo the most recent draft edit using its recovery_ref and current draft revision. Refuses when another change or submission has advanced the Pin.

pin_submit

ChatGPT
Publish or schedule ONE Pin explicitly directed by the user. First obtain their specific Pin, account, board and timing instruction; do not submit a drafting-only request. Uses the separate Pinterest publication grant. Cancel only before sending; published Pins have no ordinary undo. A queued result is not proof of publication.

pins_find

ChatGPT
Find Tusella Pins by shop, listing, Pinterest account or lifecycle, with bounded continuation.

pinterest_media_find

ChatGPT
Find team photos or an attached listing’s photos, with Pinterest eligibility and reasons. Use media ids to prepare a Pin.

pinterest_media_import

ChatGPT
Import one chat photo into your team's photo library. Returns a ready media_asset_id for single or carousel Pin drafts. No listing is required and importing never submits a Pin. Retry the same photo with the same client_request_id. Reuse file_id when possible; fresh upload IDs are replayed only after validating identical original bytes.

pinterest_media_preview

ChatGPT
Preview one team photo as an inline image. Preview is optional before user-directed Pinterest submission.

pinterest_reference_lookup

ChatGPT
Find accessible shops, Pinterest accounts, public boards or board sections. Each board page is live and account-specific.

publish_review_comment

ChatGPT
Leave a comment on a saved Publish Review for the seller: why this set, what to check before publishing. Appends to the review's thread; never publishes, schedules, or changes the review's listings. The review must already be saved (publish_review_create returns one).

publish_review_create

ChatGPT
Prepare a durable Saved review for the seller to confirm in Tusella. Never dispatches, publishes, or schedules — the seller's own Publish click is the sole authorization. Give listing_ids or query, never both; a bound listing may be used when both are omitted. An optional name labels the set in Publishing. When no included listing is ready to publish, returns refused=true with the blockers instead of an error.

reference_lookup

ChatGPT
Find the valid value before writing a constrained field: category search, category attributes and values, shop sections, shipping profiles, return policies, production partners (created/edited in Etsy), readiness (processing) definitions — the source of readiness_state_id — or the shop's labels (archived ones excluded unless include_archived is true). An empty result for a shop kind with zero rows is not an error. Shop reference rows also return reference_id, the local UUID for cross-shop Copy mappings; keep using the named provider IDs for listing edits. For attributes first use kind=category_attributes with include_values=false; required_only=true finds required attributes. If include_values is omitted, fitting catalogs remain complete and an oversized catalog returns compact descriptors instead. values_included=false means search/page category_attribute_values by taxonomy_id, property_id and the returned freshness.revision_id. Profile kinds accept entity_id with explicit shop_id for exact qualified parent fields/fingerprint; profile_section=usage, destinations or upgrades pages exact evidence. receipt_ref reads bounded before/after/provider/request evidence via receipt_section. Original processing units remain unknown without receipt input. Shop-profile reads never refresh; use shop_profiles_refresh explicitly. Keep revision_id and query unchanged across pages; restart discovery if a revision is unavailable. Read-only; org-scoped.

shop_overview

ChatGPT
Orient on a shop before finding anything: listing counts by status and by change-vs-Etsy state, shop sections with listing counts, top tags, active-listing price range, and unpublished-changes count. Answers for a shop with zero listings. compact=true returns counts and explicit omissions; reference_lookup pages full shop sections, while top tags are a capped sample. Read-only; org-scoped.

team_overview

ChatGPT
Orient on the connected team, its shops and their terms, your role and access. shops_page optionally pages current connected shops in stable ID order; consistency is live across pages.

change_revert

Claude

listing_create

Claude

listing_photos_edit

Claude

listing_read

Claude

listings_edit

Claude

listings_find

Claude

operation_authorize

Claude

operation_control

Claude

operation_read

Claude

operations_find

Claude

publish_review_comment

Claude

publish_review_create

Claude

reference_lookup

Claude

shop_overview

Claude

team_overview

Claude

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

Similar Apps