返回市场
MCP服务器

MCP服务器

作者:BilgisayarKavramlari13 星标更新:2025-08-11

项目介绍

技术文档摘要

MCP-Server

模型上下文协议

高级 MCP(模型上下文协议)服务器

GitHub Actions CI/CD License: MIT

该项目是一个有状态、安全、优化且可扩展的网关服务器,专为现代人工智能应用而设计。从零开始构建,该服务超越了简单的聊天机器人,融入了生产环境所需的专业工程实践。

关于项目

MCP 服务器旨在解决大型语言模型(LLM)最大的弱点之一:“记忆障碍”。通过为每个用户维护独立的对话上下文,它使 AI 能够建立一致且个性化的对话。

此仓库生动地展示了如何将一个想法逐步转化为专业服务:

  1. 设计: 设计了一个基于 RESTful API 原则的“契约”。
  2. 开发: 使用 FastAPI 构建了一个异步 Web 服务器,并使用 Redis 构建了一个快速内存层。
  3. 打包: 应用程序已打包成一个便携式容器,可以使用 Docker 在任何地方运行。
  4. 分发: 通过单个命令在 Google Cloud Run 等无服务器平台上启动。
  5. 自动化: 通过使用 GitHub Actions 建立 CI/CD 流水线,每次代码更改都会自动分发。
  6. 管理: 添加了对生产环境至关重要的功能,如可追溯性、安全性及成本优化。

特色功能

  • 带有情境信息的对话: 使用 Redis 为每个用户管理独立且持久的聊天历史记录。
  • 现代 API: 使用 FastAPI 开发的高性能异步 RESTful API。
  • 自动文档: 从代码中自动生成交互式的 Swagger/OpenAPI 文档。
  • 容器化: 使用 Docker 打包,提供便携且一致的分发选项。
  • 无服务器兼容: 可以轻松在 Google Cloud Run 等平台上运行。
  • CI/CD 自动化: 通过 GitHub Actions 实现 git push 后的自动分发。
  • 安全措施: 包括速率限制和基本提示注入防御。
  • 成本优化: 通过智能缓存防止不必要的 API 调用。
  • 可观测性: 与 Google Cloud Logging 集成,进行结构化日志记录。
  • Codespaces 集成: 单击即可访问云端全结构化开发环境。

架构

应用程序基于网关架构。接收用户的请求,从 Redis 获取相关的记忆/上下文信息,生成富含这些信息的提示并发送到 OpenAI 等 LLM 服务,然后更新记忆后返回响应给用户。

快速访问模块和课程

开始:使用 GitHub Codespaces 安装和运行

本项目完全设计用于在 GitHub Codespaces 上工作,无需本地安装。

先决条件

  1. GitHub 账户: 可以使用 Codespaces 功能的 GitHub 账户。
  2. OpenAI API 密钥: 从 OpenAI 获取的有效 API 密钥,以 sk-... 开头。

分步安装

1. 将此仓库复制到您的账户

点击右上角的 Fork 按钮,在您的账户中创建一份副本。

2. 配置您的 OpenAI API 密钥

您的 API 密钥是项目的最重要秘密,应妥善保管。

  • 转到您分叉仓库的主页。
  • 路径为 设置 > 机密和变量 > Codespaces
  • 点击 新建仓库机密 按钮。
  • 名称: OPENAI_API_KEY
  • 值: sk-... 输入您的 OpenAI API 密钥。
  • 点击 添加机密 记录。

启动 Codespace

  • 返回到您的仓库主页。
  • 点击绿色的 <> Code 按钮。
  • 转到 Codespaces 标签页。
  • 点击 在主分支上创建 codespace 按钮。

等待 4 秒

GitHub 将为您提供云中的开发环境。借助 .devcontainer 的配置,所有安装(包括 Python 库)都将自动完成。

5. 启动服务

当环境准备好时,在 VS Code 的 TERMINAL 中打开并按顺序运行以下代码单元格。

项目文件结构

完成的项目具有以下文件结构:

<pre> ├── .devcontainer/ │ ├── devcontainer.json │ └── post-create.sh ├── .github/workflows/ │ └── deploy.yml ├── api/ │ └── v1/ │ └── endpoints/ │ └── sessions.py ├── core/ │ └── config.py ├── schemas/ │ └── session_schema.py ├── services/ │ ├── openai_service.py │ └── redis_service.py ├── .dockerignore ├── Dockerfile ├── main.py ├── README.md └── requirements.txt </pre> <pre> # 首先,让我们以 Docker 容器的形式启动 Redis 数据库。 # 此命令将在后台继续运行。 echo "正在启动 Redis 容器..." docker run --name mcp-redis -p 6379:6379 -d redis echo "Redis 已启动。您可以使用 'docker ps' 命令进行检查。" </pre> <pre> # 现在,让我们使用 uvicorn 启动我们的 FastAPI 应用程序。 # 此命令将继续运行并占用终端。 # 您可以通过此终端跟踪应用程序的日志。 echo "正在启动 FastAPI 服务器... ([http://127.0.0.1:8000](http://127.0.0.1:8000))" uvicorn main:app --host 0.0.0.0 --port 8000 --reload </pre>

6. 访问和测试您的应用程序

uvicorn 命令运行时,Codespaces 的右下角会显示端口 8000 可用的通知。

  • 在 VS Code 中转到 PORTS 标签页(通常位于终端旁边)。
  • 查找端口“8000”的“转发地址”URL。此 URL 将以 https://...app.github.dev 形式出现。
  • 现在,您可以通过这个通用 URL 访问您的应用程序!

API 使用和测试

您可以通过运行以下代码单元格来测试您的实时服务。首先从上方单元格获取重定向的 URL 并将其分配给 URL 变量。

<pre lang="python"> # 请将 YONLENDIRILEN_URL 部分替换为您自己的 Codespace URL。 URL="[https://kullanici-adi-proje-adi-....app.github.dev](https://kullanici-adi-proje-adi-....app.github.dev)" # 让我们启动一个新的会话并将返回的 ID 分配给一个变量 echo "正在启动新的会话..." SESSION_RESPONSE=$(curl -s -X POST $URL/v1/sessions) export SESSION_ID=$(echo $SESSION_RESPONSE | grep -o '"session_id":"[^"]*' | cut -d'"' -f4) if [ -z "$SESSION_ID" ]; then echo "错误:无法获取会话 ID!" echo "返回的响应:$SESSION_RESPONSE" else echo "会话已启动。ID:$SESSION_ID" fi </pre>