Microsoft Agent Framework MCP로 Sume 연결하기

MCPStreamableHTTPTool, 키 헤더, allowed_tools, approval_mode로 Microsoft Agent Framework 에이전트를 Sume 호스팅 MCP 서버에 연결하세요.

읽는 시간 5분Sume
전체 가이드

Python에서 Microsoft Agent Framework는 MCPStreamableHTTPTool로 에이전트를 원격 MCP 서버에 연결합니다. name과 서버의 url을 지정해 에이전트에 도구로 넘기면, 에이전트가 그 서버의 도구를 호출할 수 있습니다. Sume 호스팅 MCP 서버라면 URL은 https://mcp.sume.com/mcp이고, Sume API 키는 static_headers나 header_provider로 설정한 Authorization: Bearer 헤더에 담겨 전달됩니다.

Agent Framework 쪽 내용은 Microsoft Learn의 에이전트에서 MCP 도구 사용하기, MCPStreamableHTTPTool 레퍼런스, 도구 승인 페이지에서, Sume 쪽 내용은 MCP OAuth와 API 키, MCP 도구와 게이트, Job과 결과 (영문)에서 가져왔으며, 모두 2026-09-28에 확인했습니다. Sume에는 Agent Framework 전용 커넥터가 없습니다. 프레임워크 자체의 MCP 클라이언트가 Sume 원격 서버와 통신하는 방식이며, Sume 기초 페이지는 호스팅 MCP가 여전히 동작하지만 현재 주 경로는 아니라고 설명합니다. 다른 Python 프레임워크는 Pydantic AI MCP 서버에서 다룹니다.

Agent Framework 에이전트를 Sume에 어떻게 연결하나요?

Microsoft는 최소 구성으로 설치한 Python 환경이라면 MCPStreamableHTTPTool이 동작하기 전에 mcp --pre를 설치해야 할 수 있다고 안내합니다. 예제는 에이전트에 Sume 도구 네 개를 주고, generate_video는 사람이 승인할 때까지 보류합니다.

import asyncio
import os
from agent_framework import Agent, MCPStreamableHTTPTool
from agent_framework.openai import OpenAIChatClient

async def main() -> None:
    key = os.environ["SUME_API_KEY"]
    sume = MCPStreamableHTTPTool(
        name="Sume",
        url="https://mcp.sume.com/mcp",
        header_provider=lambda _kwargs: {"Authorization": f"Bearer {key}"},
        allowed_tools=["tools_schema", "generate_video", "jobs_wait", "jobs_result"],
        approval_mode={"always_require_approval": ["generate_video"]},
    )
    async with Agent(
        client=OpenAIChatClient(),
        name="VideoAgent",
        instructions="Preview paid calls with dry_run=true. Wait with jobs_wait; never resubmit.",
        tools=sume,
    ) as agent:
        result = await agent.run("A 5-second clip of waves at sunset.")
        for request in result.user_input_requests:
            print(request.function_call.name, request.function_call.arguments)

asyncio.run(main())

키는 static_headers와 header_provider 중 어디에 넣어야 하나요?

Microsoft 페이지는 둘 다 소개합니다. static_headers는 고정 자격 증명용이고, header_provider는 실행마다 도출되는 값용입니다. 이 페이지의 완성된 API 키 예제는 위 코드처럼 Authorization 헤더를 반환하는 header_provider를 쓰며, 이 provider는 연결 시점의 요청과 도구 호출 요청을 모두 인증합니다. 두 방식 모두 설정한 origin으로 가는 요청에만 헤더를 붙이고 cross-origin 리다이렉트에서는 헤더를 제거하며, 둘이 같은 헤더를 제공하면 header_provider 값이 우선합니다.

  • header_provider는 실행의 호스트 function_invocation_kwargs만 받고, 모델이 작성하는 도구 인수는 절대 받지 않으므로, 모델은 어떤 키가 전송될지 바꿀 수 없습니다.
  • 사용자별 키에는 이 방식을 쓰세요. Sume API 키와 지출은 워크스페이스 단위로 해석되므로, 어느 워크스페이스가 비용을 낼지는 키가 정합니다.
  • Sume는 Authorization: Bearer나 x-api-key를 받습니다. 하나만 보내세요. 현재 코드에서는 둘 다 실은 요청이 Send only one MCP credential.로 거부됩니다.
  • Microsoft는 원격 MCP 서버와 공유하는 API 키나 기타 자격 증명을 모두 검토하라고 요청합니다.

