본문 바로가기
AI/Tool, 모델 소개

MCP 지원 AI 프레임워크 상위 7개

by 주호파파 2025. 5. 17.
728x90
반응형

Python 및 Typescript 프레임워크로 MCP 서버를 활용하여 LLM에 컨텍스트를 제공하는 AI 앱을 만듭니다.

MCP 지원 AI 프레임워크

AI 에이전트용 툴킷은 개발자에게 다양한 API를 제공하여 AI 솔루션에 작업을 수행하고 사용자 만족을 위한 정확한 결과를 보장하는 도구를 제공합니다. 그러나 이러한 도구를 AI 앱에 통합하고 관리하는 것은 복잡할 수 있습니다. 이 글에서는 모델 컨텍스트 프로토콜 (MCP)을 사용하여 LLM과 에이전트에 컨텍스트를 제공하는 업계 표준을 소개합니다.

LLM 컨텍스트 제공 접근 방식 및 사양

기본적으로 LLM과 AI 챗봇에 적절한 컨텍스트를 제공하지 않으면 실시간 정보를 가져오거나, 코드를 실행하거나, 외부 도구 및 API를 호출하거나, 심지어 사용자를 대신하여 웹 브라우저를 사용할 수 없습니다. 개발자는 다음과 같은 접근 방식을 활용하여 LLM과 에이전트의 이러한 한계를 해결할 수 있습니다.

  • Composio : Composio는 AI 에이전트와 LLM을 통합하기 위한 사양과 툴킷 라이브러리를 제공합니다. Composio의 기성 툴킷 라이브러리 외에도, 최근 Composio MCP를 발표하여 개발자가 IDE용 100개 이상의 MCP 서버에 연결할 수 있도록 지원합니다. 위 링크에서 Composio MCP 도구 카테고리를 확인하여 Cursor, Claude, Windsurf와 같은 MCP 지원 IDE에서 여러 애플리케이션을 프로젝트에 연결할 수 있습니다.
  • Agents.json : OpenAI 표준을 기반으로 구축된 사양으로, AI 에이전트 와 API 및 외부 도구 간의 원활하고 향상된 상호작용을 보장합니다. Agent.json은 훌륭한 사양이지만 MCP와 달리 널리 사용되지 않고 채택되지 않았습니다. 자세한 내용을 확인하고 시작하려면 GitHub 저장소 를 참조하세요 .
  • MCP : MCP는 개발자가 LLM 및 AI 어시스턴트에게 상황별 데이터를 제공하여 문제를 해결하는 최적의 방법을 제공합니다. 예를 들어, llms.txt 파일을 사용하는 것처럼 MCP 문서 서버를 구축하여 IDE 및 에이전트 프레임워크에 문서에 대한 완전한 접근 권한을 제공할 수 있습니다 .

MCP란 무엇인가요?

MCP는 LLM의 세 번째 진화 단계라고 생각해 보세요. 첫 번째 진화 단계에서는 LLM이 훈련 데이터에서 쿼리를 찾으면 사용자 프롬프트에 정확하게 답변할 수 있었습니다. 이 단계에서는 외부 도구에 접근할 수 없기 때문에 훈련 데이터 외부의 프롬프트에 의미 있게 응답할 수 없습니다. LLM의 두 번째 진화 단계에서는 직관적으로 사용하기 어려운 추가 컨텍스트(도구)에 접근할 수 있도록 합니다. 하지만 이러한 접근 방식은 LLM이 사용자 의도를 정확하게 예측하고 답변할 수 있도록 지원합니다. 세 번째 진화 단계 역시 LLM과 도구로 구성되지만, 외부 애플리케이션에 접근할 수 있도록 적절한 인프라를 구축하고 손쉽게 유지 관리할 수 있도록 보장합니다.

AI 서비스를 구축할 때, 기업 환경에서 고객 지원 티켓 에 답변하는 AI 어시스턴트 앱을 위해 데이터가 클라우드에 저장될 수 있습니다 . MCP 는 Anthropic 의 오픈소스 프로토콜로 , 기업 데이터를 AI 시스템에 연결하는 데 사용할 수 있습니다.

MCP는 콘텐츠 저장소(GitHub, Notion), 개발 환경, 웹 및 비즈니스 도구 보조 AI 기술과 연결하고 통신하는 표준 방식을 제공합니다 . MCP의 인기 있고 지속적으로 성장하는 사용 사례 중 하나는 AI 지원 코딩입니다. Cursor  Windsurf 와 같은 개발 환경 및 도구와 수백 개의 MCP 통합을 통해 개발자는 개발을 위해 외부 애플리케이션과 연결하고 상호 작용할 수 있습니다.

참고 : 이 문서의 목적은 IDE 기반 MCP 통합이 아닌 Python과 TypeScript를 사용하여 구축된 AI 어시스턴트 및 에이전트 시스템 개발자를 위한 MCP를 구현하는 것입니다.

MCP 작동 방식

LLM 및 상담원의 경우, MCP는 기본 지식 외의 사용자 질의에 의미 있는 답변을 제공할 수 있도록 지원합니다. 예를 들어, ChatGPT에 특정 Slack 채널로 메시지를 보내거나, 캘린더에서 예약 가능 여부를 확인하거나, 오늘 팀원과의 회의 일정을 예약하도록 요청해 보세요. ChatGPT는 이러한 애플리케이션에 접근할 수 없기 때문에 응답 결과에 실망할 수 있습니다. MCP를 구현하면 이러한 지원 담당자가 유용한 결과를 도출할 수 있습니다.

개발자들이 가장 먼저 궁금해하는 질문은 MCP의 작동 방식입니다. MCP의 기본 작동 방식은 사용자가 에이전트에게 쿼리를 보내는 것입니다. 에이전트는 해당 작업에 필요한 정보를 얻기 위해 어떤 MCP 서버와 도구를 호출할지 결정합니다. 그런 다음 에이전트는 특정 도구의 데이터를 사용하여 사용자에게 응답합니다.

AI 에이전트와 LLM 기반 앱에 MCP를 도입해야 하는 이유는 무엇입니까?

MCP는 개발자가 다른 외부 애플리케이션과 효과적으로 통신할 수 있는 AI 시스템을 구축하는 데 도움이 되는 표준으로 자리 잡고 있습니다. Microsoft는 최근 Copilot Studio 에 MCP를 통합하여 AI 앱과 에이전트의 도구 접근 방식을 간소화한다고 발표했습니다.

또한 OpenAI는 Agents SDK 및 ChatGPT 데스크톱 앱 등 자사 제품 전반에 걸쳐 MCP를 지원한다고 발표했습니다 . AI 비서에 도구를 직접 장착하는 것은 전혀 문제가 없습니다. 하지만 여러 에이전트가 이메일 읽기 및 답장, 웹 스크래핑, 재무 분석, 실시간 날씨 정보 가져오기 등 여러 작업을 수행하는 AI 에이전트 시스템에서는 번거로울 수 있습니다.

도구 통합을 갖춘 AI 에이전트

위 다이어그램에서 세 개의 외부 도구가 LLM에 연결되어 있습니다. 도구 수가 100개 이상으로 늘어나면 모든 도구를 관리하고 보호하는 것이 어려워질 것입니다. 개선된 접근 방식은 다음 섹션에서 설명하는 것처럼 MCP 레지스트리를 통해 동일한 도구 또는 100개 이상의 도구에 액세스하는 것입니다.

MCP 통합을 갖춘 AI 에이전트

이 다이어그램에서는 에이전트 시스템에 필요한 도구들을 결합하고 MCP 서버를 통해 접근하여 더욱 통합적인 사용자 경험을 제공합니다. MCP 방식을 사용하면 중앙에서 이러한 도구들을 안전하게 보호하고 관리할 수 있습니다.

기존 툴킷 통합보다 MCP를 사용하는 이점

MCP는 AI 에이전트와 도구를 통합하는 기존 방식에 비해 몇 가지 주요 이점을 제공합니다. 예를 들어, MCP 없이 도구를 통합할 경우, 호환되지 않는 AI 인프라로 인해 외부 애플리케이션에 여러 API를 호출할 때 여러 오류가 발생할 수 있으므로 안정성에 의문이 제기됩니다. MCP 이전에는에이전트에 추가하고 싶은 모든 도구는 사용자 정의 코드로 구현해야 하며, 이를 구현하는 데는 몇 주가 걸립니다.

  • 아키텍처 : AI 에이전트를 위한 사전 구축된 도구 사양과 달리 MCP는 도구 및 API와 상호 작용하기 위한 깔끔하고 유연한 아키텍처를 갖추고 있습니다.
  • 외부 도구 접근 및 관리 개선 : 표준화된 인터페이스를 통해 AI 모델에 대한 도구 접근을 제공하여 LLM과 타사 시스템 간의 상호 작용 간의 커뮤니케이션 격차를 해소합니다.
  • 독립형 도구 구현의 한계를 해결합니다 . MCP 도구는 단일 사용자 시나리오와 팀에 적합합니다.
  • 커뮤니티 중심 : MCP는 다양한 오픈소스 서버와 개발자 생태계를 갖추고 있습니다. 또한 개발자 커뮤니티에서 다양한 사용 사례에 널리 채택되고 있습니다.
  • 인증 : 도구 접근을 제어하는 ​​강력한 인증 및 권한 시스템이 내장되어 있습니다. 예를 들어, Composio에서 제공하는 MCP 도구를 사용하면 Google 스프레드시트나 Gmail을 통해 사용자를 인증할 수 있습니다.
  • 도구 검색 : AI 챗봇에 도구를 설치, 구성, 통합하는 기존 방식과 달리 MCP를 사용하면 외부 도구를 더 쉽게 검색하고 찾을 수 있습니다.
  • 확장성 : MCP는 많은 사용자와 애플리케이션에 맞게 쉽게 확장할 수 있습니다.
  • 업계 표준 : AI 애플리케이션에 컨텍스트를 제공하기 위해 하드코딩 도구를 설치할 수 있습니다. 하지만 MCP는 에이전트와 LLM에게 필요한 컨텍스트를 제공하는 업계 표준을 제공합니다.

