星际迷航语录服务器

一个全面的MCP协议服务器,提供星际迷航语录资源与工具,支持多种传输协议和客户端集成。

  • by klaushofrichter
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 klaushofrichter/mcp-1

使用说明

MCP报价服务器🖖

一个全面的模型上下文协议(MCP)服务器,通过资源和工具提供《星际迷航》报价。该服务器使用现代MCP SDK v1.13.2构建,演示了如何为AI助手创建和部署MCP资源。

该项目的特点是 共享库架构 这消除了跨多个服务器实现的代码重复,同时保持了一致的功能和行为。

该代码主要由Claude 4/Cursor创建。

🏗️ 建筑

共享库(lib/)

该项目使用具有共享库的模块化架构来消除代码重复:

  • 📋 lib/quote-functions.js -核心业务逻辑功能
    • 字符搜索、随机选择、文本格式化
    • 数据验证和统计
  • 🔧 lib/mcp-resources.js -MCP协议定义
    • 标准资源和工具注册
    • 服务器元数据生成
  • 🌐 lib/rest-api-helpers.js -REST API响应处理程序
    • 所有HTTP操作的端点逻辑
    • 一致的错误处理
  • 🧪 lib/test-helpers.js -测试工具
    • 共享测试数据和验证功能
    • 常见的测试模式和断言

益处

  • 🎯 单一真相来源 -核心逻辑定义一次,随处使用
  • 🐛 集中式错误修复 -修复一次,修复所有实现
  • ⚡ 更快的发展 -同时在所有服务器上添加新功能
  • 🧪 更容易测试 -共享实用程序减少了测试重复
  • 📏 一致性行为 -所有实现都使用相同的逻辑

🚀 特性

MCP服务器(stdio传输)

