# Microsoft Teams

> Microsoft Teams: what the collector reads, how to connect it, its permissions, its certification by Atlantic Agentic Labs and its security posture.

Built, not certified Built and tested against recorded and synthetic responses (version 1.0.0, 10 November 2026). Not yet run against the vendor's sandbox or a client environment.

Reads the channel messages of the Microsoft Teams teams you name, a thread at a time, so agents can answer from what the team has already said. A thread is the first message and its replies, in order, as one document.

## At a glance

| Collector                   | Microsoft Teams, version `1.0.0`                                                                                                                      |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Reads                       | Microsoft: Microsoft Teams (Microsoft Graph) ([the vendor's documentation](https://learn.microsoft.com/en-us/graph/api/resources/teams-api-overview)) |
| Family                      | Communication                                                                                                                                         |
| Kind                        | Chat                                                                                                                                                  |
| Ways to connect             | OAuth approval, Key pair                                                                                                                              |
| Scopes                      | - Read: `ChannelMessage.Read.All`, `Channel.ReadBasic.All`, `Team.ReadBasic.All`                                                                      |
| Read only                   | Yes, except: \[object Object]; \[object Object]                                                                                                       |
| Vendor's API can move money | No                                                                                                                                                    |
| Personal data               | Content, Identity                                                                                                                                     |
| Hosts it may contact        | `graph.microsoft.com`, `login.microsoftonline.com`, `teams.microsoft.com`, `*.atlanticagenticlabs.com`                                                |
| Vendor API versions         | Microsoft Graph v1.0 (teams, channels, messages delta)                                                                                                |
| Lowest engine version       | `0.45.0`                                                                                                                                              |

## What it reads

- The channels (by name; every channel otherwise) of the teams you name (by team id). A whole tenant is never the default.
- A thread is one record: the first message and its replies, with the team, channel, sender and reply count. A reply is never indexed without its question.
- The cursor is each channel’s delta link, kept with the threads written. A new or edited message, or a reply that moves the first message’s modified time, brings the thread back; a message deleted in Teams is withdrawn. A channel taken out of the configuration has its threads withdrawn; a team that cannot be seen at the moment keeps them. A delta link Graph no longer honours (410) re-reads the channel.
- Never read: chats, meeting chats, files shared in channels (connect SharePoint for those) and system messages.

## How to connect

1. Choose how to sign in, as for SharePoint: **Approve in Microsoft** (a Microsoft Entra administrator consents to Atlantic’s Microsoft app; an hour’s token is minted for your tenant each time) or **your own app, by certificate** (an app registration in your tenant with a certificate credential, never a client secret).
2. Channel messages are a Microsoft *protected API*: an app reads them only once Microsoft has approved it for that use. Atlantic’s app goes through that approval; for your own app, request it from Microsoft before you connect.
3. In LightHouse, open **Connectors**, choose **Microsoft Teams**, name the team ids, optionally the channels, a label and how often to read, and approve or paste the tenant ID, client ID and PEM.
4. In code, set the credential’s JSON fields in `SHAREPOINT_CREDENTIAL` (or the variable `credential_env` names) and add a `kind: teams` source card with `teams`, `channels`, `label` and `requires`.

Both ways produce a one-hour app-only token, and a client secret is never accepted: a certificate cannot be copied from a log or a screenshot the way a password can.

## Permissions

Microsoft Graph application permissions: `ChannelMessage.Read.All`, `Channel.ReadBasic.All` and `Team.ReadBasic.All`. LightHouse offers no write access for Teams. The collector sends `GET` requests to `graph.microsoft.com`; the only other requests are the sign-in POSTs the manifest lists under `read_operations` (the certificate sign-in to `login.microsoftonline.com`, or a signed request to LightHouse for a one-hour token with Atlantic’s app). Its read-only test proves it on every change.

## Limits

- You must name teams, by their id (a GUID); a team name is refused.
- Chats and meeting chats are not read.
- A thread is read again whole when it changes.
- Channel messages need Microsoft’s protected-API approval for the app.
- The token lasts an hour and is refreshed five minutes early.

## Data handling

- Message text is copied into the deployment’s corpus under the source’s `label`, with the sender’s display name. Messages name people and hold personal data of any kind.
- The certificate stays in your secret store (or is never held, with Atlantic’s app); only a one-hour token exists, and it is never written to logs or run notes.
- Nothing leaves the deployment: only counts reach LightHouse.

## Troubleshooting

| What you see                                                  | What it means                                                                                   | What to do                                             |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| `name the teams to sync; a whole tenant is never the default` | `teams` is empty                                                                                | Name the team ids                                      |
| `not team ids`                                                | A team was named by name, not by id                                                             | Use the team’s id (a GUID)                             |
| `credential variable 'SHAREPOINT_CREDENTIAL' is not set`      | The credential variable is empty                                                                | Set it to the credential’s JSON fields                 |
| `Microsoft refused the app's credential`                      | The app, certificate or consent is wrong or revoked                                             | Check the app registration and admin consent           |
| `HTTP 403` on channel messages                                | The app has not been approved for Microsoft’s protected API, or lacks `ChannelMessage.Read.All` | Request the approval; grant the permission and consent |
| Read succeeded, 0 written                                     | No message changed since the delta link                                                         | Nothing to do                                          |

## Certification

Each entry is a run by Atlantic Agentic Labs, newest first. Only a run against the vendor’s sandbox or a client environment certifies a collector; a certification lasts six months, or less if the vendor publishes an API version the collector does not list. See [How collectors are certified](/collectors/certification/).

| Date             | Collector | Engine   | Vendor API           | Method                              | Expires        |
| ---------------- | --------- | -------- | -------------------- | ----------------------------------- | -------------- |
| 10 November 2026 | `1.0.0`   | `0.45.0` | Microsoft Graph v1.0 | Fixtures only: built, not certified | Not applicable |

## Security posture

From the collector’s last scan on the default branch. What each line means, and what blocks a release: [Security posture](/collectors/security/).

| Last scanned               | 10 November 2026                                                                                                                                                                                                      |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Critical findings          | 0                                                                                                                                                                                                                     |
| High findings              | 0                                                                                                                                                                                                                     |
| Medium findings            | 0                                                                                                                                                                                                                     |
| Low findings               | 0                                                                                                                                                                                                                     |
| Info findings              | 0                                                                                                                                                                                                                     |
| Release blocked            | No                                                                                                                                                                                                                    |
| Network allow-list check   | Pass                                                                                                                                                                                                                  |
| Read-only behavioural test | Pass                                                                                                                                                                                                                  |
| SBOM (CycloneDX)           | Produced                                                                                                                                                                                                              |
| Dependency licences        | Pass                                                                                                                                                                                                                  |
| Scanners                   | bandit 1.9.4, semgrep 1.181.1, pip-audit 2.10.1, osv-scanner 2.7.0, cyclonedx-py 7.5.0, pip-licenses 5.5.5, gitleaks repository job aal-secrets, hosts_check tools/hosts_check.py, read-only test pytest -m read_only |

Source: https://docs.atlanticagenticlabs.com/collectors/catalogue/teams/
