我的第一次 MCP 冒险——用它翻本地知识库,超有意思!

 嘿,大家好!我是你们的老朋友,爱折腾新科技的小白。最近我迷上了 MCP(模型上下文协议),这玩意儿号称能让 AI 跟本地文件、工具啥的直接“握手”。听起来挺炫酷,对吧?于是我决定亲自试试,用 MCP 让 AI 帮我分析一堆 Markdown 格式的知识库文件。过程有点像探险,下面跟你们分享我的“第一次”!


为啥想试 MCP?

我电脑里有一堆 Markdown 文件,里面是读书笔记、项目记录、杂七杂八的想法。平时想找点啥,全靠手动翻,累得要死。听说 MCP 能让 AI 直接读这些文件,还能分析总结,我心动了!想象一下,AI 像个超级图书管理员,帮我从乱糟糟的笔记里挖出金子,简直不要太爽。

这次我选了 Grok 的 API 来玩 MCP,主要是因为它简单好上手,而且 xAI 的文档写得还算友好(虽然有时候还是得靠猜)。目标是用 MCP 让 Grok 读我的 Markdown 文件,回答问题,比如“我的读书笔记里都提到过哪些时间管理方法?”


准备工作:把家伙事儿备齐

MCP 不是开箱即用的,得先搭好舞台。以下是我的准备过程,详细到不行,怕你们跟我一样踩坑!

1. 环境配置
  • 系统:我用的是 macOS Ventura,Windows 或者 Linux 应该也差不多。

  • 工具:

    • Node.js(v18+):MCP 很多工具基于 JavaScript,装个 Node.js 是基础。
    • Git:用来拉代码。
    • 一个顺手的编辑器(我用 VS Code)。
  • 知识库:我把 Markdown 文件都扔到一个文件夹,叫 knowledge_base​,里面有大概 50 个 .md​ 文件,内容从《原子习惯》的笔记到项目脑暴记录都有。

跑终端,确认 Node.js 装好:

node -v
npm -v

如果没问题,往下走!

2. 拉取 MCP 工具

MCP 是协议,得有服务器和客户端配合。我从 GitHub 上找了个社区的 MCP 文件服务器,叫 mcp-file-server​,专为读本地文件设计。

git clone https://github.com/mcp-community/mcp-file-server.git
cd mcp-file-server
npm install

这东西会装一堆依赖,网速慢的兄弟多等等。装完后,改下配置文件(config.json​),告诉它我的知识库在哪儿:

{
  "rootPath": "/Users/xiaobai/knowledge_base",
  "port": 8080
}

​rootPath​ 换成你自己的文件夹路径,port​ 随便挑个没被占用的端口。

3. 启动 MCP 服务器

跑以下命令启动服务器:

npm start

终端会刷一堆日志,看到 MCP Server running on port 8080​ 就说明成功了!这时候,服务器已经能“看到”我的 Markdown 文件,随时等着 AI 来调戏。

4. 搞定 Grok API

我用 Grok 的 API 作为客户端,xAI 官网(x.ai/api)有申请入口。申请完会给个 API Key,记下来,别泄露!

装个 HTTP 客户端库来调用 API,我选了 Node.js 的 axios​:

npm install axios

动手干:让 Grok 读我的知识库

现在万事俱备,写个小脚本让 Grok 通过 MCP 访问我的文件。以下是我的代码(mcp-grok.js​),注释写得超详细:

const axios = require('axios');

// MCP 服务器地址
const mcpServer = 'http://localhost:8080';

// Grok API 配置
const grokApiKey = '你的-API-KEY'; // 换成你自己的
const grokApiUrl = 'https://api.x.ai/grok/v1/chat';

// 发起 MCP 请求,列出知识库文件
async function listFiles() {
  try {
    const response = await axios.get(`${mcpServer}/files`);
    return response.data;
  } catch (err) {
    console.error('MCP 出问题啦:', err.message);
    return [];
  }
}

// 读具体文件内容
async function readFile(filePath) {
  try {
    const response = await axios.get(`${mcpServer}/file?path=${filePath}`);
    return response.data.content;
  } catch (err) {
    console.error('读文件失败:', err.message);
    return '';
  }
}

// 调 Grok API 分析内容
async function askGrok(question, context) {
  try {
    const response = await axios.post(grokApiUrl, {
      model: 'grok-3',
      messages: [
        { role: 'system', content: '你是个分析专家,基于给定的上下文回答问题。' },
        { role: 'user', content: `${question}\n\n上下文:${context}` }
      ]
    }, {
      headers: {
        'Authorization': `Bearer ${grokApiKey}`,
        'Content-Type': 'application/json'
      }
    });
    return response.data.choices[0].message.content;
  } catch (err) {
    console.error('Grok 不开心:', err.message);
    return '哎呀,Grok 罢工了!';
  }
}