MCP 서버 종류

Anthropic의 MCP 사양에는 에이전트와 AI 프로젝트에 도구를 추가하는 두 가지 유형의 서버가 있습니다. 이러한 MCP 서버 연결 유형은 다음과 같습니다.

  • SSE(Server-Sent Events) : HTTP를 통해 원격 서비스에 연결합니다.
  • STDIO : 표준 I/O를 통해 로컬 명령 실행 및 통신을 허용합니다.

AI 애플리케이션을 구축하기 위해 선택한 프레임워크는 이러한 서버에 연결하는 데 필요한 클래스를 제공합니다.

MCP 레지스트리/서버 생태계에 액세스

LLM과 에이전트를 보완하여 생성되는 응답의 안정성을 보장하는 호스팅형 MCP 도구의 오픈소스 라이브러리가 여러 개 있습니다. 이러한 호스팅형 MCP 도구 라이브러리를 레지스트리라고 하며, 엄선된 서비스 모음을 제공합니다. 이러한 도구를 사용하여 AI 애플리케이션을 다음 레지스트리에 연결할 수 있습니다. 또한, uvx설치가 필요 없는 Python 기반 도구로 구성된 와 같은 다양한 서버 유형을 사용할 수 있습니다. MCP 도구를 실행하기 위한 Docker 옵션과 npxNode.js 설치가 필요한 . 기반 서버 도 있습니다.

  • GitHub의 MCP 서버 : 추가 MCP 리소스가 포함된 커뮤니티에서 구축한 서버 컬렉션입니다.
  • Glama Registry : 개발자를 위한 프로덕션에 바로 사용 가능한 오픈 소스 MCP 서버입니다.
  • Smithery Registry : Smithery 를 사용하면 개발자는 2000개 이상의 MCP 서버에 액세스하여 AI 에이전트와 LLM의 기능을 강화할 수 있습니다.
  • OpenTools : OpenTools는 MCP 도구 사용을 위한 생성 API를 제공합니다. AI 프로젝트에 구현할 수 있는 수백 개의 기성 MCP 도구에 액세스할 수 있습니다. 개발자는 OpenTools API를 사용하여 LLM의 웹 검색 기능을 확장하고, 실시간 위치 데이터를 가져오고, 웹 스크래핑을 수행할 수 있습니다. 이 API는 Curl, Python, TypeScript를 지원합니다. API 사용 방법은 OpenTools 빠른 시작 가이드를 참조하세요.
from openai import OpenAI 

client = OpenAI( 
    base_url= "https://api.opentools.com" , 
    api_key= "<OPENTOOLS_API_KEY>"
 ) 

completion = client.chat.completions.create( 
    model= "anthropic/claude-3.7-sonnet" , 
    messages=[ 
        { "role" : "user" , "content" : "caranddriver.com에서 상위 5개 EV의 사양을 비교하세요" } 
    ], 
    tools=[{ "type" : "mcp" , "ref" : "firecrawl" }] 
)
  • PulseMCP 레지스트리 : PulseMCP를 사용하면 AI 프로젝트에 필요한 호스팅된 MCP 도구와 사용 사례를 찾아볼 수 있습니다. 최근 인기 있는 MCP 서버와 앱은 PulseMCP 뉴스 에서 확인하세요.
  • mcp.run : 이 레지스트리는 개발자에게 자사 비즈니스를 위한 수백 개의 MCP 앱에 대한 액세스 권한을 제공합니다.
  • Composio Registry : Composio의 SSE 기반 MCP 서버를 사용하면 다양한 AI 프레임워크와 도구를 쉽게 통합하여 애플리케이션을 구축할 수 있습니다.
  • guMCP : Gumloop의 guMCP는 모든 AI 앱과 원활하게 통합할 수 있는 무료, 오픈 소스, 완전 호스팅 MCP 서버를 제공합니다.

LLM 및 에이전트에 MCP를 추가하는 최고의 7가지 클라이언트 프레임워크

MCP가 유행어가 되었고 최근 모든 개발자 커뮤니티에서 논의되고 있지만, AI 앱 및 에이전트와 통합하기 위해 어떤 MCP 클라이언트 프레임워크를 사용해야 할지 파악하기는 쉽지 않습니다. 저희는 Python 및 TypeScript 기반 에이전트 워크플로 및 AI 어시스턴트를 위한 다음과 같은 주요 MCP 클라이언트 플랫폼을 조사하여 찾았습니다.

참고 : 다음 섹션에서는 AI 솔루션을 구축하기 위한 프레임워크에서 MCP를 구현하는 방법을 보여주며, Cursor나 Windsurf와 같은 AI 코드 편집기와 MCP를 통합하는 방법은 보여주지 않습니다.

1. OpenAI Agents SDK를 사용하여 Git MCP 에이전트 빌드

OpenAI Agents SDK 로 에이전트를 빌드할 때 SDK MCPServerStdio MCPServerSse클래스를 사용하여 커뮤니티에서 구축한 MCP 서버에 연결합니다. 다음 MCP 에이전트 구현은 로컬 Git 저장소의 루트 디렉터리에 액세스하고 저장소에 대한 사용자 쿼리에 응답합니다.

import asyncio 
import shutil 
import streamlit as st 
from agents import Agent, Runner, trace 
from agents.mcp import MCPServer, MCPServerStdio 

async  def  query_git_repo ( mcp_server: MCPServer, directory_path: str , query: str ): 
    agent = Agent( 
        name= "Assistant" , 
        instruction= f" {directory_path} 에 있는 로컬git 저장소에 대한 질문에 답하고 , repo_path에 그것을 사용하세요" , 
        mcp_servers=[mcp_server], 
    ) 

    with st.spinner( f"쿼리 실행: {query} " ): 
        result = await Runner.run(starting_agent=agent, input =query) 
        return result.final_output 

async  def  run_streamlit_app (): 
    st.title( "로컬 Git 저장소 탐색기" ) 
    st.write( "이 앱을 사용하면 로컬 Git 저장소에 대한 정보를 쿼리할 수 있습니다." ) 

    directory_path = st.text_input( "git 경로를 입력하세요. repository:" ) 

    if directory_path: 
        # 버튼으로 사용하는 일반 쿼리
         col1, col2 = st.columns( 2 ) 
        with col1: 
            if st.button( "가장 자주 기여하는 사람" ): 
                query = "가장 자주 기여하는 사람은 누구입니까?"
                 run_query(directory_path, query) 

        with col2: 
            if st.button( "마지막 변경 요약" ): 
                query = "저장소의 마지막 변경 사항을 요약합니다."
                 run_query(directory_path, query) 

        # 사용자 지정 쿼리
         custom_query = st.text_input( "또는 사용자 지정 쿼리를 입력하세요." ) 
        if st.button( "사용자 지정 쿼리 실행" ) and custom_query: 
            run_query(directory_path, custom_query) 

def  run_query ( directory_path, query ): 
    if  not shutil.which( "uvx" ): 
        st.error( "uvx가 설치되지 않았습니다. `pip install uvx`로 설치하세요." ) 비동기 def를 
        반환합니다 .

      execute_query (): 
        async  with MCPServerStdio( 
            cache_tools_list= True , 
            params={ 
                "command" : "python" , 
                "args" : [ 
                    "-m" , 
                    "mcp_server_git" , 
                    "--repository" , 
                    directory_path 
                ] 
            }, 
        ) as server: 
            with trace(workflow_name= "MCP Git Query" ): 
                result = await query_git_repo(server, directory_path, query) 
                st.markdown( "### Result" ) 
                st.write(result) 

    asyncio.run(execute_query()) 

if __name__ == "__main__" : 
    st.set_page_config( 
        page_title= "Local Git Repo Explorer" , 
        page_icon= "📊" , 
        layout= "centered"
     ) 
    # 비동기에서 동기 구현으로 변경 
    # Streamlit은 메인 스레드에서 asyncio와 잘 작동하지 않으므로 

    # 정의 앱의 동기 버전 
    def  main_streamlit_app (): 
        st.title( "로컬 Git 저장소 탐색기" ) 
        st.write( "이 앱을 사용하면 Git 저장소에 대한 정보를 쿼리할 수 있습니다." ) 

        directory_path = st.text_input( "git 저장소 경로를 입력하세요:" ) 

        if directory_path: 
            # 버튼으로 사용하는 일반 쿼리
             col1, col2 = st.columns( 2 ) 
            with col1: 
                if st.button( "가장 자주 기여하는 사람" ): 
                    query = "가장 자주 기여하는 사람은 누구입니까?"
                     run_query(directory_path, query) 

            with col2: 
                if st.button( "마지막 변경 요약" ): 
                    query = "저장소의 마지막 변경 사항을 요약합니다."
                     run_query(directory_path, query) 

            # 사용자 지정 쿼리
             custom_query = st.text_input( "또는 고유한 쿼리를 입력하세요:" ) 
            if st.button( "사용자 지정 쿼리 실행" ) and custom_query:
                run_query(directory_path, custom_query) 

    # 동기 앱 실행
    메인스트림리트앱()

위 코드는 Streamlit을 OpenAI MCP 에이전트와 통합하여 Git MCP 서버를 사용하여 로컬 Git 저장소와 채팅할 수 있도록 합니다 . 이 예제를 실행하려면 다음을 설치해야 합니다.

  • pip install streamlit openai-agents mcp-server-git.
  • 그런 다음, .를 사용하여 OpenAI API 키를 내보냅니다 export OPENAI_API_KEY=sk-.... Python 파일을 실행하면 이 미리보기와 비슷한 결과가 표시됩니다.

OpenAI 에이전트 SDK를 사용한 Git MCP 에이전트

GitHub 에서 OpenAI MCP의 다른 예를 살펴볼 수 있습니다 .

Agents SDK의 MCP 통합을 사용하면 OpenAI 대시보드에 내장된 MCP 에이전트 모니터링 시스템이POST 있다는 장점이 있습니다. 이 기능은 도구 목록, 응답, 함수 호출 데이터 수집 등 에이전트의 MCP 작업을 자동으로 캡처합니다. 아래 이미지는 위 코드를 실행한 후 이 섹션의 Git MCP 예제를 추적한 결과를 보여줍니다. OpenAI 대시보드에서 로깅된 모든 정보에 액세스할 수 있습니다.

2. Praison AI를 사용하여 MCP AI 에이전트 구축

Praison AI 는 에이전트 팀을 구축하기 위한 Python 기반 AI 프레임워크입니다. 에이전트에게 기존 도구를 제공하는 것처럼, 단 한 줄의 코드만으로 에이전트 워크플로에 MCP 서버 도구를 추가하는 가장 간단한 방법을 제공합니다.

다음 예시에서는 Streamlit UI를 사용하여 Airbnb MCP 서버 와 Praison AI 에이전트를 통합하여 특정 지역의 아파트를 찾는 방법을 보여줍니다. Praison AI를 활용한 첫 MCP 에이전트를 생성하려면 이들을 설치해야 합니다.

  • pip install praisonaiagents mcp streamlit
  • 다음으로, OpenAI API 키를 내보냅니다 export OPENAI_API_KEY='sk-proj-qZIGbi....

예를 들어 streamlit_praison_airbnb_mcp_agent.py 라는 Python 파일을 만들고 , 이 코드로 내용을 채웁니다.

import streamlit as st
from praisonaiagents import Agent, MCP

st.title("🏠 Airbnb 예약 도우미")

# Create the agent
@st.cache_resource
def get_agent():
    return Agent(
        instructions="""You help book apartments on Airbnb.""",
        llm="gpt-4o-mini",
        tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")
    )

# Initialize chat history
if "messages" not in st.session_state:
    st.session_state.messages = []

# Display chat history
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# User input form
with st.form("booking_form"):
    st.subheader("Enter your booking details")

    destination = st.text_input("Destination:", "Paris")

    col1, col2 = st.columns(2)
    with col1:
        check_in = st.date_input("Check-in date")
    with col2:
        check_out = st.date_input("Check-out date")

    adults = st.number_input("Number of adults:", min_value=1, max_value=10, value=2)

    submitted = st.form_submit_button("Search for accommodations")

    if submitted:
        search_agent = get_agent()

        # Format the query
        query = f"I want to book an apartment in {destination} from {check_in.strftime('%m/%d/%Y')} to {check_out.strftime('%m/%d/%Y')} for {adults} adults"

        # Add user message to chat history
        st.session_state.messages.append({"role": "user", "content": query})

        # Display user message
        with st.chat_message("user"):
            st.markdown(query)

        # Get response from the agent
        with st.chat_message("assistant"):
            with st.spinner("Searching for accommodations..."):
                response = search_agent.start(query)
                st.markdown(response)

        # Add assistant response to chat history
        st.session_state.messages.append({"role": "assistant", "content": response})

# Allow for follow-up questions
if st.session_state.messages:
    prompt = st.chat_input("Ask a follow-up question about the accommodations")
    if prompt:
        search_agent = get_agent()

        # Add user message to chat history
        st.session_state.messages.append({"role": "user", "content": prompt})

        # Display user message
        with st.chat_message("user"):
            st.markdown(prompt)

        # Get response from the agent
        with st.chat_message("assistant"):
            with st.spinner("Thinking..."):
                response = search_agent.start(prompt)
                st.markdown(response)

        # Add assistant response to chat history
        st.session_state.messages.append({"role": "assistant", "content": response})

샘플 코드를 실행하면 아래에 표시된 대로 특정 위치에 있는 아파트를 찾는 데 필요한 Airbnb MCP 도구가 호출됩니다.

Praison AI를 탑재한 MCP AI 에이전트

한 줄의 코드로 에이전트에 MCP 지원이 추가되는 것을 보셨을 겁니다. tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")여기서 는 npxMCP 서버를 시작하기 위해 실행할 명령을 나타냅니다. 는 -y명령에 전달할 명령줄 인수입니다. 자세한 내용은 OpenAI Agents SDK 설명서의 MCP 서버를 참조하세요.

3. LangChain AI 앱에 MCP 사용

LangChain은 MCP 에 대한 도구 호출을 지원합니다 . 이 지원을 통해 Python 함수를 설정하여 다양한 MCP 서버에 액세스하고 AI 프로젝트에서 작업을 수행하는 데 필요한 도구를 가져올 수 있습니다. 아래 샘플 코드는 안전한 MCP 파일 시스템 서버에 연결하여 LLM이 사용자가 제공하는 모든 파일에 대한 질문에 정확하게 답변할 수 있도록 합니다.

