Skip to content

Connectors · Email & messaging

Microsoft Teams MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Microsoft Teams and the rest of your systems. It gives your agent 266 Microsoft Teams actions (123 reads, 110 writes and 33 that wait for a confirmation) and holds the Microsoft Teams credential itself, so the agent never does. It paces Microsoft Teams's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "m365_graph_teams.teams.list",  intent: "check which Microsoft Teams account is connected"}# List teams · read · 1 upstream call
  • 266actionsin one signed file
  • 123readlook, never change
  • 110writecreate and update
  • 33wait for a yesdestructive, confirmed first

Set up

Connect Microsoft Teams in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Microsoft Teams.

    OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in. actionlake stores what you paste write-only, sealed under your tenant's key.

    • client_idEntra application (client) id
    • client_secretEntra client secret
    • tenant_idYour Microsoft Teams tenant id
    account { op: "connections.requirements", service: "m365_graph_teams" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "m365_graph_teams.teams.list" }# list teams · read · 1 upstream callcheck { action: "m365_graph_teams.messages.send", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Microsoft Teams at a glance

Sign-in
OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in.
You provide
client_idclient_secret
Setup fields
tenant_id
Limits we pace to
10,000 calls per 10 minutes, per connection
API covered
Microsoft Teams API v1.0graph.microsoft.com/v1.0
Built from
Microsoft Teams's documentation, read 17 September 2026OpenAPI spec (GitHub)learn.microsoft.com
Service file
Version 2.0.0, signed (Ed25519)
Cached reads
123 of 123 reads, for up to an hour; a write clears what it affects
Ready-made plans
9 in the store
Shared entities
4, so ask can line Microsoft Teams up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Microsoft Teams.

266 actions in 1 area. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 123readlook, never change
  • 110writecreate and update
  • 33destructivewait for a confirmation
  1. Chat

    266

    123 read · 110 write · 33 destructive

    List channel messages · List channels · List teams · List team members

Top actions

The Microsoft Teams API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 125 of Microsoft Teams's 145 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
m365_graph_teams.messages.listList channel messagesRetrieve the list of messages (without the replies) in a channel of a team.readcomm.message.list42 connectors
m365_graph_teams.channels.listList channelsRetrieve the list of channels in this team.readcomm.channel.list27 connectors
m365_graph_teams.teams.listList teamsList all teams in an organization.readidentity.group.list262 connectors
m365_graph_teams.team_members.listList team membersGet the conversationMembers of a team.readidentity.group_member.list103 connectors
m365_graph_teams.messages.sendSend a Teams channel messageCreate new chatMessage in the specified channel.writecomm.message.send25 connectors
m365_graph_teams.channels.createCreate a channelCreate new channel in a team, as specified in the request body.writecomm.channel.create16 connectors
m365_graph_teams.teams.createCreate a teamCreate a new team.writeidentity.group.create205 connectors
m365_graph_teams.messages.soft_deleteSoft delete a channel messageDelete a single message or message reply in a channel or a chat.destructivecomm.message.delete27 connectors
m365_graph_teams.call_records.listList call recordsGet a list of callRecord objects and their properties.readcomm.call.list44 connectors
m365_graph_teams.call_records.getGet a call recordRetrieve the properties and relationships of callrecord object.readcomm.call.get40 connectors
m365_graph_teams.channel_members.listList channel membersGet a list of members in a channel, including direct members of standard, private, and shared channels.readcomm.channel_member.list12 connectors
m365_graph_teams.online_meetings.send_virtual_appointment_smsSend virtual appointment sms an online meetingSend a virtual appointment SMS notification.writecomm.sms.send26 connectors

Try it

Prompts to paste into Claude.

Each one names the Microsoft Teams actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    List the Microsoft Teams groups and how many members each one has.

    callsm365_graph_teams.teams.list

  2. Planwrite

    Add a new member to a team and welcome them in Microsoft Teams.

    callsm365_graph_teams.teams.getm365_graph_teams.team_members.listm365_graph_teams.team_members.createm365_graph_teams.channels.get_primarym365_graph_teams.messages.send+1 more

  3. Planread

    Audit installed apps and tabs across a team in Microsoft Teams.

    callsm365_graph_teams.team_apps.listm365_graph_teams.team_permission_grants.listm365_graph_teams.channels.list_allm365_graph_teams.channel_apps.listm365_graph_teams.channel_tabs.list

  4. Writewrite

    Send a Teams channel message in Microsoft Teams. Show me exactly what you will send before you save it.

    callsm365_graph_teams.messages.send

The plan store

Ready-made plans for Microsoft Teams.

9 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

  1. Audit installed apps and tabs across a team

    Use it when An administrator wants to know which apps and tabs are present across a team's channels.

    Effect
    read
    Steps
    4 · loops
    Needs
    team id
    Install
    m365_graph_teams-audit-channel-apps-and-tabs
  2. Pull call records and sessions for a date range

    Use it when Someone reports poor call quality and the underlying call records need pulling.

    Effect
    read
    Steps
    5 · loops
    Needs
    call record id, from date time and to date time
    Install
    m365_graph_teams-call-quality-review
  3. Collect attendance and transcripts for a meeting

    Use it when Someone wants to know who actually attended a Teams meeting and what artefacts it produced.

    Effect
    read
    Steps
    5 · loops
    Needs
    meeting id and user id
    Install
    m365_graph_teams-meeting-attendance-report
  4. Review pending time off requests for a team

    Use it when A manager wants pending Shifts time off requests surfaced and one of them actioned.

    A person decidesDecline time off request time off request id with message: message

    Effect
    write
    Steps
    5
    Needs
    message, team id and time off request id
    Install
    m365_graph_teams-approve-time-off-requests
  5. Archive a stale team after approval

    Use it when A team looks abandoned and someone wants it frozen rather than deleted.

    A person decidesArchive team display name (number of value members, number of value channels). All posting stops.

    Effect
    write
    Steps
    5
    Needs
    team id
    Install
    m365_graph_teams-archive-stale-team
  6. Post an announcement to every channel in a team

    Use it when An announcement must reach every channel of a team rather than just the general one.

    A person decidesPost this announcement to all number of value channels of display name: content

    Effect
    write
    Steps
    5 · loops
    Needs
    content, team id and topic
    Install
    m365_graph_teams-broadcast-to-team-channels
  7. Clone an existing team and wait for it to finish

    Use it when A new project needs a team set up as a copy of an existing one rather than from scratch.

    A person decidesClone display name into a new team called display name.

    Effect
    write
    Steps
    6
    Needs
    display name, parts to clone and team id
    Install
    m365_graph_teams-clone-team-from-template
  8. Add a new member to a team and welcome them

    Use it when Someone joins a project and needs to be put into its team with a visible welcome.

    Effect
    write
    Steps
    6
    Needs
    member user id, roles, team id and welcome
    Install
    m365_graph_teams-onboard-member-to-team
  9. Remove a leaver from a team and its shared chats

    Use it when A person has left and their Teams access must be revoked with a sign-off on record.

    A person decidesRemove display name from this team and revoke access to number of value chats. Not reversible.

    Effect
    destructive
    Steps
    6 · loops
    Needs
    membership id, team id and user id
    Install
    m365_graph_teams-offboard-member-everywhere
install a plan
account { op: "plans.install", slug: "m365_graph_teams-audit-channel-apps-and-tabs" }
# then ask for it by name; a schedule can run it on a timetable

Governance for Microsoft Teams

Destructive actions wait for a yes.

33 Microsoft Teams actions are destructive. The first 10:

  • Soft delete a channel messagem365_graph_teams.messages.soft_delete
  • Delete a channelm365_graph_teams.channels.delete
  • Delete a team by deleting its groupm365_graph_teams.teams.delete
  • Soft-delete a chat messagem365_graph_teams.chat_messages.soft_delete
  • Delete a team memberm365_graph_teams.team_members.delete
  • Remove an incoming shared channel from a teamm365_graph_teams.channels.remove_incoming
  • Delete a channel memberm365_graph_teams.channel_members.delete
  • Delete a tag memberm365_graph_teams.tag_members.delete
  • Remove team membersm365_graph_teams.team_members.remove
  • Delete a chatm365_graph_teams.chats.delete

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

