본문 바로가기

Copilot Studio

Microsoft Copilot Studio MCP lab

출처 : 

https://github.com/microsoft/mcsmcp/blob/main/README.md

 

mcsmcp/README.md at main · microsoft/mcsmcp

Lab for creating an MCP Server and using it in Microsoft Copilot Studio. - microsoft/mcsmcp

github.com

 

이 프로젝트는 Microsoft Copilot Studio와 연동되는 MCP (Model Context Protocol) 서버입니다.

🎯 프로젝트 목적

  • MCP 서버: AI 모델에 컨텍스트를 제공하는 표준화된 프로토콜 서버
  • Microsoft Copilot Studio 연동: 기업용 AI 챗봇 플랫폼과 연결
  • 농담 API 서비스: Chuck Norris 농담과 Dad Joke를 제공하는 예제 서버

🏗️ 기술 스택

  • 언어: TypeScript (Node.js 22)
  • 프레임워크: Express.js
  • MCP SDK: @modelcontextprotocol/sdk
  • 배포: Azure Container Apps (Docker 컨테이너)
  • 인프라: Azure Developer CLI (azd)

🏗️ 🎯 전체 구조

1. MCP 서버 생성

const server = new McpServer({
  name: "mcp-streamable-http",
  version: "1.0.0",
});


2. 4개의 도구(Tool) 정의
- `get-chuck-joke`: 랜덤 농담
- `get-chuck-joke-by-category`: 카테고리별 농담 (매개변수 있음)
- `get-chuck-categories`: 카테고리 목록
- `get-dad-joke`: 아빠 개그

3. Express.js 웹서버로 래핑
- POST `/mcp`: MCP 요청 처리
- GET `/mcp`: 405 에러 (허용되지 않음)
- DELETE `/mcp`: 405 에러 (허용되지 않음)

🔧 도구 작동 방식 예시

const getChuckJoke = server.tool(
  "get-chuck-joke",                    // 도구 이름
  "Get a random Chuck Norris joke",    // 설명
  async () => {                        // 실행 함수
    const response = await fetch("https://api.chucknorris.io/jokes/random");
    const data = await response.json();
    return {
      content: [{ type: "text", text: data.value }]
    };
  }
);


🎯 이해해야 할 핵심 개념
1. 매개변수가 없는 도구(get-chuck-joke)

server.tool("이름", "설명", async () => { ... })


2. 매개변수가 있는 도구(get-chuck-joke-by-category):

server.tool("이름", "설명", 
  { category: z.string().describe("카테고리") },  // 매개변수 정의
  async (params: { category: string }) => { ... } // 매개변수 사용
)


3. 외부 API 호출 패턴

const response = await fetch("외부 API URL");
const data = await response.json();
return { content: [{ type: "text", text: "결과" }] };


Read Me의 가이드대로 Docker 설치해서 배포를 시도했는데 Windows 11에서 Docker 실행이 되지 않는 이슈로 VS Code 아래 명령어를 터미널에 입력해서 Azure에 직접 배포했습니다. 

 

az webapp up --name mcsmcp-app --resource-group rg-mcsmcp --runtime "NODE:22-lts"