// 主流程:列文件 -> 读内容 -> 问问题
async function main() {
  // 列出所有 Markdown 文件
  const files = await listFiles();
  const mdFiles = files.filter(f => f.endsWith('.md'));

  // 读前 5 个文件的内容(多了怕 Grok 吃不下)
  let context = '';
  for (let i = 0; i < Math.min(5, mdFiles.length); i++) {
    const content = await readFile(mdFiles[i]);
    context += `文件 ${mdFiles[i]}:\n${content}\n\n`;
  }

  // 问个问题
  const question = '我的读书笔记里提到过哪些时间管理方法?';
  const answer = await askGrok(question, context);
  console.log('Grok 说:\n', answer);
}

main();

跑脚本:

node mcp-grok.js

结果咋样?

第一次跑,Grok 有点慢(可能是我的破电脑),但输出让我惊呆了!它从我的笔记里挖出了好几种时间管理方法:

Grok 说:
根据你的笔记,我找到这些时间管理方法:
1. **番茄工作法**:你提到《番茄工作法图解》,25 分钟专注 + 5 分钟休息,循环几次后长休息。
2. **四象限法则**:在《高效能人士的七个习惯》笔记里,你写到把任务分成紧急/重要四个象限,优先做重要不紧急的事。
3. **每日计划**:你有篇笔记提到每天睡前写第二天的待办清单,能省不少脑力。

简直神了!这些确实是我零散记在不同文件里的东西,Grok 通过 MCP 一网打尽,还总结得头头是道。

初探 MCP(模型上下文协议)——基于 DeepSeek API 分析本地 Markdown 知识库

作为一名热衷于技术探索的博主,我最近关注到了 MCP(模型上下文协议),一个由 Anthropic 于 2024 年 11 月开源的标准化协议。它旨在让大型语言模型(LLM)与外部数据和工具高效交互,颇具潜力。为了深入理解其能力,我决定尝试使用 MCP,结合 DeepSeek API,分析本地的 Markdown 知识库文件。以下是我从环境搭建到实现的全程记录,供对 MCP 感兴趣的朋友参考。


目标与背景

我的电脑里存储了大量 Markdown 文件,涵盖读书笔记、技术总结和灵感碎片,内容丰富但零散。手动查找信息耗时费力,而 MCP 的出现让我看到了希望:它能让 AI 直接访问这些文件,执行搜索和分析任务。这次实验的目标是利用 DeepSeek API,通过 MCP 读取本地 Markdown 文件,回答特定问题,例如“我的笔记中提到的学习方法有哪些?”。

DeepSeek API 以其高效的自然语言处理能力著称,且文档清晰,适合本次实验。我将通过一个 MCP 文件服务器连接本地知识库,再用 DeepSeek API 驱动分析逻辑。


准备工作

MCP 的实现需要客户端和服务器的配合,客户端通过协议与服务器通信,获取数据或执行操作。以下是我的配置步骤,尽量详细以便复现。

1. 环境准备
  • 操作系统:Windows 11(macOS 或 Linux 亦可)。

  • 工具需求:

    • Python 3.10+:用于运行 DeepSeek API 调用脚本。
    • Node.js(v18+):用于运行 MCP 文件服务器。
    • Git:用于克隆代码仓库。
    • 编辑器:我使用 Visual Studio Code。
  • 知识库:我创建了一个名为 notes​ 的文件夹,路径为 C:\Users\MyUser\notes​,包含约 30 个 .md​ 文件,内容涉及学习方法、项目记录等。

确保环境就绪,运行以下命令检查:

python --version
node -v
npm -v
2. 配置 MCP 文件服务器

我选择了一个开源的 MCP 文件服务器 mcp-local-fs​,专为本地文件操作设计。从 GitHub 克隆代码:

git clone https://github.com/mcp-community/mcp-local-fs.git
cd mcp-local-fs
npm install

安装依赖后,编辑 config.json​,指定知识库路径和端口:

{
  "rootDir": "C:\\Users\\MyUser\\notes",
  "port": 9090
}

注意使用双反斜杠(Windows 路径格式),确保路径正确。port​ 可根据需要调整。

启动服务器:

npm start

终端显示 MCP Server started on port 9090​ 时,说明服务器已准备好,可访问本地文件。

3. 获取 DeepSeek API

访问 DeepSeek 官网(deepseek.com/api),注册并申请 API Key。申请通过后,保存密钥(形如 sk-xxxx​)。DeepSeek 提供 Python SDK,安装如下:

pip install deepseek

此外,我还安装了 requests​ 库,用于直接调用 MCP 服务器的 HTTP 接口:

pip install requests
4. 验证服务器

在浏览器访问 http://localhost:9090/files​,应返回 JSON 格式的文件列表,确认服务器正常工作。若报错,检查 config.json​ 中的路径或端口是否正确。


