- name
- teams-anthropic-integration
- description
- 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.
- license
- MIT
- compatibility
- Node.js 18+, @microsoft/teams.ai
- metadata
- author
- youdotcom-oss
- category
- enterprise-integration
- version
- 1.1.0
- keywords
- microsoft-teams,teams-ai,anthropic,claude,mcp,you.com,web-search,content-extraction
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.aiA2. Get Anthropic API Key
Get your API key from console.anthropic.com
# Add to .env
ANTHROPIC_API_KEY=your-anthropic-api-keyA3. 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_5A6. Test Basic Setup
npm startSend 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.mcpclientB2. 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-keyB3. 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 startAsk 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.mcpclientgetYouMcpConfig() 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