[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-QuantGeekDev--mcp-framework":3,"tool-QuantGeekDev--mcp-framework":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",160015,2,"2026-04-18T11:30:52",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":78,"owner_website":78,"owner_url":79,"languages":80,"stars":92,"forks":93,"last_commit_at":94,"license":95,"difficulty_score":32,"env_os":96,"env_gpu":97,"env_ram":97,"env_deps":98,"category_tags":105,"github_topics":106,"view_count":32,"oss_zip_url":78,"oss_zip_packed_at":78,"status":17,"created_at":115,"updated_at":116,"faqs":117,"releases":147},9145,"QuantGeekDev\u002Fmcp-framework","mcp-framework","The Typescript MCP Framework","mcp-framework 是一个专为 TypeScript 开发者设计的开源框架，旨在帮助用户优雅、高效地构建符合模型上下文协议（MCP）的服务器。它解决了传统开发中手动配置繁琐、架构不统一以及缺乏类型安全等痛点，让开发者能专注于业务逻辑而非底层基础设施。\n\n该工具非常适合希望扩展 AI 助手能力、构建自定义工具链的后端工程师和全栈开发者。通过 mcp-framework，用户可以利用基于目录的自动发现机制，轻松注册和管理工具、资源及提示词，无需编写大量样板代码。其核心技术亮点包括：原生支持多种传输协议（如 stdio、SSE 和 HTTP Stream），提供完整的 TypeScript 类型安全保障，并内置了针对 SSE 端点的 OAuth 2.1、JWT 等认证方案。此外，它强大的命令行界面（CLI）不仅支持一键创建项目和添加功能模块，还集成了严格的自动化验证流程，确保每个工具的定义清晰、文档完整，从而显著降低出错率并提升协作效率。无论是快速原型开发还是生产级部署，mcp-framework 都能提供坚实可靠的架构支持。","# MCP Framework\n\nMCP-Framework is a framework for building Model Context Protocol (MCP) servers elegantly in TypeScript.\n\nMCP-Framework gives you architecture out of the box, with automatic directory-based discovery for tools, resources, and prompts. Use our powerful MCP abstractions to define tools, resources, or prompts in an elegant way. Our cli makes getting started with your own MCP server a breeze\n\n## Features\n\n- 🛠️ Automatic discovery and loading of tools, resources, and prompts\n- Multiple transport support (stdio, SSE, HTTP Stream)\n- TypeScript-first development with full type safety\n- Built on the official MCP SDK\n- Easy-to-use base classes for tools, prompts, and resources\n- Out of the box authentication for SSE endpoints (OAuth 2.1, JWT, API Key)\n\n## Projects Built with MCP Framework\n\nThe following projects and services are built using MCP Framework:\n\n- ### [tip.md](https:\u002F\u002Ftip.md)\nA crypto tipping service that enables AI assistants to help users send cryptocurrency tips to content creators directly from their chat interface. The MCP service allows for:\n - Checking wallet types for users\n - Preparing cryptocurrency tips for users\u002Fagents to complete\nSetup instructions for various clients (Cursor, Sage, Claude Desktop) are available in their [MCP Server documentation](https:\u002F\u002Fdocs.tip.md\u002Fmcp-server\u002F).\n\n## Support our work\n\n[![Tip in Crypto](https:\u002F\u002Ftip.md\u002Fbadge.svg)](https:\u002F\u002Ftip.md\u002FQuantGeekDev)\n\n\n# [Read the full docs here](https:\u002F\u002Fmcp-framework.com)\n\n\n\n\n\n## Creating a repository with mcp-framework\n\n### Using the CLI (Recommended)\n\n```bash\n# Install the framework globally\nnpm install -g mcp-framework\n\n# Create a new MCP server project\nmcp create my-mcp-server\n\n# Navigate to your project\ncd my-mcp-server\n\n# Your server is ready to use!\n```\n\n## CLI Usage\n\nThe framework provides a powerful CLI for managing your MCP server projects:\n\n### Project Creation\n\n```bash\n# Create a new project\nmcp create \u003Cyour project name here>\n\n# Create a new project with the new EXPERIMENTAL HTTP transport\nHeads up: This will set cors allowed origin to \"*\", modify it in the index if you wish\nmcp create \u003Cyour project name here> --http --port 1337 --cors\n```\n\n# Options:\n# --http: Use HTTP transport instead of default stdio\n# --port \u003Cnumber>: Specify HTTP port (default: 8080)\n# --cors: Enable CORS with wildcard (*) access\n\n### Adding a Tool\n\n```bash\n# Add a new tool\nmcp add tool price-fetcher\n```\n\n### Building and Validation\n\nThe framework provides comprehensive validation to ensure your tools are properly documented and functional:\n\n```bash\n# Build with automatic validation (recommended)\nnpm run build\n\n# Build with custom validation settings\nMCP_SKIP_TOOL_VALIDATION=false npm run build  # Force validation (default)\nMCP_SKIP_TOOL_VALIDATION=true npm run build   # Skip validation (not recommended)\n```\n\n### Validating Tools\n\n```bash\n# Validate all tools have proper descriptions (for Zod schemas)\nmcp validate\n```\n\nThis command checks that all tools using Zod schemas have descriptions for every field. The validation runs automatically during build, but you can also run it standalone:\n\n- ✅ **During build**: `npm run build` automatically validates tools\n- ✅ **Standalone**: `mcp validate` for manual validation\n- ✅ **Development**: Use `defineSchema()` helper for immediate feedback\n- ✅ **Runtime**: Server validates tools on startup\n\n**Example validation error:**\n```bash\n❌ Tool validation failed:\n  ❌ PriceFetcher.js: Missing descriptions for fields in price_fetcher: symbol, currency. \nAll fields must have descriptions when using Zod object schemas. \nUse .describe() on each field, e.g., z.string().describe(\"Field description\")\n```\n\n**Integrating validation into CI\u002FCD:**\n```json\n{\n  \"scripts\": {\n    \"build\": \"tsc && mcp-build\",\n    \"test\": \"jest && mcp validate\",\n    \"prepack\": \"npm run build && mcp validate\"\n  }\n}\n```\n\n### Adding a Prompt\n\n```bash\n# Add a new prompt\nmcp add prompt price-analysis\n```\n\n### Adding a Resource\n\n```bash\n# Add a new resource\nmcp add resource market-data\n```\n\n## Development Workflow\n\n1. **Create your project:**\n   ```bash\n   mcp create my-mcp-server\n   cd my-mcp-server\n   ```\n\n2. **Add tools:**\n   ```bash\n   mcp add tool data-fetcher\n   mcp add tool data-processor\n   mcp add tool report-generator\n   ```\n\n3. **Define your tool schemas with automatic validation:**\n   ```typescript\n   \u002F\u002F tools\u002FDataFetcher.ts\n   import { MCPTool, MCPInput as AddToolInput } from \"mcp-framework\";\n  import { z } from \"zod\";\n\n  const AddToolSchema = z.object({\n  a: z.number().describe(\"First number to add\"),\n  b: z.number().describe(\"Second number to add\"),\n  });\n\n  class AddTool extends MCPTool {\n  name = \"add\";\n  description = \"Add tool description\";\n  schema = AddToolSchema;\n\n  async execute(input: AddToolInput\u003Cthis>) {\n    const result = input.a + input.b;\n    return `Result: ${result}`;\n    }\n  }\n  export default AddTool;\n\n   ```\n\n4. **Build with automatic validation:**\n   ```bash\n   npm run build  # Automatically validates schemas and compiles\n   ```\n\n5. **Optional: Run standalone validation:**\n   ```bash\n   mcp validate  # Check all tools independently\n   ```\n\n6. **Test your server:**\n   ```bash\n   node dist\u002Findex.js  # Server validates tools on startup\n   ```\n\n7. **Add to MCP Client** (see Claude Desktop example below)\n\n**Pro Tips:**\n- Use `defineSchema()` during development for immediate feedback\n- Build process automatically catches missing descriptions\n- Server startup validates all tools before accepting connections\n- Use TypeScript's autocomplete with `MCPInput\u003Cthis>` for better DX\n\n## Using with Claude Desktop\n\n### Local Development\n\nAdd this configuration to your Claude Desktop config file:\n\n**MacOS**: `~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n**Windows**: `%APPDATA%\u002FClaude\u002Fclaude_desktop_config.json`\n\n```json\n{\n\"mcpServers\": {\n\"${projectName}\": {\n      \"command\": \"node\",\n      \"args\":[\"\u002Fabsolute\u002Fpath\u002Fto\u002F${projectName}\u002Fdist\u002Findex.js\"]\n}\n}\n}\n```\n\n### After Publishing\n\nAdd this configuration to your Claude Desktop config file:\n\n**MacOS**: `~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n**Windows**: `%APPDATA%\u002FClaude\u002Fclaude_desktop_config.json`\n\n```json\n{\n\"mcpServers\": {\n\"${projectName}\": {\n      \"command\": \"npx\",\n      \"args\": [\"${projectName}\"]\n}\n}\n}\n```\n\n## Building and Testing\n\n1. Make changes to your tools\n2. Run `npm run build` to compile\n3. The server will automatically load your tools on startup\n\n## Environment Variables\n\nThe framework supports the following environment variables for configuration:\n\n| Variable              | Description                                           | Default     |\n|-----------------------|-------------------------------------------------------|-------------|\n| MCP_ENABLE_FILE_LOGGING | Enable logging to files (true\u002Ffalse)                 | false       |\n| MCP_LOG_DIRECTORY     | Directory where log files will be stored             | logs        |\n| MCP_DEBUG_CONSOLE     | Display debug level messages in console (true\u002Ffalse) | false       |\n\nExample usage:\n\n```bash\n# Enable file logging\nMCP_ENABLE_FILE_LOGGING=true node dist\u002Findex.js\n\n# Specify a custom log directory\nMCP_ENABLE_FILE_LOGGING=true MCP_LOG_DIRECTORY=my-logs node dist\u002Findex.js\n\n# Enable debug messages in console\nMCP_DEBUG_CONSOLE=true node dist\u002Findex.js\n```\n\n## Quick Start\n\n### Defining Tools\n\nMCP Framework uses Zod schemas for defining tool inputs, providing type safety, validation, and automatic documentation:\n\n```typescript\nimport { MCPTool, MCPInput } from \"mcp-framework\";\nimport { z } from \"zod\";\n\nconst AddToolSchema = z.object({\n  a: z.number().describe(\"First number to add\"),\n  b: z.number().describe(\"Second number to add\"),\n});\n\nclass AddTool extends MCPTool {\n  name = \"add\";\n  description = \"Add tool description\";\n  schema = AddToolSchema;\n\n  async execute(input: MCPInput\u003Cthis>) {\n    const result = input.a + input.b;\n    return `Result: ${result}`;\n  }\n}\n\nexport default AddTool;\n```\n\n**Key Benefits:**\n- ✅ **Single source of truth** - Define types and validation in one place\n- ✅ **Automatic type inference** - TypeScript types are inferred from your schema\n- ✅ **Rich validation** - Leverage Zod's powerful validation features\n- ✅ **Required descriptions** - Framework enforces documentation\n- ✅ **Better IDE support** - Full autocomplete and type checking\n- ✅ **Cleaner code** - No duplicate type definitions\n\n### Advanced Zod Schema Features\n\nThe framework supports all Zod features:\n\n```typescript\nimport { MCPTool, MCPInput } from \"mcp-framework\";\nimport { z } from \"zod\";\n\nconst AdvancedSchema = z.object({\n  \u002F\u002F String constraints and formats\n  email: z.string().email().describe(\"User email address\"),\n  name: z.string().min(2).max(50).describe(\"User name\"),\n  website: z.string().url().optional().describe(\"Optional website URL\"),\n  \n  \u002F\u002F Number constraints\n  age: z.number().int().positive().max(120).describe(\"User age\"),\n  rating: z.number().min(1).max(5).describe(\"Rating from 1 to 5\"),\n  \n  \u002F\u002F Arrays and objects\n  tags: z.array(z.string()).describe(\"List of tags\"),\n  metadata: z.object({\n    priority: z.enum(['low', 'medium', 'high']).describe(\"Task priority\"),\n    dueDate: z.string().optional().describe(\"Due date in ISO format\")\n  }).describe(\"Additional metadata\"),\n  \n  \u002F\u002F Default values\n  status: z.string().default('pending').describe(\"Current status\"),\n  \n  \u002F\u002F Unions and enums\n  category: z.union([\n    z.literal('personal'),\n    z.literal('work'),\n    z.literal('other')\n  ]).describe(\"Category type\")\n});\n\nclass AdvancedTool extends MCPTool {\n  name = \"advanced_tool\";\n  description = \"Tool demonstrating advanced Zod features\";\n  schema = AdvancedSchema;\n\n  async execute(input: MCPInput\u003Cthis>) {\n    \u002F\u002F TypeScript automatically knows all the types!\n    const { email, name, website, age, rating, tags, metadata, status, category } = input;\n    \n    console.log(input.name.toUpperCase()); \u002F\u002F ✅ TypeScript knows this is valid\n    console.log(input.age.toFixed(2));     \u002F\u002F ✅ Number methods available\n    console.log(input.tags.length);       \u002F\u002F ✅ Array methods available\n    console.log(input.website?.includes(\"https\")); \u002F\u002F ✅ Optional handling\n    \n    return `Processed user: ${name}`;\n  }\n}\n```\n\n### Automatic Type Inference\n\nThe `MCPInput\u003Cthis>` type automatically infers the correct input type from your schema, eliminating the need for manual type definitions:\n\n```typescript\nclass MyTool extends MCPTool {\n  schema = z.object({\n    name: z.string().describe(\"User name\"),\n    age: z.number().optional().describe(\"User age\"),\n    tags: z.array(z.string()).describe(\"User tags\")\n  });\n\n  async execute(input: MCPInput\u003Cthis>) {\n    \u002F\u002F TypeScript automatically knows:\n    \u002F\u002F input.name is string\n    \u002F\u002F input.age is number | undefined  \n    \u002F\u002F input.tags is string[]\n    \n    console.log(input.name.toUpperCase()); \u002F\u002F ✅ TypeScript knows this is valid\n    console.log(input.age?.toFixed(2));    \u002F\u002F ✅ Handles optional correctly\n    console.log(input.tags.length);       \u002F\u002F ✅ Array methods available\n  }\n}\n```\n\nNo more duplicate interfaces or generic type parameters needed!\n\n### Schema Validation & Descriptions\n\n**All schema fields must have descriptions**. This ensures your tools are well-documented and provides better user experience in MCP clients.\n\nThe framework validates descriptions at multiple levels:\n\n#### 1. Build-time Validation (Recommended)\n```bash\nnpm run build  # Automatically validates during compilation\n```\n\n#### 2. Development-time Validation\nUse the `defineSchema` helper for immediate feedback:\n\n```typescript\nimport { defineSchema } from \"mcp-framework\";\n\n\u002F\u002F This will throw an error immediately if descriptions are missing\nconst MySchema = defineSchema({\n  name: z.string(),  \u002F\u002F ❌ Error: Missing description\n  age: z.number().describe(\"User age\")  \u002F\u002F ✅ Good\n});\n```\n\n#### 3. Standalone Validation\n```bash\nmcp validate  # Check all tools for proper descriptions\n```\n\n#### 4. Runtime Validation\nThe server automatically validates tools on startup.\n\n**To skip validation** (not recommended):\n```bash\n# Skip during build\nMCP_SKIP_TOOL_VALIDATION=true npm run build\n\n# Skip during development\nNODE_ENV=production npm run dev\n```\n\n### Setting up the Server\n\n```typescript\nimport { MCPServer } from \"mcp-framework\";\n\nconst server = new MCPServer();\n\n\u002F\u002F OR (mutually exclusive!) with SSE transport\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      port: 8080            \u002F\u002F Optional (default: 8080)\n    }\n  }\n});\n\n\u002F\u002F Start the server\nawait server.start();\n```\n\n## Transport Configuration\n\n### stdio Transport (Default)\n\nThe stdio transport is used by default if no transport configuration is provided:\n\n```typescript\nconst server = new MCPServer();\n\u002F\u002F or explicitly:\nconst server = new MCPServer({\n  transport: { type: \"stdio\" }\n});\n```\n\n### SSE Transport\n\nTo use Server-Sent Events (SSE) transport:\n\n```typescript\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      port: 8080,            \u002F\u002F Optional (default: 8080)\n      endpoint: \"\u002Fsse\",      \u002F\u002F Optional (default: \"\u002Fsse\")\n      messageEndpoint: \"\u002Fmessages\", \u002F\u002F Optional (default: \"\u002Fmessages\")\n      cors: {\n        allowOrigin: \"*\",    \u002F\u002F Optional (default: \"*\")\n        allowMethods: \"GET, POST, OPTIONS\", \u002F\u002F Optional (default: \"GET, POST, OPTIONS\")\n        allowHeaders: \"Content-Type, Authorization, x-api-key\", \u002F\u002F Optional (default: \"Content-Type, Authorization, x-api-key\")\n        exposeHeaders: \"Content-Type, Authorization, x-api-key\", \u002F\u002F Optional (default: \"Content-Type, Authorization, x-api-key\")\n        maxAge: \"86400\"      \u002F\u002F Optional (default: \"86400\")\n      }\n    }\n  }\n});\n```\n\n### HTTP Stream Transport\n\nTo use HTTP Stream transport:\n\n```typescript\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      port: 8080,                \u002F\u002F Optional (default: 8080)\n      endpoint: \"\u002Fmcp\",          \u002F\u002F Optional (default: \"\u002Fmcp\") \n      responseMode: \"batch\",     \u002F\u002F Optional (default: \"batch\"), can be \"batch\" or \"stream\"\n      batchTimeout: 30000,       \u002F\u002F Optional (default: 30000ms) - timeout for batch responses\n      maxMessageSize: \"4mb\",     \u002F\u002F Optional (default: \"4mb\") - maximum message size\n      \n      \u002F\u002F Session configuration\n      session: {\n        enabled: true,           \u002F\u002F Optional (default: true)\n        headerName: \"Mcp-Session-Id\", \u002F\u002F Optional (default: \"Mcp-Session-Id\")\n        allowClientTermination: true, \u002F\u002F Optional (default: true)\n      },\n      \n      \u002F\u002F Stream resumability (for missed messages)\n      resumability: {\n        enabled: false,          \u002F\u002F Optional (default: false)\n        historyDuration: 300000, \u002F\u002F Optional (default: 300000ms = 5min) - how long to keep message history\n      },\n      \n      \u002F\u002F CORS configuration\n      cors: {\n        allowOrigin: \"*\"         \u002F\u002F Other CORS options use defaults\n      }\n    }\n  }\n});\n```\n\n#### Response Modes\n\nThe HTTP Stream transport supports two response modes:\n\n1. **Batch Mode** (Default): Responses are collected and sent as a single JSON-RPC response. This is suitable for typical request-response patterns and is more efficient for most use cases.\n\n2. **Stream Mode**: All responses are sent over a persistent SSE connection opened for each request. This is ideal for long-running operations or when the server needs to send multiple messages in response to a single request.\n\nYou can configure the response mode based on your specific needs:\n\n```typescript\n\u002F\u002F For batch mode (default):\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      responseMode: \"batch\"\n    }\n  }\n});\n\n\u002F\u002F For stream mode:\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      responseMode: \"stream\"\n    }\n  }\n});\n```\n\n#### HTTP Stream Transport Features\n\n- **Session Management**: Automatic session tracking and management\n- **Stream Resumability**: Optional support for resuming streams after connection loss\n- **Batch Processing**: Support for JSON-RPC batch requests\u002Fresponses\n- **Comprehensive Error Handling**: Detailed error responses with JSON-RPC error codes\n\n## Authentication\n\nMCP Framework provides optional authentication for SSE endpoints. You can choose between JWT, API Key, OAuth 2.1 authentication, or implement your own custom authentication provider.\n\n### JWT Authentication\n\n```typescript\nimport { MCPServer, JWTAuthProvider } from \"mcp-framework\";\nimport { Algorithm } from \"jsonwebtoken\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      auth: {\n        provider: new JWTAuthProvider({\n          secret: process.env.JWT_SECRET,\n          algorithms: [\"HS256\" as Algorithm], \u002F\u002F Optional (default: [\"HS256\"])\n          headerName: \"Authorization\"         \u002F\u002F Optional (default: \"Authorization\")\n        }),\n        endpoints: {\n          sse: true,      \u002F\u002F Protect SSE endpoint (default: false)\n          messages: true  \u002F\u002F Protect message endpoint (default: true)\n        }\n      }\n    }\n  }\n});\n```\n\nClients must include a valid JWT token in the Authorization header:\n```\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIs...\n```\n\n### API Key Authentication\n\n```typescript\nimport { MCPServer, APIKeyAuthProvider } from \"mcp-framework\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      auth: {\n        provider: new APIKeyAuthProvider({\n          keys: [process.env.API_KEY],\n          headerName: \"X-API-Key\" \u002F\u002F Optional (default: \"X-API-Key\")\n        })\n      }\n    }\n  }\n});\n```\n\nClients must include a valid API key in the X-API-Key header:\n```\nX-API-Key: your-api-key\n```\n\n### OAuth 2.1 Authentication\n\nMCP Framework supports OAuth 2.1 authentication per the MCP specification (2025-06-18), including Protected Resource Metadata (RFC 9728) and proper token validation with JWKS support.\n\nOAuth authentication works with both SSE and HTTP Stream transports and supports two validation strategies:\n\n#### JWT Validation (Recommended for Performance)\n\nJWT validation fetches public keys from your authorization server's JWKS endpoint and validates tokens locally. This is the fastest option as it doesn't require a round-trip to the auth server for each request.\n\n```typescript\nimport { MCPServer, OAuthAuthProvider } from \"mcp-framework\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      port: 8080,\n      auth: {\n        provider: new OAuthAuthProvider({\n          authorizationServers: [\n            process.env.OAUTH_AUTHORIZATION_SERVER\n          ],\n          resource: process.env.OAUTH_RESOURCE,\n          validation: {\n            type: 'jwt',\n            jwksUri: process.env.OAUTH_JWKS_URI,\n            audience: process.env.OAUTH_AUDIENCE,\n            issuer: process.env.OAUTH_ISSUER,\n            algorithms: ['RS256', 'ES256'] \u002F\u002F Optional (default: ['RS256', 'ES256'])\n          }\n        }),\n        endpoints: {\n          initialize: true,  \u002F\u002F Protect session initialization\n          messages: true     \u002F\u002F Protect MCP messages\n        }\n      }\n    }\n  }\n});\n```\n\n**Environment Variables:**\n```bash\nOAUTH_AUTHORIZATION_SERVER=https:\u002F\u002Fauth.example.com\nOAUTH_RESOURCE=https:\u002F\u002Fmcp.example.com\nOAUTH_JWKS_URI=https:\u002F\u002Fauth.example.com\u002F.well-known\u002Fjwks.json\nOAUTH_AUDIENCE=https:\u002F\u002Fmcp.example.com\nOAUTH_ISSUER=https:\u002F\u002Fauth.example.com\n```\n\n#### Token Introspection (Recommended for Centralized Control)\n\nToken introspection validates tokens by calling your authorization server's introspection endpoint. This provides centralized control and is useful when you need real-time token revocation.\n\n```typescript\nimport { MCPServer, OAuthAuthProvider } from \"mcp-framework\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      auth: {\n        provider: new OAuthAuthProvider({\n          authorizationServers: [\n            process.env.OAUTH_AUTHORIZATION_SERVER\n          ],\n          resource: process.env.OAUTH_RESOURCE,\n          validation: {\n            type: 'introspection',\n            audience: process.env.OAUTH_AUDIENCE,\n            issuer: process.env.OAUTH_ISSUER,\n            introspection: {\n              endpoint: process.env.OAUTH_INTROSPECTION_ENDPOINT,\n              clientId: process.env.OAUTH_CLIENT_ID,\n              clientSecret: process.env.OAUTH_CLIENT_SECRET\n            }\n          }\n        })\n      }\n    }\n  }\n});\n```\n\n**Environment Variables:**\n```bash\nOAUTH_AUTHORIZATION_SERVER=https:\u002F\u002Fauth.example.com\nOAUTH_RESOURCE=https:\u002F\u002Fmcp.example.com\nOAUTH_AUDIENCE=https:\u002F\u002Fmcp.example.com\nOAUTH_ISSUER=https:\u002F\u002Fauth.example.com\nOAUTH_INTROSPECTION_ENDPOINT=https:\u002F\u002Fauth.example.com\u002Foauth\u002Fintrospect\nOAUTH_CLIENT_ID=mcp-server\nOAUTH_CLIENT_SECRET=your-client-secret\n```\n\n#### OAuth Features\n\n- **RFC 9728 Compliance**: Automatic Protected Resource Metadata endpoint at `\u002F.well-known\u002Foauth-protected-resource`\n- **RFC 6750 WWW-Authenticate Headers**: Proper OAuth error responses with challenge headers\n- **JWKS Key Caching**: Public keys cached for 15 minutes (configurable)\n- **Token Introspection Caching**: Introspection results cached for 5 minutes (configurable)\n- **Security**: Tokens in query strings are automatically rejected\n- **Claims Extraction**: Access token claims in your tool handlers via `AuthResult`\n\n#### Popular OAuth Providers\n\nThe OAuth provider works with any RFC-compliant OAuth 2.1 authorization server:\n\n- **Auth0**: Use your Auth0 tenant's JWKS URI and issuer\n- **Okta**: Use your Okta authorization server configuration\n- **AWS Cognito**: Use your Cognito user pool's JWKS endpoint\n- **Azure AD \u002F Entra ID**: Use Microsoft Entra ID endpoints\n- **Custom**: Any OAuth 2.1 compliant authorization server\n\nFor detailed setup guides with specific providers, see the [OAuth Setup Guide](#oauth-setup-guide).\n\n#### Client Usage\n\nClients must include a valid OAuth access token in the Authorization header:\n\n```bash\n# Make a request with OAuth token\ncurl -X POST http:\u002F\u002Flocalhost:8080\u002Fmcp \\\n  -H \"Authorization: Bearer eyJhbGciOiJSUzI1NiIs...\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"jsonrpc\": \"2.0\", \"method\": \"tools\u002Flist\", \"id\": 1}'\n\n# Discover OAuth configuration\ncurl http:\u002F\u002Flocalhost:8080\u002F.well-known\u002Foauth-protected-resource\n```\n\n#### Security Best Practices\n\n- **Always use HTTPS in production** - OAuth tokens should never be transmitted over unencrypted connections\n- **Validate audience claims** - Prevents token reuse across different services\n- **Use short-lived tokens** - Reduces risk if tokens are compromised\n- **Enable token introspection caching** - Reduces load on authorization server while maintaining security\n- **Monitor token errors** - Track failed authentication attempts for security insights\n\n### Custom Authentication\n\nYou can implement your own authentication provider by implementing the `AuthProvider` interface:\n\n```typescript\nimport { AuthProvider, AuthResult } from \"mcp-framework\";\nimport { IncomingMessage } from \"node:http\";\n\nclass CustomAuthProvider implements AuthProvider {\n  async authenticate(req: IncomingMessage): Promise\u003Cboolean | AuthResult> {\n    \u002F\u002F Implement your custom authentication logic\n    return true;\n  }\n\n  getAuthError() {\n    return {\n      status: 401,\n      message: \"Authentication failed\"\n    };\n  }\n}\n```\n\n## Documentation MCP Servers (`@mcpframework\u002Fdocs`)\n\nSpin up an MCP documentation server from any Fumadocs site or any site with `llms.txt` — AI agents get tools to search, browse, and retrieve your docs.\n\n### Quick Start (CLI)\n\n```bash\n# Scaffold a new docs MCP server project\nnpx create-docs-mcp my-api-docs\ncd my-api-docs\n\n# Configure your docs site URL\ncp .env.example .env\n# Edit .env → set DOCS_BASE_URL=https:\u002F\u002Fdocs.myapi.com\n\n# Build and run\nnpm run build\nnpm start\n```\n\n### Quick Start (Programmatic)\n\n```typescript\nimport { DocsServer, FumadocsRemoteSource } from \"@mcpframework\u002Fdocs\";\n\nconst source = new FumadocsRemoteSource({\n  baseUrl: \"https:\u002F\u002Fdocs.myapi.com\",\n});\n\nconst server = new DocsServer({\n  source,\n  name: \"my-api-docs\",\n  version: \"1.0.0\",\n});\n\nserver.start();\n```\n\n### Source Adapters\n\n| Adapter | Best For | Search |\n|---------|----------|--------|\n| `FumadocsRemoteSource` | Fumadocs sites | Native Orama search with fallback |\n| `LlmsTxtSource` | Any site with `llms.txt` | Local text matching |\n| Custom `DocSource` | Any documentation backend | Your implementation |\n\n### Built-in MCP Tools\n\n| Tool | Description |\n|------|-------------|\n| `search_docs` | Search documentation by keyword or phrase |\n| `get_page` | Retrieve full markdown content of a page |\n| `list_sections` | Browse the documentation tree structure |\n\n### Add to Your MCP Client\n\n```bash\n# Claude Code\nclaude mcp add my-api-docs -- node \u002Fpath\u002Fto\u002Fmy-api-docs\u002Fdist\u002Findex.js\n\n# Or with environment variable\nclaude mcp add my-api-docs -e DOCS_BASE_URL=https:\u002F\u002Fdocs.myapi.com -- node \u002Fpath\u002Fto\u002Fmy-api-docs\u002Fdist\u002Findex.js\n```\n\nFor Claude Desktop \u002F Cursor configuration and full documentation, see the [@mcpframework\u002Fdocs README](.\u002Fpackages\u002Fdocs\u002FREADME.md).\n\n## License\n\nMIT\n","# MCP 框架\n\nMCP-Framework 是一个用于以优雅的方式在 TypeScript 中构建模型上下文协议（MCP）服务器的框架。\n\nMCP-Framework 提供开箱即用的架构，支持基于目录的工具、资源和提示的自动发现。您可以使用我们强大的 MCP 抽象来以优雅的方式定义工具、资源或提示。我们的 CLI 使您轻松上手自己的 MCP 服务器。\n\n## 特性\n\n- 🛠️ 自动发现并加载工具、资源和提示\n- 多种传输方式支持（stdio、SSE、HTTP 流）\n- 以 TypeScript 为先的开发，具有完全的类型安全性\n- 基于官方 MCP SDK 构建\n- 易于使用的工具、提示和资源基类\n- 为 SSE 端点提供开箱即用的身份验证（OAuth 2.1、JWT、API 密钥）\n\n## 使用 MCP 框架构建的项目\n\n以下项目和服务是使用 MCP 框架构建的：\n\n- ### [tip.md](https:\u002F\u002Ftip.md)\n  一个加密货币打赏服务，允许 AI 助手帮助用户直接从聊天界面向内容创作者发送加密货币打赏。该 MCP 服务支持：\n  - 检查用户的钱包类型\n  - 为用户\u002F代理准备加密货币打赏以完成交易\n  各种客户端（Cursor、Sage、Claude Desktop）的设置说明可在其 [MCP 服务器文档](https:\u002F\u002Fdocs.tip.md\u002Fmcp-server\u002F) 中找到。\n\n## 支持我们的工作\n\n[![以加密货币打赏](https:\u002F\u002Ftip.md\u002Fbadge.svg)](https:\u002F\u002Ftip.md\u002FQuantGeekDev)\n\n\n# [在此阅读完整文档](https:\u002F\u002Fmcp-framework.com)\n\n\n\n\n\n## 使用 MCP 框架创建仓库\n\n### 使用 CLI（推荐）\n\n```bash\n# 全局安装框架\nnpm install -g mcp-framework\n\n# 创建一个新的 MCP 服务器项目\nmcp create my-mcp-server\n\n# 进入您的项目\ncd my-mcp-server\n\n# 您的服务器已准备就绪！\n```\n\n## CLI 使用方法\n\n该框架提供了一个功能强大的 CLI 来管理您的 MCP 服务器项目：\n\n### 项目创建\n\n```bash\n# 创建新项目\nmcp create \u003C您的项目名称>\n\n# 使用新的实验性 HTTP 传输方式创建新项目\n注意：这会将 CORS 允许的源设置为“*”，如果您需要，请在 index 文件中进行修改。\nmcp create \u003C您的项目名称> --http --port 1337 --cors\n```\n\n# 选项：\n# --http：使用 HTTP 传输方式代替默认的 stdio\n# --port \u003C数字>：指定 HTTP 端口（默认：8080）\n# --cors：启用带有通配符 (*) 访问的 CORS\n\n### 添加工具\n\n```bash\n# 添加新工具\nmcp add tool price-fetcher\n```\n\n### 构建与验证\n\n该框架提供了全面的验证，以确保您的工具被正确地记录并正常运行：\n\n```bash\n# 推荐使用自动验证进行构建\nnpm run build\n\n# 使用自定义验证设置进行构建\nMCP_SKIP_TOOL_VALIDATION=false npm run build  # 强制验证（默认）\nMCP_SKIP_TOOL_VALIDATION=true npm run build   # 跳过验证（不推荐）\n```\n\n### 验证工具\n\n```bash\n# 验证所有工具是否具有适当的描述（针对 Zod 模式）\nmcp validate\n```\n\n此命令会检查所有使用 Zod 模式的工具，确保每个字段都有描述。验证会在构建时自动运行，但您也可以单独运行它：\n\n- ✅ **构建时**：`npm run build` 会自动验证工具\n- ✅ **单独运行**：`mcp validate` 可用于手动验证\n- ✅ **开发时**：使用 `defineSchema()` 辅助函数可获得即时反馈\n- ✅ **运行时**：服务器会在启动时验证工具\n\n**验证错误示例：**\n```bash\n❌ 工具验证失败：\n  ❌ PriceFetcher.js：price_fetcher 中的 symbol 和 currency 字段缺少描述。\n  使用 Zod 对象模式时，所有字段都必须有描述。\n  请对每个字段使用 .describe() 方法，例如 z.string().describe(\"字段描述\")。\n```\n\n**将验证集成到 CI\u002FCD 流程中：**\n```json\n{\n  \"scripts\": {\n    \"build\": \"tsc && mcp-build\",\n    \"test\": \"jest && mcp validate\",\n    \"prepack\": \"npm run build && mcp validate\"\n  }\n}\n```\n\n### 添加提示\n\n```bash\n# 添加新提示\nmcp add prompt price-analysis\n```\n\n### 添加资源\n\n```bash\n# 添加新资源\nmcp add resource market-data\n```\n\n## 开发工作流\n\n1. **创建您的项目：**\n   ```bash\n   mcp create my-mcp-server\n   cd my-mcp-server\n   ```\n\n2. **添加工具：**\n   ```bash\n   mcp add tool data-fetcher\n   mcp add tool data-processor\n   mcp add tool report-generator\n   ```\n\n3. **定义您的工具模式并进行自动验证：**\n   ```typescript\n   \u002F\u002F tools\u002FDataFetcher.ts\n   import { MCPTool, MCPInput as AddToolInput } from \"mcp-framework\";\n   import { z } from \"zod\";\n\n   const AddToolSchema = z.object({\n     a: z.number().describe(\"要相加的第一个数字\"),\n     b: z.number().describe(\"要相加的第二个数字\"),\n   });\n\n   class AddTool extends MCPTool {\n     name = \"add\";\n     description = \"加法工具描述\";\n     schema = AddToolSchema;\n\n     async execute(input: AddToolInput\u003Cthis>) {\n       const result = input.a + input.b;\n       return `结果：${result}`;\n     }\n   }\n\n   export default AddTool;\n   ```\n\n4. **使用自动验证进行构建：**\n   ```bash\n   npm run build  # 自动验证模式并编译\n   ```\n\n5. **可选：单独运行验证：**\n   ```bash\n   mcp validate  # 独立检查所有工具\n   ```\n\n6. **测试您的服务器：**\n   ```bash\n   node dist\u002Findex.js  # 服务器会在启动时验证工具\n   ```\n\n7. **添加到 MCP 客户端**（参见下方 Claude Desktop 示例）\n\n**实用技巧：**\n- 在开发过程中使用 `defineSchema()` 以获得即时反馈\n- 构建过程会自动捕获缺失的描述\n- 服务器启动时会验证所有工具，然后才接受连接\n- 使用 TypeScript 的自动补全功能配合 `MCPInput\u003Cthis>` 以提升开发体验\n\n## 与 Claude Desktop 配合使用\n\n### 本地开发\n\n将以下配置添加到您的 Claude Desktop 配置文件中：\n\n**MacOS**：`~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n**Windows**：`%APPDATA%\u002FClaude\u002Fclaude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"${projectName}\": {\n      \"command\": \"node\",\n      \"args\":[\"\u002F绝对路径\u002Fto\u002F${projectName}\u002Fdist\u002Findex.js\"]\n    }\n  }\n}\n```\n\n### 发布后\n\n将以下配置添加到您的 Claude Desktop 配置文件中：\n\n**MacOS**：`~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n**Windows**：`%APPDATA%\u002FClaude\u002Fclaude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"${projectName}\": {\n      \"command\": \"npx\",\n      \"args\": [\"${projectName}\"]\n    }\n  }\n}\n```\n\n## 构建与测试\n\n1. 对您的工具进行更改\n2. 运行 `npm run build` 进行编译\n3. 服务器将在启动时自动加载您的工具\n\n## 环境变量\n\n该框架支持以下环境变量进行配置：\n\n| 变量              | 描述                                           | 默认值     |\n|-----------------------|-------------------------------------------------------|-------------|\n| MCP_ENABLE_FILE_LOGGING | 启用文件日志记录（true\u002Ffalse）                 | false       |\n| MCP_LOG_DIRECTORY     | 日志文件将存储的目录             | logs        |\n| MCP_DEBUG_CONSOLE     | 在控制台显示调试级别消息（true\u002Ffalse） | false       |\n\n示例用法：\n\n```bash\n# 启用文件日志记录\nMCP_ENABLE_FILE_LOGGING=true node dist\u002Findex.js\n\n# 指定自定义日志目录\nMCP_ENABLE_FILE_LOGGING=true MCP_LOG_DIRECTORY=my-logs node dist\u002Findex.js\n\n# 在控制台启用调试信息\nMCP_DEBUG_CONSOLE=true node dist\u002Findex.js\n```\n\n## 快速入门\n\n### 定义工具\n\nMCP 框架使用 Zod 模式来定义工具输入，提供类型安全、验证和自动文档：\n\n```typescript\nimport { MCPTool, MCPInput } from \"mcp-framework\";\nimport { z } from \"zod\";\n\nconst AddToolSchema = z.object({\n  a: z.number().describe(\"要相加的第一个数\"),\n  b: z.number().describe(\"要相加的第二个数\"),\n});\n\nclass AddTool extends MCPTool {\n  name = \"add\";\n  description = \"加法工具描述\";\n  schema = AddToolSchema;\n\n  async execute(input: MCPInput\u003Cthis>) {\n    const result = input.a + input.b;\n    return `结果：${result}`;\n  }\n}\n\nexport default AddTool;\n```\n\n**主要优势：**\n- ✅ **单一事实来源** - 在一处定义类型和验证规则\n- ✅ **自动类型推断** - TypeScript 类型从您的模式中推断出来\n- ✅ **丰富的验证功能** - 利用 Zod 强大的验证特性\n- ✅ **强制性描述** - 框架会强制要求提供文档说明\n- ✅ **更好的 IDE 支持** - 完整的自动补全和类型检查\n- ✅ **更整洁的代码** - 无需重复定义类型\n\n### 高级 Zod 模式特性\n\n该框架支持所有 Zod 特性：\n\n```typescript\nimport { MCPTool, MCPInput } from \"mcp-framework\";\nimport { z } from \"zod\";\n\nconst AdvancedSchema = z.object({\n  \u002F\u002F 字符串约束和格式\n  email: z.string().email().describe(\"用户电子邮件地址\"),\n  name: z.string().min(2).max(50).describe(\"用户姓名\"),\n  website: z.string().url().optional().describe(\"可选的网站 URL\"),\n  \n  \u002F\u002F 数字约束\n  age: z.number().int().positive().max(120).describe(\"用户年龄\"),\n  rating: z.number().min(1).max(5).describe(\"1 到 5 的评分\"),\n  \n  \u002F\u002F 数组和对象\n  tags: z.array(z.string()).describe(\"标签列表\"),\n  metadata: z.object({\n    priority: z.enum(['low', 'medium', 'high']).describe(\"任务优先级\"),\n    dueDate: z.string().optional().describe(\"ISO 格式的截止日期\")\n  }).describe(\"附加元数据\"),\n  \n  \u002F\u002F 默认值\n  status: z.string().default('pending').describe(\"当前状态\"),\n  \n  \u002F\u002F 联合类型和枚举\n  category: z.union([\n    z.literal('personal'),\n    z.literal('work'),\n    z.literal('other')\n  ]).describe(\"类别类型\")\n});\n\nclass AdvancedTool extends MCPTool {\n  name = \"advanced_tool\";\n  description = \"演示高级 Zod 特性的工具\";\n  schema = AdvancedSchema;\n\n  async execute(input: MCPInput\u003Cthis>) {\n    \u002F\u002F TypeScript 自动知道所有类型！\n    const { email, name, website, age, rating, tags, metadata, status, category } = input;\n    \n    console.log(input.name.toUpperCase()); \u002F\u002F ✅ TypeScript 知道这是有效的\n    console.log(input.age.toFixed(2));     \u002F\u002F ✅ 可以使用数字方法\n    console.log(input.tags.length);       \u002F\u002F ✅ 可以使用数组方法\n    console.log(input.website?.includes(\"https\")); \u002F\u002F ✅ 处理可选字段\n    \n    return `处理了用户：${name}`;\n  }\n}\n```\n\n### 自动类型推断\n\n`MCPInput\u003Cthis>` 类型会自动从您的模式中推断出正确的输入类型，从而无需手动定义类型：\n\n```typescript\nclass MyTool extends MCPTool {\n  schema = z.object({\n    name: z.string().describe(\"用户名\"),\n    age: z.number().optional().describe(\"用户年龄\"),\n    tags: z.array(z.string()).describe(\"用户标签\")\n  });\n\n  async execute(input: MCPInput\u003Cthis>) {\n    \u002F\u002F TypeScript 自动知道：\n    \u002F\u002F input.name 是 string\n    \u002F\u002F input.age 是 number | undefined  \n    \u002F\u002F input.tags 是 string[]\n    \n    console.log(input.name.toUpperCase()); \u002F\u002F ✅ TypeScript 知道这是有效的\n    console.log(input.age?.toFixed(2));    \u002F\u002F ✅ 正确处理可选字段\n    console.log(input.tags.length);       \u002F\u002F ✅ 可以使用数组方法\n  }\n}\n```\n\n再也不需要重复定义接口或泛型类型参数了！\n\n### 模式验证与描述\n\n**所有模式字段都必须有描述**。这确保了您的工具文档齐全，并在 MCP 客户端中提供更好的用户体验。\n\n框架会在多个层面验证描述：\n\n#### 1. 构建时验证（推荐）\n```bash\nnpm run build  # 在编译过程中自动验证\n```\n\n#### 2. 开发时验证\n使用 `defineSchema` 辅助函数以获得即时反馈：\n\n```typescript\nimport { defineSchema } from \"mcp-framework\";\n\n\u002F\u002F 如果缺少描述，此操作会立即抛出错误\nconst MySchema = defineSchema({\n  name: z.string(),  \u002F\u002F ❌ 错误：缺少描述\n  age: z.number().describe(\"用户年龄\")  \u002F\u002F ✅ 好的\n});\n```\n\n#### 3. 独立验证\n```bash\nmcp validate  # 检查所有工具是否具有适当的描述\n```\n\n#### 4. 运行时验证\n服务器会在启动时自动验证工具。\n\n**若要跳过验证**（不推荐）：\n```bash\n# 构建时跳过\nMCP_SKIP_TOOL_VALIDATION=true npm run build\n\n# 开发时跳过\nNODE_ENV=production npm run dev\n```\n\n### 设置服务器\n\n```typescript\nimport { MCPServer } from \"mcp-framework\";\n\nconst server = new MCPServer();\n\n\u002F\u002F 或者（互斥！）使用 SSE 传输\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      port: 8080            \u002F\u002F 可选（默认：8080）\n    }\n  }\n});\n\n\u002F\u002F 启动服务器\nawait server.start();\n```\n\n## 传输配置\n\n### stdio 传输（默认）\n\n如果未提供传输配置，将默认使用 stdio 传输：\n\n```typescript\nconst server = new MCPServer();\n\u002F\u002F 或显式指定：\nconst server = new MCPServer({\n  transport: { type: \"stdio\" }\n});\n```\n\n### SSE 传输\n\n要使用服务器发送事件（SSE）传输：\n\n```typescript\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      port: 8080,            \u002F\u002F 可选（默认：8080）\n      endpoint: \"\u002Fsse\",      \u002F\u002F 可选（默认：\"\u002Fsse\"）\n      messageEndpoint: \"\u002Fmessages\", \u002F\u002F 可选（默认：\"\u002Fmessages\"）\n      cors: {\n        allowOrigin: \"*\",    \u002F\u002F 可选（默认：\"*\"）\n        allowMethods: \"GET, POST, OPTIONS\", \u002F\u002F 可选（默认：\"GET, POST, OPTIONS\"）\n        allowHeaders: \"Content-Type, Authorization, x-api-key\", \u002F\u002F 可选（默认：\"Content-Type, Authorization, x-api-key\"）\n        exposeHeaders: \"Content-Type, Authorization, x-api-key\", \u002F\u002F 可选（默认：\"Content-Type, Authorization, x-api-key\"）\n        maxAge: \"86400\"      \u002F\u002F 可选（默认：\"86400\"）\n      }\n    }\n  }\n});\n```\n\n### HTTP 流传输\n\n要使用 HTTP 流传输：\n\n```typescript\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      port: 8080,                \u002F\u002F 可选（默认：8080）\n      endpoint: \"\u002Fmcp\",          \u002F\u002F 可选（默认：\"\u002Fmcp\"） \n      responseMode: \"batch\",     \u002F\u002F 可选（默认：\"batch\"），可为 \"batch\" 或 \"stream\"\n      batchTimeout: 30000,       \u002F\u002F 可选（默认：30000毫秒）——批量响应的超时时间\n      maxMessageSize: \"4mb\",     \u002F\u002F 可选（默认：\"4mb\"）——消息的最大大小\n      \n      \u002F\u002F 会话配置\n      session: {\n        enabled: true,           \u002F\u002F 可选（默认：true）\n        headerName: \"Mcp-Session-Id\", \u002F\u002F 可选（默认：\"Mcp-Session-Id\"）\n        allowClientTermination: true, \u002F\u002F 可选（默认：true）\n      },\n      \n      \u002F\u002F 流的可恢复性（用于处理丢失的消息）\n      resumability: {\n        enabled: false,          \u002F\u002F 可选（默认：false）\n        historyDuration: 300000, \u002F\u002F 可选（默认：300000毫秒 = 5分钟）——保留消息历史的时间长度\n      },\n      \n      \u002F\u002F CORS 配置\n      cors: {\n        allowOrigin: \"*\"         \u002F\u002F 其他 CORS 选项使用默认值\n      }\n    }\n  }\n});\n```\n\n#### 响应模式\n\nHTTP 流传输支持两种响应模式：\n\n1. **批量模式**（默认）：响应会被收集并作为单个 JSON-RPC 响应发送。这适用于典型的请求-响应模式，在大多数情况下效率更高。\n\n2. **流模式**：所有响应都会通过为每个请求打开的持久化 SSE 连接发送。这非常适合长时间运行的操作，或者当服务器需要对单个请求发送多条消息时。\n\n您可以根据具体需求配置响应模式：\n\n```typescript\n\u002F\u002F 对于批量模式（默认）：\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      responseMode: \"batch\"\n    }\n  }\n});\n\n\u002F\u002F 对于流模式：\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      responseMode: \"stream\"\n    }\n  }\n});\n```\n\n#### HTTP 流传输特性\n\n- **会话管理**：自动会话跟踪与管理\n- **流的可恢复性**：可选支持在连接中断后恢复流\n- **批量处理**：支持 JSON-RPC 批量请求\u002F响应\n- **全面的错误处理**：提供包含 JSON-RPC 错误码的详细错误响应\n\n## 身份验证\n\nMCP 框架为 SSE 端点提供了可选的身份验证功能。您可以选择 JWT、API 密钥、OAuth 2.1 身份验证，或实现您自己的自定义身份验证提供程序。\n\n### JWT 身份验证\n\n```typescript\nimport { MCPServer, JWTAuthProvider } from \"mcp-framework\";\nimport { Algorithm } from \"jsonwebtoken\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      auth: {\n        provider: new JWTAuthProvider({\n          secret: process.env.JWT_SECRET,\n          algorithms: [\"HS256\" as Algorithm], \u002F\u002F 可选（默认：[\"HS256\"]）\n          headerName: \"Authorization\"         \u002F\u002F 可选（默认：\"Authorization\"）\n        }),\n        endpoints: {\n          sse: true,      \u002F\u002F 保护 SSE 端点（默认：false）\n          messages: true  \u002F\u002F 保护消息端点（默认：true）\n        }\n      }\n    }\n  }\n});\n```\n\n客户端必须在 Authorization 头中包含有效的 JWT 令牌：\n```\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIs...\n```\n\n### API 密钥身份验证\n\n```typescript\nimport { MCPServer, APIKeyAuthProvider } from \"mcp-framework\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      auth: {\n        provider: new APIKeyAuthProvider({\n          keys: [process.env.API_KEY],\n          headerName: \"X-API-Key\" \u002F\u002F 可选（默认：\"X-API-Key\"）\n        })\n      }\n    }\n  }\n});\n```\n\n客户端必须在 X-API-Key 头中包含有效的 API 密钥：\n```\nX-API-Key: your-api-key\n```\n\n### OAuth 2.1 身份验证\n\nMCP 框架支持符合 MCP 规范（2025-06-18）的 OAuth 2.1 身份验证，包括受保护资源元数据（RFC 9728）以及使用 JWKS 的正确令牌验证。\n\nOAuth 身份验证同时适用于 SSE 和 HTTP 流传输，并支持两种验证策略：\n\n#### JWT 验证（推荐用于性能优化）\n\nJWT 验证会从您的授权服务器的 JWKS 端点获取公钥，并在本地验证令牌。由于无需为每个请求都与认证服务器进行往返通信，因此这是最快的选项。\n\n```typescript\nimport { MCPServer, OAuthAuthProvider } from \"mcp-framework\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"http-stream\",\n    options: {\n      port: 8080,\n      auth: {\n        provider: new OAuthAuthProvider({\n          authorizationServers: [\n            process.env.OAUTH_AUTHORIZATION_SERVER\n          ],\n          resource: process.env.OAUTH_RESOURCE,\n          validation: {\n            type: 'jwt',\n            jwksUri: process.env.OAUTH_JWKS_URI,\n            audience: process.env.OAUTH_AUDIENCE,\n            issuer: process.env.OAUTH_ISSUER,\n            algorithms: ['RS256', 'ES256'] \u002F\u002F 可选（默认：['RS256', 'ES256']）\n          }\n        }),\n        endpoints: {\n          initialize: true,  \u002F\u002F 保护会话初始化\n          messages: true     \u002F\u002F 保护 MCP 消息\n        }\n      }\n    }\n  }\n});\n```\n\n**环境变量：**\n```bash\nOAUTH_AUTHORIZATION_SERVER=https:\u002F\u002Fauth.example.com\nOAUTH_RESOURCE=https:\u002F\u002Fmcp.example.com\nOAUTH_JWKS_URI=https:\u002F\u002Fauth.example.com\u002F.well-known\u002Fjwks.json\nOAUTH_AUDIENCE=https:\u002F\u002Fmcp.example.com\nOAUTH_ISSUER=https:\u002F\u002Fauth.example.com\n```\n\n#### 令牌内省（推荐用于集中控制）\n\n令牌内省通过调用您的授权服务器的内省端点来验证令牌。这提供了集中控制，并在需要实时令牌撤销时非常有用。\n\n```typescript\nimport { MCPServer, OAuthAuthProvider } from \"mcp-framework\";\n\nconst server = new MCPServer({\n  transport: {\n    type: \"sse\",\n    options: {\n      auth: {\n        provider: new OAuthAuthProvider({\n          authorizationServers: [\n            process.env.OAUTH_AUTHORIZATION_SERVER\n          ],\n          resource: process.env.OAUTH_RESOURCE,\n          validation: {\n            type: 'introspection',\n            audience: process.env.OAUTH_AUDIENCE,\n            issuer: process.env.OAUTH_ISSUER,\n            introspection: {\n              endpoint: process.env.OAUTH_INTROSPECTION_ENDPOINT,\n              clientId: process.env.OAUTH_CLIENT_ID,\n              clientSecret: process.env.OAUTH_CLIENT_SECRET\n            }\n          }\n        })\n      }\n    }\n  }\n});\n```\n\n**环境变量：**\n```bash\nOAUTH_AUTHORIZATION_SERVER=https:\u002F\u002Fauth.example.com\nOAUTH_RESOURCE=https:\u002F\u002Fmcp.example.com\nOAUTH_AUDIENCE=https:\u002F\u002Fmcp.example.com\nOAUTH_ISSUER=https:\u002F\u002Fauth.example.com\nOAUTH_INTROSPECTION_ENDPOINT=https:\u002F\u002Fauth.example.com\u002Foauth\u002Fintrospect\nOAUTH_CLIENT_ID=mcp-server\nOAUTH_CLIENT_SECRET=your-client-secret\n```\n\n#### OAuth 功能\n\n- **RFC 9728 兼容性**：自动提供受保护资源元数据端点 `\u002F.well-known\u002Foauth-protected-resource`\n- **RFC 6750 WWW-Authenticate 头部**：带有质询头部的正确 OAuth 错误响应\n- **JWKS 密钥缓存**：公钥缓存时间为 15 分钟（可配置）\n- **令牌内省缓存**：内省结果缓存时间为 5 分钟（可配置）\n- **安全性**：查询字符串中的令牌将被自动拒绝\n- **声明提取**：您可以在工具处理程序中通过 `AuthResult` 访问访问令牌声明。\n\n#### 常见 OAuth 提供商\n\nOAuth 提供商可与任何符合 RFC 标准的 OAuth 2.1 授权服务器配合使用：\n\n- **Auth0**：使用您的 Auth0 租户的 JWKS URI 和颁发者\n- **Okta**：使用您的 Okta 授权服务器配置\n- **AWS Cognito**：使用您的 Cognito 用户池的 JWKS 端点\n- **Azure AD \u002F Entra ID**：使用 Microsoft Entra ID 端点\n- **自定义**：任何符合 OAuth 2.1 标准的授权服务器\n\n有关特定提供商的详细设置指南，请参阅 [OAuth 设置指南](#oauth-setup-guide)。\n\n#### 客户端使用\n\n客户端必须在 Authorization 头部中包含有效的 OAuth 访问令牌：\n\n```bash\n# 使用 OAuth 令牌发起请求\ncurl -X POST http:\u002F\u002Flocalhost:8080\u002Fmcp \\\n  -H \"Authorization: Bearer eyJhbGciOiJSUzI1NiIs...\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"jsonrpc\": \"2.0\", \"method\": \"tools\u002Flist\", \"id\": 1}'\n\n# 发现 OAuth 配置\ncurl http:\u002F\u002Flocalhost:8080\u002F.well-known\u002Foauth-protected-resource\n```\n\n#### 安全最佳实践\n\n- **生产环境中始终使用 HTTPS**：OAuth 令牌绝不应通过未加密的连接传输\n- **验证受众声明**：防止令牌在不同服务之间重复使用\n- **使用短期令牌**：降低令牌泄露后的风险\n- **启用令牌内省缓存**：在保持安全性的前提下减少授权服务器的负载\n- **监控令牌错误**：跟踪身份验证失败尝试以获取安全洞察。\n\n### 自定义身份验证\n\n您可以通过实现 `AuthProvider` 接口来实现自己的身份验证提供程序：\n\n```typescript\nimport { AuthProvider, AuthResult } from \"mcp-framework\";\nimport { IncomingMessage } from \"node:http\";\n\nclass CustomAuthProvider implements AuthProvider {\n  async authenticate(req: IncomingMessage): Promise\u003Cboolean | AuthResult> {\n    \u002F\u002F 实现您的自定义身份验证逻辑\n    return true;\n  }\n\n  getAuthError() {\n    return {\n      status: 401,\n      message: \"身份验证失败\"\n    };\n  }\n}\n```\n\n## 文档 MCP 服务器（`@mcpframework\u002Fdocs`）\n\n您可以从任何 Fumadocs 站点或任何包含 `llms.txt` 的站点启动一个 MCP 文档服务器——AI 代理将获得搜索、浏览和检索您文档的工具。\n\n### 快速入门（CLI）\n\n```bash\n# 构建一个新的文档 MCP 服务器项目\nnpx create-docs-mcp my-api-docs\ncd my-api-docs\n\n# 配置您的文档站点 URL\ncp .env.example .env\n# 编辑 .env → 设置 DOCS_BASE_URL=https:\u002F\u002Fdocs.myapi.com\n\n# 构建并运行\nnpm run build\nnpm start\n```\n\n### 快速入门（程序化）\n\n```typescript\nimport { DocsServer, FumadocsRemoteSource } from \"@mcpframework\u002Fdocs\";\n\nconst source = new FumadocsRemoteSource({\n  baseUrl: \"https:\u002F\u002Fdocs.myapi.com\",\n});\n\nconst server = new DocsServer({\n  source,\n  name: \"my-api-docs\",\n  version: \"1.0.0\",\n});\n\nserver.start();\n```\n\n### 源适配器\n\n| 适配器 | 最适合 | 搜索 |\n|---------|----------|--------|\n| `FumadocsRemoteSource` | Fumadocs 站点 | 原生 Orama 搜索，备用方案 |\n| `LlmsTxtSource` | 包含 `llms.txt` 的任何站点 | 本地文本匹配 |\n| 自定义 `DocSource` | 任何文档后端 | 您的实现 |\n\n### 内置 MCP 工具\n\n| 工具 | 描述 |\n|------|-------------|\n| `search_docs` | 按关键词或短语搜索文档 |\n| `get_page` | 获取页面的完整 Markdown 内容 |\n| `list_sections` | 浏览文档的树状结构 |\n\n### 添加到您的 MCP 客户端\n\n```bash\n# Claude 代码\nclaude mcp add my-api-docs -- node \u002Fpath\u002Fto\u002Fmy-api-docs\u002Fdist\u002Findex.js\n\n# 或者使用环境变量\nclaude mcp add my-api-docs -e DOCS_BASE_URL=https:\u002F\u002Fdocs.myapi.com -- node \u002Fpath\u002Fto\u002Fmy-api-docs\u002Fdist\u002Findex.js\n```\n\n有关 Claude Desktop \u002F Cursor 的配置和完整文档，请参阅 [@mcpframework\u002Fdocs README](.\u002Fpackages\u002Fdocs\u002FREADME.md)。\n\n## 许可证\n\nMIT","# MCP Framework 快速上手指南\n\nMCP Framework 是一个基于 TypeScript 的框架，旨在帮助开发者优雅地构建模型上下文协议（MCP）服务器。它提供了开箱即用的架构、自动目录发现机制以及强大的类型安全支持。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **Node.js**: 建议安装 LTS 版本（v18 或更高）。\n*   **npm**: 随 Node.js 一同安装。\n*   **代码编辑器**: 推荐使用 VS Code 以获得最佳的 TypeScript 智能提示体验。\n*   **前置知识**: 熟悉 TypeScript 基础及 Zod 库（用于模式验证）将有助于更快上手。\n\n> **国内加速建议**：\n> 如果 npm 安装速度较慢，建议配置国内镜像源（如淘宝镜像）：\n> ```bash\n> npm config set registry https:\u002F\u002Fregistry.npmmirror.com\n> ```\n\n## 安装步骤\n\n推荐使用官方 CLI 工具快速创建项目，它将自动处理目录结构和依赖初始化。\n\n1.  **全局安装框架**\n    ```bash\n    npm install -g mcp-framework\n    ```\n\n2.  **创建新项目**\n    运行以下命令创建一个新的 MCP 服务器项目（将 `my-mcp-server` 替换为您的项目名称）：\n    ```bash\n    mcp create my-mcp-server\n    ```\n\n3.  **进入项目目录并安装依赖**\n    ```bash\n    cd my-mcp-server\n    npm install\n    ```\n\n## 基本使用\n\n以下是创建一个简单工具（Tool）并运行服务器的完整流程。\n\n### 1. 添加一个新工具\n\n使用 CLI 自动生成工具模板：\n```bash\nmcp add tool add-numbers\n```\n这将在 `src\u002Ftools` (或 `tools`) 目录下创建 `AddNumbers.ts` 文件。\n\n### 2. 定义工具逻辑\n\n编辑生成的文件，使用 Zod 定义输入模式并实现执行逻辑。MCP Framework 强制要求所有字段必须包含 `.describe()` 描述，以确保文档完整性。\n\n```typescript\n\u002F\u002F tools\u002FAddNumbers.ts\nimport { MCPTool, MCPInput } from \"mcp-framework\";\nimport { z } from \"zod\";\n\n\u002F\u002F 定义输入模式，每个字段都必须有描述\nconst AddNumbersSchema = z.object({\n  a: z.number().describe(\"第一个相加的数字\"),\n  b: z.number().describe(\"第二个相加的数字\"),\n});\n\nclass AddNumbers extends MCPTool {\n  name = \"add_numbers\";\n  description = \"将两个数字相加并返回结果\";\n  schema = AddNumbersSchema;\n\n  async execute(input: MCPInput\u003Cthis>) {\n    const result = input.a + input.b;\n    return `计算结果：${result}`;\n  }\n}\n\nexport default AddNumbers;\n```\n\n### 3. 构建与验证\n\n运行构建命令。框架会自动编译 TypeScript 代码，并**自动验证**所有工具的 Schema 是否包含必要的字段描述。如果缺少描述，构建将失败并提示错误。\n\n```bash\nnpm run build\n```\n\n### 4. 运行服务器\n\n构建成功后，启动服务器：\n\n```bash\nnode dist\u002Findex.js\n```\n\n服务器启动时会自动扫描并加载 `tools` 目录下的所有工具。此时，您的 MCP 服务器已准备就绪，可以通过 stdio、SSE 或 HTTP Stream 与客户端（如 Claude Desktop、Cursor 等）进行通信。\n\n### 5. 集成到客户端（以 Claude Desktop 为例）\n\n若要本地测试，需修改 Claude Desktop 的配置文件。\n\n**MacOS**: `~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n**Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n添加如下配置（注意替换绝对路径）：\n\n```json\n{\n  \"mcpServers\": {\n    \"my-mcp-server\": {\n      \"command\": \"node\",\n      \"args\": [\"\u002Fabsolute\u002Fpath\u002Fto\u002Fmy-mcp-server\u002Fdist\u002Findex.js\"]\n    }\n  }\n}\n```\n\n重启 Claude Desktop 后，即可在对话框中调用您创建的 `add_numbers` 工具。","某金融科技团队正在开发一个能让 AI 助手实时查询股票行情并生成投资建议的 MCP 服务，以便集成到内部交易终端中。\n\n### 没有 mcp-framework 时\n- **架构混乱**：开发者需手动编写底层通信逻辑（如 stdio 或 SSE），导致工具、资源和提示词的代码分散，难以维护。\n- **类型安全隐患**：缺乏统一的 TypeScript 抽象层，输入参数校验依赖手写逻辑，容易因字段缺失或类型错误导致运行时崩溃。\n- **文档不同步**：工具的参数描述常与代码实现脱节，AI 模型经常因无法理解模糊的工具定义而调用失败。\n- **部署繁琐**：每次新增功能都需重复配置传输协议和认证机制，从构思到上线往往耗时数天。\n\n### 使用 mcp-framework 后\n- **自动发现架构**：利用基于目录的自动加载特性，只需将新工具文件放入指定文件夹，mcp-framework 即可自动识别并注册，无需修改主入口代码。\n- **强类型校验**：通过内置的 Zod 模式定义工具参数，mcp-framework 在构建时自动强制要求每个字段包含描述，确保类型安全且文档即时生成。\n- **智能验证机制**：执行 `mcp validate` 或在构建时自动检查，若发现字段缺少描述会立即报错，彻底杜绝了 AI 调用时的“幻觉”式失败。\n- **一键启动**：借助 CLI 命令 `mcp create` 和预置的认证模块（如 JWT\u002FAPI Key），团队能在几分钟内搭建起支持多种传输协议的生产级服务器。\n\nmcp-framework 通过标准化的架构和自动化验证，将 MCP 服务的开发周期从数天缩短至小时级，同时确保了 AI 交互的准确性与稳定性。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FQuantGeekDev_mcp-framework_6975ecf8.png","QuantGeekDev","Alex Andru","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FQuantGeekDev_ae953b3c.jpg","Dude with a pc from B4rc3l0n4 \r\n","@impulsum","Barcelona",null,"https:\u002F\u002Fgithub.com\u002FQuantGeekDev",[81,85,88],{"name":82,"color":83,"percentage":84},"TypeScript","#3178c6",97.7,{"name":86,"color":87,"percentage":32},"JavaScript","#f1e05a",{"name":89,"color":90,"percentage":91},"Shell","#89e051",0.2,909,105,"2026-04-18T09:11:07","MIT","macOS, Windows, Linux","未说明",{"notes":99,"python":100,"dependencies":101},"该工具是基于 TypeScript 的框架，需安装 Node.js 和 npm。不支持 Python 环境。支持多种传输协议（stdio, SSE, HTTP Stream）。开发时建议使用 Zod 定义 schema 并强制要求字段描述以通过验证。","不适用 (基于 Node.js\u002FTypeScript)",[64,102,103,104],"zod","typescript","node",[35,14],[107,108,109,110,111,112,113,114,103],"claude","genai","llm","llms","mcp","modelcontextprotocol","anthropic","framework","2026-03-27T02:49:30.150509","2026-04-18T22:33:44.662578",[118,123,128,133,138,143],{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},41052,"在 macOS 上启动失败，报错无法创建 logs 目录 (ENOENT: no such file or directory)","该问题已在最新版本中修复。请运行以下命令升级到最新版：\nnpm i -g mcp-framework@latest\n升级后重新尝试启动即可解决日志目录创建失败的问题。","https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F29",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},41053,"如何在 n8n 中使用 MCP Client (SSE 模式) 避免会话冲突错误？","n8n 的 MCP Client 节点在每次工作流执行时都会开启新的 SSE 会话而不正确关闭旧会话，导致会话状态冲突。解决方案有两种：\n1. 升级到框架最新版本（#161 合并后），新版本重构了 SSE 传输层，为每个连接创建隔离的 SDK Server 实例，解决了会话碰撞问题。\n2. 如果 n8n 版本支持，建议切换到 Streamable HTTP 传输模式代替 SSE。Streamable HTTP 是无状态的，按请求处理，不会产生会话冲突。","https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F90",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},41054,"运行 'mcp create' 命令时报错 'tsconfig.json not found!' 怎么办？","这是一个已修复的 bug。请完全卸载并重新安装 mcp-framework：\n1. 卸载：npm uninstall -g mcp-framework\n2. 安装：npm install -g mcp-framework\n重新安装最新版本后，该命令即可正常工作。","https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F8",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},41055,"该项目使用什么开源许可证？","该项目目前采用 MIT 许可证。维护者已正式添加 MIT License 文件，未来如有需要可能会添加更多许可证选项。","https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F88",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},41056,"MCP Server 是否支持 LLM Sampling（采样）功能？","是的，Sampling 功能已上线。现在的 `MCPTool` 基类暴露了 `samplingRequest()` 和 `samplingRequestWithTools()` 方法，工具可以直接调用这些方法来请求 LLM 进行采样操作。","https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F77",{"id":144,"question_zh":145,"answer_zh":146,"source_url":127},41057,"为什么在 n8n 中连接 MCP Server 时会频繁断开并提示 'no active SSE connection'？","这是因为 n8n 的客户端行为模式（每次执行新建连接但不复用或正确关闭旧连接）与服务器的单例 SSE 会话管理不匹配。除了升级到修复了会话隔离问题的最新版本外，也可以检查是否在使用 Dokploy 等容器化部署，确保网络配置允许长连接。最根本的解决办法是如前所述切换到无状态的 Streamable HTTP 传输协议。",[148,153,158,163,168,173,178,183,188,193,198,203,208,213,218],{"id":149,"version":150,"summary_zh":151,"released_at":152},324609,"mcp-framework-v0.2.22","## [0.2.22](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.21...mcp-framework-v0.2.22) (2026-04-05)\n\n\n### 功能特性\n\n* **auth:** 添加 SATP 代理信任验证提供者 ([57c9679](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F57c9679ac65d24b52ed96b1e9bec9544b6769a6e))\n* **auth:** 添加 SATP 代理信任验证提供者 ([cc0135b](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fcc0135bdacf619402499c714d9d03bdc12fe49fb)), 关闭 [#142](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F142)\n* 跳过已存在的仓库中的 Git 初始化，并为 `create .` 添加单元测试。([879cd8b](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F879cd8b4a0918be9b990a2d7720f86358daa9341))\n* 支持使用 `mcp create .` 在当前目录中进行脚手架生成。([1993394](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F199339437ea5dbcaba7bb3df7aa50e0563124e04))\n* 支持使用 `mcp create .` 在当前目录中进行脚手架生成。([300d89e](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F300d89e3054897db93c788c13f3a9af2e8709f72)), 关闭 [#78](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F78)\n\n\n### 错误修复\n\n* 添加 mcp-framework CLI 别名及 PATH 冲突检测。([b543447](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fb543447682e46433fa8ba8d0c86c3f97ab69dc81))\n* 添加 mcp-framework CLI 别名及 PATH 冲突检测。([#53](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F53)) ([2c5a1ca](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F2c5a1cadbf141879f5ae3b1fd1ce86f4e9441f74))\n* 在 readRequestBody 中强制限制 maxMessageSize。([7665c66](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F7665c665eb2789dde7411f816c542431d7d4e7ab))\n* 在 readRequestBody 中强制限制 maxMessageSize。([f97d2bb](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Ff97d2bb76d6359faf10cd1fc54b4911476b62524))","2026-04-16T11:52:34",{"id":154,"version":155,"summary_zh":156,"released_at":157},324610,"mcp-framework-v0.2.21","## [0.2.21](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.20...mcp-framework-v0.2.21) (2026-04-02)\n\n\n### 功能\n\n* 为 SSE 和 HTTP 流传输协议添加健康检查端点 ([8f21477](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F8f214777ea79a688add6b565853dbca6e10f51e2))\n* 为 SSE 和 HTTP 流传输协议添加健康检查端点 ([f165b99](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Ff165b99be7719047f573894cd045a7fabfcea5f7)), 关闭 [#62](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F62)","2026-04-02T01:45:03",{"id":159,"version":160,"summary_zh":161,"released_at":162},324611,"mcp-framework-v0.2.20","## [0.2.20](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.19...mcp-framework-v0.2.20) (2026-04-02)\n\n\n### 功能特性\n\n* 添加启发式支持，并将 SDK 升级至 1.29.0 ([652694d](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F652694df11aad221e32e151793d04769c47dc64d))\n* 添加 Lambda\u002F无服务器支持（handleRequest + createLambdaHandler）([d3e0459](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd3e0459f46de5d9967f97a7fa3f92ec321e1ba33))\n* 添加带有 handleRequest() 和 createLambdaHandler() 的 Lambda\u002F无服务器支持 ([bec59ab](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fbec59ab2f4157f0983d8edf95c86ed2eec235ef7))\n* 添加 MCP Apps 支持（来自工具的交互式 UI）([277b511](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F277b51143f8e5e811218d6182cae82fcaafd049e))\n* 添加 MCP Apps 支持（来自工具的交互式 UI）([571b365](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F571b36584a8a7f851a60518885ef784b098b0087))\n* 为并发的 stdio\u002FSSE\u002FHTTP 流添加多传输支持 ([#124](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F124)) ([b7da217](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fb7da217d263e7b6e36bfbb4c37495246d80fab72))\n* 为 MCP Apps 添加 React 支持 ([a385629](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa385629f7f4c625812209b7ffb5cd17a4f53baf2))\n* 为 MCP Apps 添加 React 支持 ([4ea299f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F4ea299ff71fdf9c979756ce7a95ca8b887a9a6f2))\n* 实现 MCP 2025-11-25 规范合规性（18 个任务）([91c2233](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F91c22332d1bd4e3e91d0edcacc7a614b15800f25))\n* 为并发的 stdio\u002FSSE\u002FHTTP 流添加多传输支持 ([d6353a6](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd6353a64e0f825166270d82267d00dfbb06b07e3))\n* 将 CLI 重命名为 create-docs-mcp，并发布 @mcpframework\u002Fdocs ([9ddd03f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F9ddd03f3d6b521fec8800221276ca8a532bc6698))\n\n\n### 错误修复\n\n* 为 API 密钥认证添加 Bearer 头部和查询参数回退选项 ([8002267](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F8002267822952354d674e8f4557fa5b88e21dac6))，关闭了 [#80](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F80)\n* 为没有自定义头部的 SSE 客户端提供 API 密钥认证回退选项 ([298799f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F298799f517c227de406275d56f081c6b8af4ef6e))\n* 在旧版模式可选性检查中处理 ZodNullable 和 ZodDefault 类型 ([5fcd54d](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F5fcd54d167f28f5c4438d3367b17c9e138076e75))，关闭了 [#118](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F118)\n* 改进 basePath 解析，以支持 npx 执行 ([bff2347](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fbff23471567c403ace2f09a6df4c6b71153d3001))\n* 改进 basePath 解析，以支持 npx 执行 ([6402c82](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F6402c82914260777407cdc1a2d2a5536c","2026-04-02T01:08:08",{"id":164,"version":165,"summary_zh":166,"released_at":167},324612,"mcp-framework-v0.2.19","## [0.2.19](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.18...mcp-framework-v0.2.19) (2026-04-01)\n\n\n### 功能特性\n\n* 添加 @mcp-framework\u002Fdocs 包 ([6bfa4f4](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F6bfa4f4fb69ebc13c9609b41752f4dd5da73f3d4))\n* 为文档 MCP 服务器添加 @mcp-framework\u002Fdocs 包 ([ed62bdd](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fed62bdd54f4c033adccc4ccdbf6885f68e2fd99c))\n* 添加补全和资源模板支持 ([d8bd6a9](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd8bd6a9319b36dd8f6ca1e525fae5726a27422e7))\n* 添加补全和资源模板支持 ([c42c4e2](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fc42c4e22bc51df60c10794c9c59d2108edb55ae4))\n* 为工具添加采样支持 ([3a31cef](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F3a31cef7e7d81541765a59dea736c94791e0789b))\n\n\n### 错误修复\n\n* 添加针对错误模式格式的友好错误提示，并更新 CLI 模板 ([254db89](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F254db897c36e70391e8047e7b41daf1a43c290c2))\n* 添加针对错误模式格式的友好错误提示，并将 CLI 模板更新为以 Zod 优先的方式 ([96a8c70](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F96a8c70b752bf13eebb4623ac3f86d5c05dbd20b))，关闭 [#121](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F121)\n* 从 package.json 中动态解析 CLI 和模板版本 ([fb79eb6](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Ffb79eb6a7f27492e50930ec775ba191e27fd205a))\n* 从 package.json 中动态解析 CLI 和模板版本 ([767be41](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F767be411f7d264ff6a3697f261e5ff42bbb10e5a))，关闭 [#117](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F117)\n* 改进 npx 和非标准入口点的路径解析 ([8baf8e1](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F8baf8e14dc6254dfc7c7465c47a85a200afa54d5))\n* 改进 npx 和非标准入口点的路径解析 ([ced79f1](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fced79f1430f9e53ec58adcfbc90875f740ff1761))，关闭 [#82](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F82)\n* 在加载器中支持 .ts 文件扩展名，以实现 tsx 兼容性 ([7add2f7](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F7add2f7b5df6ae932dd6125bff7e1bffd80b87d5))\n* 在加载器中支持 .ts 文件扩展名，以实现 tsx 兼容性 ([9369512](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F9369512dfae81d2351fe5ee5789b08497e30b7b9))，关闭 [#65](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissues\u002F65)\n* 在 HTTP 流传输中使用共享的 DEFAULT_CORS_CONFIG ([a2d93a0](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa2d93a07c1faadba4db683795915d52b3924f1f1))\n* 在 HTTP 流传输中使用共享的 DEFAULT_CORS_CONFIG ([3f7beaa](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F3f7beaab832079d8efcb75b4ace529bb63bbe2b3))，关闭 [#93](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fissue","2026-04-01T17:09:35",{"id":169,"version":170,"summary_zh":171,"released_at":172},324613,"mcp-framework-v0.2.18","## [0.2.18](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.17...mcp-framework-v0.2.18) (2026-02-05)\n\n\n### Bug修复\n\n* **http-stream:** 防止会话在瞬时错误时被销毁 ([b0ff78b](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fb0ff78bc6e6e66d7be1d7b6f73bca41ba1302852))\n* **http-stream:** 防止会话在瞬时错误时被销毁 ([7f1b460](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F7f1b460f73029dd51ef98809e6ce6c68d0830dd7))","2026-02-05T20:29:17",{"id":174,"version":175,"summary_zh":176,"released_at":177},324614,"mcp-framework-v0.2.17","## [0.2.17](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.16...mcp-framework-v0.2.17) (2025-11-21)\n\n\n### 功能\n\n* 添加认证上下文 ([ff8f81e](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fff8f81e34de134e7f6b8f9270f62eec687b4b61e))\n* 为认证添加请求上下文 ([182a019](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F182a01978fb4fb3e0a9435fad45379b52f6f9094))\n* 回退令牌 ([f6fcf53](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Ff6fcf53969eea6760581d6e6aebc36d5cff91c5c))","2025-11-21T14:48:15",{"id":179,"version":180,"summary_zh":181,"released_at":182},324615,"mcp-framework-v0.2.16","## [0.2.16](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.15...mcp-framework-v0.2.16) (2025-11-14)\n\n\n### 功能特性\n\n* 为 OPTIONS 请求添加 CORS 支持 ([2d7567e](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F2d7567ed1d3d6ca22f025513e114d6a75322e365))\n* 增加 OAuth 2.1 认证支持 ([45b5999](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F45b5999900b3d9b700a7cdcaf826c4aeca93cc75))\n* 添加用于 Claude.ai 集成的 OAuth 代理服务器 ([cea912a](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fcea912a7e576a6a3ef711d4f10f6bf466b34d257))\n* **auth:** 使用全面的测试增强 HttpStreamTransport 和 SSEServerTransport 的 OAuth 认证 ([7aae521](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F7aae521e5a13fc988ec04a40691ae2cefcdf4f69))\n* **auth:** 实现共享认证处理器及传输层的 OAuth 元数据初始化 ([3ac5fc7](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F3ac5fc74c7036c472e3045bd354b71237b658e7d))\n* **auth:** 集成 OAuth 认证与内省支持 ([607b83a](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F607b83a64ce5b1027437d6a2913f04f597fa5f78))\n* OAuth 2.1 认证支持与传输层优化 ([61e3aba](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F61e3aba8c8127a436638408b65b40b9f3a08581f))\n\n\n### Bug 修复\n\n* **auth:** 支持对无 aud 声明的 OAuth 提供商进行通配符受众验证 ([bdcc89a](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fbdcc89a93fead494283b76710db12f4bd696b8fd))\n* 正确的版本号 ([ed04094](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fed04094ddc4e6bfd646f53a1a40a51ace90cefd1))","2025-11-14T13:01:36",{"id":184,"version":185,"summary_zh":186,"released_at":187},324616,"mcp-framework-v0.2.15","## [0.2.15](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.14...mcp-framework-v0.2.15) (2025-06-18)\n\n\n### Bug修复\n\n* HTTP传输使用相同的工具加载（[0d0a8d8](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F0d0a8d898b03acc722d88683eee9895bfbe5b518)）\n* HTTP传输使用相同的工具加载（[7ff3c11](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F7ff3c115506394b2589a7bac2fa81e9401682f7b)）","2025-06-18T15:00:16",{"id":189,"version":190,"summary_zh":191,"released_at":192},324617,"mcp-framework-v0.2.14","## [0.2.14](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.13...mcp-framework-v0.2.14) (2025-06-16)\n\n\n### 功能特性\n\n* 在项目创建时添加 .gitignore 文件 ([f8b6ea6](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Ff8b6ea6f8ce8e51471004c05778516b71d1f0235))\n* 在项目创建时添加 .gitignore 文件 ([87ed7de](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F87ed7de1816dd8c93be7245a8ede636ee8d300c7))\n* 添加 BaseLoader 类 ([b725f84](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fb725f844b25bf9da13018c758f0efc347fe6f91b))\n* 添加许可证文件 ([53cfb2e](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F53cfb2ebe6d5120da99b906a7f91bb7f6b74b863))\n* 添加许可证文件 ([a88663a](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa88663a45f9cecd86e039d6fc2eca85035776c65))\n* 添加嵌套工具加载功能 ([5fb42e6](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F5fb42e683b74de3376f47343ca91548c8ffbe1a3))\n* 添加新的工具抽象层 ([b12fd17](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fb12fd17a3daf5bd1299c73e229240a5e614969c5))\n* 增加对嵌套自动发现的支持 ([a0c3dff](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa0c3dffb58183a71995eb739bfb5ee731a912fe3))\n* 重构 SSE 传输以支持多连接，并添加准备脚本 ([30fc864](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F30fc8643ee74457f1bfc2cabb706a05e296b832d))\n* 更新 .gitignore 文件 ([1823548](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F1823548099b75b6a0b2a6eb991134b15c0077dd6))\n* 更新 README 中的工具抽象说明 ([0c40512](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F0c40512d27ed238d563f0401886d0f21e342563a))\n\n\n### 错误修复\n\n* 并发问题 ([484e3db](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F484e3dbe029efa037193a6bc68400523a1c36c21))\n* .gitignore 缩进问题 ([4e03fa3](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F4e03fa3043ba0b6179f73a725946b6c40a2449f0))\n* .gitignore 缩进问题 ([69e7afa](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F69e7afad8b80d420fe19d56d5028548986dc0674))\n* 多客户端问题 ([effbb13](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Feffbb131ae315c97b2d96f96f945f9bd11e51cfb))\n* 多客户端问题 ([4019e11](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F4019e11d6c48153bb80838469cfc994a46862ba2))\n* 幻影 ping 问题 ([7f4b423](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F7f4b423e22fad3b1a0b39c9fade649fa45c36bbb))\n* 幻影 ping 问题 ([a0ef753](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa0ef7530dc4a9b310514d7559f0980bd4ba2f7da))\n* 递归加载问题 ([5b3208f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F5b3208f5e6471c0e937e6524d58727f870e865d8))\n* 递归加载问题 ([a34bc6a](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa34bc6a79cd8d3c920bb8ea46359dce742acb8f7))\n* 更新工具加载器路径处理 ([5151aff](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F5151aff51db516f7c3673fb7d28f3b27173cb533))\n* 更新工具加载器路径处理 ([f048ecd](https:\u002F\u002Fgithub.c","2025-06-16T20:36:03",{"id":194,"version":195,"summary_zh":196,"released_at":197},324618,"mcp-framework-v0.2.13","## [0.2.13](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.12...mcp-framework-v0.2.13) (2025-05-23)\n\n\n### Bug修复\n\n* 正确支持工具输入模式的必填\u002F可选配置（[1583603](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F1583603b2613b8c7c57ebbd52fb5c8159d0b8d13)）","2025-05-23T22:54:42",{"id":199,"version":200,"summary_zh":201,"released_at":202},324619,"mcp-framework-v0.2.12","## [0.2.12](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.11...mcp-framework-v0.2.12) (2025-05-23)\n\n\n### Features\n\n* bump mcp ts sdk version ([d9cc845](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd9cc8450d39e89f36e39e78bb4d1946cf5f858d3))\n* enhanced cursor rule with example ([d3b54d4](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd3b54d4619e669ad322484b074a82aae27d61ae9))\n* replace custom implementation with sdk delegation ([1b5b8e7](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F1b5b8e7cbe354056856a565b21b8908eb93ac2ba))","2025-05-23T16:12:51",{"id":204,"version":205,"summary_zh":206,"released_at":207},324620,"mcp-framework-v0.2.11","## [0.2.11](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.10...mcp-framework-v0.2.11) (2025-03-30)\n\n\n### Features\n\n* implement resources\u002Ftemplates\u002Flist handler ([ff73ff0](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fff73ff084860c12a0aae15757c39ab6eeef5a543))\n* implement resources\u002Ftemplates\u002Flist handler ([0dabfc0](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F0dabfc04370535ecbe9d31f4d2b54ac876032b93))","2025-03-30T19:59:19",{"id":209,"version":210,"summary_zh":211,"released_at":212},324621,"mcp-framework-v0.2.10","## [0.2.10](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.9...mcp-framework-v0.2.10) (2025-03-30)\n\n\n### Features\n\n* add optional skip install param ([d77e6e9](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd77e6e9df5a6d989dc7fbfa25b2cbe3b56e50260))\n* add optional skip install param ([318dbc7](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F318dbc798e673678c38a468e6a898e9834cdfa7d))\n* add skip example option to cli ([df733f9](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fdf733f999e9837012220a7696d993ef734eee393))\n* add skip example option to cli ([c02809f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fc02809f185270bdc462f367b3a0e52a6e4d4300d))\n\n\n### Bug Fixes\n\n* Fixes ESLint 'no-case-declarations' error in HTTP transport by adding block scope to the default switch case. ([25ed8e6](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F25ed8e6de845f72ea2967ff64b981e445ae48249))\n* make ping conform with the spec ([aa46eb8](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Faa46eb8199c95e4b1024e84d5a616e0cc420cd64))\n* **transports:** Conform SSE\u002FHTTP streams to MCP spec and improve logging ([9d9ef2a](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F9d9ef2aa2ddea52c37133d4842d95d168ea5e190))\n* **transports:** follow spec guideline ([208599d](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F208599ddaafbf58eddaf4d5d6492a26e1effbbc6))","2025-03-30T16:27:18",{"id":214,"version":215,"summary_zh":216,"released_at":217},324622,"mcp-framework-v0.2.9","## [0.2.9](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.8...mcp-framework-v0.2.9) (2025-03-29)\n\n\n### Features\n\n* add linting ([e71ebb5](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fe71ebb5d538cb03510633bac0cf41bd318a0eab9))\n* add linting ([181e634](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F181e634da0cf97f2f40ae8b7e4fd4e74935a1c3c))\n* add sse resumability ([4b47edb](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F4b47edb243286a9f32bb81655bd0b51c2c4695e2))\n* add sse resumability ([e20b7cc](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fe20b7cc887dd4b080d38e01d21ac2ef3e63843d1))\n* improve error handling for sse ([a5644af](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa5644af425563aca22fdf46ec24b1f547a5d9143))\n* improve error handling for sse ([ba1646b](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fba1646be8da98c4d86b55313c515903c692d8f9f))\n\n\n### Bug Fixes\n\n* close sse stream after post ([eef96b4](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Feef96b4c429af9c2f7083352c4bd45d645927352))\n* close sse stream after post ([d6ea60d](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd6ea60deb5283551ce9730e2d20e38ffe8f6c711))\n* detect tools capability using toolLoader ([c5d34a5](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fc5d34a5be034ee0fb22e888d7696d64ac703e727))\n* detect tools capability using toolLoader ([1e4c71f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F1e4c71f71634a72b7c146d84a21582e6e9d5fd3b))\n* enforce that initialize request cannot be part of JSON-RPC batch ([452740c](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F452740c9bdba8df014a4cd3d5149e78190c05058))\n* enforce that initialize request cannot be part of JSON-RPC batch ([6cccf54](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F6cccf54c18a6554c243d7dfdc286dcc3e92cb75f))\n* import path utilities to resolve build errors ([5a7672c](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F5a7672cca08dc21d527dc1d4b6a9cbdf809938bc))\n* import path utilities to resolve build errors ([534d0de](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F534d0de047e3d29f214b088c8fdad2d25444b344))\n* project validation not working on windows ([fc506d3](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Ffc506d3b13a7c8c25647f6d2d8b278fa25e22ea5))","2025-03-29T02:55:17",{"id":219,"version":220,"summary_zh":221,"released_at":222},324623,"mcp-framework-v0.2.8","## [0.2.8](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcompare\u002Fmcp-framework-v0.2.7...mcp-framework-v0.2.8) (2025-03-28)\n\n\n### Features\n\n* add auth ([6338d14](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F6338d14b6b8ad020ab41b2c2d3cf843d660db2fc))\n* add Base Tool ([6b51594](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F6b51594aaaedf0c13c418055d2b2039e919cc2d3))\n* add basic sse support ([e8b808f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fe8b808f1967a9255a94cb9922169724e0a0bb145))\n* add build before start. this one is for you, vibe coders ;) ([fa43fa8](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Ffa43fa81195981688adf30689d1cbd65fdb29892))\n* add cli tool ([91101ee](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F91101ee9671eb8489d7cb69d2b596d201a204cb1))\n* add cors configuration ([5d3f27f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F5d3f27f0f2ce61551b1c66dbf9d3aa7f640606ff))\n* add execa ([4d44864](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F4d44864db3abbd41cbf02da380c597e92d2de39d))\n* add execa ([d68cfb6](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd68cfb6b43034893a6de3018793164d5d334f5fe))\n* add find-up ([09c767f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F09c767fe82dbf53403543905f8e056a9e2c9a3df))\n* add find-up ([9f90df9](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F9f90df97a5cf3777a5910c0a806a6fbc70dee61e))\n* Add HTTP Stream transport with improved session handling and CORS support ([04ff8a5](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F04ff8a5453b56e912d157356bb05a8cb6c987c41))\n* add image support ([ab023ba](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fab023ba082af9d7e560a498e1e77b93e69331d74))\n* add image support ([9c8ca20](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F9c8ca201f792a2386b112e67d1e664ca78d2e2d1))\n* add index ([62873b9](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F62873b9fb67d41cff0fdca647b4d1a0ff4d35e6b))\n* add keywords to package ([95ea9a7](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F95ea9a7adb25fb5dd844a944ef1a5cc7ccfaeb25))\n* Add LICENSE ([2d3612a](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F2d3612a89dcd27b1567480378b318eeb8e838863))\n* add logging ([d637a65](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fd637a6560b17b09c5383b6b1ca7838f08c5fc780))\n* add mcp-build cli ([27cb517](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F27cb517306deaf2b34646d9b2ac617dc70c476f5))\n* add MCPServer ([807f04d](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F807f04ddbfe28598bb26c0dce640dcc0909d739a))\n* add MCPTool abstraction ([4d5fb39](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F4d5fb398efd4a253f1ea23e8307690ecb84f8009))\n* add MCPTool abstraction ([3458e78](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F3458e78233437c9afd71b9195424659e62aa08f3))\n* add prompt capabilities ([9ca6a0f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F9ca6a0fc19638c2428c060bdb3996d49c5c31e55))\n* add prompt capabilities ([019f409](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F019f40949ea66fc4d1ca1969aaa57c8943e81036))\n* add readme ([752024e](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F752024ed92213c3c27a2b9a5a702f823e835e167))\n* add README ([b0a371c](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fb0a371c1b3a6275d249fdd89e67d7d791b573601))\n* add release-please workflow ([eb6c121](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Feb6c121a1b22659747c7edaecf05d3cd39b2d92e))\n* add release-please workflow ([5a89670](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F5a89670a1f797f8d91254d0b3f9f991fdc77148a))\n* add resources support ([e8b03d4](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fe8b03d432fd09e7e25e3f272f735cebeb571a31b))\n* add sdk version logging ([8a05c48](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F8a05c48431ff01b4fd68e178a055cfec41236b21))\n* add sdk version logging ([bb716db](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fbb716dba19d75214f7f23973f526f4ab107fe187))\n* add toolLoader ([a44ffe7](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa44ffe7e7df099479ff516bc5fa0e9e2a5115bf0))\n* add typescript dependencies ([0ade3dc](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F0ade3dc3627934884b8908202fe71b06a3a1c660))\n* bump up version ([85624c6](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F85624c6bfe7dda5df0cfb6894b58bf8a6b39a99e))\n* bump version ([0d88a0f](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F0d88a0fbd6b571ff578a96c85361930616371355))\n* bump version ([e227702](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fe227702c87476bda82384c34efd871b13292b089))\n* bump version ([33b1776](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002F33b17764330126ee79bb4c9510d8f067b339fda3))\n* bump version ([a0e5a38](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fa0e5a381ecc4b9fc6dee3a35609ead7297af905a))\n* bump version ([ea3085d](https:\u002F\u002Fgithub.com\u002FQuantGeekDev\u002Fmcp-framework\u002Fcommit\u002Fea3085d1d","2025-03-28T22:49:26"]