에이전트에는 어떤 Sume 도구를 보여 줘야 하나요?

API 키 세션에는 유료 도구를 포함한 Sume의 전체 호스팅 도구 세트가 보입니다. allowed_tools는 에이전트가 받는 도구를 좁히고, approval_mode는 "always_require", "never_require", 또는 always_require_approval이나 never_require_approval 아래에 도구 이름을 나열한 dict를 받습니다. Sume의 원래 도구 이름을 그대로 쓰세요. 설정한 이름이 정규화 후 여러 원격 이름과 일치하면 Agent Framework가 ToolExecutionException을 발생시킵니다. Sume 인증 문서는 쓰기나 유료 생성 전에 명시적 확인을 요구하라고 안내합니다.

도구 그룹은 Sume MCP 도구와 게이트, 파라미터는 Agent Framework MCPStreamableHTTPTool 레퍼런스 기준, 2026-09-28 확인.
도구Sume 그룹예제의 `allowed_tools`예제의 `approval_mode`
tools_schema탐색유지목록에 없음
generate_video유료유지always_require_approval
jobs_wait, jobs_resultJob 읽기유지목록에 없음
jobs_cancelJob 쓰기제외도달하지 않음

유료 호출에 승인이 필요하면 어떻게 되나요?

승인이 필요한 에이전트 실행은 최종 답변 대신 user_input_requests와 함께 완료됩니다. 요청마다 함수 호출의 이름과 인수가 담겨 있습니다. 이를 사람에게 보여 주고, request.to_function_approval_response(True)(또는 False)를 지금까지의 대화와 함께 새 실행으로 에이전트에 돌려주세요. 남은 요청이 없을 때까지 이를 반복합니다. 이 승인을 어디에 두어야 하는지는 휴먼 인 더 루프 AI 에이전트에서 다룹니다.

승인은 프리뷰를 본 뒤에 하세요. 유료 도구에 대한 Sume 플레이북은 dry_run=true로 호출해 추정치, 잔액, 큐 동작을 확인한 다음, 모든 유료 도구에 필요한 새 idempotency_key를 넣어 제출하는 것입니다. max_spend_usd는 값을 넘긴 경우에만 호출의 상한이 됩니다. approval_mode는 인수가 아니라 도구를 지정하므로, generate_video에 대한 dry run 호출도 승인을 요청합니다.

긴 Sume Job은 타임아웃되나요? 그 밖에 무엇을 알아야 하나요?

  • Sume jobs_wait 호출 한 번은 최대 55초, timeout_seconds를 생략하면 50초 동안 대기합니다. Agent Framework API 레퍼런스에는 모든 요청에 쓰이는 초 단위 기본 타임아웃인 request_timeout이 나와 있으니, 이 값을 설정한다면 55보다 크게 두세요.
  • wait_slice_expired를 받으면 에이전트는 같은 id로 jobs_wait를 다시 호출해야 하며, 유료 create는 절대 다시 제출하면 안 됩니다.
  • 이 글의 방식은 로컬 MCP 도구로, 여러분의 프로세스가 Sume를 호출합니다. Microsoft는 Foundry 에이전트용 호스팅 MCP 도구도 문서화하는데, 이 경우에는 뒤에서 받쳐 주는 AI 서비스가 MCP 도구를 실행합니다. 이는 별도의 설정입니다.
  • 호스팅 MCP는 노트북의 파일을 읽을 수 없습니다.

출처

관련 글

연동 카테고리의 다른 글

연동 글 전체 보기

작성자 Sume