mcpField
M
MCP Server

MCP Server

本地服务
github.com/avinash539搜索与检索082 周前更新

关于 MCP Server

这是一个基于 MCP 的服务端实现,面向需要为 AI Agent 和大模型提供搜索与文件操作的开发者。它集成 SearXNG 搜索,并支持通过两种架构扩展自定义工具。

主要功能

  1. 01通过 SearXNG 搜索网页
  2. 02安全读取、写入和管理文件
  3. 03支持添加自定义工具
  4. 04提供 Docker 部署和命令行管理
  5. 05支持 MCP 资源与提示词

适用场景

  1. 01让 AI Agent 按条件检索网页
  2. 02读写项目文件并列出目录内容
  3. 03基于 FastMCP 添加专用工具

MCP 相关

作为 MCP 服务端,它向客户端提供网页搜索、文件系统操作等工具,并支持资源和提示词。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"avinash539": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP 服务

一种模型上下文协议(MCP)服务实现,为 AI Agent 和大模型提供各种工具,包括由 SearXNG 提供支持的搜索功能和文件系统操作。

功能

  • 网络搜索:使用 SearXNG 执行可自定义参数的网络搜索
  • 文件系统操作:在安全控制下读取、写入和管理文件
  • 可扩展架构:遵循 MCP 协议添加自定义工具
  • Docker 支持:使用 Docker 和 docker-compose 轻松部署
  • 命令行界面:通过 CLI 轻松管理
  • 资源和提示词:全面支持 MCP 规范中的资源和提示词

要求

  • Python 3.13(必需)
  • MCP SDK ≥ 1.6.0
  • 用于依赖管理的 UV 包管理器
  • Docker(可选,用于容器化部署)

实现方式

本项目展示了两种实现 MCP 服务的方式:

1. FastMCP 装饰器方式(推荐)

在 mcp_server/server.py 中使用 FastMCP 装饰器的简化方式:

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

这种方式为复杂应用提供了更大的灵活性,但需要编写更多样板代码。

工具

search

通过 SearXNG 执行可自定义筛选条件的网络搜索。

输入:

  • query(字符串):搜索词
  • num_results(数字,可选):返回结果数量(默认值:5,最大值:20)
  • language(字符串,可选):结果的语言代码(例如,"en"、"fr")
  • time_range(字符串,可选):结果的时间范围(day、week、month、year)
  • search_category(字符串,可选):搜索类别(general、images、news、videos)
filesystem

在安全访问控制下读取、写入和管理文件。

操作:

  • 读取文件

    • path(字符串):要读取的文件路径
    • encoding(字符串,可选):使用的编码(默认值:"utf-8")
    • binary(布尔值,可选):是否以二进制模式读取(默认值:false)
  • 写入文件

    • path(字符串):文件写入路径
    • content(字符串):要写入的内容
    • encoding(字符串,可选):使用的编码(默认值:"utf-8")
    • binary(布尔值,可选):是否以二进制模式写入(默认值:false)
    • append(布尔值,可选):是否追加到文件(默认值: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:使用 ClientSession API 的现代客户端
  • examples/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 许可证授权,详情请参阅 LICENSE 文件。

致谢

运行项目的命令

python -m mcp_server start --config config.env

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。