{"_id":"@andreykazanin/teams-mcp","name":"@andreykazanin/teams-mcp","dist-tags":{"latest":"1.1.0"},"versions":{"1.1.0":{"name":"@andreykazanin/teams-mcp","version":"1.1.0","description":"Hardened fork of Teams MCP — Microsoft Graph Teams integration for AI assistants","type":"module","main":"dist/index.js","bin":{"teams-mcp":"dist/index.js"},"publishConfig":{"access":"public"},"scripts":{"build":"npm run clean && npm run compile","clean":"rm -rf dist","compile":"tsc","ci":"biome ci src/","dev":"tsx watch src/index.ts","auth":"node dist/index.js authenticate","auth:check":"node dist/index.js check","auth:logout":"node dist/index.js logout","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:coverage:ci":"vitest run --coverage --reporter=default --reporter=junit --outputFile.junit=test-results.xml","test:ui":"vitest --ui","lint":"biome check src/","lint:fix":"biome check --write --unsafe src/","format":"biome format --write src/","bump":"npx npm-check-updates -i","prepublishOnly":"npm run build"},"keywords":["mcp","microsoft-graph","teams","model-context-protocol"],"author":{"name":"AK20001701"},"contributors":[{"name":"Floris Cornel"}],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/AK20001701/teams-mcp.git"},"homepage":"https://github.com/AK20001701/teams-mcp#readme","bugs":{"url":"https://github.com/AK20001701/teams-mcp/issues"},"dependencies":{"@azure/msal-node":"^3.2.2","@microsoft/microsoft-graph-client":"^3.0.7","@microsoft/microsoft-graph-types":"^2.43.1","@modelcontextprotocol/sdk":"^1.28.0","@types/dompurify":"^3.2.0","@types/jsdom":"^28.0.1","@types/marked":"^6.0.0","dompurify":"^3.4.1","jsdom":"^29.0.1","marked":"^17.0.5","turndown":"^7.2.2","turndown-plugin-gfm":"^1.0.2","zod":"^4.3.6"},"devDependencies":{"@biomejs/biome":"2.4.9","@types/node":"^25.5.0","@types/sinon":"^21.0.0","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.2","msw":"^2.12.14","nock":"^14.0.11","sinon":"^21.0.3","tsx":"^4.21.0","typescript":"^6.0.2","vitest":"^4.1.2"},"engines":{"node":">=18.0.0"},"gitHead":"0859dab182c7f7c5f22dc62bf7c4af2e73be4f35","types":"./dist/index.d.ts","_id":"@andreykazanin/teams-mcp@1.1.0","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-WgCA2ShPFFYaazBNDnu/QRhZXYAhGahWz/iTnj1QMejHxtHUOWO8yOT2A1VbN4mqaA6HFEDwJECeog/Su3pP0A==","shasum":"d172cf3ad9b3aa760cf55676c137e9322315189a","tarball":"https://registry.npmjs.org/@andreykazanin/teams-mcp/-/teams-mcp-1.1.0.tgz","fileCount":87,"unpackedSize":380865,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDYi6cMZuBLldzzGv6CCgcn/oOProQmZ9Sq2Y8SIYBV3wIgcIxpL+SgkA3xngbliOqL8DmudpMn4ZU1TQ5GO0nh7uE="}]},"_npmUser":{"name":"andreykazanin","email":"andreykazaninvsu@gmail.com"},"directories":{},"maintainers":[{"name":"andreykazanin","email":"andreykazaninvsu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/teams-mcp_1.1.0_1785350977539_0.8066391008615714"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-29T18:49:37.307Z","1.1.0":"2026-07-29T18:49:37.684Z","modified":"2026-07-29T18:49:37.988Z"},"maintainers":[{"name":"andreykazanin","email":"andreykazaninvsu@gmail.com"}],"description":"Hardened fork of Teams MCP — Microsoft Graph Teams integration for AI assistants","homepage":"https://github.com/AK20001701/teams-mcp#readme","keywords":["mcp","microsoft-graph","teams","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/AK20001701/teams-mcp.git"},"contributors":[{"name":"Floris Cornel"}],"author":{"name":"AK20001701"},"bugs":{"url":"https://github.com/AK20001701/teams-mcp/issues"},"license":"MIT","readme":"# Teams MCP (hardened fork)\n\n> Fork of [`floriscornel/teams-mcp`](https://github.com/floriscornel/teams-mcp) with safer defaults for local agent use.\n> Package: `@andreykazanin/teams-mcp` · Upstream copyright Floris Cornel (MIT).\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA Model Context Protocol (MCP) server that provides seamless integration with Microsoft Graph APIs, enabling AI assistants to interact with Microsoft Teams, users, chats, files, and organizational data.\n\n### Hardening changes in this fork\n\n- **Read-only by default** (use `--full` / `TEAMS_MCP_FULL=true` for write tools)\n- Token / auth files written with **mode `0600`**\n- Download `savePath` restricted to `TEAMS_MCP_DOWNLOAD_DIR` (default `~/Downloads/teams-mcp`)\n- Upload `filePath` restricted to `TEAMS_MCP_UPLOAD_DIRS` (default home), blocks `.ssh`, `.env`, `.npmrc`, private keys, and credential caches\n- Symlinks cannot escape either allowlist (paths are checked after resolution)\n- `imageUrl` fetch is **https-only** with private/local SSRF blocking, re-validated on **every redirect hop**\n- `AUTH_TOKEN` requires Graph audience + non-expired `exp`\n- Declares `@azure/msal-node` directly; bumps DOMPurify; zero high-severity advisories\n- CI installs from the lockfile (`npm ci`) and publishes with npm **provenance**\n\nSee [`security_best_practices_report.md`](./security_best_practices_report.md) for the full audit, verification results, and accepted residual risks.\n\n## 📦 Installation\n\nTo use this MCP server in Cursor/Claude/VS Code, add the following configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"teams-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@andreykazanin/teams-mcp@latest\"],\n      \"env\": {\n        \"TEAMS_MCP_UPLOAD_DIRS\": \"/home/you/Documents/teams-share\"\n      }\n    }\n  }\n}\n```\n\nThe server starts read-only. Add `\"--full\"` after the package name in `args` to enable\nwrite tools (send/edit/delete messages, uploads).\n\nInstall straight from git instead, if you prefer not to use npm:\n\n```json\n{\n  \"mcpServers\": {\n    \"teams-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"github:AK20001701/teams-mcp#security/harden-local-agent\"]\n    }\n  }\n}\n```\n\n## 🚀 Features\n\n### 🔐 Authentication\n- OAuth 2.0 device code authentication flow with Microsoft Graph\n- Secure token management, cache persistence (`0600`), and refresh token renewal\n- Authentication status checking and logout support\n- **Read-only by default** with reduced scopes (`--full` to enable writes)\n- Direct `AUTH_TOKEN` support for pre-issued Microsoft Graph access tokens (audience + expiry checked)\n\n### 👥 User Management\n- Get current user information\n- Search users by name or email\n- Retrieve detailed user profiles\n- Access organizational directory data\n\n### 🏢 Microsoft Teams Integration\n- **Teams Management**\n  - List user's joined teams\n  - Access team details and metadata\n\n- **Channel Operations**\n  - List channels within teams\n  - Retrieve channel messages and replies\n  - Send messages to team channels\n  - Reply to existing channel threads\n  - Edit and soft delete channel messages and replies\n  - Support for message importance levels (`normal`, `high`, `urgent`)\n  - Support for inline image attachments via URL or base64 data\n\n- **Team Members**\n  - List team members and their roles\n  - Access member information\n  - Search users for `@mentions`\n\n### 💬 Chat & Messaging\n- **1:1 and Group Chats**\n  - List user's chats\n  - Create new 1:1 or group conversations\n  - Retrieve chat message history with filtering, ordering, and pagination\n  - Fetch all available messages via `@odata.nextLink` pagination\n  - Send messages to existing chats\n  - Edit previously sent chat messages\n  - Soft delete chat messages\n\n### ✏️ Message Management\n- **Edit & Delete**\n  - Update (edit) sent messages in chats and channels\n  - Soft delete messages in chats and channels (marks as deleted without permanent removal)\n  - Only message senders can update/delete their own messages\n  - Support for Markdown formatting, mentions, and importance levels on edits\n\n### 📎 Media & Attachments\n- **Hosted Content**\n  - Download hosted content (images, files) from chat and channel messages\n  - Access inline images and attachments shared in conversations\n  - Optionally save hosted content directly to disk\n\n- **File Upload**\n  - Upload and send any file type (PDF, DOCX, XLSX, ZIP, images, etc.) to channels and chats\n  - Large file support (>4 MB) via resumable upload sessions\n  - Channel uploads go to SharePoint and chat uploads go to OneDrive\n  - Optional message text, custom filename, formatting, and importance levels\n\n### 🔍 Advanced Search & Discovery\n- **Message Search**\n  - Search across all Teams channels and chats using Microsoft Search API\n  - Support for KQL (Keyword Query Language) syntax\n  - Filter by sender, mentions, attachments, read state, and date ranges\n  - Get recent messages with advanced filtering options\n  - Find messages mentioning the current user\n\n## Rich Message Formatting Support\n\nThe following tools support rich message formatting in Teams channels and chats:\n- `send_channel_message`\n- `send_chat_message`\n- `reply_to_channel_message`\n- `update_channel_message`\n- `update_chat_message`\n- `send_file_to_channel`\n- `send_file_to_chat`\n\n### Format Options\n\nYou can specify the `format` parameter to control the message formatting:\n- `text` (default): Plain text\n- `markdown`: Markdown formatting (bold, italic, lists, links, code, etc.) converted to sanitized HTML\n\nWhen `format` is set to `markdown`, the message content is converted to HTML using a secure markdown parser and sanitized to remove potentially dangerous content before being sent to Teams.\n\nIf `format` is not specified, the message will be sent as plain text.\n\n### Example Usage\n\n```json\n{\n  \"teamId\": \"...\",\n  \"channelId\": \"...\",\n  \"message\": \"**Bold text** and _italic text_\\n\\n- List item 1\\n- List item 2\\n\\n[Link](https://example.com)\",\n  \"format\": \"markdown\",\n  \"importance\": \"high\"\n}\n```\n\n```json\n{\n  \"chatId\": \"...\",\n  \"message\": \"Simple plain text message\",\n  \"format\": \"text\"\n}\n```\n\n### Security Features\n\n- **HTML Sanitization**: All markdown content is converted to HTML and sanitized to remove potentially dangerous elements (scripts, event handlers, etc.)\n- **Allowed Tags**: Only safe HTML tags are permitted (p, strong, em, a, ul, ol, li, h1-h6, code, pre, etc.)\n- **Safe Attributes**: Only safe attributes are allowed\n- **XSS Prevention**: Content is automatically sanitized to prevent cross-site scripting attacks\n\n### Supported Markdown Features\n\n- **Text formatting**: Bold (`**text**`), italic (`_text_`), strikethrough (`~~text~~`)\n- **Links**: `[text](url)`\n- **Lists**: Bulleted (`- item`) and numbered (`1. item`)\n- **Code**: Inline `` `code` `` and fenced code blocks\n- **Headings**: `# H1` through `###### H6`\n- **Blockquotes**: `> quoted text`\n- **Tables**: GitHub-flavored markdown tables\n\n## LLM-Friendly Content Format\n\nMessages retrieved from the Microsoft Graph API are returned as raw HTML containing Teams-specific tags. To make this content more consumable by AI assistants, the following tools support automatic HTML-to-Markdown conversion:\n\n- `get_chat_messages`\n- `get_channel_messages`\n- `get_channel_message_replies`\n- `search_messages`\n- `get_my_mentions`\n\n### Content Format Options\n\nUse the `contentFormat` parameter to control how message content is returned:\n- `markdown` (default): Converts Teams HTML to clean Markdown, optimized for LLM consumption\n- `raw`: Returns the original HTML from the Microsoft Graph API\n\n### What Gets Converted\n\n| HTML Element                           | Markdown Output                                           |\n| -------------------------------------- | --------------------------------------------------------- |\n| `<at id=\"0\">Name</at>` (Teams mention) | `@Name` (multi-word names merged using mentions metadata) |\n| `<strong>text</strong>`                | `**text**`                                                |\n| `<em>text</em>`                        | `*text*`                                                  |\n| `<code>text</code>`                    | `` `text` ``                                              |\n| `<a href=\"url\">text</a>`               | `[text](url)`                                             |\n| `<ul><li>item</li></ul>`               | `- item`                                                  |\n| `<table>...</table>`                   | GFM Markdown table                                        |\n| `<attachment id=\"...\">`                | `{attachment:id}`                                         |\n| `<systemEventMessage/>`                | *(removed)*                                               |\n| `<hr>`                                 | `---`                                                     |\n| `&nbsp;`, `&amp;`, etc.                | Decoded to plain characters                               |\n\n### Attachment Metadata\n\nMessages that contain file attachments or inline images include an `attachments` array in the response with metadata for each attachment (id, name, contentType, contentUrl, thumbnailUrl). The inline `{attachment:id}` markers in the markdown content correlate with entries in this array, allowing consumers to identify and download attachments via `download_message_hosted_content` or `download_chat_hosted_content`.\n\n### Example Usage\n\n```json\n{\n  \"chatId\": \"19:meeting_...\",\n  \"limit\": 10,\n  \"contentFormat\": \"markdown\"\n}\n```\n\nTo get the original HTML:\n\n```json\n{\n  \"chatId\": \"19:meeting_...\",\n  \"limit\": 10,\n  \"contentFormat\": \"raw\"\n}\n```\n\n## 📦 Installation\n\n```bash\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n\n# Set up authentication\nnpm run auth\n```\n\n## 🔧 Configuration\n\n### Prerequisites\n- Node.js 18+\n- Microsoft 365 account with appropriate permissions\n- Microsoft Graph delegated permissions for the scopes below\n\n### Required Microsoft Graph Permissions\n\n**Full mode (default):**\n- `User.Read` - Read user profile\n- `User.ReadBasic.All` - Read basic user info\n- `Team.ReadBasic.All` - Read team information\n- `Channel.ReadBasic.All` - Read channel information\n- `ChannelMessage.Read.All` - Read channel messages\n- `ChannelMessage.Send` - Send channel messages and replies\n- `ChannelMessage.ReadWrite` - Edit and delete channel messages\n- `Chat.Read` - Read chat messages (included via read-only scopes)\n- `Chat.ReadWrite` - Create and manage chats, send/edit/delete chat messages (supersedes `Chat.Read`)\n- `TeamMember.Read.All` - Read team members\n- `Files.ReadWrite.All` - Required for file uploads to channels and chats\n\n**Read-only mode** (`TEAMS_MCP_READ_ONLY=true`) — only these scopes are requested:\n- `User.Read`\n- `User.ReadBasic.All`\n- `Team.ReadBasic.All`\n- `Channel.ReadBasic.All`\n- `ChannelMessage.Read.All`\n- `TeamMember.Read.All`\n- `Chat.Read`\n\n### Authentication Modes\n\n**Full access:**\n\n```bash\nnpx @andreykazanin/teams-mcp@latest authenticate\n```\n\n**Read-only access:**\n\n```bash\nnpx @andreykazanin/teams-mcp@latest authenticate --read-only\n```\n\n**Direct token injection with an existing Microsoft Graph JWT:**\n\n```json\n{\n  \"mcpServers\": {\n    \"teams-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@andreykazanin/teams-mcp@latest\"],\n      \"env\": {\n        \"AUTH_TOKEN\": \"<jwt-for-https://graph.microsoft.com>\"\n      }\n    }\n  }\n}\n```\n\n### Token Storage\n\n- Auth metadata is stored locally at `~/.msgraph-mcp-auth.json`\n- Token cache is stored locally at `~/.teams-mcp-token-cache.json`\n\n## 🛠️ Usage\n\n### Starting the Server\n```bash\n# Development mode with hot reload\nnpm run dev\n\n# Production mode\nnpm run build && node dist/index.js\n\n# Start in read-only mode (disables all write tools)\nTEAMS_MCP_READ_ONLY=true node dist/index.js\n```\n\n### CLI Commands\n\n```bash\nnpx @andreykazanin/teams-mcp@latest authenticate              # Authenticate (default: read-only scopes)\nnpx @andreykazanin/teams-mcp@latest authenticate --full       # Authenticate with write scopes\nnpx @andreykazanin/teams-mcp@latest check                     # Check authentication status\nnpx @andreykazanin/teams-mcp@latest logout                    # Clear authentication\nnpx @andreykazanin/teams-mcp@latest auth                      # Alias for authenticate\nnpx @andreykazanin/teams-mcp@latest                           # Start MCP server (default: read-only)\nnpx @andreykazanin/teams-mcp@latest --full                    # Start MCP server with write tools\n```\n\n### Environment Variables\n\n- `TEAMS_MCP_READ_ONLY=true` - Start the MCP server in read-only mode\n- `AUTH_TOKEN=<jwt>` - Use a pre-existing Microsoft Graph access token instead of MSAL login\n\n### Read-Only Mode\n\nThe server supports a read-only mode that disables all write operations (sending messages, creating chats, uploading files, editing/deleting messages) and requests only read-permission scopes from Microsoft Graph.\n\n**Enable read-only mode** using either:\n- Environment variable: `TEAMS_MCP_READ_ONLY=true`\n- CLI flag: `--read-only`\n\n**Authenticate with reduced scopes:**\n```bash\nnpx @andreykazanin/teams-mcp@latest authenticate --read-only\n```\n\n**MCP server configuration (read-only):**\n```json\n{\n  \"mcpServers\": {\n    \"teams-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@andreykazanin/teams-mcp@latest\"],\n      \"env\": {\n        \"TEAMS_MCP_READ_ONLY\": \"true\"\n      }\n    }\n  }\n}\n```\n\n**Switching modes:** When switching from read-only to full mode, the server detects the scope mismatch and warns you to re-authenticate:\n```bash\nnpx @andreykazanin/teams-mcp@latest authenticate\n```\n\n**Read-only tools (16):**\n`auth_status`, `get_current_user`, `search_users`, `get_user`, `list_teams`, `list_channels`, `get_channel_messages`, `get_channel_message_replies`, `list_team_members`, `search_users_for_mentions`, `download_message_hosted_content`, `list_chats`, `get_chat_messages`, `download_chat_hosted_content`, `search_messages`, `get_my_mentions`\n\n**Write tools disabled in read-only mode (10):**\n`send_channel_message`, `reply_to_channel_message`, `update_channel_message`, `delete_channel_message`, `send_file_to_channel`, `send_chat_message`, `create_chat`, `update_chat_message`, `delete_chat_message`, `send_file_to_chat`\n\n### Available MCP Tools\n\n#### Authentication\n- `auth_status` - Check current authentication status\n\n#### User Operations\n- `get_current_user` - Get authenticated user information\n- `search_users` - Search for users by name or email\n- `get_user` - Get detailed user information by ID or email\n\n#### Teams Operations\n- `list_teams` - List user's joined teams\n- `list_channels` - List channels in a specific team\n- `get_channel_messages` - Retrieve messages from a team channel with attachment summaries and content format selection\n- `get_channel_message_replies` - Get replies to a specific channel message\n- `send_channel_message` - Send a message to a team channel with optional mentions, importance, and image attachments\n- `reply_to_channel_message` - Reply to an existing channel message\n- `update_channel_message` - Edit a previously sent channel message or reply\n- `delete_channel_message` - Soft delete a channel message or reply\n- `list_team_members` - List members of a specific team\n- `search_users_for_mentions` - Search for team members to @mention in messages\n- `send_file_to_channel` - Upload a local file and send it as a message to a channel\n\n#### Chat Operations\n- `list_chats` - List user's chats (1:1 and group)\n- `get_chat_messages` - Retrieve messages from a specific chat with pagination, filters, ordering, and `fetchAll`\n- `send_chat_message` - Send a message to a chat\n- `create_chat` - Create a new 1:1 or group chat\n- `update_chat_message` - Edit a previously sent chat message\n- `delete_chat_message` - Soft delete a chat message\n- `send_file_to_chat` - Upload a local file and send it as a message to a chat\n\n#### Media Operations\n- `download_message_hosted_content` - Download hosted content (images, files) from channel messages\n- `download_chat_hosted_content` - Download hosted content (images, files) from chat messages\n\n#### Search Operations\n- `search_messages` - Search across all Teams messages using KQL syntax\n- `get_my_mentions` - Find recent messages mentioning the current user\n\n## 📋 Examples\n\n### Authentication\n\nFirst, authenticate with Microsoft Graph:\n\n```bash\n# Full access (default)\nnpx @andreykazanin/teams-mcp@latest authenticate\n\n# Read-only (reduced permission scopes)\nnpx @andreykazanin/teams-mcp@latest authenticate --read-only\n```\n\nCheck your authentication status:\n\n```bash\nnpx @andreykazanin/teams-mcp@latest check\n```\n\nLogout if needed:\n\n```bash\nnpx @andreykazanin/teams-mcp@latest logout\n```\n\n### Chat Pagination Example\n\n```json\n{\n  \"chatId\": \"19:meeting_...\",\n  \"limit\": 100,\n  \"fetchAll\": true,\n  \"orderBy\": \"createdDateTime\",\n  \"descending\": true,\n  \"contentFormat\": \"markdown\"\n}\n```\n\n### Channel Message with Mentions and Image\n\n```json\n{\n  \"teamId\": \"team-id\",\n  \"channelId\": \"channel-id\",\n  \"message\": \"Please review **today's update**\",\n  \"format\": \"markdown\",\n  \"importance\": \"high\",\n  \"mentions\": [\n    {\n      \"mention\": \"alex.chen\",\n      \"userId\": \"00000000-0000-0000-0000-000000000000\"\n    }\n  ],\n  \"imageUrl\": \"https://example.com/status.png\"\n}\n```\n\n### File Upload Example\n\n```json\n{\n  \"chatId\": \"19:meeting_...\",\n  \"filePath\": \"/absolute/path/to/report.pdf\",\n  \"message\": \"Please review the attached report\",\n  \"format\": \"markdown\"\n}\n```\n\n### Integrating with Cursor/Claude\n\nThis MCP server is designed to work with AI assistants like Claude/Cursor/VS Code through the Model Context Protocol.\n\n```json\n{\n  \"mcpServers\": {\n    \"teams-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@andreykazanin/teams-mcp@latest\"]\n    }\n  }\n}\n```\n\n## 🔒 Security\n\n- All authentication is handled through Microsoft's OAuth 2.0 flow or a caller-provided Microsoft Graph token\n- **Refresh token support**: Access tokens are automatically renewed using cached refresh tokens\n- Token cache / auth metadata are stored locally with **mode `0600`**\n- Server and authenticate default to **read-only**; use `--full` for write tools\n- Downloads confined to `TEAMS_MCP_DOWNLOAD_DIR`; uploads to `TEAMS_MCP_UPLOAD_DIRS`\n- `imageUrl` fetches are https-only with private/local address blocking\n- Markdown content is sanitized before sending HTML to Teams\n- `AUTH_TOKEN` is validated for Graph audience and non-expired `exp`\n- No sensitive path values are debug-logged to stderr\n\n## 📝 License\n\nMIT License - see LICENSE file for details\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Run build, linting, and tests\n5. Submit a pull request\n\n## 📞 Support\n\nFor issues and questions:\n- Check the existing GitHub issues\n- Review Microsoft Graph API documentation\n- Ensure proper authentication and permissions are configured\n","readmeFilename":"README.md","_rev":"1-0d1785076455d3107ac00b342ab93d60"}