ClawLink

How to connect Outlook to Hermes Agent

Connect Outlook to Hermes with ClawLink in one click — 270 tools your AI agent can call from chat via hosted OAuth. No API keys, no manual setup.

Get started for free
Hermes Agent
Hermes Agent
ClawLink
ClawLink
Outlook
Outlook
OutlookOAUTH2MCP

Read mail, manage calendar, and browse contacts. Once connected, Hermes Agent can read and act on Outlook from chat — pairing, token refresh, and tool wiring handled for you.

270 tools

Most guides for giving Hermes Agent Outlook access start with registering your own OAuth app or pasting API keys into env files, then leave the token refresh and tool wiring to you. ClawLink gives Hermes a more practical Outlook setup: pair once in the browser and your always-on Hermes agent can act on Outlook for you, reading and doing real work on your behalf with no auth, token refresh, or tool wiring to build yourself.

Copy this prompt into Hermes to install the plugin and pair your account.

Prompt for Hermes
Set up ClawLink for Hermes and tell me when it's ready.

1. Install the plugin:
hermes plugins install ClawLink-HQ/hermes-plugin --enable

2. Start pairing. It prints an approval link, so show me the link and stop, don't wait:
hermes clawlink begin

3. I'll approve it in my browser, then reply "approved".

4. When I say approved, finish setup:
hermes clawlink finish

5. Then run `hermes clawlink test` and tell me whether ClawLink is ready.

Setup

It takes three steps to connect Hermes to Outlook.

  1. 1

    Install and pair

    Install the ClawLink plugin, then pair Hermes with a one-time browser approval:

    hermes plugins install ClawLink-HQ/hermes-plugin --enable
  2. 2

    Connect Outlook

    One-click OAuth in the dashboard.

  3. 3

    Use it from chat

    Ask Hermes Agent: "What can you do with Outlook?"

Install by command

The prompt above walks Hermes through this. By hand, it is four commands and a browser approval:

hermes plugins install ClawLink-HQ/hermes-plugin --enable
hermes clawlink begin    # prints an approval link — open it and approve
hermes clawlink finish   # after approving in the browser
hermes clawlink test

Then connect Outlook in the ClawLink dashboard — a one-click OAuth approval, no API keys.

Verify the connection by asking Hermes:

Use outlook_search_messages (or outlook_query_emails if my account is personal) to find the most recent email from Stripe in my inbox. Show me the subject and date, then use outlook_get_message for its id, and finally outlook_download_outlook_attachment for the PDF. Save it somewhere I can reach and tell me the file name.

Using a different agent?

The Hermes plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:

npx -y @useclawlink/cli login

login opens the same browser approval and stores a credential locally. Once Outlook is connected in the dashboard, that agent calls the same 270 Outlook tools over MCP. Full setup for MCP clients and shell agents: connect apps to any AI agent.

Outlook MCP for Hermes

Looking for a Outlook MCP server for Hermes Agent? ClawLink connects Outlook to Hermes Agent and exposes 270 Outlook tools your agent can call over MCP, with hosted auth and nothing to run or maintain yourself. Using OpenClaw instead? The OpenClaw Outlook integration works the same way.

The search results for this query teach one of two setups: an app password and IMAP/SMTP hosts in ~/.hermes/.env, or "register an application in Microsoft Entra ID, grant Mail.Send". Both are real routes and both are what ClawLink removes. This connection uses Microsoft's OAuth against an app that is already registered, so you approve the mailbox once in the browser and the 270 tools below work from chat: no Entra registration, no Graph scopes to pick, no admin consent to request for a personal account. The one thing to read before you connect is the account-type line: the toolset behaves differently on personal and work or school mailboxes, and the page below says which tools are affected.

Two ways to give Hermes Agent access to Outlook

Most guides for connecting Outlook to Hermes Agent describe the built-in email gateway, which does a different job than this page sets up. Picking the wrong one is how an agent ends up auto-replying to a personal inbox.

Email gateway (IMAP/SMTP)

