{
  "opencollection": "1.0.0",
  "info": {
    "name": "Den Admin Capability Sources API",
    "version": "dev"
  },
  "items": [
    {
      "info": {
        "name": "Capability Sources",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Check whether the calling member has connected a provider",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/oauth-providers/:providerId/status",
            "params": [
              {
                "name": "providerId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "Read-only. Never returns a token — only whether a connection exists and which scopes/account it covers. Safe to expose to a harness so it can detect \"not connected\" and tell the human what to do."
        },
        {
          "info": {
            "name": "Disconnect the calling member's account for a provider",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/oauth-providers/:providerId/disconnect",
            "params": [
              {
                "name": "providerId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "Removes the stored credential. Mutation — intentionally kept out of the agent-callable MCP surface (see policy.ts BLOCKED_OPERATION_IDS)."
        },
        {
          "info": {
            "name": "List or search Gmail messages as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/gmail-messages",
            "params": [
              {
                "name": "q",
                "value": "",
                "type": "query",
                "description": "Optional Gmail search query, using Gmail's search syntax."
              }
            ]
          },
          "docs": "Reads and searches inbox mail in the calling member's Gmail mailbox, using the Google account they connected through the org Google Workspace connection. Returns needs_connection when the member has not connected their Google account yet or the connection lacks Gmail read permission."
        },
        {
          "info": {
            "name": "Read a Gmail message with its plain-text body as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/gmail-message/:messageId",
            "params": [
              {
                "name": "messageId",
                "value": "",
                "type": "path",
                "description": "Gmail message id."
              }
            ]
          },
          "docs": "Reads one Gmail message, including decoded plain-text body content and attachment metadata, using the calling member's connected Google Workspace account. To download an attachment's bytes, pass its attachmentId to the gmail-attachment capability."
        },
        {
          "info": {
            "name": "Download a Gmail attachment's bytes as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/gmail-attachment/:messageId/:attachmentId",
            "params": [
              {
                "name": "messageId",
                "value": "",
                "type": "path",
                "description": "Gmail message id that contains the attachment."
              },
              {
                "name": "attachmentId",
                "value": "",
                "type": "path"
              }
            ]
          },
          "docs": "Downloads one Gmail attachment (file) as base64-encoded bytes, using the messageId and the attachmentId from the gmail-message capability's attachments metadata. Decode dataBase64 locally to reconstruct the file, e.g. a PDF or spreadsheet, then extract its contents."
        },
        {
          "info": {
            "name": "List Google Calendar events in a time range as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events",
            "params": [
              {
                "name": "timeMin",
                "value": "",
                "type": "query",
                "description": "Inclusive lower bound for event start time."
              }
            ]
          },
          "docs": "Lists primary-calendar events for the calling member in a requested ISO time range, using their connected Google Workspace account."
        },
        {
          "info": {
            "name": "Create a Google Calendar event as the calling member",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Creates an event on the calling member's primary Google Calendar, using their connected Google Workspace account. Set createMeetLink to true to request a Google Meet conferencing link and return meetLink."
        },
        {
          "info": {
            "name": "Add a Google Meet link to a Calendar event",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-event/:eventId",
            "params": [
              {
                "name": "eventId",
                "value": "",
                "type": "path",
                "description": "Google Calendar event id."
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Updates one primary-calendar event by id to request Google Meet conferencing, using the calling member's connected Google Workspace account. Use this for an existing event that needs a Meet link without creating a duplicate."
        },
        {
          "info": {
            "name": "Search Google Drive files as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-files",
            "params": [
              {
                "name": "query",
                "value": "",
                "type": "query",
                "description": "Text to search in Drive file names and full text."
              }
            ]
          },
          "docs": "Searches the calling member's Google Drive files by name and full text, using their connected Google Workspace account."
        },
        {
          "info": {
            "name": "Upload file bytes to Google Drive as the calling member",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-files",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Creates a file in the calling member's Google Drive using standard base64 bytes. The gmail-attachment capability returns dataBase64 in this exact encoding — pass it through directly to save an email attachment to Drive. The response file.webViewLink is the user-facing link — share it with the user."
        },
        {
          "info": {
            "name": "Read a Google Drive file's text content as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-file/:fileId",
            "params": [
              {
                "name": "fileId",
                "value": "",
                "type": "path",
                "description": "Google Drive file id."
              }
            ]
          },
          "docs": "Reads text from one Google Drive file, exporting Google Docs editors files as plain text and downloading other files as UTF-8 text with truncation."
        },
        {
          "info": {
            "name": "Share a Google Drive file with a person or the organization",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-file-share/:fileId",
            "params": [
              {
                "name": "fileId",
                "value": "",
                "type": "path",
                "description": "Google Drive file id."
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Creates a Drive permission for one file using the calling member's Google Workspace account. To share with one person pass type=user plus emailAddress; to share with the entire organization pass type=domain plus the org's Google Workspace domain (e.g. openworklabs.com). Sharing files not created through OpenWork needs the Full Drive access feature enabled by an admin."
        },
        {
          "info": {
            "name": "Create a Gmail draft or threaded reply draft; attach workspace files with body.attachments: [{ filename, mimeType, dataBase64 }], where dataBase64 is each attachment's file bytes encoded as standard base64",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/google-workspace/gmail-drafts",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Creates a plain-text Gmail draft in the calling member own mailbox, with optional Cc/Bcc recipients and files read from the active workspace. Set threadId to attach the draft to an existing Gmail thread as a reply using the thread's matching subject; threadId is required for replies and forwards. For threaded drafts, OpenWork appends the quoted conversation automatically. Always share the returned draftUrl with the user because it opens the ready-to-send draft in Gmail for review and send. Retur"
        },
        {
          "info": {
            "name": "List or search Outlook mail as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/mail-messages",
            "params": [
              {
                "name": "search",
                "value": "",
                "type": "query",
                "description": "Optional Outlook message search text."
              }
            ]
          },
          "docs": "Reads recent Outlook messages from the calling member's connected Microsoft 365 account. This capability is delegated and read-only."
        },
        {
          "info": {
            "name": "Read an Outlook message as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/mail-message/:messageId",
            "params": [
              {
                "name": "messageId",
                "value": "",
                "type": "path",
                "description": "Microsoft Graph message id."
              }
            ]
          },
          "docs": "Reads one Outlook message and requests its body as plain text, using the calling member's delegated Microsoft 365 connection."
        },
        {
          "info": {
            "name": "List Microsoft 365 calendar events as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/calendar-events",
            "params": [
              {
                "name": "timeMin",
                "value": "",
                "type": "query",
                "description": "Inclusive lower bound for event start time."
              }
            ]
          },
          "docs": "Lists the calling member's Outlook calendar events in a requested time range. This capability is delegated and read-only."
        },
        {
          "info": {
            "name": "Create an Outlook calendar event as the calling member",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/calendar-events",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Creates an event in the calling member's default calendar. Adding attendees can send Microsoft calendar invitations."
        },
        {
          "info": {
            "name": "Search OneDrive files as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/drive-files",
            "params": [
              {
                "name": "query",
                "value": "",
                "type": "query",
                "description": "Text to search in OneDrive file names and content."
              }
            ]
          },
          "docs": "Searches the calling member's OneDrive by name and content, returning source links. This capability is delegated and read-only."
        },
        {
          "info": {
            "name": "Create or replace a OneDrive text file as the calling member",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/drive-files",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Creates or replaces a bounded UTF-8 text file at a path in the calling member's OneDrive."
        },
        {
          "info": {
            "name": "Read a OneDrive text file as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/drive-file/:itemId",
            "params": [
              {
                "name": "itemId",
                "value": "",
                "type": "path",
                "description": "Microsoft Graph drive item id."
              }
            ]
          },
          "docs": "Returns OneDrive metadata, source link, and bounded UTF-8 text content. Folders, large files, and binary Office files return metadata with an explicit contentUnavailableReason instead of decoding unsafe binary data."
        },
        {
          "info": {
            "name": "Create an Outlook draft as the calling member",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/mail-drafts",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Creates a draft in the calling member's mailbox. It never sends the message. Microsoft requires delegated Mail.ReadWrite for draft creation."
        },
        {
          "info": {
            "name": "List Microsoft Teams chats as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/teams-chats",
            "params": [
              {
                "name": "maxResults",
                "value": "",
                "type": "query"
              }
            ]
          },
          "docs": "Lists the calling member's Microsoft Teams chats using delegated Chat.Read permission."
        },
        {
          "info": {
            "name": "List messages in a Microsoft Teams chat as the calling member",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/teams-chats/:chatId/messages",
            "params": [
              {
                "name": "chatId",
                "value": "",
                "type": "path"
              },
              {
                "name": "maxResults",
                "value": "",
                "type": "query"
              }
            ]
          },
          "docs": "Reads recent messages from one Teams chat using delegated Chat.Read permission."
        },
        {
          "info": {
            "name": "Send a message to an existing Microsoft Teams chat as the calling member",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/microsoft-365/teams-chats/:chatId/messages",
            "params": [
              {
                "name": "chatId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Sends one message to an existing Teams chat. The operation cannot create a new chat."
        },
        {
          "info": {
            "name": "List predefined External MCP Connection presets",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/mcp-connections/presets"
          },
          "docs": "Common third-party MCP servers (Notion, Linear, Stripe, Slack, ...) an admin can add with one click, prefilled with a real name and URL."
        },
        {
          "info": {
            "name": "List External MCP Connections",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/mcp-connections",
            "params": [
              {
                "name": "scope",
                "value": "",
                "type": "query"
              }
            ]
          },
          "docs": "scope=usable (default): connections the calling member has been granted (org-wide, direct, or via a team), with per-member connection status. scope=manageable: every org connection with access summaries — workspace owners and admins only."
        },
        {
          "info": {
            "name": "Register a new External MCP Connection for the org",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/mcp-connections",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Admin-only. Registers a third-party MCP server by name + URL and grants access (org-wide, teams, or members). Use GET /v1/mcp-connections/presets for known server URLs (Notion, Linear, Stripe, Sentry, Slack, Context7). For credentialMode per_member, each member connects their own account afterwards — share links.yourConnections from the response so teammates know where to sign in. For servers with pre-registered OAuth apps, whitelist links.oauthCallback. API-key and OAuth-client credentials cann"
        },
        {
          "info": {
            "name": "List tools exposed by an External MCP Connection",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/mcp-connections/:connectionId/tools",
            "params": [
              {
                "name": "connectionId",
                "value": "",
                "type": "path",
                "description": "Den TypeID with 'emc_' prefix and a 26-character base32 suffix."
              }
            ]
          },
          "docs": "Uses the Den-managed credential available to the calling member to read the live MCP tools/list catalog. Granted members can inspect connections available under Your Connections; workspace owners and admins can also inspect connections they manage. Credentials and tool calls are never returned."
        },
        {
          "info": {
            "name": "Replace who can use an External MCP Connection",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "https://api.openworklabs.com/v1/mcp-connections/:connectionId/access",
            "params": [
              {
                "name": "connectionId",
                "value": "",
                "type": "path",
                "description": "Den TypeID with 'emc_' prefix and a 26-character base32 suffix."
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Admin-only. Full-replace semantics: send the complete desired access set (orgWide, or memberIds + teamIds). Team and member ids come from GET /v1/org."
        },
        {
          "info": {
            "name": "Check the organization Telegram connection",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.openworklabs.com/v1/capabilities/telegram/status"
          },
          "docs": "Returns redacted Telegram connection and pairing status without any credential material."
        },
        {
          "info": {
            "name": "Send a message to the paired Telegram chat",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.openworklabs.com/v1/capabilities/telegram/send-message",
            "body": {
              "type": "json",
              "data": "{}"
            }
          },
          "docs": "Sends text only to the organization connection's paired private chat. The caller cannot supply an arbitrary Telegram chat id."
        }
      ]
    }
  ],
  "bundled": true
}