← Blog

How to Integrate Claude and Microsoft 365 Tools

2026-09-09 · 5 min read · SubToAPI Team

"Integrate Claude and Microsoft" usually means one of three things: adding Claude to Microsoft Teams as a bot, calling Claude from Power Automate/Logic Apps flows that already touch SharePoint, Outlook or Dynamics, or wiring Claude into a custom Azure-hosted app. There's no native Microsoft-Claude connector shipped by either company, so every path runs through Claude's API, called from whichever Microsoft surface you're working in.

This guide covers the three integration patterns that actually work, what each one needs in terms of authentication and infrastructure, and how to build a working connection with minimal glue code.

Clarify which "integration" you actually need

Before writing anything, decide which layer you're integrating at:

All three need the same underlying piece: an HTTPS endpoint that accepts a prompt and returns a Claude response. The difference is just what calls that endpoint.

Option 1: Power Automate / Logic Apps

Power Automate and Azure Logic Apps both support a generic HTTP action. You don't need a certified connector — a raw HTTP call to a Claude-compatible endpoint works fine as a flow step.

A typical flow: trigger on new file in SharePoint → HTTP POST the file text to Claude → parse the response → write output back to a SharePoint list or send via Outlook.

The HTTP action needs:

{
  "model": "claude-sonnet-4-5",
  "max_tokens": 500,
  "messages": [
    { "role": "user", "content": "Summarize this document: @{triggerBody()?['content']}" }
  ]
}

If you're calling Claude directly, you need to manage API keys, rate limits, and JSON parsing of the response format yourself, which is more brittle inside a low-code flow than most builders expect. Using an API layer built for exactly this — application keys, predictable JSON, usage tracking — keeps the flow simple. With SubToAPI, the HTTP action just points at https://api.subtoapi.app/v1/messages with a sub_live_... key in the Authorization header, and the response comes back as clean JSON your flow can parse with a standard "Parse JSON" step. See /docs/messages for the exact response shape.

Option 2: Claude inside Microsoft Teams

Teams bots are built on the Bot Framework SDK, which handles the Teams-specific messaging protocol, but the bot's "brain" — what generates the reply — is just an HTTP call you write yourself.

A minimal Node.js Teams bot handler looks like this:

const response = await fetch('https://api.subtoapi.app/v1/messages', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.SUBTOAPI_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'claude-sonnet-4-5',
    max_tokens: 800,
    messages: [{ role: 'user', content: userMessage }]
  })
});

const data = await response.json();
await context.sendActivity(data.content[0].text);

You host this alongside your Bot Framework registration (Azure Bot Service or App Service), register it as a Teams app, and it behaves like any other chat bot in a channel or DM. If your bot needs to stream partial responses back to Teams as they generate — useful for long answers — check /docs/streaming; the streaming endpoint returns server-sent events you can pipe into sendActivity updates instead of waiting for the full completion.

Option 3: Custom Azure applications

If you're building a standalone app — an internal tool, a customer-facing product, an Azure Function that processes queued jobs — the integration is just a standard HTTP client call from whatever language your app uses. This is the least constrained path: no Bot Framework, no connector limitations, full control over retries, timeouts, and error handling.

curl https://api.subtoapi.app/v1/messages \
  -H "Authorization: Bearer $SUBTOAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Extract line items from this invoice text."}]
  }'

Azure Functions, App Service, and AKS all support outbound HTTPS with no special networking config needed — you're just calling an external API like you would any third-party service.

Authentication: keep Microsoft and Claude credentials separate

A common mistake is trying to reuse Azure AD tokens or Microsoft Graph credentials for the Claude call itself. Keep them separate: Azure AD authenticates the user or service principal calling your flow or app; a distinct API key authenticates your app's call to Claude. Store the Claude key in Azure Key Vault (or Power Automate's connection secrets) and reference it at runtime rather than hardcoding it in a flow definition.

If multiple people on your team are building flows or bots that call Claude, a shared dashboard for keys, usage, and per-project limits saves a lot of "who's using the quota" confusion. SubToAPI's Team plan (€19/seat) gives each builder their own sub_live_... key with visibility into usage across the org, which matters once you have five Power Automate flows and two Teams bots all calling the same underlying account. Start with a free trial at /signup, and walk through the first request in /docs/quickstart.

Testing before you wire it into production flows

Test the raw HTTP call outside Power Automate or Teams first. A curl request from your terminal tells you immediately whether the issue is your prompt, your auth header, or the flow's JSON parsing — debugging inside the Power Automate designer is slow and the error messages are vague.

curl https://api.subtoapi.app/v1/messages \
  -H "Authorization: Bearer $SUBTOAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-4-5","max_tokens":100,"messages":[{"role":"user","content":"ping"}]}'

Once that returns a clean response, wiring it into a flow, bot, or Azure app is a matter of copying the same headers and body structure into whichever tool you're using.

questions

Does Microsoft offer a native Claude connector for Power Automate? No. There's no certified Claude connector in the Power Automate connector gallery. You use the generic HTTP action with a Claude-compatible API endpoint and key instead.

Can I use Claude inside Microsoft Teams without building a bot? Not directly — Teams doesn't expose a "call any AI model" setting. You need a Bot Framework registration whose backend calls Claude's API, which is a few hours of setup, not a toggle.

Is calling Claude from Azure Functions or App Service reliable for production workloads? Yes, it's a standard outbound HTTPS call like any third-party API integration. Add retry logic for transient failures and set reasonable timeouts, the same as you would for any external dependency.

Turn your Claude access into an HTTPS API

SubToAPI gives you application API keys, streaming, tool use and usage insights on top of your existing Claude access — set up in minutes.

Start free  Read the quickstart →