Skip to main content

MCP(๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ํ™•์žฅ

MCP(๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋Š” ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ„์ „์ด๋ฉฐ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ค‘ ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ์€ GitHub ์‹œํ—˜ํŒ ์‚ฌ์šฉ ์กฐ๊ฑด์„(๋ฅผ) ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ „์ œ ์กฐ๊ฑด

Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์— ๋Œ€ํ•œ MCP ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์ „์— Model Context Protocol (MCP) and GitHub Copilot coding agent์„(๋ฅผ) ์ฝ์–ด MCP ์„œ๋ฒ„ ๋ฐ Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†Œ๊ฐœ

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ด€๋ฆฌ์ž๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ MCP ์„œ๋ฒ„์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ง€์ •ํ•˜๋Š” JSON ํ˜•์‹ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. GitHub.com์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •์— JSON ๊ตฌ์„ฑ์„ ์ง์ ‘ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด Copilot์ด ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ž์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž์˜ ์Šน์ธ์„ ์š”์ฒญํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— MCP ๊ตฌ์„ฑ ์ถ”๊ฐ€

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์— ๋”ฐ๋ผ MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. "์„ค์ •" ํƒญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํƒญ์„ ๋ณด์—ฌ ์ฃผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ—ค๋”์˜ ์Šคํฌ๋ฆฐ์ƒท. "์„ค์ •" ํƒญ์ด ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ์‚ฌ์ด๋“œ๋ฐ”์˜ "Code & automation" ์„น์…˜์—์„œ Copilot, ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๋ฅผ ์ฐจ๋ก€๋กœ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. MCP configuration ์„น์…˜์—์„œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๋ฌธ์„œ์˜ ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์—ฌ๊ธฐ์— ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” JSON ๊ตฌ์„ฑ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  5. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ๊ตฌ์„ฑ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์ ํ•ฉํ•œ ๊ตฌ๋ฌธ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  6. MCP ์„œ๋ฒ„์— ํ‚ค ๋˜๋Š” ๋น„๋ฐ€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, Copilot ํ™˜๊ฒฝ์— ๋น„๋ฐ€์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. COPILOT_MCP_ ์ ‘๋‘์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์ด ์žˆ๋Š” ๋น„๋ฐ€๋งŒ MCP ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ Copilot ํ™˜๊ฒฝ ์„ค์ •.์„ ์ฐธ์กฐํ•˜์„ธ์š”.

MCP ์„œ๋ฒ„์— ๋Œ€ํ•œ JSON ๊ตฌ์„ฑ ์ž‘์„ฑ

ํŠน๋ณ„ํ•œ JSON ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด JSON์—๋Š” mcpServers ๊ฐœ์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ‚ค๋Š” MCP ์„œ๋ฒ„์˜ ์ด๋ฆ„(์˜ˆ: sentry)์ด๊ณ , ๊ฐ’์€ ํ•ด๋‹น MCP ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ์ด ์žˆ๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.

JSON
{
  "mcpServers": {
    "MCP SERVER 1": {
      "command": "VALUE",
      "args": [ VALUES ],
      ...
    },
    "MCP SERVER 2": {
      "command": "VALUE",
      "args": [ VALUES ],
      ...
    },
    ...
  }
}

๊ตฌ์„ฑ ๊ฐœ์ฒด์—๋Š” ๋‹ค์Œ ํ‚ค๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ์ปฌ ๋ฐ ์›๊ฒฉ MCP ์„œ๋ฒ„์— ํ•„์š”ํ•œ ํ‚ค

  • tools(string[]): MCP ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋„๊ตฌ ๋ชฉ๋ก์€ ์„œ๋ฒ„ ๋ฌธ์„œ๋‚˜ ์ฝ”๋“œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์ž์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๋จผ์ € ์Šน์ธ์„ ์š”์ฒญํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŠน์ • ์ฝ๊ธฐ ์ „์šฉ ๋„๊ตฌ๋ฅผ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. *๋ฅผ ๋ฐฐ์—ด์— ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • type(string): Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋Š” "local", "http" ๋˜๋Š” "sse"๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ MCP ํŠน์ • ํ‚ค

  • command(string): ํ•„์ˆ˜ ์‚ฌํ•ญ. MCP ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•  ๋ช…๋ น์ž…๋‹ˆ๋‹ค.
  • args(string[]): ํ•„์ˆ˜ ์‚ฌํ•ญ. command์— ์ „๋‹ฌํ•  ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • env(object): ์„ ํƒ ์‚ฌํ•ญ. ์„œ๋ฒ„์— ์ „๋‹ฌํ•  ํ™˜๊ฒฝ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฐœ์ฒด๋Š” MCP ์„œ๋ฒ„์— ๋…ธ์ถœ๋˜์–ด์•ผ ํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์— ๋งคํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ์„ฑ๋œ GitHub Actions ๋น„๋ฐ€์˜ ์ด๋ฆ„(COPILOT_MCP_๋กœ ์‹œ์ž‘)์ž…๋‹ˆ๋‹ค.
    • ๋ฌธ์ž์—ด ๊ฐ’์ž…๋‹ˆ๋‹ค.

์›๊ฒฉ MCP ํŠน์ • ํ‚ค

  • url(string): ํ•„์ˆ˜ ์‚ฌํ•ญ. MCP ์„œ๋ฒ„์˜ URL์ž…๋‹ˆ๋‹ค.
  • headers(object): ์„ ํƒ ์‚ฌํ•ญ. ์„œ๋ฒ„์— ๋Œ€ํ•œ ์š”์ฒญ์— ์—ฐ๊ฒฐํ•  ํ—ค๋”์ž…๋‹ˆ๋‹ค. ์ด ๊ฐœ์ฒด๋Š” ํ—ค๋” ํ‚ค์˜ ์ด๋ฆ„์„ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์— ๋งคํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ์„ฑ๋œ GitHub Actions ๋น„๋ฐ€์˜ ์ด๋ฆ„์œผ๋กœ, $ ๋‹ค์Œ์— COPILOT_MCP_๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
    • ๋ฌธ์ž์—ด ๊ฐ’

๊ตฌ์„ฑ ์˜ˆ

์˜ˆ: Sentry

Sentry MCP ์„œ๋ฒ„๋Š” Copilot์ด Sentry์— ๊ธฐ๋ก๋œ ์˜ˆ์™ธ์— ์ธ์ฆ๋œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

JavaScript
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON.
{
  "mcpServers": {
    "sentry": {
      "type": "local",
      "command": "npx",
      // We can use the $SENTRY_HOST environment variable which is passed to
      // the server because of the `env` value below.
      "args": ["@sentry/mcp-server@latest", "--host=$SENTRY_HOST"],
      "tools": ["get_issue_details", "get_issue_summary"],
      "env": {
        // We can specify an environment variable value as a string...
        "SENTRY_HOST": "https://contoso.sentry.io",
        // or refer to a GitHub Actions secret with a name starting with
        // `COPILOT_MCP_`
        "SENTRY_ACCESS_TOKEN": "COPILOT_MCP_SENTRY_ACCESS_TOKEN"
      }
    }
  }
}

์˜ˆ: Notion

Notion MCP ์„œ๋ฒ„๋Š” Copilot์ด Notion์˜ ๋…ธํŠธ์™€ ๊ธฐํƒ€ ์ฝ˜ํ…์ธ ์— ์ธ์ฆ๋œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

JavaScript
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON.
{
  "mcpServers": {
    "notionApi": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        // We can use the $NOTION_API_KEY environment variable which is passed to
        // the server because of the `env` value below.
        "OPENAPI_MCP_HEADERS={\"Authorization\": \"Bearer $NOTION_API_KEY\", \"Notion-Version\": \"2022-06-28\"}",
       "mcp/notion"
      ],
      "env": {
        // The value of the `COPILOT_MCP_NOTION_API_KEY` secret will be passed to the
        // server command as an environment variable called `NOTION_API_KEY`
        "NOTION_API_KEY": "COPILOT_MCP_NOTION_API_KEY"
      },
      "tools": ["*"]
    }
  }
}

