AI AGENT SKILLS

Build Teams.ai Apps with Anthropic Claude

一个面向 Research 场景的 Agent 技能。原始说明: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.

SKILL.md

SKILL.md


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.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
  1. 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';
  1. Validate You.com API key:
   if (!process.env.YDC_API_KEY) {
     throw new Error('YDC_API_KEY environment variable is required');
   }
  1. 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());
  1. 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

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

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