Install
openclaw skills install teams-anthropic-integrationUse @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.
openclaw skills install teams-anthropic-integrationUse @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.
Path A: Basic Setup (Recommended for getting started)
Path B: With You.com MCP (For web search capabilities)
Ask: Do you need web search and content extraction in your Teams app?
Use Anthropic Claude models in your Teams.ai app without additional dependencies.
npm install @youdotcom-oss/teams-anthropic @anthropic-ai/sdk @microsoft/teams.ai
Get your API key from console.anthropic.com
# Add to .env
ANTHROPIC_API_KEY=your-anthropic-api-key
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,
});
// 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
npm start
Send a message in Teams to verify Claude responds.
Add web search and content extraction to your Claude-powered Teams app.
npm install @youdotcom-oss/teams-anthropic @anthropic-ai/sdk @microsoft/teams.ai @microsoft/teams.mcpclient
# Add to .env
ANTHROPIC_API_KEY=your-anthropic-api-key
YDC_API_KEY=your-you-com-api-key
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);
npm start
Ask Claude a question that requires web search:
| Model | Enum | Best For |
|---|---|---|
| Claude Opus 4.5 | AnthropicModel.CLAUDE_OPUS_4_5 | Complex tasks, highest capability |
| Claude Sonnet 4.5 | AnthropicModel.CLAUDE_SONNET_4_5 | Balanced intelligence and speed (recommended) |
| Claude Haiku 3.5 | AnthropicModel.CLAUDE_HAIKU_3_5 | Fast responses, efficiency |
| Claude Sonnet 3.5 | AnthropicModel.CLAUDE_SONNET_3_5 | Previous generation, stable |
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);
},
}
);
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' };
},
},
},
}
);
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."
@youdotcom-oss/teams-anthropicANTHROPIC_API_KEYAnthropicChatModel@microsoft/teams.mcpclientYDC_API_KEYgetYouMcpConfig()"Cannot find module @youdotcom-oss/teams-anthropic"
npm install @youdotcom-oss/teams-anthropic @anthropic-ai/sdk
"ANTHROPIC_API_KEY environment variable is required"
ANTHROPIC_API_KEY=your-key-here"Invalid model identifier"
AnthropicModel.CLAUDE_SONNET_4_5'claude-sonnet-4-5-20250929'"YDC_API_KEY environment variable is required"
YDC_API_KEY=your-key-here"MCP connection fails"
"Cannot find module @microsoft/teams.mcpclient"
npm install @microsoft/teams.mcpclient
Automatically configures You.com MCP connection:
https://api.you.com/mcpYDC_API_KEY// Option 1: Use environment variable (recommended)
getYouMcpConfig()
// Option 2: Custom API key
getYouMcpConfig({ apiKey: 'your-custom-key' })