---
name: microsoft-teams-channel-digest
description: "Every weekday at 17:00: decisions, open questions and shared links from the Teams channels you choose, so you can skip the scrollback. Use when the user asks for this, or when it runs on a schedule."
---

# Microsoft Teams channel digest

Every weekday at 17:00: decisions, open questions and shared links from the Teams channels you choose, so you can skip the scrollback.

Busy Teams channels bury the two messages that matter under forty that don't: the decision made in a reply thread at 11, and the question that nobody answered. Catching up means scrolling every channel after the last meeting of the day.

The agent reads today's threads in the channels you name and sorts them into decisions, open questions and links. Product managers and engineers read the day in a minute, and an unanswered question gets seen before it turns into tomorrow's blocker.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Microsoft Graph app with the delegated `ChannelMessage.Read.All` permission, which needs admin consent, or the Claude Microsoft 365 connector (available on every Claude plan with a work or school account), for which a Microsoft Entra Global Administrator grants tenant consent once.
- The team and channel names or IDs to cover.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Read today's threads** (Microsoft Teams): For each channel call `GET https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/messages?$top=50&$expand=replies`. Threads come back ordered by their last change, so follow `@odata.nextLink` until a thread's `lastModifiedDateTime` is before the start of today.
2. **Clean up the messages**: Keep items whose `messageType` is `message`, strip the HTML from `body.content`, and keep the author, time, replies and `webUrl`. Links come from anchors in the body and from `attachments[].contentUrl`.
3. **Sort into decisions and questions**: A decision is a thread that ends in agreement ("let's go with", "approved", "we'll ship Tuesday") that nobody pushed back on. An open question is a question with no reply from someone else. Everything else is context and stays out.
4. **Write the digest**: Decisions first, then open questions with who asked and how long ago, then links, each with its channel and a link to the message.

## Route B: the browser

### What you need

- Signed in to Microsoft Teams with a work or school account that is a member of each team; private and shared channels only show up for their members.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://teams.microsoft.com. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open each channel**: Open `https://teams.microsoft.com`, click **Teams** in the left rail and open the first channel you follow. Scroll the **Posts** tab up to the first post from today.
2. **Expand the threads**: For every post from today, or with a reply from today, click **See more replies** (or **N replies**) so the whole thread is visible, and read author, time and text. Skip joined and left notices, meeting started notices and reactions.
3. **Sort into decisions and questions**: A decision is a thread that ends in agreement, such as "approved" or "we'll ship Tuesday", that nobody pushed back on. An open question is a question with no reply from someone else. Collect links from the messages and the thread's shared files.
4. **Write the digest**: Decisions first, then open questions with who asked and how long ago, then links grouped by channel. Use **...** > **Copy link** on a message to link to it.

Note: Teams loads older posts as you scroll, so a channel with hundreds of posts a day takes time, and collapsed threads must be expanded one by one. The web app needs a desktop browser; the mobile layout hides reply counts.

## The report

- **Decisions** made today, with channel and who made them.
- **Open questions** with no answer yet, with who asked and when.
- **Links** shared, grouped by channel.
- One line on the question that blocks the most work.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "microsoft-teams-channel-digest/<date of this run, e.g. 2026-10-16>",
  "item_key": "microsoft-teams-channel-digest",
  "project": "Acme",
  "source": "Microsoft Teams channel digest skill",
  "kind": "update",
  "title": "3 decisions and 4 open questions in 3 channels",
  "summary": "Across **Product**, **Eng platform** and **Q4 launch** today: **3 decisions**, **4 questions** still waiting for an answer, and 6 links shared.",
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Type",
          "Channel",
          "What",
          "Who"
        ],
        "align": [
          "left",
          "left",
          "left",
          "left"
        ],
        "rows": [
          [
            "Decision",
            "Q4 launch",
            "Launch moves to Nov 18 to fit the security review",
            "Dana"
          ],
          [
            "Decision",
            "Eng platform",
            "Keep the v1 webhook endpoint until March",
            "Theo"
          ],
          [
            "Decision",
            "Product",
            "Annual plan gets 2 months free instead of 15% off",
            "Priya"
          ],
          [
            "Question",
            "Q4 launch",
            "Who owns the customer email for the launch?",
            "Lena, 10:40"
          ],
          [
            "Question",
            "Eng platform",
            "Can the SDK drop Node 18 this quarter?",
            "Sam, 13:15"
          ],
          [
            "Question",
            "Product",
            "Do enterprise trials get SSO?",
            "Marco, 14:02"
          ],
          [
            "Question",
            "Q4 launch",
            "Is the press embargo Nov 17 or 18?",
            "Lena, 16:20"
          ]
        ]
      }
    },
    {
      "type": "Links",
      "props": {
        "items": [
          {
            "label": "Q4 launch plan",
            "url": "https://example.com/docs/q4-launch-plan"
          },
          {
            "label": "Webhook v1 deprecation notes",
            "url": "https://example.com/docs/webhooks-v1"
          },
          {
            "label": "Annual plan pricing sheet",
            "url": "https://example.com/docs/annual-pricing"
          }
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "The launch email owner has been an open question since 10:40, and the email goes to customers on Nov 18.",
        "tone": "warn"
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Weekdays at 17:00 (`0 17 * * 1-5`). From cron, with the agent signed in on that machine:

```bash
0 17 * * 1-5 claude -p "Run the microsoft-teams-channel-digest skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/microsoft-teams-channel-digest#schedule

Source: https://briefkin.dev/skills/microsoft-teams-channel-digest
