【系列文章】GitHub 上的 MCP 服务器(一)

我的前一篇文章【打破数据孤岛:MCP协议开启大模型"三头六臂"时代】详尽阐释了 MCP 服务器,并且介绍了数种 MCP 服务器的运用之法。今日,我们再度介绍若干源自 GitHub 的 MCP 服务器实现方式。这些 MCP 服务器充分彰显了 MCP 的多元功能性以及可拓展性,生动演示了如何凭借它为大型语言模型(LLM)给予工具和数据源以安全、受管控的访问。每一个 MCP 服务器均通过 Typescript MCP SDK 或者 Python MCP SDK 得以实现。


Brave 搜索 MCP 服务器

集成了 Brave Search API 的 MCP 服务器实现,提供 Web 和本地搜索功能。

特征

  • Web 搜索:常规查询、新闻、文章,具有分页和新鲜度控件
  • 本地搜索:查找包含详细信息的商家、餐馆和服务
  • 灵活的筛选:控制结果类型、安全级别和内容新鲜度
  • 智能回退:未找到结果时,本地搜索会自动回退到 Web

工具

  • brave_web_search
    • 使用分页和筛选执行 Web 搜索
    • 输入:query(string):搜索词count(数字,可选):每页结果数(最多 20 个)offset(number,可选):分页偏移量(最大 9)
  • brave_local_search
    • 搜索本地商家和服务
    • 输入:query(string):本地搜索词count(number,可选):结果数(最多 20 个)
    • 如果未找到本地结果,则自动回退到 Web 搜索

Fetch MCP 服务器

提供 Web 内容获取功能的 Model Context Protocol 服务器。此服务器使 LLM 能够检索和处理网页中的内容,将 HTML 转换为 Markdown 以便于使用。

fetch 工具将截断响应,但通过使用 start_index 参数,您可以指定从何处开始内容提取。这允许模型以块的形式读取网页,直到找到所需的信息。

可用工具

  • fetch- 从 Internet 获取 URL 并将其内容提取为 markdown。url(string, required):要获取的 URLmax_length(整数,可选):要返回的最大字符数(默认值:5000)start_index(整数,可选):从此字符索引开始内容(默认值:0)raw(boolean,可选):获取没有 Markdown 转换的原始内容(默认值:false)

提示

  • 获取获取 URL 并将其内容提取为 markdown参数:url(string, required):要获取的 URL

文件系统 MCP 服务器

Node.js 为文件系统作实现模型上下文协议 (MCP) 的服务器。

特征

  • 读/写文件
  • 创建/列出/删除目录
  • 移动文件/目录
  • 搜索文件
  • 获取文件元数据

注意:服务器将仅允许通过 .args

应用程序接口

资源

  • file://system:文件系统作界面

工具

  • read_file
    • 读取文件的完整内容
    • 输入:(string)path
    • 使用 UTF-8 编码读取完整的文件内容
  • read_multiple_files
    • 同时读取多个文件
    • 输入:(string[])paths
    • 读取失败不会停止整个作
  • write_file
    • 创建新文件或覆盖现有文件(请谨慎使用)
    • 输入:path(string):文件位置content(string):文件内容
  • edit_file
    • 使用高级模式匹配和格式进行选择性编辑
    • 特征:基于行和多行内容匹配具有缩进保留的空白规范化具有置信度评分的模糊匹配具有正确定位的多个同时编辑缩进样式检测和保留带有上下文的 Git 样式 diff 输出使用试运行模式预览更改失败的匹配调试与置信度分数
    • 输入:path(string):要编辑的文件edits(array):编辑作列表oldText(string):要搜索的文本(可以是子字符串)newText(string):要替换的文本dryRun(布尔值):预览更改而不应用(默认值:false)options(对象):可选格式设置preserveIndentation(boolean):保留现有缩进(默认值:true)normalizeWhitespace(boolean):在保留结构的同时规范化空格(默认值:true)partialMatch(boolean):启用模糊匹配(默认值:true)
    • 返回试运行的详细差异和匹配信息,否则应用更改
    • 最佳实践:始终先使用 dryRun 预览更改,然后再应用更改
  • create_directory
    • 创建新目录或确保其存在
    • 输入:(string)path
    • 根据需要创建父目录
    • 如果目录存在,则以静默方式成功
  • list_directory
    • 列出带有 [FILE] 或 [DIR] 前缀的目录内容
    • 输入:(string)path
  • move_file
    • 移动或重命名文件和目录
    • 输入:source(字符串)destination(字符串)
    • 如果目标存在,则失败
  • search_files
    • 递归搜索文件/目录
    • 输入:path(string):起始目录pattern(string):搜索模式excludePatterns(string[]):排除任何模式。支持 glob 格式。
    • 不区分大小写的匹配
    • 返回匹配项的完整路径
  • get_file_info
    • 获取详细的文件/目录元数据
    • 输入:(string)path
    • 返回:大小创建时间修改时间访问时间类型 (file/directory)权限
  • list_allowed_directories
    • 列出允许 服务器访问的所有目录
    • 无需输入
    • 返回:此服务器可以从中读/写的目录

知识图谱内存服务器

