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

在这篇文章中,我们将讨论模型上下文协议,为什么它可能很重要,并逐步构建 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
如何使用Python查找文本文件的ZIPF分布如何使用Python查找文本文件的ZIPF分布Mar 05, 2025 am 09:58 AM

本教程演示如何使用Python处理Zipf定律这一统计概念,并展示Python在处理该定律时读取和排序大型文本文件的效率。 您可能想知道Zipf分布这个术语是什么意思。要理解这个术语,我们首先需要定义Zipf定律。别担心,我会尽量简化说明。 Zipf定律 Zipf定律简单来说就是:在一个大型自然语言语料库中,最频繁出现的词的出现频率大约是第二频繁词的两倍,是第三频繁词的三倍,是第四频繁词的四倍,以此类推。 让我们来看一个例子。如果您查看美国英语的Brown语料库,您会注意到最频繁出现的词是“th

我如何使用美丽的汤来解析HTML?我如何使用美丽的汤来解析HTML?Mar 10, 2025 pm 06:54 PM

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

python中的图像过滤python中的图像过滤Mar 03, 2025 am 09:44 AM

处理嘈杂的图像是一个常见的问题,尤其是手机或低分辨率摄像头照片。 本教程使用OpenCV探索Python中的图像过滤技术来解决此问题。 图像过滤:功能强大的工具 图像过滤器

如何使用Python使用PDF文档如何使用Python使用PDF文档Mar 02, 2025 am 09:54 AM

PDF 文件因其跨平台兼容性而广受欢迎,内容和布局在不同操作系统、阅读设备和软件上保持一致。然而,与 Python 处理纯文本文件不同,PDF 文件是二进制文件,结构更复杂,包含字体、颜色和图像等元素。 幸运的是,借助 Python 的外部模块,处理 PDF 文件并非难事。本文将使用 PyPDF2 模块演示如何打开 PDF 文件、打印页面和提取文本。关于 PDF 文件的创建和编辑,请参考我的另一篇教程。 准备工作 核心在于使用外部模块 PyPDF2。首先,使用 pip 安装它: pip 是 P

如何在django应用程序中使用redis缓存如何在django应用程序中使用redis缓存Mar 02, 2025 am 10:10 AM

本教程演示了如何利用Redis缓存以提高Python应用程序的性能,特别是在Django框架内。 我们将介绍REDIS安装,Django配置和性能比较,以突出显示BENE

如何使用TensorFlow或Pytorch进行深度学习?如何使用TensorFlow或Pytorch进行深度学习?Mar 10, 2025 pm 06:52 PM

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

Python中的平行和并发编程简介Python中的平行和并发编程简介Mar 03, 2025 am 10:32 AM

Python是数据科学和处理的最爱,为高性能计算提供了丰富的生态系统。但是,Python中的并行编程提出了独特的挑战。本教程探讨了这些挑战,重点是全球解释

如何在Python中实现自己的数据结构如何在Python中实现自己的数据结构Mar 03, 2025 am 09:28 AM

本教程演示了在Python 3中创建自定义管道数据结构,利用类和操作员超载以增强功能。 管道的灵活性在于它能够将一系列函数应用于数据集的能力,GE

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具