使用说明
Web获取和搜索MCP服务器
一种模型上下文协议(MCP)服务器,提供web搜索、维基百科搜索和web内容获取功能,使用eio异步运行时用OCaml编写。
特性
- DuckDuckGo搜索:使用DuckDuckGo的搜索引擎搜索网络
- 维基百科搜索:在维基百科中搜索文章和内容
- Web内容获取:从网页中获取和解析内容,支持清理后的HTML和Markdown格式
- 速率限制:内置速率限制,以遵守服务限制
- MCP协议:与模型上下文协议规范完全兼容(供应商 https://tangled.sh/@anil.recoil.org/ocaml-mcp/)
- 异步:基于Eio构建,实现高效并发操作
提供的工具
search
搜索DuckDuckGo并返回格式化结果。
参数:
query(string,必填):搜索查询字符串max_results(整数,可选):返回的最大结果数(默认值:10)
例子:
{
"query": "OCaml programming language",
"max_results": 5
}
search_wikipedia
搜索维基百科并返回格式化结果。
参数:
query(string,必填):搜索查询字符串max_results(整数,可选):返回的最大结果数(默认值:10)
例子:
{
"query": "OCaml programming language",
"max_results": 5
}
fetch_content
从网页URL获取并解析内容。
参数:
url(string,必填):从中获取内容的网页URLmax_length(整数,可选):要返回的内容的最大长度(以字节为单位)(默认值:8192)。集-1禁用长度限制。start_from(整数,可选):开始返回内容的字节偏移量(默认值:0)
例子:
{
"url": "https://example.com/article",
"max_length": 16384,
"start_from": 1024
}
fetch_markdown
从网页URL中提取并解析内容作为Markdown。
参数:
url(string,必填):从中获取内容的网页URLmax_length(整数,可选):要返回的内容的最大长度(以字节为单位)(默认值:8192)。集-1禁用长度限制。start_from(整数,可选):开始返回内容的字节偏移量(默认值:0)
例子:
{
"url": "https://example.com/article",
"max_length": 16384,
"start_from": 1024
}
用法
运行服务器
这 snf-mcp 二进制支持两种操作模式:
- HTTP服务器模式 (默认):侦听网络端口
- 标准I/O模式:通过stdin/stdout进行通信
警告:安装的二进制文件被调用 snf-mcp
在端口3000上以HTTP模式启动MCP服务器:
dune exec snf-mcp -- --serve 3000
使用标准I/O模式(有助于与LLM客户端集成):
dune exec snf-mcp
通过OPAM安装后,您可以直接运行它:
snf_mcp [--serve PORT | --stdio]
--serve Run http server, listening on PORT
--stdio Use stdio for communication instead of port (default)
--debug Enable debug logging
--verbose Enable verbose logging
--quiet Suppress non-error logs (default)
-help Display this list of options
--help Display this list of options
测试服务器
HTTP模式
在HTTP模式下运行时,您可以通过使用curl发送MCP协议消息来测试服务器是否正常工作。
首先使用以下命令启动服务器:
dune exec snf-mcp --serve 8080
然后,在另一个终端上,您可以使用 curl 与服务器交互。以下是一些示例请求:
列出可用工具:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
执行搜索:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "OCaml programming language",
"max_results": 3
}
}
}'
获取网页内容:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "fetch_content",
"arguments": {
"url": "https://ocaml.org"
}
}
}'
搜索维基百科:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "search_wikipedia",
"arguments": {
"query": "OCaml programming language",
"max_results": 3
}
}
}'
以Markdown格式获取网页内容:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "fetch_markdown",
"arguments": {
"url": "https://ocaml.org"
}
}
}'
标准I/O模式
使用stdio模式时,您可以将JSON-RPC请求传输到二进制文件:
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search","arguments":{"query":"OCaml programming language"}},"id":2}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search_wikipedia","arguments":{"query":"OCaml programming language"}},"id":3}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"fetch_content","arguments":{"url":"https://ocaml.org"}},"id":4}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"fetch_markdown","arguments":{"url":"https://ocaml.org"}},"id":5}' | dune exec snf-mcp | jq
当与通过stdin/stdout通信的LLM客户端集成时,此模式特别有用。
安装
从源代码构建
- 克隆存储库
- 安装依赖项并构建:
$ cd snf_mcp
$ opam install . --deps-only
$ dune build
$ dune install
这将使 snf-mcp PATH中提供的二进制文件。
与MCP客户端集成
此服务器可以与任何兼容MCP的客户端集成。配置您的客户端以使用适当的传输方法连接到此服务器。 下面我们展示了如何配置stdio版本,远程版本非常相似。 请记住,这是早期软件,不建议用于生产或在未受保护的网络上暴露。
LLM-CLI
安装 llm-tools-mcp 插件 随着
llm install llm-tools-mcp
然后编辑(或创建) ~/.llm-tools-mcp/mcp.json 随着
{
"mcpServers": {
"snf_mcp": {
"command": "/path/to/snf-mcp",
"args": [
"--stdio"
]
}
}
}
LMStudio
从界面编辑json文件,添加与上面LLM CLI示例中相同的json条目。 另请参见 官方文件.
一月
使用 完整路径 将snf_mcp作为命令,以及 --stdio 作为唯一的论点。
另请参见 官方文件.
注意, 我只能配置基于stdio的mcp服务器 与Jan。
速率限制
服务器实施速率限制以尊重外部服务:
- 搜索请求(DuckDuckGo和维基百科):每分钟限制30个请求
- 内容提取:每分钟限20个请求
故障排除
利率限制问题
如果您遇到错误或超时消息,则可能已达到速率限制。当达到速率限制时,服务器将自动等待,但如果外部服务检测到自动使用,它们仍可能阻止请求。
搜索质量
DuckDuckGo的搜索结果是从HTML响应中解析出来的。如果搜索结果不正确或不完整,可能是由于:
- DuckDuckGo更改HTML结构
- 机器人检测阻止了正确的结果
- 搜索查询格式的问题
尝试重新表述您的查询或检查DuckDuckGo的服务是否正常运行。
内容提取质量
这 fetch_markdown 工具尝试使用 trafilatura 如果你的系统上有Python库,因为它可以产生更高质量的文本提取。如果 trafilatura 未找到,则返回 吉娜读者.
为了获得最佳效果,请考虑安装 trafilatura,例如以下3种方式之一:
uv tool install trafilatura # Method 1: Using `uv` tool
pipx install trafilatura # Method 2: Using `pipx`
pip install trafilatura # Method 3: Using `pip`
全部
- 在获取中使用分页