dom365_graph_teams.channels.deleteconfirm_policy: human

Delete a channel?

intent: the user asked me to delete a channel

run suspended · waiting for a named person · key m365-graph-teams-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "m365-graph-teams-agent",  allowed_actions: ["m365_graph_teams.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "m365_graph_teams.messages.soft_delete", approver: "[email protected]" },    { match: "m365_graph_teams.channels.delete", approver: "[email protected]" },    { match: "m365_graph_teams.teams.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to Microsoft Teams only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Microsoft Teams costs on actionlake.

Every Microsoft Teams action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Microsoft Teams refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 266 Microsoft Teams actions
  • 266actions pageeach page of a long list is one call
  • 123reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Microsoft Teams action.

266 actions by area: the id your agent calls, what it does, and its effect.

Chat266
  • m365_graph_teams.activity_notifications.send_to_chatSend an activity feed notification in the scope of a chatwrite
  • m365_graph_teams.activity_notifications.send_to_recipientsSend an activity feed notification to many recipientswrite
  • m365_graph_teams.activity_notifications.send_to_teamSend an activity feed notification in the scope of a teamwrite
  • m365_graph_teams.activity_notifications.send_to_userSend an activity feed notification to a userwrite
  • m365_graph_teams.call_record_participants.listList participants of a call recordread
  • m365_graph_teams.call_record_segments.listList segments of a call record sessionread
  • m365_graph_teams.call_record_sessions.getGet a call record sessionread
  • m365_graph_teams.call_record_sessions.listList sessions of a call recordread
  • m365_graph_teams.call_records.getGet a call recordread
  • m365_graph_teams.call_records.get_direct_routing_callsGet direct routing call log recordsread
  • m365_graph_teams.call_records.get_organizerGet the organizer of a call recordread
  • m365_graph_teams.call_records.get_pstn_callsGet PSTN call log recordsread
  • m365_graph_teams.call_records.listList call recordsread
  • m365_graph_teams.channel_apps.addEnable an app in a channelwrite
  • m365_graph_teams.channel_apps.listList apps enabled in a channelread
  • m365_graph_teams.channel_apps.removeDisable an app in a channeldestructive
  • m365_graph_teams.channel_members.createCreate a channel memberwrite
  • m365_graph_teams.channel_members.deleteDelete a channel memberdestructive
  • m365_graph_teams.channel_members.getGet a channel memberread
  • m365_graph_teams.channel_members.listList channel membersread
  • m365_graph_teams.channel_members.list_allList all members of a channel, including shared-channel membersread
  • m365_graph_teams.channel_members.updateUpdate a channel memberwrite
  • m365_graph_teams.channel_shared_teams.deleteDelete a team a channel is shared withdestructive
  • m365_graph_teams.channel_shared_teams.getGet a team a channel is shared withread
  • m365_graph_teams.channel_shared_teams.listList teams a channel is shared withread
  • m365_graph_teams.channel_shared_teams.list_allowed_membersList members of a shared-with team who can access the channelread
  • m365_graph_teams.channel_tabs.createCreate a channel tabwrite
  • m365_graph_teams.channel_tabs.deleteDelete a channel tabdestructive
  • m365_graph_teams.channel_tabs.getGet a channel tabread
  • m365_graph_teams.channel_tabs.listList channel tabsread
  • m365_graph_teams.channel_tabs.updateUpdate a channel tabwrite
  • m365_graph_teams.channels.archiveArchive a channelwrite
  • m365_graph_teams.channels.complete_migrationComplete migration a channelwrite
  • m365_graph_teams.channels.createCreate a channelwrite
  • m365_graph_teams.channels.deleteDelete a channeldestructive
  • m365_graph_teams.channels.does_user_have_accessDoes user have access a channelread
  • m365_graph_teams.channels.getGet a channelread
  • m365_graph_teams.channels.get_files_folderGet the files folder of a channelread
  • m365_graph_teams.channels.get_primaryGet the General channel of a teamread
  • m365_graph_teams.channels.listList channelsread
  • m365_graph_teams.channels.list_allList all channels of a team, including shared-in channelsread
  • m365_graph_teams.channels.list_incomingList channels shared into a teamread
  • m365_graph_teams.channels.provision_emailProvision email a channelwrite
  • m365_graph_teams.channels.remove_emailRemove email a channelwrite
  • m365_graph_teams.channels.remove_incomingRemove an incoming shared channel from a teamdestructive
  • m365_graph_teams.channels.start_migrationStart migration a channelwrite
  • m365_graph_teams.channels.unarchiveUnarchive a channelwrite
  • m365_graph_teams.channels.updateUpdate a channelwrite
  • m365_graph_teams.chat_apps.createCreate an app installed in a chatwrite
  • m365_graph_teams.chat_apps.deleteDelete an app installed in a chatdestructive
  • m365_graph_teams.chat_apps.getGet an app installed in a chatread
  • m365_graph_teams.chat_apps.listList apps installed in a chatread
  • m365_graph_teams.chat_apps.upgradeUpgrade an app installed in a chatwrite
  • m365_graph_teams.chat_hosted_contents.getGet a chat message hosted contentread
  • m365_graph_teams.chat_hosted_contents.listList hosted contents of a chat messageread
  • m365_graph_teams.chat_members.createCreate a chat memberwrite
  • m365_graph_teams.chat_members.deleteDelete a chat memberdestructive
  • m365_graph_teams.chat_members.getGet a chat memberread
  • m365_graph_teams.chat_members.listList chat membersread
  • m365_graph_teams.chat_messages.createCreate a chat messagewrite
  • m365_graph_teams.chat_messages.getGet a chat messageread
  • m365_graph_teams.chat_messages.get_all_for_userGet all messages from all chats of a userread
  • m365_graph_teams.chat_messages.get_all_retained_for_userGet all retained messages from all chats of a userread
  • m365_graph_teams.chat_messages.listList chat messagesread
  • m365_graph_teams.chat_messages.reply_with_quoteReply with quote chat messageswrite
  • m365_graph_teams.chat_messages.set_reactionSet reaction a chat messagewrite
  • m365_graph_teams.chat_messages.soft_deleteSoft-delete a chat messagedestructive
  • m365_graph_teams.chat_messages.undo_soft_deleteRestore a soft-deleted chat messagewrite
  • m365_graph_teams.chat_messages.unset_reactionUnset reaction a chat messagewrite
  • m365_graph_teams.chat_messages.updateUpdate a chat messagewrite
  • m365_graph_teams.chat_permission_grants.listList resource-specific permission grants of a chatread
  • m365_graph_teams.chat_pinned_messages.createCreate a pinned chat messagewrite
  • m365_graph_teams.chat_pinned_messages.deleteDelete a pinned chat messagedestructive
  • m365_graph_teams.chat_pinned_messages.listList pinned chat messagesread
  • m365_graph_teams.chat_tabs.createCreate a chat tabwrite
  • m365_graph_teams.chat_tabs.deleteDelete a chat tabdestructive
  • m365_graph_teams.chat_tabs.getGet a chat tabread
  • m365_graph_teams.chat_tabs.listList chat tabsread
  • m365_graph_teams.chat_tabs.updateUpdate a chat tabwrite
  • m365_graph_teams.chats.complete_migrationComplete migration a chatwrite
  • m365_graph_teams.chats.createCreate a chatwrite
  • m365_graph_teams.chats.deleteDelete a chatdestructive
  • m365_graph_teams.chats.getGet a chatread
  • m365_graph_teams.chats.hide_for_userHide for user a chatwrite
  • m365_graph_teams.chats.listList chatsread
  • m365_graph_teams.chats.list_for_userList the chats of a userread
  • m365_graph_teams.chats.mark_chat_read_for_userMark chat read for user a chatwrite
  • m365_graph_teams.chats.mark_chat_unread_for_userMark chat unread for user a chatwrite
  • m365_graph_teams.chats.remove_all_access_for_userRemove all access for user a chatdestructive
  • m365_graph_teams.chats.start_migrationStart migration a chatwrite
  • m365_graph_teams.chats.unhide_for_userUnhide for user a chatwrite
  • m365_graph_teams.chats.updateUpdate a chatwrite
  • m365_graph_teams.day_notes.createCreate a schedule day notewrite
  • m365_graph_teams.day_notes.deleteDelete a schedule day notedestructive
  • m365_graph_teams.day_notes.getGet a schedule day noteread
  • m365_graph_teams.day_notes.listList schedule day notesread
  • m365_graph_teams.day_notes.updateReplace a schedule day notewrite
  • m365_graph_teams.deleted_chats.getGet a deleted chatread
  • m365_graph_teams.deleted_chats.undo_deleteUndo delete a deleted chatwrite
  • m365_graph_teams.deleted_teams.get_all_messagesGet all channel messages of a deleted teamread
  • m365_graph_teams.deleted_teams.listList deleted teamsread
  • m365_graph_teams.meeting_attendance_records.listList meeting attendance recordsread
  • m365_graph_teams.meeting_attendance_reports.getGet a meeting attendance reportread
  • m365_graph_teams.meeting_attendance_reports.listList meeting attendance reportsread
  • m365_graph_teams.meeting_recordings.getGet a meeting recordingread
  • m365_graph_teams.meeting_recordings.get_allGet all recordings of meetings a user organisedread
  • m365_graph_teams.meeting_recordings.listList meeting recordingsread
  • m365_graph_teams.meeting_transcripts.getGet a meeting transcriptread
  • m365_graph_teams.meeting_transcripts.get_allGet all transcripts of meetings a user organisedread
  • m365_graph_teams.meeting_transcripts.listList meeting transcriptsread
  • m365_graph_teams.message_hosted_contents.getGet a channel message hosted contentread
  • m365_graph_teams.message_hosted_contents.listList hosted contents of a channel messageread
  • m365_graph_teams.message_replies.createCreate a channel message replywrite
  • m365_graph_teams.message_replies.getGet a channel message replyread
  • m365_graph_teams.message_replies.listList replies to a channel messageread
  • m365_graph_teams.message_replies.set_reactionSet reaction a channel message replywrite
  • m365_graph_teams.message_replies.soft_deleteSoft delete a channel message replydestructive
  • m365_graph_teams.message_replies.undo_soft_deleteUndo soft delete a channel message replywrite
  • m365_graph_teams.message_replies.unset_reactionUnset reaction a channel message replywrite
  • m365_graph_teams.message_replies.updateUpdate a channel message replywrite
  • m365_graph_teams.messages.deltaDelta channel messagesread
  • m365_graph_teams.messages.getGet a channel messageread
  • m365_graph_teams.messages.get_allGet all messages across the channels of a teamread
  • m365_graph_teams.messages.get_all_retainedGet all retained messages across the channels of a teamread
  • m365_graph_teams.messages.listList channel messagesread
  • m365_graph_teams.messages.sendSend a Teams channel messagewrite
  • m365_graph_teams.messages.set_reactionSet reaction a channel messagewrite
  • m365_graph_teams.messages.soft_deleteSoft delete a channel messagedestructive
  • m365_graph_teams.messages.undo_soft_deleteUndo soft delete a channel messagewrite
  • m365_graph_teams.messages.unset_reactionUnset reaction a channel messagewrite
  • m365_graph_teams.messages.updateUpdate a channel messagewrite
  • m365_graph_teams.offer_shift_requests.approveApprove an offer shift requestwrite
  • m365_graph_teams.offer_shift_requests.createCreate an offer shift requestwrite
  • m365_graph_teams.offer_shift_requests.declineDecline an offer shift requestwrite
  • m365_graph_teams.offer_shift_requests.getGet an offer shift requestread
  • m365_graph_teams.offer_shift_requests.listList offer shift requestsread
  • m365_graph_teams.online_meetings.createCreate an online meetingwrite
  • m365_graph_teams.online_meetings.create_or_getCreate or get online meetingswrite
  • m365_graph_teams.online_meetings.deleteDelete an online meetingdestructive
  • m365_graph_teams.online_meetings.getGet an online meetingread
  • m365_graph_teams.online_meetings.get_all_messagesGet all Q&A messages across online meetingsread
  • m365_graph_teams.online_meetings.get_virtual_appointment_join_web_urlGet virtual appointment join web url an online meetingread
  • m365_graph_teams.online_meetings.listFind the online meetings of a user by join URL or meeting idread
  • m365_graph_teams.online_meetings.list_by_vtc_idFind an online meeting by video teleconference idread
  • m365_graph_teams.online_meetings.send_virtual_appointment_reminder_smsSend virtual appointment reminder sms an online meetingwrite
  • m365_graph_teams.online_meetings.send_virtual_appointment_smsSend virtual appointment sms an online meetingwrite
  • m365_graph_teams.online_meetings.updateUpdate an online meetingwrite
  • m365_graph_teams.open_shift_change_requests.approveApprove an open shift change requestwrite
  • m365_graph_teams.open_shift_change_requests.createCreate an open shift change requestwrite
  • m365_graph_teams.open_shift_change_requests.declineDecline an open shift change requestwrite
  • m365_graph_teams.open_shift_change_requests.getGet an open shift change requestread
  • m365_graph_teams.open_shift_change_requests.listList open shift change requestsread
  • m365_graph_teams.open_shifts.createCreate an open shiftwrite
  • m365_graph_teams.open_shifts.deleteDelete an open shiftdestructive
  • m365_graph_teams.open_shifts.getGet an open shiftread
  • m365_graph_teams.open_shifts.listList open shiftsread
  • m365_graph_teams.open_shifts.updateReplace an open shiftwrite
  • m365_graph_teams.presence.clear_presenceClear the presence session of a userwrite
  • m365_graph_teams.presence.clear_user_preferred_presenceClear the preferred presence of a userwrite
  • m365_graph_teams.presence.getGet the presence of a userread
  • m365_graph_teams.presence.get_by_user_idsGet the presence of several usersread
  • m365_graph_teams.presence.set_presenceSet the presence session of a userwrite
  • m365_graph_teams.presence.set_status_messageSet the presence status message of a userwrite
  • m365_graph_teams.presence.set_user_preferred_presenceSet the preferred presence of a userwrite
  • m365_graph_teams.reply_hosted_contents.getGet a reply hosted contentread
  • m365_graph_teams.reply_hosted_contents.listList hosted contents of a channel message replyread
  • m365_graph_teams.schedule.getGet the schedule of a teamread
  • m365_graph_teams.schedule.shareShare a schedule time range with team memberswrite
  • m365_graph_teams.schedule.upsertCreate or replace the schedule of a teamwrite
  • m365_graph_teams.scheduling_groups.createCreate a scheduling groupwrite
  • m365_graph_teams.scheduling_groups.deleteDelete a scheduling groupdestructive
  • m365_graph_teams.scheduling_groups.getGet a scheduling groupread
  • m365_graph_teams.scheduling_groups.listList scheduling groupsread
  • m365_graph_teams.scheduling_groups.updateReplace a scheduling groupwrite
  • m365_graph_teams.shifts.createCreate a shiftwrite
  • m365_graph_teams.shifts.deleteDelete a shiftdestructive
  • m365_graph_teams.shifts.getGet a shiftread
  • m365_graph_teams.shifts.listList shiftsread
  • m365_graph_teams.shifts.updateReplace a shiftwrite
  • m365_graph_teams.swap_shifts_change_requests.approveApprove a swap shifts change requestwrite
  • m365_graph_teams.swap_shifts_change_requests.createCreate a swap shifts change requestwrite
  • m365_graph_teams.swap_shifts_change_requests.declineDecline a swap shifts change requestwrite
  • m365_graph_teams.swap_shifts_change_requests.getGet a swap shifts change requestread
  • m365_graph_teams.swap_shifts_change_requests.listList swap shifts change requestsread
  • m365_graph_teams.tag_members.createCreate a tag memberwrite
  • m365_graph_teams.tag_members.deleteDelete a tag memberdestructive
  • m365_graph_teams.tag_members.getGet a tag memberread
  • m365_graph_teams.tag_members.listList tag membersread
  • m365_graph_teams.tags.createCreate a team tagwrite
  • m365_graph_teams.tags.deleteDelete a team tagdestructive
  • m365_graph_teams.tags.getGet a team tagread
  • m365_graph_teams.tags.listList team tagsread
  • m365_graph_teams.tags.updateUpdate a team tagwrite
  • m365_graph_teams.team_apps.createCreate an app installed in a teamwrite
  • m365_graph_teams.team_apps.deleteDelete an app installed in a teamdestructive
  • m365_graph_teams.team_apps.getGet an app installed in a teamread
  • m365_graph_teams.team_apps.listList apps installed in a teamread
  • m365_graph_teams.team_apps.upgradeUpgrade an app installed in a teamwrite
  • m365_graph_teams.team_members.addAdd team memberswrite
  • m365_graph_teams.team_members.createCreate a team memberwrite
  • m365_graph_teams.team_members.deleteDelete a team memberdestructive
  • m365_graph_teams.team_members.getGet a team memberread
  • m365_graph_teams.team_members.listList team membersread
  • m365_graph_teams.team_members.removeRemove team membersdestructive
  • m365_graph_teams.team_members.updateUpdate a team memberwrite
  • m365_graph_teams.team_operations.getGet a team async operationread
  • m365_graph_teams.team_operations.listList team async operationsread
  • m365_graph_teams.team_permission_grants.listList resource-specific permission grants of a teamread
  • m365_graph_teams.teams.archiveArchive a teamwrite
  • m365_graph_teams.teams.cloneClone a teamwrite
  • m365_graph_teams.teams.complete_migrationComplete migration a teamwrite
  • m365_graph_teams.teams.createCreate a teamwrite
  • m365_graph_teams.teams.create_from_groupCreate a team from a groupwrite
  • m365_graph_teams.teams.deleteDelete a team by deleting its groupdestructive
  • m365_graph_teams.teams.getGet a teamread
  • m365_graph_teams.teams.get_photoGet the metadata of a team photoread
  • m365_graph_teams.teams.listList teamsread
  • m365_graph_teams.teams.list_associatedList the teams a user is associated withread
  • m365_graph_teams.teams.list_joinedList the teams a user has joinedread
  • m365_graph_teams.teams.unarchiveUnarchive a teamwrite
  • m365_graph_teams.teams.updateUpdate a teamwrite
  • m365_graph_teams.teams_app_settings.getGet the tenant Teams app settingsread
  • m365_graph_teams.teams_app_settings.updateUpdate the tenant Teams app settingswrite
  • m365_graph_teams.teams_apps.deleteDelete a Teams appdestructive
  • m365_graph_teams.teams_apps.get_botGet the bot of a Teams app definitionread
  • m365_graph_teams.teams_apps.listList Teams apps in the app catalogread
  • m365_graph_teams.teams_templates.getGet a team templateread
  • m365_graph_teams.teams_templates.listList team templatesread
  • m365_graph_teams.teamwork.getGet the tenant teamwork settings objectread
  • m365_graph_teams.time_cards.clock_inClock in time cardswrite
  • m365_graph_teams.time_cards.clock_outClock out a time cardwrite
  • m365_graph_teams.time_cards.confirmConfirm a time cardwrite
  • m365_graph_teams.time_cards.createCreate a time cardwrite
  • m365_graph_teams.time_cards.deleteDelete a time carddestructive
  • m365_graph_teams.time_cards.end_breakEnd break a time cardwrite
  • m365_graph_teams.time_cards.getGet a time cardread
  • m365_graph_teams.time_cards.listList time cardsread
  • m365_graph_teams.time_cards.start_breakStart break a time cardwrite
  • m365_graph_teams.time_cards.updateReplace a time cardwrite
  • m365_graph_teams.time_off_reasons.createCreate a time-off reasonwrite
  • m365_graph_teams.time_off_reasons.deleteDelete a time-off reasondestructive
  • m365_graph_teams.time_off_reasons.getGet a time-off reasonread
  • m365_graph_teams.time_off_reasons.listList time-off reasonsread
  • m365_graph_teams.time_off_reasons.updateReplace a time-off reasonwrite
  • m365_graph_teams.time_off_requests.approveApprove a time-off requestwrite
  • m365_graph_teams.time_off_requests.createCreate a time-off requestwrite
  • m365_graph_teams.time_off_requests.declineDecline a time-off requestwrite
  • m365_graph_teams.time_off_requests.deleteDelete a time-off requestdestructive
  • m365_graph_teams.time_off_requests.getGet a time-off requestread
  • m365_graph_teams.time_off_requests.listList time-off requestsread
  • m365_graph_teams.times_off.createCreate a time offwrite
  • m365_graph_teams.times_off.deleteDelete a time offdestructive
  • m365_graph_teams.times_off.getGet a time offread
  • m365_graph_teams.times_off.listList times offread
  • m365_graph_teams.times_off.updateReplace a time offwrite
  • m365_graph_teams.user_apps.createCreate an app installed for a userwrite
  • m365_graph_teams.user_apps.deleteDelete an app installed for a userdestructive
  • m365_graph_teams.user_apps.getGet an app installed for a userread
  • m365_graph_teams.user_apps.get_chatGet the chat between a user and an installed appread
  • m365_graph_teams.user_apps.listList apps installed for a userread
  • m365_graph_teams.user_teamwork.getGet the teamwork settings of a userread
  • m365_graph_teams.workforce_integrations.createCreate a workforce integrationwrite
  • m365_graph_teams.workforce_integrations.deleteDelete a workforce integrationdestructive
  • m365_graph_teams.workforce_integrations.getGet a workforce integrationread
  • m365_graph_teams.workforce_integrations.listList workforce integrationsread
  • m365_graph_teams.workforce_integrations.updateUpdate a workforce integrationwrite

Questions

The Microsoft Teams MCP server, answered.

Is there a Microsoft Teams MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 266 Microsoft Teams actions, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Microsoft Teams.

What do I need to connect Microsoft Teams?

Entra application (client) id and Entra client secret. Plus your tenant id. The free call account { op: "connections.requirements", service: "m365_graph_teams" } lists exactly what to paste.

Can an AI agent delete or change things in Microsoft Teams?

Only if its key allows it, and only with an explicit confirmation. 33 Microsoft Teams actions are destructive, including soft delete a channel message, delete a channel and delete a team by deleting its group. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Microsoft Teams API limit?

actionlake paces every call to the limits in the Microsoft Teams service file: 10,000 calls per 10 minutes per connection. Repeated reads are answered from cache (123 Microsoft Teams actions can be), which never reaches Microsoft Teams.

What does a Microsoft Teams action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (266 Microsoft Teams actions page). Cache hits, searches, dry runs and calls Microsoft Teams refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Microsoft Teams API does it cover?

The Microsoft Teams API v1.0 at graph.microsoft.com/v1.0. It is built from Microsoft Teams's documentation as read on 17 September 2026. 266 actions in 1 area, each one in the signed service file (version 2.0.0).

Does actionlake keep my Microsoft Teams data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Microsoft Teams credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Microsoft Teams today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.