使用说明
MCP服务器
一种模型上下文协议(MCP)服务器实现,为AI代理和LLM提供各种工具,包括由SearXNG提供的搜索功能和文件系统操作。
特性
- 网页搜索:使用SearXNG执行具有可自定义参数的网络搜索
- 文件系统操作:使用安全控制读取、写入和管理文件
- 可扩展架构:按照MCP协议添加自定义工具
- Docker支持:使用Docker和Docker compose轻松部署
- 命令行界面:通过CLI进行简单管理
- 资源和提示:对资源和提示的完整MCP规范支持
需求
- Python 3.13 (必填)
- MCP-SDK≥1.6.0
- 用于依赖关系管理的UV包管理器
- Docker(可选,用于容器化部署)
实施方法
本项目演示了实现MCP服务器的两种方法:
1.FastMCP装饰器方法(推荐)
使用FastMCP装饰器的简化方法 mcp_server/server.py:
from mcp.server.fastmcp import FastMCP
# Create server
mcp = FastMCP("MCP Server")
# Add a tool using decorator
@mcp.tool()
def search(query: str, num_results: int = 5) -> dict:
"""Search the web"""
# Implementation...
return results
# Add a resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Get a greeting"""
return f"Hello, {name}!"
# Add a prompt
@mcp.prompt()
def search_prompt(query: str) -> str:
"""Create a search prompt"""
return f"Please search for: {query}"
2.原始架构(高级)
原始建筑 mcp_server/core/ 提供了一个更复杂的实现,包括:
ToolRegistry用于管理工具注册MCPTool工具实现的抽象基类- 单例
MCPServer用于服务器管理
这种方法为复杂的应用程序提供了更大的灵活性,但需要更多的样板代码。
工具
搜索
通过SearXNG使用可定制的过滤功能执行网络搜索。
输入:
query(string):搜索词num_results(number,可选):要返回的结果数(默认值:5,最大值:20)language(字符串,可选):结果的语言代码(例如“en”、“fr”)time_range(字符串,可选):结果的时间范围(日、周、月、年)search_category(字符串,可选):要搜索的类别(一般、图像、新闻、视频)
文件系统
使用安全访问控制读取、写入和管理文件。
操作:
-
读取文件
path(string):要读取的文件的路径encoding(字符串,可选):要使用的编码(默认值:“utf-8”)binary(boolean,可选):是否以二进制模式读取(默认值:false)
-
写入文件
path(string):写入文件的路径content(string):要写的内容encoding(字符串,可选):要使用的编码(默认值:“utf-8”)binary(boolean,可选):是否以二进制模式写入(默认值:false)append(boolean,可选):是否追加到文件(默认值:false)
-
列出文件
path(字符串,可选):要列出的目录(默认:当前目录)recursive(布尔值,可选):是否递归列出(默认值:false)pattern(字符串,可选):匹配文件名的模式
配置
环境变量
使用环境变量配置MCP服务器:
# Server settings
MCP_SERVER__HOST=0.0.0.0
MCP_SERVER__PORT=8000
# SearXNG settings
MCP_SEARXNG__INSTANCE_URL=http://localhost:8080
MCP_SEARXNG__TIMEOUT=5
# Logging settings
MCP_LOG__LEVEL=INFO
# Data directory
MCP_DATA_DIR=./data
使用Claude Desktop
选项1:安装简单示例服务器
# Install the simple example server directly
mcp install examples/server.py
# Or test with the MCP Inspector
mcp dev examples/server.py
选项2:Docker配置
将此添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-p",
"8000:8000",
"-e",
"MCP_SEARXNG__INSTANCE_URL=http://host.docker.internal:8080",
"mcp-server"
]
}
}
}
您需要单独运行一个SearXNG实例:
{
"mcpServers": {
"searxng": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-p",
"8080:8080",
"-e",
"BASE_URL=http://localhost:8080/",
"searxng/searxng"
]
}
}
}
安装
Docker(推荐)
# Build the Docker image
docker build -t mcp-server .
# Run the server and SearXNG
docker-compose up
直接安装
# Ensure you have Python 3.13 installed
python --version # Should show Python 3.13.x
# Install uv if you don't have it
pip install uv
# Create a virtual environment and install dependencies
uv venv --python=python3.13
uv install
# Run the server
python -m mcp_server start
客户示例
请参阅 examples/ 客户端示例目录:
examples/client.py:现代客户端使用ClientSessionAPIexamples/simple_client.py:使用直接API调用的简单客户端
使用自定义工具进行扩展
使用FastMCP方法
from mcp_server.server import mcp
@mcp.tool()
def my_custom_tool(param1: str, param2: int = 10) -> dict:
"""My custom tool description"""
# Implement tool functionality
return {"result": f"Processed {param1} with {param2}"}
使用原始架构
请参阅 开发者指南 有关在原始架构中添加自定义工具的说明。
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
致谢
运行项目的命令
python-m mcpserver启动--配置config.env