Hermes Agent's native email channel signs into a mailbox with an app password and treats every incoming email as a message addressed to the agent. It replies in-thread.

  • Built for a dedicated agent inbox: email your agent a task, get the answer as a reply.
  • The app password grants full mailbox access, and the agent responds to incoming mail on its own. The official docs say not to point it at a personal account.
  • Terminal setup: enable 2FA, generate an app password, put IMAP/SMTP hosts in the config.

ClawLink exposes Outlook to Hermes Agent as callable tools over MCP: search, read, draft, send, labels. Nothing runs on its own; the agent touches mail only when you ask.

  • Safe on a personal Outlook account: access is granted on the provider's OAuth consent screen, revocable there at any time, no password shared.
  • "Find the invoice from Stripe" or "draft a reply to Sarah": the agent acts on your inbox as you, on request.
  • Browser setup: click Connect, approve, done.

The two combine well: a dedicated gateway inbox so you can reach your agent by email, plus ClawLink tools so it can work on your real mail. If you only want one and the goal is an agent that reads and writes email for you, tools are the right pick.

What this Outlook integration does not do

The boundaries, so a prompt does not expect a capability outside the 270 tools.

  • No inbox automation that runs without you. Every tool runs when the agent calls it; nothing reacts to incoming mail on its own. The IMAP/SMTP email gateway described earlier in this page is the separate feature that does that, and it belongs on a dedicated mailbox, not your personal one.
  • No tenant administration. Creating Azure apps, granting admin consent, and managing other users' mailboxes are not tool surfaces; the connection is a delegated user grant.
  • No Teams chat. Outlook's toolkit covers mail, calendar, and contacts. The Chat.ReadWrite scope on the connection has matching tools elsewhere in the catalog, not here.

The "best Outlook MCP server" roundup shape is a /hub comparison (Nylas, StackOne, and local COM servers are the names those lists lead with) and is deliberately not answered on this page.

What the Hermes Agent Outlook integration can do

270 Outlook tools are ready for Hermes Agent once the account is connected. The 30 below are the ones people reach for most; your agent can call all 270.

30 of 270 Outlook tools for Hermes

ToolWhat it does
Calendar create event outlook_calendar_create_eventCreate a new Outlook calendar event
Create contact outlook_create_contactCreate a new Outlook contact
Create draft outlook_create_draftCreate a new draft Outlook email
Get message outlook_get_messageGet a specific Outlook message
Get profile outlook_get_profileGet the connected Outlook user profile
List calendars outlook_list_calendarsList Outlook calendars
List mail folders outlook_list_mail_foldersList Outlook mail folders
List messages outlook_list_messagesList Outlook messages
List user contacts outlook_list_user_contactsList Outlook contacts
Query emails outlook_query_emailsQuery Outlook emails with filters
Reply email outlook_reply_emailReply directly to an Outlook message
Search messages outlook_search_messagesSearch Outlook messages
Send email outlook_send_emailSend a new Outlook email
Download outlook attachment outlook_download_outlook_attachmentDownloads a specific file attachment from an email message in a Microsoft Outlook mailbox; the
Find meeting times outlook_find_meeting_timesSuggests meeting times based on organizer and attendee availability, time constraints, and
Get calendar event outlook_get_calendar_eventRetrieve a specific event from a specified calendar
Get calendar event attachment outlook_get_calendar_event_attachmentRetrieve a specific attachment from an event within a calendar
Get calendar from event outlook_get_calendar_from_eventRetrieve the parent calendar that contains a specific event
Get calendar from group outlook_get_calendar_from_groupRetrieve a specific calendar from a calendar group in Microsoft Outlook
Get calendar group outlook_get_calendar_groupRetrieve the properties and relationships of a calendar group object
Get calendar group calendar event extension outlook_get_calendar_group_calendar_event_extensionRetrieve an open extension from a calendar event within a specific calendar group and calendar
Get calendar group schedule outlook_get_calendar_group_scheduleRetrieve free/busy schedule information for a specific user's calendar within a calendar group
Get calendar permission outlook_get_calendar_permissionRetrieve a specific calendar permission for a user's calendar
Get calendar permission from calendar outlook_get_calendar_permission_from_calendarRetrieve a specific calendar permission from a user's calendar
Get calendar schedule outlook_get_calendar_scheduleGet free/busy schedule information for users, distribution lists, or resources
Get calendar view outlook_get_calendar_viewGet events ACTIVE during a time window (includes multi-day events)
Get child folder message outlook_get_child_folder_messageRetrieve a specific email message from a child mail folder
Get child folder message content outlook_get_child_folder_message_contentGet the MIME content of a message from a child mail folder
Get child mail folder outlook_get_child_mail_folderRetrieve a specific child mail folder from a parent mail folder
Get contact extension outlook_get_contact_extensionRetrieve an open extension from a contact in Microsoft Graph

