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.mcpclientAdd 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 https://example.com"
Available Claude Models
| 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 |
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: https://console.anthropic.com/
- 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: https://you.com/platform/api-keys
- Add to .env:
YDC_API_KEY=your-key-here
"MCP connection fails"
- Verify API key is valid at https://you.com/platform/api-keys
- 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:
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
- Package: https://github.com/youdotcom-oss/dx-toolkit/tree/main/packages/teams-anthropic
- You.com MCP: https://documentation.you.com/developer-resources/mcp-server
- Anthropic API: https://console.anthropic.com/
- You.com API Keys: https://you.com/platform/api-keys