์˜ˆ์ œ: Azure

Azure MCP ์„œ๋ฒ„๋Š” Copilot๊ณผ Azure Cosmos DB ๋ฐ Azure Storage ํ”Œ๋žซํผ๊ณผ ๊ฐ™์€ ์ฃผ์š” Azure ์„œ๋น„์Šค ๊ฐ„์— ์›ํ™œํ•œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์™€ ํ•จ๊ป˜ Azure MCP๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Azure ๋กœ๊ทธ์ธ ์›Œํฌํ”Œ๋กœ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜๋„๋ก ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ copilot-setup-steps.yml ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. GitHub๋ฅผ ์‹ ๋ขฐํ•˜์—ฌ Microsoft Entra ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ OIDC๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. OpenID Connect๋กœ Azure ๋กœ๊ทธ์ธ ์ž‘์—… ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ์•„์ง ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด, .github/workflows/copilot-setup-steps.yml Actions ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

  3. copilot-setup-steps ์›Œํฌํ”Œ๋กœ ์ž‘์—…์— Azure ๋กœ๊ทธ์ธ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    YAML
    on:
      workflow_dispatch:
    permissions:
      id-token: write
      contents: read
    jobs:
      copilot-setup-steps:
        runs-on: ubuntu-latest
        permissions:
          id-token: write
          contents: read
        environment: copilot
        steps:
          - name: Azure login
            uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    ์ด ๊ตฌ์„ฑ์€ Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, azure/login ์ž‘์—…์ด ์‹คํ–‰๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ Copilot ํ™˜๊ฒฝ์—์„œ AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_SUBSCRIPTION_ID๋ฅผ ์œ„ํ•œ ๋น„๋ฐ€์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  5. MCP ๊ตฌ์„ฑ์— azure ๊ฐœ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ Azure MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