Try it: find the Outlook tool you need

Browse the 30 Outlook tools

Click any tool to see exactly what Hermes can do and copy a ready-to-use prompt.

Example prompts

Use outlook_search_messages (or outlook_query_emails if my account is personal) to find the most recent email from Stripe in my inbox. Show me the subject and date, then use outlook_get_message for its id, and finally outlook_download_outlook_attachment for the PDF. Save it somewhere I can reach and tell me the file name.

Read the latest message from Sarah with outlook_get_message. Draft a reply that answers her questions and asks one clarifying question, then show me the draft. Do not call outlook_reply_email or outlook_send_email until I approve the text.

Use outlook_find_meeting_times for a 45 minute meeting next week with [email1] and [email2], excluding my calendar's busy blocks, then use outlook_calendar_create_event to book the earliest slot that works. Set the subject, add my agenda as the body, and invite both people. Show me the event link.

List my unread messages with outlook_list_messages. Group them by sender and topic, and tell me which ones need an answer, which are newsletters, and which look like receipts. Draft one-line replies for the ones that need answers and show them to me before you send anything. For newsletters, do not move or delete anything yet.

How the Outlook tools behave

Argument facts from the pinned-version schemas that decide what a prompt should ask for.

  • outlook_search_messages is enterprise-only. It takes KQL syntax (from:, to:, received:, hasattachment:) and rejects personal mailboxes with a literal error. outlook_query_emails is the personal-account fallback: OData filters inside a single folder, up to 100 messages per request.
  • outlook_list_messages defaults to the inbox, top 10, minimal detail. "Summarize my emails" without a folder or count argument returns ten messages with no bodies. Ask for a folder and a larger top, or use outlook_query_emails for filters.
  • outlook_send_email needs subject, body, and recipients. to_email accepts comma-separated addresses, and attachments must be a non-empty file with a name and mimetype. The tool has no default subject or recipient for the agent to lean on.
  • Batch move and update calls cap at 20 items. The validation error names the count, and the fix is splitting the batch, not changing tools.
  • Delete and move carry a confirmation step. Production logs show "outlook_delete_message requires explicit confirmation before execution" and the move equivalent, so an agent will ask before either runs. Sends and drafts are not gated the same way, which is worth an approval step in the prompt.

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want Outlook working from chat.

ManualClawLink
Connection flowRegister a Outlook app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift.Users connect Outlook through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code.
Ongoing maintenanceYou own refresh logic, permission debugging, environment config, and every provider-specific edge case for Outlook.ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure.
Agent usabilityYou still need to expose the right Outlook actions to the runtime in a format your agent can reliably use.270 tools for Outlook are already exposed through ClawLink, so the agent can read and act from chat immediately.

Composio also exposes Outlook to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for Hermes Agent users instead. You install the plugin once, connect Outlook in the browser, and the 270 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full Composio alternatives comparison.

Troubleshooting

Hermes paired but still can't use Outlook

Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.

Connection succeeds but no tools appear

Reconnect Outlook from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.

"Tool schema not loaded yet" error when calling Outlook tools

Outlook tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every Outlook call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.

Outlook returns 403 or "permission denied" on one action while others work

Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.

Search does not work with @hotmail.com or @outlook.com personal accounts. Please use a work or school (Microsoft 365/Enterprise) account.

