From b9d2423413b6b34ff99e186f3a3a90a2d7d341bf Mon Sep 17 00:00:00 2001 From: samanhappy Date: Sat, 5 Apr 2025 22:49:02 +0800 Subject: [PATCH] docs: update README.zh.md for consistency and clarity; add intro.md for deployment guide --- README.zh.md | 18 ++++++++--------- assets/dashboard.png | Bin 11383 -> 25352 bytes doc/intro.md | 47 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 doc/intro.md diff --git a/README.zh.md b/README.zh.md index 2e54238..18a0cc8 100644 --- a/README.zh.md +++ b/README.zh.md @@ -1,17 +1,17 @@ -# MCPHub:一个端点,无限 MCP 服务器 +# MCPHub:一个端点,无限 MCP 服务 [English Version](README.md) | 中文版 -MCPHub 是一款统一的中心服务器,可以将多个 MCP(Model Context Protocol)服务器整合为一个 SSE 端点。它通过提供一个集中的管理界面来简化服务管理,满足您对 MCP 服务器的所有需求。 +MCPHub 是一款统一的中心服务,可以将多个 MCP(Model Context Protocol)服务整合为一个 SSE 端点。它通过提供一个集中的管理界面来简化服务管理,满足您对 MCP 服务的所有需求。 ![仪表盘预览](assets/dashboard.png) ## 功能 -- **集中管理**:通过单一中心轻松管理多个 MCP 服务器。 +- **集中管理**:通过单一中心轻松管理多个 MCP 服务。 - **协议兼容**:同时支持 stdio 与 SSE MCP 协议,确保无缝对接。 -- **直观仪表盘**:通过 Web 界面实时监控服务器状态,并动态管理服务器。 -- **灵活配置**:无需重启中心服务器即可添加、移除或重新配置 MCP 服务器。 +- **直观仪表盘**:通过 Web 界面实时监控服务状态,并动态管理服务。 +- **灵活配置**:无需重启中心服务即可添加、移除或重新配置 MCP 服务。 ## 快速开始 @@ -29,9 +29,9 @@ docker run -p 3000:3000 samanhappy/mcphub `http://localhost:3000` 仪表盘提供以下功能: -- **实时监控**:随时查看所有 MCP 服务器的运行状态。 +- **实时监控**:随时查看所有 MCP 服务的运行状态。 - **服务状态指示**:快速识别各服务是否在线。 -- **动态管理**:无需重启即可动态添加或移除 MCP 服务器。 +- **动态管理**:无需重启即可动态添加或移除 MCP 服务。 ### SSE 端点 @@ -50,7 +50,7 @@ git clone https://github.com/samanhappy/mcphub.git ### 可选配置 -通过编辑 `mcp_settings.json` 文件来自定义 MCP 服务器设置。例如: +通过编辑 `mcp_settings.json` 文件来自定义 MCP 服务设置。例如: ```json { @@ -67,7 +67,7 @@ git clone https://github.com/samanhappy/mcphub.git } ``` -### 启动开发服务器 +### 启动开发服务 安装依赖并启动 MCPHub: diff --git a/assets/dashboard.png b/assets/dashboard.png index 8c3c8a0be892565620b16f6b5055f4a2ca060de3..0d4375b9fbdaa9d91ee7644e706fdbeadff51355 100644 GIT binary patch literal 25352 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 diff --git a/doc/intro.md b/doc/intro.md new file mode 100644 index 0000000..5eda77b --- /dev/null +++ b/doc/intro.md @@ -0,0 +1,47 @@ +# 如何一键部署你的专属 MCP 服务 + +MCP 正在成为行业事实标准,如何快速搭建和管理多个 MCP 服务成为个人开发者的痛点。 + +## 什么是 MCP? + +模型上下文协议(MCP)是由 Anthropic 推出的开放标准,旨在为大型语言模型(LLMs)提供一个标准化接口,使其能直接连接外部数据源和工具。简单来说,MCP 就像是 AI 应用的 USB-C 接口,统一解决了数据孤岛和定制化集成的问题。通过 MCP,AI 模型不仅可以实时获取最新信息,还能调用外部工具完成各类任务,实现跨平台、跨数据源的无缝交互。 + +## 当下的 MCP 生态 + +尽管 MCP 的标准化接口为 AI 应用的开发提供了便利,但在实际应用中,如何快速搭建和管理多个 MCP 服务仍然是一个挑战。MCPHub 正是为了解决这一问题而诞生的,它提供了一个集中管理和动态配置的解决方案,让个人开发者能够轻松应对多样化的需求。 + +## 一键部署,轻松满足个人需求 + +对于个人开发者而言,繁琐的部署流程常常成为创新的绊脚石。MCPHub 的亮点在于其“一键部署”功能: + +- **极简部署**:只需一条 Docker 命令,即可快速启动 MCPHub 服务,几分钟内即可搭建起专属的 MCP 服务平台,满足你对个人项目或实验室环境的所有需求。 + +- **动态扩展**:在使用过程中,你可以随时通过 Web 仪表盘添加、移除或调整 MCP 服务器配置,而不必重启整个系统。这种灵活性不仅适用于个人开发测试,也为将来的功能扩展提供了无限可能。 + +- **标准化接口**:基于 MCP 标准,你的服务可以无缝对接各种 AI 工具,无论是 Claude Desktop、Cursor 还是其他定制化应用,都能通过统一接口调用外部数据或执行工具操作,实现真正的多源协同。 + +## 快速上手指南 + +下面,我们将通过一个示例,展示如何使用 MCPHub 快速搭建一个基于高德地图 MCP 服务的行程规划助手。 + +### 使用 Docker 部署 +执行以下命令,即可在本地快速启动 MCPHub 服务: +```bash +docker run -p 3000:3000 samanhappy/mcphub +``` +### 访问仪表盘 +目前 MCPHub 已经内置了多个常用 MCP 服务,如高德地图、github、slack、fetch、tavily、playwright,开箱即可使用。在浏览器中打开 `http://localhost:3000`,直观的仪表盘将实时显示各个 MCP 服务器的状态,让你轻松管理和监控服务运行情况。 + +![仪表盘预览](../assets/dashboard.png) + +可以看到这些 MCP 服务都已经正常连接。 + +### 配置高德地图 + + + +## 结语 + +对于追求极致简便与个性化服务的个人开发者来说,MCPHub 提供了一种全新的解决方案——一键部署、轻松管理、灵活扩展,满足你对 MCP 服务的所有需求。现在就来体验 MCPHub,用最简单的方式构建属于你的专属 AI 服务平台吧! + +喜欢这篇文章的朋友请点赞、收藏,并分享给更多对 AI 与开源感兴趣的伙伴们。关注我们的公众号,获取更多技术干货与前沿资讯! \ No newline at end of file