资源(3个可用)

  • 📚 所有报价 (quotes://all)-完整的JSON报价集合
  • 🎲 随机报价 (quotes://random)-JSON格式的单随机引用
  • 📝 文本格式 (quotes://text)-所有引号格式为可读文本

工具(2个可用)

  • 🔍 按角色获取报价 -按《星际迷航》角色名称搜索引文
  • 🎯 随机报价工具 -生成文本格式的随机报价

MCP服务器(HTTP传输)

MCP端点

  • 🌐 POST/mcp -MCP客户端请求和初始化
  • 📡 GET/mcp -MCP服务器到客户端通知(SSE)
  • 🔚 删除/mcp -MCP会话终止
  • 💚 GET/健康 -健康检查和会话信息
  • 📋 得到/ -API信息

通过HTTP实现相同的MCP功能

  • 📚 资源:通过HTTP MCP协议可访问相同的3个资源
  • 🛠️ 工具:相同的2个工具可通过HTTP MCP协议调用
  • 🔒 会话管理:有状态的会话,并进行适当的清理
  • ⚡ 实时:通过SSE发送服务器到客户端的通知

Cloudflare Workers(全球HTTP MCP)

全球边缘网络

  • ⚡ 30ms以下响应时间 来自全球300多个地点
  • ♾️ 无限扩展 具有自动负载平衡功能
  • 🌍 99.9%正常运行时间 具有内置冗余

DRY实施

  • 📦 导入quotes.json -数据的单一真实来源
  • 🔧 重用共享函数 -所有实用功能来自 lib/quote-functions.js
  • ⚡ 优化捆绑包 -9.18 KiB(与DRY重构前的531 KiB相比)
  • 🧹 干净的代码库 -没有重复的逻辑或硬编码数据

相同的MCP协议和功能

  • 📚 资源:全球可用的所有3个MCP资源
  • 🛠️ 工具:两种MCP工具都具有边缘性能
  • 🌐 CORS就绪:为web应用程序预配置
  • 📊 生产监控:内置健康检查

REST API服务器(HTTP端点)

可用端点

  • 🌐 得到/ -API信息和可用端点
  • 📚 GET/报价 -所有引号均为JSON
  • 🎲 GET/报价/随机 -JSON格式的随机引用
  • 📝 GET/引号/文本 -所有引号均为格式化文本
  • 🔍 GET/引号/字符/:名称 -按字符搜索引号
  • 👥 GET/个字符 -列出所有可用字符
  • 🔎 获取/搜索?q=术语 -按内容或字符搜索引文
  • 💚 GET/健康 -服务器健康检查

本地代理服务器(API密钥桥)

将MCP客户端连接到远程服务器

  • 🔑 API关键问题解决者 -Cursor等MCP客户端不支持API密钥
  • 🌍 远程服务器访问 -将本地客户端连接到全球Cloudflare部署
  • 🔄 透明代理 -通过自动身份验证转发所有MCP请求
  • 📊 请求监控 -实时记录所有代理请求和响应
  • ⚡ 零客户端更改 -现有MCP客户端无需修改即可工作

数据特征

  • 8个经典的《星际迷航》语录,来自心爱的角色
  • 不区分大小写的字符搜索
  • 部分名称匹配支持
  • 全面的错误处理

发展特征

  • 📦 模块化架构 -共享库消除了400多行重复代码
  • 🔄 干燥原理 -不要在所有实现中重复自己
  • 🧪 综合测试 -涵盖所有功能的79项测试
  • 🛠️ 易于维护 -核心功能的单点变更
  • 📖 证据充分的 -清晰的API文档和代码示例

📋 先决条件

  • Node.js(版本16或更高)
  • npm(附带Node.js)
  • MCP兼容客户端(游标或克劳德码)

⚡ Cursor用户快速入门

要将Cursor连接到生产MCP服务器吗? 使用代理服务器:

# 1. Set up API key (one-time)
cp .env.example .env
# Edit .env: QUOTES_MCP_API_KEY=your_actual_api_key

# 2. Start proxy (keep running while using Cursor)
npm run start:proxy

# 3. Test it works
curl -X POST "http://localhost:3001" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

# 4. Configure Cursor to use the proxy (see MCP Client Configuration section)

结果:Cursor现在访问全球生产级MCP服务器,而不知道API密钥! 🎉

🛠️ 安装

1.克隆或下载

# If using git
git clone <repository-url>
cd mcp-quotes-server

# Or download and extract the files to a directory

2.安装依赖项

npm install

3.设置环境变量(用于测试)

为了运行测试和访问Cloudflare部署,您需要配置API密钥:

# Copy the example environment file
cp .env.example .env

# Edit .env and replace YOUR_API_KEY with a valid API key
# The file should contain:
# QUOTES_MCP_API_KEY=your_actual_api_key_here

重要提示:

  • 这 .env 文件由测试脚本使用(test-mcp-server.js, quick-test.sh)
  • 只有当你想测试 Cloudflare Workers部署
  • 本地MCP服务器(npm start, npm run start:mcp-http)做 不 需要API密钥
  • 这 .env 文件将使用自动加载 dotenv 包裹
  • 联系管理员以获取Cloudflare部署的有效API密钥

4.验证安装

# Test the server
npm test

# Start the server (for testing)
npm start

⚙️ MCP客户端配置

🎯 光标IDE

选项1:本地MCP服务器(建议用于开发)

  1. 打开光标设置

    • 按 Cmd/Ctrl + , 打开设置
    • 搜索“MCP”或导航到扩展→ MCP
  2. 添加MCP服务器配置 将此配置添加到光标MCP设置中:

    {
      "mcpServers": {
        "quotes-server": {
          "command": "npm",
          "args": ["start"],
          "cwd": "/YOUR_PATH/mcp-1",
          "env": {}
        }
      }
    }
    
  3. 重新启动游标

    • 重新启动Cursor IDE以加载MCP服务器
    • 报价服务器将在您的AI聊天中可用

选项2:通过代理远程服务器(建议用于生产环境)

🎯 非常适合将Cursor连接到远程Cloudflare部署!

为什么要使用代理? Cursor(和大多数MCP客户端)不知道API密钥 此实现需要,但远程Cloudflare服务器需要API密钥身份验证。代理通过自动向所有请求添加API密钥来解决此问题。

  1. 设置环境 (一次性设置):

    # Copy and configure API key
    cp .env.example .env
    # Edit .env and add your API key:
    # QUOTES_MCP_API_KEY=your_actual_api_key
    # REMOTE_MCP_URL=YOUR_MCP_SERVER_URL
    
  2. 启动代理服务器 (继续运行):

    npm run start:proxy
    

    代理运行在 http://localhost:3001 并转发到远程服务器。

  3. 测试连接 手动:

    # With proxy running, test that it works (no API key needed)
    curl -X POST "http://localhost:3001" \
      -H "Content-Type: application/json" \
      -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
    
  4. 配置您的MCP客户端 要连接到代理:

    • 适用于支持HTTP的MCP客户端:指向 http://localhost:3001
    • 仅适用于Cursor等stdio客户端:在转发到代理的不同端口上使用本地HTTP MCP服务器(需要自定义配置)

    备注:HTTP代理的MCP客户端配置因客户端而异。代理提供了一个标准的HTTP JSON-RPC端点,任何支持HTTP的MCP客户端都可以使用。

  5. 重新启动游标

    • 现在Cursor连接到全球Cloudflare部署 透明地
    • ✅ Cursor中不需要API密钥管理
    • ✅ 全球响应时间低于30ms
    • ✅ 始终与最新部署保持同步
    • ✅ 生产级可靠性和可扩展性

🤖 克劳德代码

  1. 安装Claude代码命令行界面

    • 按照以下步骤安装“claude代码” 说明.
  2. 配置MCP服务器

    • 在中创建MCP服务器配置 .mcp.json 文件:
    {
      "mcpServers": {
        "quotes-server": {
          "type": "stdio",
          "command": "node", 
          "args": ["/YOUR-PATH/mcp-1/server.js"],
          "env": {}
        }
      }
    }
    

重要:更新 args 路径以匹配您的实际安装目录。

您还可以在命令行上配置claude,例如,像这样制作一个远程 使用MCP代理的MCP服务器可用。代理和远程MCP服务器都必须 跑。

claude mcp add quotes --transport http http://localhost:3001
  1. 运行克劳德
    • 使用命令行启动claude代码 claude。您可以检查MCP服务器 命令可用性 /mcp'. Use the server by asking for example: 给我引述一下皮卡德的话。

🌟 Gemini CLI

  1. 安装Gemini CLI

    • 按照以下步骤安装“gemini cli” 说明.
  2. 配置MCP服务器

    • 在中创建MCP服务器配置 .gemini/settings.json 文件:
    {
      "mcpServers": {
        "quotes-server-stdio": {
          "type": "stdio",
          "command": "node",
          "args": ["/YOUR-PATH/mcp-1/server.js"],
          "env": {}
        },
        "quotes-server-http": {
          "type": "http",
          "command": "node",
          "args": ["/YOUR-PATH/mcp-1/mcp-server-http.js"],
          "env": {
            "PORT": "3001"
          }
        },
        "quotes-server-http-proxy": {
          "type": "http",
          "url": "http://localhost:3001",
          "description": "Local HTTP proxy for a remote MCP server"
        },
        "quotes-server-cloudflare": {
          "type": "http",
          "url": "https://quotes-mcp-worker.klaushofrichter.workers.dev",
          "description": "Cloudflare Workers deployment with global edge distribution"
        }
      }
    }
    

重要:更新 args 与实际安装目录匹配的路径。

  1. 运行Gemini CLI
    • 使用命令行启动gemini gemini。您可以检查MCP服务器 命令可用性 /mcp.使用服务器,例如: give me a quote by picard.

📖 API文档

资源

1.所有报价(quotes://all)

以JSON格式返回完整的引号集合。

响应格式:

[
  {
    "quote": "Live long and prosper.",
    "by": "Spock"
  },
  {
    "quote": "Beam me up, Scotty.",
    "by": "Captain James T. Kirk"
  }
]

2.随机报价(quotes://random)

返回一个JSON格式的随机引号。

响应格式:

{
  "quote": "Make it so.",
  "by": "Captain Jean-Luc Picard"
}

3.文本格式(quotes://text)

返回所有格式为可读文本的引号。

响应格式:

1. "Live long and prosper." - Spock

2. "Beam me up, Scotty." - Captain James T. Kirk

3. "Resistance is futile." - The Borg

4. "Make it so." - Captain Jean-Luc Picard

5. "I have been, and always shall be, your friend." - Spock

6. "Logic is the beginning of wisdom, not the end." - Spock

7. "It was … fun." - Captain James T. Kirk

8. "I don't believe in the no-win scenario." - Captain James T. Kirk

工具

1.按角色获取报价

搜索特定《星际迷航》角色的语录。

参数:

  • character (string):要搜索的字符名称

特征:

  • 不区分大小写的搜索
  • 部分名称匹配
  • 返回所有匹配的引号

示例:

Input: "Spock" → Returns all 3 Spock quotes
Input: "spock" → Same result (case-insensitive)
Input: "Captain" → Returns quotes from both Kirk and Picard
Input: "Worf" → Returns "No quotes found" message

2.随机报价工具

生成文本格式的随机引用。

参数: 无

响应格式:

"Live long and prosper." - Spock

🎯 服务器类型以及何时使用

该项目提供 五种不同的服务器实现 对于不同的用例:

1.MCP服务器(stdio)- npm start

最适合:本地AI助手,如Claude、Cursor和其他桌面MCP客户端

  • ✅ 本地MCP协议:完全符合MCP规范
  • ✅ 自动发现:自动发现的资源和工具
  • ✅ 就地安置:非常适合桌面AI助手
  • ❌ 仅限本地:无法远程访问

2.MCP服务器(HTTP)- npm run start:mcp-http

最适合:远程MCP客户端、基于web的MCP集成、本地开发

  • ✅ 完整的MCP协议:完全符合MCP 2024-11-05规范
  • ✅ 远程访问:HTTP传输允许基于网络的MCP客户端
  • ✅ 会话管理:具有自动清理功能的基于UUID的会话
  • ✅ 实时:通过服务器发送事件(SSE)发送服务器到客户端的通知
  • ✅ 安全:DNS重新绑定保护和主机验证
  • ✅ 有状态的:跨多个请求维护会话状态
  • ✅ 生产就绪:优雅的关机和错误处理
  • ❌ 单服务器:在一台机器上运行

3.Cloudflare Workers(HTTP MCP)- npm run worker:deploy

最适合:生产部署、全球规模、web应用程序、高可用性

  • ✅ 全球边缘网络:全球300多个地点
  • ✅ 超快的:全球响应时间低于30ms
  • ✅ 自动缩放:处理无限并发用户
  • ✅ 完整的MCP协议:完整的HTTP MCP传输支持
  • ✅ 99.9%正常运行时间:内置冗余和故障切换
  • ✅ 成本效益高:免费等级+按使用付费扩展
  • ✅ 零基础设施:没有要管理的服务器
  • ✅ DRY实施:通过共享功能优化捆绑包大小

4.REST API服务器(HTTP)- npm run start:http

最适合:Web应用程序、移动应用程序、通用API访问、非MCP客户端

  • ✅ 标准REST:熟悉的HTTP端点
  • ✅ 无MCP客户端:适用于任何HTTP客户端
  • ✅ 简单集成:易于与现有系统集成
  • ❌ 无自动发现:手动端点管理
  • ❌ 无MCP功能:缺少MCP特定功能

5.本地代理服务器- npm run start:proxy

最适合:将MCP客户端(如Cursor)连接到需要API密钥的远程服务器

  • ✅ 解决API关键问题:MCP客户端不知道API密钥,代理自动处理身份验证
  • ✅ 将游标连接到远程服务器:非常适合从Cursor访问全球Cloudflare部署
  • ✅ 透明代理:将所有请求原封不动地转发到远程MCP服务器
  • ✅ 无客户端修改:现有MCP客户端无需更改即可工作
  • ✅ 完整的MCP协议:完全传递所有MCP功能
  • ✅ 请求日志记录:显示所有代理请求和响应时间
  • ❌ 需要远程服务器:需要Cloudflare部署可用
  • ❌ 仅限本地:代理本身在端口3001上本地运行

🔗 本地代理服务器深度学习

本地代理服务器(proxy-server.js)解决了一个关键问题: Cursor等MCP客户不了解API密钥,但生产MCP服务器(如我们的Cloudflare部署)需要身份验证。

🎯 目的和好处

🔑 解决API关键问题

  • MCP客户端限制:游标和大多数MCP客户端仅支持简单的stdio/HTTP协议
  • 远程服务器要求:生产服务器需要API密钥身份验证以确保安全
  • 代理解决方案:充当桥接器,将API密钥自动添加到客户端请求中

🌐 将本地客户端连接到远程服务器

  • 无客户端更改:现有MCP客户端无需修改即可工作
  • 自动身份验证:代理从注入API密钥 .env 文件透明
  • 全局访问:从任何MCP客户端连接到生产Cloudflare部署
  • 完全协议支持:完全传递所有MCP功能

📈 关键用例

  • 🎯 光标集成:将Cursor连接到全球Cloudflare MCP服务器
  • 🔧 开发与测试:根据生产部署测试MCP客户端
  • 🌍 远程访问:使用本地开发环境中的生产服务器
  • 📚 学习与教育:了解MCP协议,无需身份验证复杂性

🚀 快速开始

1.配置环境

确保您的 .env 文件包含API密钥:

# Required for proxy to authenticate with remote server
QUOTES_MCP_API_KEY=your-actual-api-key

# Optional proxy configuration (defaults shown)
PROXY_PORT=3001
REMOTE_MCP_URL=https://quotes-mcp-server.YOUR-SUBDOMAIN.workers.dev

2.启动代理服务器

npm run start:proxy

预期产量:

🚀 MCP Proxy Server Started
================================
📍 Local URL:  http://localhost:3001
🌐 Remote URL: https://quotes-mcp-server.YOUR-SUBDOMAIN.workers.dev
🔑 API Key:    ✅ Configured
================================

3.测试代理

# Run proxy tests (requires proxy to be running)
./test-proxy.sh

# Or test manually without API key:
curl -X POST "http://localhost:3001" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

🔧 配置选项

环境变量

变量 默认值 描述
PROXY_PORT 3001 代理服务器的本地端口
REMOTE_MCP_URL https://quotes-mcp-server.YOUR-SUBDOMAIN.workers.dev 远程MCP服务器URL
QUOTES_MCP_API_KEY 远程身份验证所需的 API密钥

端点

方法 终点 目的
全部 /* 将所有请求代理到远程MCP服务器
得到 /proxy/health 代理服务器运行状况和配置

📊 请求流

Local Client → Proxy Server → Remote MCP Server
     ↑               ↓                ↓
     └─── Response ←─┴── + API Key ←──┘
  1. 客户端请求:客户端向发送MCP请求 http://localhost:3001 (没有API密钥)
  2. 代理处理:代理添加 X-API-Key 标题来自 .env 文件
  3. 远程转发:请求已转发到远程Cloudflare MCP服务器
  4. 响应返回:远程响应原封不动地返回给客户端

🛠️ 示例用法

MCP协议请求

# Initialize MCP session (no API key required)
curl -X POST "http://localhost:3001" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {"roots": {}, "sampling": {}},
      "clientInfo": {"name": "local-client", "version": "1.0.0"}
    },
    "id": 1
  }'

# Get random quote (no API key required)
curl -X POST "http://localhost:3001" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "random-quote-tool",
      "arguments": {}
    },
    "id": 2
  }'

健康检查

curl "http://localhost:3001/proxy/health"

预期响应:

{
  "status": "healthy",
  "proxy": {
    "port": 3001,
    "remote_url": "https://quotes-mcp-server.YOUR-SUBDOMAIN.workers.dev",
    "api_key_configured": true,
    "uptime": 120.5
  }
}

🔍 监控和记录

代理服务器提供所有请求的实时日志记录:

📨 POST / - Proxying to remote MCP server
📤 200 OK - 45ms
📨 POST / - Proxying to remote MCP server  
📤 200 OK - 32ms

🚨 错误处理

错误条件 响应 解决方案
缺少API密钥 500,出现JSON-RPC错误 添加 QUOTES_MCP_API_KEY 向 .env
远程服务器关闭 500,代理错误 检查远程服务器状态
从远程转发的API密钥 401无效 验证中的API密钥 .env
网络超时 500,出现获取错误 检查互联网连接

🌐 MCP HTTP服务器深度学习

MCP HTTP服务器(mcp-server-http.js)通过HTTP传输提供完整的模型上下文协议功能,使远程MCP客户端能够通过标准HTTP请求进行连接。

🚀 服务器功能

传输层

  • 可流式HTTP传输:用途 @modelcontextprotocol/sdk 流式HTTP服务器传输
  • 双向通信:支持客户端到服务器和服务器到客户端的消息传递
  • 基于会话:每个客户端都会获得一个唯一的会话ID,用于有状态通信
  • JSON-RPC 2.0:完全符合JSON-RPC规范

安全性和可靠性

  • DNS重新绑定保护:防止恶意跨源请求
  • 主机验证:仅允许来自以下位置的连接 127.0.0.1 和 localhost
  • 会话清理:自动清理过期或终止的会话
  • 优雅地关闭:在服务器终止时正确关闭所有会话
  • 错误处理:具有正确HTTP状态代码的全面错误响应

端点概述

方法 终点 目的 描述
职位 /mcp MCP请求 客户端到服务器的MCP消息(初始化、资源、工具)
得到 /mcp SSE通知 通过服务器发送事件发送服务器到客户端的通知
删除 /mcp 会话终止 清理会话关闭和资源清理
得到 /health 健康检查 服务器状态和会话信息
得到 / API信息 服务器详细信息和可用终结点

🔧 会话管理

会话生命周期

  1. 初始化:客户端发送 initialize 方法to POST /mcp
  2. 会话创建:服务器生成UUID并在标头中返回会话ID
  3. 沟通:客户端在后续请求中包含会话ID
  4. 通知:服务器可以通过以下方式发送通知 GET /mcp 上海证券交易所
  5. 终止:会话已通过关闭 DELETE /mcp 或服务器关闭

会话标头

# Client requests must include:
mcp-session-id: 550e8400-e29b-41d4-a716-446655440000

# Server responses include:
mcp-session-id: 550e8400-e29b-41d4-a716-446655440000

📊 MCP资源和工具

HTTP服务器公开了与stdio版本相同的MCP资源和工具:

可用资源

  • quotes://all -完整报价集合(JSON)
  • quotes://random -单随机引用(JSON)
  • quotes://text -所有引号格式为文本

可用工具

  • get-quote-by-character -按字符名称搜索引号
  • random-quote-tool -以文本格式生成随机报价

🔍 监测和可观察性

健康端点响应

{
  "status": "healthy",
  "timestamp": "2024-01-01T12:00:00.000Z", 
  "quotesLoaded": 8,
  "activeSessions": 2,
  "transport": "mcp-http"
}

服务器信息

{
  "name": "Star Trek Quotes MCP Server",
  "version": "1.0.0",
  "transport": "mcp-streamable-http",
  "totalQuotes": 8,
  "activeSessions": 2,
  "endpoints": {
    "POST /mcp": "MCP client requests and initialization",
    "GET /mcp": "MCP server-to-client notifications (SSE)",
    "DELETE /mcp": "MCP session termination"
  }
}

☁️ Cloudflare员工部署

MCP报价服务器可以部署到 Cloudflare员工 用于全球边缘分布,提供超快的响应时间和无限的可扩展性。

🌟 特性

全球边缘分布

  • 30毫秒以下延迟 来自全球300多个边缘位置
  • 自动缩放 处理任何交通量
  • 99.9%正常运行时间 具有内置冗余
  • 零冷启动 为了获得一致的性能

DRY架构优势

  • 📦 单一数据源:进口自 quotes.json 而不是硬编码数据
  • 🔧 共享功能:使用来自的所有实用程序 lib/quote-functions.js
  • ⚡ 优化捆绑包:9.18 KiB(比DRY重构前小98%)
  • 🧹 清洁代码:无重复逻辑,易于维护

生产就绪

  • 完全支持MCP协议 通过HTTP传输
  • CORS已启用 用于跨来源请求
  • 全面的错误处理 监测
  • 安全标头 并请求验证

成本效益高

  • 免费套餐可用 (100000次请求/天)
  • 按次付费 超越免费等级
  • 无基础设施管理 必需的

🚀 快速部署

先决条件

分3步部署

# 1. Install dependencies
npm install

# 2. Deploy to Cloudflare Workers
npx wrangler deploy

# 3. Validate deployment
npm run test:cloudflare

🎉 您的MCP服务器现已在全球范围内上线!

示例部署URL: https://quotes-mcp-server.YOUR-SUBDOMAIN.workers.dev

🔐 API密钥验证

Cloudflare Workers部署现在包括API密钥安全保护:

  • 必填标题:所有请求必须包括 X-API-Key 头球
  • 有效的API密钥:安全地存储在Cloudflare KV存储中
    • 请与管理员联系以获取有效的API密钥
    • 密钥通过以下方式动态管理 wrangler kv 命令
  • 错误响应:
    • 缺少API密钥:HTTP 401,错误代码为-32001
    • API密钥无效:HTTP 401,错误代码为-32002

看 api-config.md 有关设置说明。

备注:测试脚本自动从加载API密钥 .env 文件。请参阅 环境变量设置 详细说明部分。

📊 性能指标

我们的生产部署实现了:

度量 性能
响应时间 平均25ms
边缘延迟 全球<30ms
可用性 99.9%以上的正常运行时间
并发用户 无限制
全球位置 300+边缘城市
捆绑尺寸 9.18 KiB(优化)

🔧 配置

Workers部署包括:

MCP端点

POST /     - MCP protocol requests

CORS支持

为web应用程序预配置:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Content-Type

🎯 使用示例

直接HTTP API访问

# MCP protocol request (requires API key)
curl -X POST https://quotes-mcp-server.YOUR-SUBDOMAIN.workers.dev \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05"},"id":1}'

🧪 测试

该项目包括全面的测试套件 79个测试用例 所有服务器实现的总计,围绕 共享库架构测试验证了共享库及其在不同服务器类型之间的集成。

共享库对测试的好处

  • 🔄 一致性行为 -所有实现都使用相同的共享函数
  • 🧪 减少测试重复 -在共享库中测试一次核心逻辑
  • ⚡ 更快的测试运行 -共享测试工具加速测试开发
  • 🎯 重点测试 -测试验证集成,而不是重复业务逻辑
  • 🐛 集中验证 -共享库中的错误修复在任何地方都会自动测试

运行测试

# Run ALL server implementations (79 total tests)
npm test

# Run all tests comprehensively
npm run test:all

# Run specific test suites by implementation
npm run test:core          # Local server implementations (64 tests)
npm run test:mcp           # MCP stdio server only (20 tests)
npm run test:http          # REST API server only (17 tests)
npm run test:mcp-http      # MCP HTTP server only (27 tests)
npm run test:cloudflare    # Cloudflare integration tests (15 tests) - requires .env
npm run test:cloudflare-quick  # Quick validation script (5 tests) - requires .env

# Development testing
npm run test:watch         # Run core tests in watch mode
npm run test:coverage      # Run core tests with coverage reporting

测试覆盖率

核心服务器测试(64次测试)

  • ✅ MCP服务器测试 (20次测试)-stdio传输功能
  • ✅ HTTP REST API测试 (17项测试)-所有端点和操作
  • ✅ MCP HTTP服务器测试 (27个测试)-带会话的HTTP传输

Cloudflare Worker测试(15项测试)

  • ✅ MCP协议合规性 (5个测试)-初始化、工具、资源
  • ✅ 工具功能 (4个测试)-字符搜索和随机引用
  • ✅ 资源访问 (3个测试)-所有资源端点
  • ✅ 错误处理 (3个测试)-方法、工具无效,JSON格式错误

测试结果总结

📊 Total Test Results:
   ✅ Core Tests: 64/64 passed (100%)
   ✅ Cloudflare Tests: 15/15 passed (100%)
   📈 Overall Success Rate: 79/79 (100%)

🗂️ 源代码结构

📦 共享库架构(lib/)

该项目遵循 模块化共享库架构 这消除了代码重复,并确保了所有服务器实现的一致行为。

lib/quote-functions.js -核心业务逻辑

// Core quote operations used by all servers
export function searchQuotesByCharacter(quotesData, character)  // Character search with fuzzy matching
export function getRandomQuote(quotesData)                     // Random quote selection
export function formatQuoteAsText(quote)                       // Single quote formatting
export function formatQuotesAsText(quotesData)                 // Multi-quote numbered formatting
export function getAvailableCharacters(quotesData)             // Unique character extraction
export function searchQuotes(quotesData, query)                // General search functionality
export function validateQuoteData(quotesData)                  // Data structure validation
export function getQuoteStats(quotesData)                      // Collection statistics

lib/mcp-resources.js -MCP协议定义

// MCP resource and tool registration for all MCP servers
export function registerMcpResources(server, quotesData, serverType)  // Standard MCP resources
export function registerMcpTools(server, quotesData, serverType)      // Standard MCP tools  
export function getMcpServerMetadata(name, transport, quotesData, extras) // Server metadata

lib/rest-api-helpers.js -REST API响应处理程序

// HTTP endpoint handlers used by REST API
export function getApiInfo(quotesData, serverInfo)             // API information responses
export function getHealthCheck(quotesData, serverInfo)         // Health check responses
export function handleGetAllQuotes(quotesData)                 // GET /quotes logic
export function handleGetRandomQuote(quotesData)               // GET /quotes/random logic
export function handleGetQuotesByCharacter(quotesData, char)   // GET /quotes/character/:name logic
export function handleGetCharacters(quotesData)                // GET /characters logic
export function handleSearchQuotes(quotesData, query)          // GET /search logic
export function handle404NotFound()                            // Standard 404 responses
export function handleError(message, error)                    // Error response formatting

lib/test-helpers.js -测试工具

// Shared testing functions and data used across all test files
export const mockQuotesData                                    // Consistent test data
export function createTestHandlers(testQuotesData)             // Test handler factories
export function validateQuoteStructure(quote)                  // Quote validation
export function validateExpectedCharacters(characters)         // Character validation
export const characterSearchTests                              // Common test cases
export function validateResponseHeaders(response)              // Header validation
export function validateCORSHeaders(response)                  // CORS validation
export function validateDataIntegrity(data)                    // Data integrity checks

🚀 服务器实现

现在,每个服务器实现都是 薄包装纸 围绕共享库,为相同的核心功能提供不同的传输机制。

server.js -MCP服务器(标准传输)

// Minimal MCP server for local client integration (Cursor IDE, Claude Code)
import { registerMcpResources, registerMcpTools } from './lib/mcp-resources.js';

const server = new McpServer({ name: 'quotes-server', version: '1.0.0' });
registerMcpResources(server, quotesData, 'Stdio');  // 3 MCP resources
registerMcpTools(server, quotesData, 'Stdio');      // 2 MCP tools

// Uses: StdioServerTransport for process communication
// Purpose: Local development, IDE integration
// Started with: npm start

mcp-server-http.js -MCP服务器(HTTP传输)

// HTTP-based MCP server with session management
import { registerMcpResources, registerMcpTools, getMcpServerMetadata } from './lib/mcp-resources.js';

function createMcpServer() {
  const server = new McpServer({ name: 'quotes-server-http', version: '1.0.0' });
  registerMcpResources(server, quotesData, 'HTTP');  // Same 3 MCP resources
  registerMcpTools(server, quotesData, 'HTTP');      // Same 2 MCP tools
  return server;
}

// Uses: StreamableHTTPServerTransport + Express.js
// Features: Session management, SSE notifications, CORS
// Purpose: Remote MCP clients, web integration
// Started with: npm run start:mcp-http

http-server.js -REST API服务器

// Traditional REST API using shared response handlers
import { 
  getApiInfo, getHealthCheck, handleGetAllQuotes, handleGetRandomQuote,
  handleGetQuotesByCharacter, handleGetCharacters, handleSearchQuotes,
  handle404NotFound, handleError 
} from './lib/rest-api-helpers.js';

// All endpoints are simple wrappers:
app.get('/quotes', (req, res) => {
  const result = handleGetAllQuotes(quotesData);
  res.json(result);
});

// Uses: Express.js framework
// Purpose: REST API consumers, web applications
// Started with: npm run start:http

worker.js -Cloudflare Workers MCP(DRY实施)

// Global edge MCP server using DRY principles
import quotesData from './quotes.json';  // Single source of truth
import { 
  getRandomQuote, formatQuoteAsText, formatQuotesAsText, 
  searchQuotesByCharacter, getAvailableCharacters 
} from './lib/quote-functions.js';

// Lightweight HTTP handler using shared functions
export default {
  async fetch(request, env, ctx) {
    // Direct MCP protocol implementation
    // Uses shared functions for all quote operations
    // No duplicated data or logic
  }
}

// Uses: Cloudflare Workers Request/Response API
// Features: Global edge distribution, auto-scaling, DRY architecture
// Bundle size: 9.18 KiB (optimized)
// Started with: npx wrangler deploy

📁 数据流

📁 quotes.json (Single Source of Truth)
     ↓
📦 lib/quote-functions.js (Core Logic)
     ↓
┌─── 📦 lib/mcp-resources.js ←── MCP Servers (stdio, HTTP)
│    📦 lib/rest-api-helpers.js ←── REST API Server
└─── 🌐 worker.js ←── Cloudflare Workers (Direct Import)

🎯 这种架构的好处

🔄 干燥原则(不要重复自己)

  • 单一真相来源 适用于所有业务逻辑
  • 集中式错误修复 -一次修复,处处修复
  • Cloudflare Workers优化 -捆绑包尺寸减少98%

📏 一致性行为

  • 相同的逻辑 跨所有服务器实现
  • 相同的响应格式 无论运输方式如何
  • 保证兼容性 不同服务器类型之间

⚡ 开发效率

  • 功能开发速度提高4倍 -添加一次,随处可用
  • 减少认知负荷 -理解模式一次,适用于任何地方
  • 更容易入职 -明确的关注点分离

🧪 简化测试

  • 共享测试工具 减少测试代码重复
  • 核心逻辑测试一次 在共享库中
  • 集成测试 仅验证特定于运输的功能

🛠️ 易于维护

  • 集中维护 -更新共享库,所有服务器受益
  • 明确依赖关系 -易于理解什么影响什么
  • 模块化更新 -改变一个方面而不影响其他方面

📁 完整的文件结构

mcp-quotes-server/
├── 📦 lib/                              # Shared Libraries (Eliminates 400+ lines of duplication)
│   ├── quote-functions.js               #   🎯 Core: search, format, validate (8 functions)
│   ├── mcp-resources.js                 #   🔧 MCP: resources, tools, metadata (3 functions)  
│   ├── rest-api-helpers.js              #   🌐 REST: endpoint handlers (9 functions)
│   └── test-helpers.js                  #   🧪 Test: shared utilities (10+ functions)
│
├── 🚀 Server Implementations            # Thin wrappers around shared libraries
│   ├── server.js                        #   📡 MCP Stdio (44 lines)
│   ├── mcp-server-http.js               #   🌐 MCP HTTP (244 lines) 
│   ├── http-server.js                   #   📋 REST API (187 lines)
│   └── worker.js                        #   ☁️ Workers MCP DRY (269 lines, 9.18 KiB)
│
├── 📊 Data & Configuration
│   ├── quotes.json                      #   📚 Single source of truth (8 quotes)
│   ├── package.json                     #   📦 Dependencies & scripts
│   ├── package-lock.json                #   🔒 Locked dependency versions
│   └── wrangler.toml                    #   ☁️ Cloudflare Workers config
│
├── 🧪 Testing Suite (79 Tests Total)
│   ├── server.test.js                   #   📡 MCP Stdio tests (20 tests)
│   ├── http-server.test.js              #   📋 REST API tests (17 tests)
│   ├── mcp-server-http.test.js          #   🌐 MCP HTTP tests (27 tests)
│   ├── test-mcp-server.js               #   ☁️ Workers integration tests (15 tests)
│   ├── quick-test.sh                    #   ⚡ Fast validation script (5 tests)
│   └── manual-tests.md                  #   📖 Manual testing guide
│
└── 📖 Documentation
    ├── README.md                        #   📚 Complete documentation
    ├── CODE-DEDUPLICATION-SUMMARY.md   #   📊 Architecture benefits
    ├── WORKER-DEPLOYMENT.md            #   ☁️ Deployment guide
    └── TESTING.md                       #   🧪 Testing guide

该架构展示了 企业级软件工程实践 具有明确的关注点分离、全面的测试和针对现代边缘计算优化的可维护代码组织。

🔧 发展

项目脚本

# Server startup
npm start              # Start the MCP server (stdio transport)
npm run start:mcp-http # Start the MCP server (HTTP transport)  
npm run start:http     # Start the REST API server (HTTP)

# Testing
npm test               # Run all server implementations (79 tests)
npm run test:all       # Run all tests comprehensively
npm run test:core      # Run local implementations (64 tests)
npm run test:cloudflare     # Run Cloudflare integration tests (15 tests)
npm run test:cloudflare-quick # Quick validation (5 tests)

# Development testing
npm run test:watch     # Run core tests in watch mode
npm run test:coverage  # Run core tests with coverage

# Cloudflare Workers
npx wrangler deploy    # Deploy to Cloudflare Workers
npm run worker:dev     # Run Workers locally with Wrangler

添加新报价

  1. 编辑 quotes.json
  2. 添加新的引号对象 quote 和 by 属性
  3. 运行测试以确保一切正常: npm test
  4. 如果使用Cloudflare Workers,请重新部署: npx wrangler deploy

依赖项

  • @模型上下文协议/sdk:^1.13.2-现代MCP SDK
  • 表达:^4.18.2-用于REST API的Web框架
  • 跨域资源共享:^2.8.5-跨来源资源共享
  • 动物圈:^3.23.8-模式验证

开发依赖关系

  • 玩笑:^29.7.0-测试框架
  • 超级试验:^6.3.4-HTTP测试库
  • 牧马人:^4.22.0-Cloudflare Workers CLI

🐛 故障排除

服务器无法启动

  1. 检查Node.js版本:确保你有Node.js 16+

    node --version
    
  2. 重新安装依赖项:

    rm -rf node_modules package-lock.json
    npm install
    
  3. 检查文件权限:

    chmod +x server.js
    

MCP客户端无法连接

  1. 验证配置路径:确保 cwd MCP客户端配置中的路径与实际安装目录匹配。

  2. 检查服务器启动:手动测试服务器:

    cd /path/to/your/mcp-quotes-server
    npm start
    
  3. 重新启动MCP客户端:重新加载VS代码(用于Claude代码)或重新启动Cursor。

Cloudflare员工问题

  1. 部署失败:

    # Check Wrangler authentication
    npx wrangler auth
    
    # Verify wrangler.toml configuration
    cat wrangler.toml
    
    # Deploy with verbose output
    npx wrangler deploy --verbose
    
  2. 测试部署:

    # Run integration tests
    npm run test:cloudflare
    
    # Quick validation
    npm run test:cloudflare-quick
    

常见问题

问题 解决方案
“找不到模块” 运行 npm install
“权限被拒绝” 检查文件权限
“端口已在使用中” 终止现有进程
“找不到配置” 验证MCP客户端配置文件路径
“Worker部署失败” 检查牧马人身份验证

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 运行测试: npm test
  5. 提交拉取请求

📄 许可证

该项目根据MIT许可证获得许可。

🖖 关于

本项目演示了如何:

  • 创建MCP服务器 使用官方SDK进行stdio和HTTP传输
  • 实施MCP资源和工具 具有适当的模式验证和错误处理
  • 处理多种运输类型 (stdio、可流式HTTP、REST API、Workers)
  • 构建全面的测试套件 在所有实现中总共进行了79次测试
  • 配置MCP客户端 适用于本地和远程环境
  • 管理会话和状态 在具有UUID跟踪的基于HTTP的MCP服务器中
  • 实施安全功能 如DNS重新绑定保护和主机验证
  • 提供可观察性 通过健康检查和监控端点
  • 应用干燥原则 跨实现实现实现可维护、高效的代码
  • 针对边缘计算进行优化 部署Cloudflare Workers

非常适合:

  • 🎓 学习MCP开发 提供实用的、可投入生产的示例
  • 🏗️ 企业MCP服务器基础 有多种运输选择
  • 🔧 了解MCP协议 通过工作实施和全面测试
  • 🌐 构建远程MCP集成 使用HTTP传输和会话管理
  • 📊 测试策略 用于单元测试和与真实服务器进程的集成测试
  • 🛡️ 安全模式 适用于网络可访问的MCP服务器
  • ⚡ 性能优化 通过DRY架构和边缘部署

长命百岁,繁荣昌盛! 🖖