Build Teams.ai Apps with Anthropic Claude

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

MIT-0 · Free to use, modify, and redistribute. No attribution required.
1 · 1.7k · 0 current installs · 0 all-time installs
byEdward Irby@EdwardIrby
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
!
Purpose & Capability
The SKILL.md purpose (integrate Anthropic Claude into Teams.ai, optional You.com MCP) aligns with the runtime instructions which require ANTHROPIC_API_KEY and optionally YDC_API_KEY — those credentials are reasonable for the stated purpose. However, the skill registry metadata declares no required env vars or primary credential, which is inconsistent with the instructions and signals inaccurate or incomplete metadata.
Instruction Scope
The runtime instructions are limited to installing npm packages, configuring environment variables (.env), instantiating Anthropic/You.com clients, and wiring them into a Teams.ai app. They do not instruct reading unrelated system files, scanning local data, or sending data to unexpected endpoints beyond Anthropic and You.com. The code samples explicitly validate environment variables before use.
!
Install Mechanism
This is an instruction-only skill (no install spec), but it directs the user to run npm install for @youdotcom-oss/teams-anthropic and other packages. Because the skill has no source, homepage, or repository listed and the registry metadata lacks provenance, installing those npm packages would fetch third-party code whose origin and integrity are not verifiable from the skill metadata — this increases risk.
!
Credentials
The only runtime secrets the code needs are Anthropic (ANTHROPIC_API_KEY) and optionally You.com (YDC_API_KEY) keys, which are proportionate to the feature set. However the skill metadata does not declare these required environment variables, creating an inconsistency. No other unrelated credentials are requested in the instructions.
Persistence & Privilege
The skill does not request always:true, does not claim to modify other skills or system-wide settings, and is user-invocable. It does not request persistent elevated privileges in the provided instructions.
What to consider before installing
Before installing or using this skill: 1) Be aware the SKILL.md requires ANTHROPIC_API_KEY (and YDC_API_KEY if you enable You.com MCP) even though the skill metadata lists no required env vars — treat that as a metadata accuracy issue. 2) The instructions tell you to run npm install for @youdotcom-oss/teams-anthropic and other packages, but the skill provides no source, homepage, or repository to verify the package's provenance; verify the npm package owner, repository, and recent package contents on npmjs.org or the project repo before running installs. 3) Do not paste production API keys into public repos; store them in a secrets manager or environment restricted to the app. 4) If you need higher assurance, ask the skill author for the upstream repository or a package checksum, or run installation and testing in an isolated environment (container) and review the installed package code for unexpected network calls or shell execution. 5) If the author provides a verified source/repo and metadata is corrected to declare required env vars, my concern would be reduced.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.1.0
Download zip
anthropicvk9738wskkctx8sq6cdm2y6v5s980ajvtclaudevk9738wskkctx8sq6cdm2y6v5s980ajvtcontent-extractionvk9738wskkctx8sq6cdm2y6v5s980ajvtintegrationvk97661vx8ernsjxdqn18n61s5x80ax8vlatestvk9738wskkctx8sq6cdm2y6v5s980ajvtmcpvk9738wskkctx8sq6cdm2y6v5s980ajvtmicrosoft-teamsvk9738wskkctx8sq6cdm2y6v5s980ajvtteams-aivk9738wskkctx8sq6cdm2y6v5s980ajvtweb-searchvk9738wskkctx8sq6cdm2y6v5s980ajvtyou.comvk9738wskkctx8sq6cdm2y6v5s980ajvt

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

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

# 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:

  1. Install MCP dependencies:

    npm install @microsoft/teams.mcpclient
    
  2. 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';
    
  3. Validate You.com API key:

    if (!process.env.YDC_API_KEY) {
      throw new Error('YDC_API_KEY environment variable is required');
    }
    
  4. 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());
    
  5. 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 https://example.com"

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"

"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"

"MCP connection fails"

"Cannot find module @microsoft/teams.mcpclient"

npm install @microsoft/teams.mcpclient

getYouMcpConfig() Utility

Automatically configures You.com MCP connection:

  • URL: https://api.you.com/mcp
  • 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

Files

1 total
Select a file
Select a file to preview.

Comments

Loading comments…