Microsoft Teams
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
Section titled “At a glance”| Collector | Microsoft Teams, version 1.0.0 |
|---|---|
| Reads | Microsoft: Microsoft Teams (Microsoft Graph) (the vendor's documentation) |
| Family | Communication |
| Kind | Chat |
| Ways to connect | OAuth approval, Key pair |
| Scopes |
|
| 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
Section titled “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
Section titled “How to connect”- 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).
- 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.
- 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.
- In code, set the credential’s JSON fields in
SHAREPOINT_CREDENTIAL(or the variablecredential_envnames) and add akind: teamssource card withteams,channels,labelandrequires.
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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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.
| 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
Section titled “Security posture”From the collector’s last scan on the default branch. What each line means, and what blocks a release: Security posture.
| 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 |