> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 Jina.ai 및 FastMCP를 사용하여 모델 컨텍스트 프로토콜 서버 구축

Python에서 Jina.ai 및 FastMCP를 사용하여 모델 컨텍스트 프로토콜 서버 구축

Linda Hamilton
풀어 주다: 2025-01-05 07:25:39
원래의
269명이 탐색했습니다.

이 게시물에서는 Model Context Protocol이 중요한 이유에 대해 논의하고 Jina.ai와 통신하고 Claude에 웹 검색 및 사실 확인 기능을 추가할 수 있도록 MCP 서버 구축을 안내합니다. Python과 FastMCP를 사용하는 데스크탑.

모델 컨텍스트 프로토콜

앤트로픽은 지난해 추수감사절쯤 발표했다. 어느 정도 주목을 받았지만 AI 소프트웨어 스택의 다음 계층을 개발하는 데 중추적인 디딤돌이 될 수 있다는 점을 고려하면 인지도가 부족할 수 있습니다.

무엇

MCP(모델 컨텍스트 프로토콜)는 LLM(대형 언어 모델)용으로 특별히 설계된 표준화된 통신 프로토콜입니다.

"AI의 HTTP"라고 생각하세요. HTTP가 웹 브라우저가 웹 서버와 통신하는 방식을 표준화한 것처럼 MCP는 LLM 애플리케이션이 도구 및 데이터 소스와 통신하는 방식을 표준화합니다.

MCP가 필요한 이유는 무엇입니까?

현재 LLM 개발 환경은 몇 가지 장애물에 직면해 있습니다.

  1. 도구 통합 복잡성: 각 LLM 서비스(예: OpenAI, Anthropic 등)에는 도구 호출 및 함수 호출을 구현하는 방식이 있으므로 이식 가능한 도구를 구축하기가 복잡합니다.

  2. 컨텍스트 관리: LLM은 다양한 데이터 소스와 도구에 대한 액세스가 필요하지만 이러한 액세스를 안전하고 효율적으로 관리하는 것은 어려웠습니다.

  3. 표준화: 표준 프로토콜이 없으면 개발자는 지원하려는 각 LLM 플랫폼에 대한 통합 계층을 다시 구축해야 합니다.

MCP는 다음을 제공하여 이러한 문제를 해결합니다.

  • 도구와 데이터를 LLM에 노출하는 표준화된 방법
  • 안전한 클라이언트-서버 아키텍처
  • 기본 LLM에 관계없이 일관된 인터페이스

MCP는 어떻게 작동합니까?

MCP는 세 가지 주요 구성 요소로 구성된 클라이언트-서버 아키텍처를 따릅니다.

  1. MCP 서버: 다음을 노출하는 서비스:

    • 도구(LLM이 호출할 수 있는 기능)
    • 리소스(데이터 소스)
    • 프롬프트(템플릿 지침)
    • 컨텍스트(동적 정보)
  2. MCP 클라이언트: 애플리케이션은 MCP 서버에 연결하고 LLM과 서버 간의 통신을 관리합니다. 클라이언트 지원은 아직 초기 단계에 있으며, 지금까지 프로토콜 사양의 일부를 구현하는 소수의 도구와 아직 클라이언트가 지원하지 않는 일부 기능만 있습니다.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

물론 LLM도...

워크플로우는 간단합니다.

  1. MCP 서버는 해당 기능(도구, 리소스 등)을 등록합니다
  2. 클라이언트가 서버에 연결
  3. LLM은 표준화된 인터페이스를 통해 이러한 기능을 사용할 수 있습니다

전송 프로토콜

  • 다양한 운송 메커니즘
    • SSE(서버 전송 이벤트)
      • HTTP를 통해 양방향으로 통신하며 서버 프로세스는 클라이언트와 격리됩니다
    • Stdio(표준 입력/출력)
      • 표준 입력/출력 파이프를 통해 통신하며 서버 프로세스는 본질적으로 클라이언트의 하위 프로세스입니다

보안

보안 상황은 더욱 미묘합니다. stdio 전송을 사용하는 서버는 일반적으로 클라이언트와 같은 위치에 있으므로 API 키가 반드시 인터넷에 노출되는 것은 아닙니다. IMO는 꽤 아무렇지도 않게 지나가는 것 같습니다.

이러한 키는 서버가 시작될 때 하위 프로세스로 전달될 수 있도록 클라이언트에 로드되어야 했고 심지어 데스크톱 앱 로그에도 표시되었는데... 문제가 되었습니다.

