# Microsoft Teams API [Health: Active]

**Category:** 💬 Communication  
**Repository:** https://github.com/Maxim-Mazurok/teams-api  
**GitHub Stars:** 9  
**npm Downloads (last month):** 1097  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/microsoft-teams-api

## Description
AI-native Microsoft Teams integration — read chats, send messages, search people

## Tools
Capabilities this server exposes over MCP:

- **teams_list_conversations** — List conversations (chats, group chats, meetings, channels). Returns conversation ID, topic, type, and last message time.
- **teams_find_conversation** — Find a conversation by topic name (case-insensitive partial match). When Substrate search is available, also matches by member names. For 1:1 chats (which have no topic), use find-one-on-one instead. Use the returned conversation ID for subsequent operations like get-messages or send-message.
- **teams_find_one_on_one** — Find or create a 1:1 conversation with a person by name. Uses Substrate people/chat search when available — if a conversation already exists it is returned; if the person is found in the org directory but no chat exists yet, a new 1:1 is started. Falls back to scanning message senders when Substrate is unavailable. Also finds the self-chat if the name matches the current user.
- **teams_get_profiles** — Get Teams profiles for one or more people by MRI. Returns display name, email, job title, office location, and user type.
- **teams_find_people** — Search for people in the organization directory by name. Uses the Substrate search API (requires authentication via auto-login or interactive). Returns matching people with emails, job titles, and departments.
- **teams_find_chats** — Search for chats by name or member name. Uses the Substrate search API (requires authentication via auto-login or interactive). Returns matching chats with member lists and thread IDs.
- **teams_get_messages** — Get messages from a conversation. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). At least one identifier is required. For channel threads, provide --message-id to read replies under a specific post. Messages include reactions, mentions, followers (thread subscribers), and quoted message references.
- **teams_send_message** — Send a message to a conversation. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). At least one identifier is required. For channel thread replies, provide --message-id to reply under a specific post. Content is interpreted as Markdown by default and converted to rich HTML. To send images, provide file paths via --image. To send file attachments (documents, videos, etc.), provide file paths via --file. Use [image] placeholders in --content to interleave text and images (e.g. --content 'Before [image] after [image] done' --image a.png --image b.png). Without placeholders, text appears first followed by all images.
- **teams_edit_message** — Edit an existing message in a conversation. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). At least one identifier is required. The message to edit is identified by --message-id. Content is interpreted as Markdown by default and converted to rich HTML.
- **teams_delete_message** — Delete a message from a conversation. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). At least one identifier is required. The message to delete is identified by --message-id.
- **teams_add_reaction** — Add a reaction (emoji) to a message. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). At least one identifier is required. Standard reaction keys: "like", "heart", "laugh", "surprised", "angry", "sad". User-friendly names are auto-resolved to Teams emoji IDs (e.g. "horse" → "1f40e_horse").
- **teams_remove_reaction** — Remove a reaction (emoji) from a message. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). At least one identifier is required. Only removes the current user's reaction of the specified type. User-friendly names are auto-resolved to Teams emoji IDs (e.g. "horse" → "1f40e_horse").
- **teams_get_members** — List members of a conversation. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). At least one identifier is required. Display names are resolved via the Teams profile API when available, with message history as fallback. Note: 1:1 chat members may have empty display names if profile resolution is unavailable.
- **teams_whoami** — Get the display name and region of the currently authenticated user.
- **teams_get_transcript** — Get the meeting transcript from a conversation that contains a recorded meeting. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). Use --raw-vtt to get the original VTT file instead of parsed output.
- **teams_download_file** — Download file attachment(s) from a message. Identify the conversation by topic name (--chat), person name for 1:1 chats (--to), or direct ID (--conversation-id). Specify the message containing the file(s) via --message-id. Use --output-directory to save files to a specific directory. Without --output-directory, files are saved to a temporary directory. Text file contents and images are returned inline in the response. Other binary files (PDFs, videos, archives, etc.) are saved to disk only; the response reports the local save path.
- **teams_describe_image** — Describe an inline Teams image using a configured OpenAI-compatible vision model. Use amsObjectId directly, or identify a message by chat/to/conversationId plus messageId. Set TEAMS_IMAGE_DESCRIPTION_API_KEY or OPENAI_API_KEY before using this tool.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "microsoft-teams-api": {
    "command": "npx",
    "args": ["-y","-p","teams-api@latest","teams-api-mcp"],
    "env": {
      "TEAMS_LOGIN": "",
      "TEAMS_AUTO": "",
      "TEAMS_IMAGE_DESCRIPTION_API_KEY": "",
      "OPENAI_API_KEY": ""
    }
  }
}
```

**Requires environment variables:** `TEAMS_LOGIN`, `TEAMS_AUTO`, `TEAMS_IMAGE_DESCRIPTION_API_KEY`, `OPENAI_API_KEY` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What Microsoft Teams API does

Microsoft Teams API gives MCP-compatible agents access to Teams conversations and organizational people search. It covers one-to-one chats, group chats, meetings, channels, and their messages. Agents can locate conversations by topic, participant, or identifier, then read, send, edit, or delete messages.

The server also exposes profile lookup, conversation membership, the authenticated user's identity, message reactions, file downloads, and meeting transcript retrieval. Messages can include reactions, mentions, thread followers, and quoted-message references. Sending supports Markdown converted to rich HTML, image files, and document or media attachments.

## How it works

The package runs as a Node.js MCP server through the `teams-api-mcp` command. A typical editor configuration launches it with `npx`, using the `teams-api@latest` package. MCP clients call named tools such as `teams_list_conversations`, `teams_get_messages`, and `teams_send_message` rather than using the CLI directly.

Most conversation operations accept one of three ways to identify a chat: a topic, a person's name for a one-to-one conversation, or a conversation ID. Channel replies additionally use the message ID of the post being replied to. One-to-one lookup can find an existing chat or create one when the person exists in the organization directory.

People and chat discovery use the Substrate search API when available. Authentication can be interactive, cached, based on a direct token, or handled through a debug session. macOS also supports FIDO2 auto-login; that mode is unavailable on Windows and Linux.

## Setup and configuration

Node.js 18 or later is required. The server can be added through editor MCP configuration or launched with a command such as:

```json
{
  "mcpServers": {
    "teams": {
      "command": "npx",
      "args": ["-y", "-p", "teams-api@latest", "teams-api-mcp"],
      "env": { "TEAMS_LOGIN": "true" }
    }
  }
}
```

`TEAMS_LOGIN=true` enables interactive authentication. `TEAMS_AUTO` can be used instead for unattended macOS authentication with a FIDO2 passkey. Credentials are cached in the macOS Keychain, Windows DPAPI or Credential Manager, and Linux secret storage. Image description requires an OpenAI-compatible vision service and either `TEAMS_IMAGE_DESCRIPTION_API_KEY` or `OPENAI_API_KEY`.

## Tools and capabilities

- List conversations and search by topic, chat member, or person.
- Find or create one-to-one chats and retrieve Teams profiles.
- Read messages, channel thread replies, reactions, mentions, and quoted references.
- Send Markdown messages with inline images, file attachments, and image placeholders.
- Edit or delete messages and add or remove standard Teams reactions.
- List conversation members and identify the authenticated user.
- Retrieve parsed meeting transcripts or raw VTT files.
- Download message attachments, returning text and images inline when supported.
- Describe inline Teams images through a configured vision model.

## Limitations and notes

One-to-one chats do not have topics, so they must be resolved by person name or direct conversation ID. If profile resolution is unavailable, one-to-one members may have empty display names. Binary downloads such as PDFs, videos, and archives are saved to disk rather than returned inline. Substrate-powered people and chat search depends on successful interactive or automatic authentication. Image description requires a separately configured compatible vision API key.

_Full upstream README: https://allmcps.com/mcp/microsoft-teams-api/readme_

