NLP(一百一十五)MCP入门与实践

本文将会介绍MCP的入门与笔者自己的实践项目。

什么是MCP?

MCP(Model Context Protocol) 是一种开放标准协议,由 Anthropic 公司推出,旨在解决大型语言模型(LLM)与外部数据源和工具之间的通信问题。它使得 AI 应用能够安全地访问和操作本地及远程数据,提供了连接万物的接口。

MCP 的主要功能:

  1. 统一标准:MCP 提供了一个标准化的接口,让 AI 模型能够轻松连接各种数据源和工具,如文件系统、数据库、API 等。
  2. 安全访问:通过 MCP,数据可以在用户的基础设施内安全处理,解决了数据安全问题。
  3. 灵活集成:MCP 允许开发者轻松在不同 AI 供应商之间切换,并提供大量现成的集成工具。

MCP 的核心概念:

  • 资源(Resources):让 AI 能够读取数据的接口。
  • 工具(Tools):允许 AI 执行操作的函数。
  • 提示(Prompts):指导 AI 完成特定任务的模板。

MCP 的出现使得 AI 应用能够更好地与外部世界交互,解决了数据孤岛问题,提高了 AI 应用的扩展性和灵活性。

MCP整体架构图

MCP使用例子

MCP Hosts

  • Claude Desktop
  • Cline
  • Cursor IDE
  • Ollama

例子1: 官网MCP Server: FileSystem

使用方式为Docker或者NPX,这里使用NPX,前提是环境中已安装npm.

笔者使用MCP Host为Cursor IDE.

该Server的主要功能如下:

  • Read/write files
  • Create/list/delete directories
  • Move files/directories
  • Search files
  • Get file metadata

配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/admin/papers"
]
}
}
}

场景1: 文件查找

在这个路径中,有哪些关于LLAMA的PDF论文?

工具调用的参数与结果:

场景2:文件写入与读取

在给定的文件路径下,帮我写一篇《肖申克的救赎》的读后感,需要有标题和正文,正文不超过300个汉字,并保存为txt文件,最后输出这个txt文件的路径和读后感的标题。

保存的文件内容如下:

操作起来十分方便、顺手,能解决不少实际问题。

例子2: Bilibili MCP Server

该例子用于哔哩哔哩 API 的 MCP(模型上下文协议)服务器,目前仅支持搜索视频,网址为https://www.bilibili.com/video/BV1TqXWYnEiw/?vd_source=a4c50cd24d995647f23d6cecd9f64502 , 仓库链接:https://github.com/huccihuang/bilibili-mcp-server .

配置文件如下: (使用工具为general_search函数,使用@mcp.tool()装饰器进行装饰)

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"mcpServers": {
"bilibili": {
"command": "uv",
"args": [
"--directory",
"/Users/admin/PycharmProjects/bilibili-mcp-server",
"run",
"bilibili.py"
]
}
}
}

这里将filesystem和bilibili两个MCP Server都列举出来,其中Bilibili MCP Server是在本地运行,filesystem使用官方给出的MCP Server.

例子1:

在B站中帮我找到up主赖导的介绍。

例子2:

帮我找下在B站中关于三国演义解读的视频。

入门实践

需求如下:

上传一张数独(Sudoku)的图片,要求调用OCR和解数独的API进行求解,最后为解决后的二维数组。

实现的Python代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import requests
from dotenv import load_dotenv
import os
import json
import urllib.parse
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Sudoku Solver Mcp Server")

load_dotenv()

@mcp.tool()
def image_ocr(image_path: str) -> str:
"""
调用TextIn API识别图片中的表格

Args:
image_path: 图片路径

Returns:
cell_list: 数独的初始状态
"""
# 调用TextIn API识别图片中的表格
url = 'https://api.textin.com/ai/service/v2/recognize/table/multipage'
head = {
'x-ti-app-id': os.getenv('APP_ID'),
'x-ti-secret-code': os.getenv('SECRET_CODE')
}
with open(image_path, 'rb') as fp:
image = fp.read()
result = requests.post(url, data=image, headers=head)
# 对结果进行解析
tables = result.json()['result']['pages'][0]['tables'][0]
cells = tables['table_cells']
cell_list = []
for i in range(9):
cell_list.append([0] * 9)
for i, cell in enumerate(cells):
num = int(cell['text']) if cell['text'].isdigit() else 0
cell_list[i // 9][i % 9] = num

return cell_list

@mcp.tool()
def sudoku_api_solver(cell_list: list[list[int]]) -> list[list[int]]:
"""
调用Soduku API求解数独

Args:
cell_list: 数独的初始状态, 一个9x9的二维列表

Returns:
api返回的数独解
"""
# 构建参数
params = {
'puzzle': json.dumps(cell_list),
'width': 3,
'height': 3
}

# 构建URL
base_url = 'https://api.api-ninjas.com/v1/sudokusolve'
url = f'{base_url}?{urllib.parse.urlencode(params)}'

# 发送请求
result = requests.get(url, headers={'X-Api-Key': os.getenv('SODUKU_API_KEY')})

if result.status_code == 200:
return result.json()
else:
raise Exception(f"API请求失败: {result.status_code} - {result.text}")

if __name__ == "__main__":
mcp.run(transport='stdio')

配置文件:

1
2
3
4
5
6
7
8
9
10
{
"mcpServers": {
"sudoku_solver": {
"command": "python",
"args": [
"/Users/admin/PycharmProjects/bilibili-mcp-server/sudoku_solver.py"
]
}
}
}

在Cursor IDE中MCP配置完毕后,在Chat模式中进行测试,需要解决的数独(难度为困难级别)图片如下:

MCP中的sudoku solver的解答过程如下:

经验证,上述解答为正确结果。

当然,在解答过程中,笔者也尝试了多次,有时候是OCR识别结果错误,有时候是解数独的API参数没弄对,有时候想把解决保存为图片或文档,会遇到权限问题。但最终还是测试成功了。

总结

本文已同步更新至Notion,网址为: https://local-dugout-3c9.notion.site/MCP-1c48b5de853080289a46df3e2cdec308 ,体验更佳!

参考文献

  1. https://github.com/modelcontextprotocol/servers
  2. https://github.com/huccihuang/bilibili-mcp-server
  3. MCP是啥?技术原理是什么?一个视频搞懂MCP的一切。Windows系统配置MCP,Cursor,Cline 使用MCP: https://www.youtube.com/watch?v=McNRkd5CxFY
  4. MCP 终极指南: https://guangzhengli.com/blog/zh/model-context-protocol/

欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。


NLP(一百一十五)MCP入门与实践
https://percent4.github.io/NLP(一百一十五)MCP入门与实践/
作者
Jclian91
发布于
2025年4月27日
许可协议