网络搜索_MCP
带有网络搜索工具的MCP(模型上下文协议)服务器
该项目演示了如何使用Tavily API创建一个网络搜索工具,并将其与MCP(模型上下文协议)集成,以实现与AI系统的无缝交互。这允许您为语言模型或应用程序提供实时网络搜索功能。
概述
这 Web_Search_MCP 该项目利用了以下关键组件:
- Tavilly API: 强大的搜索API,提供实时、全面的网络搜索结果,包括答案、原始内容和相关元数据。
- FastMCP: FastMCP类使用Python类型提示和文档字符串自动生成工具定义,使创建和维护MCP工具变得容易。
- 狼链: 具体而言
TavilySearchResults来自Langchain的工具被用来有效地和Tavily API交互。 - Dotenv: 用于从加载环境变量的库
.env文件,安全地管理敏感信息,如API密钥。 - 紫外线: 一个非常快速的Python包安装程序和解析器,用于管理和运行这个项目。
功能
该项目的核心在于 search_web 该工具提供以下功能:
- 网络搜索: 接受搜索查询作为输入,并使用Tavily API从web检索相关搜索结果。
- 详细结果: 提供搜索结果的详细信息,包括网站的内容、URL、相关性评分、内容类型和直接答案(如果可用)。
- 格式化输出: 以结构良好的JSON格式返回搜索结果。输出包括一个状态指示器(
success或error)、结果数组(如果成功)和时间戳。 - 错误处理: 优雅地处理搜索过程中的错误,并以JSON格式返回信息丰富的错误消息。
- 异步处理:搜索工具基于异步,可以同时处理许多请求。
先决条件
在运行项目之前,请确保您已经:
- Python 3.8+: 您的系统上安装了Python 3.8或更高版本。
- Tavilly API密钥: 一个有效的Tavily API密钥,可通过在Tavily网站上注册获得。
- 紫外线: Python的uv包管理器。您可以使用以下方式安装它:
pip install uv安装
- 创建项目目录: 为项目创建一个目录并导航到其中:
uv init Web_Search_MCP \*\*\*通过运行上述代码,uv创建 pyproject.toml 和 .venv 在目录中\*\*\*
- 创建项目文件: 创建文件
main.py和.env在Web_Search_MCP目录。 - 激活Venv: 导航到.venv/Scripts/activate并激活Vritual环境
- 复制代码: 将代码复制到
main.py和.env在您刚刚创建的文件中。 - 安装依赖关系: 使用
uv安装所需的Python包:
uv add "mcp[cli]" python-dotenv langchain-community tavily-python配置
.env文件:
- 创建一个名为的文件 .env 在 Web_Search_MCP 目录。 - 将Tavily API密钥添加到 .env 文件格式如下:
TAVILY_API_KEY='your_tavily_api_key'替换 your_tavily_api_key 使用您的Tavilly API密钥。
claude_desktop_config.json:
- 此文件由Claude桌面应用程序(如果您正在使用它)用于发现和运行FastMCP服务器。 - 它应该位于 c:\Users\\AppData\Roaming\Claude\claude_desktop_config.json - 确保通往您的道路 Web_Search_MCP 目录中 claude_desktop_config.json 是准确的。如果您的项目不在路径/Web_Search_MCP中, please modify the配置文件中的args字段。
{
"mcpServers": {
"Mcp_Demo": {
"command": "uv",
"args": [
"--directory",
"path/Web_Search_MCP",
"run",
"main.py"
]
}
}
}运行MCP服务器
经过深思熟虑后 claude_desktop_config.json 文件,您可以从Claude桌面应用程序中启动服务器。
用法
一旦服务器运行,它就会公开一个名为 search_web 根据模型上下文协议。
- 工具名称:
search_web - 输入:
- query (str):您要提交到网络的搜索查询。
- 输出: 包含搜索结果的JSON格式字符串。
JSON响应示例(成功):
{
"status": "success",
"results": [
{
"title": "...",
"url": "...",
"content": "text",
"score": 0.9,
"raw_content": "..."
},
{
"title": "...",
"url": "...",
"content": "text",
"score": 0.9,
"raw_content": "..."
}
],
"timestamp": 1708849844.064655
}