API 키의 광범위한 사용은 Gen AI 서비스, 플랫폼 및 도구에 영향을 미치는 더 광범위한 문제입니다. Okta 및 Auth0과 같은 회사는 키에 의존하지 않고 Gen AI를 관리하고 승인하는 솔루션을 개발하고 있습니다.

SDK

Anthropic은 TypeScript, Python 및 Kotlin용 하위 수준 SDK를 공식적으로 지원합니다. 최근에 생성된 일부 상용구 래퍼에는 이미 일부 상용구가 포함되어 있으며 MCP 서버 개발을 더 쉽게 만들기 위해 클라이언트에 서버를 디버깅, 검사 및 설치하기 위한 CLI와 같은 다른 유용한 기능도 포함되어 있습니다.

FastMCP 시작하기

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python 졸윈 / 빠른mcp

Model Context Protocol 서버를 구축하는 빠르고 Python적인 방법은 무엇입니까?

FastMCP ?

빠른 Python 방식으로 MCP 서버를 구축합니다.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python Building a Model Context Protocol Server using Jina.ai and FastMCP in Python Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

MCP(모델 컨텍스트 프로토콜) 서버는 LLM에 컨텍스트와 도구를 제공하는 새롭고 표준화된 방법이며 FastMCP를 사용하면 MCP 서버를 간단하고 직관적으로 구축할 수 있습니다. 깔끔한 Python 코드로 도구를 만들고, 리소스를 노출하고, 프롬프트를 정의하세요.

# demo.py

from fastmcp import FastMCP


mcp = FastMCP("Demo ?")


@<span>mcp.tool()</span>
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b
로그인 후 복사
로그인 후 복사
로그인 후 복사
전체 화면 모드로 전환 전체 화면 모드 종료

그렇습니다! 다음을 실행하여 Claude에게 서버 액세스 권한을 부여하세요.

fastmcp install demo.py
로그인 후 복사
로그인 후 복사
로그인 후 복사
전체 화면 모드로 전환 전체 화면 모드 종료

FastMCP는 복잡한 프로토콜 세부 사항과 서버 관리를 모두 처리하므로 훌륭한 도구를 구축하는 데 집중할 수 있습니다. 높은 수준의 Python 방식으로 설계되었습니다. 대부분의 경우 함수를 꾸미는 것만으로도 충분합니다.

주요 기능:

  • 빠름: 높은 수준의 인터페이스로 코드가 적고 개발 속도가 빨라집니다
  • 간단
GitHub에서 보기

FastMCP는 그러한 프레임워크 중 하나입니다. 이제 웹사이트 읽기, 웹을 통한 검색어 응답, 사실 확인 정보를 위한 거의 실용적인 도구를 만드는 방법을 살펴보겠습니다. 우리는 Jina.ai를 사용할 것입니다.

기업이 Gen AI 및 멀티모달 검색 경험을 구축하는 데 도움이 되도록 "임베딩, 리랭커 및 소규모 언어 모델"을 결합한 "검색 기반 플랫폼"을 제공하는 매우 매끄러운 서비스입니다.

전제 조건

  • 자외선

UV를 설치해야 합니다. Python 프로젝트를 생성하고 관리하는 데 권장되는 방법입니다. 이는 astral.sh라는 비교적 최근이지만 흥미로운 Python 도구 체인의 일부입니다. 꼭 확인해 보시길 권합니다.

프로젝트, 종속성, 가상 환경, 버전, Linting 관리, Python 스크립트 및 모듈 실행을 위한 원스톱 상점을 목표로 합니다. Rust로 작성되었습니다. 그 정보로 무엇을 하시겠습니까?.

  • 클로드 데스크톱 앱

Claude 데스크톱 앱도 설치해야 합니다. 우리의 목적을 위해 Claude Desktop App은 MCP 클라이언트 역할을 하며 Anthropic의 주요 대상 클라이언트입니다.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python ASRagab / mcp-지나이-리더

Jina.ai 리더 API용 모델 컨텍스트 프로토콜(MCP) 서버

Jina.ai 리더 API용 MCP 서버

전체 둘러보기:

https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8


GitHub에서 보기


프로젝트 설정

uv를 사용하면 다음을 사용하여 프로젝트를 초기화할 수 있습니다.

# demo.py

from fastmcp import FastMCP


mcp = FastMCP("Demo ?")


@<span>mcp.tool()</span>
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b
로그인 후 복사
로그인 후 복사
로그인 후 복사

이렇게 하면 mcp-jinaai-reader라는 폴더와 pyproject.toml과 함께 .python 버전이 생성됩니다.

fastmcp install demo.py
로그인 후 복사
로그인 후 복사
로그인 후 복사

이렇게 하면 우리가 선택한 Python 버전에 해당하는 가상 환경이 생성됩니다.

환경을 생성한 후 세션에 맞게 활성화하는 방법에 대한 지침을 제공합니다.

uv init mcp-jinaai-reader --python 3.11
로그인 후 복사
로그인 후 복사

src 디렉토리를 추가하고 필요한 종속성을 설치하세요

cd mcp-jinaai-reader
uv venv 
로그인 후 복사
로그인 후 복사

프로젝트 루트에 .env 파일을 생성하고 JINAAI_API_KEY를 파일에 추가합니다. Jina에 가입하시면 무료로 받으실 수 있습니다. 일반적으로 서버에서 실행해야 하는 API 키나 기타 환경 변수가 이 파일에 저장됩니다.

source .venv/bin/activate
로그인 후 복사
로그인 후 복사

src 디렉터리에 server.py 파일을 생성하면...코드를 얻을 수 있습니다.

서버 코드

uv add fastmcp
로그인 후 복사
로그인 후 복사

가져오기: httpx부터 시작하여 여기서는 http 요청을 수행하는 데 사용하는 라이브러리가 될 것입니다. 문자열이 유효한 URL인지 확인하는 데 도움이 되는 urlparse 메소드가 필요합니다.

JINAAI_API_KEY=jina_*************
로그인 후 복사

이렇게 하면 서버가 초기화됩니다. 첫 번째 인수는 도구의 이름입니다. uvicorn은 FastMCP의 전이적 종속성이므로 여기서 uvicorn을 종속성으로 명시적으로 추가해야 하는 이유를 100% 확신할 수 없지만 필수인 것 같습니다.

fastmcp cli(자세한 내용은 곧 설명)가 서버를 설치하는 방식 때문일 가능성이 높습니다. 다른 종속성이 있는 경우 클라이언트를 실행하기 전에 이를 설치해야 한다는 것을 클라이언트가 알 수 있도록 여기에 추가해야 합니다. 잠시 후 이것이 어떻게 작동하는지 살펴보겠습니다.

from fastmcp import FastMCP
import httpx
from urllib.parse import urlparse
import os
로그인 후 복사

여기에서 패턴을 추측할 수 있지만 Jina는 특정 요청을 라우팅하기 위해 다른 하위 도메인을 사용합니다. 검색 엔드포인트는 쿼리를 기대하고, 리더 엔드포인트는 URL을 기대하며, 접지 엔드포인트는 llm에 특정 응답이나 답변을 제공할 수 있습니다.

접지는 훨씬 더 광범위한 주제이며 RAG 및 미세 조정과 같은 다른 기술과 함께 사용되어 LLM이 환각을 줄이고 의사 결정을 개선하는 데 도움이 됩니다.

우리의 첫 번째 도구

# Initialize the MCP server
mcp = FastMCP("search", dependencies=["uvicorn"])
로그인 후 복사

@mcp.tool 주석은 많은 작업을 수행합니다. 리소스 및 프롬프트에 대한 유사한 주석이 라이브러리에 있습니다. 주석은 함수 서명 및 반환 유형의 세부 정보를 추출하여 도구를 호출하는 llm에 대한 입력 및 출력 스키마를 생성합니다. 클라이언트가 서버의 기능을 이해할 수 있도록 도구를 구성합니다. 또한 구성된 도구에 대한 처리기로 함수 호출을 등록합니다.

다음으로 함수가 비동기라는 것을 알 수 있습니다. 런타임 구성이 필요하지 않으며 asyncio.run 항목도 없습니다. 어떤 이유로든 서버를 독립형 서비스로 실행해야 하는 경우 이 중 일부를 직접 처리해야 합니다. 이를 수행하는 방법에 대한 예가 FastMCP 저장소에 있습니다.

함수 본문은 상당히 흥미롭지 않습니다. URL을 수신하고 있는지 확인하고, 적절한 헤더를 설정하고, Jina 엔드포인트를 호출하고, 텍스트를 반환합니다.

# demo.py

from fastmcp import FastMCP


mcp = FastMCP("Demo ?")


@<span>mcp.tool()</span>
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b
로그인 후 복사
로그인 후 복사
로그인 후 복사

두 번째 도구

fastmcp install demo.py
로그인 후 복사
로그인 후 복사
로그인 후 복사

그게 다입니다...

테스트 및 디버깅

uv init mcp-jinaai-reader --python 3.11
로그인 후 복사
로그인 후 복사

위 명령을 실행하면 서버 응답을 테스트하고 디버그하기 위해 SDK가 제공하는 도구인 mcp 검사기가 시작됩니다. --with-editable 플래그를 사용하면 검사기를 다시 시작하지 않고도 서버를 변경할 수 있습니다(매우, 적극 권장)

