CampusThreads
Run ambassador operations
- Category
- Operations
- Primary Subcategory
- Project & Task Management Platforms
Integration details
Description
CampusThreads helps organization administrators run ambassador programs: review operations, coordinate events and shifts, manage tasks and resources, communicate with ambassadors and prospects, and configure their workspace.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Project & Task Management Platforms
- Secondary Subcategories
- None listed
- Brand
- CampusThreads
- Access
- Account required
- First tracked
- 2026-08-27
- Tool count
- 119
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Project & Task Management Platforms
View Category119 tools agents can invoke
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this only if asked explicitly which tools are available. Returns the catalog (name, description, side-effect class).
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this only if you specifically need the signed-in admin's identity object (user id, email, company id/slug, brand, and the admin's linked ambassador account if any). The orientation already includes this info, so most questions don't need this tool.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for ANY question about WHEN an ambassador is free, reachable, or already booked — 'what's their availability', 'are they free next week', 'can I schedule them', 'how do they get notified'. Returns, per ambassador: declared weekly SHIFT availability and CHAT availability (recurring slots in their own timezone, or an always/never mode); one-time UNAVAILABILITY blocks (time off — these override everything, including 'always available'); the shifts they already have SCHEDULED within the lookahead window; a `currentlyAvailable` flag for shifts and for chat; and their NOTIFICATION preferences (which categories reach them by email vs push, and whether a push token is registered). Identify the ambassador by `id` (numeric user id), `ids` (BATCH — many ids in one call; prefer this over per-id fan-out), or `query` (name substring). To find the best time to schedule a GROUP, use `availability_overlap` instead — it does the cross-ambassador overlap math for you. `windowDays` sets the scheduled-shift lookahead (default 7). Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this to set championActive=false on an ambassador. Reversible via ambassador_reactivate.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Permanently delete an ambassador (or cancel a pending invite). Two-phase: first call returns a preview + confirmation token; call again with confirm.token. Irreversible — to merely make an ambassador inactive, use ambassador_deactivate instead.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Invite one or more people to become ambassadors, by email — each is sent an invitation to onboard (the Recruit / Invite Ambassadors action). `notifyWhenOnboarded` pings you when an invitee finishes onboarding.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Rank ambassadors over a time window — shifts, hours worked, and reach (people reached). `basis: 'worked'` (default) counts only shifts the ambassador actually worked — productivity ('top ambassadors this month', 'who worked the most hours'). `basis: 'assigned'` counts every shift assigned to them in the window regardless of status (future scheduled shifts included; cancelled excluded) — their total workload / how many chances they have had. For 'who has had the FEWEST shifts' / spreading opportunities fairly, use `order: 'asc'` with `includeZeroActivity: true` (so ambassadors with no shifts appear, count 0) and usually `basis: 'assigned'`. Aggregates in one call — do NOT fan out over shift_query and tally yourself. Defaults to the last 30 days. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Search WORKERS (ambassadors) within the tenant. WHEN: user asks about specific workers by name/status/id, or wants an ambassador count or status breakdown. NOT WHEN: the name they mention matches the tenant (auto-scoped, never a record). NOT WHEN: they ask about admin/portal users → use `colleague_query`. NOT WHEN: they ask about leads/prospects → use `prospect_query`. NOT WHEN: they ask WHEN a worker is free / what they're booked for / how they're notified → use `ambassador_availability`. Defaults: no args → count + byStatus + recent. `id` → that ambassador or null. `query` → substring across firstName/lastName/email. Each record includes profile voice-note presence (`hasProfileVoiceNote`, URL, duration) and `topicTags`, which are the topics the ambassador is qualified/interested to talk about for prospect matching. Use `hasVoiceNote` for 'who has a voice note' and `topic` for 'who is qualified to talk about X'. Status semantics: active = championActive && completedPassword; inactive = !championActive; pending = invited but not yet onboarded. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this to set championActive=true on an ambassador. Reversal of ambassador_deactivate.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this to update an ambassador's profile fields. Cannot change company affiliation or auth fields.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this to read the CURRENT VALUES of shift/task/invoice operational rules, social-media attribution channels/hashtags for ambassador post analytics, scheduled-report cadence, or rule/policy-level feature toggles for this tenant. Application Settings → Social Media does not control the prospect widget's Content tab feed; use `widget_content_diagnostics` for that. This returns stored settings, not a feature catalogue — for 'how do I…' / 'where do I configure…' questions about the portal, use `product_help_search` instead. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Update this tenant's operational settings (the values application_settings_get reads back): who can join, shift clocking/approval/cancellation rules, the default hourly rate, invoice config, social-media attribution hashtag tracking for ambassador post analytics, scheduled reports, and feature on/off toggles. Pass only the fields you want to change; omitted fields are left untouched. Reversible. These social-media fields do not control the widget Content tab feed. For branding and prospect-nurturing settings use widget_settings_update.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for the full USAGE HISTORY of ONE physical asset — every logged event (Used in Activation, Changed Location, Changed Owner, Altered or Repaired, Shipped / In Transit, Damaged or Expired, Lost or Missing): when it happened, who carried it out, and the posting it was used for. Identify the asset by `id` or `query` (name substring). Returns the event timeline newest-first, counts by event type, and `usageCount`. To rank MANY assets by usage, use `physical_asset_query` and sort on its `usageCount`. For the immutable audit trail of event create/edit/delete actions, use `physical_asset_audit_trail`. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this to find the BEST TIME to schedule a GROUP of ambassadors — 'when can the most of them meet', 'best 3-hour window next week for a team event'. Give it the ambassador ids to consider, an event duration and a date window; it computes — server-side — every candidate start time and ranks them by how many ambassadors are concurrently free, accounting for each one's weekly availability (in their own timezone), their time-off blocks, and shifts they're already booked for. Returns ranked windows, each with the available + unavailable ambassador names. Pick the in-scope ambassador set yourself first (e.g. by location/program) — this tool does the scheduling math, not the guest-list selection. Do NOT compute overlaps by hand from per-ambassador `ambassador_availability` calls; that is exactly what this replaces. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Read the tenant's current Chat Guidelines exactly as the admin portal defines them. Use this for 'what are the chat guidelines', 'conversation guidelines', or ambassador/prospect chat moderation guidance. The admin portal stores this as the auto-generated Chat Guidelines resource (`resource.chatGuidelines=true`) and syncs its custom description to the tenant school settings. Returns the custom guidelines plus the always-enforced baseline rules shown in the portal. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Update the tenant's custom Chat Guidelines, mirroring the admin portal's edit field on Moderation → Chat Guidelines. This edits the auto-generated Chat Guidelines resource description; the backend then syncs the same text to tenant settings for moderation.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Search COLLEAGUES (fellow admins — people who log into the portal alongside the signed-in user) within the tenant. WHEN: user asks 'who else has access', 'list our admins', 'who's on our team', or wants the admin headcount. NOT WHEN: the name they mention matches the tenant (auto-scoped, never a record). NOT WHEN: they ask about workers → use `ambassador_query`. NOT WHEN: they ask about leads → use `prospect_query`. Defaults: no args → all colleagues + count. `id` → that colleague. `query` → name/email substring. `isYou: true` flags the signed-in admin. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Post a new comment on a task or resource. Provide exactly one of `taskId` or `resourceId`, plus `message`. The signed-in admin is recorded as the creator. Parent's tenant ownership is verified server-side.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Permanently delete a comment. Only the comment's creator can delete it. Two-phase: preview, then confirm with token.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Read comments across one or many tasks or resources in a SINGLE call. Provide exactly one of: `taskId` (one task), `taskIds` (batch of tasks), `resourceId` (one resource), `resourceIds` (batch of resources). ALWAYS prefer the batch form when checking comments across multiple parents — one call with `resourceIds: [1,2,3,...]` is dramatically faster than N calls each with one `resourceId`. Each returned comment carries `parent: { kind, id }` so you can group results client-side. Parent's tenant is verified server-side. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Edit the message of an existing comment. Only the comment's creator can edit it (enforced server-side). The `edited` flag is set automatically.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] The community bot's activity feed — every autonomous action it has taken (answers, engagement prompts, acceptance celebrations, office-hours syncs, escalations, weekly pulses, moderation, …). Filters: `kind` (machine kind, see byKind keys in the result), `channel`, `limit`. Items carry a human `title` — use that wording with the user, never the raw kind. Matches the Community page's 'Bot Activity' feed and its metrics. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] The Discord community's channels with activity: name, type, topic, message count, and the latest message preview. Filter: `query` (channel name substring). Matches the Community page's channel list. Refer to channels as #name. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Community members ranked by engagement (messages, questions, reactions). Filters: `admittedOnly` (members whose offer of admission has been celebrated), `query` (name substring). Returns display name, engagement score and grade, message/question/reaction counts, last activity, and whether they have been admitted. Bots and ambassadors are excluded, matching the Community page's engagement list. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Moderation cases the community bot opened for flagged Discord messages. Filter: `status` (open = still needs administrator review, resolved, any). Returns the member's name, channel, reason, the bot's explanation, the flagged content, and case status. Matches the Community page's 'Moderation Review' feed. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for ANY question about the Discord community's overall state — 'how is the community doing', engagement grade, member/message/question counts, the latest weekly pulse (top concern topics with week-over-week trends, most active channels), and the class-composition snapshot (programs, regions, admitted count). Matches the Community page header and its Weekly Pulse / Class Composition cards. For individual questions, members, channels, moderation cases, or the bot activity feed, use the dedicated community_* tools. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Prospect questions asked in the Discord community and how each was handled. Filters: `status` (pending = still awaiting a reply, queued = reply in progress, answered = bot answered, escalated = handed to staff), `channel` (name, with or without #), `query` (substring of the question text). Returns the asker's name, channel, question, status, and the bot's response preview. Matches the Community page's 'Messages Needing Responses' feed (status: pending) and its questions list. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Discord community verification and role-gating status. Use this for questions about who has verified their Discord account, who is still Unverified, verification-link events, and the current managed role transition from Unverified to Verified Prospect. This reflects the live prospect verification flow used by the Discord community. Broader ambassador/admin Discord OAuth linking and periodic role reconciliation are not live admin-portal features unless matching records are present in source data. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Show current tenant/auth context and coarse tool capability counts.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Load the CampusThreads MCP operating guide. Use at the start of broad or multi-step CampusThreads work.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Discover CampusThreads portal entities, fields, types, allowed values, operations, and writable fields before using ct_read/ct_write.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] List CampusThreads MCP workflow skills available to guide multi-step work.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Read one CampusThreads MCP workflow skill before executing a multi-step workflow.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Generic schema-driven write with strict validation and dry-run previews. Defaults to dryRun:true. Currently supports company_settings; use existing domain mutations for other entities until their schema write contracts are added.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for ANY broad org-wide question — 'how are we doing', 'what needs my attention', 'give me a summary'. Returns ambassador status, shift status incl. needsAttention count, prospect count, prospect-thread backlog — all in one call. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for 'what needs my attention', 'what's outstanding', 'what should I do today', 'anything I'm behind on' — it returns one actionable digest fused across shifts, prospect threads and tasks: shifts proposed by ambassadors / pending approval / awaiting a report / with cancellation requests / unfilled and starting soon, prospect threads needing a response or help, and overdue tasks. For read-only METRICS and leaderboards use dashboard_overview instead. For shift-only action item questions ('when it comes to shifts', 'shift queue', 'what shift work is on me'), set `area: 'shifts'` so the result excludes unrelated thread/task sections and avoids extra queries. Each section returns `items` up to `detailLimit`; if `count` is higher than `items.length`, say more exist and ask before drilling in. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Create a new ambassador group with an explicit (manual) member list. Dynamic criteria-based groups (by country, program, ambassador type, tags, etc.) must be created in the portal — this tool creates manual-selection groups only.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for ANY question about ambassador groups (the way the tenant clusters ambassadors). No args → count, totalMemberships, recent. With `id` → single group. Filters: `query` (name substring). Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Rename a group or replace its member list. The member list is REPLACED wholesale — pass the full intended set of ambassador ids, not a delta. Only manual-selection groups should have their members edited this way.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Start a new INTERNAL thread — a discussion among the named ambassadors (plus you). Pass the ambassador record ids to include as contributors and, optionally, a `title` (up to 50 characters). After creating, post into it with `thread_send_message`.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for internal admin↔ambassador chat threads, including posting conversations that are automatically created for a specific posting so ambassadors/admins can discuss that shift opportunity. Returned `source: 'posting'` means an auto-created posting conversation; `postingId` is for internal tool joins only and must not be shown to the user. Describe these as 'posting conversations' or 'the conversation for <posting title>', never as IDs, variables, or system-generated shells. No args → count, byStatus (active = msg in last 7d / quiet), recent. With `id` → single thread. Filters: `status`, `source`, `postingId`, `ambassadorId`, `query` (thread name). Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Generate an invoice for an ambassador for a pay period — the equivalent of the ambassador detail → Invoices → Add Invoice action. The total amount, hours and shift count are COMPUTED by the backend from the ambassador's shifts worked between startDate and endDate; you do not supply them. By default the period must contain at least one qualifying shift — pass allowEmpty:true to issue a zero-shift invoice anyway. The invoice is shared to the ambassador's app.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for ANY question about invoices (records of ambassador earnings). No args → count, totalSum (per currency), top-earners-by-amount, recent. Single: `id` (one invoice). Batch: `ids: [...]`. Filters: `ambassadorId` (numeric user id) OR `ambassadorIds: [...]` (many), `generatedAfter`/`generatedBefore` (ISO datetime — 'past year', 'this month'). ALWAYS prefer the batched form over per-ambassador drilldown. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for ANY question about who has VISITED a location and when — 'who's been to <venue>', 'has anyone worked at X', 'when was the last activation at Y', 'how many visits has <location> had'. Returns every recorded visit to ONE location: the ambassador (resolved name), the date, the posting + shift it belonged to, plus reach, duration and rating — with per-ambassador and per-posting rollups. Identify the location by `id` (from location_query) or `query` (label/address substring). A location with zero visits returns an empty list — nobody has worked there yet. Optional `after`/`before` (ISO datetime) restrict the visit window. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Create one or more locations (venues). Always pass a `locations` array — one element or many; many are written in a single batched commit, so prefer one bulk call over repeated single calls. Provide lat/lng for a location to appear on the portal Map.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Permanently delete a location. Two-phase: first call returns a preview + confirmation token; call again with confirm.token to delete. Irreversible.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for ANY question about locations (venues where shifts happen). No args → count, byType breakdown, recent. With `id` → single location. Filters: `type` (storage_site/administrative_site/activation_site/transitional_site), `subType` (e.g. University/Coffee Shop), `query` (label or address). Each location carries `visitCount` / `lastVisited` / `totalReach` — read these to see at a glance which venues have had activity (visitCount 0 = nobody has worked there). For the who/when detail behind those numbers, use `location_activity`. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Update a location (venue) — label, type, address, coordinates, tags. Pass only the fields you want changed.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this to inspect/open media from the tenant Media page in bulk. Returns MCP image content blocks for images, and resource links for videos/documents/other files. Use `key`/`keys` from media_query or filter by query/mediaType. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
[Tenant: Lumo (slug=lumo-demo). Every tool is auto-scoped here — never search FOR this name as a record.] Use this for the tenant Media page / Media Library grid. No args → count, byType (image/video/document/other), recent. Filters: `key`, `mediaType`, `mime` substring, `query` (filename). To inspect multiple images/videos/files, use `media_content_query` after this; it returns actual image blocks for images and resource links for videos/files. Routing: prefer this optimized tool for the workflow it describes. If its result omits a field visible in the admin portal, or source-level detail is needed, call `ct_read` for supported generic entities or `portal_record_query` for an exact record before saying the MCP cannot access it.
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are CampusThreads alternatives on ChatGPT?
As of 2026-08-27, CampusThreads competes with Adobe Workfront, Agiflow, AIOProductOS, Aphex, Asana, Atlassian Rovo, awork, Cinch, ClickUp, Constructable, COR, Jaggle, JobTread, Linear, monday.com, MotionHub, Namp, Nifty, Onplana, Plate, Project Kickoff Pack, Riido, Runrun.it, Smartsheet AU, Smartsheet EU, Smartsheet US, Trello, Voarq, Weft, Wrike in ChatGPT Project & Task Management Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.