{"_id":"@anupam365/ms-teams-mcp","_rev":"23-af6379129d738c2a66cc1374a9a6afcc","name":"@anupam365/ms-teams-mcp","dist-tags":{"latest":"1.3.2"},"versions":{"1.2.0":{"name":"@anupam365/ms-teams-mcp","version":"1.2.0","keywords":["mcp","model-context-protocol","microsoft-teams","teams","graph-api","claude"],"license":"MIT","_id":"@anupam365/ms-teams-mcp@1.2.0","maintainers":[{"name":"anupam365","email":"anupammandal319@gmail.com"}],"homepage":"https://github.com/anupam365/ms-teams-mcp#readme","bugs":{"url":"https://github.com/anupam365/ms-teams-mcp/issues"},"bin":{"microsoft-teams-mcp":"dist/index.js"},"dist":{"shasum":"41d3ca1cc5a18798e9a3e3f7d031f85a6e43cfb2","tarball":"https://registry.npmjs.org/@anupam365/ms-teams-mcp/-/ms-teams-mcp-1.2.0.tgz","fileCount":14,"integrity":"sha512-LurkVvo8/AEr+L+lWfa9fBNZgWBYfudS2vSCPoMuXdFZCVA1V8AY7F1ZTVnJs2dcXzxGYYC2I56N9URmpfG2Lg==","signatures":[{"sig":"MEUCIQCmIP6YiEURmP86VKVvA0Uo1781BQJvn70ias08s21hlwIgPrcNjWipJVfm5DE8E30qg9o6bEnA/pXIt7i3fqL7gl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174860},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"anupam365","email":"anupammandal319@gmail.com"},"deprecated":"Broken - use 1.2.1 instead","repository":{"url":"git+https://github.com/anupam365/ms-teams-mcp.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP server for Microsoft Teams integration via Graph API","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@azure/identity":"^4.8.0","isomorphic-fetch":"^3.0.0","@modelcontextprotocol/sdk":"^1.7.0","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ms-teams-mcp_1.2.0_1782229794109_0.02978860288833962","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@anupam365/ms-teams-mcp","version":"1.2.1","keywords":["mcp","model-context-protocol","microsoft-teams","teams","graph-api","claude"],"license":"MIT","_id":"@anupam365/ms-teams-mcp@1.2.1","maintainers":[{"name":"anupam365","email":"anupammandal319@gmail.com"}],"homepage":"https://github.com/anupam365/ms-teams-mcp#readme","bugs":{"url":"https://github.com/anupam365/ms-teams-mcp/issues"},"bin":{"microsoft-teams-mcp":"dist/index.js"},"dist":{"shasum":"4ef12c231647f455f6022c8095c3dc4c560b360e","tarball":"https://registry.npmjs.org/@anupam365/ms-teams-mcp/-/ms-teams-mcp-1.2.1.tgz","fileCount":14,"integrity":"sha512-wLAuy3pqfGxmLnfqLFZUdjY8Mb6GzqQ915Pwrn2EdAA1fXDFuUte5ldqRzvDMOLIcOYAckpJ0jzpB0VH7LCi3Q==","signatures":[{"sig":"MEYCIQDrI7BFvAp0ArbB33XcBRTe2pnG02i6AMD46Zf8zwlQuQIhAKUDdbNNcRqXvWihiilCWnl4522h9wjMRlLwU2ypRNSX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174849},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"anupam365","email":"anupammandal319@gmail.com"},"repository":{"url":"git+https://github.com/anupam365/ms-teams-mcp.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP server for Microsoft Teams integration via Graph API","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@azure/identity":"^4.8.0","isomorphic-fetch":"^3.0.0","@modelcontextprotocol/sdk":"^1.7.0","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ms-teams-mcp_1.2.1_1782230314696_0.9334374343468195","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@anupam365/ms-teams-mcp","version":"1.2.2","keywords":["mcp","model-context-protocol","microsoft-teams","teams","graph-api","claude"],"license":"MIT","_id":"@anupam365/ms-teams-mcp@1.2.2","maintainers":[{"name":"anupam365","email":"anupammandal319@gmail.com"}],"homepage":"https://github.com/anupam365/ms-teams-mcp#readme","bugs":{"url":"https://github.com/anupam365/ms-teams-mcp/issues"},"bin":{"microsoft-teams-mcp":"dist/index.js"},"dist":{"shasum":"66deec985d01608ba3ccc3ee5cec014fe3ea1bdd","tarball":"https://registry.npmjs.org/@anupam365/ms-teams-mcp/-/ms-teams-mcp-1.2.2.tgz","fileCount":14,"integrity":"sha512-t0g5huqlmINEV5zftfcLcX4BzWkVqE8ouJAST+f4/RHp1lpjITutXg/3G958006FyQhTSYaj+f1BEayiLc+7BA==","signatures":[{"sig":"MEQCIEK2tL3mpqmrdCLvc1BL7sHpPvBbkMSsWmC05kFn4HG2AiB0I5jecQrxGOYs6LPRXrD8ZRFs46T3tHRh5UsmRv/wTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174939},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"anupam365","email":"anupammandal319@gmail.com"},"repository":{"url":"git+https://github.com/anupam365/ms-teams-mcp.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP server for Microsoft Teams integration via Graph API","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@azure/identity":"^4.8.0","isomorphic-fetch":"^3.0.0","@modelcontextprotocol/sdk":"^1.7.0","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ms-teams-mcp_1.2.2_1782230497907_0.41013363306635453","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@anupam365/ms-teams-mcp","version":"1.3.0","keywords":["mcp","model-context-protocol","microsoft-teams","teams","graph-api","claude"],"license":"MIT","_id":"@anupam365/ms-teams-mcp@1.3.0","maintainers":[{"name":"anupam365","email":"anupammandal319@gmail.com"}],"homepage":"https://github.com/anupam365/ms-teams-mcp#readme","bugs":{"url":"https://github.com/anupam365/ms-teams-mcp/issues"},"bin":{"microsoft-teams-mcp":"dist/index.js"},"dist":{"shasum":"47913c0ae5d6b7dc7df6233385eeab522f1afa0e","tarball":"https://registry.npmjs.org/@anupam365/ms-teams-mcp/-/ms-teams-mcp-1.3.0.tgz","fileCount":14,"integrity":"sha512-5WmzO0KRIV44kskdaiupCXQmIY/CsiUtpS1tyHVMjEw1kxVcdXwN/zioQ1AzpFdYLjhRMHzjkKUaWawjTFicaQ==","signatures":[{"sig":"MEUCIQDDd21aKKKazTsWab1GUcylQHX2ivE6tbMy1Y6mGNYDkwIgI+oGR9NcUGR67iAM9L1XvK0b5RkZKHy/8SPogp+2dvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":176009},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"anupam365","email":"anupammandal319@gmail.com"},"repository":{"url":"git+https://github.com/anupam365/ms-teams-mcp.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP server for Microsoft Teams integration via Graph API","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@azure/identity":"^4.8.0","isomorphic-fetch":"^3.0.0","@modelcontextprotocol/sdk":"^1.7.0","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ms-teams-mcp_1.3.0_1782507705619_0.6090474926582781","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@anupam365/ms-teams-mcp","version":"1.3.1","keywords":["mcp","model-context-protocol","microsoft-teams","teams","graph-api","claude"],"license":"MIT","_id":"@anupam365/ms-teams-mcp@1.3.1","maintainers":[{"name":"anupam365","email":"anupammandal319@gmail.com"}],"homepage":"https://github.com/anupam365/ms-teams-mcp#readme","bugs":{"url":"https://github.com/anupam365/ms-teams-mcp/issues"},"bin":{"microsoft-teams-mcp":"dist/index.js"},"dist":{"shasum":"a54f3d83da4a863776e80500cf15d458ba47b048","tarball":"https://registry.npmjs.org/@anupam365/ms-teams-mcp/-/ms-teams-mcp-1.3.1.tgz","fileCount":14,"integrity":"sha512-y/3IK7b6p8f6AEqjHR55C6UfUWZ55TsSDLFKu5mnQQisVyp211+G+4qbO5ATx0TUrKc0fNmm9Kq3BbazssvxAw==","signatures":[{"sig":"MEYCIQC5FtPQ4D+xdZpac/shnbM2WLt6+qZcPq962TI/OqNSIwIhAIVdx41fbkqL63iq9s97sgo1HeEgisOqEz1F1MnxGLdB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":176399},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"anupam365","email":"anupammandal319@gmail.com"},"repository":{"url":"git+https://github.com/anupam365/ms-teams-mcp.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP server for Microsoft Teams integration via Graph API","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@azure/identity":"^4.8.0","isomorphic-fetch":"^3.0.0","@modelcontextprotocol/sdk":"^1.7.0","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ms-teams-mcp_1.3.1_1782507861665_0.3981408550558807","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@anupam365/ms-teams-mcp","version":"1.3.2","description":"MCP server for Microsoft Teams integration via Graph API","type":"module","main":"dist/index.js","bin":{"microsoft-teams-mcp":"dist/index.js"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","start":"node dist/index.js","dev":"tsx watch src/index.ts"},"keywords":["mcp","model-context-protocol","microsoft-teams","teams","graph-api","claude"],"homepage":"https://github.com/Anupam890/ms-teams-mcp","repository":{"type":"git","url":"git+https://github.com/Anupam890/ms-teams-mcp.git"},"license":"MIT","engines":{"node":">=18"},"dependencies":{"@azure/identity":"^4.8.0","@microsoft/microsoft-graph-client":"^3.0.7","@modelcontextprotocol/sdk":"^1.7.0","isomorphic-fetch":"^3.0.0"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.7.0"},"gitHead":"fae61f7c2303db6c36cd1fa7317fc3ab7fe4887f","types":"./dist/index.d.ts","_id":"@anupam365/ms-teams-mcp@1.3.2","bugs":{"url":"https://github.com/Anupam890/ms-teams-mcp/issues"},"_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-6c1dkNAWKeE1VHMwwr9huk2hp3WkZ0dit00d1cDa9HzSBIm7/bkckn1ib+E1R7to53Ovq+yGPTG9YPh6fmqDLQ==","shasum":"0f7d6192f091a627176e61519f641feca087a2f8","tarball":"https://registry.npmjs.org/@anupam365/ms-teams-mcp/-/ms-teams-mcp-1.3.2.tgz","fileCount":14,"unpackedSize":176458,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCBun0IUHc029qvTBuNhHLAum1GHdvKjJMhniWPUZqXSAIhALiaea0GqgyXhvVVBBizKwEneFjfnj2c6JmNKyO8E6k5"}]},"_npmUser":{"name":"anupam365","email":"anupammandal319@gmail.com"},"directories":{},"maintainers":[{"name":"anupam365","email":"anupammandal319@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ms-teams-mcp_1.3.2_1782549561626_0.27691685868132687"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-23T12:37:52.188Z","modified":"2026-06-27T08:39:21.903Z","1.0.0":"2026-06-23T12:37:52.438Z","1.0.1":"2026-06-23T14:25:07.753Z","1.0.2":"2026-06-23T14:43:41.447Z","1.0.3":"2026-06-23T14:44:34.630Z","1.0.4":"2026-06-23T14:50:55.362Z","1.0.5":"2026-06-23T14:53:22.484Z","1.0.6":"2026-06-23T14:58:23.026Z","1.1.0":"2026-06-23T15:47:53.766Z","1.2.0":"2026-06-23T15:49:54.271Z","1.2.1":"2026-06-23T15:58:34.867Z","1.2.2":"2026-06-23T16:01:38.047Z","1.3.0":"2026-06-26T21:01:45.809Z","1.3.1":"2026-06-26T21:04:21.794Z","1.3.2":"2026-06-27T08:39:21.774Z"},"bugs":{"url":"https://github.com/Anupam890/ms-teams-mcp/issues"},"license":"MIT","homepage":"https://github.com/Anupam890/ms-teams-mcp","keywords":["mcp","model-context-protocol","microsoft-teams","teams","graph-api","claude"],"repository":{"type":"git","url":"git+https://github.com/Anupam890/ms-teams-mcp.git"},"description":"MCP server for Microsoft Teams integration via Graph API","maintainers":[{"name":"anupam365","email":"anupammandal319@gmail.com"}],"readme":"# @anupam365/ms-teams-mcp\n\nMCP server for Microsoft Teams via the Graph API. Exposes **73 tools** for managing teams, channels, chats, messages, meetings, planner, calendar, apps, tabs, scheduling, search, and authentication.\n\n## Prerequisites\n\n- **Node.js 18+**\n- **Microsoft 365 subscription** with Teams enabled\n- **Azure AD app registration** with appropriate Graph API permissions\n\n## Setup\n\n### 1. Create an Azure AD App\n\n1. Go to [Azure Portal](https://portal.azure.com) → **App Registrations** → **New registration**\n2. Name it (e.g., `Teams MCP`), leave redirect URI blank, click **Register**\n3. Copy the **Application (client) ID** and **Directory (tenant) ID**\n\n### 2. Add API Permissions\n\n**API Permissions** → **Add a permission** → **Microsoft Graph**\n\n#### Application permissions (for client-credentials auth):\n\n| Permission | Type | Required for |\n|---|---|---|\n| `Channel.Create` | Application | Creating channels |\n| `Channel.Delete.All` | Application | Deleting channels |\n| `Channel.ReadBasic.All` | Application | Reading channel metadata |\n| `ChannelMessage.Read.All` | Application | Reading channel messages |\n| `ChannelMessage.UpdatePolicyViolation.All` | Application | Message policy |\n| `Calendars.ReadWrite` | Application | Creating calendar events |\n| `Group.Create` | Application | Creating teams |\n| `Group.Read.All` | Application | Listing teams |\n| `Group.ReadWrite.All` | Application | Updating teams |\n| `Member.Read.Hidden` | Application | Reading hidden memberships |\n| `OnlineMeetings.ReadWrite.All` | Application | Creating online meetings |\n| `Team.Create` | Application | Creating teams |\n| `Team.ReadBasic.All` | Application | Reading team metadata |\n| `User.Read.All` | Application | Reading user info |\n| `User.ReadBasic.All` | Application | Basic user info |\n\nClick **Grant admin consent** → **Yes**\n\n#### Delegated permissions (for device-code auth):\n\n- `Team.ReadBasic.All`, `Channel.ReadBasic.All`, `ChannelMessage.Send`, `ChannelMessage.Read.All`, `Member.Read.All`, `OnlineMeetings.ReadWrite.All`, `Calendars.ReadWrite`, `User.Read.All`\n\n### 3. Create a Client Secret\n\n**Certificates & secrets** → **Client secrets** → **New client secret** → Copy the **Value**\n\n## Configuration\n\n### Via environment variables\n\n```env\nTEAMS_TENANT_ID=your-tenant-id\nTEAMS_CLIENT_ID=your-client-id\nTEAMS_CLIENT_SECRET=your-client-secret\nTEAMS_AUTH_MODE=client-credentials\n```\n\nFor device-code auth (interactive):\n\n```env\nTEAMS_AUTH_MODE=device-code\n# No TEAMS_CLIENT_SECRET needed\n```\n\nFor direct token (bypasses OAuth flows):\n\n```env\nTEAMS_AUTH_TOKEN=eyJ...\n# TEAMS_TENANT_ID and TEAMS_CLIENT_ID not required\n```\n\nRead-only mode (reduced scopes):\n\n```env\nTEAMS_READ_ONLY=true\n```\n\n### MCP Client Config (opencode.json)\n\n```json\n{\n  \"mcpServers\": {\n    \"microsoft-teams\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@anupam365/ms-teams-mcp\"],\n      \"env\": {\n        \"TEAMS_TENANT_ID\": \"...\",\n        \"TEAMS_CLIENT_ID\": \"...\",\n        \"TEAMS_CLIENT_SECRET\": \"...\",\n        \"TEAMS_AUTH_MODE\": \"client-credentials\"\n      }\n    }\n  }\n}\n```\n\n## Run\n\n```bash\nnpx -y @anupam365/ms-teams-mcp\n```\n\n## Tools\n\n### Teams (8)\n\n| Tool | Description |\n|---|---|\n| `list_teams` | List all teams |\n| `get_team` | Get team details |\n| `create_team` | Create a new team |\n| `update_team` | Update team metadata |\n| `delete_team` | Delete a team |\n| `archive_team` | Archive a team |\n| `unarchive_team` | Restore an archived team |\n| `clone_team` | Clone an existing team |\n\n### Channels (7)\n\n| Tool | Description |\n|---|---|\n| `list_channels` | List channels in a team |\n| `get_channel` | Get channel details |\n| `create_channel` | Create a new channel |\n| `update_channel` | Update channel settings |\n| `delete_channel` | Delete a channel |\n| `archive_channel` | Archive a channel |\n| `unarchive_channel` | Restore an archived channel |\n\n### Channel Members (3)\n\n| Tool | Description |\n|---|---|\n| `list_channel_members` | List channel members |\n| `add_channel_member` | Add a user to a channel |\n| `remove_channel_member` | Remove a user from a channel |\n\n### Channel Messages (5)\n\n| Tool | Description |\n|---|---|\n| `send_channel_message` | Send a message (supports format, importance, @mentions) |\n| `list_channel_messages` | List recent channel messages |\n| `reply_to_channel_message` | Reply to a channel message |\n| `update_channel_message` | Edit an existing channel message |\n| `delete_channel_message` | Delete a channel message |\n\n### Chats (8)\n\n| Tool | Description |\n|---|---|\n| `list_chats` | List 1-on-1 and group chats |\n| `get_chat` | Get chat details |\n| `create_chat` | Create a new 1-on-1 or group chat |\n| `send_chat_message` | Send a chat message (supports format, importance) |\n| `list_chat_messages` | List chat messages |\n| `list_chat_members` | List chat members |\n| `add_chat_member` | Add a user to a group chat |\n| `list_chat_tabs` | List tabs in a chat |\n\n### Chat Messages (2)\n\n| Tool | Description |\n|---|---|\n| `update_chat_message` | Edit an existing chat message |\n| `delete_chat_message` | Delete a chat message |\n\n### Apps & Tabs (7)\n\n| Tool | Description |\n|---|---|\n| `list_available_apps` | List tenant app catalog |\n| `list_team_installed_apps` | List apps installed in a team |\n| `install_app_in_team` | Install an app in a team |\n| `uninstall_app_from_team` | Remove an app from a team |\n| `list_channel_tabs` | List tabs in a channel |\n| `add_channel_tab` | Add a tab to a channel |\n| `remove_channel_tab` | Remove a tab from a channel |\n\n### Planner (4)\n\n| Tool | Description |\n|---|---|\n| `list_team_plans` | List plans in a team |\n| `list_plan_buckets` | List buckets in a plan |\n| `list_plan_tasks` | List tasks in a plan |\n| `create_planner_task` | Create a new task |\n\n### Calendar & Meetings (7)\n\n| Tool | Description |\n|---|---|\n| `list_team_events` | List team calendar events |\n| `create_event` | Create a team calendar event |\n| `create_user_event` | Create event on a user's calendar |\n| `get_event` | Get event details |\n| `create_online_meeting` | Create a Teams meeting |\n| `get_online_meeting` | Get meeting details |\n| `list_online_meetings` | List upcoming meetings |\n\n### Presence & Settings (4)\n\n| Tool | Description |\n|---|---|\n| `get_user_presence` | Get user presence status |\n| `get_team_settings` | Get team settings |\n| `update_team_member_settings` | Update team settings |\n| `list_team_members` | List all team members |\n\n### Tags (3)\n\n| Tool | Description |\n|---|---|\n| `list_team_tags` | List tags in a team |\n| `create_tag` | Create a new tag |\n| `delete_tag` | Delete a tag |\n\n### Scheduling (6)\n\n| Tool | Description |\n|---|---|\n| `list_scheduling_groups` | List scheduling groups |\n| `list_shifts` | List shifts |\n| `create_shift` | Create a shift |\n| `list_time_off_reasons` | List time-off reasons |\n| `list_time_off` | List time-off entries |\n| `list_time_off_requests` | List time-off requests |\n\n### Subscriptions (3)\n\n| Tool | Description |\n|---|---|\n| `create_subscription` | Create a webhook subscription |\n| `list_subscriptions` | List active subscriptions |\n| `delete_subscription` | Delete a subscription |\n\n### Search & Users (3)\n\n| Tool | Description |\n|---|---|\n| `search_users` | Search users in the organization |\n| `search_messages` | Search across all Teams messages |\n| `get_my_mentions` | Get messages where you are @mentioned |\n\n### Files (1)\n\n| Tool | Description |\n|---|---|\n| `list_channel_files` | List files in a channel's folder |\n\n### Auth Management (2)\n\n| Tool | Description |\n|---|---|\n| `check_auth` | Check authentication status and mode |\n| `logout` | Clear cached tokens and log out |\n\n## Auth Modes\n\n| Mode | Description | Best for |\n|---|---|---|\n| `token` | Direct AUTH_TOKEN env var | Testing, CI |\n| `client-credentials` | App-only, no user interaction | Automated/headless use |\n| `device-code` | Interactive browser login with persistent token cache | Personal/local use |\n\n### Token Persistence\n\nIn device-code mode, the auth record is saved to `~/.microsoft-teams-mcp/auth-record.json`. On subsequent starts, the token is silently refreshed without re-prompting. If the refresh fails, the device-code prompt appears again.\n\n### Read-Only Mode\n\nSet `TEAMS_READ_ONLY=true` to restrict Graph scopes to `User.Read.All` and `Group.Read.All` only. Write operations will fail.\n\n## Development\n\n```bash\ngit clone <repo>\ncd ms-teams-mcp\nnpm install\nnpm run dev   # watch mode\nnpm run build # compile\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}