MCP是个什么?
最近关于MCP的话题甚嚣尘上,那么它到底是个什么东西,能用来干什么?本文通过一个项目开发的形式来了解什么是MCP。
它是由Anthropic(就是开发Claude的那个AI公司)提出的一种开放标准协议,我们先来看看官方的定义:
“MCP是一种开放协议,标准化了应用程序如何向LLMs提供上下文。将MCP视为AI应用程序的USB-C端口。就像USB-C提供了连接设备到各种外围设备和配件的标准化方式一样,MCP提供了连接AI模型到不同数据源和工具的标准化方式。”
其实MCP 就是让 AI 应用(可以视为Host)能够(通过MCP Server)安全地访问和操作本地(如文件系统)及远程数据(如各种接口、数据库等),为 AI 应用提供了连接万物的接口(就像USB Type-C接口)。这种标准化的协议增强了系统的扩展性并简化了AI Agent应用的开发过程。
本次实践的项目目标是构建一个MCP Server, 通过集成搜索引擎和网络爬虫工具,让AI拥有搜索、网页URL内容提取、甚至爬取整个网站的能力。项目取名为:`one-search-mcp`,采用标准输入和输出流进行通信(stdio)。
项目开发物料如下:
-
Node.js >= 20
-
MCP官方提供的 typescript-sdk: @modelcontextprotocol/sdk
-
SearXNG、Tavily等作为网络搜索服务
-
Firecrawl 等作为提取网页内容服务
Tips: SearXNG和Firecrawl一键本地化部署(Docker)方法Github仓库中有详细介绍。
一、项目介绍
本项目代码已经开源(文末为Github仓库地址)并发布为npm包:
# 可选安装
npm i -g one-search-mcp
如果使用npx运行,不需要再使用npm安装了。
env SEARCH_API_URL=http://127.0.0.1:8080 npx -y one-search-mcp
在开始进行MCP Server开发前,先介绍一下项目开发完成后的应用方式。
1、在MCP Client开发中使用的示例:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const mcp = new Client({
name: 'mcp-client-cli',
version: '1.0.0',
});
const transport = new StdioClientTransport({
command: 'npx',
args: ['-y', 'one-search-mcp'],
env: {
FIRECRAWL_API_URL: &#