AI & LLMsDocumentedScanned

teams-anthropic-integration

Use @youdotcom-oss/teams-anthropic to add Anthropic Claude models (Opus, Sonnet, Haiku) to Microsoft Teams.ai applica.

Share:

Installation

npx clawhub@latest install teams-anthropic-integration

View the full skill documentation and source below.

Documentation

Build Teams.ai Apps with Anthropic Claude

Use @youdotcom-oss/teams-anthropic to add Claude models (Opus, Sonnet, Haiku) to Microsoft Teams.ai applications. Optionally integrate You.com MCP server for web search and content extraction.

Choose Your Path

Path A: Basic Setup (Recommended for getting started)

  • Use Anthropic Claude models in Teams.ai

  • Chat, streaming, function calling

  • No additional dependencies


Path B: With You.com MCP (For web search capabilities)
  • Everything in Path A

  • Web search and content extraction via You.com

  • Real-time information access


Decision Point

Ask: Do you need web search and content extraction in your Teams app?

  • NO → Use Path A: Basic Setup (simpler, faster)
  • YES → Use Path B: With You.com MCP

Path A: Basic Setup

Use Anthropic Claude models in your Teams.ai app without additional dependencies.

A1. Install Package

npm install @youdotcom-oss/teams-anthropic @anthropic-ai/sdk @microsoft/teams.ai

A2. Get Anthropic API Key

Get your API key from [console.anthropic.com]()

# Add to .env
ANTHROPIC_API_KEY=your-anthropic-api-key

A3. Ask: New or Existing App?

  • New Teams app: Use entire template below
  • Existing app: Add Claude model to existing setup

A4. Basic Template

For NEW Apps:

import { App } from '@microsoft/teams.apps';
import { AnthropicChatModel, AnthropicModel } from '@youdotcom-oss/teams-anthropic';

if (!process.env.ANTHROPIC_API_KEY) {
  throw new Error('ANTHROPIC_API_KEY environment variable is required');
}

const model = new AnthropicChatModel({
  model: AnthropicModel.CLAUDE_SONNET_4_5,
  apiKey: process.env.ANTHROPIC_API_KEY,
  requestOptions: {
    max_tokens: 2048,
    temperature: 0.7,
  },
});

const app = new App();

app.on('message', async ({ send, activity }) => {
  await send({ type: 'typing' });

  const response = await model.send(
    { role: 'user', content: activity.text }
  );

  if (response.content) {
    await send(response.content);
  }
});

app.start().catch(console.error);

For EXISTING Apps:

Add to your existing imports:

import { AnthropicChatModel, AnthropicModel } from '@youdotcom-oss/teams-anthropic';

Replace your existing model:

const model = new AnthropicChatModel({
  model: AnthropicModel.CLAUDE_SONNET_4_5,
  apiKey: process.env.ANTHROPIC_API_KEY,
});

A5. Choose Your Model

// Most capable - best for complex tasks
AnthropicModel.CLAUDE_OPUS_4_5

// Balanced intelligence and speed (recommended)
AnthropicModel.CLAUDE_SONNET_4_5

// Fast and efficient
AnthropicModel.CLAUDE_HAIKU_3_5

A6. Test Basic Setup

npm start

Send a message in Teams to verify Claude responds.


Path B: With You.com MCP

Add web search and content extraction to your Claude-powered Teams app.

B1. Install Packages

npm install @youdotcom-oss/teams-anthropic @anthropic-ai/sdk @microsoft/teams.ai @microsoft/teams.mcpclient

B2. Get API Keys

  • Anthropic API key: [console.anthropic.com]()
  • You.com API key: [you.com/platform/api-keys]()
# Add to .env
ANTHROPIC_API_KEY=your-anthropic-api-key
YDC_API_KEY=your-you-com-api-key

B3. Ask: New or Existing App?

  • New Teams app: Use entire template below
  • Existing app: Add MCP to existing Claude setup

B4. MCP Template

For NEW Apps:

import { App } from '@microsoft/teams.apps';
import { ChatPrompt } from '@microsoft/teams.ai';
import { ConsoleLogger } from '@microsoft/teams.common';
import { McpClientPlugin } from '@microsoft/teams.mcpclient';
import {
  AnthropicChatModel,
  AnthropicModel,
  getYouMcpConfig,
} from '@youdotcom-oss/teams-anthropic';

// Validate environment
if (!process.env.ANTHROPIC_API_KEY) {
  throw new Error('ANTHROPIC_API_KEY environment variable is required');
}

if (!process.env.YDC_API_KEY) {
  throw new Error('YDC_API_KEY environment variable is required');
}

// Configure logger
const logger = new ConsoleLogger('mcp-client', { level: 'info' });

// Create prompt with MCP integration
const prompt = new ChatPrompt(
  {
    instructions: 'You are a helpful assistant with access to web search and content extraction. Use these tools to provide accurate, up-to-date information.',
    model: new AnthropicChatModel({
      model: AnthropicModel.CLAUDE_SONNET_4_5,
      apiKey: process.env.ANTHROPIC_API_KEY,
      requestOptions: {
        max_tokens: 2048,
      },
    }),
  },
  [new McpClientPlugin({ logger })],
).usePlugin('mcpClient', getYouMcpConfig());

