Skip to main content
Glama
InditexTech

MCP Microsoft Teams Server

by InditexTech

Ошибки Рейтинг ремонтопригодности Рейтинг надежности Лицензия GitHubРелиз GitHub Таблица оценок

Сервер команд MCP

Реализация сервера MCP ( Model Context Protocol ) для интеграции с Microsoft Teams , предоставляющая возможности чтения сообщений, создания сообщений, ответа на сообщения, упоминания участников.

Функции

https://github.com/user-attachments/assets/548a9768-1119-4a2d-bd5c-6b41069fc522

  • Начать ветку на канале с названием и содержанием, упоминая пользователей

  • Обновите существующие темы с ответами на сообщения, упоминая пользователей.

  • Читать ответы в теме

  • Список членов команды канала

  • Читать сообщения канала

Related MCP server: Teams Messenger MCP App

Предпосылки

Установка

  1. Клонируйте репозиторий:

git clone [repository-url]
cd mcp-teams-server
  1. Создайте виртуальную среду и установите зависимости:

uv venv
uv sync --frozen --all-extras --dev

Конфигурация команд

Пожалуйста, прочтите этот документ , чтобы помочь вам настроить Microsoft Teams и требуемые ресурсы Azure. Это не пошаговое руководство, но оно может помочь вам понять, что вам понадобится.

Использование

Настройте следующие переменные среды в вашей оболочке или в файле .env. Вы можете использовать файл-образец в качестве шаблона:

Ключ

Описание

TEAMS_APP_ID

UUID для идентификатора вашего приложения MS Entra ID

ПАРОЛЬ_ПРИЛОЖЕНИЯ_КОМАНДЫ

Секрет клиента

КОМАНДЫ_ТИП_ПРИЛОЖЕНИЯ

SingleTenant или MultiTenant

TEAMS_APP_TENANT_ID

UUID арендатора в случае SingleTenant

TEAM_ID

Идентификатор группы или команды MS Teams

ИД_КАНАЛА_КОМАНДЫ

Идентификатор канала MS Teams с экранированными символами URL

Запустите сервер:

uv run mcp-teams-server

Разработка

Для интеграционных тестов требуется настройка следующих переменных среды:

Ключ

Описание

TEST_THREAD_ID

временная метка идентификатора потока

TEST_MESSAGE_ID

временная метка идентификатора сообщения

ТЕСТОВОЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ

тестовое имя пользователя

uv run pytest -m integration

Готовый образ Docker

Есть готовый образ, размещенный на ghcr.io. Вы можете установить этот образ, выполнив следующую команду

docker pull ghcr.io/inditextech/mcp-teams-server:latest

Собрать образ докера

Образ docker доступен для запуска сервера MCP. Вы можете собрать его с помощью следующей команды:

docker build . -t inditextech/mcp-teams-server

Запустить образ докера

Базовая конфигурация запуска:

docker run -it inditextech/mcp-teams-server

Запустить с переменными среды из файла .env:

docker run --env-file .env -it inditextech/mcp-teams-server

Настройте LLM для использования сервера MCP Teams

Пожалуйста, следуйте инструкциям в следующем документе.

Журнал изменений

Список изменений и историю версий смотрите на сайте CHANGELOG.md .

Внося вклад

Подробную информацию о нашем кодексе поведения и процессе подачи запросов на включение изменений см. на сайте CONTRIBUTING.md.

Безопасность

По вопросам безопасности, пожалуйста, ознакомьтесь с нашей Политикой безопасности .

Лицензия

Подробная информация о проекте доступна по лицензии Apache-2.0 .

© 2025 INDUSTRIA DE DISEÑO TEXTIL SA (INDITEX SA)

Available Tools

6 tools
get_member_by_nameB

Get a member by its name

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesMember name

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the operation is a read ('Get') and gives no information about what happens if no member matches, whether it errors, returns null, or whether the result shape is standardized. For a tool with zero annotation coverage, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single seven-word sentence with no padding, filler, or redundant clause. The key information — action, resource, and lookup criterion — is all present. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter with no output schema, the description is minimally viable: an agent can infer it should supply a member name and that the tool returns that member. But it lacks any mention of not-found behavior, error handling, or what the returned member object contains. It is adequate but not complete for an agent operating without annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents the 'name' parameter as 'Member name'. The tool description adds only 'by its name', which does not meaningfully extend the schema's parameter documentation. The baseline of 3 is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('Get') and resource ('member') plus the lookup key ('by name'). It distinguishes itself from sibling tools like list_members, which lists all members, and the thread-related tools. It could be slightly more explicit about the uniqueness or exact-match nature of the lookup, but it is not ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by its name' implies the tool should be used when the member's name is already known, rather than when browsing or listing members. However, there is no explicit guidance about when not to use it, no mention of alternatives, and no conditions or exclusions. The usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_membersA

List all members in the team

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoNumber of members to retrieve per request

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. 'List' reasonably implies a read-only operation, but the description does not disclose pagination behavior despite the page_size parameter, nor does it clarify whether 'all members' means a single response or requires multiple requests.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It front-loads the core action and resource without repeating the tool name or schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and an output schema exists, so return values need no explanation. However, the description lacks usage guidance relative to siblings and does not clarify pagination despite page_size existing, leaving a small but relevant gap for an agent deciding how to retrieve all members.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the page_size parameter is already well documented with default, minimum, and maximum values. The description adds no additional meaning about how paging works or how page_size relates to the 'all members' claim, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('List all members') that clearly distinguishes it from sibling tools like get_member_by_name and list_threads. The scope ('in the team') is explicit and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need all team members) but does not explicitly rule out or contrast with the sibling get_member_by_name. There is no when-not-to-use guidance or reference to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_threadsA

List threads in channel with pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to retrieve or page size
cursorNoPagination cursor for the next page of results

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYesList of channel messages or threads
limitYesPage limit, maximum number of items to retrieve
totalYesTotal items available for retrieval
cursorYesCursor to retrieve the next page of messages.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does state pagination behavior and implies a read-only listing operation, but it does not mention ordering, default page size behavior, or any side effects. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. Every word contributes meaning: the action, the resource, the scope, and the pagination behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple paged listing tool with fully documented parameters and an output schema, the description covers the core invocation needs. It could be slightly stronger with explicit mention of read-only behavior or ordering, but nothing critical is missing for correct calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both limit and cursor already documented in the schema. The description only says 'pagination,' which adds no meaning beyond the schema's parameter descriptions, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List'), a specific resource ('threads in channel'), and a distinctive feature ('pagination'). It clearly separates this tool from siblings like start_thread, update_thread, and read_thread, and from list_members which targets a different resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving threads in a channel, but it gives no explicit guidance on when to choose it over siblings such as read_thread or list_members. There are no stated exclusions, conditions, or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_threadA

Read replies in a thread

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of replies to retrieve or page size
cursorNoPagination cursor for the next page of results
thread_idYesThe thread ID as a string in the format '1743086901347'

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYesList of channel messages or threads
limitYesPage limit, maximum number of items to retrieve
totalYesTotal items available for retrieval
cursorYesCursor to retrieve the next page of messages.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It only states that replies are read; it does not mention paginated behavior (cursor/limit), ordering, or any side effects. The read-only nature is implied by 'Read', but little other behavioral context is added.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or repetition. Every word contributes to identifying the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple paginated read with a complete input schema and an output schema, the minimal description is largely sufficient. It lacks only explicit routing guidance (e.g., versus list_threads), but the core call context is covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains thread_id, limit, and cursor. The description adds only the general context that replies belong to a thread and does not meaningfully enrich the parameter semantics, matching the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('read') and a specific resource ('replies in a thread'), which clearly distinguishes it from sibling tools like list_threads, start_thread, and update_thread. It communicates both the action and the object precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose statement implies the use case (fetching replies for a given thread), but there is no explicit guidance about when to choose this tool over list_threads or other alternatives, and no exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_threadA

Start a new thread with a given title and content

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe thread title
contentYesThe thread content
member_nameNoMember name to mention in the thread

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleYesMessage title
contentYesMessage content
thread_idYesThread ID as a string in the format '1743086901347'

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden, and it does state the core side effect: creating a new thread. However, it does not disclose what the tool returns, whether the operation is idempotent, or how the optional member_name mention behaves beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence with no filler or redundant restatement. It front-loads the primary action and is easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity create operation with a complete schema and an output schema available, the description is nearly sufficient. The main gap is the lack of explicit usage guidance, but an agent can still select and invoke the tool correctly using the name, description, and sibling context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline applies. The description repeats title and content details already in the schema and adds nothing about the optional member_name parameter, though that parameter is fully documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('start') and resource ('a new thread') and distinguishes it from sibling operations like update_thread, read_thread, and list_threads. The inclusion of 'title and content' reinforces the purpose without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the word 'new' and by contrast with sibling tool names, but there is no explicit statement about when to choose this over update_thread or read_thread. An agent can infer the intended case, but the guidance is not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_threadB

Update an existing thread with new content

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesThe content to update in the thread
thread_idYesThe thread ID as a string in the format '1743086901347'
member_nameNoMember name to mention in the thread

Output Schema

ParametersJSON Schema
NameRequiredDescription
contentYesMessage content
thread_idYesThread ID as a string in the format '1743086901347'
message_idYesMessage ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states a mutable action but does not clarify whether content is replaced wholesale, how the optional member_name affects the thread, or any permission, idempotency, or failure behavior. 'Update an existing thread with new content' is too thin for a mutation with optional side-effect parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no filler or repetition. It is appropriately sized, though it could have used the available space to clarify behavior rather than remaining minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is an output schema and fully documented parameters, but the description omits important contextual nuance: what happens to existing content, how member_name interacts with 'new content,' and whether omitted optional fields reset or preserve prior values. For a mutation tool with no annotations, this is a notable completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents thread_id, content, and member_name. The description adds no extra meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Update') against a specific resource ('an existing thread') with 'new content.' This distinguishes it from siblings like start_thread, read_thread, and list_threads, though it does not name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrasing implies when to use it: when updating an existing thread rather than creating, reading, or listing. However, it gives no explicit guidance about when not to use it or which sibling alternative to choose in ambiguous cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.13
    • Changedget_member_by_name1 field changed
      • addedInput schema / properties / name / minLength
        Added value: +1
    • Changedlist_members2 fields changed
      • addedInput schema / properties / page_size
        Added value: +{
        +  "default": 100,
        +  "description": "Number of members to retrieve per request",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "title": "Page Size",
        +  "type": "integer"
        +}
      • addedOutput schema / $defs / TeamsMember / properties / id
        Added value: +{
        +  "default": "",
        +  "description": "Member ID used in mentions",
        +  "title": "Id",
        +  "type": "string"
        +}
    • Changedlist_threads3 fields changed
      • changedInput schema / properties / cursor / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / limit / maximum
        Added value: +50
      • addedInput schema / properties / limit / minimum
        Added value: +1
    • Changedread_thread3 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Pagination cursor for the next page of results",
        +  "title": "Cursor"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 50,
        +  "description": "Maximum number of replies to retrieve or page size",
        +  "maximum": 50,
        +  "minimum": 1,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / thread_id / minLength
        Added value: +1
    • Changedstart_thread3 fields changed
      • addedInput schema / properties / content / minLength
        Added value: +1
      • changedInput schema / properties / member_name / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / title / minLength
        Added value: +1
    • Changedupdate_thread3 fields changed
      • addedInput schema / properties / content / minLength
        Added value: +1
      • changedInput schema / properties / member_name / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / thread_id / minLength
        Added value: +1
  2. 5 tool updatesv1.0.8
    • Changedlist_members1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "TeamsMember": {
        +      "properties": {
        +        "email": {
        +          "description": "Member email",
        +          "title": "Email",
        +          "type": "string"
        +        },
        +        "name": {
        +          "description": "Member name used in mentions and user information cards",
        +          "title": "Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "email"
        +      ],
        +      "title": "TeamsMember",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TeamsMember"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "list_membersOutput",
        +  "type": "object"
        +}
    • Changedlist_threads1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "TeamsMessage": {
        +      "properties": {
        +        "content": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Message content",
        +          "title": "Content"
        +        },
        +        "message_id": {
        +          "description": "Message ID",
        +          "title": "Message Id",
        +          "type": "string"
        +        },
        +        "thread_id": {
        +          "description": "Thread ID as a string in the format '1743086901347'",
        +          "title": "Thread Id",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "thread_id",
        +        "message_id",
        +        "content"
        +      ],
        +      "title": "TeamsMessage",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "cursor": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Cursor to retrieve the next page of messages.",
        +      "title": "Cursor"
        +    },
        +    "items": {
        +      "description": "List of channel messages or threads",
        +      "items": {
        +        "$ref": "#/$defs/TeamsMessage"
        +      },
        +      "title": "Items",
        +      "type": "array"
        +    },
        +    "limit": {
        +      "description": "Page limit, maximum number of items to retrieve",
        +      "title": "Limit",
        +      "type": "integer"
        +    },
        +    "total": {
        +      "description": "Total items available for retrieval",
        +      "title": "Total",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "cursor",
        +    "limit",
        +    "total",
        +    "items"
        +  ],
        +  "title": "PagedTeamsMessages",
        +  "type": "object"
        +}
    • Changedread_thread1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "TeamsMessage": {
        +      "properties": {
        +        "content": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Message content",
        +          "title": "Content"
        +        },
        +        "message_id": {
        +          "description": "Message ID",
        +          "title": "Message Id",
        +          "type": "string"
        +        },
        +        "thread_id": {
        +          "description": "Thread ID as a string in the format '1743086901347'",
        +          "title": "Thread Id",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "thread_id",
        +        "message_id",
        +        "content"
        +      ],
        +      "title": "TeamsMessage",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "cursor": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Cursor to retrieve the next page of messages.",
        +      "title": "Cursor"
        +    },
        +    "items": {
        +      "description": "List of channel messages or threads",
        +      "items": {
        +        "$ref": "#/$defs/TeamsMessage"
        +      },
        +      "title": "Items",
        +      "type": "array"
        +    },
        +    "limit": {
        +      "description": "Page limit, maximum number of items to retrieve",
        +      "title": "Limit",
        +      "type": "integer"
        +    },
        +    "total": {
        +      "description": "Total items available for retrieval",
        +      "title": "Total",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "cursor",
        +    "limit",
        +    "total",
        +    "items"
        +  ],
        +  "title": "PagedTeamsMessages",
        +  "type": "object"
        +}
    • Changedstart_thread1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "content": {
        +      "description": "Message content",
        +      "title": "Content",
        +      "type": "string"
        +    },
        +    "thread_id": {
        +      "description": "Thread ID as a string in the format '1743086901347'",
        +      "title": "Thread Id",
        +      "type": "string"
        +    },
        +    "title": {
        +      "description": "Message title",
        +      "title": "Title",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "thread_id",
        +    "title",
        +    "content"
        +  ],
        +  "title": "TeamsThread",
        +  "type": "object"
        +}
    • Changedupdate_thread1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "content": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Message content",
        +      "title": "Content"
        +    },
        +    "message_id": {
        +      "description": "Message ID",
        +      "title": "Message Id",
        +      "type": "string"
        +    },
        +    "thread_id": {
        +      "description": "Thread ID as a string in the format '1743086901347'",
        +      "title": "Thread Id",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "thread_id",
        +    "message_id",
        +    "content"
        +  ],
        +  "title": "TeamsMessage",
        +  "type": "object"
        +}
  3. 6 tool updatesv1.0.0
    • First observedget_member_by_name
    • First observedlist_members
    • First observedlist_threads
    • First observedread_thread
    • First observedstart_thread
    • First observedupdate_thread

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct resource-action pair: thread lifecycle (start/update/read/list) and member lookup (get by name/list). There is no meaningful overlap, and the descriptions make the boundary between read_thread and list_threads clear.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern such as start_, update_, read_, list_, and get_. The verb choices are predictable and match the operation being performed.

Tool Count5/5

Six tools is well-scoped for a Teams server covering thread management and member lookup. There are no redundant tools, and the set feels appropriately sized for its stated domain.

Completeness4/5

Threads have start, read, update, and list coverage, while members have get and list coverage. Missing thread deletion and explicit reply/send-message operations are minor gaps, but the core workflows agents would likely need are covered.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that bridges Microsoft Teams and MCP-compatible clients, enabling chat integration, message handling, and advanced search capabilities without REST API endpoints.
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that bridges Microsoft Teams with MCP-compatible clients (LLMs, agentic frameworks, CLI), enabling chat integration, message search, and event streaming without traditional REST API endpoints.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/InditexTech/mcp-teams-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server