# 저작권 (C) 2024 Andrew Wason 
# SPDX 라이선스 식별자: MIT 

import asyncio 
import pathlib 
import sys 
import typing as t 

from langchain_core.messages import AIMessage, BaseMessage, HumanMessage 
from langchain_core.output_parsers import StrOutputParser 
from langchain_core.tools import BaseTool 
from langchain_groq import ChatGroq 
from mcp import ClientSession, StdioServerParameters 
from mcp.client.stdio import stdio_client 

from langchain_mcp import MCPToolkit 

async  def  run ( tools: list [BaseTool], prompt: str ) -> str : 
    model = ChatGroq(model_name= "llama-3.1-8b-instant" , stop_sequences= None )   # GROQ_API_KEY가 필요합니다
     tools_map = {tool.name: tool for tool in tools} 
    tools_model = model.bind_tools(tools) 
     messages: list [BaseMessage] = [HumanMessage(prompt)] 
    ai_message = t.cast(AIMessage, await tools_model.ainvoke(messages)) 
    messages.append(ai_message)
    for tool_call in ai_message.tool_calls:
        selected_tool = tools_map[tool_call["name"].lower()]
        tool_msg = await selected_tool.ainvoke(tool_call)
        messages.append(tool_msg)
    return await (tools_model | StrOutputParser()).ainvoke(messages)

async def main(prompt: str) -> None:
    server_params = StdioServerParameters(
        command="npx",
        args=["-y", "@modelcontextprotocol/server-filesystem", str(pathlib.Path(__file__).parent.parent)],
    )
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            toolkit = MCPToolkit(session=session)
            toolkit.initialize() 
            response  = await run(toolkit.get_tools(), prompt) 
            print (response ) 

if __name__ == "__main__":
    prompt = sys.argv[1] if len(sys.argv) > 1 else "Read and summarize the file ./readme.md"
    asyncio.run(main(prompt))

이 Python 스크립트를 실행하기 전에 필수 종속성, , 및 를 설치 langchain-core해야 langchain-groq합니다 langchain-mcp.

 

pip install langchain-core langchain-groq langchain-mcp

위의 MCP 구성은 npx서버 유형을 사용합니다. 따라서 server-filesystem패키지를 설치해야 합니다.

 

pm install -g @modelcontextprotocol/server-filesystem

필요한 패키지를 모두 설치한 후 프로젝트에 파일을 추가하고 위의 샘플 코드와 같이 Python 스크립트에서 해당 파일을 참조하면 ./readme.md이 이미지와 비슷한 출력이 표시됩니다.

참고 : 이 예제는 LangChain의 GitHub 저장소 에서 가져왔습니다 .

4. Chainlit AI 앱에 MCP 사용

Chainlit 은 Python으로 AI 애플리케이션을 구축하는 플랫폼입니다. MCP 서버를 기본적으로 지원하므로, 사용 가능한 MCP 도구를 검색하고 도구 호출을 애플리케이션 흐름에 통합하여 결과를 개선하도록 앱을 구성할 수 있습니다. Chainlit 앱은 SSE( Server-Sent Event ) 및 stdio( Command-Line ) 기반 서비스와 통합할 수 있습니다. 다음 예시에서는 Chainlit 앱을 Linear MCP 서버 에 연결하여 앱에서 Linear 이슈, 프로젝트 및 팀을 관리할 수 있도록 합니다. 이 예시에서 제공되는 Linear 도구를 사용하여 사용자 이슈를 생성, 업데이트, 검색 및 가져오거나 이슈에 댓글을 추가할 수 있습니다.

MCP 서버에 연결하기 위한 Chainlit 앱 구성

MCP 서버에서 도구에 액세스하기 위해 Chainlit 앱을 연결하려면 두 가지 주요 단계가 필요합니다.

  1. MCP 연결 등록on_mcp_connect : 이 단계에서는 성공적인 연결을 생성하기 위해 Chainlit의 비동기 함수를 구현해야 합니다 . 또한 on_mcp_disconnect, 정리를 처리하는 함수를 구현할 수도 있습니다.
# pip install chainlit 

import chainlit as cl 
from mcp import ClientSession 

@cl.on_mcp_connect 
async  def  on_mcp_connect ( connection, session: ClientSession ): 
    """MCP 연결이 설정되면 호출됩니다""" 
    # 여기에 연결 초기화 코드를 
    작성합니다 # MCP가 작동하려면 이 핸들러가 필요합니다 

@cl.on_mcp_disconnect 
async  def  on_mcp_disconnect ( name: str , session: ClientSession ): 
    """MCP 연결이 종료되면 호출됩니다""" 
    # 선택적 핸들러: 여기에 코드를 정리합니다