JSON
 {
   "mcpServers": {
     "Azure": {
      "type": "local",
      "command": "npx",
      "args": [
        "-y",
        "@azure/mcp@latest",
        "server",
        "start"
       ],
      "tools": ["*"]
     }
   }
 }

์˜ˆ: Cloudflare

Cloudflare MCP ์„œ๋ฒ„๋Š” ์ฒ˜๋ฆฌ ๋ฌธ์„œ ๋ฐ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํฌํ•จํ•˜๋Š” Cloudflare ์„œ๋น„์Šค ๊ฐ„์— ์—ฐ๊ฒฐ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

JSON
{
  "mcpServers": {
    "cloudflare": {
      "type": "sse",
      "url": "https://docs.mcp.cloudflare.com/sse",
      "tools": ["*"]
    }
  }
}

Visual Studio Code์—์„œ MCP ๊ตฌ์„ฑ ๋‹ค์‹œ ์‚ฌ์šฉ

VS Code์—์„œ MCP ์„œ๋ฒ„๋ฅผ ์ด๋ฏธ ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ, Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์— ๋Œ€ํ•ด ์œ ์‚ฌํ•œ ๊ตฌ์„ฑ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VS Code๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ .vscode/mcp.json ํŒŒ์ผ์ด๋‚˜ ๋จธ์‹ ์˜ ํ”„๋ผ์ด๋น— settings.json ํŒŒ์ผ์—์„œ MCP ์„ค์ •์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์กฐ์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ MCP ์„œ๋ฒ„์— ๋Œ€ํ•ด tools ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ Copilot์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. inputs๋ฅผ ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ, env๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. envFile์„ ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ, env๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. args ๊ตฌ์„ฑ์—์„œ inputs์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋Œ€์‹  env์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

VS Code์˜ MCP์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ VS Code ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ Copilot ํ™˜๊ฒฝ ์„ค์ •

์ผ๋ถ€ MCP ์„œ๋ฒ„์—๋Š” ํ‚ค ๋˜๋Š” ๋น„๋ฐ€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์—์„œ ์ด๋Ÿฌํ•œ ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด Copilot ํ™˜๊ฒฝ์— ๋น„๋ฐ€์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋น„๋ฐ€์ด ์ œ๋Œ€๋กœ ์ธ์‹๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑํ•œ ํ•ด๋‹น MCP ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ Copilot ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ด€๋ฆฌ์ž๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. "์„ค์ •" ํƒญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํƒญ์„ ๋ณด์—ฌ ์ฃผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ—ค๋”์˜ ์Šคํฌ๋ฆฐ์ƒท. "์„ค์ •" ํƒญ์ด ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ํ™˜๊ฒฝ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ์ƒˆ ํ™˜๊ฒฝ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ์ƒˆ ํ™˜๊ฒฝ์„ copilot์œผ๋กœ ์ง€์ •ํ•˜๊ณ  Configure environment๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  6. "Environment secrets"์—์„œ Add environment secret์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ๋น„๋ฐ€ ์ด๋ฆ„์„ COPILOT_MCP_๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ์„ค์ •ํ•˜๊ณ , ๋น„๋ฐ€ ๊ฐ’์„ ์ž…๋ ฅํ•œ ๋‹ค์Œ, Add secret์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