다음을 확인하세요.

cd mcp-jinaai-reader
uv venv 
로그인 후 복사
로그인 후 복사

기본적으로 검사기는 포트 5173에서 실행되고 서버(방금 작성한 코드)는 포트 3000에서 실행됩니다. 호출하기 전에 SERVER_PORT 및 CLIENT_PORT를 설정하여 이를 변경할 수 있습니다.

source .venv/bin/activate
로그인 후 복사
로그인 후 복사

검사관

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

모든 것이 순조롭게 진행되면 다음과 같은 내용이 표시됩니다. 왼쪽에는 필요한 환경 변수를 추가할 수 있습니다. 여기서는 JINAAI_API_KEY가 유일한 것입니다.

상단 메뉴 표시줄에서 도구를 클릭한 다음 도구 목록을 클릭하면 우리가 만든 도구가 표시됩니다. 독스트링은 도구에 대한 설명 역할을 합니다.

특정 도구를 클릭하면 해당 도구를 호출하는 데 필요한 매개변수를 입력할 수 있는 텍스트 상자가 나타납니다.

서버 설치

모든 것이 예상대로 작동하고 있다고 만족했다면 이제 Claude 데스크톱 앱 클라이언트에 서버를 설치할 준비가 된 것입니다.

uv add fastmcp
로그인 후 복사
로그인 후 복사

이렇게 하면 나중에 다른 고객에게도 도움이 될 것이라고 확신하지만 지금은 이것이 전부입니다. -f .env는 env 변수를 앱 클라이언트에 전달합니다.

내부적으로 수행되는 작업은 clude_desktop_config.json을 업데이트하고 서버를 실행하는 데 필요한 명령과 인수를 제공하는 것입니다. 기본적으로 이는 PATH에서 사용할 수 있어야 하는 uv를 사용합니다.

이제 Claude 데스크톱 앱을 열고 메뉴 표시줄로 이동하여 Claude > 설정을 클릭한 다음 개발자를 클릭하면 서버를 초기화할 때 설정한 도구 이름이 표시됩니다.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

클릭하면 구성이 나타납니다. 실행 방법뿐만 아니라 고급 옵션에서 설정된 환경 변수도 확인할 수 있습니다.

이 구성을 직접 편집할 수도 있지만 여기서는 반드시 권장하지는 않습니다.

실행하기

데스크톱 앱으로 이동했을 때 모든 것이 순조롭게 진행되면 오류가 표시되지 않습니다. 오류가 발생한 경우 설정으로 이동하면 로그를 확인하고 조사할 수 있는 버튼이 제공됩니다.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

또한 사용할 수 있는 개별 도구의 수를 나타내는 망치 기호가 표시되어야 합니다(참고: 다른 MCP 서버를 설치하지 않은 경우 도구는 아마도 2개일 것입니다)

도구를 직접 호출하는 대신 평소처럼 앱과 채팅을 하고, 도구가 도움이 된다고 판단되는 상황이 발생하면 사용할 것인지 묻습니다. 여기에는 추가 코드나 구성이 필요하지 않습니다.

도구 이름과 설명 모두에 따라 적절한지 여부가 결정된다고 생각하므로 도구가 수행하는 작업에 대해 명확하고 간단한 설명을 작성하는 것이 좋습니다.

다음과 같은 메시지가 표시됩니다.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

그냥 "채팅"할 ​​수도 있습니다. 물론 작성된 도구에 문제가 발생할 때도 있습니다. 때로는 인터넷에 액세스할 수 없다고 결정하고 때로는 결과를 검색하지 못하지만 때로는 다음과 같은 결과가 나타납니다.

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python

이것은 페이지를 읽고, 요약을 제공하고, 특정 기사로 가서 그것을 읽으라고 요청하는 일종의 자연스러운 흐름이었습니다.

최종 메모

이 글을 통해 MCP 서버에 대한 통찰력을 얻으셨기를 바랍니다. 읽고 볼 내용이 많지만 제가 추천할 또 하나의 사이트는 glama.ai입니다. 이 사이트는 우리의 장난감 예제보다 더 안정적인 다른 웹 검색 도구를 포함하여 다운로드하고 시험해 볼 수 있는 사용 가능한 MCP 서버의 상당히 포괄적인 목록을 유지하고 있습니다. 확인해 보시고 따라해 주셔서 감사합니다.

위 내용은 Python에서 Jina.ai 및 FastMCP를 사용하여 모델 컨텍스트 프로토콜 서버 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