首页 >后端开发 >Python教程 >在 Python 中使用 Jina.ai 和 FastMCP 构建模型上下文协议服务器

在 Python 中使用 Jina.ai 和 FastMCP 构建模型上下文协议服务器

Linda Hamilton
Linda Hamilton原创
2025-01-05 07:25:39317浏览

在这篇文章中,我们将讨论模型上下文协议,为什么它可能很重要,并逐步构建 MCP 服务器来帮助我们与 Jina.ai 对话,并能够在 Claude 中添加网络搜索和事实检查功能使用 Python 和 FastMCP 的桌面。

模型上下文协议

Anthropic于去年感恩节前后宣布。尽管它引起了一些关注,但考虑到它可能是开发下一层人工智能软件堆栈的关键垫脚石,它所获得的认可可能还不够。

什么

模型上下文协议(MCP)是专为大型语言模型(LLM)设计的标准化通信协议。

将其视为“AI 的 HTTP”——就像 HTTP 标准化了 Web 浏览器与 Web 服务器的通信方式一样,MCP 标准化了 LLM 应用程序与工具和数据源的通信方式。

为什么我们需要 MCP?

目前LLM的发展面临着几个障碍:

  1. 工具集成复杂度:每个LLM服务(如OpenAI、Anthropic等)都有其实现工具调用和函数调用的方式,使得构建可移植工具变得复杂。

  2. 上下文管理:法学硕士需要访问各种数据源和工具,但安全有效地管理此访问权限一直具有挑战性。

  3. 标准化:如果没有标准协议,开发人员必须为他们想要支持的每个 LLM 平台重建集成层。

MCP 通过提供以下功能来解决这些挑战:

  • 向法学硕士公开工具和数据的标准化方法
  • 安全的客户端-服务器架构
  • 无论底层 LLM 如何,都有一致的接口

MCP 如何运作?

MCP 遵循客户端-服务器架构,具有三个主要组件:

  1. MCP 服务器:公开的服务:

    • 工具(LLM可以调用的函数)
    • 资源(数据源)
    • 提示(模板说明)
    • 上下文(动态信息)
  2. MCP 客户端:应用程序连接到 MCP 服务器并管理 LLM 和服务器之间的通信。客户端支持还处于早期阶段,到目前为止,只有少数工具可以实现协议规范的任何部分,并且尚无客户端支持一些功能。

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

当然还有法学硕士...

工作流程很简单:

  1. MCP 服务器注册其功能(工具、资源等)
  2. 客户端连接到服务器
  3. 法学硕士可以通过标准化接口使用这些功能

传输协议

  • 多种运输机制
    • SSE(服务器发送事件)
      • 通过 HTTP 双向通信,服务器进程与客户端隔离
    • Stdio(标准输入/输出)
      • 通过标准输入/输出管道进行通信,服务器进程本质上是客户端的子进程

安全

安全局势更加微妙。虽然使用 stdio 传输的服务器通常与客户端位于同一位置,因此 API 密钥不一定会暴露在互联网上。在我看来,它们确实似乎相当随意地被传播。

这些密钥需要在服务器启动时加载到客户端,以便将它们传递给子进程,它们甚至出现在桌面应用程序日志中,这是……令人担忧的。

API 密钥的广泛使用是影响 Gen AI 服务、平台和工具的更广泛问题。 Okta 和 Auth0 等公司正在开发一种无需依赖密钥即可管理和授权 Gen AI 的解决方案。

软件开发工具包

Anthropic 官方支持 TypeScript、Python 和 Kotlin 的低级 SDK。最近创建的一些样板包装器已经涵盖了一些样板文件,并具有其他不错的功能,例如用于调试、检查和在客户端上安装服务器的 CLI,以使开发 MCP 服务器变得更容易。

FastMCP 入门

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python 杰洛文 / 快速MCP

构建模型上下文协议服务器的快速、Pythonic 方法?

FastMCP?

构建 MCP 服务器的快速、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 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 处理所有复杂的协议细节和服务器管理,因此您可以专注于构建出色的工具。它被设计为高级且Pythonic - 在大多数情况下,装饰一个函数就足够了。

主要特点:

  • 快速:高级接口意味着更少的代码和更快的开发
  • 简单
在 GitHub 上查看

FastMCP 就是这样一个框架。我们现在将探讨如何创建一个几乎实用的工具来阅读网站、通过网络回答搜索查询以及事实检查信息。我们将使用 Jina.ai。

这是一项非常巧妙的服务,提供了一个结合了“嵌入、重新排名和小语言模型”的“搜索基础平台”,以帮助企业构建 Gen AI 和多模式搜索体验。

先决条件

  • 紫外线

您需要安装 uv。这是创建和管理 Python 项目的推荐方法。它是一个相对较新但令人兴奋的 Python 工具链 astral.sh 的一部分。我建议你检查一下。

它的目标是成为管理项目、依赖项、虚拟环境、版本、linting 以及执行 Python 脚本和模块的一站式商店。它是用 Rust 编写的。你会用这些信息做什么?

  • 克劳德桌面应用程序

您还需要安装 Claude 桌面应用程序。就我们的目的而言,Claude 桌面应用程序将充当 MCP 客户端,并且是 Anthropic 的关键目标客户端。

Building a Model Context Protocol Server using Jina.ai and FastMCP in Python 阿斯拉加布 / mcp-jinaai-阅读器

Jina.ai Reader API 的模型上下文协议 (MCP) 服务器

Jina.ai Reader 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 的文件夹和一个 .python-version 以及 pyproject.toml。

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 请求的库;我们需要 urlparse 方法来帮助我们确定字符串是否可能是有效的 URL。

JINAAI_API_KEY=jina_*************

这会初始化服务器;第一个参数是工具的名称。我不是 100% 确定为什么 uvicorn 需要在这里显式添加为依赖项,因为它是 FastMCP 的传递依赖项,但它似乎确实是必需的。

这可能是由于 fastmcp cli(稍后会详细介绍)安装服务器的方式造成的。如果您还有其他依赖项,则必须在此处添加它们,以便客户端知道您需要在运行客户端之前安装它们;我们稍后会看到它是如何工作的。

from fastmcp import FastMCP
import httpx
from urllib.parse import urlparse
import os

您可能可以在这里找出模式,但 Jina 使用不同的子域来路由特定请求。搜索端点需要一个查询,读取器端点需要一个 URL,而接地端点可以向 llm 提供特定的响应或答案。

接地是一个更大的主题,与 RAG 和微调等其他技术一起使用,以帮助法学硕士减少幻觉并改进决策。

我们的第一个工具

# 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

运行上述命令将启动 mcp 检查器,它是 sdk 提供的一个工具,用于测试和调试服务器响应。 --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 会将环境变量传递给应用程序客户端。

这在幕后的作用是更新 claude_desktop_config.json 并提供运行服务器所需的命令和参数。默认情况下,这使用 uv ,它必须在您的 PATH 上可用。

如果您现在打开 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 服务器,否则您的工具可能应该是两个)

您不像平常那​​样直接调用该工具,而是与应用程序聊天,当它遇到推断该工具有帮助的情况时,它会询问您是否要使用它。这里不需要额外的代码或配置。

我认为它依赖于工具名称和描述来决定它是否合适,因此值得为该工具的功能制作一个清晰简单的描述。

您将收到如下提示:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn