Secure Microsoft 365 access for AI agents, without a Copilot license

Mail, calendar, contacts, OneNote, files, Teams chats and channels, and meeting data via Microsoft Graph — no Copilot license required

Microsoft 365 Graph connects your agents to mail, calendar, contacts, OneNote, and OneDrive files, plus Teams chats, channels, and meeting recordings, transcripts, and attendance data, by calling Microsoft Graph directly with each user's own signed-in token. Every call runs through your policies and is logged for audit. It needs only a standard Microsoft 365 subscription, no Microsoft 365 Copilot license required.

Prerequisites

  • A Microsoft Entra admin able to register an application in your tenant (any user can register an app by default unless your tenant restricts this).

Setup

Adding this resource takes you straight to the Entra app form, there is no credential-mode picker.

  1. Navigate to Resources and click Add Resource
  2. Select Microsoft 365 Graph from the catalog
  3. The Redirect URI, Client ID, Client Secret, and Token Endpoint Authentication fields appear immediately. Copy the redirect URI, then follow Bring your own app below
  4. Return to this page, paste the resulting Client ID and Client Secret, and click Add

The resource is added with all tools and scopes pre-configured, and an Admin setup required dialog appears with a Setup guide button linking back to this page. Each user connects their own Microsoft 365 account via OAuth when they first use a Microsoft 365 tool. Navigate to Connections to manage linked accounts.

Upgrading an existing installation

This connector's catalog entry added 13 new delegated scopes for Teams chats, channels, and teams. If you installed this resource before Teams support shipped, add the new scopes listed under Required scopes to your existing Entra app registration, then re-grant admin consent. Existing user connections also need to reconnect their accounts: the new Teams tools won't appear on a connection until it's re-authenticated.

Bring your own app

Every organization registers its own Entra application for this connector. The flow has three phases: collect the redirect URI from the Add Resource page above, register and configure the app in Microsoft Entra, and then return to that page with the credentials.

Get the redirect URI. In the Agent Authority console, go to Resources > Add Resource > Microsoft 365 Graph and copy the redirect URI shown on the page. Keep the page open, you will return to it at the end of this flow to paste the Client ID and Client Secret.

Register and configure the app in Entra. Sign in to portal.azure.com and navigate to Microsoft Entra ID > App registrations > New registration.

1. Register the app. Configure:

  • Name — your preferred name (for example, <your-company> AI Gateway - Microsoft 365 Graph)
  • Supported account typesMultiple Entra ID tenants, with Allow all tenants as the sub-option (the default). Multi-tenant is required because the SecureAuth gateway's OAuth flow uses Microsoft's /common endpoint, which does not accept single-tenant apps.
  • Redirect URI — choose Web platform and paste the redirect URI you copied from the Agent Authority console

Click Register.

2. Configure API permissions. On the new app's API permissions page, click Add a permission > Microsoft Graph > Delegated permissions, and add the scopes listed under Required scopes below. The three OIDC scopes (offline_access, openid, profile) live under the OpenId permissions section near the bottom of the picker, easy to miss because they are not in the main alphabetical list.

3. Grant admin consent (required). After adding permissions, click Grant admin consent for <your tenant> at the top of the API permissions list. Several of the Teams scopes below are not user-consentable, so this step is required: without it, users will fail to connect with an AADSTS65001 consent error.

4. Create a client secret. On Certificates & secrets, click New client secret, set an expiry, and copy the secret value immediately, Microsoft only displays it once. This is your Client Secret.

5. Copy the Application (client) ID from the app's Overview page.

Return with your credentials. Go back to the Add Resource page in the Agent Authority console (still open from the first step). Paste the Client ID and Client Secret, leave Token Endpoint Authentication on Auto-detect, then click Add. The resource is now configured for your tenant, and users can begin connecting their accounts through Connections.

Available tools

All 123 tools ship with the catalog entry, so they appear in tool lists and policy pickers as soon as the resource is installed. Each is a direct pass-through to a Microsoft Graph operation, so the agent composes them the same way it would call Graph.

Mail — search & read

ToolDescription
list_messagesList messages in the mailbox, newest first; select/top/filter/search supported
get_messagesGet a single message by ID
list_mail_foldersList mail folders (Inbox, Drafts, Sent Items, and so on)
list_mail_child_foldersList child folders of a mail folder
list_mail_folder_messagesList messages within a specific mail folder

Mail — drafts & sending

ToolDescription
create_draftCreate a draft message (send later with send_draft)
send_draftSend an existing draft by ID
send_mailSend a message directly
reply_messageReply to the sender; saved to Sent Items
reply_all_messageReply to all recipients; saved to Sent Items
forward_messageForward a message to new recipients

Mail — manage & organize

ToolDescription
update_messageUpdate a message by ID (mark read/unread, flag)
delete_messageDelete a message by ID
move_mail_messageMove a message to another folder
create_mail_folderCreate a mail folder
create_mail_child_folderCreate a child folder inside a mail folder
update_mail_folderRename a mail folder
delete_mail_folderDelete a mail folder

Mail — inbox rules

ToolDescription
list_mail_rulesList inbox message rules
create_mail_ruleCreate an inbox rule (conditions and actions)
update_mail_ruleUpdate an inbox rule by ID
delete_mail_ruleDelete an inbox rule by ID

Mail — attachments

ToolDescription
list_attachmentsList attachment metadata for a message
get_attachmentGet a single attachment (includes base64 content for file attachments)
add_attachmentAdd an attachment to a message or draft (inline, under 3 MB)
delete_attachmentDelete an attachment from a message by ID

Calendar — events

ToolDescription
list_eventsList event objects in the mailbox
list_calendar_viewList events in a time range, with recurrences expanded
get_eventsGet a single event's properties
create_eventsCreate an event
update_eventUpdate an event by ID
delete_eventDelete an event by ID
cancel_eventCancel an organized event, notifying attendees

Calendar — invitations

ToolDescription
accept_eventAccept an event invitation
decline_eventDecline an event invitation
tentatively_accept_eventTentatively accept an event invitation
forward_eventForward an event to additional recipients

Calendar — calendars & scheduling

ToolDescription
list_calendarsList the user's calendars
create_calendarCreate a secondary calendar
update_calendarRename or recolor a calendar
delete_calendarDelete a calendar
get_scheduleGet free/busy for one or more people over a window
find_meeting_timesSuggest meeting times from attendee free/busy

Contacts

ToolDescription
list_contactsList personal contacts
get_contactGet a single contact by ID
create_contactCreate a contact
update_contactUpdate a contact by ID
delete_contactDelete a contact by ID
list_contact_foldersList contact folders
create_contact_folderCreate a contact folder
update_contact_folderRename a contact folder
delete_contact_folderDelete a contact folder
list_contact_folder_child_foldersList child folders of a contact folder
create_contact_child_folderCreate a child folder inside a contact folder
create_contact_in_folderCreate a contact inside a specific folder
list_folder_contactsList contacts within a specific folder

Teams meetings

ToolDescription
create_online_meetingCreate a Teams online meeting
get_online_meetingGet an online meeting by ID
update_online_meetingUpdate an online meeting by ID
delete_online_meetingDelete an online meeting by ID
list_online_meetingsFind online meetings; filter by join URL to resolve an ID
list_recordingsList recording metadata for an online meeting
list_transcriptsList transcripts available for an online meeting
get_transcript_contentGet a transcript's content (WebVTT)
list_attendance_reportsList attendance reports for a meeting (one per session)
list_attendance_recordsList per-attendee attendance records for a report

Teams — chats

ToolDescription
list_chatsList the chats the signed-in user is part of
create_chatCreate a new one-on-one or group chat
get_chatGet a single chat by ID
list_chat_membersList a chat's members
list_chat_messagesList messages in a chat
get_chat_messageGet a single message or reply from a chat
send_chat_messageSend a message in a chat
reply_to_chat_messageReply to a message in a chat
list_chat_message_repliesList replies to a chat message
list_chat_message_hosted_contentsList hosted content (for example, inline images) on a chat message
set_chat_message_reactionAdd a reaction to a chat message
unset_chat_message_reactionRemove a reaction from a chat message
list_pinned_chat_messagesList messages pinned in a chat
pin_chat_messagePin a message in a chat
unpin_chat_messageUnpin a message from a chat

Teams — teams & channels

ToolDescription
list_joined_teamsList the teams the signed-in user has joined
list_my_associated_teamsList teams the user is associated with, including shared-channel host teams
get_teamGet a team by ID
list_team_membersList a team's members
list_team_channelsList a team's channels
get_team_channelGet a single channel by ID
create_team_channelCreate a channel in a team
update_team_channelUpdate a channel's properties
list_channel_messagesList messages in a channel
get_channel_messageGet a single message from a channel
send_channel_messageSend a message in a channel
reply_to_channel_messageReply to a message in a channel
list_channel_message_repliesList replies to a channel message
list_channel_message_hosted_contentsList hosted content on a channel message
set_channel_message_reactionAdd a reaction to a channel message
unset_channel_message_reactionRemove a reaction from a channel message
list_channel_tabsList the tabs configured in a channel
get_channel_files_folderGet the drive folder backing a channel's Files tab
list_my_installed_teams_appsList Teams apps installed in the signed-in user's personal scope

OneNote

ToolDescription
list_onenote_notebooksList the user's OneNote notebooks
create_onenote_notebookCreate a notebook
get_onenote_notebook_from_web_urlResolve a notebook from its web URL
list_onenote_notebook_sectionsList the sections in a notebook
create_onenote_sectionCreate a section in a notebook
list_all_onenote_sectionsList all sections across notebooks
list_onenote_section_groupsList section groups
list_onenote_section_pagesList pages in a section
list_onenote_pagesList all pages
get_onenote_page_contentGet a page's HTML content
delete_onenote_pageDelete a page by ID

Files & search (OneDrive + SharePoint)

Read-only file access and search across the user's OneDrive and any SharePoint document libraries they can reach. To search a specific library, resolve its drive-id with list_drives first.

ToolDescription
list_drivesList the OneDrive and SharePoint drives the user can access
get_drive_root_itemGet a drive's root item — the starting point for browsing a library
search_driveSearch a drive (OneDrive or a SharePoint document library) for files by query
search_folderSearch within a specific folder for files by query
list_recent_filesList the files the user most recently used across OneDrive and SharePoint
list_shared_with_meList files and folders shared with the user, including SharePoint items
ToolDescription
list_relevant_peopleList the people most relevant to the signed-in user
get_my_presenceGet the signed-in user's Teams presence
search_queryRun a Microsoft Search query across content types — use entityTypes: ["driveItem"] to find SharePoint & OneDrive documents by keyword

Profile & settings

ToolDescription
user_get_userGet the signed-in user's profile
get_mailbox_settingsGet time zone, working hours, language, and auto-reply configuration
update_mailbox_settingsUpdate mailbox settings (time zone, working hours, auto-reply)

Required scopes

Each tool requests the least-privilege scope Microsoft's own permissions data maps to its operation, then the catalog requests the collapsed union across all 123 tools:

  • openid, profile — sign-in identity
  • offline_access — maintain access when the user is offline
  • User.Read — read the signed-in user's profile
  • Mail.ReadWrite — list, search, read, draft, update, move, and delete mail, folders, and attachments
  • Mail.Send — send mail directly, reply, reply all, and forward
  • Calendars.ReadWrite — read, create, update, delete, cancel, and respond to calendar events and calendars
  • Calendars.Read.Shared — suggest meeting times and read free/busy from attendees' shared calendars
  • Contacts.ReadWrite — read, create, update, and delete contacts and contact folders
  • MailboxSettings.ReadWrite — read and update mailbox settings, and manage inbox rules
  • Notes.ReadWrite — read and create OneNote notebooks, sections, and pages
  • Files.Read.All — list the OneDrive drives the user can access
  • OnlineMeetings.ReadWrite — create, read, update, and delete the user's online meetings
  • OnlineMeetingTranscript.Read.All — list and read Teams meeting transcripts
  • OnlineMeetingRecording.Read.All — list Teams meeting recordings
  • OnlineMeetingArtifact.Read.All — read meeting attendance reports and records
  • People.Read — read the user's relevant people list
  • Presence.Read — read the user's presence
  • Chat.Create — create new chats
  • Chat.ReadWrite — read and write chat messages
  • ChatMember.Read — list chat members
  • ChatMessage.Send — send and react to chat messages
  • ChannelMessage.Send — send and react to channel messages
  • Team.ReadBasic.All — list and read teams
  • TeamMember.Read.All — list team members
  • Channel.ReadBasic.All — list and read channels
  • Channel.Create — create channels
  • ChannelSettings.ReadWrite.All — update channel properties
  • ChannelMessage.Read.All — read channel messages
  • TeamsTab.Read.All — list a channel's tabs
  • TeamsAppInstallation.ReadForUser — list the user's installed Teams apps

Known limitations

A few Graph operations can't be driven by a pure JSON pass-through tool, so they aren't exposed:

  • OneNote page creation is not available. You can create notebooks and sections and list, read, and delete pages, but creating a page requires a multipart HTML request body that a pass-through tool can't send.
  • Meeting recording content download is not available. list_recordings returns recording metadata; downloading the recording video is a binary stream, not a pass-through call. Transcript content is available via get_transcript_content.
  • Large attachment upload is not available. Uploading files over 3 MB requires a chunked upload session. Attachments under 3 MB work via add_attachment.
  • Online-meeting AI insights are not available. Microsoft's Copilot-generated meeting summaries and action items are a beta-only API, not present in the pinned Graph spec this connector generates from.

Policy examples

Rules are evaluated top to bottom and the first match wins. Allow rules on their own restrict nothing, your org starts with a seeded Allow all rule, so any tools your allows don't cover still fall through to it. A restrictive recipe needs a catch-all deny scoped to this resource, ordered below the allows. New rules are inserted at the top of the list, so create them in reverse order or drag them into place. See Policies.

  • Read-only access. Allow list_*, get_*, and find_*, then deny * below them.
  • Block sending and replies. Deny send_*, reply_*, and forward_* above any allow rules.
  • Block destructive operations. Deny delete_*, cancel_*, move_*, and update_*.
  • Allow mail triage but block calendar changes. Allow *message*, get_*, and list_*, then deny *event*, then deny * (list_events still reads if you allow it explicitly above the *event* deny).
  • Allow reading Teams meeting artifacts only. Allow list_transcripts, get_transcript_content, list_recordings, and list_attendance_*, then deny *.
  • Allow reading Teams chats and channels, block sending. Allow list_chat*, get_chat*, list_channel*, get_channel*, list_team*, get_team*, list_joined_teams, list_my_*, list_pinned_chat_messages, then deny *.
  • Allow full access for a specific agent. Scope an allow rule for * to that agent on this MCP server.

Tool patterns are case-sensitive and match exactly unless they contain *. This connector's tools are snake_case, for example list_messages.

Next steps

  • Create a policy, start from the read-only pattern in Policy examples above.
  • Credential modes, compare bringing your own app against other resources' options before you install.

On this page