使用本地知识图谱的持久内存的基本实现。这样,Claude 就可以在聊天中记住有关用户的信息。

应用程序接口

工具

  • create_entities
    • 在知识图谱中创建多个新实体
    • Input:(对象数组)entities每个对象包含:name(string):实体标识符entityType(字符串):类型分类observations(string[]):关联的观测值
    • 忽略具有现有名称的实体
  • create_relations
    • 在实体之间创建多个新关系
    • Input:(对象数组)relations每个对象包含:from(string):源实体名称to(string):目标实体名称relationType(string):主动语态中的关系类型
    • 跳过重复关系
  • add_observations
    • 向现有实体添加新观测值
    • Input:(对象数组)observations每个对象包含:entityName(string):目标实体contents(string[]):要添加的新观测值
    • 返回每个实体添加的观测值
    • 如果实体不存在,则失败
  • delete_entities
    • 删除实体及其关系
    • 输入:(string[])entityNames
    • 关联关系的级联删除
    • 如果实体不存在,则执行静默作
  • delete_observations
    • 从实体中删除特定观察
    • Input:(对象数组)deletions每个对象包含:entityName(string):目标实体observations(string[]):要删除的观察
    • 如果不存在观察,则静音作
  • delete_relations
    • 从图形中删除特定关系
    • Input:(对象数组)relations每个对象包含:from(string):源实体名称to(string):目标实体名称relationType(string):关系类型
    • 如果 relation 不存在,则进行静默作
  • read_graph
    • 阅读整个知识图谱
    • 无需输入
    • 返回包含所有实体和关系的完整图形结构
  • search_nodes
    • 根据查询搜索节点
    • 输入:(string)query
    • 搜索范围:实体名称实体类型观察内容
    • 返回匹配的实体及其关系
  • open_nodes
    • 按名称检索特定节点
    • 输入:(string[])names
    • 返回:请求的实体请求的实体之间的关系
    • 静默跳过不存在的节点

Puppeteer

一个使用 Puppeteer 提供浏览器自动化功能的模型上下文协议服务器。此服务器使 LLM 能够在真实的浏览器环境中与网页交互、截取屏幕截图和执行 JavaScript。

组件

工具

  • puppeteer_navigate
    • 导航到浏览器中的任何 URL
    • 输入:(string)url
  • puppeteer_screenshot
    • 捕获整个页面或特定元素的屏幕截图
    • 输入:name(string, required):屏幕截图的名称selector(string,可选):要屏幕截图的元素的 CSS 选择器width(number,可选,默认值:800):屏幕截图宽度height(number,可选,默认值:600):屏幕截图高度
  • puppeteer_click
    • 单击页面上的元素
    • 输入:(字符串):要单击的元素的 CSS 选择器selector
  • puppeteer_hover
    • 将鼠标悬停在页面上的元素
    • 输入:(字符串):要悬停的元素的 CSS 选择器selector
  • puppeteer_fill
    • 填写输入字段
    • 输入:selector(string):输入字段的 CSS 选择器value(string):要填充的值
  • puppeteer_select
    • 选择带有 SELECT 标记的元素
    • 输入:selector(string):要选择的元素的 CSS 选择器value(string):要选择的值
  • puppeteer_evaluate
    • 在浏览器控制台中执行 JavaScript
    • 输入:(字符串):要执行的 JavaScript 代码script

资源

服务器提供对两种资源的访问权限:

  1. 控制台日志 (console://logs)
  2. 文本格式的浏览器控制台输出
  3. 包括来自浏览器的所有控制台消息
  4. 屏幕截图 (screenshot://)
  5. 捕获的屏幕截图的 PNG 图像
  6. 可通过捕获期间指定的屏幕截图名称访问

主要特点

  • 浏览器自动化
  • 控制台日志监控
  • 屏幕截图功能
  • JavaScript 执行
  • 基本 Web 交互(导航、单击、表单填写)

顺序思维 MCP 服务器

一种 MCP 服务器实现,它通过结构化思维过程提供动态和反思性问题解决的工具。

特征

  • 将复杂问题分解为可管理的步骤
  • 随着理解的加深而修改和完善思想
  • 分支到其他推理路径
  • 动态调整 THOUGHT 总数
  • 生成并验证解决方案假设

工具

sequential_thinking

促进详细的分步思考过程,以便解决问题和分析。

输入:

  • thought(string):当前思考步骤
  • nextThoughtNeeded(boolean):是否需要另一个思考步骤
  • thoughtNumber(整数):当前思维数
  • totalThoughts(整数):估计所需的总思考次数
  • isRevision(boolean,可选):这是否修正了之前的想法
  • revisesThought(integer,可选):正在重新考虑哪个想法
  • branchFromThought(整数,可选):分支点思想数
  • branchId(string,可选):分支标识符
  • needsMoreThoughts(boolean,可选):如果需要更多想法

用法

序列思维工具设计用于:

  • 将复杂问题分解为步骤
  • 规划和设计,有修改空间
  • 可能需要更正路线的分析
  • 最初可能不清楚完整范围的问题
  • 需要在多个步骤中维护上下文的任务
  • 需要筛选出不相关信息的情况