const app = new App();

app.on('message', async ({ send, activity }) => {
  await send({ type: 'typing' });

  const result = await prompt.send(activity.text);
  if (result.content) {
    await send(result.content);
  }
});

app.start().catch(console.error);

For EXISTING Apps with Claude:

If you already have Path A setup, add MCP integration:

  • Install MCP dependencies:

  • npm install @microsoft/teams.mcpclient

  • Add imports:

  • import { ChatPrompt } from '@microsoft/teams.ai';
       import { ConsoleLogger } from '@microsoft/teams.common';
       import { McpClientPlugin } from '@microsoft/teams.mcpclient';
       import { getYouMcpConfig } from '@youdotcom-oss/teams-anthropic';

  • Validate You.com API key:

  • if (!process.env.YDC_API_KEY) {
         throw new Error('YDC_API_KEY environment variable is required');
       }

  • Replace model with ChatPrompt:

  • const logger = new ConsoleLogger('mcp-client', { level: 'info' });
    
       const prompt = new ChatPrompt(
         {
           instructions: 'Your instructions here',
           model: new AnthropicChatModel({
             model: AnthropicModel.CLAUDE_SONNET_4_5,
             apiKey: process.env.ANTHROPIC_API_KEY,
           }),
         },
         [new McpClientPlugin({ logger })],
       ).usePlugin('mcpClient', getYouMcpConfig());

  • Use prompt.send() instead of model.send():

  • const result = await prompt.send(activity.text);

    B5. Test MCP Integration

    npm start

    Ask Claude a question that requires web search:

    • "What are the latest developments in AI?"

    • "Search for React documentation"

    • "Extract content from "



    Available Claude Models

    ModelEnumBest For
    Claude Opus 4.5AnthropicModel.CLAUDE_OPUS_4_5Complex tasks, highest capability
    Claude Sonnet 4.5AnthropicModel.CLAUDE_SONNET_4_5Balanced intelligence and speed (recommended)
    Claude Haiku 3.5AnthropicModel.CLAUDE_HAIKU_3_5Fast responses, efficiency
    Claude Sonnet 3.5AnthropicModel.CLAUDE_SONNET_3_5Previous generation, stable

    Advanced Features

    Streaming Responses

    const response = await model.send(
      { role: 'user', content: 'Write a short story' },
      {
        onChunk: async (delta) => {
          // Stream each token as it arrives
          process.stdout.write(delta);
        },
      }
    );

    Function Calling

    const response = await model.send(
      { role: 'user', content: 'What is the weather in San Francisco?' },
      {
        functions: {
          get_weather: {
            description: 'Get the current weather for a location',
            parameters: {
              location: { type: 'string', description: 'City name' },
            },
            handler: async (args: { location: string }) => {
              // Your API call here
              return { temperature: 72, conditions: 'Sunny' };
            },
          },
        },
      }
    );

    Conversation Memory

    import { LocalMemory } from '@microsoft/teams.ai';
    
    const memory = new LocalMemory();
    
    // First message
    await model.send(
      { role: 'user', content: 'My name is Alice' },
      { messages: memory }
    );
    
    // Second message - Claude remembers
    const response = await model.send(
      { role: 'user', content: 'What is my name?' },
      { messages: memory }
    );
    // Response: "Your name is Alice."

    Validation Checklist

    Path A Checklist

    • Package installed: @youdotcom-oss/teams-anthropic
    • Environment variable set: ANTHROPIC_API_KEY
    • Model configured with AnthropicChatModel
    • Model selection chosen (Opus/Sonnet/Haiku)
    • App tested with basic messages

    Path B Checklist

    • All Path A items completed
    • Additional package installed: @microsoft/teams.mcpclient
    • Environment variable set: YDC_API_KEY
    • Logger configured
    • ChatPrompt configured with getYouMcpConfig()
    • App tested with web search queries

    Common Issues

    Path A Issues

    "Cannot find module @youdotcom-oss/teams-anthropic"

    npm install @youdotcom-oss/teams-anthropic @anthropic-ai/sdk

    "ANTHROPIC_API_KEY environment variable is required"

    • Get key from:

    • Add to .env: ANTHROPIC_API_KEY=your-key-here


    "Invalid model identifier"
    • Use enum: AnthropicModel.CLAUDE_SONNET_4_5

    • Don't use string: 'claude-sonnet-4-5-20250929'


    Path B Issues

    "YDC_API_KEY environment variable is required"

    • Get key from:

    • Add to .env: YDC_API_KEY=your-key-here


    "MCP connection fails"
    • Verify API key is valid at

    • Check network connectivity

    • Review logger output for details


    "Cannot find module @microsoft/teams.mcpclient"
    npm install @microsoft/teams.mcpclient

    getYouMcpConfig() Utility

    Automatically configures You.com MCP connection:

    • URL: - **Authentication**: Bearer token from YDC_API_KEY`

    • User-Agent: Includes package version for telemetry


    // Option 1: Use environment variable (recommended)
    getYouMcpConfig()
    
    // Option 2: Custom API key
    getYouMcpConfig({ apiKey: 'your-custom-key' })

    Resources

    • Package:
    • You.com MCP:
    • Anthropic API:
    • You.com API Keys: