teams-anthropic-integration

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.

7 stars

Best use case

teams-anthropic-integration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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.

Teams using teams-anthropic-integration should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/teams-anthropic-integration/SKILL.md --create-dirs "https://raw.githubusercontent.com/Demerzels-lab/elsamultiskillagent/main/public/skills/edwardirby/teams-anthropic-integration/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/teams-anthropic-integration/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How teams-anthropic-integration Compares

Feature / Agentteams-anthropic-integrationStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 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

```bash
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](https://console.anthropic.com/)

```bash
# 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:**

```typescript
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:
```typescript
import { AnthropicChatModel, AnthropicModel } from '@youdotcom-oss/teams-anthropic';
```

Replace your existing model:
```typescript
const model = new AnthropicChatModel({
  model: AnthropicModel.CLAUDE_SONNET_4_5,
  apiKey: process.env.ANTHROPIC_API_KEY,
});
```

### A5. Choose Your Model

```typescript
// 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

```bash
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

```bash
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](https://console.anthropic.com/)
- **You.com API key**: [you.com/platform/api-keys](https://you.com/platform/api-keys)

```bash
# 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:**

```typescript
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:**
   ```bash
   npm install @microsoft/teams.mcpclient
   ```

2. **Add imports:**
   ```typescript
   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:**
   ```typescript
   if (!process.env.YDC_API_KEY) {
     throw new Error('YDC_API_KEY environment variable is required');
   }
   ```

4. **Replace model with ChatPrompt:**
   ```typescript
   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():**
   ```typescript
   const result = await prompt.send(activity.text);
   ```

### B5. Test MCP Integration

```bash
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

```typescript
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

```typescript
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

```typescript
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"**
```bash
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"**
```bash
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

```typescript
// 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

Related Skills

sap-integration

7
from Demerzels-lab/elsamultiskillagent

SAP system integration, data extraction, and automation for ABAP, HANA, S/4HANA environments.

teams-hack

7
from Demerzels-lab/elsamultiskillagent

Your agent reads Teams chats, posts to channels, searches everything.

kimi-integration

7
from Demerzels-lab/elsamultiskillagent

Step-by-step guide for integrating Moonshot AI (Kimi) and Kimi Code models into Clawdbot. Use when someone asks how to add Kimi models, configure Moonshot AI, or set up Kimi for Coding in Clawdbot.

ydc-openai-agent-sdk-integration

7
from Demerzels-lab/elsamultiskillagent

Integrate OpenAI Agents SDK with You.com MCP server - Hosted and Streamable HTTP support for Python and TypeScript. Use when developer mentions OpenAI Agents SDK, OpenAI agents, or integrating OpenAI with MCP.

ydc-claude-agent-sdk-integration

7
from Demerzels-lab/elsamultiskillagent

Integrate Claude Agent SDK with You.com HTTP MCP server for Python and TypeScript. Use when developer mentions Claude Agent SDK, Anthropic Agent SDK, or integrating Claude with MCP tools.

ydc-ai-sdk-integration

7
from Demerzels-lab/elsamultiskillagent

Integrate Vercel AI SDK applications with You.com tools (web search, AI agent, content extraction). Use when developer mentions AI SDK, Vercel AI SDK, generateText, streamText, or You.com integration with AI SDK.

Microsoft 365 Integration

7
from Demerzels-lab/elsamultiskillagent

## Description

self-integration

7
from Demerzels-lab/elsamultiskillagent

Connect to any external app and perform actions on it.

lark-integration

7
from Demerzels-lab/elsamultiskillagent

Connect Lark (Feishu) messaging to OpenClaw via webhook bridge. Supports text, rich text (post), and image messages bidirectionally. Use when setting up Lark/Feishu as a messaging channel, receiving messages with images, sending replies back to Lark, reading Lark documents/wikis/bitables, or troubleshooting Lark integration issues. Covers both Lark International (larksuite.com) and China Feishu (feishu.cn).

Craft.do Integration Skill

7
from Demerzels-lab/elsamultiskillagent

Complete REST API integration for Craft.do - the beautiful note-taking and document app.

ms-outlook-teams-assistant

7
from Demerzels-lab/elsamultiskillagent

Track and nag about Microsoft Outlook email and (optionally) Microsoft Teams messages on a Windows machine, without relying on web versions. Use when the user asks to: (1) monitor inbox/mentions and remind them on Telegram/Teams until dismissed, (2) draft short, personable, low-jargon email replies from an existing Outlook thread, (3) surface action items from the last N days (default 7). Works via Outlook Desktop automation (COM) and optionally Microsoft Graph for Teams if configured.

paylock

7
from Demerzels-lab/elsamultiskillagent

Non-custodial SOL escrow for AI agent deals.