# Workplace integrations for AI agents: what each app needs before you connect it

> Published 2026-11-12
> Source: https://viktor.com/blog/workplace-integrations-for-ai-agents

Workplace integrations for AI agents: what each app needs before you connect it

To implement workplace integrations for an AI agent, work in six steps: choose the connection method for each app (the vendor’s own OAuth sign-in, an MCP server or a direct API), put the AI tool behind single sign-on (SSO) with SCIM provisioning where it is offered, have each app’s admin approve the connection, decide which data may flow where and grant the [narrowest access](https://viktor.com/blog/how-to-control-what-your-ai-employee-can-access) that covers the job, pilot with one team using one read and one write per app, then scale app by app with approvals kept on for sensitive actions. In Slack, Microsoft 365 and Teams, Google Workspace, Salesforce, HubSpot and Jira the admin step differs by app, and that is what this guide covers before anyone hands real client work to an AI tool or [AI employee](https://viktor.com/ai-employee).

Last updated: 12 November 2026. Vendor documentation checked November 2026.

## How to implement workplace integrations in six steps

The same sequence works for one app or a whole stack:

1. **Choose the connection method per app.** Use the vendor’s own OAuth sign-in where it exists, an MCP server where the vendor hosts one (Salesforce and Atlassian both do), and a direct API key only when neither is offered. The [guide to integrating AI into your tech stack](https://viktor.com/blog/integrate-ai-agents-tech-stack) compares the patterns.
2. **Set up identity.** Put the AI tool behind your identity provider with single sign-on, and turn on SCIM provisioning where the tool offers it, so access ends when a person leaves. Decide per app whether the connection signs in as a person or as a dedicated integration identity.
3. **Get admin approval, app by app.** Each vendor has its own approver, sign-in method and typical blocker; the table below lists them.
4. **Govern the data flow.** Write down which data each job reads and which it changes, grant the narrowest scopes that cover it, and keep approvals on for anything that sends customer email, moves money or changes client records.
5. **Pilot with one team.** Connect that team’s tools, run one read and one write in each app (in a Salesforce sandbox for CRM), and fix what fails.
6. **Scale app by app.** Add apps and teams in the order given below, record who approved what, and review after 30 days which scopes were used.

## Workplace integrations at a glance

Viktor works in Slack and [Microsoft Teams](https://viktor.com/blog/where-do-you-actually-talk-to-your-ai-employee) and connects to Salesforce, HubSpot, Jira and Google Drive through the [integrations directory](https://viktor.com/integrations). Each app has a different approver, sign-in method and common failure point:

```json:object
{
  "_key": "k55",
  "_type": "table",
  "rows": [
    {
      "_key": "k48",
      "_type": "tableRow",
      "cells": [
        "App",
        "Who approves",
        "Sign-in method",
        "Typical blocker"
      ]
    },
    {
      "_key": "k49",
      "_type": "tableRow",
      "cells": [
        "Slack",
        "Workspace Owner or app manager; Org Owner or Org Admin on Enterprise plans (Slack app approval)",
        "Slack OAuth install with bot or user tokens (Slack tokens)",
        "Bot is not a member of the channel (conversations.history)"
      ]
    },
    {
      "_key": "k50",
      "_type": "tableRow",
      "cells": [
        "Microsoft 365 and Teams",
        "Teams Administrator for app availability; Global Administrator for Graph consent (Teams consent)",
        "Microsoft Entra OAuth, delegated or application permissions (permissions overview)",
        "“Need admin approval” when user consent is off (consent troubleshooting)"
      ]
    },
    {
      "_key": "k51",
      "_type": "tableRow",
      "cells": [
        "Google Workspace",
        "Admin with the Service Settings privilege (API controls)",
        "Google OAuth, or a service account with domain-wide delegation (delegation)",
        "App set to Limited while a service is Restricted (API controls)"
      ]
    },
    {
      "_key": "k52",
      "_type": "tableRow",
      "cells": [
        "Salesforce",
        "Salesforce admin who installs the app; users with the “Approve Uninstalled Connected Apps” permission can bypass the block (usage restrictions)",
        "OAuth through an External Client App, including for hosted MCP (create ECA)",
        "“app must be installed into org” error for uninstalled apps (usage restrictions)"
      ]
    },
    {
      "_key": "k53",
      "_type": "tableRow",
      "cells": [
        "HubSpot",
        "Super Admin or user with App Marketplace access (install apps)",
        "HubSpot OAuth install (working with OAuth)",
        "“Request for Integration Permissions” error (permissions error)"
      ]
    },
    {
      "_key": "k54",
      "_type": "tableRow",
      "cells": [
        "Jira",
        "Organization admin or site admin (Atlassian app access)",
        "Atlassian OAuth 2.0 (3LO); Rovo MCP Server over OAuth 2.1 (Rovo MCP OAuth)",
        "Client redirect URL not on the domain allowlist (MCP permissions)"
      ]
    }
  ]
}
```

## What to have ready before you connect anything

Have these details ready before the first install request:

- **Named admin per app:** Write down who holds the approving role in each app, using the role names in the table above, and confirm they expect a request.
- **The jobs, written out:** List the jobs the AI tool will do in each app, such as the Monday spend recap across client ad accounts or the Friday pipeline update, so scopes match real work.
- **Sign-in decision:** Decide per app whether the connection uses a person’s own sign-in or a dedicated integration identity, such as a Salesforce Integration user license or an Atlassian service account.
- **Salesforce sandbox access:** Confirm someone can log in to a sandbox and create an External Client App there before touching production.

For the trade-offs between OAuth and API keys, and between read and write access, see [how to connect any tool to your AI employee](https://viktor.com/blog/how-to-connect-any-tool-to-your-ai-employee).

## How to connect each workplace app, step by step

Connect the chat surface first. Docs and calendar come next, then CRM and Jira, because Slack or Teams is where people hand off work and approve sensitive actions, so the chat surface has to work before anything else is useful.

Google Workspace or Microsoft 365 comes next because their admin consent settings govern the whole tenant. Salesforce, HubSpot and Jira come last because they hold client records and need permission sets, sandboxes and project permissions set first.

### Step 1: Get Slack approved

Slack’s [app approval guide](https://slack.com/help/articles/222386767-Manage-app-approval-for-your-workspace) explains that members can install apps by default, without approval, until a Workspace Owner turns on app approval (checked November 2026). On Enterprise Grid, [Admin Approval of Apps is on by default](https://docs.slack.dev/tools/slack-cli/guides/using-slack-cli-on-an-enterprise-grid-organization), and Slack’s [Enterprise app guide](https://slack.com/help/articles/360000281563-manage-apps-on-enterprise-grid) gives Org Owners, Org Admins and Integrations Admins the job of approving or restricting apps at the org level.

- **Who approves:** Workspace Owners and the app managers they appoint review requests, which show the requested scopes and any comments ([app requests](https://slack.com/help/articles/360024269514-Manage-app-requests-for-your-workspace)).
- **What it can read:** A bot token with a `:history` scope reads any conversation the bot is a member of, while a user token reads the user’s private conversations and all public ones ([conversations.history](https://docs.slack.dev/reference/methods/conversations.history)).
- **Typical blocker:** A `not_in_channel` error, fixed by @mentioning the app in the channel and adding it when Slack prompts ([Web API guide](https://docs.slack.dev/apis/web-api/using-web-api-with-postman)).
- **Scope changes:** If a developer adds scopes, members may need to request the app again for review ([app requests](https://slack.com/help/articles/360024269514-Manage-app-requests-for-your-workspace)).
- **How to revoke:** Go to Manage apps, pick the app under Installed Apps, open App Details, then the Configuration tab, and select Remove App ([remove apps](https://slack.com/help/articles/360003125231-remove-apps-and-custom-integrations-from-your-workspace)).

Invite the bot only to the channels its jobs need, since membership is what sets its reading range.

### Step 2: Clear Microsoft 365 and Teams consent

Microsoft splits approval between two roles. Microsoft’s [Manage your apps in the Teams admin center](https://learn.microsoft.com/en-us/microsoftteams/manage-apps) documentation explains that a Teams Administrator allows or blocks the app on the Manage apps page (checked November 2026). Until an admin allows it, an app can show as “Blocked by publisher”.

- **Graph consent:** Microsoft’s [Teams consent page](https://learn.microsoft.com/en-us/microsoftteams/manage-consent-app-permissions) says only Global Administrators can grant consent to an app’s permissions on behalf of all users. Entra’s [app-only access primer](https://learn.microsoft.com/en-us/entra/identity-platform/app-only-access-primer) says Graph application permissions need at least the Privileged Role Administrator role.
- **Availability and timing:** With app centric management, each app is available to Everyone, Specific users or groups, or No one, and changes take up to 24 hours, rarely up to six days ([app centric management](https://learn.microsoft.com/en-us/microsoftteams/app-centric-management)).
- **Tenant settings:** By default, users can consent to permissions that don’t need admin consent ([user consent settings](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/configure-user-consent)). When user consent is off, the admin consent workflow lets users request review, and it can take up to an hour to enable ([admin consent workflow](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/configure-admin-consent-workflow)).
- **What it can do after:** Delegated permissions never reach anything the signed-in user couldn’t; application permissions reach any data the permission covers ([permissions overview](https://learn.microsoft.com/en-us/entra/identity-platform/permissions-consent-overview)).
- **Typical blocker:** “Need admin approval” or AADSTS65001, resolved when an admin consents on behalf of the organization ([consent troubleshooting](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/app-integration/troubleshoot-consent-issues)).
- **How to revoke:** In Enterprise apps, open Permissions, then the Admin consent tab, and select Revoke permission; the same page gives Graph and PowerShell steps for the rest ([review permissions](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/manage-application-permissions)).

Setting “Enabled for users to sign-in?” to No stops users signing in to the app and keeps its configuration ([application properties](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/application-properties)), so use it before deleting.

### Step 3: Allow Google Workspace access

Google Workspace’s [Control which apps access Google Workspace data](https://knowledge.workspace.google.com/admin/apps/control-which-apps-access-google-workspace-data) documentation places third-party access controls under Security, Access and data control, API controls (page last updated 26 October 2026, checked November 2026). Each app is Trusted, Specific Google data, Limited or Blocked, and unconfigured apps follow a default that allows any third-party app.

- **Scopes for Drive:** `drive.file` is non-sensitive and covers only files the user opens or shares with the app, while `drive` and `drive.readonly` are restricted ([Drive scopes](https://developers.google.com/workspace/drive/api/guides/api-specific-auth)).
- **Scopes for Gmail:** `gmail.send` is sensitive; `gmail.readonly` and `gmail.modify` are restricted ([Gmail scopes](https://developers.google.com/workspace/gmail/api/auth/scopes)).
- **Scopes for Calendar:** Google lists calendar entries among the kinds of user data that decide how much verification an app needs ([sensitive scope verification](https://developers.google.com/identity/protocols/oauth2/production-readiness/sensitive-scope-verification)).
- **Shared drives versus My Drive:** If an app does not set `supportsAllDrives` and `includeItemsFromAllDrives`, shared drive items are not returned ([shared drive support](https://developers.google.com/workspace/drive/api/guides/enable-shareddrives)).
- **Typical blocker:** A Restricted service lets only Trusted or Specific Google data apps in, so a Limited app gets nothing from it ([API controls](https://knowledge.workspace.google.com/admin/apps/control-which-apps-access-google-workspace-data)); turning off the Drive SDK setting also stops non-admin-installed Drive apps ([third-party Drive apps](https://support.google.com/a/answer/6105699)).
- **How to revoke:** Set the app to Blocked, or revoke a user’s 3-legged OAuth tokens with the User Security Management privilege ([privilege definitions](https://knowledge.workspace.google.com/admin/users/administrator-privilege-definitions)).

Google states that changes to these settings can take up to 24 hours, and details about a newly authorized app typically appear 24 to 48 hours later ([API controls](https://knowledge.workspace.google.com/admin/apps/control-which-apps-access-google-workspace-data)).

### Step 4: Authorize Salesforce in a sandbox first

Salesforce’s [Connected App Usage Restrictions Change](https://help.salesforce.com/s/articleView?id=005132365&type=1) article describes restrictions in place since September 2025 on end users accessing connected apps that are not installed in the org (checked November 2026). It gives two exceptions: users who previously authorized an app can keep using it if the app doesn’t use the OAuth 2.0 device flow, and users with the “Approve Uninstalled Connected Apps” permission can bypass the restriction. The same article recommends “Admin approved users are pre-authorized” over the default “All users may self-authorize”.

- **Who authorizes:** An admin installs the app in the org and picks its Permitted Users setting. From Spring ‘26 the setting that lets an org create new connected apps is off by default, and Salesforce points teams to the External Client App framework ([creation control](https://help.salesforce.com/s/articleView?id=xcloud.shr_manage_connect_apps_allow_creation_of_connected_apps_off.htm&type=5)).
- **What bounds visibility:** Salesforce recommends one dedicated user per integration, and the Salesforce Integration user license restricts that user to API-only access ([work with APIs](https://help.salesforce.com/s/articleView?id=platform.work_with_apis.htm&type=5)).
- **Sandbox first:** A sandbox lets the team test changes without affecting the production org or its users ([sandboxes](https://help.salesforce.com/s/articleView?id=sf.deploy_sandboxes_parent.htm&type=5)).
- **Hosted MCP server:** An admin creates an External Client App with the `mcp_api` and `refresh_token` scopes, which can take up to 30 minutes to work ([create ECA](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/create-external-client-app.html)); the overview says these servers are intended only for customers with Flex Credits ([MCP overview](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/hosted-mcp-servers-overview.html)).
- **Typical blocker:** An OAuth error with “app must be installed into org” for an uninstalled app ([usage restrictions](https://help.salesforce.com/s/articleView?id=005132365&type=1)).
- **How to revoke:** In Setup, open Connected Apps OAuth Usage and click Block, which ends all current sessions and prevents new ones ([usage restrictions](https://help.salesforce.com/s/articleView?id=005132365&type=1)).

On Salesforce’s hosted MCP server, every transaction runs as the authenticated user with object permissions, field-level security and sharing rules applied ([Headless 360 server](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/headless-360-mcp.html)), so for hosted MCP connections the authenticated user’s permission sets are the real boundary.

### Step 5: Connect HubSpot with the right permissions

HubSpot’s [Install apps in the HubSpot Marketplace](https://knowledge.hubspot.com/marketplace/install-apps-in-the-hubspot-marketplace) documentation requires Super Admin or App Marketplace access permissions to install an app (last updated September 4, 2026, checked November 2026). Users without those permissions can request the install from another user.

- **Optional scopes:** HubSpot drops an app’s optional scopes automatically when the account has no access to that product, and Super Admins can allow or restrict optional data permissions per approved app ([working with OAuth](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth), [manage access to apps](https://knowledge.hubspot.com/integrations/manage-access-to-apps)).
- **What it can read and change:** Access tokens reflect the app’s scopes, not the user’s limits, so a user who sees only owned contacts can authorize a token that views all contacts ([working with OAuth](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth)); user-level access ties the app to each user’s own permissions instead ([user-level apps](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/user-level-apps)).
- **Approval control:** Only Super Admins approve apps, set install permissions and update data permissions ([manage access to apps](https://knowledge.hubspot.com/integrations/manage-access-to-apps)).
- **Typical blocker:** The “Request for Integration Permissions” error, where the missing permission is typically Edit property settings ([permissions error](https://knowledge.hubspot.com/integrations/resolve-a-request-for-integration-permissions-error)).
- **How to revoke:** In Connected Apps, click Actions, then Uninstall, and type “uninstall” ([install apps](https://knowledge.hubspot.com/marketplace/install-apps-in-the-hubspot-marketplace)); Super Admins can also revoke an app’s approval, and uninstalls can take up to 30 minutes ([manage access to apps](https://knowledge.hubspot.com/integrations/manage-access-to-apps)).

Read the consent screen scope by scope, since account-level apps get the same access whoever installs them.

### Step 6: Approve Jira at the site or org level

Atlassian’s [Install and manage app access](https://support.atlassian.com/organization-administration/docs/installing-and-managing-app-access) documentation directs organization admins and site admins to install and manage apps from the Connected apps page (checked November 2026). User-installed apps are allowed by default until an admin selects Block user apps.

- **Project permissions:** The user’s permissions always constrain the app; an app with `manage:jira-project` can’t create projects for a user without Administer Jira ([3LO apps](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps)).
- **Rovo MCP Server:** Atlassian lists it as GA for Jira, Confluence and Compass ([Cloud changes, Jan 12 to 19, 2026](https://confluence.atlassian.com/cloud/blog/2026/01/atlassian-cloud-changes-jan-12-to-jan-19-2026)); the client starts an OAuth 2.1 flow and the user approves on a consent screen ([Rovo MCP OAuth](https://developer.atlassian.com/cloud/rovo-mcp/guides/configuring-oauth-2-1)).
- **MCP admin controls:** Under Atlassian Administration, Connectors, Atlassian MCP server, admins allow or block Read, Write and Search per app ([MCP permissions](https://support.atlassian.com/security-and-access-policies/docs/configure-atlassian-mcp-server-permissions)); API-token sign-in works only if an org admin enables it ([API token auth](https://developer.atlassian.com/cloud/rovo-mcp/guides/configuring-authentication-via-api-token)).
- **Typical blocker:** A redirect URL missing from the allowlist returns “Your organization admin must authorize access from this redirect URL”, fixed in the MCP server’s domain settings ([consent block fix](https://support.atlassian.com/rovo/kb/fix-oauth-consent-block-for-atlassian-rovo-mcp-server-in-atlassian-cloud)).
- **How to revoke:** Open the site’s Connected apps, View App Details, then Uninstall; for OAuth 2.0 (3LO) apps, Uninstall revokes all users ([third-party apps](https://support.atlassian.com/security-and-access-policies/docs/manage-your-users-third-party-apps)).

Atlassian states that existing v1 MCP usage starts exposing v2 tools on March 1, 2027 ([get started](https://support.atlassian.com/atlassian-ai-gateway/docs/get-started-with-the-atlassian-remote-mcp-server)), so recheck tool permissions before that date.

## How Viktor connects to these apps

Viktor is the AI employee who lives in Slack and Microsoft Teams, connects to 9,800+ tools, and does the work. People also reach him in the web app at app.viktor.com and by email.

Most of Viktor’s integrations use one-click OAuth, and the vendor’s admin steps above still apply. HubSpot connects through one-click OAuth; Salesforce connects through its hosted MCP server after an admin sets it up. Viktor connects to [Slack](https://viktor.com/integrations/slack), [Microsoft Teams](https://viktor.com/integrations/microsoft-teams), [Salesforce](https://viktor.com/integrations/salesforce), [HubSpot](https://viktor.com/integrations/hubspot), [Jira](https://viktor.com/integrations/jira) and [Google Drive](https://viktor.com/integrations/google-drive).

With Viktor, [money moves, code pushes and customer emails wait for explicit approval](https://viktor.com/security).

Viktor starts free with up to $100 in credits and no credit card. The [Team plan is $100 a month for 40,000 credits](https://viktor.com/pricing) shared across the workspace, with no per-seat fee, and unused credits roll over one month. For background on the category, see [what an AI employee is](https://viktor.com/blog/what-is-an-ai-employee).

[Start free with up to $100 in credits, no credit card →](https://app.viktor.com/signup)

## Rollout checklist for workplace integrations

Run each app through the same checks before the first real job. The list works for one agency account or a whole client roster:

- **Approval logged:** Record who approved each app, which role they hold and the date.
- **Narrowest scopes:** Prefer `drive.file` over `drive`, bot tokens limited to named channels, and a dedicated Salesforce integration user with API-only access.
- **One read, one write:** Pull one record and update one test record in each app, in a Salesforce sandbox for CRM.
- **[Approvals on sensitive actions](https://viktor.com/blog/how-to-keep-a-human-in-the-loop-with-your-ai-employee):** Keep approval on anything that sends customer email, moves money or changes a client ad account.
- **Revoke path documented:** Note the exact admin menu path for removing each app, taken from the steps above.
- **30-day review:** Check after 30 days which scopes were used and remove the rest.

The [security checklist for AI tool access](https://viktor.com/blog/security-checklist-for-ai-tool-access) covers the checks to run at the moment of connection.

[Hand Viktor his first job: start free with up to $100 in credits, no credit card →](https://app.viktor.com/signup)

## When a connected app still fails

A finished install can still return errors on day one. Each failure below has one documented fix:

- **Missing admin consent:** Microsoft returns AADSTS65001 or “Need admin approval”; an admin grants consent on behalf of the organization.
- **Scope too narrow:** HubSpot drops optional scopes when the account has no access to that product; check which scopes were granted before the first job.
- **Channel or project not shared:** A Slack bot outside the channel gets `not_in_channel`; [@mention the app](https://docs.slack.dev/apis/web-api/using-web-api-with-postman) in that channel and add it.
- **Sandbox versus production:** A Salesforce External Client App can take up to 30 minutes to work after it is created; wait, then test again before moving to production.

For deeper diagnosis, see [why your AI employee can’t access a tool](https://viktor.com/blog/why-your-ai-employee-cant-access-a-tool). For a tool with no ready connection, see [how to connect tools that aren’t supported yet](https://viktor.com/blog/how-to-connect-tools-your-ai-employee-doesnt-support-yet).

## FAQ

Slack, Microsoft 365 and Teams, Google Workspace, Salesforce, HubSpot and Jira each apply their own approval and access controls; confirm the connection identity and revocation path before rollout.

### Do I need an admin for every app?

No, Slack and Google Workspace allow member installs by default, although admins can restrict them. Enterprise Grid turns [admin approval on](https://docs.slack.dev/tools/slack-cli/guides/using-slack-cli-on-an-enterprise-grid-organization) by default, Microsoft Graph application permissions always need admin consent, Salesforce blocks uninstalled apps apart from the two exceptions in Step 4, HubSpot needs a Super Admin or App Marketplace access, and Jira admins can block user apps.

### Can an AI tool use my own login?

Yes, through user OAuth sign-in, and for Microsoft delegated permissions and Jira 3LO apps the access mirrors your permissions and never exceeds what you can reach. HubSpot account-level tokens follow the app’s scopes instead, so a token can see more than you do.

### What is the difference between user sign-in and a service account?

A user sign-in acts as one person, while a service account is a dedicated identity not associated with a person. [Slack bot tokens](https://docs.slack.dev/authentication/tokens) survive the installer’s deactivation, [Atlassian service accounts](https://support.atlassian.com/user-management/docs/manage-your-service-accounts) keep working when people change teams, and a Salesforce Integration user license limits the account to API-only access.

### Does connecting a tool give an AI agent access to everything?

No, scopes and the app’s own permissions set the boundary. Salesforce’s hosted MCP server applies object permissions, field-level security and sharing rules to the authenticated user, and [Jira project permissions](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps) limit what any scope can do.

### How do I disconnect an app?

Revoke access through the app’s controls: Remove App in Slack, Revoke permission in Entra, Blocked in Google API controls, Block in Salesforce OAuth Usage, Uninstall in HubSpot Connected Apps, and [Uninstall in Atlassian Connected apps](https://support.atlassian.com/security-and-access-policies/docs/manage-your-users-third-party-apps).

[Hire your first AI employee: start free with up to $100 in credits, no credit card →](https://app.viktor.com/signup)