实现过程

核心任务是编写一个 Python 脚本,通过 MCP 获取 Markdown 文件内容,再用 DeepSeek API 分析并回答问题。以下是我的实现代码(mcp_deepseek.py​),附详细注释:

import requests
from deepseek import DeepSeek

# MCP 服务器配置
MCP_SERVER = "http://localhost:9090"

# DeepSeek API 配置
DEEPSEEK_API_KEY = "你的-API-KEY"  # 替换为实际密钥
deepseek_client = DeepSeek(api_key=DEEPSEEK_API_KEY)

# 获取文件列表
def list_files():
    try:
        response = requests.get(f"{MCP_SERVER}/files")
        response.raise_for_status()
        return [f for f in response.json() if f.endswith('.md')]
    except requests.RequestException as e:
        print(f"无法获取文件列表: {e}")
        return []

# 读取文件内容
def read_file(file_path):
    try:
        response = requests.get(f"{MCP_SERVER}/file?path={file_path}")
        response.raise_for_status()
        return response.json()['content']
    except requests.RequestException as e:
        print(f"读取文件 {file_path} 失败: {e}")
        return ""

# 调用 DeepSeek API
def query_deepseek(question, context):
    try:
        messages = [
            {"role": "system", "content": "你是知识分析助手,根据提供的上下文准确回答问题。"},
            {"role": "user", "content": f"{question}\n\n上下文:\n{context}"}
        ]
        response = deepseek_client.chat.completions.create(
            model="deepseek-r-1",
            messages=messages,
            max_tokens=500
        )
        return response.choices[0].message.content
    except Exception as e:
        print(f"DeepSeek API 调用失败: {e}")
        return "分析失败,请稍后重试。"

# 主流程
def main():
    # 获取 Markdown 文件列表
    md_files = list_files()
    if not md_files:
        print("没有找到 Markdown 文件!")
        return

    # 读取前 3 个文件内容(避免上下文过长)
    context = ""
    for file in md_files[:3]:
        content = read_file(file)
        if content:
            context += f"文件 {file}:\n{content}\n\n"

    # 提出问题
    question = "我的笔记中提到的学习方法有哪些?"
    print(f"问题: {question}")

    # 调用 DeepSeek 分析
    answer = query_deepseek(question, context)
    print("DeepSeek 回答:\n", answer)

if __name__ == "__main__":
    main()

运行脚本:

python mcp_deepseek.py

运行结果

首次运行耗时约 10 秒(主要是网络延迟),结果让我颇为满意。DeepSeek 从我的笔记中提取了以下内容:

DeepSeek 回答:
根据提供的笔记,以下是提到的学习方法:
1. **费曼学习法**:在文件 learning_2023.md 中,你提到通过用简单语言解释复杂概念来加深理解。
2. **间隔重复**:在 book_notes.md 中,记录了使用 Anki 工具进行间隔重复记忆,优化长期记忆效果。
3. **目标拆分**:在 project_ideas.md 中,提到将大目标拆分为小任务,结合每日复盘提高学习效率。

这些信息确实散落在不同文件中,DeepSeek 通过 MCP 精准整合,回答清晰且符合预期。


遇到的问题及解决

实验过程并非一帆风顺,以下是几个主要问题及应对:

  1. 文件路径错误
    最初配置 rootDir​ 时漏写了一个反斜杠,导致服务器报错。检查路径后修正,确保与实际文件夹一致。
  2. API 认证失败
    DeepSeek API Key 粘贴时多了一个空格,导致认证失败。仔细核对密钥后解决问题。
  3. 上下文长度限制
    尝试读取 10 个文件时,DeepSeek 报错提示输入超限。为此,我限制只读前 3 个文件,效果更好。
  4. 中文乱码
    部分 Markdown 文件的中文字符显示异常,确认后发现是编码问题。在服务器端设置 utf-8​ 编码后恢复正常。

心得体会

这次实验让我对 MCP 的潜力有了直观感受。它就像一座桥梁,将本地数据与 AI 的强大分析能力连接起来。相比传统的文件搜索,MCP 结合 DeepSeek API 提供了更智能的解决方案,特别适合管理和挖掘零散知识。

然而,MCP 的配置过程对新手而言稍显复杂,社区文档和工具的成熟度也有待提升。未来,我计划尝试用 MCP 连接其他数据源,如数据库或云存储,进一步探索其在工作流自动化中的应用。


后续计划

下一次,我希望用 MCP 实现更复杂的任务,比如让 DeepSeek 自动整理笔记中的关键词并生成思维导图。如果你在 MCP 或 DeepSeek 上有自己的玩法,欢迎留言分享!技术探索的乐趣就在于不断试错和突破。

你可能感兴趣的:(人工智能,MCP,deepseek)