This is the most common error on this integration in production, and it is architecture, not a bug: Microsoft's Graph Search API serves enterprise mailboxes only, so outlook_search_messages rejects personal accounts with this exact message. Reconnecting will not change it, because the mailbox type does not change. On a personal account, use outlook_list_messages for a folder or outlook_query_emails for server-side filters; both run on personal mailboxes. On a work or school account, search works as documented, with KQL syntax such as from:user@example.com and received: ranges.

Ask the agent to diagnose it:

Run outlook_get_profile and tell me whether the account is a personal or work or school mailbox. Then recommend the correct tool for what I asked and do not retry search if the account is personal.
Too many requests. Try again shortly.

This is Microsoft Graph throttling, returned as a 429, and the literal message is all it gives you. The response may also carry a Retry-After interval. It happens when the agent fires a burst of calls in one prompt, and the fix is to wait and then spread the work, not to reconnect. Batch operations help here: a move or update across several messages is one call when it fits under the 20-item batch limit, where separate per-message calls are many. If throttling repeats on every attempt, the shape of the prompt is the problem, and a narrower request with filters will succeed where a broad sweep does not.

Ask the agent to diagnose it:

Report the exact status and any Retry-After value from the failed call. If the task involved many per-message calls, tell me which batch tools could replace them.
Outlook returns "Id is malformed." or "The specified object was not found in the store."

Two production error codes cover this family. {"error":{"code":"TargetIdShouldNotBeMeOrWhitespace","message":"Id is malformed."}} appears when a move or copy target is empty or whitespace, which happens when the agent invents a destination folder instead of listing one. {"error":{"code":"ErrorItemNotFound","message":"The specified object was not found in the store."}} appears when the message id is a placeholder, or the message was moved or deleted after the id was captured. Both are solved by listing first: outlook_list_mail_folders returns real folder ids for moves, and outlook_list_messages returns real message ids for reads. Microsoft's ErrorInvalidIdMalformed variant of "Id is malformed." is the same shape from a different endpoint.

Ask the agent to diagnose it:

List the mail folders or messages available to the connection, then retry the failing call with the real id from that response. Show me the id you are about to use before calling.
List should have at most 20 items after validation, not 25 on parameter `updates`

Graph batch operations on this integration cap at 20 items, and the validation error names the count that broke it. The agent is asking to update or move more messages in one call than the API accepts. The fix is to split the batch into chunks of 20 or fewer, which means the tool runs twice, or to narrow the selection so a smaller batch does the job. This is an argument-shape error, not a connection fault.

Ask the agent to diagnose it:

Split the batch into groups of 20 or fewer and run them in sequence. Report how many messages each batch covered.
Outlook returns "Access is denied. Check credentials and try again." or AADSTS65001

The production string is {"error":{"code":"ErrorAccessDenied","message":"Access is denied. Check credentials and try again."}}, and AADSTS65001 is the code the engines teach for the same family. Three causes. Account mismatch: the tool is pointed at a mailbox the connected identity does not own; run outlook_get_profile and compare. Tenant policy: a work or school tenant that restricts third-party app consent blocks the grant, and the consent screen or a 65001 error reports that an administrator must approve it, which is an action for your tenant admin, not a reconnect. Stale grant: consent was revoked or the connection expired, and reconnecting from the dashboard with the owning account restores it. One thing the guides say that does not apply here: switching the app from delegated to application permissions. That advice is for applications you register and run yourself; this connection is delegated by design, running as you, which is the whole point of the hosted flow.

Ask the agent to diagnose it:

Run outlook_get_profile and tell me the mailbox the connection holds. If it is not the mailbox I meant, reconnect and re-run. Otherwise report the exact error code from the failing call.
OAuth finished in the browser but the account is still missing

Try reconnecting Outlook and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

FAQ

Is there a Hermes Agent Outlook integration?

Yes. ClawLink is the fastest way to connect Hermes to Outlook: link your Outlook account once in the browser and Hermes Agent can call the Outlook API through 270 ready-made tools — no custom code or token handling.

How do I connect Outlook to Hermes with ClawLink?

Install the plugin with hermes plugins install ClawLink-HQ/hermes-plugin --enable, then pair once: run hermes clawlink begin, approve the link in your browser, and run hermes clawlink finish. Connect Outlook in the dashboard and Hermes can use it from the next message — no config files or API keys to manage.

How long does it take to connect Outlook to Hermes Agent?

About two minutes. Sign in, click Connect next to Outlook in the dashboard, authenticate, and Hermes Agent can use it from the next chat message.

Why use ClawLink instead of wiring Outlook up myself?

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want Outlook working from chat.

Should I connect Outlook with an app password (IMAP) or through ClawLink?

An app password plugs a mailbox into Hermes Agent's email gateway, a chat channel where the agent replies to incoming mail, so it belongs on a dedicated inbox. ClawLink connects Outlook as tools through OAuth: the agent searches, reads, and drafts in your own account only when you ask. Use ClawLink if you want the agent working on your mail; use the gateway if you want to message your agent by email.

Do I need to register an Azure app or handle admin consent to connect Outlook?

Not for this connection. The walkthrough the engines teach is real work: create an application in Microsoft Entra ID, configure redirect URIs, request Graph scopes like Mail.Send, and consent to them as an admin. ClawLink connects through an app that is already registered and requests a fixed scope set on the consent screen, which for a personal account you approve on the spot. The one case where approval is not instant is a work or school mailbox whose tenant requires administrator approval for third-party apps: the consent screen then reports that an admin must grant access, and the connection cannot complete until someone with that role approves it. That is Microsoft's tenant policy, not a setup step you can do around.

Does the agent's search work on a personal @outlook.com account?

No, and the error is explicit about it: "Search does not work with @hotmail.com or @outlook.com personal accounts. Please use a work or school (Microsoft 365/Enterprise) account." Microsoft's Search API only serves enterprise mailboxes, so outlook_search_messages is a work-or-school tool. Personal accounts still get everything else: outlook_list_messages, outlook_query_emails, read, draft, reply, and send all work on personal mailboxes. If you are on a personal account and want search-like behavior, outlook_query_emails with server-side filters is the closest tool, and it searches one folder at a time.

Is it safe to connect my personal Outlook to an AI agent?

The risk list for this question names prompt injection and over-permissioning, and both deserve a direct answer. Prompt injection: an agent that reads mail can be steered by the content of that mail, so links and instructions inside emails should be treated as untrusted input, which is worth writing into the prompt. Over-permissioning: this connection requests Mail.Read, Mail.ReadWrite, Mail.Send, Calendars, Contacts, and MailboxSettings, all listed on the consent screen, and the destructive tools that delete and move messages carry a confirmation step before they run. The grant is revocable from Microsoft's account settings without involving us, and nothing about the connection stores your password. Those are the mechanics; whether a mail-reading agent is right for your inbox is a judgment call the page cannot make for you.

Why do I get permission errors if the connection is set up correctly?

The usual cause is account mismatch: the connection shows as healthy while the tool is pointed at a mailbox the connected identity does not own. A work or school connection cannot read a personal mailbox or a colleague's shared folder unless the shared grant exists, and the error comes back as an access-denied code rather than a clear account message. The second cause is tenant policy: some organizations restrict third-party app consent, which surfaces as an admin-approval requirement. The third is a stale grant: if consent was revoked or the connection expired, reads keep working from cache while writes fail. The fix in each case is to reconnect from the dashboard with the account that owns the mailbox and complete the consent screen, and to have the agent run outlook_get_profile first to confirm which identity the connection holds.

What can the Hermes Agent Outlook integration actually do?

The 270 tools cover three surfaces. Mail: search, query, read, draft, reply, forward, send, move, copy, and delete, with delete and move gated by a confirmation step. Calendar: create and update events, find meeting times, free and busy schedules, and calendar permissions. Contacts: create, read, and update contacts and contact folders. The write tools are individually named in the tool list, and the ones that remove or relocate messages ask before they run.

Hermes paired but still can't use Outlook

Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.