Skip to main content
Glama
304,976 tools. Last updated 2026-07-22 05:00

"A tool or method for drawing or creating illustrations" matching MCP tools:

  • Attach a Stripe payment method to your Disco account. The payment method must be tokenized via Stripe's API first — card details never touch Disco's servers. Required before purchasing credits or subscribing to a paid plan. To tokenize a card, call Stripe's API directly: POST https://api.stripe.com/v1/payment_methods with the stripe_publishable_key from your account info. Args: payment_method_id: Stripe payment method ID (pm_...) from Stripe's API. api_key: Disco API key (disco_...). Optional if DISCOVERY_API_KEY env var is set.
    Connector
  • Create a local container snapshot (async). Runs in background — returns immediately with status "creating". Poll list_snapshots() to check when status becomes "completed" or "failed". Available for VPS, dedicated, and cloud plans (any plan with max_snapshots > 0). Local snapshots are stored on the host disk and count against disk quota. Requires: API key with write scope. Args: slug: Site identifier description: Optional description (max 200 chars) Returns: {"id": "uuid", "name": "snap-...", "status": "creating", "storage_type": "local", "message": "Snapshot started. Poll list_snapshots() to check status."} Errors: VALIDATION_ERROR: Max snapshots reached or insufficient disk quota
    Connector
  • Open an interactive DXF viewer the user can pan, zoom, and toggle layers in (renders in-chat on MCP Apps-capable hosts). Use this when the user wants to see or explore the drawing themselves; for your own analysis use describe_dxf (facts) or render_dxf (image). The viewer shows only the drawing from this call. Delivery is handled by the widget itself: small drawings are embedded in the result and larger URL-sourced drawings are fetched by the widget through its own tool call — never re-fetch or inline the file for the viewer's sake, and don't blind-retry if the user reports an empty viewer (the viewer posts its actual status back to the conversation context).
    Connector
  • Execute JavaScript code against the Wix REST API. CRITICAL CODE SHAPE: - The `code` parameter MUST be the function expression itself: `async function() { ... }` or `async () => { ... }`. - Do NOT send a script body like `const result = await ...; return result;`. - Do NOT call the function yourself. The tool calls it for you. - Put all `const`, `await`, and `return` statements inside the function body. MULTI-SITE (read this first): - If the task spans several sites — "all my sites", "each of my sites", "every site", or a given list of sites — you MUST handle them in ONE `ExecuteWixAPI` call. Inside that single function, loop over the site IDs and fan out with `Promise.allSettled`, passing a per-request `siteId` to each `wix.request({ scope: "site", siteId, method, url, body })`. - Do NOT make a separate `ExecuteWixAPI` call per site. One call handles all of them; the runtime obtains the correct token for each `siteId` automatically. - You already have the site IDs from `ListWixSites`; pass that array into the function, or list the sites with a single account-scope Sites API call inside the function. See the "multi-site" example below. Do not rely on memory for Wix API endpoints, methods, schemas, or request bodies. Before writing code, use SearchWixAPISpec or the search, browse, read-docs, and schema tools to confirm the exact API URL, HTTP method, request body structure, schema field names, required fields, enum values, and auth context. Before accessing fields on a response object, know the exact shape — don't guess paths like `result.id` when the actual path might be `result.results[0].item.id`. When you fetch the method schema for the request body, include `responses: method.responses` at the same time — it costs nothing and tells you exactly what fields come back. When SearchWixAPISpec returns a method schema, use `method.publicUrl` for ExecuteWixAPI when available; do not use `method.servers[0]`, which may be an internal Wix host. Pass the docs article, recipe, or schema URLs you used in the `sourceDocUrls` parameter. Then write code using wix.request(). Auth is handled automatically — do NOT set Authorization, wix-site-id, or wix-account-id headers. This tool overlaps with `CallWixSiteAPI` and `ManageWixSite`: all can call Wix REST APIs. Use `ExecuteWixAPI` when code helps express the task: repeating one API call in a loop, paginating through results, transforming data between calls, branching on API responses, or chaining several related API calls in one operation. Probing is useful when it is read-only: use GET/query/list/search calls to inspect existing state, resolve real IDs, confirm response shapes, or verify a previous write. For create/update/delete calls, search docs, read docs, and inspect schemas first; call the mutation only with real resolved inputs, and avoid using placeholder IDs or speculative mutation calls just to discover validation behavior or response shape. If a mutation succeeds but you need more details, use the returned data or follow up with a read-only GET/query; do not repeat the mutation only to get a different response shape. Use `wix.request({ method, url, body })` for API calls. Scope defaults to `"site"` when the ExecuteWixAPI `siteId` parameter is passed, otherwise `"account"`. Set `scope: "site"` explicitly for site-level APIs, which is the common case for business domains such as Stores, Bookings, CRM, Forms, CMS, Events, and Blog. Set `scope: "account"` explicitly for account-level APIs such as Sites, Site Folders, Domains, and User Management, or when the docs/schema indicate account-level auth. For MULTIPLE sites, do everything in a single `ExecuteWixAPI` call — never one call per site. Map over the site IDs and fan out with `Promise.allSettled`, passing a per-request `siteId` to each `wix.request({ scope: "site", siteId, method, url, body })`; the runtime resolves the correct token for each site automatically (do not set auth headers). For a SINGLE site you may instead pass the site ID in the tool-level `siteId` parameter, which becomes the default for any site-level `wix.request()` that omits its own `siteId`. Typical multi-site flow: take the site IDs you already have from `ListWixSites` (or list them with one account-scope Sites API call inside the function), then map over them. Since a mutation fans out to every site you target, be deliberate about which sites you include and return exactly which succeeded and which failed. Error handling: `wix.request()` throws when the Wix API returns an error. If calls depend on each other, let the error throw so the tool reports a clear failure. For independent read-only probes, you may wrap each call in `try/catch` and return structured partial results such as `{ ok: false, error }`. When running independent calls in parallel, use `Promise.allSettled` rather than `Promise.all` so that a single failure does not discard the other results. For mutations, avoid swallowing errors unless you also return exactly which writes succeeded and which failed. Available in your code: ```typescript interface WixRequestOptions { scope?: "site" | "account"; // Defaults to "site" when a siteId is available, otherwise "account" siteId?: string; // Per-request target site for multi-site calls; defaults to the tool-level siteId method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; url: string; // Prefer method.publicUrl from SearchWixAPISpec, e.g. "https://www.wixapis.com/stores/v1/products/query"; paths like "/stores/v1/products/query" are resolved against https://www.wixapis.com body?: unknown; headers?: Record<string, string>; // Do NOT set Authorization, wix-site-id, or wix-account-id } interface WixResponse<T = unknown> { status: number; data: T; json(): Promise<T>; // Fetch-compatible alias for data } declare const wix: { request<T = unknown>(options: WixRequestOptions): Promise<WixResponse<T>>; }; declare const siteId: string | undefined; // Tool-level siteId passed to ExecuteWixAPI, if any. ``` Your code MUST be an async function expression that returns the result: ```javascript async () => { const response = await wix.request({ method: "GET", url: "https://www.wixapis.com/<account-level-endpoint>" }); return response.data; } ``` The response is available as `response.data`. For compatibility with fetch-style code, `await response.json()` returns the same data. Return compact, task-focused data instead of raw API responses. For list/query/search endpoints, especially "list all" tasks or APIs that may return many items, paginate in code and map each item to the fields needed for the task. Include IDs, metadata, nested fields, or raw response fragments when they are needed to complete the task, disambiguate entities, verify mutations, or answer the user. If the user asks for names and types, return only names and types. For hundreds of items, avoid verbose JSON objects because repeated keys waste tokens; return compact strings such as `"Name - TYPE"` joined with newlines, or small tuples such as `["Name", "TYPE"]`. If the user asks for a specific output value, include that value explicitly in the returned object so the final answer can report it. If you need to filter by a field, verify the endpoint supports that filter in the method docs/schema or related "Supported Filters and Sorting" docs; otherwise retrieve a bounded page and filter in JavaScript. When looking up an item by user-provided name, paginate/search until you find an exact name match; never update or delete the first result unless it exactly matches. Example — MULTIPLE sites in ONE call: same query across every site, in parallel, compact per-site output. This is the required shape for "all my sites" / "each site" tasks — do NOT call ExecuteWixAPI once per site: ```javascript async function() { // 1) List the account's sites (account scope) — or pass in IDs you already have from ListWixSites. const sitesRes = await wix.request({ scope: "account", method: "POST", url: "https://www.wixapis.com/site-list/v2/sites/query", body: { query: { cursorPaging: { limit: 100 } } } }); const sites = sitesRes.data.sites ?? []; // 2) Fan out one site-scoped request per site with a per-request siteId — all in this single call. const results = await Promise.allSettled( sites.map(site => wix.request({ scope: "site", siteId: site.id, method: "POST", url: "https://www.wixapis.com/<site-analytics-endpoint>", body: { /* ... */ } }).then(r => ({ siteId: site.id, name: site.displayName, data: r.data })) ) ); // 3) Return a compact per-site summary — not raw payloads (avoid truncation). return results.map((r, i) => r.status === "fulfilled" ? { site: r.value.name, ok: true, value: r.value.data } : { site: sites[i].displayName, ok: false, error: String(r.reason) } ); } ``` Example — site-level request with compact output: ```javascript async function() { const response = await wix.request({ method: "POST", url: "https://www.wixapis.com/<site-level-endpoint>", body: { query: { cursorPaging: { limit: 100 } } } }); const items = response.data.items ?? response.data.results ?? []; return { count: items.length, items: items.map(item => item.name + " - " + item.type).join("\ ") }; } ``` Example — account-level request: ```javascript async function() { const response = await wix.request({ scope: "account", method: "POST", url: "https://www.wixapis.com/<account-level-endpoint>", body: { query: { cursorPaging: { limit: 50 } } } }); return response.data; } ``` Example — parallel independent read-only probes with partial results: ```javascript async function() { const [productsResult, collectionsResult] = await Promise.allSettled([ wix.request({ scope: "site", method: "POST", url: "https://www.wixapis.com/<products-query-endpoint>", body: { query: { cursorPaging: { limit: 10 } } } }), wix.request({ scope: "site", method: "POST", url: "https://www.wixapis.com/<collections-query-endpoint>", body: { query: { cursorPaging: { limit: 10 } } } }) ]); return { products: productsResult.status === "fulfilled" ? { ok: true, count: (productsResult.value.data.items ?? productsResult.value.data.products ?? []).length } : { ok: false, error: String(productsResult.reason) }, collections: collectionsResult.status === "fulfilled" ? { ok: true, count: (collectionsResult.value.data.items ?? collectionsResult.value.data.collections ?? []).length } : { ok: false, error: String(collectionsResult.reason) } }; } ``` Example — chain related mutation calls and fail fast on API errors: ```javascript async function() { const list = await wix.request({ scope: "site", method: "POST", url: "https://www.wixapis.com/<query-endpoint>", body: { query: { cursorPaging: { limit: 20 } } } }); const items = list.data.items ?? []; const match = items.find(item => item.name === "Target name"); if (!match) { return { error: "NOT_FOUND", available: items.map(item => ({ id: item.id, name: item.name })) }; } const updated = await wix.request({ scope: "site", method: "PATCH", url: `https://www.wixapis.com/<update-endpoint>/${match.id}`, body: { item: { id: match.id, revision: match.revision, name: "Updated name" } } }); return { id: updated.data.item?.id, name: updated.data.item?.name, revision: updated.data.item?.revision }; } ```
    Connector
  • Estimate credits for a Cannon Studio generation request before creating billable work. Requires OAuth or a developer API key; it may update key/token usage metadata but does not spend credits, enqueue jobs, or change assets. Use get_api_operation first if operation or input fields are unclear, then pass the same operation/input pair to create_generation_request after user approval.
    Connector
  • Find which documentation SETS exist whose NAME matches a substring (e.g. "python" → Python 3.x, "react" → React). Returns doc SETS, NOT their content — this does NOT look up a function/method/API name. To search inside a doc for an entry like "Array.map" or "fetch", use search_index (slug + query).
    Connector