MCP ๊ตฌ์„ฑ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

MCP ๊ตฌ์„ฑ์„ ์„ค์ •ํ•œ ํ›„, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ด์Šˆ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ, ์ด๋ฅผ Copilot์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ช‡ ์ดˆ ํ›„, Copilot์€ ์ด์Šˆ์— ๐Ÿ‘€ ๋ฐ˜์‘์„ ๋‚จ๊น๋‹ˆ๋‹ค.
  3. ๋ช‡ ์ดˆ ํ›„, Copilot์—์„œ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์€ ์ด์Šˆ์˜ ํƒ€์ž„๋ผ์ธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. ํƒ€์ž„๋ผ์ธ์—์„œ ๋งŒ๋“  ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ํด๋ฆญํ•˜๊ณ  "Copilot started work" ํƒ€์ž„๋ผ์ธ ์ด๋ฒคํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  5. View session์„ ํด๋ฆญํ•˜์—ฌ Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๋กœ๊ทธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  6. ๋กœ๊ทธ ๋ทฐ์–ด์˜ ์˜ค๋ฅธ์ชฝ ์œ„์— ์žˆ๋Š” ์ค„์ž„ํ‘œ ๋‹จ์ถ”(...)๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ, ์‚ฌ์ด๋“œ๋ฐ”์—์„œ Copilot ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  7. Start MCP Servers ๋‹จ๊ณ„๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
  8. MCP ์„œ๋ฒ„๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘๋œ ๊ฒฝ์šฐ, ๋กœ๊ทธ ์•„๋ž˜์ชฝ์— ํ•ด๋‹น ๋„๊ตฌ๊ฐ€ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.

MCP ์„œ๋ฒ„์— GitHub Actions ์‹คํ–‰๊ธฐ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์ง€ ์•Š์€ ์ข…์†์„ฑ(์˜ˆ: uv ๋ฐ pipx)์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ํŠน๋ณ„ํ•œ ์„ค์ • ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, copilot-setup-steps.yml Actions ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ด๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Copilot ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธฐ๋ณธ ์ œ๊ณต GitHub MCP ์„œ๋ฒ„ ์‚ฌ์šฉ์ž ์ง€์ •

GitHub MCP ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ ์•ก์„ธ์Šค ๊ถŒํ•œ๋งŒ ์žˆ๋Š” ํŠน๋ณ„ํžˆ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Copilot์ด ํ˜„์žฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์™ธ๋ถ€์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด, personal access token์— ๋” ํญ๋„“์€ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง„ personal access token์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. fine-grained personal access token์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ํ† ํฐ์˜ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. personal access tokens์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ์ธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  2. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. "์„ค์ •" ํƒญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํƒญ์„ ๋ณด์—ฌ ์ฃผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ—ค๋”์˜ ์Šคํฌ๋ฆฐ์ƒท. "์„ค์ •" ํƒญ์ด ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  4. ์‚ฌ์ด๋“œ๋ฐ”์˜ "Code & automation" ์„น์…˜์—์„œ Copilot, ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๋ฅผ ์ฐจ๋ก€๋กœ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. MCP configuration ์„น์…˜์—์„œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  6. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ํ™˜๊ฒฝ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  8. copilot ํ™˜๊ฒฝ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  9. "Environment secrets"์—์„œ Add environment secret์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  10. ๋น„๋ฐ€ ์ด๋ฆ„์„ COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN์œผ๋กœ ์ง€์ •ํ•˜๊ณ  "Value" ํ•„๋“œ์— personal access token์„ ์ž…๋ ฅํ•œ ๋‹ค์Œ, Add secret์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ GitHub MCP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub MCP ์„œ๋ฒ„ ์‚ฌ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„