Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Microsoft 365 Agents SDK for TypeScript/Node.js. Build multichannel agents for Teams/M365/Copilot Studio with AgentApplication routing, Express hosting, streaming responses, and Copilot Studio client integration. Triggers: "Microsoft 365 Agents SDK", "@microsoft/agents-hosting", "AgentApplication", "startServer", "streamingResponse", "Copilot Studio client", "@microsoft/agents-copilotstudio-client".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 177% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 138% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 9% | 0% |
Build enterprise agents for Microsoft 365, Teams, and Copilot Studio using the Microsoft 365 Agents SDK with Express hosting, AgentApplication routing, streaming responses, and Copilot Studio client integrations.
bashnpm install @microsoft/agents-hosting @microsoft/agents-hosting-express @microsoft/agents-activity npm install @microsoft/agents-copilotstudio-client
bashPORT=3978 AZURE_RESOURCE_NAME=<azure-openai-resource> AZURE_API_KEY=<azure-openai-key> AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4o-mini TENANT_ID=<tenant-id> CLIENT_ID=<client-id> CLIENT_SECRET=<client-secret> COPILOT_ENVIRONMENT_ID=<environment-id> COPILOT_SCHEMA_NAME=<schema-name> COPILOT_CLIENT_ID=<copilot-app-client-id> COPILOT_BEARER_TOKEN=<copilot-jwt>
typescriptimport { AgentApplication, TurnContext, TurnState, } from "@microsoft/agents-hosting"; import { startServer } from "@microsoft/agents-hosting-express"; const agent = new AgentApplication<TurnState>(); agent.onConversationUpdate("membersAdded", async (context: TurnContext) => { await context.sendActivity("Welcome to the agent."); }); agent.onMessage("hello", async (context: TurnContext) => { await context.sendActivity(`Echo: ${context.activity.text}`); }); startServer(agent);
typescriptimport { azure } from "@ai-sdk/azure"; import { AgentApplication, TurnContext, TurnState, } from "@microsoft/agents-hosting"; import { startServer } from "@microsoft/agents-hosting-express"; import { streamText } from "ai"; const agent = new AgentApplication<TurnState>(); agent.onMessage("poem", async (context: TurnContext) => { context.streamingResponse.setFeedbackLoop(true); context.streamingResponse.setGeneratedByAILabel(true); context.streamingResponse.setSensitivityLabel({ type: "https://schema.org/Message", "@type": "CreativeWork", name: "Internal", }); await context.streamingResponse.queueInformativeUpdate("starting a poem..."); const { fullStream } = streamText({ model: azure(process.env.AZURE_OPENAI_DEPLOYMENT_NAME || "gpt-4o-mini"), system: "You are a creative assistant.", prompt: "Write a poem about Apollo.", }); try { for await (const part of fullStream) { if (part.type === "text-delta" && part.text.length > 0) { await context.streamingResponse.queueTextChunk(part.text); } if (part.type === "error") { throw new Error(`Streaming error: ${part.error}`); } } } finally { await context.streamingResponse.endStream(); } }); startServer(agent);
typescriptimport { Activity, ActivityTypes } from "@microsoft/agents-activity"; import { AgentApplication, TurnContext, TurnState, } from "@microsoft/agents-hosting"; const agent = new AgentApplication<TurnState>(); agent.onActivity("invoke", async (context: TurnContext) => { const invokeResponse = Activity.fromObject({ type: ActivityTypes.InvokeResponse, value: { status: 200 }, }); await context.sendActivity(invokeResponse); await context.sendActivity("Thanks for submitting your feedback."); });
typescriptimport { CopilotStudioClient } from "@microsoft/agents-copilotstudio-client"; const settings = { environmentId: process.env.COPILOT_ENVIRONMENT_ID!, schemaName: process.env.COPILOT_SCHEMA_NAME!, clientId: process.env.COPILOT_CLIENT_ID!, }; const tokenProvider = async (): Promise<string> => { return process.env.COPILOT_BEARER_TOKEN!; }; const client = new CopilotStudioClient(settings, tokenProvider); const conversation = await client.startConversationAsync(); const reply = await client.askQuestionAsync("Hello!", conversation.id); console.log(reply);
typescriptimport { CopilotStudioWebChat } from "@microsoft/agents-copilotstudio-client"; const directLine = CopilotStudioWebChat.createConnection(client, { showTyping: true, }); window.WebChat.renderWebChat( { directLine, }, document.getElementById("webchat")!, );
| Resource | URL | | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | Microsoft 365 Agents SDK | https://learn.microsoft.com/en-us/microsoft-365/agents-sdk/ | | JavaScript SDK overview | https://learn.microsoft.com/en-us/javascript/api/overview/agents-overview?view=agents-sdk-js-latest | | @microsoft/agents-hosting-express | https://learn.microsoft.com/en-us/javascript/api/%40microsoft/agents-hosting-express?view=agents-sdk-js-latest | | @microsoft/agents-copilotstudio-client | https://learn.microsoft.com/en-us/javascript/api/%40microsoft/agents-copilotstudio-client?view=agents-sdk-js-latest | | Integrate with Copilot Studio | https://learn.microsoft.com/en-us/microsoft-365/agents-sdk/integrate-with-mcs | | GitHub samples | https://github.com/microsoft/Agents/tree/main/samples/nodejs |
Other measured skills in the registry, with their headline benchmark lift.