2. MCP 클라이언트(Chainlit, LangChain, Mastra) 구성 : MCP 서버가 Chainlit 앱과 작동하려면 클라이언트가 Chainlit UI를 통해 연결 정보를 제공해야 합니다. 이 구성에는 다음이 포함됩니다.

  • 연결 이름을 나타내는 고유 식별자입니다.
  • 클라이언트 유형sse : 또는 를 사용할지 지정해야 합니다 stdio. 의 경우 sseURL 엔드포인트를 추가해야 합니다. 를 사용하는 경우 stdio완전한 명령(예: npxyour-tool-package 또는 uvxyour-tool-package)이 필요합니다. 완전한 명령 예시는 아래와 같습니다.
npx -y linear-mcp-server --tools=all --api-key=lin_api_your_linear_API_Key

 

MCP 서버 연결을 설정한 후 MCP 세션을 사용하여 도구를 실행할 수 있습니다. 마지막으로 도구 호출을 통해 MCP 도구를 Chainlit 앱의 모델/에이전트와 원활하게 통합합니다. 이 Linear MCP 통합의 전체 소스 코드는 GitHub 의 Chainlit 예제 앱에서 확인할 수 있습니다 .

 

Chainlit의 GitHub 저장소에서 위 소스 코드를 받아 실행하고 npx -y linear-mcp-server --tools=all --api-key=lin_api_your_linear_API_KeyChainlit 인터페이스를 통해 설정하면 Linear 이슈/프로젝트를 생성하고 업데이트할 수 있습니다. 단, 이 예시에서 볼 수 있듯이 이러한 작업을 수행하려면 Linear 팀의 ID가 필요합니다.

MCP 서버에 연결하기 위한 Chainlit 앱 빌드

5. Agno AI 에이전트를 위한 MCP 통합

Agno 는 복잡한 에이전트 워크플로를 구축하기 위한 Python 프레임워크입니다. 단순성, 사용 편의성, 그리고 MCP 서버와의 원활한 통합으로 널리 사용됩니다. 이 섹션의 MCP 구현 예시는 Airbnb, Google Maps, 웹 검색, 날씨 MCP 에이전트 등 4명의 개별 에이전트로 구성된 다중 에이전트 팀과 통합됩니다. Agno 다중 에이전트는 특정 위치의 여행 정보를 제공하기 위해 협업합니다.

필수 조건

이 섹션에서 Agno MCP 구현 예를 테스트하려면

    1. Agno, DuckDuckGo , Exa를pip install -U openai agno duckduckgo-search exa-py 설치 하세요 .
    2. GOOGLE_MAPS_API_KEY 를 가져와 프로젝트 .env파일에 추가합니다.
    3. APIFY_TOKEN을 받아서 . 에 추가하세요 .env.
    4. Google 주소 API를 검증합니다 .
      Agno MCP 에이전트 팀 구성
          # Define server parameters
          airbnb_server_params = StdioServerParameters(
              command="npx",
              args=["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"],
              env=env,
          )
      
          maps_server_params = StdioServerParameters(
              command="npx", args=["-y", "@modelcontextprotocol/server-google-maps"], env=env
          )
      
          # Use contextlib.AsyncExitStack to manage multiple async context managers
          async with contextlib.AsyncExitStack() as stack:
              # Create stdio clients for each server
              airbnb_client, _ = await stack.enter_async_context(stdio_client(airbnb_server_params))
              maps_client, _ = await stack.enter_async_context(stdio_client(maps_server_params))
      
              # Create all agents
              airbnb_agent = Agent(
                  name="Airbnb",
                  role="Airbnb Agent",
                  model=OpenAIChat("gpt-4o"),
                  tools=[airbnb_client],
                  instructions=dedent("""\
                      You are an agent that can find Airbnb listings for a given location.\
                  """),
                  add_datetime_to_instructions=True,
              )
      Agno의 GitHub 저장소에서 전체 소스 코드를 받으세요 . 필요한 패키지를 설치하고 위의 모든 구성을 수행한 후 전체 GitHub 샘플 코드를 실행하면 이 미리보기와 유사한 출력이 표시됩니다.Agno AI 에이전트를 위한 MCP 통합

      6. Upsonic 에이전트에 MCP 사용

       

