# Teamsctl

> A 100% vibe-coded Teams CLI and MCP server for outsourcing coworker interactions to the machine. Now with 40% more AI slop and one deeply questionable auth flow.

- **Type:** MCP server
- **Install:** `agentstack add mcp-thesinding-teamsctl`
- **Verified:** Pending review
- **Seller:** [TheSinding](https://agentstack.voostack.com/s/thesinding)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** Unlicense
- **Upstream author:** [TheSinding](https://github.com/TheSinding)
- **Source:** https://github.com/TheSinding/teamsctl

## Install

```sh
agentstack add mcp-thesinding-teamsctl
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

[](https://github.com/TheSinding/teamsctl/actions/workflows/release.yml)
%2B)&replace=%24%3Cversion%3E&label=Homebrew)

# teamsctl 🤖

Have you ever thougth to yourself... 🤔

> "Geez, wouldn't it be nice, if it was easier to send AI slop and responses to my coworker.."

or

> "Holy hell, I fucking hate talking to Mike... Fucking Mike, with his cool stories and short arms - I wish I could make him speak to Claude or GPT or some chinese model"

or

> "It's a super duper great idea to have an LLM use my name in Teams"

## WELL DO I HAVE THE SOLUTION FOR YOU! 🫵

With **40%** more slop, and **20x** more bullshit and a **100% vibe coded codebase** from the top to the fucking bottom - **Now you absolutely can**!

Introducing the all new **teamsctl** - pronounced _`teams cuddle (timz ˈkʌdəl)`_ because it just sounds SO cute.

This allows you the ability to use teams from the commandline.. **BUT WAIT THERE IS MORE**

For a limited time only, you can use our new **MCP SERVER**! 🔌

Huh! Wadda you say!? Does **that** not sound like a great fucking idea?

For only **4.99$** you'll get a lifetime subscription to a vibe coded Go mess, with a shitty and hacky authenication method!

So if you want to outsource talking to Mike or any other colleagues for that matter, **this** is the solution for you!

What are you waiting for?!

Call now at +800-FUCKING-MIKE-AND-HIS-COOL-STORIES!

---

**I HAVE PERSONALLY NOT REVIEWED A SINGLE FUCKING THING 💪**

> Me: "GPT5.6 Make this"

> GPT5.6: "_BEEP_ _BOOP_ OKAY" _Proceeds to puke out 800 lines of Go code to a single file_

See **that's** how the modern day man does it! 🚀

## Requirements

- An insanely slow Microsoft Teams account.
- A ~Shitty Google Chrome or another~ Chromium-based browser for authentication. Use `-chrome` or `CHROME_PATH` for Chromium, Helium, or a non-standard installation; macOS `.app` paths are accepted.

## Install

With Homebrew:

```sh
brew install TheSinding/tap/teamsctl
```

Or install the latest release directly:

```sh
wget -qO- https://raw.githubusercontent.com/TheSinding/teamsctl/main/scripts/install.sh | sh
```

On macOS without `wget`, use:

```sh
curl -fsSL https://raw.githubusercontent.com/TheSinding/teamsctl/main/scripts/install.sh | sh
```

This installs the binary to `${HOME}/.local/bin/teamsctl`. From a Git checkout,
build and install the current source instead:

```bash
make install
sudo make install PREFIX=/usr/local
```

Other targets: `make build`, `make test`, `make uninstall`.

Authenticate once before using the CLI or MCP server:

```bash
teamsctl auth
```

Authentication opens Chrome with a persistent profile and stores tokens in
your OS keyring (macOS Keychain, Windows Credential Manager, or the Linux
Secret Service) when available. If no keyring backend is available, tokens
fall back to plain files under `~/.config/teamsctl` (or
`$XDG_CONFIG_HOME/teamsctl` if set), created with `0600` permissions. Chrome
is required; Node and Electron are not.

Optional autofill:

```bash
TEAMS_EMAIL="$EMAIL" TEAMS_PASSWORD="$PASSWORD" TEAMS_OTP="$OTP" teamsctl auth
```

Use `CHROME_PATH` when Chrome is not installed at its platform-default path.

## CLI

| Command | Behavior |
|---|---|
| `teamsctl auth [-email ADDRESS] [-chrome PATH] [-timeout 5m]` | Refresh all required Teams tokens. |
| `teamsctl conversations` | Print every chat and channel as JSON, including usable conversation IDs. |
| `teamsctl messages [-limit 50] [-name TITLE] ID` | Print the newest messages in chronological order. `-limit 0` returns all fetched messages. |
| `teamsctl send [-format text\|html] [-mention NAME] ID [MESSAGE...]` | Send a message. Reads stdin when `MESSAGE` is omitted. Repeat `-mention` for multiple people. |
| `teamsctl mcp` | Run the MCP server over stdio. |
| `teamsctl version` | Print the version embedded from the Git tag at build time. |

Chat records can contain fallback IDs in `ids`. Commands accept comma-separated
candidate IDs and try them in order.

Examples:

```bash
teamsctl conversations | jq '.[] | select(.kind == "chat")'
teamsctl messages -limit 10 '19:conversation-id@thread.v2'
printf 'hello world' | teamsctl send '19:conversation-id@thread.v2'
teamsctl send -format html '19:conversation-id@thread.v2' 'Hello Mike, I totally like speaking to you! What a great and fun colleague you are and I like your cool stories, 4 realzies.'
teamsctl send -mention Mike '19:conversation-id@thread.v2' 'Hello @Mike'
```

## MCP

The MCP server checks token expiry during initialization and before every tool
call. Run `teamsctl auth` when connection fails with an authentication error.

| Tool | Purpose |
|---|---|
| `list_conversations` | Find chats/channels by `query`, `kind`, and `limit`. Results are cached for five minutes. |
| `get_latest_message` | Resolve the best matching one-to-one chat and return its latest message. |
| `get_messages` | Read messages using a recipient phrase. |
| `send_message` | Send plain text or HTML, with optional real Teams mentions, using a recipient phrase. |

Recipient phrases resolve by intent: `Mike` is a 1:1 chat, `Mike and Charlie`
is their existing group chat, and `ASM group chat` or `ASM channel` matches a
named conversation. If a requested multi-person group does not exist,
`send_message` sends to each person individually and reports the fallback.

Use `format: "html"` for formatted or multi-part messages. HTML such as
`@Mike` is only bold text: a real mention also requires
`"mentions": ["Mike"]`. Unlisted `@` text remains plain text.

Advanced consumers can bypass name/email lookup with `mention_entities`, using
`display_name` plus `mri` or `object_id`.

## Add To An Agent

These examples assume `teamsctl` is available on your `PATH` (for example,
when installed via Homebrew). If not, replace `teamsctl` with the full path to
your binary (for example, `PATH/TO/teamsctl`). Restart the agent harness after
changing its configuration.

OpenCode

Add to `~/.config/opencode/opencode.json`:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "teams": {
      "type": "local",
      "command": ["teamsctl", "mcp"],
      "enabled": true
    }
  }
}
```

Claude Code

```bash
claude mcp add --scope user teams -- teamsctl mcp
```

Verify with `claude mcp list`.

Codex

```bash
codex mcp add teams -- teamsctl mcp
```

Equivalent `~/.codex/config.toml`:

```toml
[mcp_servers.teams]
command = "/bin/sh"
args = ["-c", "exec teamsctl mcp"]
```

Pi

Install the adapter:

```bash
pi install npm:pi-mcp-adapter
```

Add to `~/.config/mcp/mcp.json`:

```json
{
  "mcpServers": {
    "teams": {
      "command": "/bin/sh",
      "args": ["-c", "exec teamsctl mcp"],
      "lifecycle": "lazy",
      "directTools": true
    }
  }
}
```

## Development

```bash
make test
make build
```

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [TheSinding](https://github.com/TheSinding)
- **Source:** [TheSinding/teamsctl](https://github.com/TheSinding/teamsctl)
- **License:** Unlicense

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: flagged — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-thesinding-teamsctl
- Seller: https://agentstack.voostack.com/s/thesinding
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