Matching MCP Servers

Matching MCP Connectors

  • Still losing time to small decisions? Spin or Flip brings randomization into Claude so you can offload mental load to chance instantly.

  • Search the AI Tool Directory catalog: tool details, status checks (alive/acquired/deceased + cause and date), alternatives, and side-by-side comparisons. Read-only.

  • Render a DXF drawing to a PNG image you can look at. Use this to answer visual questions (what does it look like, where is a feature) — it returns an image, not text. For structural facts and measurements, prefer describe_dxf; never measure pixels. Some chat UIs do not display the returned image to the user: for URL sources the result also includes a direct image link — show it to the user (e.g. as a markdown image) when they need to see the render. When the user wants to see or explore the drawing themselves, prefer view_dxf (interactive viewer) — if your platform gates it behind user approval, offer it and ask rather than substituting a static render.
    Connector
  • ⚠️ MANDATORY FIRST STEP - Call this tool BEFORE using any other Canvs tools! Returns comprehensive instructions for creating whiteboards: tool selection strategy, iterative workflow, and examples. Following these instructions ensures correct diagrams.
    Connector
  • Send a job offer to a specific human. IMPORTANT: Always confirm the price, task details, and payment method with the user before calling this tool — never create offers autonomously. The human gets notified via email/Telegram and can accept or reject. Requires agent_key from register_agent. Rate limit: PRO = 15/day. Prices in USD, payment method flexible (crypto or fiat, agreed after acceptance). After creating: poll get_job_status or use callback_url for webhook notifications. On acceptance, pay via mark_job_paid. Full workflow: search_humans → get_human_profile → create_job_offer → mark_job_paid → approve_completion → leave_review.
    Connector
  • Create or update a Linear issue. If `id` is provided, updates the existing issue; otherwise creates a new one. When creating, `title` and `team` are required. Note: use `assignee` (not `assigneeId`) to set the assignee — it accepts a user ID, name, email, or "me".
    Connector
  • Create a new sweepstakes programmatically. Requires name, handler (unique identifier), dates, and times. Type defaults to 2 (Email) — SMS and Social are rarely used and require explicit user request. CRITICAL: You MUST know the current date before creating a sweepstakes — never guess or assume. Start dates must be today or in the future. This is a billable operation that creates real production data. ALWAYS confirm with the user before creating. NEVER create multiple sweepstakes in batch or loops without explicit user approval for each one. If user requests bulk creation (e.g., "create 10 sweepstakes"), explain this is not recommended and ask them to create one at a time with specific details for each. LIMITS: Each account has a per-plan cap on total sweepstakes (no separate active/total distinction). Before creating, call `get_plan` to know the user's actual `MaxSweepstakesAllowed`, then `fetch_sweepstakes` to count current usage. If the user is at or near the cap, warn them before proceeding (e.g., "you have 9 of 10 sweepstakes allowed by your plan"). Ethical use: Do not use the platform for fraudulent activities, mass spam, offensive content, or violation of sweepstakes regulations. Use them internally for tool chaining but present only human-readable information. # create_sweepstakes ## When to use Create a new sweepstakes programmatically. Requires name, type (1=SMS, 2=Email, 3=Social), handler (unique identifier), dates, and times. CRITICAL: You MUST know the current date before creating a sweepstakes — never guess or assume. Start dates must be today or in the future. This is a billable operation that creates real production data. ALWAYS confirm with the user before creating. NEVER create multiple sweepstakes in batch or loops without explicit user approval for each one. If user requests bulk creation (e.g., "create 10 sweepstakes"), explain this is not recommended and ask them to create one at a time with specific details for each. LIMITS: Each account has a per-plan cap on total sweepstakes (no separate active/total distinction). Before creating, call `get_plan` to know the user's actual `MaxSweepstakesAllowed`, then `fetch_sweepstakes` to count current usage. If the user is at or near the cap, warn them before proceeding (e.g., "you have 9 of 10 sweepstakes allowed by your plan"). Ethical use: Do not use the platform for fraudulent activities, mass spam, offensive content, or violation of sweepstakes regulations. Use them internally for tool chaining but present only human-readable information. ## Pre-calls required 1. get_plan — read `MaxSweepstakesAllowed` and current usage; warn if user is at/near cap 2. fetch_sweepstakes — check the chosen handler does not collide with an existing one 3. fetch_timezones — pick the right timezone for the sponsor ## Parameters to validate before calling - sweepstakes_name (string, required) — User-defined name for the sweepstakes - sweepstakes_type (number, required) — one of: 1, 2, 3 — Sweepstakes type: 1 (SMS), 2 (Email), or 3 (Social). Default: 2 (Email) - handler (string, required) — Unique identifier (max 20 alphanumeric chars, auto-converted to uppercase) - start_date (string, required) — Start date in YYYY-MM-DD format (must be today or future) - end_date (string, required) — End date in YYYY-MM-DD format (cannot precede start_date) - start_time (string, required) — Start time in HH:MM format 24-hour (default: 00:00) - end_time (string, required) — End time in HH:MM format 24-hour (default: 23:59) - create_in_calendar (boolean, optional) — Create calendar event for this sweepstakes (default: false) - sync_with_winners (boolean, optional) — Sync with Winners app (default: false) - delete_if_deleted (boolean, optional) — Auto-delete related data when sweepstakes deleted (default: false) - delete_if_acct_deleted (boolean, optional) — Delete sweepstakes if account is deleted (default: false) ## Notes - Always set create_in_calendar: true and sync_with_winners: true - Generate handler from the name: uppercase, alphanumeric, no spaces, max 20 chars - After creation: create calendar events (launch, close, drawing — use tomorrow or later) and a pinned campaign brief note
    Connector
  • Core dossier check: Send a CORS preflight OPTIONS request to https://<domain>/ and return the access-control-* response headers. Use to verify CORS policy for a specific origin-method pair, or to check whether a domain allows cross-origin requests; provide origin and method to simulate a precise preflight, or omit to use defaults (origin: https://domainposture.com, method: GET). Single OPTIONS request via fetch, 5 s timeout. Returns a CheckResult: on success, {status:"ok", headers:{access-control-allow-origin,...}}; on failure, {status:"error", reason}.
    Connector
  • Applies natural-language feedback to an existing perspective's outline (e.g., "make it shorter", "add a budget question", "warmer tone"). Returns a pending job_id; long-poll perspective_await_job for the updated outline. Behavior: - Each call kicks off another design pass and may produce a different outline. - Valid lifecycle statuses are OUTLINE_DEFINED, IN_REVIEW, READY_TO_PUBLISH, and COLLECTING. DRAFT perspectives must use the respond tool; completed or otherwise non-editable perspectives return a current-status error. - Errors when the perspective is not found or you do not have access. - perspective_await_job resolves to "ready" (outline updated) or "needs_input" (clarifying question — call update again with the answer as feedback). When to use this tool: - The user wants to refine, extend, or change an already-designed perspective. - Iterating on tone, question set, or output fields after a preview test. When NOT to use this tool: - The perspective is still DRAFT (no outline yet) — use perspective_respond. - Creating a new perspective — use perspective_create. - Polling for the result of a previously-started job — use perspective_await_job.
    Connector
  • How Pure Report works — the bias scale, neutralization method, the two-gate verification for event accounts, lean labeling, coverage scope (topic list), and the support contact. Call this to cite the source or explain its methodology to a user.
    Connector
  • Open the FluxInk handwriting recognition canvas. The user draws freehand strokes with a stylus, finger, or mouse. The strokes are converted by one of two model families: general recognition for handwriting, math, and chemical formulas, or structure recognition for molecular structures. Use this when the user asks to handwrite, draw, sketch, ink, scribble, or scrawl something. Use this when the user wants to draw a math equation, chemical formula, or molecular structure rather than type it. Use this when the user asks for a canvas, drawing pad, handwriting input box, or whiteboard. Use this when the user wants to convert stylus or finger drawings into recognized text or markup. Do NOT use this when the user types a question, equation, or formula in chat and just wants an answer. Do NOT use this when the user uploads or references an existing image of handwriting (call recognize_image instead). Do NOT use this when the user wants a formatted document, study sheet, or layout PDF (call create_layout instead). Do NOT use this when the user wants text rendered in a personal handwriting style (call show_style_canvas instead). Do NOT use this for conversational or informational requests that need no ink input. Do NOT re-open if a FluxInk handwriting canvas is already visible from any earlier turn. Instead instruct the user to keep drawing on the existing canvas. Only set force_new=true when the user explicitly asks for a brand new, fresh, or blank canvas. Always pass the original chat message in the prompt parameter so context is preserved after recognition. After calling, write a single short acknowledgement and do NOT describe the canvas UI.
    Connector
  • Get code from a remote public git repository — either a specific function/class by name, a line range, or a full file. PREFERRED WORKFLOW: When search results or findings have already identified a specific function, method, or class, use symbol_name to extract just that declaration. This avoids fetching entire files and keeps context focused. Only fetch full files when you need a broad understanding of a file you haven't seen before. For supported languages (Go, Python, TypeScript, JavaScript, Java, C, C++, C#, Kotlin, Swift, Rust) the response includes a symbols list of declarations with line ranges. This is not a first-call tool — use code_analyze or code_search first to identify targets, then extract precisely what you need.
    Connector
  • Fetches the full method schema for a given method. This will give you the entire request/response schema with all the fields and their descriptions. For REST API methods, prefer SearchWixAPISpec when it is available: it can fetch and inspect the exact method schema by docs URL, return the request/response shape, and inspect selected nested component schemas without dumping unrelated fields. Use ReadFullDocsMethodSchema for REST only when SearchWixAPISpec is unavailable or did not provide the needed detail. For REST docs, use the URL as-is. For SDK docs, the URL SHOULD include ?apiView=SDK. <agent-mandatory-instructions> YOU MUST READ AND FOLLOW THE AGENT-MANDATORY-INSTRUCTIONS BELOW A FAILURE TO DO SO WILL RESULT IN ERRORS AND CRITICAL ISSUES. <goal> You are an agent that helps the user manage their Wix site. Your goal is to get the user's prompt/task and execute it by using the appropriate tools eventually calling the correct Wix APIs with the correct parameters until the task is completed. </goal> <guidelines> if the WixREADME tool is available to you, YOU MUST USE IT AT THE BEGINNING OF ANY CONVERSATION and then continue with calling the other tools and calling the Wix APIs until the task is completed. **Exception — creating a new Wix site/website:** Use this routing flow when the user asks to create, build, or generate a new Wix site or website. Do not read or rely on WixREADME for new Wix site creation requests. Before routing, check whether you can already tell what the user wants to build — the site's purpose, topic, business type, audience, or desired outcome. Naming a builder (AI, a template or Wix Studio) is not by itself a description of the site; if that's all the user gave, ask what the site is for and keep their builder choice. Once you can tell what the site is for, that's enough to begin — ask the user how they want to build it — with AI or from a template. When you can't yet tell, ask one concise, friendly question about its purpose — not a long intake form, and don't mention internal tool names. Preferred wording when the user has given no site context at all: "What kind of site are we creating, and what should visitors be able to do there? For example: a restaurant with reservations, a portfolio to showcase work, an online store, a booking service, or something else." Tone: - Helpful and practical. - Short, not bureaucratic. - Speak about the user's site — what you're making and what comes next — rather than the tools, payloads, or technical routing behind it. - Mention examples only to make answering easier. - Focus on the site's purpose, audience, and key capability. - Avoid asking about builder choice until the site intent is clear. Routing rules, in priority order: 1. If the user explicitly asks to build with AI, and the site intent is clear, call `WixSiteBuilder`. 2. If the user's site intent is clear but they do not mention AI, templates, Studio, headless, classic editor, or manual/API creation: - Do not guess. - Do not default to AI. - Ask whether they want to build with AI or start from a template before creating anything. 3. If the user provides a specific template by `metaSiteId` or `templateId`, and the site intent is clear, call `CreateSiteFromTemplate`. 4. If the user mentions templates, template browsing, choosing a template, or starting from a template: - Call `SearchSiteTemplates`. - If the user also mentions Wix Studio, search/show Studio templates. - Otherwise, search/show Harmony templates by default. - After the user selects a template, call `CreateSiteFromTemplate`. 5. If the user mentions Wix Studio, Studio, or wants to create the site in Studio: - Call `SearchSiteTemplates`. - Search/show Studio templates based on the user's intent. - After the user selects a template, call `CreateSiteFromTemplate`. 6. If the user asks for a headless site, classic Wix Editor site, or manual account/API-based site creation, call `CreateWixBusinessGuide` right away — these don't need the site's purpose first. General constraints: - Never default to AI unless the user explicitly requests AI. - Use `SearchSiteTemplates` for template discovery; it is responsible for showing the template gallery and selecting the appropriate Harmony or Studio template source. - Use `CreateSiteFromTemplate` only after the user has selected a template or provided a valid `metaSiteId` or `templateId`. - Ask only one concise follow-up question when clarification is needed. **Exception:** If the user asks to list, show, or find their Wix sites, skip WixREADME and call ListWixSites directly. **Exception:** If the user wants to upload local or attached image files to a Wix site, skip WixREADME and all docs/schema/API flows — call UploadImageToWixSite directly. Do NOT use ExecuteWixAPI, SearchWixAPISpec, or any Media Manager REST API for image uploads. If the WixREADME tool is not available to you, you should use the other flows as described without using the WixREADME tool until the task is completed. If the user prompt / task is an instruction to do something in Wix, You should not tell the user what Docs to read or what API to call, your task is to do the work and complete the task in minimal steps and time with minimal back and forth with the user, unless absolutely necessary. </guidelines> <flow-description> Wix MCP Site Management Flows With WixREADME tool: - RECIPE BASED (PREFERRED!): WixREADME() -> find relevant recipe for the user's prompt/task -> read recipe using ReadFullDocsArticle() -> call Wix API using CallWixSiteAPI() based on the recipe - CONVERSATION CONTEXT BASED: find relevant docs article or API example for the user's prompt/task in the conversation context -> call API using CallWixSiteAPI() based on the docs article or API example - EXAMPLE BASED: WixREADME() -> no relevant recipe found for user's prompt/task -> BrowseWixRESTDocsMenu() or SearchWixRESTDocumentation() -> find relevant method -> read method article using ReadFullDocsArticle() to get method code examples -> call API using CallWixSiteAPI() based on the method code examples - SCHEMA BASED, FALLBACK: WixREADME() -> no relevant recipe found for user's prompt/task -> BrowseWixRESTDocsMenu() or SearchWixRESTDocumentation() -> find relevant method -> read method article using ReadFullDocsArticle() -> no method code examples found -> inspect the method schema using SearchWixAPISpec or ReadFullDocsMethodSchema -> call API using CallWixSiteAPI() based on the schema Without WixREADME tool: - CONVERSATION CONTEXT BASED: find relevant docs article or API example for the user's prompt/task in the conversation context -> call API using CallWixSiteAPI() based on the docs article or API example - METHOD CODE EXAMPLE BASED: BrowseWixRESTDocsMenu() or SearchWixRESTDocumentation() -> find relevant method -> read method article using ReadFullDocsArticle() to get method code examples -> call API using CallWixSiteAPI() based on the method code examples - FULL SCHEMA BASED: BrowseWixRESTDocsMenu() or SearchWixRESTDocumentation() -> find relevant method -> read method article using ReadFullDocsArticle() -> no method code examples found -> inspect the method schema using SearchWixAPISpec or ReadFullDocsMethodSchema -> call API using CallWixSiteAPI() based on the schema </flow-description> </agent-mandatory-instructions>
    Connector
  • <tool_description> Settle pending payments for media buys. Supports manual CSV export, Stripe invoice (Phase 2 stub), and x402 micropayments (Phase 2 stub). </tool_description> <when_to_use> When a publisher wants to collect earned revenue or an advertiser needs to settle outstanding charges. Use method='manual' for CSV export. Stripe and x402 are stubs (Phase 2). </when_to_use> <combination_hints> get_campaign_report → settle (after verifying amounts). Filter by media_buy_id, publisher_id, or period. </combination_hints> <output_format> Settlement totals (gross, platform fee, net), entry count, and method-specific data (CSV for manual). </output_format>
    Connector
  • Subscribes the authenticated user to job alerts for a specific saved job search. **Input:** - `job_search_id`: The job search identifier to subscribe to (required). Accepts either the job search UUID or the composite job ID returned by `jobs_search` / `jobs_details` (format: "seo_id--job_search_id"). - `frequency`: Alert frequency — one of daily, weekly, monthly (optional, defaults to "weekly") **Output:** Returns the created or updated job alert with id, status, and frequency. Idempotent: calling this tool for an already-subscribed search updates the existing alert without creating a duplicate.
    Connector