{"_id":"@dev-hitesh-gupta/teams-mcp","_rev":"3-129341616fb26cba60d3ec41fc195c6a","name":"@dev-hitesh-gupta/teams-mcp","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@dev-hitesh-gupta/teams-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","teams","microsoft-teams","microsoft","claude","automation","playwright","ai-tools","llm-tools"],"author":{"name":"Hitesh Gupta","email":"hiteshgupta3012@gmail.com"},"license":"MIT","_id":"@dev-hitesh-gupta/teams-mcp@1.0.0","maintainers":[{"name":"dev-hitesh-gupta","email":"hiteshgupta3012@gmail.com"}],"homepage":"https://github.com/dev-hitesh-gupta/teams-mcp#readme","bugs":{"url":"https://github.com/dev-hitesh-gupta/teams-mcp/issues"},"bin":{"teams-mcp":"dist/index.js"},"dist":{"shasum":"a2ba8ee2658bc5b3a0a978f4e94dc35025a4d7f3","tarball":"https://registry.npmjs.org/@dev-hitesh-gupta/teams-mcp/-/teams-mcp-1.0.0.tgz","fileCount":27,"integrity":"sha512-yik5hLGpYSif6AWmiEMwjxhW9cteOMCZcpN0xIbquTK3Sr/J7d8QGzgmfo/uuvhOXPad4c+yWcByBm5KJmm6Tg==","signatures":[{"sig":"MEYCIQC91YHZjeGi/Ro9qjq617ReLg8r7zcwB24/M2epQSC5BAIhAPe/pYSGWbNMppUgrf0lXjliynwuz2FwPJAFVhQnmTKF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114564},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"563babcfca9ee6cb6e0a85bad198677bb3f422a4","scripts":{"dev":"tsc && node dist/index.js","auth":"node dist/auth-cli.js","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"dev-hitesh-gupta","email":"hiteshgupta3012@gmail.com"},"repository":{"url":"git+https://github.com/dev-hitesh-gupta/teams-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"Microsoft Teams MCP Server — control Teams via Claude using headless Playwright browser automation. 24 tools for messaging, channels, meetings, files, and presence.","directories":{},"_nodeVersion":"25.6.1","dependencies":{"playwright":"^1.58.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/teams-mcp_1.0.0_1771734637869_0.23707955530286906","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dev-hitesh-gupta/teams-mcp","version":"1.0.1","keywords":["mcp","model-context-protocol","teams","microsoft-teams","microsoft","claude","automation","playwright","ai-tools","llm-tools"],"author":{"name":"Hitesh Gupta","email":"hiteshgupta3012@gmail.com"},"license":"MIT","_id":"@dev-hitesh-gupta/teams-mcp@1.0.1","maintainers":[{"name":"dev-hitesh-gupta","email":"hiteshgupta3012@gmail.com"}],"homepage":"https://github.com/dev-hitesh-gupta/teams-mcp#readme","bugs":{"url":"https://github.com/dev-hitesh-gupta/teams-mcp/issues"},"bin":{"teams-mcp":"dist/index.js"},"dist":{"shasum":"a602bedbebb6075a3da6c67a2445d9054e0c4ecb","tarball":"https://registry.npmjs.org/@dev-hitesh-gupta/teams-mcp/-/teams-mcp-1.0.1.tgz","fileCount":27,"integrity":"sha512-TEMVRh7WMopvNMF4SmlWt6B1C5AdQ7y8UPZzoagzJPMP/+PWKR7juD1ZU9H0VM+VaHFL0fjbo56ciVCzJ2U9Lg==","signatures":[{"sig":"MEYCIQCm9OICF7tqcV+XLRFI7FwIJTVSJDfVLZirjbqpJxo4WgIhALjUbJs7UmGkj7yU39Wb7wri6uZW4Azrp55iKqCl9oHG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114270},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ba172888e2276bcec6a471f601689eb0400b5ef0","scripts":{"dev":"tsc && node dist/index.js","auth":"node dist/auth-cli.js","build":"tsc","start":"node dist/index.js","prepare":"npm run build"},"_npmUser":{"name":"dev-hitesh-gupta","email":"hiteshgupta3012@gmail.com"},"repository":{"url":"git+https://github.com/dev-hitesh-gupta/teams-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"Microsoft Teams MCP Server — control Teams via Claude using headless Playwright browser automation. 24 tools for messaging, channels, meetings, files, and presence.","directories":{},"_nodeVersion":"25.6.1","dependencies":{"playwright":"^1.58.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/teams-mcp_1.0.1_1771939105400_0.939255532897509","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dev-hitesh-gupta/teams-mcp","version":"1.0.2","description":"Microsoft Teams MCP Server — control Teams via Claude using headless Playwright browser automation. 24 tools for messaging, channels, meetings, files, and presence.","type":"module","main":"dist/index.js","bin":{"teams-mcp":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsc && node dist/index.js","auth":"node dist/auth-cli.js","prepare":"npm run build"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","playwright":"^1.58.0"},"devDependencies":{"@types/node":"^22.0.0","typescript":"^5.6.0"},"engines":{"node":">=18.0.0"},"keywords":["mcp","model-context-protocol","teams","microsoft-teams","microsoft","claude","automation","playwright","ai-tools","llm-tools"],"author":{"name":"Hitesh Gupta","email":"hiteshgupta3012@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/dev-hitesh-gupta/teams-mcp.git"},"homepage":"https://github.com/dev-hitesh-gupta/teams-mcp#readme","bugs":{"url":"https://github.com/dev-hitesh-gupta/teams-mcp/issues"},"gitHead":"ba172888e2276bcec6a471f601689eb0400b5ef0","types":"./dist/index.d.ts","_id":"@dev-hitesh-gupta/teams-mcp@1.0.2","_nodeVersion":"25.6.1","_npmVersion":"11.9.0","dist":{"integrity":"sha512-O8SbSF0tGl2NvPtZPTpmKM46mnLjYh47IgnDzCNAvwMDAGWrbpyj3Dh14VAnS7d91uPZ0afEshIqJ4mugUTNNw==","shasum":"a2bc95e9b447c613897d69649a773caaab65af19","tarball":"https://registry.npmjs.org/@dev-hitesh-gupta/teams-mcp/-/teams-mcp-1.0.2.tgz","fileCount":27,"unpackedSize":114747,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICmPyVhl1O16r7yIZ5vndGFqE916iCl0yNdbYHMR9+a+AiEAuBEmCbzNULb5uvpp2LoseZQlUENP8HM7B6D7+pUavVI="}]},"_npmUser":{"name":"dev-hitesh-gupta","email":"hiteshgupta3012@gmail.com"},"directories":{},"maintainers":[{"name":"dev-hitesh-gupta","email":"hiteshgupta3012@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/teams-mcp_1.0.2_1771939266868_0.8579359485873401"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-22T04:30:37.798Z","modified":"2026-02-24T13:21:07.140Z","1.0.0":"2026-02-22T04:30:38.036Z","1.0.1":"2026-02-24T13:18:25.557Z","1.0.2":"2026-02-24T13:21:07.022Z"},"bugs":{"url":"https://github.com/dev-hitesh-gupta/teams-mcp/issues"},"author":{"name":"Hitesh Gupta","email":"hiteshgupta3012@gmail.com"},"license":"MIT","homepage":"https://github.com/dev-hitesh-gupta/teams-mcp#readme","keywords":["mcp","model-context-protocol","teams","microsoft-teams","microsoft","claude","automation","playwright","ai-tools","llm-tools"],"repository":{"type":"git","url":"git+https://github.com/dev-hitesh-gupta/teams-mcp.git"},"description":"Microsoft Teams MCP Server — control Teams via Claude using headless Playwright browser automation. 24 tools for messaging, channels, meetings, files, and presence.","maintainers":[{"name":"dev-hitesh-gupta","email":"hiteshgupta3012@gmail.com"}],"readme":"# teams-mcp\n\n> Microsoft Teams MCP Server — control Teams through Claude using headless Playwright browser automation.\n\n[![npm version](https://img.shields.io/npm/v/@dev-hitesh-gupta/teams-mcp.svg)](https://www.npmjs.com/package/@dev-hitesh-gupta/teams-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org)\n\n**24 tools** across messaging, channels, meetings, files, and presence — all accessible through [Claude Code](https://claude.ai/code) or any MCP-compatible client.\n\n## How It Works\n\nUses Playwright to automate the Teams web app (`teams.microsoft.com`). The browser launches on the first tool call and auto-closes after 5 minutes of inactivity.\n\n**Auth flow:** On first use (or when the session expires), a visible browser opens for you to sign in with your Microsoft account (supports MFA). After sign-in, the session is saved and all subsequent operations run headless in the background.\n\n## Installation\n\n```bash\nnpx @dev-hitesh-gupta/teams-mcp\n```\n\nOr install globally:\n\n```bash\nnpm install -g @dev-hitesh-gupta/teams-mcp\n```\n\n### Install Chromium browser\n\n```bash\nnpx playwright install chromium\n```\n\n### Authenticate\n\n```bash\nnpx @dev-hitesh-gupta/teams-mcp auth\n# or if installed globally:\nteams-mcp auth\n```\n\nA browser window will open — sign in with your Microsoft account. Your session is saved to `~/.teams-mcp/` and reused on future calls.\n\n## Add to Claude Code\n\n```bash\nclaude mcp add teams -- npx @dev-hitesh-gupta/teams-mcp\n```\n\nOr add manually to your Claude config (`~/.claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"teams\": {\n      \"command\": \"npx\",\n      \"args\": [\"@dev-hitesh-gupta/teams-mcp\"]\n    }\n  }\n}\n```\n\n## Tools\n\n### Messages (8)\n\n| Tool | Description |\n|------|-------------|\n| `teams_list_chats` | List recent chats (1:1, group, meeting chats) |\n| `teams_get_messages` | Read messages from a chat or channel |\n| `teams_send_message` | Send a message to a chat or channel |\n| `teams_reply_to_message` | Reply in a message thread |\n| `teams_react_to_message` | Add emoji reaction (like/heart/laugh/surprised/sad/angry) |\n| `teams_search_messages` | Search across all chats and channels |\n| `teams_get_mentions` | Get @mention notifications from activity feed |\n| `teams_delete_message` | Delete a sent message |\n\n### Channels & Teams (6)\n\n| Tool | Description |\n|------|-------------|\n| `teams_list_teams` | List all joined teams |\n| `teams_list_channels` | List channels in a team |\n| `teams_create_channel` | Create a new standard or private channel |\n| `teams_get_channel_info` | Get channel details and metadata |\n| `teams_list_members` | List team or channel members |\n| `teams_pin_message` | Pin or unpin a message in a channel |\n\n### Meetings (4)\n\n| Tool | Description |\n|------|-------------|\n| `teams_list_meetings` | List upcoming calendar meetings |\n| `teams_create_meeting` | Schedule a new Teams meeting |\n| `teams_get_meeting_info` | Get meeting details and join link |\n| `teams_join_meeting` | Get the join URL for a meeting |\n\n### Files (3)\n\n| Tool | Description |\n|------|-------------|\n| `teams_list_files` | List files in a channel's Files tab |\n| `teams_upload_file` | Upload a local file to a channel |\n| `teams_download_file` | Download a file from a channel to a local path |\n\n### Presence & Status (3)\n\n| Tool | Description |\n|------|-------------|\n| `teams_set_status` | Set presence status (Available/Busy/DND/Away/Offline) |\n| `teams_set_status_message` | Set a custom status message |\n| `teams_get_notifications` | Get activity feed notifications |\n\n## Configuration\n\nOptional environment variables:\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `TEAMS_MCP_IDLE_TIMEOUT` | `300000` (5 min) | Browser idle timeout in milliseconds |\n| `TEAMS_MCP_TOOL_TIMEOUT` | `30000` (30 sec) | Per-tool operation timeout in milliseconds |\n\nExample with custom timeout:\n\n```json\n{\n  \"mcpServers\": {\n    \"teams\": {\n      \"command\": \"npx\",\n      \"args\": [\"@dev-hitesh-gupta/teams-mcp\"],\n      \"env\": {\n        \"TEAMS_MCP_IDLE_TIMEOUT\": \"600000\"\n      }\n    }\n  }\n}\n```\n\n## Data & Auth Storage\n\nAll data is stored locally on your machine:\n\n```\n~/.teams-mcp/\n├── auth-state.json     # Saved browser session (cookies, storage)\n├── config.json         # Optional config overrides\n└── debug/              # Error screenshots for debugging\n```\n\n## Re-authentication\n\nIf your session expires, the server automatically opens a visible browser for re-auth. You can also manually trigger it:\n\n```bash\nnpx @dev-hitesh-gupta/teams-mcp auth\n# or reset completely:\nrm ~/.teams-mcp/auth-state.json && npx @dev-hitesh-gupta/teams-mcp auth\n```\n\n## Troubleshooting\n\n**Auth not working / stuck on login:**\n```bash\nrm ~/.teams-mcp/auth-state.json\nnpx @dev-hitesh-gupta/teams-mcp auth\n```\n\n**Tool failing silently:**\nCheck screenshots in `~/.teams-mcp/debug/` — errors are automatically captured.\n\n**Teams UI changed / selectors breaking:**\nIf a tool stops working after a Teams update, the DOM selectors may need updating. Open an issue on GitHub.\n\n**Rate limits or throttling:**\nIncrease `TEAMS_MCP_TOOL_TIMEOUT` and add pauses between tool calls.\n\n## Requirements\n\n- Node.js 18+\n- Chromium (installed via `npx playwright install chromium`)\n- A Microsoft account (personal or work/school with Teams access)\n\n## License\n\nMIT — [Hitesh Gupta](https://github.com/dev-hitesh-gupta)\n","readmeFilename":"README.md"}