Upsonic 은 AI 에이전트를 만드는 Python 프레임워크입니다. Upsonic을 사용하면 에이전트를 빌드하고, 에이전트의 작업을 정의하고, 아래 샘플 코드에서 볼 수 있듯이 MCP 도구를 사용하여 각 작업 정의를 처리할 수 있습니다.

    1. import os
      from dotenv import load_dotenv
      from upsonic import Task, Agent, Direct
      from upsonic.client.tools import Search  # Adding Search as a fallback tool
      
      # Load environment variables from .env file
      load_dotenv()
      
      # Get the OpenAI API key from environment variables
      openai_api_key = os.getenv("OPENAI_API_KEY")
      if not openai_api_key:
          raise ValueError("OPENAI_API_KEY not found in .env file")
      
      # Set your OpenAI API key for the session
      os.environ["OPENAI_API_KEY"] = openai_api_key
      
      # Define the HackerNews MCP tool
      # Using the correct MCP setup for HackerNews based on Upsonic documentation
      class HackerNewsMCP:
          command = "uvx"
          args = ["mcp-hn"]
          # No environment variables are needed for this MCP
      
      # Create a task to analyze the latest HackerNews stories
      # Adding Search as a fallback in case HackerNews MCP fails
      task = Task(
          "Analyze the top 5 HackerNews stories for today. Provide a brief summary of each story, "
          "identify any common themes or trends, and highlight which stories might be most relevant "
          "for someone interested in AI and software development.",
          tools=[HackerNewsMCP, Search]  # Include both HackerNews MCP and Search tools
      )
      
      # Create an agent specialized in tech news analysis
      agent = Agent(
          "Tech News Analyst",
          company_url="https://news.ycombinator.com/",
          company_objective="To provide insightful analysis of tech industry news and trends"
      )
      
      # Execute the task with the agent and print the results
      print("Analyzing HackerNews stories...")
      agent.print_do(task)
      
      # Alternatively, you can use a Direct LLM call if the task is straightforward
      # print("Direct analysis of HackerNews stories...")
      # Direct.print_do(task)
      
      # If you want to access the response programmatically:
      # agent.do(task)
      # result = task.response
      # print(result)

       

위 예시에서는 Upsonic에서 Hackernews의 최신 상위 5개 기사를 검색하는 AI 에이전트를 생성합니다. pip install upsonic위의 Python 코드를 실행하면 이 이미지와 비슷한 결과가 표시됩니다.

  1. 7. Mastra Agents에 MCP 사용

Mastra는stdio 프로토타입과 프로덕션급 AI 에이전트를 구축하기 위한 TypeScript 프레임워크입니다. Chainlit과 마찬가지로 Mastra는 or 기반 연결을 통해 다양한 도구에 접근할 수 있도록 MCP 서버에 연결하는 표준화된 방식을 제공합니다 sse.

Mastra 에이전트를 MCP 서버에 연결하려면 해당 MCPConfiguration클래스를 사용해야 합니다. 이 클래스는 모든 Mastra 에이전트 워크플로에서 라이프사이클, 네임스페이스, 도구 등 여러 서버 연결을 처리합니다. 마스터 앱과 MCP 서버 간의 연결을 생성하는 과정은 다음과 같습니다.

  1. 클래스 인스턴스를 생성 MCPConfiguration하고 서버 구성을 추가합니다.
  2. getTools()또는 메서드를 사용하여 MCP 도구를 검색합니다 getToolsets().

아래의 샘플 코드는 Mastra 에이전트를 사용하여 MCP 서버를 구현하는 기본적인 사용법을 나타냅니다.

import { MCPConfiguration } from "@mastra/mcp";
import { Agent } from "@mastra/core/agent";
import { openai } from "@ai-sdk/openai";

const mcp = new MCPConfiguration({
  servers: {
    stockPrice: {
      command: "npx",
      args: ["tsx", "stock-price.ts"],
      env: {
        API_KEY: "your-api-key",
      },
    },
    weather: {
      url: new URL("http://localhost:8080/sse"),
    },
  },
});

// Create an agent with access to all tools
const agent = new Agent({
  name: "Multi-tool Agent",
  instructions: "You have access to multiple tool servers.",
  model: openai("gpt-4"),
  tools: await mcp.getTools(),
});

자세한 내용은 Mastra의 MCPConfiguration을 참조하세요 .

LLM 앱 및 에이전트에서 MCP의 과제와 향후 계획

이 튜토리얼에서는 MCP를 소개하고 개발자 커뮤니티에서 MCP가 인기를 얻은 이유를 설명합니다. Cursor 및 Windsurf와 같은 IDE와 MCP의 통합을 중점적으로 다룹니다. 또한, LLM 기반 앱, AI 어시스턴트, 에이전트를 구축하기 위해 7가지 Python 및 TypeScript 프레임워크에서 MCP를 구현했습니다.

 

MCP의 뛰어난 기능에는 다음과 같은 과제 도 있습니다 . 프로젝트에 적합한 MCP 도구를 찾을 때, 도구의 품질을 검토하거나 검증하고 AI 프로젝트에 정확히 적용할 수 있는지 확인하는 것이 어려울 수 있습니다. 도구 검색 및 탐색 기능이 아직 표준화되지 않았기 때문입니다. 또한, MCP 서버 제공업체의 스키마가 서로 달라 일관된 사용자 경험을 제공하기 어렵습니다.

 

현재 MCP 생태계에서는 MCP의 다양한 측면을 표준화하는 방안을 논의하고pip install 있습니다. Python 패키징 방식처럼, 향후 MCP 기반 앱을 설치하는 표준 방식이 마련될 수도 있습니다 . PulseMCP는 MCP 탐색 및 검색을 더욱 쉽게 만들기 위해 노력하고 있습니다.

 

 

 

728x90
반응형