SearXNG+MCP实现搜索引擎,想怎么搜就怎么搜

一、概述

MCP应用市场,有很多搜索引擎的应用。但是你们会发现,普遍都需要api-key。你必须花钱购买api-key才能实现搜索功能。

问题来了,我就想用免费搜索的,就像百度一样,可不可以?

答案是可以的,需要借助一下工具SearXNG,自己本地搭建SearXNG,然后使用python调用SearXNG api接口,最后用fastmcp封装一个MCP应用就可以了。

二、SearXNG本地搭建

搭建过程参考链接:https://www.cnblogs.com/xiao987334176/p/18806251

这里就不重复了

访问SearXNG页面

 随便搜索一个问题

查看北京天气

注意右边可以看到,搜索引擎就是我设定的几个,比如:百度,搜狗,必应,360

其中百度是最快的,大部分人都在用百度。

 这里有一个API地址,可以返回json,例如:

http://10.44.32.14:8081/search?q=上海到北京机票多少钱&format=json

结果如下:

你会看到一串json信息,里面就是搜索结果。

然后使用fastmcp调用这个api接口,封装一个MCP应用就可以了。

三、MCP应用开发

server.py

from fastmcp import FastMCP
import requests

mcp = FastMCP("searxng", port=9000)

@mcp.tool()
def search(query: str) -> str:
    """
    搜索关键字
    """
    # API URL
    url = "http://10.44.32.14:8081/search?q=%s&format=json"%query

    try:
        # 发送GET请求
        response = requests.get(url)

        # 检查请求是否成功
        if response.status_code == 200:
            # 将响应内容解析为JSON
            data = response.json()
            # print("JSON内容:")
            # print(data,type(data))
            result_list=[]
            for i in data["results"]:
                # print(i["content"])
                result_list.append(i["content"])
            content="\n".join(result_list)
            # print(content)
            return content
        else:
            print(f"请求失败,状态码: {response.status_code}")
            return False

    except requests.exceptions.RequestException as e:
        print(f"请求过程中发生错误: {e}")
        return False

if __name__ == "__main__":
    mcp.run(transport="sse")

 注意修改API地址为实际地址。

四、Cherry Studio测试

添加MCP服务器

 添加智能体

 提示词如下:

## 技能
### 技能1:使用MCP工具进行联网搜索,获取到的相关内容进行总结分析
## 限制
- 如果没有相关内容,再进行联网搜索
- 你的回答应严格针对分析任务。使用结构化语言,逐步思考
- 使用的语言应和用户提问的语言相同
- 搜索的关键词必须和用户提问的内容一致

效果如下:

添加到聊天助手,开启MCP

 搜索问题

AI芯片的价格怎么样

效果如下:

 这里就实现了,搜索引擎的功能。

你想查询天气,地图,新闻,都是可以的。

股票价格也可以查询

不方便用手机查询,这里就可以查到,很方便。

想怎么搜就怎么搜

### 实现 Spring AI 和 MCP 中的 SSE(Server-Sent Events) 为了通过 Spring AI 和 MCP 协议实现 SSE(Server-Sent Events),需要理解以下几个核心概念: 1. **SSE 基础** SSE 是一种基于 HTTP 的技术,允许服务器向客户端推送实时更新的数据。它适用于单向通信场景,即服务器主动推送给客户端消息[^1]。 2. **MCP 上下文协议** MCP 使用 JSON-RPC 2.0 来定义消息格式,并支持通过多种传输方式传递数据。其中,HTTP with SSE 被用来实现实时通知功能[^3]。 3. **Spring Boot 集成 SSE** 在 Spring 应用程序中,可以通过 `ResponseEntity` 或者 `StreamingResponseBody` 提供流式响应来实现 SSE 功能。 以下是具体实现方法的一个示例教程: #### 创建 Spring Boot 项目 首先创建一个新的 Spring Boot 项目并引入必要的依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` #### 定义控制器以支持 SSE 推送 下面是一个简单的控制器代码片段,展示如何使用 Spring Boot 发布 SSE 数据流: ```java import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @RestController public class SseController { @GetMapping(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<String> streamEvents() { return Flux.generate( sink -> sink.next(LocalDateTime.now().toString()) ).delayElements(Duration.ofSeconds(1)); } } ``` 上述代码实现了每秒一次的时间戳广播服务。 #### 结合 MCP 协议扩展 SSE 如果要将此逻辑嵌入到 MCP 框架中,则需进一步调整消息结构使其兼容 JSON-RPC 2.0 格式的请求与响应。例如,在每次发送事件之前封装为标准的 JSON 对象形式: ```json { "jsonrpc": "2.0", "method": "notifyUpdate", "params": {"timestamp": "2023-10-07T12:00:00"} } ``` 这样做的目的是让前端能够解析接收到的内容作为合法的 RPC 方法调用。 #### 处理 SQLite 后端存储问题 对于某些特定环境下的部署需求,比如 Windows 平台上的 claude-desktop 工具链集成案例提到过关于 uvx 可执行文件路径设置错误引发的问题解决方案可以参照以下步骤解决[^4]: 修改配置文件中的 command 参数指向实际存在的可运行实例绝对地址即可避免因找不到对应工具而导致启动失败的情况发生。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值