[MCP实战]: 快速实现一个网络搜索和网页正文提取的MCP Server,项目已开源

MCP是个什么? 

最近关于MCP的话题甚嚣尘上,那么它到底是个什么东西,能用来干什么?本文通过一个项目开发的形式来了解什么是MCP。

它是由Anthropic(就是开发Claude的那个AI公司)提出的一种开放标准协议,我们先来看看官方的定义:

“MCP是一种开放协议,标准化了应用程序如何向LLMs提供上下文。将MCP视为AI应用程序的USB-C端口。就像USB-C提供了连接设备到各种外围设备和配件的标准化方式一样,MCP提供了连接AI模型到不同数据源和工具的标准化方式。”

图片

其实MCP 就是让 AI 应用(可以视为Host)能够(通过MCP Server)安全地访问和操作本地(如文件系统)及远程数据(如各种接口、数据库等),为 AI 应用提供了连接万物的接口(就像USB Type-C接口)。这种标准化的协议增强了系统的扩展性并简化了AI Agent应用的开发过程。

图片

本次实践的项目目标是构建一个MCP Server, 通过集成搜索引擎和网络爬虫工具,让AI拥有搜索、网页URL内容提取、甚至爬取整个网站的能力。项目取名为:`one-search-mcp`,采用标准输入和输出流进行通信(stdio)。

项目开发物料如下:

  • Node.js >= 20

  • MCP官方提供的 typescript-sdk: @modelcontextprotocol/sdk

  • SearXNG、Tavily等作为网络搜索服务

  • Firecrawl 等作为提取网页内容服务

Tips: SearXNG和Firecrawl一键本地化部署(Docker)方法Github仓库中有详细介绍。

一、项目介绍

本项目代码已经开源(文末为Github仓库地址)并发布为npm包:

# 可选安装npm i -g one-search-mcp

如果使用npx运行,不需要再使用npm安装了。

env SEARCH_API_URL=http://127.0.0.1:8080 npx -y one-search-mcp

在开始进行MCP Server开发前,先介绍一下项目开发完成后的应用方式。

1、在MCP Client开发中使用的示例:

import { Client } from '@modelcontextprotocol/sdk/client/index.js';import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const mcp = new Client({
    name: 'mcp-client-cli',  version: '1.0.0',});
const transport = new StdioClientTransport({
    command: 'npx',  args: ['-y', 'one-search-mcp'],  env: {
      FIRECRAWL_API_URL: &#
### 关于 Cursor MCP 的定义 Cursor MCP 是指一种特定类型的多计算平台管理程序,在信息技术环境中用于管理协调多个计算资源。这种技术允许在一个集中化的平台上控制分配不同种类的计算任务,从而提高效率并简化操作流程[^1]。 ### 使用场景 在实际应用中,Cursor MCP 可以被部署来支持大规模的数据处理需求。通过这种方式,企业能够更灵活地响应业务变化,并且可以优化硬件利用率。例如,在云计算服务提供商处,MCP 能够帮助自动化虚拟机实例的创建、配置以及销毁过程,确保资源按需分配给客户[^2]。 ### 面临的问题 然而,在实施 Cursor MCP 解决方案时也可能遇到一些挑战。其中包括但不限于安全性考量——如何保护敏感数据免受未授权访问;性能瓶颈——当并发请求过多时可能出现延迟增加的情况;还有兼容性问题——某些旧版应用程序可能无法很好地运行在此类新型架构之上[^3]。 ```python # Python 示例代码展示如何连接到一个假设中的 Cursor MCP API 来获取当前活动节点列表 import requests def get_active_nodes(api_url): response = requests.get(f"{api_url}/nodes/active") if response.status_code == 200: return response.json() else: raise Exception("Failed to fetch active nodes") try: api_endpoint = "https://example.com/api/v1" active_node_list = get_active_nodes(api_endpoint) print(active_node_list) except Exception as e: print(e) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值