# Bring your own agent Source: https://docs.macro.com/AI/bring-your-own Bring Claude Code, OpenCode, OpenClaw, or Hermes into your Macro workspace with macrod. ## Agents and runtimes An **agent** combines a name, instructions, a default model, and a runtime. A **runtime** is the harness that powers it: Macro AI, a built-in coding harness, or an agent running on your own machine, like your very own Claude Code. Manage both in **Settings → General → Agents**. Connect your machine in **Runtimes**, then create an agent that uses it in **Agents**. ## On the Macro desktop app The desktop app bundles `macrod`, so there is nothing to download. Open **Settings → General → Agents → Runtimes** and use the **This computer** card: **Set up** detects the coding agents installed on your machine, you pick one and a workspace folder, and **Start running agents here** configures, pairs, and starts the runtime automatically — no terminal and no pairing code. Keep the app open while agents run. The manual `macrod` steps below are for machines without the desktop app (servers, a second computer), and both kinds of runtime can be paired to the same account. ## Macro daemon Use your local coding agent from Macro. `macrod` runs on your computer, connects your agent to Macro, and keeps its sessions available from your workspace. > [!NOTE] > > Macro Daemon is for advanced users that want to connect agents running in your terminal. For example, if you run Claude Code on your server. Run the Macro daemon (`macrod`) on your computer or server. ## Before you start You need a macOS, Linux, or Windows computer that can stay online and an installed, authenticated coding agent. `macrod` recognizes Claude Code, Codex, OpenCode, OpenClaw, and Hermes. You can also configure a custom command for an Agent Client Protocol (ACP) agent. `macrod` connects out to Macro. You do not need a public webhook endpoint, port forwarding, or an HTTPS tunnel. > [!WARNING] > > Your local agent can run commands and edit files on your computer. Choose a dedicated workspace and review access before sharing a runtime with your team. Leave permission bypass off unless you intend to allow actions without approval. ## Connect your runtime **1. Install macrod** Run the install command for your computer in a terminal: **macOS and Linux** ```bash theme={null} curl -fsSL https://raw.githubusercontent.com/macro-inc/macro/main/crates/coding_agent_worker/install/install.sh | sh ``` This installs `macrod` to `~/.local/bin`. If that folder is not on your `PATH`, the installer prints the line to add. **Windows** In PowerShell: ```powershell theme={null} irm https://raw.githubusercontent.com/macro-inc/macro/main/crates/coding_agent_worker/install/install.ps1 | iex ``` This installs `macrod.exe` to `%LOCALAPPDATA%\Programs\macrod` and adds it to your `PATH`. Open a new terminal afterwards. You can also download the archive for your operating system and architecture from [Macro releases](https://github.com/macro-inc/macro/releases) and extract it. Open **Settings → Runtimes → New runtime** in Macro. The page walks you through installation, configuration, and pairing. **2. Run macrod** Open a terminal in the folder where `macrod` should keep its configuration and run: ```bash theme={null} macrod ``` Keep the terminal open while you use your runtime. On first launch, **Quickstart** lists the agents available on your machine. Select one, or choose **Custom command** to enter an ACP launch command. Set **Workspace** to the directory your agent should work in. Choose **Private** for your own runtime that only you can kick off, or **Team** to let teammates use your agent. If you run team mode, anyone can create agent sessions that run on your computer. By default, you'll be asked for permission requests based on the harness you run, such as for accessing files outside of your workspace; if you enable **Full Access** these prompts will automatically be approved. ![The macrod Quickstart configuration screen showing discovered agents, workspace, access, Full Access off, and the Create and pair button](https://mintcdn.com/macro-a2d84caa/_4_IX5iwbu7s74rs/images/macrod-quickstart-example.png?fit=max\&auto=format\&n=_4_IX5iwbu7s74rs\&q=85\&s=41e55e3dbefe53d555c31713e3a388c0) Configure your agent, workspace, and access before generating a pairing code. Select **Create and pair** to generate your device code. > [!NOTE] > > Claude Code and Codex use ACP adapters. Their presets require the agent's command, `npm`, and `npx` to be available in the shell where you start `macrod`. **3. Enter your pairing code** The **Pair macrod** panel shows a device code and a link to Macro. If you are already in the terminal overview, press p to open pairing. Press c to copy the code. Open the pairing link, or go to **Settings → Runtimes → New runtime**. Enter your code and click **Look up**. ![The macrod terminal with a device code and approval link in the Pair macrod panel](https://mintcdn.com/macro-a2d84caa/_4_IX5iwbu7s74rs/images/macrod-pairing-example.png?fit=max\&auto=format\&n=_4_IX5iwbu7s74rs\&q=85\&s=0267e36ee7f1b20e8ec26536d0377388) Example only—enter the code from your own macrod terminal. Check that the code and computer match your terminal. Review the runtime name, **Private** or **Team** access, and permissions, then click **Approve**. `macrod` connects automatically after approval. It saves your configuration and credential in `macrod.toml` in the directory where you started it. Keep this file private; do not commit it to a repository. ## Create an agent that uses your runtime Return to the **Agents** tab and click **New agent**. Give your agent a name and instructions, choose your connected machine under **Runtime**, and select a default model. Review sharing and channel access, then save the agent. @mention it in a channel it can access to start a session on your machine. ## Keep your runtime connected Leave `macrod` running and your computer awake while you use the runtime. Its terminal shows your sessions, configuration, and logs. You can also check the runtime in **Settings → Runtimes**. To reconnect later, run `macrod` from the same directory so it loads your saved configuration. If you revoke the runtime, pair it again before using it. ## Update macrod Run the install command again. It replaces `macrod` with the latest release and keeps your `macrod.toml`. A running `macrod` keeps the old version until you restart it. To install a specific release instead, set the `MACROD_VERSION` environment variable to its tag, such as `v2026.10.18.0`, before running the install command. ## Troubleshooting * **Your agent is missing from Quickstart:** check that it is installed and its command is available in the terminal where you launch `macrod`. For a different ACP agent, use **Custom command**. * **Your code is invalid or expired:** start a new pairing from the terminal and enter the new code. The code in the screenshot is only an example. * **Your runtime is offline:** check that your computer is awake, `macrod` is running, and it can reach Macro. Check the terminal's **Logs** tab for errors. To learn more about using agents in your workspace, see [Agents](/product/agents). # MCP Setup Source: https://docs.macro.com/AI/mcp/overview Connect AI clients to the Macro MCP server. Macro's MCP endpoint is: ```text theme={null} https://mcp-server.macro.com/mcp ``` The server is remote; no local process is required. Authentication happens through Macro's OAuth flow when the client connects. MCP access is available on every Macro plan, including Free. ## Claude Code ```bash theme={null} claude mcp add --transport http macro https://mcp-server.macro.com/mcp ``` Start Claude Code, use the `macro` MCP server, and complete the browser sign-in flow when prompted. ## Codex CLI ```bash theme={null} codex mcp add macro --url https://mcp-server.macro.com/mcp ``` Start Codex CLI, invoke the `macro` MCP server, and complete the OAuth login flow in the browser. ## IDE / JSON Configuration For editors that accept JSON MCP server config, add this under `mcpServers`: ```json theme={null} { "macro": { "type": "http", "url": "https://mcp-server.macro.com/mcp" } } ``` Trigger a connection from the editor and finish the browser login flow. # AddToPipeline Source: https://docs.macro.com/AI/mcp/tools/add-to-pipeline Add companies or contacts to a CRM pipeline as new deals (entries), optionally setting their stage, owner, revenue or other fields. # AddToPipeline Add companies or contacts to a CRM pipeline as new deals (entries), optionally setting their stage, owner, revenue or other fields. A company pipeline takes companies and a contact pipeline takes contacts (see ListPipelines' `tracks`). A record already in the pipeline is not added again unless allowDuplicates is true (for a second, separate deal); its existing entry is returned in alreadyPresent instead. Returns the new entries with their entryIds and fields as saved. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `pipelineId` | string | Yes | The pipeline's id from ListPipelines. | | `entries` | ToolNewEntry\[] | Yes | The companies or contacts to add, each with its starting fields. | | `allowDuplicates` | boolean | No | Add a record again even if it already has an entry in this pipeline. Only for a genuinely separate second deal. Defaults to false. | # BashCodeExecution Source: https://docs.macro.com/AI/mcp/tools/bash-code-execution Execute a bash command in a sandboxed environment using Claude's built-in code execution tool. # BashCodeExecution Execute a bash command in a sandboxed environment using Claude's built-in code execution tool. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `input` | string | Yes | The bash command or instruction to execute. | # BulkSetEntityPropertyOptions Source: https://docs.macro.com/AI/mcp/tools/bulk-set-entity-property-options Apply one multi-select option delta — most often a tag — to many entities in a single call. # BulkSetEntityPropertyOptions Apply one multi-select option delta — most often a tag — to many entities in a single call. Use this instead of calling SetEntityProperty once per entity when the user asks to tag or label a set of items at once (e.g. "tag the last 50 emails as Follow-up"). Provide the property\_definition\_id (a tag set's propertyDefinitionId from ListTags) and the option ids to add and/or remove (a tag's option id from ListTags). The same add\_option\_ids/remove\_option\_ids delta is applied to every entity, composing atomically with concurrent edits per entity. Only for multi-select or tag properties; for other value types, or a single entity, use SetEntityProperty. Up to 200 entities per call — split larger sets across multiple calls. Best-effort: each entity is handled independently. Entities you don't have edit access to are reported with status 'skipped\_no\_permission' and left unchanged, entities that can't take the property are 'failed', and the rest are 'applied' — one call never fails wholesale because a few entities were not editable. Inspect the per-entity results and the summary to see what happened. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `entities` | BulkTargetEntity\[] | Yes | The entities to update (up to 200). Entities the user can't edit are skipped. | | `property_definition_id` | string | Yes | The multi-select property definition id changed on every entity — e.g. a tag set's propertyDefinitionId from ListTags. | | `add_option_ids` | string\[] | No | Options to add to every entity (e.g. a tag's option id from ListTags), deduped against each entity's current value. | | `remove_option_ids` | string\[] | No | Options to remove from every entity. Removing an absent option is a no-op. | # CalculateSpreadsheet Source: https://docs.macro.com/AI/mcp/tools/calculate-spreadsheet Run up to 20 Excel-style scratch formulas against a native spreadsheet without writing anything. # CalculateSpreadsheet Run up to 20 Excel-style scratch formulas against a native spreadsheet without writing anything. Optional input overrides support what-if analysis without changing the user's cells. Uses the same IronCalc engine as the editor and returns typed results/errors. ReadSpreadsheet first to learn sheet IDs and ranges. Unqualified references use sheetId. Each formula evaluates at A1 on a private sheet and returns its top-left value; position-sensitive functions such as ROW() therefore use A1. INDIRECT is not supported in scratch formulas. Use this to verify totals, test a proposed formula, or compare scenarios before editing. Volatile functions are disabled, as in the editor. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `documentId` | string | Yes | Native spreadsheet document ID. | | `sheetId` | string | No | Sheet for unqualified references in scratch formulas. | | `formulas` | SpreadsheetFormula\[] | Yes | Formulas beginning with =, optionally labelled, at most 20. | | `overrides` | SpreadsheetOverride\[] | No | Hypothetical cell inputs, never persisted. | # ChangeBooking Source: https://docs.macro.com/AI/mcp/tools/change-booking Manage an existing Booking Links meeting found with ListBookings: cancel it, approve a legacy pending booking, record or clear attendance, or reschedule to a start returned by GetBookingRescheduleSlots. # ChangeBooking Manage an existing Booking Links meeting found with ListBookings: cancel it, approve a legacy pending booking, record or clear attendance, or reschedule to a start returned by GetBookingRescheduleSlots. Cancellation, approval and rescheduling can notify attendees; explain the action and act only on user authorization. Attendance is available only after a confirmed meeting ends. Existing host/admin permissions and availability rules apply. Returns the actual saved booking; a failed or processing status requires reconciliation, not blind retries. This does not edit the reusable booking link. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `bookingId` | string | Yes | Existing booking ID discovered through ListBookings. | | `change` | BookingChange | Yes | A host's requested change to a booked meeting. | # Comment Source: https://docs.macro.com/AI/mcp/tools/comment Add a comment to the Discussion of a document, task, Tasks project (initiative), CRM company or CRM contact on behalf of the user, or reply in an existing comment thread on any of them. # Comment Add a comment to the Discussion of a document, task, Tasks project (initiative), CRM company or CRM contact on behalf of the user, or reply in an existing comment thread on any of them. For a new comment, address the item by entityType and entityId. For a reply, pass threadId; a thread id is enough to find its item, so entityType and entityId may be omitted. Thread ids come from ReadDiscussion, or from ReadContent for a document. Only use this when explicitly asked to comment or reply. Write content in Macro markdown and link people and items with the same mention tags as in documents; they render as chips and notify the people mentioned. To comment on a passage of text in a document, use CommentOnText instead; for a message in a channel, use SendChannelMessage. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `entityType` | `"document"` \| `"initiative"` \| `"crm_company"` \| `"crm_contact"` | No | The kind of item to comment on. Required with entityId for a new comment; optional for a reply. | | `entityId` | string | No | The id of the item to comment on. Required with entityType for a new comment; optional for a reply. | | `threadId` | string | No | The id of the thread to reply in. Omit to start a new Discussion comment on the item. | | `content` | string | Yes | Comment content in Macro markdown, the same syntax as markdown documents, including mention tags. | # CommentOnText Source: https://docs.macro.com/AI/mcp/tools/comment-on-text Start an inline comment on a passage of a Macro markdown or Word (DOCX) document on behalf of the user, anchored to the quoted text. # CommentOnText Start an inline comment on a passage of a Macro markdown or Word (DOCX) document on behalf of the user, anchored to the quoted text. Only use this when explicitly asked to comment on specific text. Quote the passage exactly as the document reads, as plain text without markdown syntax, within a single paragraph, heading, list item or table cell. If the passage appears more than once the tool refuses and lists each occurrence so you can choose one with occurrence, counting from 1; if the text is not found, read the document again rather than guessing. For a comment on a document as a whole, or a reply in an existing thread, use Comment. Comments made here stay in Macro and are not written into a Word file; for comments that must travel with a Word document to its recipient (a redline for a counterparty), use EditWordDocument's addComment operation instead. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `documentId` | string | Yes | The id of the document to comment on. | | `content` | string | Yes | Comment content in macro markdown format. This uses the same syntax as markdown documents. | | `quote` | string | Yes | The passage to comment on, quoted exactly as the document reads: plain text without markdown syntax such as \*\* or link brackets. Keep it to the words the comment is about; a longer quote is more likely to be unique. | | `occurrence` | integer | No | Which appearance of the quoted passage to comment on, counting from 1 in document order. Only needed when the passage appears more than once. | # ConfigureAgent Source: https://docs.macro.com/AI/mcp/tools/configure-agent Update the instructions or settings of an AI agent the current user can manage. # ConfigureAgent Update the instructions or settings of an AI agent the current user can manage. Provide only the fields that should change; everything else keeps its current value. Read the agent first with ListAgents: instructions are replaced whole, so to edit them, apply the edit to the current text and pass the complete result. Changes apply to sessions opened afterwards; running sessions keep the instructions they started with. Use ConfigureBot for the display name, handle, description, or picture, and ManageBotChannelAccess for plain webhook bots. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `botId` | string | Yes | The agent's bot id: `bot.botId` from ListAgents. | | `instructions` | string | No | The complete new instructions in markdown. Replaces the current instructions entirely; omit to keep them. | | `harness` | `"in-memory"` \| `"cursor"` \| `"macrod"` | No | Runtime to move the agent onto. `macrod` also needs harnessId; the other runtimes must not have one. The current model may not exist on the new runtime, so usually pass defaultModel with it. Omit to keep the current runtime. | | `harnessId` | string | No | Id of the registered self-hosted harness, required when harness is `macrod` and forbidden otherwise. | | `defaultModel` | string | No | Model id the agent's new sessions should use, as the runtime names it (e.g. `claude-sonnet-4-5`). Valid ids depend on the runtime. Omit to keep the current model. | | `channelScope` | `"all"` \| `"selected"` | No | `all` makes the agent mentionable in every channel its owner can use; `selected` limits it to channelIds. Omit to keep the current scope, or omit it and pass channelIds alone to switch to `selected`. | | `channelIds` | string\[] | No | The complete list of channel ids the agent is limited to; the user must be a member of each. Required with the `selected` scope and forbidden with `all`. | | `mcpScope` | `"owner_connections"` \| `"selected"` | No | `owner_connections` hands sessions whatever apps the person running them has connected; `selected` hands exactly mcpServers. Omit to keep the current scope, or omit it and pass mcpServers alone to switch to `selected`. | | `mcpServers` | AgentMcpServerSummary\[] | No | The complete list of connected apps for the `selected` MCP scope, each as its Pipedream app slug (e.g. `linear`) and display name. A slug Pipedream does not list as a connectable app is rejected and nothing is saved. Forbidden with `owner_connections`. | | `autoAcceptPermissions` | boolean | No | `true` lets sessions approve tool permission requests without asking, where the runtime allows it; `false` makes them ask every time. Omit to leave unchanged. | | `isCoding` | boolean | No | `true` for a coding agent, which works in a repository and answers a mention with a live session; `false` for a chat agent, which replies in the thread. Omit to leave unchanged. | # ConfigureBot Source: https://docs.macro.com/AI/mcp/tools/configure-bot Configure a manageable bot's profile. # ConfigureBot Configure a manageable bot's profile. Provide only fields that should change. Use avatarUrl to set a profile picture from an image already uploaded to Macro static files or another reachable image URL; pass an empty string to clear the current picture. Passing an empty string for description clears it. Confirm handle changes because integrations and mentions may rely on the stable handle. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `botId` | string | Yes | Bot id from CreateBot or ListBots. | | `name` | string | No | New display name. Omit to keep the current name. | | `handle` | string | No | New stable handle using lowercase ASCII letters, digits, hyphens, and underscores. Omit to keep the current handle. | | `description` | string | No | New bot description. Omit to keep the current value; pass an empty string to clear it. | | `avatarUrl` | string | No | New profile-picture URL. Use a Macro static-file URL or another reachable image URL. Omit to keep the current picture; pass an empty string to clear it. | | `hasAgent` | boolean | No | Set true if mentioning this bot should open a sandboxed coding-agent session. Omit to leave unchanged. | # ContentSearch Source: https://docs.macro.com/AI/mcp/tools/content-search Search items by their content: document body text; email subject/body/sender/recipient/cc/bcc and the display names on those addresses; agent session messages; call transcripts. # ContentSearch Search items by their content: document body text; email subject/body/sender/recipient/cc/bcc and the display names on those addresses; agent session messages; call transcripts. This is keyword search, not semantic search: queries only match literal words/tokens, prefixes, or exact quoted terms that appear in the indexed content. Use this for targeted keyword/content lookup, not for activity-summary questions like "what happened today", "what's going on", "catch me up", or "what happened in standup today"; those should start with ListEntities using time/type/channel filters. Whitespace-separated terms are ANDed. For documents and emails, every term must match somewhere in the document — different terms can appear in different chunks/pages or different fields. For documents and emails specifically, each single-word term is matched as a prefix (so `scri` matches `script`); for emails the prefix expansion also runs against the local-part of address fields. For agent sessions, channels, and call transcripts the whole query is matched as a single adjacent phrase prefix — so pass 1-3 targeted keywords drawn from words that would literally appear in the content, not the user's natural-language description; long phrases will not match. Matching defaults to prefix; set matchType to 'exact' to match whole tokens/phrases with no prefix expansion (e.g. an exact word, identifier, or full email address). Wrap a multi-word phrase in double quotes to keep it together as one adjacent phrase. If the user's request combines a person with a topic, run separate searches rather than one combined query. Leave entityTypes empty by default; only filter when the user explicitly scopes to a type. Results for documents, emails, projects, and call records include the tags visible to the user as \{label, scope} pairs; to restrict a search to tagged items, pass the tag labels in the tags argument (ListTags shows which tags exist). ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `query` | string | Yes | The text to search. Pass 1-3 keywords drawn from words that would literally appear in the content, not the user's natural-language description. Whitespace-separated terms are ANDed. For documents, every term must appear somewhere in the document (different chunks/pages are fine). For emails each term is matched across subject/body/sender/recipient. For sessions/channels/calls the whole query is matched as a single adjacent phrase prefix, so long phrases will not match. Wrap a multi-word phrase in double quotes to match it as one phrase. Use matchType 'exact' for whole-token (or full email address) matching instead of prefix. | | `matchType` | `"partial"` \| `"exact"` | No | How search tools match query terms. Restricted to partial/exact — the backend also supports regexp and an internal query mode, but those are not offered to the model. | | `entityTypes` | (`"agent_sessions"` \| `"documents"` \| `"emails"` \| `"channels"` \| `"projects"` \| `"call_records"` \| `"calendar_events"`)\[] | No | Which types of items to search. Leave empty (the default) to search all types — this is almost always what you want. Only set this when the user's request clearly targets one or more specific types. Examples: \['documents'], \['emails', 'documents'], \['channels'], \['call\_records']. Projects and calendar events carry no indexed content, so they never match here — search those by name with NameSearch instead. | | `agentSessionIds` | string\[] | No | Search only the transcripts of these agent sessions, by id, and nothing else. Use it with your own session id to find the exact words of something said earlier in your conversation, including parts that were summarized to keep it within your context. Omit to search every type. | | `inbox` | string | No | Restrict email results to a single connected inbox, given as that inbox's email address (from ListInboxes). Omit to search every inbox the user can access. Only set this when the user scopes the request to a specific mailbox. Only affects email results. | | `tags` | TagFilter\[] | No | Restrict results to items carrying the given tags — any of them by default, every one of them with tagsMatch="all". Each entry names a tag by its label, matched case-insensitively against the user's own tags; only set scope ("personal" or "team") when the user distinguishes between their personal and team tags. An unknown label fails with the list of available tags — call ListTags first when unsure what tags exist. Only taggable items (documents, emails, projects, call records) can match, so channels are dropped while a tag filter is active. | | `tagsMatch` | `"any"` \| `"all"` | No | How multiple tag filters combine when filtering items. | # CreateAgentSession Source: https://docs.macro.com/AI/mcp/tools/create-agent-session Start a new session with a coding or chat agent from ListAgents. # CreateAgentSession Start a new session with a coding or chat agent from ListAgents. Provide the agent botId and a self-contained initial prompt. The new session does not inherit this conversation. Returns its session ID after the first prompt is accepted, not completed work. Use ManageAgentSession to continue an existing session. Create once; do not automatically retry after an uncertain failure. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `agentId` | string | Yes | Agent persona botId from ListAgents. | | `prompt` | string | Yes | Complete initial task and relevant context. | # CreateBookingLink Source: https://docs.macro.com/AI/mcp/tools/create-booking-link Create a reusable booking page, not a calendar meeting. # CreateBookingLink Create a reusable booking page, not a calendar meeting. First use ListBookingLinks to discover a suitable existing link or reuse availability. Supply a full draft with all seven weekdays (Sunday=0), IANA time zone, and real host IDs; personal links use the authenticated user and individual mode. For a team use a real team ID and collective or roundRobin mode. Set enabled only when the user wants to accept bookings. No invitations are sent by creating a link. Repeating an identical draft with the same slug reuses the saved link; a different draft at that slug conflicts. Create or edit booking links only after conversational confirmation, with no review card or interactive form. First explain all proposed details clearly in your reply: personal or team ownership, named hosts and who attends, meeting name, description, duration, location, Macro call, or Google Meet, time zone, weekly hours and date exceptions, link name, buffers, minimum notice, booking window, slot interval, daily limit, guest questions and whether bookings are enabled. Ask whether to proceed and stop. Only in a later turn after the user approves that specific proposal, call this tool with their approving reply quoted verbatim in userConfirmation. The original request is not confirmation; never invent or paraphrase approval. Never ask the user for teamId, host IDs, schedule IDs, revisions or JSON: discover IDs with ListBookingLinks and ListTeamMembers. Default to personal ownership unless a team is requested, and clarify ambiguous choices by name. After execution, share the saved URL with an \ chip (profileId/slug/url from the result), not a bare URL. Returns actual saved IDs, revision, full draft and shareable URL. Manual approval must be false; guest booking requires a connected, synced writable calendar. For video, set macroCall (preferred) or googleMeet, never both. Booking a macroCall link creates the call and attaches its join link to the invitation. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `teamId` | string | No | Existing Macro team ID discovered through tools, never requested from the user. Use null for a personal booking link. | | `draft` | BookingLinkDraft | Yes | Complete proposal reviewed and validated before saving. | | `userConfirmation` | string | Yes | The user's reply approving the specific proposal you already showed them, quoted verbatim. Never use their original request, paraphrase their reply, or invent approval. | # CreateBot Source: https://docs.macro.com/AI/mcp/tools/create-bot Create a bot with a name, stable handle, and optional profile. # CreateBot Create a bot with a name, stable handle, and optional profile. Omit teamId for a bot owned by the current user; provide teamId to create a team-owned bot, which requires team administrator or owner permission. Pass channelId when the bot should post to a channel immediately: the current user must be a member of that channel. The response then includes that channel's webhook URL and a credential proposal. The user mints the bearer token from the chat card or bot settings; the secret is never returned in this tool result. Omit channelId to create the bot only, then use ManageBotChannelAccess and IssueBotCredential for later setup. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `teamId` | string | No | Team id that should own the bot. Omit for a bot owned by the current user. | | `name` | string | Yes | Human-readable display name for the bot. | | `handle` | string | Yes | Stable mention handle using only lowercase ASCII letters, digits, hyphens, and underscores; maximum 64 characters. | | `description` | string | No | Optional short description of what the bot does. | | `avatarUrl` | string | No | Optional URL for the bot profile picture. Pass the URL of an image already uploaded to Macro static files or another reachable image URL. | | `channelId` | string | No | Channel id to grant the new bot access to. Requires current-user channel membership. When set, the tool also returns the channel webhook URL and a credential proposal the user can mint from the chat card. | | `credentialLabel` | string | No | Optional label for the credential the user will mint when channelId is set, such as `github-webhook`. Requires channelId. | | `credentialExpiresAt` | string | No | Optional RFC 3339 expiration for the credential the user will mint when channelId is set. Requires channelId. | | `hasAgent` | boolean | No | Set true if mentioning this bot should open a sandboxed coding-agent session. Defaults to false. | # CreateCalendarEvent Source: https://docs.macro.com/AI/mcp/tools/create-calendar-event Prepare an event on the user's calendar, inviting any listed attendees through its connected provider. # CreateCalendarEvent Prepare an event on the user's calendar, inviting any listed attendees through its connected provider. In Macro chat this tool opens an inline composer so the user can review, edit, and confirm the event; use the tool to present the proposal instead of asking for a redundant confirmation in prose. When the pending call is executed, the event is written to the calendar provider immediately and attendees receive invitations. Other clients should confirm attendee events before executing the call. Do NOT use it for a prompt that came from a channel or document thread — the context block names a conversation parent when it did, and there is no surface to review a draft in: write the event out in your reply, ask whether to create it, and use CreateConfirmedCalendarEvent once the user approves. The event lands on the user's primary calendar unless `calendarId` (from ListCalendars) targets another one. For recurring events pass RFC 5545 lines in `recurrenceLines`, e.g. \["RRULE:FREQ=WEEKLY;BYDAY=MO"]. Returns the created event with its `eventId` for later updates or deletion. Fails if the user has no writable calendar connected. For video conferencing pick at most one of `addMacroCall` (a Macro meeting link, the default choice for a Macro user's meeting) or `addConference` (Google Meet or Microsoft Teams, per calendar capabilities). A Macro call is created for the user, scheduled to the event's times, and its join link is appended to the event's description so every attendee's invitation carries it; it also becomes the event's `location` unless a physical `location` was supplied. The returned event's `macroCallUrl` holds the link. Set `eventType` to "out\_of\_office" to mark the user as out of office (e.g. "mark me out of office Thursday"). Out-of-office events must land on the user's primary calendar (omit `calendarId`), must be timed rather than all-day, and take no attendees or video conferencing (leave `addMacroCall` and `addConference` false); use `outOfOffice` to control whether conflicting meetings are auto-declined. The type cannot be changed afterward. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `title` | string | Yes | The event title. | | `time` | EventTimeInput | Yes | The mutually exclusive time shape supplied to calendar tools. | | `description` | string | No | Optional event body/description. | | `location` | string | No | Optional physical or virtual location label. | | `attendees` | AttendeeInput\[] | No | Attendees to invite by email. They are notified by the calendar provider as soon as the event is created. Omit for a solo event. | | `recurrenceLines` | string\[] | No | Raw RFC 5545 recurrence lines (RRULE, RDATE, EXDATE), e.g. \["RRULE:FREQ=WEEKLY;BYDAY=MO,WE"]. Omit for a one-off event. | | `calendarId` | string | No | Calendar to create the event on, from ListCalendars. Omit to use the user's primary calendar. | | `reminders` | EventRemindersInput | No | Reminder configuration for the event. Omit to use the selected calendar's defaults. | | `addMacroCall` | boolean | No | Attach a freshly created Macro call to the event: a Macro meeting link scheduled to the event's times, written into the event's location and description. Mutually exclusive with `addConference`. | | `addConference` | boolean | No | Attach a conference supported by this calendar: Google Meet or Microsoft Teams. Check ListCalendars capabilities first. | | `eventType` | `"default"` \| `"out_of_office"` | No | The kind of event a create tool call makes. | | `outOfOffice` | OutOfOfficeInput | No | Out-of-office decline behavior, used only when eventType is "out\_of\_office". Omit to just block the time; set `autoDeclineMode` to "decline\_all" or "decline\_new\_only" to have the calendar integration decline conflicting meetings, optionally with a `declineMessage`. | | `guestPolicy` | GuestPolicy | No | What guests may do: `canModify` (change the event; implies `canInviteOthers`), `canInviteOthers` and `canSeeOtherGuests`. Omit for the defaults: guests may invite others and see the guest list but not modify the event. Google calendars only; an Outlook calendar refuses it. | # CreateChannel Source: https://docs.macro.com/AI/mcp/tools/create-channel Create a private or team channel and add its first members. # CreateChannel Create a private or team channel and add its first members. Use `private` for an invite-only channel and `team` for a channel owned by the current user's team. Do not use this for a direct message — those are created separately. Team id is resolved from the current user; do not invent one. Participants accept `macro|` ids from ListTeamMembers or bare emails. Creating a team channel when the user has no team fails; create a private channel instead. Creating a team channel with no participants adds the current user so the channel is valid. Use only when the user asks to create a channel. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `name` | string | Yes | Display name for the new channel. | | `channelType` | `"private"` \| `"team"` | Yes | Channel types an agent may create. | | `participants` | string\[] | No | People to add, as `macro\|` ids or bare emails. Defaults to none. A team channel with an empty list adds the current user. | # CreateChannelMediaUpload Source: https://docs.macro.com/AI/mcp/tools/create-channel-media-upload Reserve a direct upload for an image or video to attach to a channel message; use this for media too large to pass inline, such as screen recordings. # CreateChannelMediaUpload Reserve a direct upload for an image or video to attach to a channel message; use this for media too large to pass inline, such as screen recordings. Returns an uploadUrl: immediately PUT the raw file bytes to it from your shell with the returned contentType as the Content-Type header (see uploadCommand), then call SendChannelMessage with an attachment whose id is attachmentId and whose kind is the returned kind. The URL must be used within 2 minutes; call again for a fresh one if it expires. Only images and videos are accepted; attach other files by uploading them as documents and passing the document ID. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `fileName` | string | Yes | Filename including its extension, for example demo.mp4. Do not include a directory path. | | `contentType` | string | No | MIME type such as video/mp4 or image/png. Omit to infer it from the fileName extension. | # CreateCompany Source: https://docs.macro.com/AI/mcp/tools/create-company Add a company to the user's team CRM by name and web domain, as New Company in the CRM does. # CreateCompany Add a company to the user's team CRM by name and web domain, as New Company in the CRM does. Companies a team emails are usually added automatically, so check ListCompanies first. Set its stage, owner, and other properties afterwards with SetEntityProperty (entity type company). ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `name` | string | Yes | The company's display name, e.g. "Acme". | | `domain` | string | Yes | The company's web domain, e.g. "acme.com" — no scheme or path. Contacts are matched to the company by this domain. | # CreateContact Source: https://docs.macro.com/AI/mcp/tools/create-contact Add a contact person to a company in the user's team CRM, as Add Contact on a company does. # CreateContact Add a contact person to a company in the user's team CRM, as Add Contact on a company does. The email's domain must be one of the company's domains. Find the company with ListCompanies, or add it first with CreateCompany. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `companyId` | string | Yes | The CRM company id to add the contact to. | | `name` | string | Yes | The contact's name. | | `email` | string | Yes | The contact's email address, e.g. "[jane@acme.com](mailto:jane@acme.com)". | # CreateDocument Source: https://docs.macro.com/AI/mcp/tools/create-document Create a plaintext document or a native Macro spreadsheet. # CreateDocument Create a plaintext document or a native Macro spreadsheet. For a workbook use fileExtension spreadsheet, empty fileContent, and isTask false; then ReadSpreadsheet and EditSpreadsheet to populate cells, formulas and sheets. Works without an open editor. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `documentName` | string | Yes | The name of the document without the file extension | | `fileContent` | string | Yes | The string content of a text document. Must be empty for a native spreadsheet. | | `fileExtension` | string | Yes | The extension of a plaintext file, or spreadsheet for a native collaborative workbook. | | `isTask` | boolean | No | Whether this document is a task. Only applies to md documents. | | `projectId` | string | No | The id of the project (shown as a folder in the app UI) to create the document in. Requires edit access to the project. Omit to create the document at the top level of the user's files. | # CreateForm Source: https://docs.macro.com/AI/mcp/tools/create-form Create a complete questionnaire with response columns, ordered sections, gates and an optional saved booking link. # CreateForm Create a complete questionnaire with response columns, ordered sections, gates and an optional saved booking link. Creates closed and private; use SetFormAccess afterward to open or share it. Existing-table attachment requires database Owner and an unbound table. Use local question/option keys in gates and reference only earlier sections. Required questions require an answer; gates compare answers using AND/OR. Empty answers pass only IsEmpty. A final booking step reveals an existing authorized link after acceptance; its independent URL remains usable, and strict qualification is unsupported. Each invocation creates a new form; after a timeout, use ListForms and ReadForm before trying again. Returns actual saved IDs, links and completion state; inspect partial work instead of recreating. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `name` | string | Yes | Form name, also the new database name for source/new. | | `source` | FormSource | Yes | Where a new form's responses go. | | `draft` | Draft | Yes | Complete ordered draft. Extra backing columns need not be questions. | # CreateImportEntity Source: https://docs.macro.com/AI/mcp/tools/create-import-entity Track an external item (Linear issue, Notion page, Slack channel) in the import ledger. # CreateImportEntity Track an external item (Linear issue, Notion page, Slack channel) in the import ledger. Use status `staged` to propose an item for import BEFORE creating anything; use status `imported` (with entityId) only to record a Macro entity you already created from the item. The response tells you when the item was already imported by the user or a teammate — in that case do NOT create a duplicate; point the user at the existing entity instead. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `source` | `"linear"` \| `"notion"` \| `"slack"` | Yes | External systems items can be imported from. | | `foreignId` | string | Yes | Stable id of the item in the source system: the Linear issue identifier (e.g. `ENG-142`), the Notion page URL or id, or the Slack channel id (e.g. `C0123456789`, falling back to the channel name). | | `status` | `"staged"` \| `"imported"` | Yes | Status values accepted by \[`CreateImportEntity`]. | | `metadata` | any | Yes | Metadata describing the item. Linear: \{identifier, title, description?, status?, priority?, assignee?, assignee\_email?, url?}. Notion: \{title, url?, summary?} — never include page content. Slack: \{name, channel\_id?, purpose?, participants?: \[\{name, email?}]}. | | `entityId` | string | No | The id of the Macro entity you created, required when status is `imported`. The entity type is fixed by source: linear → task, notion → md (document), slack → channel. | # CreateInitiative Source: https://docs.macro.com/AI/mcp/tools/create-initiative Create a project for coordinating tasks (called an initiative in the API). # CreateInitiative Create a project for coordinating tasks (called an initiative in the API). Projects have status, priority, assignees, due dates, discussions and activity. Shares with the owner's team by default. This is different from CreateProject, which creates a folder. Use property tools with entity\_type='initiative' to set project properties. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `name` | string | Yes | Project name, up to 100 graphemes. | | `description` | string | No | Initial Markdown description, up to 2000 graphemes; optional. | | `memberIds` | string\[] | No | Users to grant collaboration access; distinct from property assignees. | | `shareWithTeam` | boolean | No | Defaults to true. False creates without an explicit team grant. | # CreatePipeline Source: https://docs.macro.com/AI/mcp/tools/create-pipeline Create a CRM pipeline: a board of deals that move through stages, such as a sales, renewals, fundraising, hiring or partnership pipeline. # CreatePipeline Create a CRM pipeline: a board of deals that move through stages, such as a sales, renewals, fundraising, hiring or partnership pipeline. Each entry tracks either a company or a contact. Every pipeline starts with the tracked record, Stage, Owner and Revenue fields; Stage starts with the team's default stages unless `stages` gives others. Only when the user asked for a new pipeline: check ListPipelines first so you do not create a duplicate. Returns the pipeline with its id and fields. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `name` | string | Yes | The pipeline's name, e.g. "Q4 Renewals". | | `tracks` | `"company"` \| `"contact"` | Yes | What a pipeline's entries track. Documented on the fields that use it: a doc comment on a variant would turn the schema into `oneOf`. | | `sharedWithTeam` | boolean | No | Let the user's team see and edit it. Defaults to false: only the user can see it. | | `stages` | string\[] | No | The stages, first to last, e.g. \["Sourced", "Screen", "Interview", "Offer", "Hired"]. Leave empty for the team's default stages. | | `fields` | ToolNewField\[] | No | Fields to add after Company/Contact, Stage, Owner and Revenue. | # CreateProject Source: https://docs.macro.com/AI/mcp/tools/create-project Create a project — shown as a folder in the app UI. # CreateProject Create a project — shown as a folder in the app UI. Documents, email threads, and other projects can be placed inside it. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `projectName` | string | Yes | The name of the project. | | `parentProjectId` | string | No | The id of an existing project to nest the new project inside. Requires edit access to that project. Omit to create the project at the top level. | # CreateRoutine Source: https://docs.macro.com/AI/mcp/tools/create-routine Schedule recurring or one-off work for a model or agent. # CreateRoutine Schedule recurring or one-off work for a model or agent. To schedule yourself, use your persona/bot ID as the agent target; to delegate, select an accessible agent from ListAgents using its bot.botId. Routines run as the authenticated user after this session ends, using the selected agent’s tools and configuration. Use Once with a future RFC3339 timestamp for a single run; use Cron for repetition. Returns the saved routine ID and next firing. Do not use reminders for work that should execute. Do not automatically create a new routine on every run of an existing routine. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `configuration` | RoutineConfiguration | Yes | Complete user-editable configuration, independent of execution bookkeeping. | # CreateSkill Source: https://docs.macro.com/AI/mcp/tools/create-skill Create a skill: a markdown document of reusable instructions that AI reads and follows when the skill is referenced, as Compose Skill in the app does. # CreateSkill Create a skill: a markdown document of reusable instructions that AI reads and follows when the skill is referenced, as Compose Skill in the app does. Write the instructions as the markdown body. Edit an existing skill with EditDocument; find skills with ListSkills or SearchSkills. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `skillName` | string | Yes | The skill's name. | | `markdown` | string | Yes | The skill's instructions, in markdown. | | `projectId` | string | No | The id of the project (shown as a folder in the app UI) to create the skill in. Requires edit access to the project. Omit to create it at the top level of the user's files. | # CreateTag Source: https://docs.macro.com/AI/mcp/tools/create-tag Create a new tag — a colored label the user can apply to documents, emails, tasks, and projects — in the user's personal set or their team's shared set. # CreateTag Create a new tag — a colored label the user can apply to documents, emails, tasks, and projects — in the user's personal set or their team's shared set. The set is provisioned automatically the first time a tag is created. Tags are matched by label, so call ListTags first and avoid creating one whose label duplicates an existing tag in the same set. Returns the new tag's id and its set's propertyDefinitionId, which you can pass straight to SetEntityProperty (add\_option\_ids) to apply the tag to an item. Use this only to create a brand-new tag; to apply an existing tag to an item, use ListTags then SetEntityProperty instead. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `label` | string | Yes | The tag's label, e.g. "Urgent" or "Follow-up". | | `color` | `"red"` \| `"tomato"` \| `"orange"` \| `"amber"` \| `"yellow"` \| `"green"` \| `"teal"` \| `"blue"` \| `"indigo"` \| `"purple"` \| `"pink"` \| `"gray"` | Yes | A tag color from the fixed palette. | | `scope` | `"personal"` \| `"team"` | No | Which tag set a tag belongs to, relative to the caller. | # Decide Source: https://docs.macro.com/AI/mcp/tools/decide Generated from the Macro Rust tool registry. # Decide Generated from the Macro Rust tool registry. # DeleteBot Source: https://docs.macro.com/AI/mcp/tools/delete-bot Delete a bot the current user owns or a bot owned by a team they belong to. # DeleteBot Delete a bot the current user owns or a bot owned by a team they belong to. This removes the bot from every channel and disables its credentials and webhooks. The operation cannot be undone, so only use it after the user explicitly confirms deletion. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `botId` | string | Yes | Bot id from ListBots. | # DeleteCalendarEvent Source: https://docs.macro.com/AI/mcp/tools/delete-calendar-event Delete an event from the user's calendar. # DeleteCalendarEvent Delete an event from the user's calendar. The deletion is written to the calendar provider immediately and attendees are notified, so confirm with the user before deleting — it cannot be undone. Get the `eventId` from ListCalendarEvents. For recurring events, `scope` controls how much is removed: "all" (default) removes the whole series, "this\_event" removes one occurrence, and "this\_and\_following" ends the series from an occurrence onward. The scoped variants require `recurrenceId` from the targeted occurrence's ListCalendarEvents entry. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `eventId` | string | Yes | The event's id, from ListCalendarEvents or CreateCalendarEvent. | | `calendarId` | string | No | The `calendarId` of the copy to delete, from the `copies` of its ListCalendarEvents entry, for an event synced from more than one calendar. Omit to delete the event's primary copy. | | `scope` | `"all"` \| `"this_event"` \| `"this_and_following"` | No | How much of a recurring series a deletion removes. | | `recurrenceId` | string | No | The `recurrenceId` of the targeted occurrence, from its ListCalendarEvents entry. Required for "this\_event" and "this\_and\_following". | # DeleteCallRecord Source: https://docs.macro.com/AI/mcp/tools/delete-call-record Permanently delete a finished call with its recording and transcript, as Delete on a call does. # DeleteCallRecord Permanently delete a finished call with its recording and transcript, as Delete on a call does. This cannot be undone. Requires edit access to the call; calls still in progress cannot be deleted. Use only when the user explicitly asks to delete a call. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `callId` | string | Yes | The id of the call to delete. | # DeleteChannelMessage Source: https://docs.macro.com/AI/mcp/tools/delete-channel-message Delete a channel message or thread reply. # DeleteChannelMessage Delete a channel message or thread reply. The channel keeps a 'message deleted' placeholder; this cannot be undone. Users can delete their own messages and messages sent by bots; channel admins and owners can delete any message. Find message ids with ReadChannelMessages or ReadChannelThread. Use only when the user explicitly asks to delete a message. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `channelId` | string | Yes | Channel id containing the message. | | `messageId` | string | Yes | Id of the message to delete. | # DeleteComment Source: https://docs.macro.com/AI/mcp/tools/delete-comment Delete a comment or reply in the Discussion of a document, task, Tasks project, CRM company or CRM contact. # DeleteComment Delete a comment or reply in the Discussion of a document, task, Tasks project, CRM company or CRM contact. Deleting the first comment of a thread deletes the whole thread with its replies. Authors can delete their own comments, and the item's owner can delete any comment. This cannot be undone. A comment id is enough to find its item. Comment ids come from ReadDiscussion, or from ReadContent for a document. Use only when the user explicitly asks to delete a comment; use ResolveComment to close a thread instead. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `commentId` | string | Yes | The id of the comment or reply to delete. Pass the thread id to delete the whole thread. | # DeleteDatabaseView Source: https://docs.macro.com/AI/mcp/tools/delete-database-view Delete a saved table or board view of a Macro database by its id, from DescribeDatabase. # DeleteDatabaseView Delete a saved table or board view of a Macro database by its id, from DescribeDatabase. Views are shared with everyone who can open the database, so deleting one needs edit access and removes it for everyone. The table and its records stay; a board's hand-arranged card order goes with it. Only do it when the user asked for that view to go. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `databaseId` | string | Yes | Database id from ListDatabases. | | `viewId` | string | Yes | View id from DescribeDatabase. | # DeleteImportEntity Source: https://docs.macro.com/AI/mcp/tools/delete-import-entity Decline a staged import candidate on the user's behalf. # DeleteImportEntity Decline a staged import candidate on the user's behalf. The item is remembered as declined so it won't be proposed again; only the user's own staged items can be declined. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `id` | string | Yes | The import entity id to decline (from CreateImportEntity or ListImportEntities). | # DeleteInitiative Source: https://docs.macro.com/AI/mcp/tools/delete-initiative Permanently delete a project, its description and properties. # DeleteInitiative Permanently delete a project, its description and properties. Associated tasks remain and lose their project association. Requires ownership. This operation cannot be undone. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `initiativeId` | string | Yes | Project to permanently delete. | # DeleteRoutine Source: https://docs.macro.com/AI/mcp/tools/delete-routine Permanently delete a routine owned by the authenticated user, stopping all future runs. # DeleteRoutine Permanently delete a routine owned by the authenticated user, stopping all future runs. This cannot be undone; to stop it temporarily, pause it with UpdateRoutine instead. Use only when the user explicitly asks to delete a routine. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `routineId` | string | Yes | Routine UUID. | # DeleteTag Source: https://docs.macro.com/AI/mcp/tools/delete-tag Permanently delete a tag from the user's personal set or their team's shared set. # DeleteTag Permanently delete a tag from the user's personal set or their team's shared set. This removes the tag from every item it is currently applied to, so it is destructive and cannot be undone — confirm with the user first. Both ids come from a ListTags result: `id` is the tag's option id, and `property_definition_id` is the propertyDefinitionId of the set that contains it. To simply remove a tag from a single item without deleting the tag itself, use SetEntityProperty with remove\_option\_ids instead. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `id` | string | Yes | The tag's option id (the `id` field from a ListTags result). | | `property_definition_id` | string | Yes | The tag set's property definition id (the `propertyDefinitionId` of the ListTags set that contains this tag). | # DescribeDatabase Source: https://docs.macro.com/AI/mcp/tools/describe-database Read a database's tables, versions and columns before writing SQL: IDs, exact SQL names, types, select labels, and relation targets. # DescribeDatabase Read a database's tables, versions and columns before writing SQL: IDs, exact SQL names, types, select labels, and relation targets. Pass includeEditingMetadata only when editing views or changing column types to include saved views and conversion targets. Get databaseId from ListDatabases. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `databaseId` | string | Yes | Id of the database to describe, as returned by ListDatabases. | | `includeEditingMetadata` | boolean | No | Include saved views and per-column type conversion targets. Omit for queries. | # DispatchCodingAgent Source: https://docs.macro.com/AI/mcp/tools/dispatch-coding-agent Start a new coding agent session for a task using an agent returned by ListCodingAgents. # DispatchCodingAgent Start a new coding agent session for a task using an agent returned by ListCodingAgents. Pass a self-contained task with the relevant repository, requirements, findings, and acceptance criteria; the coding agent does not inherit this conversation. Returns a live session reference after its first prompt is accepted, not completed code. Dispatch once per task and do not retry automatically after an uncertain failure. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `agent_id` | string | Yes | The id of the best-suited coding agent from ListCodingAgents | | `prompt` | string | Yes | Self-contained coding task, including the repository, relevant context, requirements, and desired outcome | # DuplicateItem Source: https://docs.macro.com/AI/mcp/tools/duplicate-item Make a copy of a document (including a task), owned by the user, as the Duplicate action in the app does. # DuplicateItem Make a copy of a document (including a task), owned by the user, as the Duplicate action in the app does. Requires view access to the original. Returns the copy's id. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `entityType` | `"document"` | Yes | The kind of item to duplicate. | | `entityId` | string | Yes | The id of the item to duplicate. | | `name` | string | No | Name for the copy of a document. Omit to use "\ copy". | # EditBookingLink Source: https://docs.macro.com/AI/mcp/tools/edit-booking-link Edit exactly one existing booking link. # EditBookingLink Edit exactly one existing booking link. First read it with ListBookingLinks, preserve all settings the user did not request changing, and pass its revision and full edited draft. Changed availability applies only to this link; other links and personal default hours remain unchanged. A stale revision fails: read again and confirm the updated proposal in conversation instead of overwriting concurrent edits. Create or edit booking links only after conversational confirmation, with no review card or interactive form. First explain all proposed details clearly in your reply: personal or team ownership, named hosts and who attends, meeting name, description, duration, location, Macro call, or Google Meet, time zone, weekly hours and date exceptions, link name, buffers, minimum notice, booking window, slot interval, daily limit, guest questions and whether bookings are enabled. Ask whether to proceed and stop. Only in a later turn after the user approves that specific proposal, call this tool with their approving reply quoted verbatim in userConfirmation. The original request is not confirmation; never invent or paraphrase approval. Never ask the user for teamId, host IDs, schedule IDs, revisions or JSON: discover IDs with ListBookingLinks and ListTeamMembers. Default to personal ownership unless a team is requested, and clarify ambiguous choices by name. After execution, share the saved URL with an \ chip (profileId/slug/url from the result), not a bare URL. Returns actual saved IDs, revision, full draft and shareable URL. Manual approval must be false; guest booking requires a connected, synced writable calendar. For video, set macroCall (preferred) or googleMeet, never both. Booking a macroCall link creates the call and attaches its join link to the invitation. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `teamId` | string | No | Existing Macro team ID discovered through tools, never requested from the user. Use null for a personal booking link. | | `eventTypeId` | string | Yes | Existing link identity returned by ListBookingLinks. | | `expectedRevision` | integer | Yes | Revision returned by ListBookingLinks; guards against concurrent settings changes. | | `draft` | BookingLinkDraft | Yes | Complete proposal reviewed and validated before saving. | | `userConfirmation` | string | Yes | The user's reply approving the specific proposal you already showed them, quoted verbatim. Never use their original request, paraphrase their reply, or invent approval. | # EditChannelMessage Source: https://docs.macro.com/AI/mcp/tools/edit-channel-message Replace the content of an existing channel message or thread reply. # EditChannelMessage Replace the content of an existing channel message or thread reply. Only the message's author can edit it, so this edits messages the user sent and messages this assistant sent for them; channel admins and owners may also edit others' messages. Find message ids with ReadChannelMessages or ReadChannelThread. Use only when the user asks to edit or correct a message. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `channelId` | string | Yes | Channel id containing the message. | | `messageId` | string | Yes | Id of the message to edit. | | `content` | string | Yes | The full replacement message content in macro markdown format. This replaces the whole message, not a fragment of it. | # EditComment Source: https://docs.macro.com/AI/mcp/tools/edit-comment Replace the text of a comment or reply in the Discussion of a document, task, Tasks project, CRM company or CRM contact. # EditComment Replace the text of a comment or reply in the Discussion of a document, task, Tasks project, CRM company or CRM contact. Only a comment's author can edit it, so this edits comments the user wrote and comments this assistant wrote for them. A comment id is enough to find its item. Comment ids come from ReadDiscussion, or from ReadContent for a document. Use only when the user asks to edit a comment. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `commentId` | string | Yes | The id of the comment or reply to edit. For the first comment of a thread this is the thread id. | | `content` | string | Yes | The full replacement text of the comment, in Macro markdown. | # EditDocument Source: https://docs.macro.com/AI/mcp/tools/edit-document Apply AI-driven edits to a Macro markdown document in place -- rewriting, inserting, formatting, or restructuring. # EditDocument Apply AI-driven edits to a Macro markdown document in place -- rewriting, inserting, formatting, or restructuring. Use EditSpreadsheet for native Macro spreadsheets. Markdown documents only: these are authored in Macro's collaborative editor, and are the only documents whose content this tool can rewrite. Edit uploaded Word (.docx) files with ReadWordDocument and EditWordDocument instead. Other uploaded files -- PDFs, images, source files such as .py or .ts -- are readable but not editable, and are rejected. If the response contains a `clarification` field, invoke again with the requested info appended to `instructions`. To insert @-mention chips, include each referenced item's ids and details in `instructions`: userId/email for people; documentId/documentName/blockName (and blockParams when needed) for documents, channels, chats, projects, tasks, emails, calendar events, skills, calls, and routines; session id (and optional expanded card) for agent sessions; ISO datetime plus displayFormat for time chips; profileId/slug/url for booking links. To insert document-card(s), include each document's documentId and documentName. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `document_id` | string | Yes | The ID of the markdown document to edit. If you are not certain the document is markdown, call ReadMetadata first and check that `fileType` is `md` -- passing an uploaded file here fails. | | `instructions` | string | Yes | Natural language instructions. For @-mention chips, include each item's ids and details: userId/email for people; documentId/documentName/blockName for documents and similar items; session id for agent sessions; ISO datetime and displayFormat for time chips; profileId/slug/url for booking links. For document-card(s), include documentId and documentName per document. You may need to look these up. | | `fast` | boolean | No | Set true for one quick, contained edit -- rewrite this paragraph, translate the selected list, fix a heading, bold a phrase. A single model applies it directly in a few seconds. Leave false (the default) for anything with several parts or that restructures the document; the default pipeline plans, dispatches, and reviews its own work, which takes longer but is what multi-step edits need. | # EditForm Source: https://docs.macro.com/AI/mcp/tools/edit-form Edit the live form using typed targeted operations. # EditForm Edit the live form using typed targeted operations. ReadForm provides stable question/section IDs. Edits produce granular CRDT updates; concurrent changes merge using the same rules as the builder. Omitted fields stay unchanged. Invalid merged layouts are refused. Changes can add or move questions/sections, edit requiredness/help/gates and attach an existing booking target. New columns use explicit stable IDs. Question labels follow backing column names; rename them through database tools. Removing a question keeps its column and answers. Schema retyping and conditional column cleanup are unsupported. Keep gates after the questions they test and booking last. Read the current form after a timeout or partial result before proceeding. Opening and sharing require SetFormAccess. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `formId` | FormId | Yes | Identifier of a form (the shareable entity respondents open). | | `changes` | Change\[] | Yes | At most 100 targeted operations; omitted fields survive. | | `newColumns` | NewColumnDraft\[] | No | Additive schema operations, applied through DatabasesService. No column deletion/retyping. | | `description` | string | No | Optional introduction change. | | `confirmationMessage` | string | No | Optional accepted-response message change. | # EditPipeline Source: https://docs.macro.com/AI/mcp/tools/edit-pipeline Change a CRM pipeline itself: rename it, share it with the team or make it private (owner only), add, rename or remove fields, and add, rename or remove stages and other select options. # EditPipeline Change a CRM pipeline itself: rename it, share it with the team or make it private (owner only), add, rename or remove fields, and add, rename or remove stages and other select options. Stages are the options of the Stage field: to add a stage use addOptions on "Stage"; to rename one use renameOptions. Removing a field deletes its values from every entry, and removing a stage or option empties it on the entries holding it, so do that only when the user asked. New options go after the existing ones. Field changes apply together, all or nothing. Returns the pipeline with its fields as they are now. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `pipelineId` | string | Yes | The pipeline's id from ListPipelines. | | `name` | string | No | A new name for the pipeline. | | `sharedWithTeam` | boolean | No | true lets the user's team see and edit it; false makes it private to its owner. Only the owner can change this. | | `addFields` | ToolNewField\[] | No | Fields to add after the existing ones. | | `renameFields` | ToolRename\[] | No | Fields to rename. | | `removeFields` | string\[] | No | Names of fields to delete with their values. The Company or Contact field cannot be removed. | | `addOptions` | ToolAddOptions\[] | No | Stages or other select options to add. | | `renameOptions` | ToolRenameOption\[] | No | Stages or other select options to relabel. | | `removeOptions` | ToolRemoveOption\[] | No | Stages or other select options to delete. | # EditPresentation Source: https://docs.macro.com/AI/mcp/tools/edit-presentation Edit a PowerPoint (.pptx) presentation: an ordered batch of operations applied atomically and saved as a new version, so if any operation fails nothing is saved. # EditPresentation Edit a PowerPoint (.pptx) presentation: an ordered batch of operations applied atomically and saved as a new version, so if any operation fails nothing is saved. To make a new deck from an existing one instead (a translation, a variant, a copy to rework), pass saveAs: the edited deck is created as a new presentation, whose documentId is returned for further batches, and the original is left unchanged; operations may then be empty for a plain copy. ReadPresentation first; address slides and shapes by the ids it reports (slide ids are not slide numbers). Positions and sizes are in points from the slide's top-left corner. Text offsets count characters within a paragraph; \n separates paragraphs. Colors are RRGGBB hex or theme names (accent1-accent6, tx1, tx2, bg1, bg2). Use setText to rewrite a shape's text (it keeps each paragraph's formatting), formatText/formatParagraphs for styling (the whole shape when no range is given), formatBody for a text box's margins, autofit, columns, and Text Direction (vertical or stacked text, in table cells too), addSlide with a layout name for new slides (title and body fill its placeholders), addShape for text boxes, preset shapes, lines, tables, charts, or images, setChartData/setChartType/formatChart for charts the read marks editable, mergeCells/formatCells/setTableStyle/setTableGrid for tables (cell text through the text ops with cell), cropPicture/formatPicture for pictures (crop, fill or fit the frame, brightness, contrast, recolor, transparency), groupShapes/ungroupShape, setSlideLayout, setTransition, setAnimations/addAnimation/removeAnimations for a slide's click-through animations (entrance, emphasis, exit, and motion path effects by name, in playback order; setAnimations replaces the whole list and keeps listed existing ones), setShapeEffects for shadows, glows, soft edges, and reflections (by gallery preset name or options; formatText takes text shadow and glow too), setCustomGeometry to redraw a shape's outline as paths in shape-local points (moveTo/lineTo/cubicBezTo/quadBezTo/arcTo/close; the box follows the paths, keeping its formatting and text), mergeShapes to union/combine/fragment/intersect/subtract overlapping shapes (in selection order; the first shape's formatting and id win), SmartArt through addShape \{kind: smartArt, layout, items: \[\{text, level}], colors, style}, editSmartArt (setText, addNode, deleteNode, promote, demote, moveUp, moveDown, setNodes, setLayout, setColors, setStyle, reset, by the node ids the read lists) and convertSmartArt (to shapes or text), equations with insertEquation (LaTeX-style linear text such as \frac\{a}\{b}, x^2, \sqrt\{x}, \sum\_\{i=1}^\{n}; without shape it makes a new centered text box) and setEquation (an equation stands in its paragraph as one U+FFFC character at the index the read lists; delete it with deleteText over that character), review comments with addComment/replyComment/editComment/resolveComment/deleteComment/deleteAllComments (thread ids from the read; legacy threads can only be edited or deleted; sign them with the user's name), slide masters and layouts by passing a master or layout id (the read lists them, at least 2147483648) as slide to shape, text, table, picture, or background ops so the change reaches every slide using it, plus addLayout/renameLayout/deleteLayout/insertPlaceholder/setLayoutOptions and setBackgroundStyle (1-12), setThemeColors/setThemeFonts to restyle the whole deck through its theme (prefer them over recoloring shapes one by one), setHeaderFooter for slide numbers, dates, and footers (omit slides to apply to all), setSlideSize to change the slide size (scale fit shrinks content to the new size), addSection/renameSection/removeSection/moveSection to organize slides into sections (by the section ids the read reports), setGuides to replace the deck's drawing guides, and replaceText for find-and-replace across the deck. Ids of created slides and shapes are returned with the changed slides as they now read; check them. At most 100 operations. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `documentId` | string | Yes | Presentation document ID. | | `operations` | EditOp\[] | No | Ordered operations validated and committed together. | | `saveAs` | SaveAsPresentation | No | Create the edited deck as a new presentation instead of changing this one. | # EditSpreadsheet Source: https://docs.macro.com/AI/mcp/tools/edit-spreadsheet Apply one atomic batch to a native Macro spreadsheet: set cell values/formulas, format or clear ranges, fill with relative formulas, add rows, resize columns, add or remove in-cell dropdowns (list data validation with a clickable arrow, optionally with a color per choice), insert checkboxes backed by TRUE/FALSE values, convert a range with a header row to a named table (filterable, sortable, referenced as Table1[Column], with typed columns such as currency, date, checkbox or dropdown), or add/rename/duplicate/delete sheets. # EditSpreadsheet Apply one atomic batch to a native Macro spreadsheet: set cell values/formulas, format or clear ranges, fill with relative formulas, add rows, resize columns, add or remove in-cell dropdowns (list data validation with a clickable arrow, optionally with a color per choice), insert checkboxes backed by TRUE/FALSE values, convert a range with a header row to a named table (filterable, sortable, referenced as Table1\[Column], with typed columns such as currency, date, checkbox or dropdown), or add/rename/duplicate/delete sheets. Requires expectedRevision from a fresh ReadSpreadsheet. If the workbook changed, nothing is written: reread and reconsider, never blindly retry. All operations validate before saving; at most 25 operations and 2000 affected cells. Sheet IDs are stable; an exact sheet name may address a sheet added earlier in the same batch. Existing directly referenced sheets cannot be renamed/deleted, and the last sheet cannot be deleted. Read affected ranges after editing to verify computed results. Formula errors are returned as warnings, not silently repaired. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `documentId` | string | Yes | Native spreadsheet document ID. | | `expectedRevision` | string | Yes | Exact opaque revision returned by ReadSpreadsheet. | | `operations` | SpreadsheetOperation\[] | Yes | Ordered operations validated and committed together. | # EditTag Source: https://docs.macro.com/AI/mcp/tools/edit-tag Rename or recolor an existing tag in the user's personal set or their team's shared set. # EditTag Rename or recolor an existing tag in the user's personal set or their team's shared set. The tag's id is preserved, so the change is reflected everywhere the tag is already applied — no item loses the tag. Provide the tag's `id` and its set's `property_definition_id` (both from ListTags) plus a new `label` and/or `color`; omit whichever you want to leave unchanged. This edits the tag itself; to change which tags are on a specific item, use SetEntityProperty instead. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `id` | string | Yes | The tag's option id (the `id` field from a ListTags result). | | `property_definition_id` | string | Yes | The tag set's property definition id (the `propertyDefinitionId` of the ListTags set that contains this tag). | | `label` | string | No | A new label for the tag. Omit to keep the current label. | | `color` | `"red"` \| `"tomato"` \| `"orange"` \| `"amber"` \| `"yellow"` \| `"green"` \| `"teal"` \| `"blue"` \| `"indigo"` \| `"purple"` \| `"pink"` \| `"gray"` | No | A new color for the tag, chosen from the fixed tag palette. Omit to keep the current color. | # EditWordDocument Source: https://docs.macro.com/AI/mcp/tools/edit-word-document Edit an uploaded Word (.docx) document in place: an ordered batch of operations applied atomically to its live copy, so everyone with it open sees the change at once, and nothing changes if any operation fails. # EditWordDocument Edit an uploaded Word (.docx) document in place: an ordered batch of operations applied atomically to its live copy, so everyone with it open sees the change at once, and nothing changes if any operation fails. ReadWordDocument first and address paragraphs, tables and blocks by the ids it reports (they are not numbers). Use replaceText for wording changes (exact text within one paragraph; formatting is kept), setText to rewrite a whole paragraph, formatText for bold, italic, underline or strikethrough, insertParagraph to add paragraphs (each line of text becomes one; a style is optional), setStyle to change a paragraph style such as Heading1, delete to remove a paragraph, table or block, and addComment to add a Word comment on text. Only insertParagraph and addComment text may contain line breaks. Paragraphs inside table cells are edited the same way. Tracked changes (a redline): with trackChanges true, or when the document already tracks changes and trackChanges is omitted, edits are recorded as real Word revisions (insertions, deletions, formatting and style changes) that the counterparty can accept or reject in Word; pass trackChanges true whenever the user asks for a redline, tracked changes or a markup. Revisions and addComment comments are attributed to the requesting user by name, not to you; pass author only when the user names someone else (a firm or another person). addComment comments are saved in the file and travel with it to Word; use them for comments meant for whoever receives the document, and Comment or CommentOnText for discussion inside Macro. Returns the changed blocks as they now read, with the ids of new paragraphs; check them. At most 50 operations. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `documentId` | string | Yes | Word document ID. | | `operations` | WordDocumentOperation\[] | Yes | Ordered operations applied together. | | `trackChanges` | boolean | No | Record the edits as tracked changes (true) or apply them directly (false). Omit to follow the document's own Track Changes setting. | | `author` | string | No | Name the tracked changes and comments are attributed to. Omit to use the requesting user's name. | # ExportPipelineCsv Source: https://docs.macro.com/AI/mcp/tools/export-pipeline-csv Export a CRM pipeline's deals (entries) to a CSV file saved in the user's Macro files: Company and Domain (or Contact and Email), then one column per field, with people as emails. # ExportPipelineCsv Export a CRM pipeline's deals (entries) to a CSV file saved in the user's Macro files: Company and Domain (or Contact and Email), then one column per field, with people as emails. Use it to back up a pipeline, move it to another team (ImportPipelineCsv reads the same file), or share it as a spreadsheet; to answer questions about deals, use FindPipelineEntries instead. Returns the file's documentId and how many entries it holds. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `pipelineId` | string | Yes | The pipeline's id from ListPipelines. | # FindPipelineEntries Source: https://docs.macro.com/AI/mcp/tools/find-pipeline-entries Find deals (entries) in a CRM pipeline: which companies or contacts are in which stage, who owns them, their revenue and other fields. # FindPipelineEntries Find deals (entries) in a CRM pipeline: which companies or contacts are in which stage, who owns them, their revenue and other fields. Filter by field values (e.g. Stage is Demo or Trial, Owner is me), by company or contact name/domain/email with `search`, or by record id; sort by any field (Stage sorts in pipeline order). Returns each entry's entryId, the record it tracks (id and name) and its filled-in fields, plus, over every match, the count per stage (and per option of each single-select field) and the total of each number field such as Revenue: use these for questions like "how many deals are in Negotiation" or "what is the pipeline worth". To find where a company or contact is across all pipelines ("what stage is Acme in?"), leave out pipelineId and pass its name as `search` (or its recordIds). Get pipeline ids and field names from ListPipelines. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `pipelineId` | string | No | The pipeline's id from ListPipelines. Leave it out to look in every pipeline by `search` or `recordIds`; filters and sorting need a pipelineId. | | `filters` | ToolFieldValue\[] | No | Only entries whose fields hold these values; all filters must match. Options and people match exactly (labels ignore case), text matches a substring, dates match the day. Example: \[\{"field": "Stage", "values": \["Demo", "Trial"]}, \{"field": "Owner", "value": "me"}]. | | `recordIds` | string\[] | No | Only entries tracking these CRM company or contact ids. | | `search` | string | No | Text the tracked company's name or domain, or the contact's name or email, must contain, ignoring case (e.g. "acme"). | | `sortBy` | string | No | A field name to order entries by, e.g. "Revenue" or "Stage". Empty fields come last. | | `descending` | boolean | No | Sort largest, latest or furthest stage first. Defaults to false. | | `limit` | integer | No | Most entries to return. Defaults to 50; max 200. | # GenerateImage Source: https://docs.macro.com/AI/mcp/tools/generate-image Generate or edit an image with Google's Nano Banana image model and save the result in static file service. # GenerateImage Generate or edit an image with Google's Nano Banana image model and save the result in static file service. Use for pictures, illustrations, diagram concepts, logo ideas, mockups, or edits based on reference photos. When the user supplies photos or asks to modify an existing image, pass them in referenceImages; describing a photo in the prompt alone does not send it to the image model. Describe the subject, style, composition, lighting, and any text to render; only the prompt is required. Refer to reference images by their order (image 1, image 2, image 3) when explaining how to use them. Returns the static file ID and image URL. The tool displays the image inline in chat. In channel messages without tool cards, copy the returned markdown verbatim on its own line; it includes dimensions so the image reserves space before loading. Do not cite it as a document. Generation takes several seconds. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `prompt` | string | Yes | Detailed description of the image to generate: subject, style (photo, illustration, flat vector...), composition, colours, mood, and any text that must appear. | | `aspectRatio` | `"square"` \| `"landscape"` \| `"portrait"` \| `"widescreen"` \| `"tall"` | No | Shape of the image. Omit for the model default (square). `widescreen` (16:9) suits banners and slides, `tall` (9:16) suits phone screens and stories. | | `referenceImages` | ImageReferenceInput\[] | No | Up to three reference photos, in the order used by the prompt. Use type document with a Macro image document ID, or type staticFile with the UUID from /file/\ in an uploaded attachment's source URL or the staticFileId of a previous generation. Use the actual IDs supplied in the conversation or by tools; do not invent IDs. Omit for text-only generation. | # GenerateObject Source: https://docs.macro.com/AI/mcp/tools/generate-object Generated from the Macro Rust tool registry. # GenerateObject Generated from the Macro Rust tool registry. # GetBookingInsights Source: https://docs.macro.com/AI/mcp/tools/get-booking-insights Get the same Booking Links summary statistics and chart data as Insights, for inclusive local dates in an IANA time zone (maximum 366 days). # GetBookingInsights Get the same Booking Links summary statistics and chart data as Insights, for inclusive local dates in an IANA time zone (maximum 366 days). Returns current and equally long previous periods: total, completed, rescheduled, cancelled, host/guest no-shows, scheduled meeting minutes, average duration, daily trends, popular hours, and counts by link and host. Optional eventTypeId and hostId filters apply to both periods. Failed and processing requests are excluded. Completed means confirmed and ended without an explicit no-show, not verified attendance. Minutes are scheduled duration, not actual call duration. Rescheduled is counted once per booking. Dates use the booking current start. No guest contact information is returned. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `teamId` | string | No | Existing team ID, or null for personal insights. | | `query` | InsightQuery | Yes | Inclusive local dates and optional booking/host filters. | # GetBookingRescheduleSlots Source: https://docs.macro.com/AI/mcp/tools/get-booking-reschedule-slots Find available replacement times for a booking discovered through ListBookings. # GetBookingRescheduleSlots Find available replacement times for a booking discovered through ListBookings. The date is in the booking schedule time zone. Only the personal owner, a host of the meeting or team administrators may reschedule it. Returns absolute start/end times for ChangeBooking reschedule; availability is checked again when moving the meeting. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `bookingId` | string | Yes | Existing booking ID from ListBookings. | | `date` | string | Yes | Date in the booking schedule time zone. | # GetBotWebhooks Source: https://docs.macro.com/AI/mcp/tools/get-bot-webhooks Get the channel-specific webhook URLs for a bot the current user can manage. # GetBotWebhooks Get the channel-specific webhook URLs for a bot the current user can manage. A bot has one URL per channel it can access. POST message content to a returned webhookUrl and authenticate with a token minted from the chat card or bot settings after IssueBotCredential or CreateBot; send it in the returned credentialHeader and send credentialScope in credentialScopeHeader. If no URLs are returned, add the bot to a channel with ManageBotChannelAccess or recreate it with CreateBot and channelId. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `botId` | string | Yes | Bot id from CreateBot or ListBots. | # GetCompany Source: https://docs.macro.com/AI/mcp/tools/get-company Fetch one of the team's CRM companies by id, with its domains, contacts, its own Stage / Owner / Revenue properties (not a pipeline deal's), and all attached property values (including custom properties and the valid stage options). # GetCompany Fetch one of the team's CRM companies by id, with its domains, contacts, its own Stage / Owner / Revenue properties (not a pipeline deal's), and all attached property values (including custom properties and the valid stage options). Use ListCompanies to find company ids. To change one of the company's own properties (its Stage, Owner, Revenue or a custom property) call SetEntityProperty with entity\_type=company, the company id, and a property\_definition\_id / option id from this response. Deals in a pipeline have their own stage and fields: find them with FindPipelineEntries (recordIds = this company's id) and change them with UpdatePipelineEntries. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `company_id` | string | Yes | The CRM company id (UUID), e.g. from ListCompanies. | # GetEntityProperties Source: https://docs.macro.com/AI/mcp/tools/get-entity-properties Get all properties attached to an entity (document, project, CRM company, etc.). # GetEntityProperties Get all properties attached to an entity (document, project, CRM company, etc.). Tasks are targeted as entity\_type=document. Returns property definitions with their current values and available options for select-type properties. Select and tag values also come back resolved as human-readable labels in currentValueLabels. Tags are properties with dataType "tag"; only tags visible to the user (their own and their team's) are returned. Use ListTags to see every tag available to the user, and SetEntityProperty with the tag definition id and add\_option\_ids/remove\_option\_ids to apply or remove tags. For task documents, system properties (Assignees, Status, Priority, Due Date, etc.) are always present — you can update them directly with SetEntityProperty using well-known IDs without calling this first. For CRM companies (entity\_type=company, entity\_id=the company UUID), this returns the builtin Stage / Owner / Revenue properties (with the team's stage options) plus any custom company properties. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `entity_id` | string | Yes | The ID of the entity to get properties for. | | `entity_type` | `"document"` \| `"initiative"` \| `"project"` \| `"thread"` \| `"channel"` \| `"call"` \| `"user"` \| `"company"` | Yes | Canonical entity type accepted when an AI tool targets an entity's properties. Tasks are targeted as `document`; email threads (type `email` in ListEntities and search results) are targeted as `thread`. | # GetTeamAvailability Source: https://docs.macro.com/AI/mcp/tools/get-team-availability Check personal busy time for you and your current teammates in a bounded UTC time window. # GetTeamAvailability Check personal busy time for you and your current teammates in a bounded UTC time window. Always includes you, even when userIds selects particular teammates. Omit userIds for the whole team, or use ids from ListTeamMembers for specific people. An empty list checks only you. Returns merged busy intervals without event titles, plus coverage and unknown reasons. Subscribed coworkers' events do not block a person's time unless they attend or included that calendar. Common freeWindows are present only when every requested person's data is complete and current. When freeWindows is absent, report uncertainty and never infer free time from missing busy blocks. Free windows cover the requested range only; working hours are not applied. Prefer a day or a week; the maximum is 370 days within one year past to two years future. This tool grants no Google Calendar access and does not invite, RSVP, or modify events. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `start` | string | Yes | Inclusive start, RFC 3339 UTC (for example 2026-10-07T09:00:00Z). | | `end` | string | Yes | Exclusive end, RFC 3339 UTC. Must be later than start. | | `userIds` | string\[] | No | At most 100 Macro user ids from ListTeamMembers. Omit for the whole team; an empty list checks only you. Unknown ids never expand access and suppress common free windows. | # GetThread Source: https://docs.macro.com/AI/mcp/tools/get-thread Retrieve an email thread and its messages. # GetThread Retrieve an email thread and its messages. Returns the thread metadata, the inbox the thread belongs to, the labels applied to the thread (e.g. INBOX, UNREAD, STARRED, and any custom labels), and message contents including sender, recipients, subject, body text, and the labels on each individual message. Use this to read the contents of a specific email conversation, to see which labels a thread or message has, or to find out which of the user's inboxes received it before replying. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `threadId` | string | Yes | The ID of the email thread to retrieve. | | `limit` | integer | No | Maximum number of messages to return (default 10). | # ImportCompaniesCsv Source: https://docs.macro.com/AI/mcp/tools/import-companies-csv Import companies into the team CRM from a CSV, such as a Macro companies export or a list from another CRM. # ImportCompaniesCsv Import companies into the team CRM from a CSV, such as a Macro companies export or a list from another CRM. Each row needs a domain (a Domain, Domains or Website column) and may name the company (Company or Name); a row takes its first valid domain, and companies the team already has are left as they are. Stage, Owner and Revenue live on pipeline entries rather than companies: when the CSV has them, they go on entries of pipelineId, or of a new pipeline (private unless shareNewPipeline) named after the file. Give the CSV as text in csv, or as documentId for a CSV file in Macro. Returns counts and the rows that could not be imported. To add rows to a pipeline without this, use ImportPipelineCsv. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `csv` | string | No | The CSV text with a header row. Give this or documentId, not both. | | `documentId` | string | No | The id of a CSV file in Macro the user can open, e.g. one they uploaded. Give this or csv, not both. | | `pipelineId` | string | No | A company pipeline (id from ListPipelines) to put the CSV's Stage, Owner and Revenue on. Omit to create a new pipeline when the CSV has them. | | `newPipelineName` | string | No | The name of the new pipeline, when one is created. Defaults to the file's name. | | `shareNewPipeline` | boolean | No | Share the new pipeline with the team instead of keeping it private to the user. Defaults to false. | # ImportNotionPage Source: https://docs.macro.com/AI/mcp/tools/import-notion-page Import one specific Notion page through Macro's canonical Notion importer. # ImportNotionPage Import one specific Notion page through Macro's canonical Notion importer. Use this when the user explicitly asks to import a page URL or id. The tool performs deduplication, fetches through the user's connected Notion MCP, normalizes the page, creates the Macro markdown document, and returns its entity id. Do not fetch and recreate the page manually with generic document tools. Notion databases and database-first pages are intentionally not imported. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `pageUrl` | string | Yes | The exact Notion page URL or stable 32-character Notion page id to import. | # ImportPipelineCsv Source: https://docs.macro.com/AI/mcp/tools/import-pipeline-csv Import a CSV into a CRM pipeline as new deals (entries), such as a pipeline export or a sheet of deals. # ImportPipelineCsv Import a CSV into a CRM pipeline as new deals (entries), such as a pipeline export or a sheet of deals. In a company pipeline each row needs a domain (Domain, Domains or Website column) and may name the company (Company); in a contact pipeline each row needs an Email and may name the contact (Contact). Missing companies and contacts are created. Other columns fill the pipeline fields with the same name (Stage, Owner as an email, Revenue, custom fields); stage labels the pipeline lacks are added. Records already in the pipeline are not added again, so retrying an interrupted import adds only what is missing; several rows for one new record become separate deals. Give the CSV as text in csv, or as documentId for a CSV file in Macro. Returns counts and the rows that could not be added. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `pipelineId` | string | Yes | The pipeline's id from ListPipelines. | | `csv` | string | No | The CSV text with a header row. Give this or documentId, not both. | | `documentId` | string | No | The id of a CSV file in Macro the user can open, e.g. one they uploaded or an ExportPipelineCsv result. Give this or csv, not both. | # Tool Reference Source: https://docs.macro.com/AI/mcp/tools/index Generated reference pages for Macro MCP tools. # Tool Reference These pages are generated from Macro's Rust MCP tool registry. ## Tools * [AddToPipeline](/AI/mcp/tools/add-to-pipeline) * [BashCodeExecution](/AI/mcp/tools/bash-code-execution) * [BulkSetEntityPropertyOptions](/AI/mcp/tools/bulk-set-entity-property-options) * [CalculateSpreadsheet](/AI/mcp/tools/calculate-spreadsheet) * [ChangeBooking](/AI/mcp/tools/change-booking) * [Comment](/AI/mcp/tools/comment) * [CommentOnText](/AI/mcp/tools/comment-on-text) * [ConfigureAgent](/AI/mcp/tools/configure-agent) * [ConfigureBot](/AI/mcp/tools/configure-bot) * [ContentSearch](/AI/mcp/tools/content-search) * [CreateAgentSession](/AI/mcp/tools/create-agent-session) * [CreateBookingLink](/AI/mcp/tools/create-booking-link) * [CreateBot](/AI/mcp/tools/create-bot) * [CreateCalendarEvent](/AI/mcp/tools/create-calendar-event) * [CreateChannel](/AI/mcp/tools/create-channel) * [CreateChannelMediaUpload](/AI/mcp/tools/create-channel-media-upload) * [CreateCompany](/AI/mcp/tools/create-company) * [CreateContact](/AI/mcp/tools/create-contact) * [CreateDocument](/AI/mcp/tools/create-document) * [CreateForm](/AI/mcp/tools/create-form) * [CreateImportEntity](/AI/mcp/tools/create-import-entity) * [CreateInitiative](/AI/mcp/tools/create-initiative) * [CreatePipeline](/AI/mcp/tools/create-pipeline) * [CreateProject](/AI/mcp/tools/create-project) * [CreateRoutine](/AI/mcp/tools/create-routine) * [CreateSkill](/AI/mcp/tools/create-skill) * [CreateTag](/AI/mcp/tools/create-tag) * [Decide](/AI/mcp/tools/decide) * [DeleteBot](/AI/mcp/tools/delete-bot) * [DeleteCalendarEvent](/AI/mcp/tools/delete-calendar-event) * [DeleteCallRecord](/AI/mcp/tools/delete-call-record) * [DeleteChannelMessage](/AI/mcp/tools/delete-channel-message) * [DeleteComment](/AI/mcp/tools/delete-comment) * [DeleteDatabaseView](/AI/mcp/tools/delete-database-view) * [DeleteImportEntity](/AI/mcp/tools/delete-import-entity) * [DeleteInitiative](/AI/mcp/tools/delete-initiative) * [DeleteRoutine](/AI/mcp/tools/delete-routine) * [DeleteTag](/AI/mcp/tools/delete-tag) * [DescribeDatabase](/AI/mcp/tools/describe-database) * [DispatchCodingAgent](/AI/mcp/tools/dispatch-coding-agent) * [DuplicateItem](/AI/mcp/tools/duplicate-item) * [EditBookingLink](/AI/mcp/tools/edit-booking-link) * [EditChannelMessage](/AI/mcp/tools/edit-channel-message) * [EditComment](/AI/mcp/tools/edit-comment) * [EditDocument](/AI/mcp/tools/edit-document) * [EditForm](/AI/mcp/tools/edit-form) * [EditPipeline](/AI/mcp/tools/edit-pipeline) * [EditPresentation](/AI/mcp/tools/edit-presentation) * [EditSpreadsheet](/AI/mcp/tools/edit-spreadsheet) * [EditTag](/AI/mcp/tools/edit-tag) * [EditWordDocument](/AI/mcp/tools/edit-word-document) * [ExportPipelineCsv](/AI/mcp/tools/export-pipeline-csv) * [FindPipelineEntries](/AI/mcp/tools/find-pipeline-entries) * [GenerateImage](/AI/mcp/tools/generate-image) * [GenerateObject](/AI/mcp/tools/generate-object) * [GetBookingInsights](/AI/mcp/tools/get-booking-insights) * [GetBookingRescheduleSlots](/AI/mcp/tools/get-booking-reschedule-slots) * [GetBotWebhooks](/AI/mcp/tools/get-bot-webhooks) * [GetCompany](/AI/mcp/tools/get-company) * [GetEntityProperties](/AI/mcp/tools/get-entity-properties) * [GetTeamAvailability](/AI/mcp/tools/get-team-availability) * [GetThread](/AI/mcp/tools/get-thread) * [ImportCompaniesCsv](/AI/mcp/tools/import-companies-csv) * [ImportNotionPage](/AI/mcp/tools/import-notion-page) * [ImportPipelineCsv](/AI/mcp/tools/import-pipeline-csv) * [IssueBotCredential](/AI/mcp/tools/issue-bot-credential) * [ListAgents](/AI/mcp/tools/list-agents) * [ListBookingLinks](/AI/mcp/tools/list-booking-links) * [ListBookings](/AI/mcp/tools/list-bookings) * [ListBots](/AI/mcp/tools/list-bots) * [ListCalendarEvents](/AI/mcp/tools/list-calendar-events) * [ListCalendars](/AI/mcp/tools/list-calendars) * [ListCodingAgents](/AI/mcp/tools/list-coding-agents) * [ListCompanies](/AI/mcp/tools/list-companies) * [ListDatabases](/AI/mcp/tools/list-databases) * [ListEntities](/AI/mcp/tools/list-entities) * [ListForms](/AI/mcp/tools/list-forms) * [ListImportEntities](/AI/mcp/tools/list-import-entities) * [ListInboxes](/AI/mcp/tools/list-inboxes) * [ListInitiatives](/AI/mcp/tools/list-initiatives) * [ListLabels](/AI/mcp/tools/list-labels) * [ListNotifications](/AI/mcp/tools/list-notifications) * [ListPipelines](/AI/mcp/tools/list-pipelines) * [ListRoutines](/AI/mcp/tools/list-routines) * [ListSkills](/AI/mcp/tools/list-skills) * [ListTags](/AI/mcp/tools/list-tags) * [ListTeamMembers](/AI/mcp/tools/list-team-members) * [ManageAgentSession](/AI/mcp/tools/manage-agent-session) * [ManageBotChannelAccess](/AI/mcp/tools/manage-bot-channel-access) * [ManageChannelParticipants](/AI/mcp/tools/manage-channel-participants) * [MarkNotificationsDone](/AI/mcp/tools/mark-notifications-done) * [MarkNotificationsSeen](/AI/mcp/tools/mark-notifications-seen) * [MoveToProject](/AI/mcp/tools/move-to-project) * [MoveToTrash](/AI/mcp/tools/move-to-trash) * [MuteNotifications](/AI/mcp/tools/mute-notifications) * [NameSearch](/AI/mcp/tools/name-search) * [OpenDirectMessage](/AI/mcp/tools/open-direct-message) * [QueryDatabase](/AI/mcp/tools/query-database) * [ReactToChannelMessage](/AI/mcp/tools/react-to-channel-message) * [ReadActivity](/AI/mcp/tools/read-activity) * [ReadAgentSession](/AI/mcp/tools/read-agent-session) * [ReadAgentSessionSharing](/AI/mcp/tools/read-agent-session-sharing) * [ReadBookingSettings](/AI/mcp/tools/read-booking-settings) * [ReadCallRecord](/AI/mcp/tools/read-call-record) * [ReadChannelMessageContext](/AI/mcp/tools/read-channel-message-context) * [ReadChannelMessages](/AI/mcp/tools/read-channel-messages) * [ReadChannelThread](/AI/mcp/tools/read-channel-thread) * [ReadContent](/AI/mcp/tools/read-content) * [ReadDesign](/AI/mcp/tools/read-design) * [ReadDiscussion](/AI/mcp/tools/read-discussion) * [ReadForm](/AI/mcp/tools/read-form) * [ReadIllustratorDocument](/AI/mcp/tools/read-illustrator-document) * [ReadInitiative](/AI/mcp/tools/read-initiative) * [ReadInitiativeActivity](/AI/mcp/tools/read-initiative-activity) * [ReadMetadata](/AI/mcp/tools/read-metadata) * [ReadPhotoshopDocument](/AI/mcp/tools/read-photoshop-document) * [ReadPresentation](/AI/mcp/tools/read-presentation) * [ReadProject](/AI/mcp/tools/read-project) * [ReadRoutine](/AI/mcp/tools/read-routine) * [ReadSkill](/AI/mcp/tools/read-skill) * [ReadSpreadsheet](/AI/mcp/tools/read-spreadsheet) * [ReadWordDocument](/AI/mcp/tools/read-word-document) * [RemoveFromPipeline](/AI/mcp/tools/remove-from-pipeline) * [RenameChannel](/AI/mcp/tools/rename-channel) * [RenameDocument](/AI/mcp/tools/rename-document) * [RenameItem](/AI/mcp/tools/rename-item) * [ResolveComment](/AI/mcp/tools/resolve-comment) * [RunRoutine](/AI/mcp/tools/run-routine) * [SaveDatabaseQuery](/AI/mcp/tools/save-database-query) * [SaveDatabaseView](/AI/mcp/tools/save-database-view) * [SearchSkills](/AI/mcp/tools/search-skills) * [SelfKnowledge](/AI/mcp/tools/self-knowledge) * [SendChannelMessage](/AI/mcp/tools/send-channel-message) * [SetEntityProperty](/AI/mcp/tools/set-entity-property) * [SetFavorite](/AI/mcp/tools/set-favorite) * [SetFormAccess](/AI/mcp/tools/set-form-access) * [SetSenderPolicy](/AI/mcp/tools/set-sender-policy) * [ShareWithChannel](/AI/mcp/tools/share-with-channel) * [Subagent](/AI/mcp/tools/subagent) * [TextEditorCodeExecution](/AI/mcp/tools/text-editor-code-execution) * [UpdateAgentSessionSharing](/AI/mcp/tools/update-agent-session-sharing) * [UpdateBookingSettings](/AI/mcp/tools/update-booking-settings) * [UpdateCalendarEvent](/AI/mcp/tools/update-calendar-event) * [UpdateCallRecord](/AI/mcp/tools/update-call-record) * [UpdateInitiative](/AI/mcp/tools/update-initiative) * [UpdateInitiativeSharing](/AI/mcp/tools/update-initiative-sharing) * [UpdatePipelineEntries](/AI/mcp/tools/update-pipeline-entries) * [UpdateRoutine](/AI/mcp/tools/update-routine) * [UpdateSharing](/AI/mcp/tools/update-sharing) * [UpdateThreadLabels](/AI/mcp/tools/update-thread-labels) * [UploadFile](/AI/mcp/tools/upload-file) * [WebFetch](/AI/mcp/tools/web-fetch) * [WebSearch](/AI/mcp/tools/web-search) # IssueBotCredential Source: https://docs.macro.com/AI/mcp/tools/issue-bot-credential Prepare a new bot credential for a bot the current user can manage. # IssueBotCredential Prepare a new bot credential for a bot the current user can manage. This does not mint the secret. Tell the user to click the chat card or open bot settings to create the token. The secret is shown only while that card is open. Use this when the user asks for bot credentials or a webhook token; existing raw secrets cannot be recovered safely. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `botId` | string | Yes | Bot id from CreateBot or ListBots. | | `label` | string | No | Optional label describing where the credential will be used, such as `github-webhook`. | | `expiresAt` | string | No | Optional RFC 3339 expiration timestamp. Omit for a credential without a scheduled expiration. | # ListAgents Source: https://docs.macro.com/AI/mcp/tools/list-agents List every AI agent the current user can manage - their own, their teams', and channel agents they can mention - with each agent's current instructions and settings: harness, model, channel availability, connected apps, permission behavior, and whether it is a coding or chat agent. # ListAgents List every AI agent the current user can manage - their own, their teams', and channel agents they can mention - with each agent's current instructions and settings: harness, model, channel availability, connected apps, permission behavior, and whether it is a coding or chat agent. Use this to find an agent's botId and read its current configuration before changing it with ConfigureAgent. ListBots covers plain webhook bots instead. # ListBookingLinks Source: https://docs.macro.com/AI/mcp/tools/list-booking-links Discover and reuse the user's booking links before creating one. # ListBookingLinks Discover and reuse the user's booking links before creating one. Returns shareable URLs, enabled/paused state, full drafts and revision for EditBookingLink, plus reusable availability schedules and the user's host ID. Searches title, slug and description; omit query for all (at most 100). Omit teamId for personal links; use a team ID returned in teamIds for team links. This read never creates settings. These are reusable scheduling pages, not calendar meetings. When sharing a returned URL in Markdown, use an \ chip with profileId/slug/url, not a bare URL. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `teamId` | string | No | Existing Macro team ID, or null for personal links. | | `query` | string | No | Optional text to match in the link title, slug or description. | # ListBookings Source: https://docs.macro.com/AI/mcp/tools/list-bookings Read every booking starting in a half-open timestamp range for personal or team Booking Links. # ListBookings Read every booking starting in a half-open timestamp range for personal or team Booking Links. Returns IDs, status, hosts, guest details, answers, attendance and reschedule history; use these IDs to manage meetings. Both timestamps are required, with an explicit UTC offset. Maximum range 733 days. Oversized result sets fail rather than silently truncating: narrow the range. Use GetBookingInsights for aggregate statistics. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `teamId` | string | No | Existing team ID, or null for personal bookings. | | `from` | string | Yes | Inclusive start timestamp. | | `to` | string | Yes | Exclusive end timestamp. | # ListBots Source: https://docs.macro.com/AI/mcp/tools/list-bots List every active bot the current user can manage, including user-owned bots and bots owned by teams they belong to. # ListBots List every active bot the current user can manage, including user-owned bots and bots owned by teams they belong to. Use this to discover a botId before issuing credentials, reading webhook URLs, changing channel access, configuring, or deleting a bot. # ListCalendarEvents Source: https://docs.macro.com/AI/mcp/tools/list-calendar-events List the user's calendar events between two instants, across every calendar they have connected. # ListCalendarEvents List the user's calendar events between two instants, across every calendar they have connected. Returns one entry per occurrence (a recurring event appears once per instance in the window), soonest first, with the `eventId` needed by UpdateCalendarEvent and DeleteCalendarEvent. Use this to answer questions about the user's schedule ("what's on my calendar tomorrow?"), to find an event the user wants changed or removed, and to check for conflicts before creating an event. Keep the window as narrow as the request allows — a day or a week — since wide windows truncate at 200 occurrences. The window must be at most 370 days and within one year past to two years future. If `syncStatus` is `syncing`, tell the user results may still be incomplete. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `start` | string | Yes | Inclusive window start, RFC 3339 UTC (e.g. 2026-08-20T00:00:00Z). | | `end` | string | Yes | Exclusive window end, RFC 3339 UTC. Must be after start. | # ListCalendars Source: https://docs.macro.com/AI/mcp/tools/list-calendars List the calendars the user can see across their connected inboxes, with each calendar's `calendarId`, display name, owning inbox address, provider, capabilities, and whether it is primary and writable. # ListCalendars List the calendars the user can see across their connected inboxes, with each calendar's `calendarId`, display name, owning inbox address, provider, capabilities, and whether it is primary and writable. Use this before CreateCalendarEvent when the user wants an event on a specific non-default calendar (e.g. "add it to my work calendar") so you can pass the exact `calendarId`. Most users have a single primary calendar, in which case CreateCalendarEvent targets it by default and you do not need this tool unless choosing conference or other provider-dependent behavior. Check `capabilities` before requesting a conference, removing one, or using custom recurrence. An empty result means no calendar is connected. # ListCodingAgents Source: https://docs.macro.com/AI/mcp/tools/list-coding-agents Find the coding agents available to the current user. # ListCodingAgents Find the coding agents available to the current user. Call this before delegating coding work. Choose an agent using its name, description, instructions, runtime, and model, preferring the user's requested agent or the persona best suited to the repository and task. Returns only available coding agents. If none are available, explain that the user needs to connect or configure a coding agent. # ListCompanies Source: https://docs.macro.com/AI/mcp/tools/list-companies List the CRM companies tracked by the authenticated user's team, sorted by most recent interaction. # ListCompanies List the CRM companies tracked by the authenticated user's team, sorted by most recent interaction. Each row includes the company id, name, domains, last interaction time, and the company's own Stage / Owner / Revenue properties when set (not a pipeline deal's). Use the filters to narrow results: `search` for name/domain text, `stage` for the company's own Stage property, `owner_user_id` for companies owned by a user. Use GetCompany for one company's full details (contacts + all properties), and SetEntityProperty with entity\_type=company to change the company's own Stage / Owner / Revenue or custom properties. Deals in a pipeline have their own stage and fields, separate from these: use FindPipelineEntries and UpdatePipelineEntries for them. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `search` | string | No | Case-insensitive substring matched against company names and domains (e.g. "acme" matches "Acme Corp" and "acme.com"). | | `stage` | string | No | Filter to companies whose own Stage property (not a pipeline deal's stage) is this. Accepts a stage label matched case-insensitively (e.g. "lead", "Customer" — teams may have custom stage names) or a stage option UUID. | | `owner_user_id` | string | No | Filter to companies whose Owner property is this Macro user id (e.g. "macro\|[user@example.com](mailto:user@example.com)"). Use ListTeamMembers to find user ids. | | `include_hidden` | boolean | No | Also include companies hidden from the CRM. Defaults to false. Requires team admin or owner role. | | `limit` | integer | No | Maximum number of companies to return. Defaults to 50; max 200. | # ListDatabases Source: https://docs.macro.com/AI/mcp/tools/list-databases List every accessible Macro database AND its table tabs, including owned and shared data. # ListDatabases List every accessible Macro database AND its table tabs, including owned and shared data. A database is a container; its name can differ from a requested table's name. For example, the Tickets table might be inside a database named Product. Search every entry's `tables`, not just database names. Start here whenever the user refers to "my table", "the tracker", or any named list of theirs: this is the only way to turn that name into the `databaseId` every other database tool needs. Each entry includes `id`, `name`, `grant`, and nested `tables` with their ids, display names, and SQL names. `view` and `comment` permit reading, not row/schema edits. Takes no arguments and returns every database, so there is no filter to get wrong. Follow it with DescribeDatabase for the matching database's columns before writing SQL. Do not claim a table is absent until you have checked the returned table names; resolve duplicate names using their database context. An empty result means no accessible databases, not proof that no such data exists elsewhere. # ListEntities Source: https://docs.macro.com/AI/mcp/tools/list-entities Browse the user's Macro workspace to see recent items they have access to. # ListEntities Browse the user's Macro workspace to see recent items they have access to. Returns Macro documents, agent sessions, projects, emails, chat channels, call records, and foreign entities. Use this to get an overview of what the user has been working on or to find items by type. Start here for activity-summary questions such as "what happened today", "what's going on", "catch me up", or "what happened in standup today"; apply precise time, type, channel, or mailbox filters when the user gives that scope. For Macro task requests such as "list my tasks", "tasks assigned to me", or "tasks I completed yesterday", prefer this tool over external task trackers such as Linear unless the user explicitly asks for Linear. Macro tasks are document items with df subtype \{"l":\{"dst":"task"}} and includeTypes \["document"]. Filter task Status and Assignees through propf using entity\_type TASK: Status property 00000001-0000-0000-0000-000000000002, Completed option 00000001-0000-0000-0002-000000000004, Assignees property 00000001-0000-0000-0000-000000000001. The current user's assignee entity id is their Macro user id, usually macro|\. For "completed yesterday", combine status Completed, assigned-to-me, and a df updatedAt yesterday window with ua gte/lt ISO timestamps. Returned documents, projects, emails, and call records include the tags visible to the user as \{label, scope} pairs. To filter by tag (e.g. "my items tagged bug-report"), pass the tag labels in the tags argument — ListTags shows which tags exist. For finding specific items by name or content, use the search tool instead. ## Parameters | Parameter | Type | Required | Description | | - | - | - | - | | `includeTypes` | (`"calendar_event"` \| `"document"` \| `"agent_session"` \| `"project"` \| `"email"` \| `"channel"` \| `"channel_thread"` \| `"call"` \| `"foreign_entity"`)\[] | No | Filter returned items to specific item types. If not provided, returns all types. Example: \["document", "email"] returns only documents and emails. Macro tasks are returned as document items, so use includeTypes=\["document"] with df subtype task for task requests. This is folded into the AST and applied as part of cursor-level filtering. | | `favoritesOnly` | boolean | No | Only return items the user has favorited (starred). Use for requests like "my favorites" or "what have I starred". Combine with includeTypes and the other filters as usual. Favorite or unfavorite an item with SetFavorite. | | `sortBy` | `"recently_viewed"` \| `"recently_updated"` \| `"recently_created"` | No | Sort order for the list entities AI tool. | | `df` | any | No | Full soup AST document filter (df). Use the same shape as /items/soup/ast, e.g. \{"l":\{"id":"..."}}. For Macro tasks, use \{"l":\{"dst":"task"}}; for skills, \{"l":\{"dst":"skill"}}. For "completed yesterday", AND the task subtype with updatedAt bounds, e.g. \{"&":\[\{"l":\{"dst":"task"}},\{"&":\[\{"l":\{"ua":\{"gte":"\"}}},\{"l":\{"ua":\{"lt":"\"}}}]}]} using ISO timestamps. | | `pf` | any | No | Full soup AST project filter (pf). | | `asf` | any | No | Agent-session filter (asf): use \{"l":\{"id":"\"}} for a session, or \{"l":\{"o":"macro\|[email@example.com](mailto:email@example.com)"}} for an owner. | | `emailPreset` | `"signal"` | No | High-level email filter preset. Use "signal" for signal emails. Signal emails and important emails are synonymous: if the user asks for important emails, use emailPreset="signal". This expands to the email AST \{"&":\[\{"l":\{"Importance":true}},\{"l":\{"Shared":"exclude"}}]} and defaults results to emails if includeTypes is omitted. | | `ef` | any | No | Advanced full soup AST email filter (ef). Prefer emailPreset="signal" for common requests. Signal emails and important emails are synonymous; they use \{"&":\[\{"l":\{"Importance":true}},\{"l":\{"Shared":"exclude"}}]}. Supports filtering by thread timestamp: \{"l":\{"ca":\{"gte":"\"}}} matches created\_at, \{"l":\{"ua":\{"gte":"\","lt":"\"}}} matches updated\_at, using ISO timestamps with gt/lt/gte/lte comparators. For "emails from the last 7 days", AND a ua (or ca) gte bound set to 7 days before now, e.g. \{"l":\{"ua":\{"gte":"\<7-days-ago-ISO>"}}}. | | `chanf` | any | No | Full soup AST channel filter (chanf). | | `cthf` | any | No | Full soup AST channel thread filter (cthf). | | `callf` | any | No | Full soup AST call filter (callf). | | `fef` | any | No | Full soup AST foreign entity filter (fef). | | `propf` | any | No | Full soup AST property filter (propf). Use this for Macro task Status, Assignees, Priority, and other entity properties. For task Status Completed: \{"l":\{"pd":"00000001-0000-0000-0000-000000000002","et":"TASK","v":\{"so":"00000001-0000-0000-0002-000000000004"}}}. For tasks assigned to the current user: \{"l":\{"pd":"00000001-0000-0000-0000-000000000001","et":"TASK","v":\{"er":"macro\|[user@example.com](mailto:user@example.com)"}}}. Combine both with &: \{"&":\[statusCompleted, assignedToMe]}. Prefer this over Linear tools for unqualified task requests. | | `emailView` | string | No | Which mailbox view to hydrate previews from for email results. Valid values: inbox (default), sent, drafts, starred, all, important, other, or user:\