目录
主要特点:
首页 后端开发 Python教程 在 Python 中使用 Jina.ai 和 FastMCP 构建模型上下文协议服务器

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

Jan 05, 2025 am 07:25 AM

在这篇文章中,我们将讨论模型上下文协议,为什么它可能很重要,并逐步构建 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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

See all articles