breeze_add_project_members
ChatGPTAdd one or more teammates to a project so they can see and work on it. Pass project_id and a user_ids array (from breeze_list_team_members). Idempotent. Up to 25 per call. Adding more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; only a team owner or admin, or a project admin with invite rights or on a project they own.
breeze_attach_files
ChatGPTAttach one or more files to a task, or to one of its comments. Each file is either an UPLOADED file (pass the key returned by breeze_get_upload_url, after you have uploaded the bytes) or a LINK (pass a public url — Drive, Figma, Dropbox; nothing is uploaded). Set inline: true to place the file INSIDE the task description or comment body instead of the Files list — that is how images are shown in the text; the tool returns embed_html to paste into the body, or use append_to_body to have it appended for you. Up to 25 files per call; more than one is two-step (preview, then confirm: true). Needs the 'write' scope; observers cannot attach files. A key is only ever one you got from breeze_get_upload_url in this conversation AND then uploaded bytes to. An image pasted or dropped into the chat has no key and no path of its own — see breeze_get_upload_url for how to get such an image onto disk first. Never attach a different file as a stand-in for the one you were asked to attach.
breeze_copy_cards
ChatGPTCopy (duplicate) one or more cards into a list (stage) and, optionally, a swimlane of the SAME project, as Breeze's own Copy does. Each copy keeps the card's description, custom fields, tags, assignees, dates, status, colour, watchers and checklists with their to-dos (ticked ones stay ticked). Comments, files, time entries, estimates and dependency links are NOT copied. Pass stage_id, an optional swimlane_id (omit it for the board's default row; A swimlane is a horizontal board row, also called a row, lane, band, track, stream or workstream; a list or column is a stage.) and a cards array (archived cards can be copied too; the copy is a live card): each a card_id plus an optional new name and custom_fields to change on the copy (keyed by field id or name; breeze_get_project lists them). Copies go to the bottom of the list; the list's and swimlane's automations apply when they differ from the original's. Up to 25 per call; copying more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; observers cannot copy cards.
breeze_create_cards
ChatGPTCreate one or more cards (tasks) in a project's stage (list/column). Requires the numeric project_id and stage_id — resolve them first with breeze_get_project (its stages) — plus a cards array. Each card takes a name and optionally start/due dates (ISO8601: a date for an all-day one, a date and time with an offset for a timed one), a description, assignee_ids (project members, from breeze_list_team_members), tag_ids and custom_fields (values keyed by field id or name; breeze_get_project lists the fields). Up to 25 cards per call — to create more, call again with the next batch. Creating more than one is two-step: call once to preview, then again with confirm: true. Cards are appended to the bottom of the stage. A list or swimlane can have automations that apply to a card entering it (status, colour, tags, assignees, due date, even archiving it). A due date you pass in the same call takes precedence; so, on an update, do assignees and tags (on a create, the list's are added to yours). mentions @mentions people in the card description, so every card in the call needs a description when you use it. Pass swimlane_id (from breeze_get_project) to put the cards in a swimlane; A swimlane is a horizontal board row, also called a row, lane, band, track, stream or workstream; a list or column is a stage. Needs the 'write' scope; observers cannot create cards unless their team allows it.
breeze_create_notes
ChatGPTAdd one or more notes to a project's Notes panel. Pass project_id and a notes array, each a name ("New note" if omitted) and a description (the body; HTML, as Breeze stores it). mentions @mentions people in every note of the call, notifying them. Up to 25 per call; adding more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope and a role that can see notes.
breeze_create_project_messages
ChatGPTPost one or more messages in a project's discussion (the project chat room, separate from card comments). Pass project_id and a bodies array. The room is created on first use. Use mentions to @mention people — they are notified in Breeze and by push. In a discussion room, "all" means everyone in the room and mentions are limited to room participants; there is no "task" option here. Up to 25 per call. Posting more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; observers cannot post.
breeze_create_projects
ChatGPTCreate one or more projects. Pass a projects array; each takes a name and optionally a workspace_id (to group it, from breeze_list_workspaces), stage names (the board lists/columns in order — defaults to To-do / Doing / Done), and member_ids to add teammates. The caller is added as owner automatically. Up to 25 per call. Creating more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; only a team owner or admin can create projects.
breeze_create_stages
ChatGPTAdd one or more stages (lists/columns) to a project's board. Pass project_id and a names array; stages are appended to the right in the order given. Up to 25 per call. Adding more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; any project member but an observer can change a project's lists.
breeze_create_swimlanes
ChatGPTAdd one or more swimlanes to a project's board. A swimlane is a horizontal board row, also called a row, lane, band, track, stream or workstream; a list or column is a stage. Pass project_id and a names array; swimlanes are added at the bottom of the board in the order given (move one with breeze_update_swimlane). Up to 25 per call. Adding more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; any project member but an observer can change a project's swimlanes.
breeze_create_todo_lists
ChatGPTAdd one or more to-do lists (checklist groups) to a card. Pass card_id and a names array. Up to 25 per call. Adding more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; observers cannot edit cards.
breeze_create_todos
ChatGPTAdd one or more to-dos (checklist items) to a card. Pass card_id and a todos array; each item takes a name and optionally todo_list_id (the checklist to put it in, from breeze_get_card; without one it goes in the card's top checklist) and a duedate (ISO8601). A to-do has to be in a checklist, so on a card with none, create one first with breeze_create_todo_lists. Up to 25 per call — to add more, call again with the next batch. Adding more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; observers cannot edit cards.
breeze_delete_cards
ChatGPTArchive one or more cards — they come off the board but can be brought back later with breeze_restore_cards. Each card's comments, checklists and time go with it. Pass a card_ids array (up to 25). ALWAYS two-step, even for a single card: call once to preview what will be archived, then again with confirm: true. Needs the 'write' scope; only a team owner/admin or a project admin with archive rights.
breeze_delete_estimates
ChatGPTDelete one or more estimates — PERMANENT, this CANNOT be undone. Card planned time and project total planned are recomputed. Pass an estimate_ids array (up to 10). ALWAYS two-step, even for a single estimate: call once to preview, then again with confirm: true. You can only delete your own estimates unless you're a team owner/admin and the project is your team's. Needs the 'write' scope and estimate permission.
breeze_delete_project
ChatGPTDelete a whole project — it and all its cards are removed from view, but it can be brought back later with breeze_restore_projects. ONE project per call (deleting a project cascades its entire contents, so it is deliberately not a bulk operation). Two-step: call once to preview (shows the card count), then again with confirm: true. Needs the 'write' scope; only a team owner or admin, or the project's owner with archive rights, can delete a project.
breeze_delete_project_messages
ChatGPTDelete one or more project discussion messages — PERMANENT, this CANNOT be undone. Pass a message_ids array (up to 10). ALWAYS two-step, even for a single message: call once to preview, then again with confirm: true. You can only delete only your own messages, whatever your role. Needs the 'write' scope.
breeze_delete_stages
ChatGPTArchive one or more stages (lists/columns) and the cards in them — they come off the board but can be brought back with breeze_restore_stages. Pass a stage_ids array (up to 25). ALWAYS two-step, even for a single list: call once to preview (shows how many cards will be archived), then again with confirm: true. Needs the 'write' scope; any project member but an observer can change a project's lists.
breeze_delete_swimlanes
ChatGPTDelete one or more swimlanes — PERMANENT: Breeze has no swimlane archive, so a deleted swimlane cannot be brought back. A swimlane is a horizontal board row, also called a row, lane, band, track, stream or workstream; a list or column is a stage. No card is deleted: the cards in it move to the board's default row, in the same lists. Pass a swimlane_ids array (up to 10). ALWAYS two-step, even for one swimlane: call once to preview how many cards will move, then again with confirm: true. To archive the cards as well, archive them first with breeze_delete_cards. Needs the 'write' scope; any project member but an observer can change a project's swimlanes.
breeze_delete_time_entries
ChatGPTDelete one or more logged time entries — PERMANENT, this CANNOT be undone. Card and project tracked totals are recomputed. Pass an entry_ids array (up to 10). ALWAYS two-step, even for a single entry: call once to preview, then again with confirm: true. You can only delete your own entries unless you're a team owner/admin and the project is your team's. Needs the 'write' scope and time-tracking permission.
breeze_delete_todo_lists
ChatGPTDelete one or more to-do lists (checklists) AND all their items — PERMANENT, this CANNOT be undone. Pass a todo_list_ids array (up to 10). ALWAYS two-step, even for a single list: call once to preview the item counts, then again with confirm: true. Needs the 'write' scope; observers can only edit checklists if allowed.
breeze_delete_todos
ChatGPTDelete one or more to-dos (checklist items) — PERMANENT, there is no recycle bin and this CANNOT be undone. Pass a todo_ids array (up to 10). ALWAYS two-step, even for a single item: call once to preview, then again with confirm: true. Needs the 'write' scope; observers can only delete todos if allowed.
breeze_get_card
ChatGPTGet full details of a single card (task): description, assignees, start/due dates, status, tags, time tracked, planned time, custom fields, attachments, and comment count.
breeze_get_download_url
ChatGPTReturn a short-lived download link for a file attached to a task, so you can fetch and read it yourself (e.g. with curl). Pass the attachment_id from breeze_get_card or breeze_search. Link attachments (files stored elsewhere, like Drive or Dropbox) return their own URL unchanged. The link expires in 15 minutes. Read-only: nothing is changed.
breeze_get_me
ChatGPTGet the current authenticated Breeze user: identity, team, role, permission flags, and how many projects they can access. Call this first to learn who you are acting as.
breeze_get_note
ChatGPTRead one project note in full: its name and its body (description, as the HTML Breeze stores). Note ids come from breeze_list_notes or breeze_search.
breeze_get_project
ChatGPTGet full details of a project the user can access: stages (board columns, ordered), swimlanes (board rows, ordered; empty when the board has none), members, available statuses, custom fields (id, name, type and, for a dropdown, its options — the values breeze_create_cards / breeze_update_cards / breeze_copy_cards accept), and time/plan totals.
breeze_get_project_stats
ChatGPTProject overview stats: total cards, done vs open (done = carrying the project's completed status, as Breeze counts it), card counts by stage / status / assignee, due-date buckets (overdue / today / upcoming / none), and time totals (tracked / planned, shown only if you have time-tracking / estimate permission).
breeze_get_upload_url
ChatGPTSTEP 1 OF 2 for putting a file on a task. Returns a short-lived upload link for ONE file; you then upload the bytes yourself (a normal multipart POST — e.g. curl -F with each returned field, then -F file=@<path>), and finally call breeze_attach_files with the returned key to attach it. Nothing is attached until step 2, and this call creates nothing. The link expires in 15 minutes. Works for any file type: images, PDFs, zips. Needs the 'write' scope. BEFORE CALLING, CHECK YOU CAN ACTUALLY READ THE FILE. This flow needs (a) the file on disk at a path you know, and (b) the ability to run a command. File bytes never travel through these tools, so if you cannot run a shell command, you cannot attach an uploaded file at all. AN IMAGE PASTED OR DROPPED INTO THE CHAT COMES WITH NO PATH. A screenshot you were shown, a drag-and-dropped image, or output from another tool reaches you as pixels, not as a file, and no filename is supplied. Never invent one. In that situation, in order: 1. Get it onto disk if you can, from EITHER of two places, and check both before choosing: (a) the conversation itself — some clients persist pasted images where you can read and decode them (Claude Code keeps them in its session transcript under ~/.claude/projects/); (b) the original file, which a dropped image usually still has wherever the user dragged it from, and a screenshot usually has in ~/Desktop or ~/Downloads. PREFER THE ORIGINAL ON DISK. Clients routinely DOWNSCALE AND RE-ENCODE what they store in the conversation — a paste that reaches you as a 2000px lossy WebP can be a 2754px PNG on disk — so the transcript copy is a degraded derivative, not the file the user means. When you have both, compare dimensions and take the larger; use the transcript copy when no original exists. Matching an on-disk file to a paste is INFERENCE, not knowledge: a recent file whose image matches is a strong candidate, but size alone is not, and the transcript copy will NOT be byte-identical to it. CONFIRM with the user before uploading a file you matched rather than were given. 2. Otherwise ask. Request the path, or a public URL to attach as a link with breeze_attach_files url. NEVER upload a different file as a stand-in. Attaching the wrong image is worse than attaching nothing, because the user will not notice the swap. A file that already has a public URL (Drive, Figma, Dropbox) never needs this tool — call breeze_attach_files with url instead.
breeze_link_cards
ChatGPTRecord that one task DEPENDS ON one or more other tasks. The card shows these as 'This task depends on', and the dependent tasks show 'Tasks that depend on this task'; the Gantt chart draws them as arrows. Pass card_id (the task that is blocked) and depends_on_ids (the tasks it waits for) — up to 25 per call. All tasks must be in projects you can access, and the card's project must have task dependencies enabled. Linking more than one is two-step: call once to preview, then again with confirm: true. To reference a task inside a comment or description instead of creating a dependency, use the card_refs option on the comment/card tools. Needs the 'write' scope; observers cannot link tasks.
breeze_list_activity
ChatGPTActivity / audit feed (newest first). Pass card_id for a single card's full history, or project_ids (or omit for all accessible projects) for a project-wide feed, optionally filtered by user_ids. Filter the event kind with action_types (the verb: create/update/move/destroy/delete/reactivate — pass ["create"] for CREATION events) and/or actions (the subject: comment/name/todo/member/tag/stage/cardstatus/duedate/startdate/desc/tracked_time/planned_time/card_attach/note/custom_field/...). Returns structured entries — action, action_type, who, which card, when, and stripped text/old_text — for you to narrate. Filter the window with created_after/created_before (e.g. 'what changed this week').
breeze_list_cards
ChatGPTList/count cards (tasks). Pass project_id for one project, or OMIT it to query ALL accessible projects. Natural shortcuts: due (overdue/today/this_week/upcoming/none, timezone-aware) and unassigned — prefer these over computing dates yourself. Other filters: card_ids (several known cards in one call), stage_id, assignee_id, status_id, done, tags, swimlane_id, custom_fields, and explicit ranges for due / start / created / updated. stage_id/status_id/assignee_id are numeric ids — resolve names first via breeze_get_project (stages, statuses) or breeze_list_team_members (people). Returns compact card summaries (incl. created_at/updated_at) with a total count. Paginated. (For keyword text matching use breeze_search; for fuzzy/meaning use breeze_semantic_search.)
breeze_list_my_cards
ChatGPTList cards assigned to the current user across all accessible projects ('my tasks'). Filter by done flag and/or due bucket (overdue/today/this_week/upcoming/none) — e.g. due:'overdue' for 'my overdue tasks'. Sorted by due date.
breeze_list_notes
ChatGPTList a project's notes (its Notes panel), newest first: id, name, dates and the start of each note's text. Read one in full with breeze_get_note.
breeze_list_project_messages
ChatGPTList messages in a project's discussion (the project chat room, separate from card comments). Pass project_id. Newest first, paginated. Use the returned message ids with breeze_update_project_message.
breeze_list_projects
ChatGPTList projects the current user can access. Optionally filter by workspace. Returns id, name, slug, workspace, color, and card count. Paginated.
breeze_list_tags
ChatGPTList tags (with card counts) for a project, or across all accessible projects if project_id is omitted. Returns id, name, color, project_id, cards_count. Tags are per-project.
breeze_list_team_members
ChatGPTList users the current user can see (their team, or co-members of their projects), plus the team's user groups. Use to resolve names to user ids for assignees and for @mentions. A group is mentioned by its mention_id — pass that in the mentions option of the comment, card or message tools.
breeze_list_time_entries
ChatGPTList logged time entries, filtered by project, card, user, and date range (either end may be left open). Paged: when next_offset is set, call again with it as offset to get the rest. Requires time-tracking permission.
breeze_list_todos
ChatGPTList/count to-do (checklist) items as first-class objects, across cards and projects — the way to answer questions like 'todos created this week' or 'todos assigned to X'. Pass project_id for one project, card_id for one card, or OMIT both to query ALL accessible projects. Filters: assignee_id (the todo's own assignee), unassigned, done, todo_list_id, and date ranges for created / updated / due / start. Each todo carries its list name, parent card, assignee_ids and timestamps. Paginated, newest-first. (To read one card's checklist grouped by list, use breeze_get_card instead.)
breeze_list_workspaces
ChatGPTList the workspaces in the current user's team. Workspaces group projects. You see the workspaces holding projects you are a member of; an admin also sees workspaces with no projects.
breeze_log_time
ChatGPTLog one or more time entries on a card, in MINUTES. Pass card_id and an entries array; each entry takes minutes and optionally logged_date (ISO8601, defaults to today), notbillable, and a desc — so a week of work can be logged in one call. Updates the card's and project's tracked totals automatically. Up to 25 per call. Logging more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope and time-tracking permission.
breeze_restore_cards
ChatGPTBring one or more archived cards back onto the board (undo breeze_delete_cards), along with their list if that was archived too. Pass a card_ids array (up to 25). Find archived card ids with breeze_search (only_archived: true). No confirmation needed — restoring only adds things back. Needs the 'write' scope; only a team owner/admin or a project admin with archive rights.
breeze_restore_projects
ChatGPTBring back one or more deleted projects (undo breeze_delete_project) so they and their cards reappear. Pass a project_ids array (up to 25). Only archived items can be brought back — permanently-deleted things (comments, time, estimates, todos, messages) cannot. No confirmation needed — restoring only adds things back. Needs the 'write' scope; only a team owner or admin, or the project's owner, and only for a project they are a member of.
breeze_restore_stages
ChatGPTBring back one or more archived stages (lists/columns) and the cards that were archived with them (undo breeze_delete_stages). Cards archived separately (not part of a list's deletion) are left alone. Pass a stage_ids array (up to 25), and restore_cards: true to bring back EVERY card currently archived in those lists regardless of when. No confirmation needed — restoring only adds things back. Needs the 'write' scope; any project member but an observer.
breeze_search
ChatGPTEXACT keyword / full-text search (Postgres) across Breeze content: cards, comments, projects, todos, notes, tags, attachments. Matches the literal words you pass in the text — it does NOT understand synonyms, paraphrases, or vague / misspelled / ambiguous names. Use it when you know the actual term. For fuzzy or meaning-based queries, or to resolve a vague project/task name to an id, use breeze_semantic_search instead. Supports the same filters as the Breeze search: project_ids, types, status_ids, assignee_ids, stage_ids, tags, swimlane_ids, custom_fields, updated_after/before, archived.
breeze_semantic_search
ChatGPTMEANING-BASED (semantic / RAG) vector search over the AI index, across the user's accessible Breeze content (cards, comments, projects, notes, todos, project messages, time entries, estimates). Best for fuzzy, natural-language, paraphrased, or ambiguous queries, and for RESOLVING VAGUE project/task names to ids when you don't know the exact words. For an exact known keyword/term, breeze_search is faster and precise. Returns ranked matches with object_type, object_id, project_id, similarity, and a preview.
breeze_set_estimates
ChatGPTAdd one or more estimates to a card, in MINUTES. Pass card_id and an estimates array; each takes minutes and optionally logged_date (ISO8601). Updates the card's planned time and the project's total planned. Up to 25 per call. Adding more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope and estimate permission.
breeze_unlink_cards
ChatGPTRemove the dependency link between one task and one or more others, in whichever direction it was created. Pass card_id and unlink_ids (up to 10). This only removes the link — no task is deleted. Two-step at ANY count: call once to preview, then again with confirm: true. Needs the 'write' scope; observers cannot change links.
breeze_update_cards
ChatGPTApply the SAME change to one or more cards (tasks). Pass a card_ids array (up to 25) plus the fields to change: name, description, start/due dates (ISO8601), assignee_ids, status_id (the coloured status chip, e.g. Ready / Blocked / On Hold / Completed; pass null to clear it), tag_ids (REPLACES the card's tags; pass [] to remove them all), custom_fields (sets only the fields named, by id or name; null clears one; breeze_get_project lists them with their options), done, stage_id to MOVE them to another list/column, or swimlane_id to move them to another swimlane (null takes them out of their swimlane, into the board's default row). A swimlane is a horizontal board row, also called a row, lane, band, track, stream or workstream; a list or column is a stage. A list or swimlane can have automations that apply to a card entering it (status, colour, tags, assignees, due date, even archiving it). A due date you pass in the same call takes precedence; so, on an update, do assignees and tags (on a create, the list's are added to yours). To mark work finished, set the project's completed status with status_id (Breeze's own measure, shown on the board and read by every filter and count here); done only counts on a project that names no completed status. Resolve status_id, stage_id and swimlane_id via breeze_get_project, tag_ids via breeze_list_tags. Only the fields you pass are changed, and every listed card gets the same values — for different changes to different cards, call once per distinct change. Updating more than one card is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; observers cannot edit cards (they may only move them between lists and swimlanes, or edit the name and description, if their role allows it).
breeze_update_estimate
ChatGPTEdit an estimate. Pass estimate_id plus minutes and/or logged_date (ISO8601). Card planned time and project total planned are recomputed. You can only edit your own estimates unless you're a team owner/admin and the project is your team's. Needs the 'write' scope and estimate permission.
breeze_update_note
ChatGPTRename a project note or replace its body. Pass note_id (from breeze_list_notes) plus name and/or description (the WHOLE new body, HTML — read the current one with breeze_get_note first to edit part of it). mentions @mentions people in the new body and needs description. Needs the 'write' scope and a role that can see notes.
breeze_update_project
ChatGPTUpdate a project's settings. Pass project_id plus any fields to change: name, description, workspace_id (move it under a workspace; pass null to ungroup), budget_hours, hourly_rate, or start/due dates (ISO8601). Only the fields you pass are changed. Needs the 'write' scope; only a team owner, admin, or project admin can change project settings, and a project admin renames only with rename rights or on a project they own.
breeze_update_project_message
ChatGPTEdit a project discussion message. Pass message_id (from breeze_list_project_messages) and the new body. Adding mentions notifies those people, so you can @mention someone on a message you already posted. You can only edit only your own messages, whatever your role. Needs the 'write' scope.
breeze_update_stage
ChatGPTRename or reorder a stage (list/column). Pass stage_id plus name and/or position (1-based left-to-right). Needs the 'write' scope; any project member but an observer can change a project's lists.
breeze_update_swimlane
ChatGPTRename or reorder a swimlane. A swimlane is a horizontal board row, also called a row, lane, band, track, stream or workstream; a list or column is a stage. Pass swimlane_id (from breeze_get_project) plus name and/or position (1-based, top to bottom). Needs the 'write' scope; any project member but an observer can change a project's swimlanes.
breeze_update_time_entry
ChatGPTEdit a logged time entry (from breeze_list_time_entries). Pass entry_id plus any of minutes, logged_date (ISO8601), notbillable, desc. Card and project tracked totals are recomputed. You can only edit your own entries, or, as a team owner/admin, entries in your team's projects. Needs the 'write' scope and time-tracking permission.
breeze_update_todo_list
ChatGPTRename a to-do list (checklist group). Pass todo_list_id and the new name. Needs the 'write' scope; observers cannot edit cards.
breeze_update_todos
ChatGPTApply the SAME change to one or more to-dos (checklist items): rename them, mark them done/undone, or set a duedate. Pass a todo_ids array (up to 25) and the fields to change — every listed to-do gets the same values, so for different changes call once per distinct change. Updating more than one is two-step: call once to preview, then again with confirm: true. Needs the 'write' scope; observers cannot edit cards.
get_control_details
ChatGPTGet one security control and its affected misconfigurations. Use after get_security_posture when the user asks why a specific control is failing or which entities it affects. Do not use this to list or search controls. Returns the control description and paginated misconfiguration summary. If truncated is true, call again with misconfig_offset + returned. For MSSP: pass the same tenant_id used for get_security_posture.
get_entities_by_risk
ChatGPTList entity summaries at or above a risk threshold. Skips entities excluded from all assessments. Use for high-risk asset questions; call get_entity_details for one entity's risk_breakdown. When truncated is true, call again with offset + returned. For MSSP: pass tenant_id from get_tenants when needed.
get_entity_details
ChatGPTGet one entity with its risk. Use after search_entities, get_entities_by_risk, or get_control_details when the user asks about a specific entity. Do not use this to list or search entities. For MSSP: pass tenant_id from get_tenants when needed.
get_framework_score
ChatGPTGet the authenticated tenant overall MITRE ATT&CK or NIST CSF score. Use for framework-level posture scores or breakdowns. Do not use for controls or affected entities; use get_security_posture and get_control_details instead. Returns framework and overall_score, plus data only when include_data is true. For MSSP: pass tenant_id from get_tenants when needed.
get_scan_status
ChatGPTGet last scan time and whether a scan is currently running. Use for questions about scan freshness or in-progress scans. Do not use for security posture, controls, or misconfigurations — use get_security_posture / get_control_details instead. For MSSP: pass tenant_id from get_tenants when needed.
get_security_posture
ChatGPTList security-control summaries for the authenticated tenant. Use this first for questions about security posture, gaps, compliance, or control counts. Returns pagination metadata; when truncated is true, call again with offset + returned. For one control description and its misconfigurations, call get_control_details with a control_id from this response. For MSSP: pass tenant_id from get_tenants when needed.
get_tenants
ChatGPTList all customer tenants managed by your MSSP organization. Returns each tenant's ID and company name. Only available for MSSP users — others get an empty list.
health_check
ChatGPTReport whether the Breeze MCP server is available. Use to confirm that the server is reachable before requesting workspace data.
list_integrations
ChatGPTList connected integrations for the authenticated tenant. Returns connected tool names. When truncated is true, call again with offset + returned. For MSSP: pass tenant_id from get_tenants when needed.
search_entities
ChatGPTSearch entities by display name substring. Use when the display names an asset, user, or identity and you need its unique_id. Returns summaries; call get_entity_details for risk breakdown. When truncated is true, call again with offset + returned. For MSSP: pass tenant_id from get_tenants when needed.
whoami
ChatGPTGet the authenticated user's email, tenant, and Breeze access details. Use to confirm the identity and tenant context of the current connection.