{"ok":true,"site":{"host":"canceldesk.vercel.app","url":"https://canceldesk.vercel.app/","type":"live","desc":"Cancel subscriptions without hunting for the cancel button. A fictional WebMCP demonstration.","tools":[{"name":"list_subscriptions","kind":"answer","impl":"imperative","description":"List the user's simulated subscriptions. Optionally filter by status or category. This is read-only.","title":"List subscriptions","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused","cancelled"],"description":"Optional subscription status filter."},"category":{"type":"string","maxLength":50,"description":"Optional exact category name, matched case-insensitively."},"includeProtected":{"type":"boolean","default":true,"description":"Whether protected subscriptions should be included."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"get_subscription","kind":"answer","impl":"imperative","description":"Get complete details, monthly equivalent, and inactivity for one simulated subscription. This is read-only.","title":"Get subscription","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable subscription id, such as fitclub or cloudpro."}},"required":["subscriptionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"search_subscriptions","kind":"answer","impl":"imperative","description":"Search subscriptions by fictional provider, plan, or category. This is read-only.","title":"Search subscriptions","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":100,"description":"Provider, plan, or category text to search for."}},"required":["query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"get_upcoming_charges","kind":"answer","impl":"imperative","description":"Find simulated subscription charges due within a number of days. This is read-only.","title":"Get upcoming charges","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"days":{"type":"integer","minimum":1,"maximum":90,"default":7,"description":"Number of days ahead to inspect for charges."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"find_unused_subscriptions","kind":"answer","impl":"imperative","description":"Find active subscriptions unused for at least N days and optionally costing at least a monthly amount. Protected items can be excluded. This is read-only.","title":"Find unused subscriptions","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"days":{"type":"integer","minimum":1,"maximum":730,"default":60,"description":"Minimum number of days since the subscription was last used."},"minMonthlyPrice":{"type":"number","minimum":0,"maximum":10000,"default":0,"description":"Minimum monthly-equivalent price in USD, inclusive."},"excludeProtected":{"type":"boolean","default":true,"description":"Exclude subscriptions the user protected from cancellation."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"calculate_subscription_spend","kind":"answer","impl":"imperative","description":"Calculate total monthly and annualized spend for active simulated subscriptions. This is read-only.","title":"Calculate subscription spend","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"calculate_cancellation_savings","kind":"answer","impl":"imperative","description":"Calculate monthly and annual savings for a specific list of subscription IDs without changing state. Use when calculating savings for potential or unused cancellation candidates.","title":"Calculate cancellation savings","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"subscriptionIds":{"type":"array","minItems":1,"maxItems":20,"description":"Stable subscription ids whose potential savings should be totaled.","items":{"type":"string","minLength":1,"maxLength":64}}},"required":["subscriptionIds"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"get_cancellation_policy","kind":"answer","impl":"imperative","description":"Inspect provider-specific cancellation policy, impact, and equivalent UI journey without changing state. This is read-only.","title":"Get cancellation policy","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable subscription id, such as fitclub or cloudpro."}},"required":["subscriptionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"get_cancellation_options","kind":"answer","impl":"imperative","description":"Get safe provider-specific options such as cancel, pause, skip, or cancel-after-order. This is read-only.","title":"Get cancellation options","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable subscription id, such as fitclub or cloudpro."}},"required":["subscriptionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"prepare_cancellation","kind":"act","impl":"imperative","description":"Prepare one simulated cancellation, calculate impact, and surface blockers or offers. This never performs final cancellation. It returns a short-lived token only when ready; explicit user approval is still required before confirm_cancellation.","title":"Prepare cancellation","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable subscription id, such as fitclub or cloudpro."}},"required":["subscriptionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"prepare_cancellation_plan","kind":"act","impl":"imperative","description":"Fast multi-subscription planning for requests such as cancel unused subscriptions while keeping named services. Protects the requested subscriptions, finds current matches, calculates aggregate savings, and prepares every candidate in one animated operation. It never performs final cancellation and returns a short-lived batch authorization token for later explicit approval.","title":"Prepare cancellation plan","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"days":{"type":"integer","minimum":1,"maximum":730,"default":60,"description":"Minimum inactivity in days."},"minMonthlyPrice":{"type":"number","minimum":0,"maximum":10000,"default":0,"description":"Inclusive minimum monthly-equivalent price in USD."},"protectedSubscriptionIds":{"type":"array","maxItems":20,"default":[],"description":"Stable ids the user explicitly asked to keep or protect.","items":{"type":"string","minLength":1,"maxLength":64}}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"resolve_retention_offer","kind":"act","impl":"imperative","description":"Apply the user's explicit decision on an already surfaced retention offer. Accepting keeps the service; continuing prepares cancellation but still does not cancel.","title":"Resolve retention offer","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable id of the subscription with the unresolved offer."},"decision":{"type":"string","enum":["accept_offer","continue_cancellation"],"description":"The user's explicit decision after the offer has been shown."}},"required":["subscriptionId","decision"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"confirm_cancellation","kind":"transact","impl":"imperative","description":"CONSEQUENTIAL: Finalize one simulated cancellation only after explicit user approval. Requires the exact unexpired token returned by prepare_cancellation or resolve_retention_offer. Never call speculatively or as part of discovery.","title":"Confirm cancellation","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable id of the prepared subscription."},"confirmationToken":{"type":"string","pattern":"^cd_[A-Za-z0-9]+$","maxLength":64,"description":"Exact unexpired token returned by preparation after the user reviewed the impact."}},"required":["subscriptionId","confirmationToken"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"finalize_cancellation_plan","kind":"transact","impl":"imperative","description":"CONSEQUENTIAL: Finalize exactly one previously reviewed multi-subscription plan after explicit user approval. Requires the exact unexpired batch token from prepare_cancellation_plan and explicit decisions for every surfaced retention offer. Validates the complete plan before changing subscriptions, then animates each approved result.","title":"Finalize cancellation plan","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"batchAuthorizationToken":{"type":"string","pattern":"^cd_[A-Za-z0-9]+$","maxLength":64,"description":"Exact unexpired token returned by prepare_cancellation_plan after the user reviewed the plan."},"retentionDecisions":{"type":"array","maxItems":20,"default":[],"description":"Explicit user decisions for every retention offer in the plan.","items":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64},"decision":{"type":"string","enum":["accept_offer","continue_cancellation"]}},"required":["subscriptionId","decision"],"additionalProperties":false}}},"required":["batchAuthorizationToken"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"pause_subscription","kind":"transact","impl":"imperative","description":"Pause an eligible simulated subscription for 1–8 weeks. This is reversible and does not cancel it.","title":"Pause subscription","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable id of a subscription whose provider offers pausing."},"weeks":{"type":"integer","minimum":1,"maximum":8,"default":4,"description":"Pause duration in weeks."}},"required":["subscriptionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"skip_delivery","kind":"act","impl":"imperative","description":"Skip the next available MealBox delivery while preserving the subscription. A currently processing order is not affected.","title":"Skip delivery","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable subscription id, such as fitclub or cloudpro."}},"required":["subscriptionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"protect_subscription","kind":"transact","impl":"imperative","description":"Protect or unprotect a simulated subscription (e.g. subscriptionId 'streambox', 'fitclub', 'cloudpro', 'mealbox'). Use when user says 'Never cancel X', 'Keep X', 'Protect X', or 'Cancel everything except X'. Protection prevents preparation and final cancellation.","title":"Protect subscription","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable id of the subscription to protect or unprotect, such as streambox."},"protected":{"type":"boolean","default":true,"description":"True to prevent cancellation preparation and confirmation; false to remove protection."}},"required":["subscriptionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"get_cancellation_run_status","kind":"answer","impl":"imperative","description":"Read current reactive mission-control statuses, decisions, and progress for prepared subscription operations.","title":"Get cancellation run status","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"abandon_cancellation_run","kind":"act","impl":"imperative","description":"Safely abandon or clear prepared cancellations and pending retention offers without cancelling anything. Use when the user says 'Never mind', 'Don't cancel these', 'Cancel this run', or wants to abort prepared operations.","title":"Abandon cancellation run","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"subscriptionId":{"type":"string","minLength":1,"maxLength":64,"description":"Optional specific subscription id to remove from the prepared run. If omitted, clears the entire run."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]},{"name":"reset_demo","kind":"act","impl":"imperative","description":"Reset all fictional subscriptions, protections, prepared operations, and activity history to CancelDesk's deterministic seed state. Use before an isolated demo or test run. This never affects a real subscription or external provider.","title":"Reset CancelDesk demo","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/run","/subscriptions/streambox","/providers/streambox","/subscriptions/fitclub","/providers/fitclub"]}],"category":"Finance & Crypto","favicon":"/favicons/canceldesk.vercel.app.ico","apiSurface":"spec","toolCount":20}}