Back to tracker
Plugin tracker
Tools
Explore what tracked Claude Connectors and ChatGPT Plugins can actually do. Search by tool, Plugin, Brand, category, verb, or access requirement.
Latest snapshot2026-09-13USmethodology registry-public-v1
Searchable tools
119,491
Authless tools
7,773
Auth required
107,252
Described tools
64,388
119,491 tools
- Get websiteget · Fetch safe metadata for one website owned by the authenticated Supovia organization. Organization ids, agent prompts, credentials, integration configuration, and arbitrary metadata are never returned.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - List campaignslist · List a bounded page of campaign identities for one website owned by the authenticated Supovia organization. Recipient lists, subjects, message content, user ids, organization ids, and arbitrary metadata are excluded, and campaigns cannot be sent from this tool.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - List conversationslist · List a bounded newest-first page of conversation activity in the authenticated Supovia organization. Returns only the conversation id needed for an explicit follow-up, website id, channel, resolved state, unread count, and timestamps. Message bodies, message ids, customer identifiers, internal notes, arbitrary metadata, and organization ids are excluded.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - List documentslist · List a bounded newest-first page of safe support-document metadata in the authenticated Supovia organization. Document content, embeddings, prompts, organization ids, and arbitrary metadata are excluded.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - List websiteslist · List a bounded page of websites in the authenticated Supovia organization. Only safe website identity and status fields are returned; prompts, credentials, integration configuration, organization ids, and arbitrary metadata are excluded.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - Open conversation activityopen · Refresh safe activity metadata for one conversation selected in the embedded Supovia inbox. This app-only tool reads no thread and returns no message body, preview, message id, customer detail, or internal note.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - Search documentssearch · Search published support documents for one organization-owned Supovia website. Returns at most 5 safe document identities; content chunks, embeddings, scores, prompts, and arbitrary metadata are excluded.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - Send messagesend · Send a message in a Supovia conversation. Non-destructive but non-idempotent: calling twice with the same content creates two messages.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - Show Supovia support overviewshow · Render a bounded organization-scoped snapshot of Supovia websites and recent conversations. Customer identifiers, internal record ids, message bodies, prompts, credentials, internal notes, organization ids, and arbitrary metadata are excluded.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - Show inbox activityshow · Open a metadata-only Supovia inbox and report only how many conversations have unread activity. The embedded view receives conversation ids needed for an explicit follow-up plus channel, status, unread count, and timestamps. It never receives message bodies, previews, message ids, customer details, or internal notes.Supovia helpdesk chatSupovia
PluginrequiredCustomer Support - explain_job_matchexplain · Get a detailed plain-English explanation of why a specific job matches the user.ai.jobsai.jobs
PluginrequiredHR & Recruiting - get_job_detailsget · View detailed information about a single stored job result.ai.jobsai.jobs
PluginrequiredHR & Recruiting - get_search_historyget · Retrieve a list of the user's previous job searches.ai.jobsai.jobs
PluginrequiredHR & Recruiting - search_jobs_manualsearch · Use this when the user asks to search for jobs by keywords, title, work pattern, or location.ai.jobsai.jobs
PluginrequiredHR & Recruiting - search_jobs_with_cvsearch · Use this when the user provides pasted CV/resume text, or when ChatGPT can provide accessible extracted text from an uploaded CV file. If only an uploaded file reference is available and its content cannot be accessed, explain that the user should paste the CV text or use the ai.jobs.co.uk CV upload flow.ai.jobsai.jobs
PluginrequiredHR & Recruiting - search_jobs_with_profilesearch · Use this when the user asks to find jobs using their saved ai.jobs profile.ai.jobsai.jobs
PluginrequiredHR & Recruiting - Approve or Reject Partner Applicationresolve · [Partners — general management] Approves or rejects a PENDING partner-registration application. Approving runs the company's onboarding: it finds or creates the partner and the partner contact from the application's answers, stamps the application approved, syncs to the connected CRM, applies tags and mints an affiliate link. Rejecting stamps it rejected with the reason and the decider. Both are ASYNCHRONOUS — the decision is scheduled, so the response reports application_status 'approving' or 'rejecting' and the application is still pending at the moment it returns. There is no partner_id in the response because none exists yet; wait a few seconds and call partner_applications(action:'get') to confirm the outcome and read partner_id, which invite_partners_to_portal and flows_manage need. accept_scheduled means an accept was scheduled, not that a partner was created — an approve may match an existing partner instead. Only status='pending' applications can be decided, and only once: a second decision on the same application is refused, as is an id belonging to another company, a referral's id (use resolve_referral for those) and an unsubmitted draft. internal_note is stored on the application on both approve and reject and is not shown to the applicant. Rejecting requires a rejection_reason_id when the registration form has reasons configured — list them first with partner_applications(action:'rejection_reasons'); a form with none configured needs no reason. Set send_email to email the applicant, with email_subject, email_body and email_from.EULEREULER
PluginrequiredSales & CRM - Approve or Reject Referralresolve · [Partner Relationships] Approve or reject a PENDING referral. Works in both directions, and who may decide depends on the direction — the tool figures this out from the referral itself, you do not pass a direction. Inbound (a partner submitted it to the company): the CUSTOMER decides; approving creates the referral in the company's CRM. Outbound (the company sent it to a partner): the PARTNER decides; approving accepts the lead, reveals the form answers and opens the deal. You can only resolve a referral addressed to you — resolving someone else's returns an authorization error. Find resolvable referrals with referrals(action:'search') as a customer or referrals(action:'for_partner') as a partner; only status='pending' can be resolved, and only once. Rejecting an INBOUND referral requires a rejection reason when the company has them configured — list them first with referrals(action:'rejection_reasons'). Outbound rejections take a free-text note instead. Optionally email the other side about the decision via notify_partner + notification_details.EULEREULER
PluginrequiredSales & CRM - Approve or Reject SI Service Projectsi · [SI Service Projects — Customer Admin] Customer-admin WRITE actions on SI (System Integrator) service projects — approve or reject a partner's project, one at a time or in bulk. The customer company is resolved server-side (NOT an AI input); a project outside your company is not found. action='approve' / 'reject' act on ONE project (require `project_id`) and return a confirmation `{success, project_id, status ('approved'|'rejected'), note_recorded}`. action='approve_batch' / 'reject_batch' act on MANY at once (require `project_ids`, an array of up to 100 ids) — the server fans out per project, each tenant-checked, and returns `results[]` (each `{project_id, status: approved|rejected|not_found|error}`) plus counts. In the batch counts: `processed` = how many were ATTEMPTED on this page (= approved/rejected + not_found + errors), `approved`/`rejected` = how many actually changed state, `not_found` = ids that are not your company's (skipped, no change), and ids beyond 100 come back in `skipped_over_limit` (call again with the next page). Use the batch actions to remediate large backlogs (e.g. junk bulk uploads). `note` is OPTIONAL (applies to every project in a batch call) — on approve it records an approval note; on reject it is the rejection reason surfaced to the partner. IMPORTANT: for REJECTIONS, recommend the customer include a note explaining WHY (so the partner understands and can fix/resubmit) — it stays optional but a rejection without a reason is poor practice. All project ids come from si_customer_service_projects action='list' or 'export'. Read / monitor projects (and their scope forms) with si_customer_service_projects — this tool only changes approval status.EULEREULER
PluginrequiredSales & CRM - Author Partner Directory Profilespartner · [Partner Directory] Read and author your Partner Directory: read a profile's editable content, add partners to the directory, rewrite a profile's content, and add or remove a profile resource (Testimonial, Resource, Case Study, Client, Video, Top Service, Certification — those exact seven, matched on the option's display text). Takes `profile_id` values from `partner_directory_search` (NOT partner_ids) - except action='add_partners', which takes partner_ids because the profile does not exist yet. action='read_profile' returns the CURRENT value of every field write_profile can set (name, website, short_description, long_description, accepting_clients, hide_contact_button) - it is the only way to read website and the two flags, which no search mode returns. action='write_profile' overwrites ONLY the fields you send: omit a field and its current value is kept, so you never have to restate what you are not changing, and you must never guess a value to fill a slot. accepting_clients and hide_contact_button are the exception - they are always written, so read them first with read_profile and pass them back. Fields this tool does not expose at all (logo, address, languages, custom filter answers, resources) are carried over untouched. A write by a customer admin publishes immediately (status Active); the review queue is for partner-side edits. The public directory is a cached JSON blob refreshed on a ~10-minute cycle, so a change is not visible on the public page immediately. To EDIT a resource, remove it and add it again - editing in place is not offered because a resource carries no link back to its profile, so it cannot be scoped to your directory.EULEREULER
PluginrequiredSales & CRM - Browse Content Library (Admin)content · [Content Management — Customer Admin] Read side of the customer-admin content library. action='search' lists/filters the company's content (ALL content, not just what one partner sees — that's `content_search`/`content_list`) and returns content_id + folder_name + categories for the write actions. action='folders' lists content folders and returns folder_id; folders are FLAT (no nesting). action='categories' lists the company's content categories (id + name) — every content item needs at least one, so call this BEFORE content_manage(action:'create'). Filter values must match EXACTLY what this tool returns for that field (case-sensitive); the backend rejects other spellings. search/folders results include both raw `visibility`/`share_with_all` and a derived `effective_visibility` — trust `effective_visibility` and flag `visibility_conflict:true` items to the user instead of guessing from the raw pair. search and folders results also include `shared_partner_ids`/`shared_tag_ids` — the specific partners/tags an item or folder is shared with; only populated when visibility is 'Selected Partners'/'Partner Tags', empty otherwise (that's expected, not an error).EULEREULER
PluginrequiredSales & CRM - Charges Lookupcharges · [Partner Relationships] Inspect specific charges (for partner-scoped charge lists, use `partner_artifacts(action: 'charges')`). action='for_deal' returns all charges linked to a deal_id (e.g. 'show me what was charged on deal X', 'list charges for deal abc'). action='by_id' returns the full detail of a single charge — amount, commission, partner, date, status (e.g. 'inspect charge xyz', 'why was this charge created'). Customer-only.EULEREULER
PluginrequiredSales & CRM - Commissions Calculationcommissions · [Commissions & Payouts] Commission payouts and expense calculations over a date range. action='company' returns the third-person aggregate (e.g. 'how much did we pay', 'our commission expense', 'company-wide payout', 'total spent on partner commissions') — customer-only. action='partner' returns first-person or specific-partner queries (e.g. 'how much commission did I earn this month', 'minha comissão', 'commission owed to <Partner X>', 'partner X earnings') — requires partner_id, callable by partner-role tokens. Partner_id sources for action='partner': `list_accounts` (the user's own partner roles, match by `affiliate_company_name`) or `partners(action: 'list', filter_name: ...)` (customer admin querying their company's partners). IDs from `partner_directory_search` are profile_ids and will be rejected as `partner_not_in_consent`. start_date and end_date are required (no defaults). RESPONSE FIELDS — two different statuses exist, do not confuse them: `commission_status` is the status of the COMMISSION payout, and matches the 'Commission Status' column of the Payments tab. 'Created by Partner' is displayed in the UI as "Awaiting Confirmation" (partner reported the payment, customer has not confirmed it); other values are 'Marked as Paid by Partner', 'Confirmed as Paid by Customer' and the 'Euler Pay - *' states. Empty means no payout activity yet. `customer_payment_status` is NOT about the commission — it is the billing status of the END CUSTOMER's payment for the deal (typically 'paid'). Never use it to say whether a commission was paid. `charge_type` gives the direction: 'Outbound' = a deal YOUR company sent to this partner, so the commission is owed TO YOU (Marketplace 'Sent deals' tab). 'Referral' / 'Reseller' = deals the partner sent you, so YOU owe them ('Received deals' tab). 'Demo' and 'Fund Reimbursement' are neither. `commission_Sum` mixes both directions — never present it as "what this partner owes us". For that use `commission_sum_outbound` (all sent-deal commissions in the period) and `commission_sum_awaiting` (the subset still Awaiting Confirmation). `charge_date` (ISO) is the date the start_date/end_date range filters on, and is what the UI shows as 'Payment Date'. `when_to_be_paid` is frequently empty — do not rely on it. `total_charges` is the row count. `count_outbound` and `count_awaiting` are the row counts matching `commission_sum_outbound` and `commission_sum_awaiting`. Use the provided sums and counts as authoritative; never recompute totals or counts by adding up `list_of_charges` yourself. `list_of_charges` can contain multiple charges for the same `deal_name` (recurring billing, or several charges on one deal). Never merge or deduplicate rows by deal name. Each row is uniquely identified by `charge_id`, and the number of rows you display must equal `count_awaiting` / `count_outbound` / `total_charges` for the subset you are showing. Per charge, `commission_to_be_paid` is the commission for that charge and `amount` is the charge amount it was calculated from — never present `amount` as the commission. A period with no charges returns commission_Sum 0 and list_of_charges [] — that is a valid empty result, not an error. action='company' additionally returns page / limit_per_page / has_more. A response of {"error":"partner_not_found","partner_id":"…"} means the partner_id sent does not match any partner. Re-resolve it via `partners(action:'list', filter_name: …)` and retry. Never report this as "this partner has no commission" or as a zero.EULEREULER
PluginrequiredSales & CRM - Communications Hub (read)communications · [Communications Hub] Read-only access to the Communications Hub (partner email program). action='list_audiences' lists the company's audiences with name, active flag, and contact count. action='list_templates' lists email templates (name, description, published). action='list_sent_emails' lists individually-sent emails (recipient, subject, status, opens, clicks). action='emails_by_broadcast' lists the emails sent in one broadcast (requires broadcast_id). action='preview_broadcast' returns how many recipients an audience + template would reach plus a sample of eligible contacts (requires audience_id + template_id) — call this before sending. action='preview_template' renders a template with one contact's data substituted so you can show the final email (requires template_id + sample_contact_id). Everything is scoped to the user's company automatically.EULEREULER
PluginrequiredSales & CRM - Communications Hub — managecommunications · [Communications Hub] Create and send within the Communications Hub (partner email program). action='create_audience' creates an empty partner audience (requires name). action='create_template' creates an email template from raw HTML (requires name + html); the ONLY supported merge tokens are [Contact First Name], [Contact Last Name], [Contact Email], and [Company Contact] — any other token (e.g. {{name}}) is rejected before saving. action='add_contacts' adds up to 100 partners to an audience (requires audience_id + partner_ids); idempotent (partners already in the audience are skipped). action='send_broadcast' sends a template to all eligible contacts of an audience (requires audience_id + template_id + subject + confirm) — this emails real partners and cannot be undone, so call communications(action:'preview_broadcast') first and pass confirm=true only after the user explicitly approves. Everything is scoped to the user's company automatically.EULEREULER
PluginrequiredSales & CRM - Create & Update Dealsmanage · [Partner Relationships] Create or update deals attributed to your partners. action='create'/'update' handle one deal; action='create_batch'/'update_batch' handle many at once. Batch operations are scheduled and run in the background — the response confirms how many were queued (schedule_amount) and does not return the rows; confirm results later with get_search_deals rather than resubmitting. Every deal validates its partner against your company; amount must be greater than 0; close_date must be after created_date. Dates are YYYY-MM-DD.EULEREULER
PluginrequiredSales & CRM - Create Partner Contactcreate · [Partner Contacts & Portal Invites] Creates a `partner_contact` (a person inside a partner organisation) for a given partner. **Idempotent**: if a contact with the same email already exists for that partner, no duplicate is created — the existing one is returned with `was_created: false`. Use this to add a new person BEFORE granting them portal access with `invite_partners_to_portal` (which takes contact ids, not emails). Returns `{ contact_id, was_created }`. Customer-side only. **Two failure modes** (both safe — nothing created): (1) If `partner_id` doesn't exist at the backend (typo / stale id), rejected upstream with HTTP 400 `dispatch_failed` + a `MISSING_DATA` body — the most common failure for a bad id; ask the user to verify the partner. (2) If `partner_id` exists but belongs to a different company than the caller's, the response is `{status: 'success', response: {}}` (empty body) — the tenant guard terminated. Resolve `partner_id` via `partners(action: 'list', filter_name: ...)` or `list_accounts` (match by affiliate_company_name); IDs from `partner_directory_search` are profile_ids and will be rejected.EULEREULER
PluginrequiredSales & CRM - Create Tracking Linkcreate · [Partner Relationships] Creates an affiliate/tracking link for ONE of your company's partners (customer-admin only — partners read their links via `partner_artifacts(action: 'tracking_links')` and cannot create them). Wraps a destination URL with an auto-generated 6-char tracking id (`eid`) and optional URL parameters. REQUIRED: partner_id, url, label. Optional: extras (extra URL query params). Resolve partner_id via `partners(action: 'list')` — the partner must belong to your company. Idempotent by (partner_id, label): a repeated call with the same label returns the existing link without creating a duplicate. Returns `{ link, status, AI_instruction }`: status='Created' (new link, `link` carries the new URL); status='Duplicated' (a link with this label already exists for the partner — `link` is empty but `AI_instruction` contains the existing URL to surface); status='Error' (partner_id is not a partner of your company — `link` empty, `AI_instruction` carries the hint). Confirm the destination URL and label with the user before calling: the link is created immediately.EULEREULER
PluginrequiredSales & CRM - Deal Attribution — Influenced & Sourcedinfluenced · [Performance & Rankings] Returns deal attribution data for a date range: counts and totals for sourced deals (partner-originated), influenced deals (partner-touched), and combined sourced-and-influenced deals — with per-partner breakdowns suitable for ranking. Use for deal-source-attribution questions: counts of sourced/influenced deals, total value of sourced/influenced deals, sourced vs influenced comparisons, and partner rankings by sourced/influenced deal performance. Pass `partner_id` to scope the response to a single partner's attribution (sourced/influenced deals owned by that partner only); omit it for the company-wide view across all partners. For generic partner deal lists without sourced/influenced framing, `partner_artifacts(action: 'deals')` is the right tool; for company-wide aggregates use `performance(action: 'overall')`; for looking up a specific deal by name use `get_search_deals`.EULEREULER
PluginrequiredSales & CRM - Decide on a Fund Requestcustomer · [Fund Requests — Customer Admin] [Fund Requests — Customer Admin] Decides on a Marketing Development Fund (MDF) / Co-op Investment Fund (CIF) request a partner has submitted against your company's funds. All three actions require fund_request_id and fund_request_step_id, both from customer_fund_requests(action:'get_request') — fund_request_step_id is current_step.id. action='approve' completes the approval step and moves the request to whatever comes next. action='reject' ends the request: it is marked rejected and does not continue. action='request_info' asks the partner for more before you decide — the request stays open on the same step and flips to waiting on them until they answer, so it is NOT a decision and can be followed later by approve or reject. Only a request whose current_step.type is 'customer approval' can be decided here, and only by a user configured as an approver for that step; any other step or a non-approver is refused. notes_public is visible to the partner (use it to say why, especially on a rejection); notes_private is an internal note the partner never sees. Completion is processed in the background, so after deciding, read the request back ONCE with customer_fund_requests(action:'get_request') after a short pause rather than repeating the call.EULEREULER
PluginrequiredSales & CRM - EULER Help & Supporteuler · [Content Search] EULER product help & support search — THE tool for any question about how EULER itself works or how to do something in the EULER product: 'how do I add a user', 'how do I submit a referral', 'where do I find X in the portal', 'how does EULER work', 'what is <EULER feature>', 'how do I set up Y'. Searches EULER's public help center / support articles (the support.eulerapp.com knowledge base) and returns the matching article text plus a citable `article_url`. ALWAYS call this before telling the user you can't find a procedure or that there's no documentation — do not guess generic SaaS steps. Needs only the question — no partner_id or other context. (To semantically search a partner's privately-shared content instead, use `content_search`; to list a partner's files by name, use `content_list`.)EULEREULER
PluginrequiredSales & CRM - Find Conversations by Problemfind · [Conversation Insights] Lists the company's own support CONVERSATIONS behind a problem area — the same data as the dashboard's trending-topics and resolution-by-category views. Give a category OR a trending topic (exactly one), optionally a resolution outcome and a time window, and it returns the matching conversations (newest classified first) with their resolution outcome. Use it when the user asks to see, pull up, or list conversations / chats / support threads about something. Each conversation also carries who it is with: userName, userEmail, partnerName, partnerId, the partner's crmId (the CRM record id, null when the partner has no CRM link or the conversation has no partner) plus crmType (which CRM that id is from — e.g. Salesforce / Hubspot — so you can label or link it correctly), partnerDomain (the partner company's own domain, e.g. acme.com), and companyName (the company the user belongs to). Returns totalCount (exact) and capped (true when only the first page is shown). When capped, say 'M total, showing the first N'. If available is false the lookup failed — say so and suggest trying again; never report zero as if genuine.EULEREULER
PluginrequiredSales & CRM - Flows (read)flows · [Flows — onboarding & training lifecycle] Read Flows (onboarding / training / certification programs), their steps, assignments, and attachable resources. Customer-admin actions: action='list' returns all the company's flows as {id, name, status} records (newest first; no server-side filters — filter the returned list yourself by name/status) — the discovery entry point when you don't have a flow_id yet; drill into one with action='flow_details'. action='list_standard' returns the company's Standard Flows — the default flow set automatically assigned to partners when they join the portal — as {id, flow_id, flow_name, completion_rule, status} records; `id` is the flow_standard_id used by flows_manage(action:'remove_standard'), and `status` distinguishes active from archived (removed) entries. action='flow_details' returns flow/step details — name alone searches flows by title (returns matching flow IDs), flow_id alone returns that flow's details plus its assignments and step IDs, flow_step_id alone returns that step's details; pass at most ONE of name/flow_id/flow_step_id per call (combining them makes it return only the first matching intent and silently drop the rest), so drill down in separate sequential calls (name → flow_id → flow_step_id). The returned can_be_updated_now shows whether the flow's steps/content can be edited ('no' while Active); it does NOT affect assigning. A flow's status is Draft (creation), Active (published), Unpublished (an Active flow taken down to edit — not Draft), or Archived (retired and locked: it can neither be assigned nor edited). action='attachable_resources' lists content/agreement/quiz items embeddable in a step (requires entity_key ∈ content/agreement/quiz — Task/File Upload/SCORM/Text are valid step types but have no attachable-resource pool); returned ids feed flows_manage(action:'create_or_edit_step') via content_id / agreement_term_id / quiz_from_schema_id. action='assignment_candidates' lists partners/users assignable to a flow (requires partner_id; optional email resolves one user's id). action='assignments' returns the company's flow-assignment roster (optional filters: partner_id → that partner's flows, flow_id → that flow's partners); response has results (current page) and grouped_by_partners (same data grouped per partner) as comma-joined text payloads to parse before presenting, plus total_count / total_for_this_page / has_more. Each result row carries user_id/user_email (the specific team member — populated for the 'All users…' and 'Specific users…' completion rules; blank for the 'Any user…' rule, which completes at the team level) alongside progress_status, so filtering by flow_id gives a per-user completion roster of who finished. action='recipient_count' is a read-only dry-run of an assignment: pass the same audience inputs as flows_manage(action:'assign') (flow_id + assign_to + completion_rule, plus selected_partner_ids / tag_ids / partner_user_pairs as the combo requires) and it returns how many partners/recipients would receive the flow (new_count) WITHOUT assigning — use it to confirm 'N partners will receive this' before calling flows_manage(action:'assign'). Partner actions (partner-role sessions): action='partner_flow_details' returns the calling partner's assigned flows/steps (requires partner_id; optional flow_id / name / flow_step_id drill-down, mutually exclusive); action='partner_flow_progress' returns per-flow completion stats for the partner (requires partner_id + flow_id). action='partner_team_progress' returns the calling partner's flow-assignment roster with per-user completion (requires partner_id; two OPTIONAL filters — flow_id scopes to one flow, and target_user_id scopes to one team member's assignments; omit both for the full roster across every flow and user, including the team-level 'Any user…' flows open to the whole company) — admin-only: a partner user without an admin role gets an authorization error. Each row has user_id/user_email + progress_status + completion_rule (plus flow_id, flow_name, partner_id, assignment_id, partner_flow_status; 'Any user…' assignments have a blank user, being team-level), and the response adds total_count / has_more / total_for_this_page. Resolve partner_id via list_accounts (partner-role) or partners(action:'list') (customer-admin querying a partner of their company).EULEREULER
PluginrequiredSales & CRM - Flows — manageflows · [Flows — onboarding & training lifecycle] Create, edit, and manage Flows and their steps + assignments (customer-admin only). action='create_flow' creates a flow (requires name, description, type, enable_due_date; optional due_date_days). action='save_flow' saves/activates/publishes/archives a flow (requires flow_id, flow_status; optional name, description, type, enable_due_date, final_order, and certification_badge_b64 — a base64 image required to ACTIVATE a Certification flow: activating a Certification flow without a badge is blocked). action='create_or_edit_step' creates/edits a step (requires flow_id, name, description, os_flow_step_type, order_temp, entity_key='create'|'edit'). action='deactivate_step' enables/disables a step (requires flow_id, flow_step_id, step_status, entity_key='step', and flow_status — the flow's CURRENT status). This is a staged edit: it changes the step on the flow but does NOT update partners already assigned to the flow — that happens only when the flow is saved. After calling it, tell the user the change won't reach existing/in-progress assignments until the flow is saved, and ask whether to save now; call action='save_flow' only once the user confirms (do not save automatically). action='assign' assigns a flow (requires flow_id, assign_to, completion_rule, and confirm=true). assign_to picks which partners receive it: 'All Partners' (whole company), 'Selected Partners' (needs selected_partner_ids), or 'Partners by Tags' (needs tag_ids). completion_rule is how the partner's team completes it; the 'Specific users…' rule works only with assign_to='Selected Partners' and needs partner_user_pairs (each 'partner_id|user_id'). Assigning notifies the targeted partners, so it is confirmation-gated: first call flows(action:'recipient_count') with the SAME inputs to get how many partners/recipients will receive it, tell the user that number, and ask them to confirm; only after the user agrees, call assign with confirm=true. An assign call without confirm=true is rejected with assignment_confirmation_required and does nothing. action='unassign' removes an assignment (requires flow_id, entity_key='all'|'partner'|'user'). assign/unassign are actions you perform (not stored settings), allowed while the flow is Draft, Unpublished, or Active — identical in all three (an Active flow behaves the same whether or not it already has assignments) — and they NEVER require unpublishing. An Archived flow is locked: it can be neither assigned nor edited. A `can_be_updated_now` value of 'no' from flows(action:'flow_details') concerns editing the flow's steps/settings, not its assignments. To edit an Active flow's steps/settings, unpublish it (save_flow flow_status='Unpublished' — it becomes Unpublished, NOT Draft; Draft is only the initial creation state), make the changes, then republish (flow_status='Active') to re-propagate them to existing assignments. action='add_standard' adds a flow to the company's Standard Flows — the default set auto-assigned to every partner when they join the portal (requires flow_id and standard_completion_rule). It is idempotent: re-adding a flow already in the set just re-activates it, so it never creates duplicates. standard_completion_rule offers only two options ('Any user…' or 'All Users…'); the 'Specific users…' rule is not available for standard flows. action='remove_standard' removes a flow from the standard set (requires flow_standard_id — the `id` from flows(action:'list_standard'), not the flow_id); it archives the entry rather than hard-deleting, so re-adding restores it. Read the current standard set with flows(action:'list_standard'). To read flows, steps, assignable candidates, or the assignment roster, use `flows`.EULEREULER
PluginrequiredSales & CRM - Fund Requests — Customer (read)customer · [Fund Requests — Customer Admin] [Fund Requests — Customer Admin] Reads the Marketing Development Fund (MDF) / Co-op Investment Fund (CIF) requests your partners have submitted against your company's funds. action='list_requests' lists every request across all your partners (optional filters: partner_id to narrow to one partner, request_name to find one by its request/campaign name, fund_id, fund_type MDF|CIF, status, period dates); each row has an id, name, fund, amount_total, status, and pending_action_from — 'customer' means it is waiting on YOU, 'partner' means you are waiting on them. action='get_request' returns one request in full detail (requires fund_request_id): amounts, the ordered steps[], request_info with the answers the partner submitted, your internal notes, and current_step — the pending task, its type ('customer approval' | 'partner fill form' | 'partner upload' | 'partner execution' | 'customer upload' | 'reimbursement' | 'assign deal to cif'), and any additional information already requested. action='list_funds' lists the funds your company offers (optional filters: fund_id, fund_type, status, period dates). The normal loop is list_requests (find what is waiting on you) → get_request (read the detail and the partner's answers) → customer_fund_requests_manage (approve, reject, or ask for more information). Only a request whose current_step.type is 'customer approval' can be decided through the assistant; a request sitting on 'customer upload', 'reimbursement' or 'assign deal to cif' is waiting on your team but must be finished in the EULER portal.EULEREULER
PluginrequiredSales & CRM - Get Conversation Detailget · [Conversation Insights] Opens ONE support conversation (by id, from a find_conversations_by_problem result) and returns its messages plus the resolution outcome, so you can summarize it: what the user asked, what happened, and how it resolved. Also returns an `identity` object with the full party behind the conversation — userName, userEmail, partnerName, partnerId, crmId, crmType (the company's CRM, e.g. Salesforce/HubSpot/Pipedrive), partnerDomain (the partner company's own domain, e.g. acme.com), and companyName; partner/CRM fields are null for internal conversations (no partner). If found is false, that conversation does not exist or is not part of this company — tell the user you could not find it; do not invent its contents. If available is false the fetch failed — say so and suggest trying again.EULEREULER
PluginrequiredSales & CRM - Get Outbound Referral Formget · [Partner Relationships] Returns your company's OUTBOUND referral form — the form_id and its questions — used to send a referral TO a partner via send_outbound_referral. It is company-scoped (reads your own company's outbound form) and takes no partner_id; the per-partner INBOUND form is referrals(action: 'get_form_for_partner') instead. Call this to discover the form_id and question list before collecting the user's answers, then pass the answers (each keyed by its question id) to send_outbound_referral.EULEREULER
PluginrequiredSales & CRM - Get Partner Artifactspartner · [Partner Relationships] Returns artifacts linked to a specific partner. All actions require partner_id. To resolve partner_id, prefer (a) `list_accounts` (when the user has an account with that partner, match by `affiliate_company_name`) or (b) `partners(action: 'list', filter_name: ...)` (customer admin querying their company's partners). From `partner_directory_search`, the item's `id` is a profile_id and will be rejected as `partner_not_in_consent` — the SAME item also carries `partner_id`, which is the id to pass here. Empty on a profile whose partner link was never set; treat that as unknown. action='agreements' returns signed agreements; 'tracking_links' returns affiliate links; 'deals' returns the partner's deals (paginated); 'charges' returns charges assigned to the partner (paginated); 'invoices' returns the partner's invoices (paginated).EULEREULER
PluginrequiredSales & CRM - Incentives Rosterincentives · [Incentives] One page of the company's incentive roster — ONE ROW PER ACTIVE INCENTIVE ASSIGNMENT, each row naming the partner and their current incentive: `partner_id`, `partner_name`, `program_name`, `tier_name`/`tier_order` (null on Inc 1.0 — packages have revenue ranges, not tiers), `enrolled_on`, `commission_lines`, and `commission_pct`. Use for program-wide incentive questions: 'which incentive is each partner on', 'list partners by tier', tier-migration comparisons. `commission_pct` is the partner's rev share ONLY when their tier has exactly one commission line (`commission_lines: 1`); with several product-group/range/period lines it is null — there is no single percentage, so drill into that partner with `partner_inc2_incentives(action: 'status')` instead of guessing. A partner ABSENT from the roster has no active incentive assignment (the full partner list lives in `partners`). The response also carries `program_version` ('2.0' or '1.0', decided by the company's incentive system), `direction`, `total_count`, `page`, `limit`, `has_more`. Paginate with page/limit (limit max 50); `direction` defaults to 'inbound' (what the company pays its partners) — pass 'outbound' for the reverse flow. For company-wide aggregates use `incentives_summary`; for one partner's full detail (benefits, campaigns, progression) use `partner_inc{1,2}_incentives`.EULEREULER
PluginrequiredSales & CRM - Incentives Summaryincentives · [Incentives] The company's incentive programs with per-tier enrollment counts — BOTH incentive systems in one list. Returns `tier_counts[]`, one row per tier/package with `program_version`, `program_name`, `tier_name`, `tier_order`, `count`. Inc 2.0 rows (program_version '2.0'): one per tier of each program, count = ACTIVE inbound assignments on that tier. Inc 1.0 rows ('1.0'): one per tier package, `tier_name` null (packages have revenue ranges, not tiers), count = DISTINCT partners on the package — the same number the Incentives dashboard shows. A count of 0 means the tier/package exists and nobody is on it; a company is on exactly one system, so all rows share one program_version. Use for aggregate questions: 'how many partners are on tier X / each incentive', tier distribution before a migration — ONE call, never paginate the roster to count. For the partner-by-partner list use `incentives_roster`; for one partner's detail use `partner_inc{1,2}_incentives`. (The `program-version`/`Inc_1_results`/`Inc_2_results` fields are a legacy per-partner view — meaningless without a partner context; ignore them and read `tier_counts`.)EULEREULER
PluginrequiredSales & CRM - Invite Partner Contacts to Portalinvite · [Partner Contacts & Portal Invites] Invites one or more EXISTING partner_contacts (by their contact ids) to a partner's portal in a single call. Get the ids from `list_partner_contacts` (the `id` in each contact object) or by creating them first with `create_partner_contact`. The backend reuses the partner's single `externally_invited_user_mapping` (or creates it on the first invite), then adds a per-contact invitation and sends the invitation email; if a contact's email already corresponds to a Euler account, portal access is granted immediately, otherwise on accept. **Idempotent per contact**: a contact already invited is not duplicated or re-emailed. Optional `agreement_id`, `restrict_access`, and `tags` mirror the in-app bulk-invite. Returns `{ success, invited_count, mapping_existed }` (`invited_count` = number of contact ids submitted; the actual sends happen asynchronously). Customer-side only. **Failure modes** (all safe): (1) invalid `partner_id` → HTTP 400 `dispatch_failed` + `MISSING_DATA` body. (2) `partner_id` of a different company, OR an EMPTY `partner_contacts` list → `{status: 'success', response: {}}` (empty body) — a guard terminated the workflow before anything was created. Resolve `partner_id` via `partners(action: 'list', filter_name: ...)` or `list_accounts`.EULEREULER
PluginrequiredSales & CRM - List Authorized Accountslist · [Account Management] Returns the customer + partner accounts the user approved during the MCP consent screen. Call this first when you need to resolve a partner by name or when the user has multiple roles. Each entry has: id, type ('customer' | 'partner'), name, company_id, partner_id (null for customer), affiliate_company_name (partner only — the customer company hosting the partnership), and dashboard_url (the canonical EULER web-app URL for this account's role — use this when the user needs to do something MCP doesn't expose, like creating an incentive program; customer accounts point to /dashboard, partner accounts to /partners). To resolve a partner by name, match `type === 'partner'` AND `affiliate_company_name === <target>`; use that entry's `partner_id` for referrals / partner_artifacts / performance / commissions. Response also includes `consent_summary` with `hidden_count` — if non-zero, some user accounts were not authorized in this session; ask the user to disconnect/reconnect to include more rather than guessing. Downstream tools auto-resolve partner_id to its company_id, so you only need to pass partner_id. IF the response includes a `backend_data_issue` field (only ever present when the backend returned zero accounts for a provisioned user), this is a backend data anomaly, NOT a consent problem — do NOT suggest disconnect+reconnect; surface the support_email from that field and offer to continue with other tools (partners, performance, commissions) which read directly from the user's company and may still work. When the user asks to do something this MCP doesn't cover (creating incentives, billing/account settings, adding new partners from scratch), surface the matching account's `dashboard_url` instead of guessing a URL.EULEREULER
PluginrequiredSales & CRM - List Partner Contactslist · [Partner Contacts & Portal Invites] Returns the contacts (people) associated with a specific partner — the COMPLETE team roster, including people who never logged into the portal (unlike `partner_users` action='list_users', which returns only the subset with an activated login). Customer-admin view only. Resolve `partner_id` via `partners(action: 'list', filter_name: ...)` or `list_accounts` (match by affiliate_company_name); IDs from `partner_directory_search` are profile_ids and will be rejected. Pair with `create_partner_contact` (to add a new person) and `invite_partners_to_portal` (to grant portal access). Returns `contacts_count` (number) plus `contacts` — a comma-separated string of compact JSON objects, one per contact, each with `id`, `email`, `first_name`, `last_name` (e.g. `{"id":"..","email":"..","first_name":"..","last_name":".."},{..}`). Use the `id` values directly as input to `invite_partners_to_portal`. NOTE: the `contacts` string is NOT wrapped in `[ ]` — wrap it yourself if you need a strict JSON array.EULEREULER
PluginrequiredSales & CRM - List Partner Contentcontent · [Content Search] Lists the actual content/files a partner has access to in their Partner Portal — PDFs, Word docs, images, uploaded videos, and external links (YouTube, Vimeo, Loom, Google Drive), newest first. Use for 'what content/files do I have', 'list my documents', 'show the PDFs shared with me', 'do I have a deck about X'. Returns each item with name, description, file_type, a URL (file_url for uploaded files OR link for external), cover image, size, `created_date`, and `is_downloadable`. IMPORTANT — `is_downloadable: false` does NOT mean the partner can't see the item: they may VIEW it in the Partner Portal's Content section, they just may not download the file. For those items, describe the content and point the user to the Content section of their Partner Portal — do NOT hand out `file_url` as a download link. (`is_downloadable` governs only `file_url`, the uploaded file; an external `link` such as YouTube/Vimeo/Drive is always fine to share, since viewing happens at the destination.) Also note a `file_url` generally opens only inside an authenticated Partner Portal session — if the user reports an access/permission error on the link, do not retry it or claim the content is missing: tell them to open it from the Content section of the portal. Pass `partner_id` (resolve via `list_accounts` for partner-role, or `partners(action: 'list', filter_name: ...)` for customer-admin). Optional `query` matches by WHOLE WORD, case-insensitive — not a substring (confirmed live 2026-08-13, QA finding M-01: 'ickson' will NOT match 'PPTX Dickson' — pass the full word, e.g. 'Dickson') — omit it (or pass '') to list everything. This is direct catalog retrieval; for conceptual 'how does X work' / documentation lookups that search INSIDE content, use `content_search` (semantic) instead. IDs from `partner_directory_search` are profile_ids and will be rejected.EULEREULER
PluginrequiredSales & CRM - Manage Contentcontent · [Content Management — Customer Admin] Write side of the customer-admin content library. action='create' adds a content item ('File' needs file_url from content_upload; 'Link' needs link) — every item needs at least one category_id from content_admin(action:'categories'). action='create_folder' adds a folder (FLAT, no nesting). action='add_to_folder' places or moves an existing item. action='edit' updates metadata and/or replaces the file/link — omitted fields keep their CURRENT value (the worker fetches the record first), and category_ids REPLACES the whole list when passed. action='change_visibility' / 'change_folder_visibility' set who can see an item or a folder; omitted visibility is preserved, and omitted share_with_all is preserved UNLESS visibility is explicitly changed away from 'All partners', which resets share_with_all to false (a visibility restriction always wins over a stale share_with_all — pass share_with_all explicitly to control it directly). partner_ids/tag_ids REPLACE the share list while add_partner_ids/remove_partner_ids change it incrementally (ignored when partner_ids is set). share_with_all=true exposes the content to EVERY partner and is confirmation-gated: tell the user what it means, get their agreement, then retry with confirm=true (without it the call is rejected with share_with_all_confirmation_required and nothing changes). action='delete' permanently removes a content item (and its category/folder links) — irreversible, confirmation-gated like share_with_all (rejected with delete_confirmation_required without confirm=true). action='archive_folder' hides a folder for good — also irreversible and confirmation-gated (archive_confirmation_required); the content that was inside it is NOT deleted or touched, it just loses that folder's organization. Get ids from content_admin.EULEREULER
PluginrequiredSales & CRM - Manage Partner Users & Rolesmanage · [Partner — Users & Roles] Creates and modifies a partner organisation's permission roles, and assigns/removes them for members. action='create_role'/'edit_role'/'assign_roles'/'remove_roles'/'update_default_roles' work for BOTH a partner-admin managing their OWN team AND a customer-admin managing a partner of their company — ⚠️ AS A CUSTOMER-ADMIN, these writes change the roles and portal access of users in ANOTHER company (your partner's organisation); BE CERTAIN and confirm the intent with the user first. **action='add_user' and action='invite_user' are PARTNER-ONLY — a customer-admin cannot call them (they fail with a scope error), even on a partner of their own company.** action='add_user' creates one or more partner_contacts from emails (requires partner_id, emails[], up to 50 per call); optional role_ids[] (assigning roles requires the caller to be a partner admin), send_invite (boolean, default false — true also emails each new contact a portal invite). Contacts are created immediately for emails not already on the team; already-existing emails are skipped (skipped.emails). **`affected_ids` is always empty for add_user** — the new contacts are created asynchronously after this call returns, so their ids don't exist yet at response time; call `list_partner_contacts` afterward to look them up by email. action='invite_user' sends a portal invite to a partner_contact that already exists (requires partner_id, contact_id — get contact_id from `list_partner_contacts`). action='create_role' creates a role (requires partner_id, role_title, category); optional: have_admin_permissions ('yes'/'no'), enable_all_sections ('yes'/'no'), default_sections[] (portal sections the role may see), custom_sections[] (custom partner-portal section ids). action='edit_role' edits a role — only the fields you pass change (requires role_id; same optional fields as create). action='assign_roles' assigns one or more roles to one or more members BY EMAIL (requires partner_id, emails[], role_ids[]); keep_old_roles (boolean): true ADDS to the members' current roles, false REPLACES them. **The emails must be people already in this partner's team — find them via `list_partner_contacts` (the full team roster), NOT via `partner_users` action='list_users' (which returns only the few people who have an activated portal login). An email that isn't one of the partner's contacts is silently skipped.** action='remove_roles' removes ONE role from ONE member (requires partner_id, email, role_id); remove_all_roles (boolean) strips ALL of that member's roles instead. action='update_default_roles' sets which roles new members are auto-assigned (requires partner_id, role_ids[]). Get role ids from partner_users action='list_roles'; `category` is one of the partner role categories (e.g. Partnerships, Sales, Marketing, Finance, Support). partner_id comes from list_accounts.EULEREULER
PluginrequiredSales & CRM - Moderate Partner Directorypartner · [Partner Directory] Moderate your Partner Directory: approve or reject a partner's profile edit, hide or unhide a profile, flag it as featured, or set its tier. Takes one or more `profile_ids` from `partner_directory_search` (NOT partner_ids). Only profiles in YOUR directory can be changed — ids belonging to another customer are silently not matched, and the response says how many actually applied. Rejecting requires `rejection_message`, which the partner reads. 'unhide' restores the status the profile had before it was hidden, so it only works on a hidden profile; 'hide' only works on a profile that is not already hidden. The public directory is a cached JSON blob refreshed on a ~10-minute cycle, so a change is not visible on the public page immediately. The valid values for `tier` come from your directory settings and are not readable through MCP yet — an unrecognised tier is written verbatim and will show as a tier no filter offers.EULEREULER
PluginrequiredSales & CRM - Partner Access Diagnosispartner · [Partners — general management] Diagnoses why access to the partner portal (or a specific section) is blocked. Returns, in one call: flow locks (which flow is gating access, progress, due date, locked sections), pending agreements that block access until signed, and invitation status (invited, email status, activated). Returns healthy=yes when nothing is blocking. As a PARTNER, use it to diagnose YOUR OWN access ("why can't I see the agreements tab?", "nothing loads in the portal", "I can't open X") — do NOT pass partner_id and do NOT ask the user for one; the caller's own partner is used automatically. As a CUSTOMER admin, pass the `partner_id` of one of your partners to diagnose them ("why can't partner X access/see Y?", "did partner X receive the invite?"). Pass `section` only when a specific portal area is named. Prefer this tool over guessing at bugs/permissions or returning a raw authorization error: name the blocking flow / unsigned agreement / pending invite and the concrete unblock step. Never invent a URL, id, or date.EULEREULER
PluginrequiredSales & CRM - Partner Applicationspartner · [Partners — general management] Reads partner-registration applications (partner signups awaiting or past a decision) for the user's company, including the applicant's contact details and every answer they gave on the registration form. action='list' returns applications newest first, paginated by offset/limit, optionally filtered by status and a submitted-on date range. action='get' returns one application in full (needs application_id) and is the only mode that includes the `answers` array. Every row carries the applicant's identity as first_name, last_name, email_address, company_name, website, phone_number and country — these are resolved from the form's mapped questions, so they are reliable regardless of the order the questions appear in. company_name falls back to the company name typed on the application when the form has no question mapped to it. A field with no value comes back as null. `status` is free text on the record; the values seen in practice are 'pending', 'approved', 'rejected' and 'error writing to crm'. Half-filled forms the applicant never submitted have status 'draft' and are excluded from both modes, so filtering for status='draft' returns nothing — that is the filter, not evidence that no drafts exist. Answers whose question was deleted are excluded. An answer on a question the program marked hidden may still be returned — that filter is pending a platform privacy change, so do not rely on it to withhold an answer. An application_id belonging to another company returns an empty list rather than an error. action='rejection_reasons' lists the rejection reasons configured on that application's registration form (needs application_id); call it before rejecting via resolve_partner_application. It returns `rejection_options` as {id, reason} and a `reason_required` flag — when the form has no reasons configured the list is empty and no reason is needed; a response with NO `reason_required` field means the configured reasons could not be read, so do not treat it as 'no reason needed' — read them again before rejecting. If a row carries `answers_unreadable: true`, that application's answers could not be read: the seven identity fields on that row are null because they are derived from the answers, NOT because the applicant left them blank — say the answers could not be read rather than describing an empty application. Decide an application with resolve_partner_application. This payload contains personal contact information for real people.EULEREULER
PluginrequiredSales & CRM - Partner Incentives — Inc 1.0partner · [Partner Incentives] Get a partner's active Inc 1.0 incentive plan. Requires partner_id — the data is scoped to THAT partner, not the logged-in user. action='status' returns: package name, payout frequency, net days post payment, and the commission tiers as `tiers[]` — each tier has name, min/max revenue range, commission_pct (%), flat_payout (fixed fee), and net_days. Use when a partner asks about their own commission structure, tier package or payout terms, or when a customer admin asks about one of their partners'. Returns found=false if this partner has no Inc 1.0 plan.EULEREULER
PluginrequiredSales & CRM
What is Tool Explorer?
Tool Explorer indexes the callable tool names and descriptions attached to public registry profiles. It is useful for seeing what agents can actually invoke, not just which profile exists.
How do category and verb filters work?
Category filters use the live registry category rollup. Verb filters use the public tool insights rollup, so the page stays backed by the same read models as the tracker charts.
Why do auth requirements matter?
Auth requirements show whether a tool is likely usable without account connection, requires authentication, is private, or is unknown in the current snapshot.