[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-yjacquin--fast-mcp":3,"tool-yjacquin--fast-mcp":62},[4,18,26,36,46,54],{"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 真正成长为懂上",159636,2,"2026-04-17T23:33:34",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":42,"last_commit_at":43,"category_tags":44,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,45],"插件",{"id":47,"name":48,"github_repo":49,"description_zh":50,"stars":51,"difficulty_score":32,"last_commit_at":52,"category_tags":53,"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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":55,"name":56,"github_repo":57,"description_zh":58,"stars":59,"difficulty_score":32,"last_commit_at":60,"category_tags":61,"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",[45,13,15,14],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":68,"readme_en":69,"readme_zh":70,"quickstart_zh":71,"use_case_zh":72,"hero_image_url":73,"owner_login":74,"owner_name":75,"owner_avatar_url":76,"owner_bio":77,"owner_company":78,"owner_location":79,"owner_email":80,"owner_twitter":81,"owner_website":81,"owner_url":82,"languages":83,"stars":88,"forks":89,"last_commit_at":90,"license":91,"difficulty_score":32,"env_os":92,"env_gpu":93,"env_ram":93,"env_deps":94,"category_tags":102,"github_topics":103,"view_count":32,"oss_zip_url":81,"oss_zip_packed_at":81,"status":17,"created_at":108,"updated_at":109,"faqs":110,"releases":138},8728,"yjacquin\u002Ffast-mcp","fast-mcp","A Ruby Implementation of the Model Context Protocol","fast-mcp 是一款专为 Ruby 开发者打造的开源工具，旨在轻松连接 AI 大模型与 Ruby 应用程序。它实现了“模型上下文协议”（Model Context Protocol），让开发者无需处理复杂的通信协议、自定义 JSON 格式或繁琐的集成难题，即可用优雅的原生 Ruby 代码赋予 AI 调用应用功能的能力。\n\n过去，让 AI 与现有系统交互往往面临兼容性差、状态管理困难等痛点。fast-mcp 通过提供清晰的工具（Tools）和资源（Resources）API，解决了这些问题。它不仅支持 STDIO、HTTP 等多种传输方式，还能无缝集成 Rails、Sinatra 等主流框架，并内置基于 Dry-Schema 的参数验证机制，确保 AI 调用函数时的数据安全与准确。\n\n这款工具非常适合熟悉 Ruby 的后端工程师及全栈开发者使用。其独特亮点在于将复杂的 AI 交互逻辑封装为直观的 Ruby 类继承模式：开发者只需定义简单的类和参数规则，即可让 AI 安全地执行创建用户、查询数据等操作，甚至支持动态权限控制和实时数据订阅。如果你希望快速在 Ruby 项目中落地 AI 功","fast-mcp 是一款专为 Ruby 开发者打造的开源工具，旨在轻松连接 AI 大模型与 Ruby 应用程序。它实现了“模型上下文协议”（Model Context Protocol），让开发者无需处理复杂的通信协议、自定义 JSON 格式或繁琐的集成难题，即可用优雅的原生 Ruby 代码赋予 AI 调用应用功能的能力。\n\n过去，让 AI 与现有系统交互往往面临兼容性差、状态管理困难等痛点。fast-mcp 通过提供清晰的工具（Tools）和资源（Resources）API，解决了这些问题。它不仅支持 STDIO、HTTP 等多种传输方式，还能无缝集成 Rails、Sinatra 等主流框架，并内置基于 Dry-Schema 的参数验证机制，确保 AI 调用函数时的数据安全与准确。\n\n这款工具非常适合熟悉 Ruby 的后端工程师及全栈开发者使用。其独特亮点在于将复杂的 AI 交互逻辑封装为直观的 Ruby 类继承模式：开发者只需定义简单的类和参数规则，即可让 AI 安全地执行创建用户、查询数据等操作，甚至支持动态权限控制和实时数据订阅。如果你希望快速在 Ruby 项目中落地 AI 功能，而不想陷入底层协议的开发泥潭，fast-mcp 是一个高效且专业的选择。","# Fast MCP 🚀\n\n\u003Cdiv align=\"center\">\n  \u003Ch3>Connect AI models to your Ruby applications with ease\u003C\u002Fh3>\n  \u003Cp>No complex protocols, no integration headaches, no compatibility issues – just beautiful, expressive Ruby code.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fbadge.fury.io\u002Frb\u002Ffast-mcp\">\u003Cimg src=\"https:\u002F\u002Fbadge.fury.io\u002Frb\u002Ffast-mcp.svg\" alt=\"Gem Version\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fworkflows\u002FCI\u002Fbadge.svg\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fworkflows\u002FCI\u002Fbadge.svg\" alt=\"CI Status\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg\" alt=\"License: MIT\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"code_of_conduct.md\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FContributor%20Covenant-2.1-4baaaa.svg\" alt=\"Contributor Covenant\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F9HHfAtY3HF\">\u003Cimg src = \"https:\u002F\u002Fdcbadge.limes.pink\u002Fapi\u002Fserver\u002Fhttps:\u002F\u002Fdiscord.gg\u002F9HHfAtY3HF?style=flat\" alt=\"Discord invite link\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n## 🌟 Interface your Servers with LLMs in minutes\n\nAI models are powerful, but they need to interact with your applications to be truly useful. Traditional approaches mean wrestling with:\n\n- 🔄 Complex communication protocols and custom JSON formats\n- 🔌 Integration challenges with different model providers\n- 🧩 Compatibility issues between your app and AI tools\n- 🧠 Managing the state between AI interactions and your data\n\nFast MCP solves all these problems by providing a clean, Ruby-focused implementation of the [Model Context Protocol](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol), making AI integration a joy, not a chore.\n\n## ✨ Features\n\n- 🛠️ **Tools API** - Let AI models call your Ruby functions securely, with in-depth argument validation through [Dry-Schema](https:\u002F\u002Fgithub.com\u002Fdry-rb\u002Fdry-schema).\n- 📚 **Resources API** - Share data between your app and AI models\n- 🔄 **Multiple Transports** - Choose from STDIO, HTTP, or SSE based on your needs\n- 🧩 **Framework Integration** - Works seamlessly with Rails, Sinatra or any Rack app.\n- 🔒 **Authentication Support** - Secure your AI-powered endpoints with ease\n- 🚀 **Real-time Updates** - Subscribe to changes for interactive applications\n- 🎯 **Dynamic Filtering** - Control tool\u002Fresource access based on request context (permissions, API versions, etc.)\n\n## 💎 What Makes FastMCP Great\n\n```ruby\n# Define tools for AI models to use\nserver = FastMcp::Server.new(name: 'popular-users', version: '1.0.0')\n\n# Define a tool by inheriting from FastMcp::Tool\nclass CreateUserTool \u003C FastMcp::Tool\n  description \"Create a user\"\n    # These arguments will generate the needed JSON to be presented to the MCP Client\n    # And they will be validated at run time.\n    # The validation is based off Dry-Schema, with the addition of the description.\n  arguments do\n    required(:first_name).filled(:string).description(\"First name of the user\")\n    optional(:age).filled(:integer).description(\"Age of the user\")\n    required(:address).description(\"The shipping address\").hash do\n      required(:street).filled(:string).description(\"Street address\")\n      optional(:city).filled(:string).description(\"City name\")\n      optional(:zipcode).maybe(:string).description(\"Postal code\")\n    end\n  end\n\n  def call(first_name:, age: nil, address: {})\n    User.create!(first_name:, age:, address:)\n  end\nend\n\n# Register the tool with the server\nserver.register_tool(CreateUserTool)\n\n# Share data resources with AI models by inheriting from FastMcp::Resource\nclass PopularUsers \u003C FastMcp::Resource\n  uri \"myapp:\u002F\u002F\u002Fusers\u002Fpopular\"\n  resource_name \"Popular Users\"\n  mime_type \"application\u002Fjson\"\n\n  def content\n    JSON.generate(User.popular.limit(5).as_json)\n  end\nend\n\nclass User \u003C FastMcp::Resource\n  uri \"myapp:\u002F\u002F\u002Fusers\u002F{id}\" # This is a resource template\n  resource_name \"user\"\n  mime_type \"application\u002Fjson\"\n\n  def content\n    id = params[:id] # params are computed from the uri pattern\n\n    JSON.generate(User.find(id).as_json)\n  end\nend\n\n# Register the resource with the server\nserver.register_resources(PopularUsers, User)\n\n# Accessing the resource through the server\nserver.read_resource(PopularUsers.uri)\n\n# Notify the resource content has been updated to clients\nserver.notify_resource_updated(PopularUsers.variabilized_uri)\n\n# Notifiy the content of a resource from a template has been updated to clients\nserver.notify_resource_updated(User.variabilized_uri(id: 1))\n```\n\n### 🎯 Dynamic Tool Filtering\n\nControl which tools and resources are available based on request context:\n\n```ruby\n# Tag your tools for easy filtering\nclass AdminTool \u003C FastMcp::Tool\n  tags :admin, :dangerous\n  description \"Perform admin operations\"\n\n  def call\n    # Admin only functionality\n  end\nend\n\n# Filter tools based on user permissions\nserver.filter_tools do |request, tools|\n  user_role = request.params['role']\n\n  case user_role\n  when 'admin'\n    tools # Admins see all tools\n  when 'user'\n    tools.reject { |t| t.tags.include?(:admin) }\n  else\n    tools.select { |t| t.tags.include?(:public) }\n  end\nend\n```\n\n### 🚂 Fast Ruby on Rails implementation\n\n```shell\nbundle add fast-mcp\nbin\u002Frails generate fast_mcp:install\n```\n\nThis will add a configurable `fast_mcp.rb` initializer\n\n```ruby\nrequire 'fast_mcp'\n\nFastMcp.mount_in_rails(\n  Rails.application,\n  name: Rails.application.class.module_parent_name.underscore.dasherize,\n  version: '1.0.0',\n  path_prefix: '\u002Fmcp', # This is the default path prefix\n  messages_route: 'messages', # This is the default route for the messages endpoint\n  sse_route: 'sse', # This is the default route for the SSE endpoint\n  # Add allowed origins below, it defaults to Rails.application.config.hosts\n  # allowed_origins: ['localhost', '127.0.0.1', 'example.com', \u002F.*\\.example\\.com\u002F],\n  # localhost_only: true, # Set to false to allow connections from other hosts\n  # whitelist specific ips to if you want to run on localhost and allow connections from other IPs\n  # allowed_ips: ['127.0.0.1', '::1']\n  # authenticate: true,       # Uncomment to enable authentication\n  # auth_token: 'your-token' # Required if authenticate: true\n) do |server|\n  Rails.application.config.after_initialize do\n    # FastMcp will automatically discover and register:\n    # - All classes that inherit from ApplicationTool (which uses ActionTool::Base)\n    # - All classes that inherit from ApplicationResource (which uses ActionResource::Base)\n    server.register_tools(*ApplicationTool.descendants)\n    server.register_resources(*ApplicationResource.descendants)\n    # alternatively, you can register tools and resources manually:\n    # server.register_tool(MyTool)\n    # server.register_resource(MyResource)\n  end\nend\n```\n\nThe install script will also:\n\n- add app\u002Fresources folder\n- add app\u002Ftools folder\n- add app\u002Ftools\u002Fsample_tool.rb\n- add app\u002Fresources\u002Fsample_resource.rb\n- add ApplicationTool to inherit from\n- add ApplicationResource to inherit from as well\n\n#### Rails-friendly class naming conventions\n\nFor Rails applications, FastMCP provides Rails-style class names to better fit with Rails conventions:\n\n- `ActionTool::Base` - An alias for `FastMcp::Tool`\n- `ActionResource::Base` - An alias for `FastMcp::Resource`\n\nThese are automatically set up in Rails applications. You can use either naming convention in your code:\n\n```ruby\n# Using Rails-style naming:\nclass MyTool \u003C ActionTool::Base\n  description \"My awesome tool\"\n\n  arguments do\n    required(:input).filled(:string)\n  end\n\n  def call(input:)\n    # Your implementation\n  end\nend\n\n# Using standard FastMcp naming:\nclass AnotherTool \u003C FastMcp::Tool\n  # Both styles work interchangeably in Rails apps\nend\n```\n\nWhen creating new tools or resources, the generators will use the Rails naming convention by default:\n\n```ruby\n# app\u002Ftools\u002Fapplication_tool.rb\nclass ApplicationTool \u003C ActionTool::Base\n  # Base methods for all tools\nend\n\n# app\u002Fresources\u002Fapplication_resource.rb\nclass ApplicationResource \u003C ActionResource::Base\n  # Base methods for all resources\nend\n```\n\n### Easy Sinatra setup\n\nI'll let you check out the dedicated [sinatra integration docs](.\u002Fdocs\u002Fsinatra_integration.md).\n\n## 🚀 Quick Start\n\n### Create a Server with Tools and Resources and STDIO transport\n\n```ruby\nrequire 'fast_mcp'\n\n# Create an MCP server\nserver = FastMcp::Server.new(name: 'my-ai-server', version: '1.0.0')\n\n# Define a tool by inheriting from FastMcp::Tool\nclass SummarizeTool \u003C FastMcp::Tool\n  description \"Summarize a given text\"\n\n  arguments do\n    required(:text).filled(:string).description(\"Text to summarize\")\n    optional(:max_length).filled(:integer).description(\"Maximum length of summary\")\n  end\n\n  def call(text:, max_length: 100)\n    # Your summarization logic here\n    text.split('.').first(3).join('.') + '...'\n  end\nend\n\n# Register the tool with the server\nserver.register_tool(SummarizeTool)\n\n# Create a resource by inheriting from FastMcp::Resource\nclass StatisticsResource \u003C FastMcp::Resource\n  uri \"data\u002Fstatistics\"\n  resource_name \"Usage Statistics\"\n  description \"Current system statistics\"\n  mime_type \"application\u002Fjson\"\n\n  def content\n    JSON.generate({\n      users_online: 120,\n      queries_per_minute: 250,\n      popular_topics: [\"Ruby\", \"AI\", \"WebDev\"]\n    })\n  end\nend\n\n# Register the resource with the server\nserver.register_resource(StatisticsResource)\n\n# Start the server\nserver.start\n```\n\n## 🧪 Testing with the inspector\n\nMCP has developed a very [useful inspector](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Finspector).\nYou can use it to validate your implementation. I suggest you use the examples I provided with this project as an easy boilerplate.\nClone this project, then give it a go !\n\n```shell\nnpx @modelcontextprotocol\u002Finspector examples\u002Fserver_with_stdio_transport.rb\n```\n\nOr to test with an SSE transport using a rack middleware:\n\n```shell\nnpx @modelcontextprotocol\u002Finspector examples\u002Frack_middleware.rb\n```\n\nOr to test over SSE with an authenticated rack middleware:\n\n```shell\nnpx @modelcontextprotocol\u002Finspector examples\u002Fauthenticated_rack_middleware.rb\n```\n\nYou can test your custom implementation with the official MCP inspector by using:\n\n```shell\n# Test with a stdio transport:\nnpx @modelcontextprotocol\u002Finspector path\u002Fto\u002Fyour_ruby_file.rb\n\n# Test with an HTTP \u002F SSE server. In the UI select SSE and input your address.\nnpx @modelcontextprotocol\u002Finspector\n```\n\n#### Sinatra\n\n```ruby\n# app.rb\nrequire 'sinatra'\nrequire 'fast_mcp'\n\nuse FastMcp::RackMiddleware.new(name: 'my-ai-server', version: '1.0.0') do |server|\n  # Register tools and resources here\n  server.register_tool(SummarizeTool)\nend\n\nget '\u002F' do\n  'Hello World!'\nend\n```\n\n### Integrating with Claude Desktop\n\nAdd your server to your Claude Desktop configuration at:\n\n- macOS: `~\u002FLibrary\u002FApplication Support\u002FClaude\u002Fclaude_desktop_config.json`\n- Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"my-great-server\": {\n      \"command\": \"ruby\",\n      \"args\": [\"\u002FUsers\u002Fpath\u002Fto\u002Fyour\u002Fawesome\u002Ffast-mcp\u002Fserver.rb\"]\n    }\n  }\n}\n```\n\n## How to add a MCP server to Claude, Cursor, or other MCP clients?\n\nPlease refer to [configuring_mcp_clients](docs\u002Fconfiguring_mcp_clients.md)\n\n## 📊 Supported Specifications\n\n| Feature                                         | Status                                                    |\n| ----------------------------------------------- | --------------------------------------------------------- |\n| ✅ **JSON-RPC 2.0**                             | Full implementation for communication                     |\n| ✅ **Tool Definition & Calling**                | Define and call tools with rich argument types            |\n| ✅ **Resource & Resource Templates Management** | Create, read, update, and subscribe to resources          |\n| ✅ **Transport Options**                        | STDIO, HTTP, and SSE for flexible integration             |\n| ✅ **Framework Integration**                    | Rails, Sinatra, Hanami, and any Rack-compatible framework |\n| ✅ **Authentication**                           | Secure your AI endpoints with token authentication        |\n| ✅ **Schema Support**                           | Full JSON Schema for tool arguments with validation       |\n\n## 🗺️ Use Cases\n\n- 🤖 **AI-powered Applications**: Connect LLMs to your Ruby app's functionality\n- 📊 **Real-time Dashboards**: Build dashboards with live AI-generated insights\n- 🔗 **Microservice Communication**: Use MCP as a clean protocol between services\n- 📚 **Interactive Documentation**: Create AI-enhanced API documentation\n- 💬 **Chatbots and Assistants**: Build AI assistants with access to your app's data\n\n## 🔒 Security Features\n\nFast MCP includes built-in security features to protect your applications:\n\n### DNS Rebinding Protection\n\nThe HTTP\u002FSSE transport validates the Origin header on all incoming connections to prevent DNS rebinding attacks, which could allow malicious websites to interact with local MCP servers.\n\n```ruby\n# Configure allowed origins (defaults to ['localhost', '127.0.0.1'])\nFastMcp.rack_middleware(app,\n  allowed_origins: ['localhost', '127.0.0.1', 'your-domain.com', \u002F.*\\.your-domain\\.com\u002F],\n  localhost_only: false,\n  allowed_ips: ['192.168.1.1', '10.0.0.1'],\n  # other options...\n)\n```\n\n### Authentication\n\nFast MCP supports token-based authentication for all connections:\n\n```ruby\n# Enable authentication\nFastMcp.authenticated_rack_middleware(app,\n  auth_token: 'your-secret-token',\n  # other options...\n)\n```\n\n## 📖 Documentation\n\n- [🚀 Getting Started Guide](docs\u002Fgetting_started.md)\n- [🧩 Integration Guide](docs\u002Fintegration_guide.md)\n- [🛤️ Rails Integration](docs\u002Frails_integration.md)\n- [🌐 Sinatra Integration](docs\u002Fsinatra_integration.md)\n- [📚 Resources](docs\u002Fresources.md)\n- [🛠️ Tools](docs\u002Ftools.md)\n- [🔒 Security](docs\u002Fsecurity.md)\n- [🎯 Dynamic Filtering](docs\u002Ffiltering.md)\n\n## 💻 Examples\n\nCheck out the [examples directory](examples) for more detailed examples:\n\n- **🔨 Basic Examples**:\n\n  - [Simple Server](examples\u002Fserver_with_stdio_transport.rb)\n  - [Tool Examples](examples\u002Ftool_examples.rb)\n\n- **🌐 Web Integration**:\n  - [Rack Middleware](examples\u002Frack_middleware.rb)\n  - [Authenticated Endpoints](examples\u002Fauthenticated_rack_middleware.rb)\n\n## 🧪 Requirements\n\n- Ruby 3.2+\n\n## 👥 Contributing\n\nWe welcome contributions to Fast MCP! Here's how you can help:\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\nPlease read our [Contributing Guide](CONTRIBUTING.md) for more details.\n\n## 📄 License\n\nThis project is available as open source under the terms of the [MIT License](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT).\n\n## 🙏 Acknowledgments\n\n- The [Model Context Protocol](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol) team for creating the specification\n- The [Dry-Schema](https:\u002F\u002Fgithub.com\u002Fdry-rb\u002Fdry-schema) team for the argument validation.\n- All contributors to this project\n","# Fast MCP 🚀\n\n\u003Cdiv align=\"center\">\n  \u003Ch3>轻松将 AI 模型接入您的 Ruby 应用程序\u003C\u002Fh3>\n  \u003Cp>无需复杂的协议、无需繁琐的集成流程、无需担心兼容性问题——只需编写优美而富有表现力的 Ruby 代码即可。\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fbadge.fury.io\u002Frb\u002Ffast-mcp\">\u003Cimg src=\"https:\u002F\u002Fbadge.fury.io\u002Frb\u002Ffast-mcp.svg\" alt=\"Gem 版本\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fworkflows\u002FCI\u002Fbadge.svg\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fworkflows\u002FCI\u002Fbadge.svg\" alt=\"CI 状态\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg\" alt=\"许可证：MIT\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"code_of_conduct.md\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FContributor%20Covenant-2.1-4baaaa.svg\" alt=\"贡献者公约\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F9HHfAtY3HF\">\u003Cimg src = \"https:\u002F\u002Fdcbadge.limes.pink\u002Fapi\u002Fserver\u002Fhttps:\u002F\u002Fdiscord.gg\u002F9HHfAtY3HF?style=flat\" alt=\"Discord 邀请链接\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n## 🌟 在几分钟内实现服务器与大语言模型的对接\n\nAI 模型功能强大，但只有与您的应用程序无缝交互，才能真正发挥其价值。传统的集成方式往往伴随着以下挑战：\n\n- 🔄 复杂的通信协议和自定义 JSON 格式\n- 🔌 不同模型提供商之间的集成难题\n- 🧩 您的应用程序与 AI 工具之间的兼容性问题\n- 🧠 需要在 AI 交互与您的数据之间管理状态\n\nFast MCP 通过提供基于 [Model Context Protocol](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol) 的简洁、以 Ruby 为中心的实现，彻底解决了这些问题，让 AI 集成变得简单愉快，而非繁重的任务。\n\n## ✨ 核心特性\n\n- 🛠️ **工具 API** - 允许 AI 模型安全地调用您的 Ruby 函数，并通过 [Dry-Schema](https:\u002F\u002Fgithub.com\u002Fdry-rb\u002Fdry-schema) 进行深入的参数校验。\n- 📚 **资源 API** - 在您的应用与 AI 模型之间共享数据。\n- 🔄 **多种传输方式** - 根据需求选择 STDIO、HTTP 或 SSE。\n- 🧩 **框架集成** - 与 Rails、Sinatra 或任何 Rack 应用无缝兼容。\n- 🔒 **认证支持** - 轻松保护您的 AI 驱动端点。\n- 🚀 **实时更新** - 订阅变化，构建交互式应用。\n- 🎯 **动态过滤** - 根据请求上下文（权限、API 版本等）控制工具和资源的访问权限。\n\n## 💎 FastMCP 的优势\n\n```ruby\n# 定义供 AI 模型使用的工具\nserver = FastMcp::Server.new(name: 'popular-users', version: '1.0.0')\n\n# 继承 FastMcp::Tool 定义工具\nclass CreateUserTool \u003C FastMcp::Tool\n  description \"创建用户\"\n    # 这些参数会生成传递给 MCP 客户端所需的 JSON，\n    # 并在运行时进行验证。\n    # 验证基于 Dry-Schema，并附加描述信息。\n  arguments do\n    required(:first_name).filled(:string).description(\"用户的名\")\n    optional(:age).filled(:integer).description(\"用户的年龄\")\n    required(:address).description(\"收货地址\").hash do\n      required(:street).filled(:string).description(\"街道地址\")\n      optional(:city).filled(:string).description(\"城市名称\")\n      optional(:zipcode).maybe(:string).description(\"邮政编码\")\n    end\n  end\n\n  def call(first_name:, age: nil, address: {})\n    User.create!(first_name:, age:, address:)\n  end\nend\n\n# 将工具注册到服务器\nserver.register_tool(CreateUserTool)\n\n# 继承 FastMcp::Resource 与 AI 模型共享数据资源\nclass PopularUsers \u003C FastMcp::Resource\n  uri \"myapp:\u002F\u002F\u002Fusers\u002Fpopular\"\n  resource_name \"热门用户\"\n  mime_type \"application\u002Fjson\"\n\n  def content\n    JSON.generate(User.popular.limit(5).as_json)\n  end\nend\n\nclass User \u003C FastMcp::Resource\n  uri \"myapp:\u002F\u002F\u002Fusers\u002F{id}\" # 这是一个资源模板\n  resource_name \"用户\"\n  mime_type \"application\u002Fjson\"\n\n  def content\n    id = params[:id] # 参数由 URI 模式计算得出\n\n    JSON.generate(User.find(id).as_json)\n  end\nend\n\n# 将资源注册到服务器\nserver.register_resources(PopularUsers, User)\n\n# 通过服务器访问资源\nserver.read_resource(PopularUsers.uri)\n\n# 通知客户端资源内容已更新\nserver.notify_resource_updated(PopularUsers.variabilized_uri)\n\n# 通知模板化资源的内容已更新\nserver.notify_resource_updated(User.variabilized_uri(id: 1))\n```\n\n### 🎯 动态工具过滤\n\n根据请求上下文控制可用的工具和资源：\n\n```ruby\n# 为工具打标签以便于过滤\nclass AdminTool \u003C FastMcp::Tool\n  tags :admin, :dangerous\n  description \"执行管理员操作\"\n\n  def call\n    # 仅限管理员的功能\n  end\nend\n\n# 根据用户权限过滤工具\nserver.filter_tools do |request, tools|\n  user_role = request.params['role']\n\n  case user_role\n  when 'admin'\n    tools # 管理员可见所有工具\n  when 'user'\n    tools.reject { |t| t.tags.include?(:admin) }\n  else\n    tools.select { |t| t.tags.include?(:public) }\n  end\nend\n```\n\n### 🚂 快速的 Ruby on Rails 实现\n\n```shell\nbundle add fast-mcp\nbin\u002Frails generate fast_mcp:install\n```\n\n这将添加一个可配置的 `fast_mcp.rb` 初始化器。\n\n```ruby\nrequire 'fast_mcp'\n\nFastMcp.mount_in_rails(\n  Rails.application,\n  name: Rails.application.class.module_parent_name.underscore.dasherize,\n  version: '1.0.0',\n  path_prefix: '\u002Fmcp', # 这是默认的路径前缀\n  messages_route: 'messages', # 这是消息端点的默认路由\n  sse_route: 'sse', # 这是 SSE 端点的默认路由\n  # 在下方添加允许的来源，它默认为 Rails.application.config.hosts\n  # allowed_origins: ['localhost', '127.0.0.1', 'example.com', \u002F.*\\.example\\.com\u002F],\n  # localhost_only: true, # 设置为 false 以允许来自其他主机的连接\n  # 如果您想在本地运行并允许来自其他 IP 的连接，请列出特定的 IP 地址\n  # allowed_ips: ['127.0.0.1', '::1']\n  # authenticate: true,       # 取消注释以启用身份验证\n  # auth_token: 'your-token' # 如果 authenticate: true，则需要此参数\n) do |server|\n  Rails.application.config.after_initialize do\n    # FastMcp 将自动发现并注册：\n    # - 所有继承自 ApplicationTool 的类（使用 ActionTool::Base）\n    # - 所有继承自 ApplicationResource 的类（使用 ActionResource::Base）\n    server.register_tools(*ApplicationTool.descendants)\n    server.register_resources(*ApplicationResource.descendants)\n    # 或者，您也可以手动注册工具和资源：\n    # server.register_tool(MyTool)\n    # server.register_resource(MyResource)\n  end\nend\n```\n\n安装脚本还将：\n\n- 添加 `app\u002Fresources` 文件夹\n- 添加 `app\u002Ftools` 文件夹\n- 添加 `app\u002Ftools\u002Fsample_tool.rb`\n- 添加 `app\u002Fresources\u002Fsample_resource.rb`\n- 添加 `ApplicationTool` 作为基类\n- 同时添加 `ApplicationResource` 作为基类\n\n#### 适合 Rails 的类命名规范\n\n对于 Rails 应用程序，FastMCP 提供了符合 Rails 规范的类名：\n\n- `ActionTool::Base` - 是 `FastMcp::Tool` 的别名\n- `ActionResource::Base` - 是 `FastMcp::Resource` 的别名\n\n这些会在 Rails 应用程序中自动设置。您可以在代码中使用任一种命名方式：\n\n```ruby\n# 使用 Rails 风格的命名：\nclass MyTool \u003C ActionTool::Base\n  description \"我的超棒工具\"\n\n  arguments do\n    required(:input).filled(:string)\n  end\n\n  def call(input:)\n    # 您的实现\n  end\nend\n\n# 使用标准的 FastMcp 命名：\nclass AnotherTool \u003C FastMcp::Tool\n  # 在 Rails 应用程序中，这两种风格可以互换使用\nend\n```\n\n当创建新的工具或资源时，生成器会默认使用 Rails 的命名规范：\n\n```ruby\n# app\u002Ftools\u002Fapplication_tool.rb\nclass ApplicationTool \u003C ActionTool::Base\n  # 所有工具的基础方法\nend\n\n# app\u002Fresources\u002Fapplication_resource.rb\nclass ApplicationResource \u003C ActionResource::Base\n  # 所有资源的基础方法\nend\n```\n\n### 简单的 Sinatra 设置\n\n请参阅专门的 [Sinatra 集成文档](.\u002Fdocs\u002Fsinatra_integration.md)。\n\n## 🚀 快速入门\n\n### 创建带有工具和资源以及 STDIO 传输的服务器\n\n```ruby\nrequire 'fast_mcp'\n\n# 创建一个 MCP 服务器\nserver = FastMcp::Server.new(name: 'my-ai-server', version: '1.0.0')\n\n# 定义一个工具，继承自 FastMcp::Tool\nclass SummarizeTool \u003C FastMcp::Tool\n  description \"总结给定的文本\"\n\n  arguments do\n    required(:text).filled(:string).description(\"要总结的文本\")\n    optional(:max_length).filled(:integer).description(\"摘要的最大长度\")\n  end\n\n  def call(text:, max_length: 100)\n    # 您的总结逻辑在这里\n    text.split('.').first(3).join('.') + '...'\n  end\nend\n\n# 将工具注册到服务器\nserver.register_tool(SummarizeTool)\n\n# 创建一个资源，继承自 FastMcp::Resource\nclass StatisticsResource \u003C FastMcp::Resource\n  uri \"data\u002Fstatistics\"\n  resource_name \"使用统计\"\n  description \"当前系统统计信息\"\n  mime_type \"application\u002Fjson\"\n\n  def content\n    JSON.generate({\n      users_online: 120,\n      queries_per_minute: 250,\n      popular_topics: [\"Ruby\", \"AI\", \"WebDev\"]\n    })\n  end\nend\n\n# 将资源注册到服务器\nserver.register_resource(StatisticsResource)\n\n# 启动服务器\nserver.start\n```\n\n## 🧪 使用检查器进行测试\n\nMCP 开发了一个非常 [有用的检查器](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Finspector)。您可以使用它来验证您的实现。我建议您使用随本项目提供的示例作为简单的样板。克隆该项目，然后开始尝试！\n\n```shell\nnpx @modelcontextprotocol\u002Finspector examples\u002Fserver_with_stdio_transport.rb\n```\n\n或者使用 Rack 中间件通过 SSE 传输进行测试：\n\n```shell\nnpx @modelcontextprotocol\u002Finspector examples\u002Frack_middleware.rb\n```\n\n或者使用经过身份验证的 Rack 中间件通过 SSE 进行测试：\n\n```shell\nnpx @modelcontextprotocol\u002Finspector examples\u002Fauthenticated_rack_middleware.rb\n```\n\n您可以通过使用官方 MCP 检查器来测试您的自定义实现：\n\n```shell\n# 使用 stdio 传输进行测试：\nnpx @modelcontextprotocol\u002Finspector path\u002Fto\u002Fyour_ruby_file.rb\n\n# 使用 HTTP \u002F SSE 服务器进行测试。在 UI 中选择 SSE 并输入您的地址。\nnpx @modelcontextprotocol\u002Finspector\n```\n\n#### Sinatra\n\n```ruby\n# app.rb\nrequire 'sinatra'\nrequire 'fast_mcp'\n\nuse FastMcp::RackMiddleware.new(name: 'my-ai-server', version: '1.0.0') do |server|\n  # 在这里注册工具和资源\n  server.register_tool(SummarizeTool)\nend\n\nget '\u002F' do\n  'Hello World!'\nend\n```\n\n### 与 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```json\n{\n  \"mcpServers\": {\n    \"my-great-server\": {\n      \"command\": \"ruby\",\n      \"args\": [\"\u002FUsers\u002Fpath\u002Fto\u002Fyour\u002Fawesome\u002Ffast-mcp\u002Fserver.rb\"]\n    }\n  }\n}\n```\n\n## 如何将 MCP 服务器添加到 Claude、Cursor 或其他 MCP 客户端？\n\n请参阅 [configuring_mcp_clients](docs\u002Fconfiguring_mcp_clients.md)。\n\n## 📊 支持的规范\n\n| 功能                                         | 状态                                                    |\n| ----------------------------------------------- | --------------------------------------------------------- |\n| ✅ **JSON-RPC 2.0**                             | 完整实现用于通信                     |\n| ✅ **工具定义与调用**                | 定义并调用具有丰富参数类型的工具            |\n| ✅ **资源及资源模板管理** | 创建、读取、更新和订阅资源          |\n| ✅ **传输选项**                        | STDIO、HTTP 和 SSE，支持灵活集成             |\n| ✅ **框架集成**                    | Rails、Sinatra、Hanami 以及任何兼容 Rack 的框架 |\n| ✅ **认证**                           | 使用令牌认证保护您的 AI 端点        |\n| ✅ **模式支持**                           | 完整的 JSON Schema，用于工具参数验证       |\n\n## 🗺️ 使用场景\n\n- 🤖 **AI 驱动的应用程序**: 将 LLM 连接到您的 Ruby 应用程序功能\n- 📊 **实时仪表盘**: 构建带有实时 AI 生成洞察的仪表盘\n- 🔗 **微服务通信**: 使用 MCP 作为服务之间的清晰协议\n- 📚 **交互式文档**: 创建 AI 增强的 API 文档\n- 💬 **聊天机器人和助手**: 构建可访问您应用数据的 AI 助手\n\n## 🔒 安全特性\n\nFast MCP 包含内置的安全特性，以保护您的应用程序：\n\n### DNS 重绑定防护\n\nHTTP\u002FSSE 传输会验证所有传入连接的 Origin 头，以防止 DNS 重绑定攻击。这种攻击可能允许恶意网站与本地 MCP 服务器进行交互。\n\n```ruby\n# 配置允许的来源（默认为 ['localhost', '127.0.0.1']）\nFastMcp.rack_middleware(app,\n  allowed_origins: ['localhost', '127.0.0.1', 'your-domain.com', \u002F.*\\.your-domain\\.com\u002F],\n  localhost_only: false,\n  allowed_ips: ['192.168.1.1', '10.0.0.1'],\n  # 其他选项...\n)\n```\n\n### 认证\n\nFast MCP 支持所有连接的基于令牌的认证：\n\n```ruby\n# 启用认证\nFastMcp.authenticated_rack_middleware(app,\n  auth_token: 'your-secret-token',\n  # 其他选项...\n)\n```\n\n## 📖 文档\n\n- [🚀 入门指南](docs\u002Fgetting_started.md)\n- [🧩 集成指南](docs\u002Fintegration_guide.md)\n- [🛤️ Rails 集成](docs\u002Frails_integration.md)\n- [🌐 Sinatra 集成](docs\u002Fsinatra_integration.md)\n- [📚 资源](docs\u002Fresources.md)\n- [🛠️ 工具](docs\u002Ftools.md)\n- [🔒 安全](docs\u002Fsecurity.md)\n- [🎯 动态过滤](docs\u002Ffiltering.md)\n\n## 💻 示例\n\n请查看 [examples 目录](examples)，获取更多详细示例：\n\n- **🔨 基本示例**:\n\n  - [简单服务器](examples\u002Fserver_with_stdio_transport.rb)\n  - [工具示例](examples\u002Ftool_examples.rb)\n\n- **🌐 Web 集成**:\n  - [Rack 中间件](examples\u002Frack_middleware.rb)\n  - [认证端点](examples\u002Fauthenticated_rack_middleware.rb)\n\n## 🧪 要求\n\n- Ruby 3.2+\n\n## 👥 贡献\n\n我们欢迎对 Fast MCP 的贡献！以下是您可以帮助的方式：\n\n1. 分支仓库\n2. 创建您的功能分支 (`git checkout -b my-new-feature`)\n3. 提交更改 (`git commit -am '添加一些功能'`)\n4. 推送到分支 (`git push origin my-new-feature`)\n5. 创建新的 Pull Request\n\n请阅读我们的 [贡献指南](CONTRIBUTING.md)，以获取更多详细信息。\n\n## 📄 许可证\n\n本项目以开源形式提供，遵循 [MIT 许可证](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT) 的条款。\n\n## 🙏 致谢\n\n- [Model Context Protocol](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol) 团队，感谢他们创建了该规范\n- [Dry-Schema](https:\u002F\u002Fgithub.com\u002Fdry-rb\u002Fdry-schema) 团队，感谢他们提供的参数验证。\n- 本项目的全体贡献者","# Fast MCP 快速上手指南\n\nFast MCP 是一个专为 Ruby 设计的 Model Context Protocol (MCP) 实现，旨在让 AI 模型轻松与你的 Ruby 应用（如 Rails、Sinatra）交互。它屏蔽了复杂的协议细节，让你能用优雅的 Ruby 代码定义工具和数据资源。\n\n## 环境准备\n\n*   **系统要求**: macOS, Linux 或 Windows (需安装 Ruby 环境)\n*   **Ruby 版本**: 建议 Ruby 3.0+\n*   **前置依赖**:\n    *   Bundler (Ruby 包管理工具)\n    *   (可选) Node.js & npm：用于运行官方 MCP Inspector 进行测试调试\n\n## 安装步骤\n\n### 1. 在现有项目中安装\n\n在你的 Ruby 项目根目录下运行：\n\n```shell\nbundle add fast-mcp\n```\n\n### 2. Rails 项目专用安装\n\n如果是 Rails 项目，安装后请运行生成器以自动配置初始化文件和目录结构：\n\n```shell\nbin\u002Frails generate fast_mcp:install\n```\n\n该命令会自动创建 `app\u002Ftools` 和 `app\u002Fresources` 目录，并生成基类 `ApplicationTool` 和 `ApplicationResource`。\n\n## 基本使用\n\n以下是一个独立运行的最小示例，展示如何创建一个包含“工具”和“资源”的 MCP 服务器，并通过 STDIO 启动。\n\n### 1. 创建服务器文件\n\n新建一个文件 `server.rb`，写入以下代码：\n\n```ruby\nrequire 'fast_mcp'\n\n# 1. 创建 MCP 服务器实例\nserver = FastMcp::Server.new(name: 'my-ai-server', version: '1.0.0')\n\n# 2. 定义一个工具 (Tool) - 供 AI 调用的函数\nclass SummarizeTool \u003C FastMcp::Tool\n  description \"Summarize a given text\"\n\n  # 定义参数验证 (基于 Dry-Schema)\n  arguments do\n    required(:text).filled(:string).description(\"Text to summarize\")\n    optional(:max_length).filled(:integer).description(\"Maximum length of summary\")\n  end\n\n  def call(text:, max_length: 100)\n    # 简单的模拟逻辑：取前三句话\n    text.split('.').first(3).join('.') + '...'\n  end\nend\n\n# 注册工具\nserver.register_tool(SummarizeTool)\n\n# 3. 定义一个资源 (Resource) - 供 AI 读取的数据\nclass StatisticsResource \u003C FastMcp::Resource\n  uri \"data\u002Fstatistics\"\n  resource_name \"Usage Statistics\"\n  description \"Current system statistics\"\n  mime_type \"application\u002Fjson\"\n\n  def content\n    JSON.generate({\n      users_online: 120,\n      queries_per_minute: 250,\n      popular_topics: [\"Ruby\", \"AI\", \"WebDev\"]\n    })\n  end\nend\n\n# 注册资源\nserver.register_resource(StatisticsResource)\n\n# 4. 启动服务器 (默认使用 STDIO 传输)\nserver.start\n```\n\n### 2. 运行与测试\n\n**方式 A：直接在终端运行 (STDIO 模式)**\n此模式通常由客户端（如 Claude Desktop）直接调用，手动测试时可输入 JSON-RPC 请求。\n\n```shell\nruby server.rb\n```\n\n**方式 B：使用官方 Inspector 调试 (推荐)**\n如果你安装了 Node.js，可以使用官方提供的可视化工具来测试你的服务器实现：\n\n```shell\nnpx @modelcontextprotocol\u002Finspector server.rb\n```\n\n### 3. 集成到 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-great-server\": {\n      \"command\": \"ruby\",\n      \"args\": [\"\u002F绝对路径\u002F到\u002F你的\u002Fserver.rb\"]\n    }\n  }\n}\n```\n*(注意：请将 `\u002F绝对路径\u002F到\u002F你的\u002Fserver.rb` 替换为你实际的 `server.rb` 文件路径)*","某电商团队正在为其 Ruby on Rails 后台构建一个智能客服助手，需要让大语言模型（LLM）能够安全地查询用户订单状态并执行退款操作。\n\n### 没有 fast-mcp 时\n- **协议对接繁琐**：开发人员需手动编写复杂的 JSON-RPC 解析代码来处理模型请求，极易因格式错误导致通信失败。\n- **参数验证脆弱**：缺乏统一的校验机制，模型传入的非法参数（如负数金额）直接穿透到业务层，引发运行时异常。\n- **资源暴露困难**：想让模型读取实时库存数据，必须额外开发独立的 HTTP API 接口并处理鉴权，开发周期长。\n- **状态管理混乱**：在多轮对话中维持上下文状态与数据库事务的一致性极其困难，常出现数据不同步问题。\n\n### 使用 fast-mcp 后\n- **原生 Ruby 集成**：只需继承 `FastMcp::Tool` 类并用简洁的 DSL 定义工具，fast-mcp 自动处理底层协议转换与 JSON 序列化。\n- **强类型参数校验**：利用内置的 Dry-Schema 支持，在定义阶段即可声明参数类型与必填项，自动拦截非法输入保障安全。\n- **资源一键共享**：通过继承 `FastMcp::Resource` 并将 URI 映射到 ActiveRecord 模型，模型即可直接按需读取最新的订单或库存数据。\n- **框架无缝协作**：fast-mcp 完美融入 Rails 生态，直接复用现有的认证中间件与事务机制，确保 AI 操作与业务逻辑高度一致。\n\nfast-mcp 将原本耗时数天的 AI 集成工作缩减为分钟级的代码编写，让 Ruby 开发者能专注于业务逻辑而非协议细节。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyjacquin_fast-mcp_386ecac3.png","yjacquin","Yorick Jacquin","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fyjacquin_3c8657fc.jpg","Rails | AI | Tech Lead @wax-app","@wax-app","Paris, France","yorickjacquin@gmail.com",null,"https:\u002F\u002Fgithub.com\u002Fyjacquin",[84],{"name":85,"color":86,"percentage":87},"Ruby","#701516",100,1166,105,"2026-04-16T15:10:41","MIT","Linux, macOS, Windows","未说明",{"notes":95,"python":96,"dependencies":97},"这是一个 Ruby 库而非 Python 工具，因此不需要 Python 环境或 GPU。主要运行需求是安装 Ruby 和 Bundler。支持通过 STDIO、HTTP 或 SSE 传输协议运行。可与 Rails、Sinatra 或任何 Rack 兼容的框架集成。测试时需安装 Node.js 以使用 @modelcontextprotocol\u002Finspector。","不适用 (基于 Ruby)",[98,99,100,101],"dry-schema","rails (可选)","sinatra (可选)","rack",[13,15,35,14],[104,105,106,101,107],"ai","llm","mcp","ruby","2026-03-27T02:49:30.150509","2026-04-18T09:20:47.831194",[111,116,121,126,130,134],{"id":112,"question_zh":113,"answer_zh":114,"source_url":115},39110,"当工具类定义在 Ruby 模块（Module）下时，为什么会出现名称无效的错误？","默认情况下，工具名称会包含模块路径（例如 `MyModule::PingPingTool`），这不符合 MCP 协议要求的命名格式（仅允许字母、数字、下划线和连字符）。\n\n解决方案有两种：\n1. **手动指定名称**：在工具类中显式调用 `tool_name` 方法设置合法名称。\n   ```ruby\n   module MyModule\n     class PingPingTool \u003C FastMcp::Tool\n       description \"a test tool\"\n       tool_name \"ping_ping\" # 手动设置合法名称\n       def call\n         \"pong pong\"\n       end\n     end\n   end\n   ```\n2. **升级版本**：维护者已合并相关 PR，新版本将默认自动清理工具名称以符合规范。","https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fissues\u002F98",{"id":117,"question_zh":118,"answer_zh":119,"source_url":120},39111,"如何在 Rails 应用中正确配置和挂载 FastMCP？","需要在 Rails 初始化器中调用 `FastMcp.mount_in_rails` 并配置路由和前缀。以下是一个完整的配置示例：\n\n```ruby\n# config\u002Finitializers\u002Ffast_mcp.rb\nFastMcp.mount_in_rails(\n  Rails.application,\n  name: Rails.application.class.module_parent_name.underscore.dasherize,\n  version: '1.0.0',\n  path_prefix: '\u002Fmcp',\n  messages_route: 'messages',\n  sse_route: 'sse',\n  allowed_origins: ['localhost', '127.0.0.1'],\n  debug: true,\n  authenticate: false\n) do |server|\n  server.register_resource(ProjectResource)\n  server.register_resource(SampleResource)\nend\n```\n确保资源类正确定义了 `uri` 和 `content` 方法，并且请求的 JSON-RPC method 字段与资源的 URI 路径匹配。","https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fissues\u002F43",{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},39112,"是否支持不带 OAuth 的简单头部认证（Header-based Auth）？","是的，您可以优先使用基于头部的认证，而不必等待完整的 OAuth 实现。维护者建议可以将 OAuth 作为后续增强功能发布，而首版 StreamableHTTP 传输层可以先包含基础的头部认证支持。这对于急需集成 Microsoft Copilot Studio（不再支持 SSE）的用户来说是一个可行的快速方案。您可以直接在分支上测试仅包含头部认证的功能。","https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fissues\u002F119",{"id":127,"question_zh":128,"answer_zh":129,"source_url":125},39113,"如何实现新的 StreamableHTTP 传输层以替代旧的 HTTP+SSE？","StreamableHTTP 传输层已在开发分支（如 `mcp-2025-06-18`）中实现，主要特性包括：\n1. **单一端点**：支持 POST（发送请求）和 GET（初始化 SSE 流）。\n2. **会话管理**：生成加密安全的会话 ID 并支持连接恢复。\n3. **安全性**：包含 Origin 头验证和本地绑定保护。\n4. **兼容性**：暂时保留对旧版 HTTP+SSE 的兼容，但会添加弃用警告。\n\n用户可以通过拉取相关 PR 或在特定分支上部署来测试此功能。注意在迁移时需检查日志以确认工具注册正常。",{"id":131,"question_zh":132,"answer_zh":133,"source_url":120},39114,"遇到 \"Endpoint not found\" 或 \"Method not found\" 错误该如何排查？","这类错误通常由以下原因引起：\n1. **路由配置错误**：检查 `config\u002Finitializers\u002Ffast_mcp.rb` 中的 `path_prefix` 和 `messages_route` 是否与请求 URL 一致。\n2. **资源未注册**：确认在初始化块中调用了 `server.register_resource` 或 `server.register_tools`。\n3. **方法名不匹配**：JSON-RPC 请求中的 `method` 字段必须严格匹配资源定义的 URI 路径（例如 `projects\u002Fpostcode\u002Fcontent`）。\n4. **Origin 验证失败**：如果启用了安全验证，确保请求头中的 `Origin` 在 `allowed_origins` 列表中。\n\n建议开启 `debug: true` 查看服务器日志，确认请求是否到达以及具体的子路径解析结果。",{"id":135,"question_zh":136,"answer_zh":137,"source_url":125},39115,"为什么在切换分支后 VSCode 或插件中显示的工具数量为 0？","这通常发生在使用了实验性分支（如 `mcp-2025-06-18`）时，可能是因为新传输层的工具注册逻辑尚未完全稳定或与当前配置不兼容。\n\n排查步骤：\n1. 检查服务器启动日志，确认是否有 \"Received request: tools\u002Flist\" 的记录。\n2. 对比主分支（main）和特性分支的配置差异，特别是传输层设置。\n3. 尝试在特性分支中显式重新注册所有工具。\n4. 如果问题持续，建议回退到主分支或使用已标记为稳定的版本，直到该特性的修复合入主线。",[139,144,149,154,159,164,169,174,179,184],{"id":140,"version":141,"summary_zh":142,"released_at":143},315051,"v1.5.0","### 新增\n- 处理过滤工具和资源 [#85 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F85)\n- 支持资源模板 🥳 非常感谢 @danielcooper 的贡献 [#84 由 @danielcooper 和 @yjacquin 共同撰写](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F84)\n- 在调用工具前对请求进行授权的可能性 [#79 @EuanEdgar](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F79)\n- 在工具调用中读取请求头的可能性 [#78 @EuanEdgar](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F78)\n### 变更\n- 升级依赖项 [#86 @aothelal](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F86)\n- ⚠️ 资源现在是无状态的，这意味着内存中的资源将不再可用，它们需要外部数据源，例如数据库、文件等来进行读写。这是为了对资源类进行重构，以配合 [资源模板 PR](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F84) 所需。\n### 修复\n- 停止将日志级别覆盖为 info [#91 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F91)\n- 正确处理来自客户端的 ping 请求响应 [#89 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F89)\n- 为 RackTransport 的 sse_clients 添加线程安全性 [#82 @Kevin-K](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F82)\n\n## 变更内容\n* @andyw8 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F76 中添加了 Zed 的配置文档\n* ✨ @EuanEdgar 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F78 中向工具公开了请求头\n* 修复：未定义的局部变量或方法 \"headers\" @k0va1 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F87 中完成\n* @aothelal 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F86 中升级了依赖项\n* @Kevin-K 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F82 中为 RackTransport 的 sse_clients 添加了线程安全性\n* ✨ @EuanEdgar 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F79 中实现了在调用工具前对请求进行授权的功能\n* @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F84 中添加了资源模板\n* ✨ @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F85 中为工具和资源添加了过滤功能\n* @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F89 中正确处理了 ping 请求的响应\n* @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F91 中停止了在服务器初始化时覆盖日志级别\n* @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F92 中发布了 v1.5.0 版本\n\n## 新贡献者\n* @andyw8 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F76 中做出了首次贡献\n* @EuanEdgar 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F78 中做出了首次贡献\n* @k0va1 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F87 中做出了首次贡献\n* @aothelal 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F86 中做出了首次贡献\n* @Kevin-K 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F82 中做出了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv1.4.0...v1.5.0","2025-06-01T17:38:09",{"id":145,"version":146,"summary_zh":147,"released_at":148},315052,"v1.4.0","### 新增\n- 工具调用的条件隐藏属性 (#70) [#70 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F70)\n- 向工具调用结果添加元数据 (#69) [#69 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F69)\n- 在 README.md 中添加官方 Discord 服务器链接\n\n## 变更内容\n* @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F69 中为工具调用结果添加了元数据\n* @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F70 中支持添加条件隐藏属性\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv1.3.2...v1.4.0","2025-05-10T15:21:05",{"id":150,"version":151,"summary_zh":152,"released_at":153},315053,"v1.3.2","### 变更\n- 日志默认设置为更简洁 [#64 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F64)\n### 修复\n- 修复字符串实例调用未定义方法 `call` 的错误日志 [#61 @radwo](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F61)\n\n## 变更内容\n* :bug: 由 @radwo 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F61 中将空字符串改为空数组\n* 🤫 由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F64 中使日志输出更简洁\n\n## 新贡献者\n* @radwo 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F61 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv1.3.1...v1.3.2","2025-05-09T08:37:38",{"id":155,"version":156,"summary_zh":157,"released_at":158},315054,"v1.3.1","### 修复\n- 允许 IPv4 映射到 IPv6 (#56) [#56 @josevalim](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F56)\n- 向数组中添加元素 (#55) [#55 @josevalim](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F56)\n- Ping 是一个常规的消息事件 (#54) [#56 @josevalim](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F56)\n\n## 变更内容\n* Ping 是一个常规的消息事件，由 @josevalim 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F54 中实现。\n* 向数组中添加元素，由 @josevalim 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F55 中实现。\n* 允许 IPv4 映射到 IPv6，由 @josevalim 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F56 中实现。\n* 发布 v1.3.1 版本，由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F57 中完成。\n\n## 新贡献者\n* @josevalim 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F54 中完成了首次贡献。\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv1.3.0...v1.3.1","2025-04-30T22:25:54",{"id":160,"version":161,"summary_zh":162,"released_at":163},315055,"v1.3.0","### 新增\n- 添加了从查询参数到消息端点的自动转发功能 [@yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcommit\u002F011d968ac982d0b0084f7753dcac5789f66339ee)\n\n### 修复\n- 显式声明 rack 为依赖项 [#49 @subelsky](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F49)\n- 修复通知\u002F初始化响应问题 [#51 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F51)\n\n## 变更内容\n* 🔧 由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F51 中修复了通知\u002F初始化响应问题\n* 由 @subelsky 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F49 中将 rack 显式声明为依赖项，因为 RackTransport 需要它\n\n## 新贡献者\n* @subelsky 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F49 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv1.2.0...v1.3.0","2025-04-27T23:05:46",{"id":165,"version":166,"summary_zh":167,"released_at":168},315056,"v1.2.0","### 新增\n- 安全增强：Bing 默认仅绑定到本地回环地址 [#44 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F44)\n- 防止 AuthenticatedRackMiddleware 阻塞其他 Rails 路由 [#35 @JulianPasquale](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F35)\n- 停止在 30 次心跳后强制重新连接 [#42 @zoedsoupe](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F42)\n\n## 变更内容\n* 🔌 不再强制在 30 次心跳后重新连接，由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F42 中实现\n* 🛡️ 安全性：默认阻止来自本地回环以外的连接，由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F44 中实现\n* 添加针对 Rails 环境的检查，以确保仅绑定到本地回环，由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F45 中实现\n* 修复已认证的 Rack 中间件，由 @JulianPasquale 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F35 中实现\n\n## 新贡献者\n* @JulianPasquale 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F35 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv1.1.0...v1.2.0","2025-04-21T17:24:05",{"id":170,"version":171,"summary_zh":172,"released_at":173},315050,"v1.6.0","### 新增\n\n- 工具注解支持，用于提供关于工具行为的提示（如 readOnlyHint、destructiveHint 等）[#96 @pauloarruda](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F96)\n- 在 README 中添加 GitHub Discussions 链接 [#139 @jeznicholson](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F139)\n- 配置 GitHub Sponsors 资助 [#3d5a7e5 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcommit\u002F3d5a7e5)\n- 服务器钩子 `on_error_result`，用于处理工具执行错误 [#129 @yannickutard](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F129)\n- 支持 rack_middleware 中的 transport 选项 [#149 @josevalim](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F149)\n\n### 修复\n\n- 工具名称验证及对无效名称的覆盖 [#100 @abdelrahmanothman](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F100)\n- 修正 sinatra_integration.md 中的拼写错误 [#131 @ilyakamenko](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F131) 和 [#102 @anton](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F102)\n- 在生成的初始化器模板中添加尾随逗号，以符合更好的 Ruby 风格 [#123 @zachhaitz](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F123)\n- 修复 params hash 中缺失的逗号 [#121 @FanaHOVA](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F121)\n- 解决 RuboCop 的代码风格问题 [fa6af0b @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcommit\u002Ffa6af0b)\n\n### 变更\n\n- 更新 GitHub Actions 的依赖：checkout v4→v5，download-artifact v4→v5 [#141 #142 @dependabot](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F141)\n- 放宽 Rack 版本要求，以提高兼容性（>= 2.0，\u003C 4.0）[#133 @eproulx](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F133)\n- 仅在必要时加载生成器，以提升性能 [#153 @josevalim](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F153)\n- 移除模式编译器，改用 Dry 内置功能 [#152 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F152)，感谢 @redox 的帮助！\n\n## 变更内容\n* 当工具名称无效时进行覆盖，由 @aothelal 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F100 中实现\n* 修复：sinatra_integration.md 中的拼写错误，由 @friendlyantz 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F102 中修复\n* 添加工具注解支持，由 @parruda 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F96 中实现\n* 修复 sinatra_integration.md 中的拼写错误，由 @Galathius 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F131 中修复\n* 允许在 rack_middleware 中将 transport 作为选项，由 @josevalim 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F149 中实现\n* 将 actions\u002Fcheckout 从 v4 升级到 v5，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F141 中完成\n* 将 actions\u002Fdownload-artifact 从 v4 升级到 v5，由 @dependabot[bot] 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F142 中完成\n* 修复指向 GitHub Discussions 的链接，由 @jnicho02 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F139 中修复\n* 添加 on_error_result 服务器钩子，由 @utay 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F129 中实现\n* 在生成的初始化器中添加尾随逗号，由 @zhaitz 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F123 中实现\n* 移除模式编译器，改为使用 Dry 的功能，由 @yjacquin 在 https:\u002F\u002Fgith","2025-09-28T18:21:16",{"id":175,"version":176,"summary_zh":177,"released_at":178},315057,"v1.1.0","### 新增\n- 安全增强：通过验证 Origin 头部添加了 DNS 重绑定防护 [#32 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F32\u002Ffiles)\n- 在 Rack 中间件中添加了允许的源配置选项 [#32 @yjacquin](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F32\u002Ffiles)\n- 允许更改 SSE 和 Messages 路由 [#23 @pedrofurtado](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F23)\n- 修复处理通知\u002F初始化请求时返回值无效的问题 [#31 @abMatGit](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F31)\n\n## 变更内容\n* 由 @dependabot 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F20 中将 softprops\u002Faction-gh-release 从 1 升级到 2\n* 功能：允许更改 SSE 和 Messages 路由，由 @pedrofurtado 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F23 中实现\n* 修复 #30：使用 send_response 方法包装空响应，由 @abMatGit 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F31 中完成\n* Yorick：防止 DNS 重绑定攻击，由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F32 中实现\n* 发布 1.1.0 版本，由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F33 中完成\n\n## 新贡献者\n* @dependabot 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F20 中做出了首次贡献\n* @pedrofurtado 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F23 中做出了首次贡献\n* @abMatGit 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F31 中做出了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv1.0.0...v1.1.0","2025-04-13T17:14:08",{"id":180,"version":181,"summary_zh":182,"released_at":183},315058,"v1.0.0","### 新增\n- 通过增强的 Railtie 支持改进了 Rails 集成\n- 在 Rails 应用中自动注册工具和资源\n- 扩展了 Rails 的自动加载路径，以包含工具和资源目录\n- 提供了资源和工具的示例生成器模板\n- 根据 [#8 @sivag-csod](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fissues\u002F8) 的报告，新增了 MCP 客户端配置文档\n- 文档中添加了一个 Ruby on Rails 示例应用\n- `FastMcp.server` 现在向可能需要访问资源的应用公开 MCP 服务器\n- 通过 GitHub 工作流实现了自动化 GitHub 发布\n\n### 修复\n- 修复了 Rack 中间件未正确初始化的 bug。\n- 修复了 STDIO 日志记录阻止与客户端正常连接的 bug [#11 @cs3b](https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fissues\u002F11)\n- 修复了 Rails 的 SSE 流式传输检测与处理问题\n- 改进了客户端重连场景下的错误处理\n- 对代码库中的命名空间进行了统一修正（将 FastMCP 统一为 FastMcp）\n\n### 改进\n- ⚠️ [破坏性更改] 资源内容声明变更\n  - 现在资源实现 `content` 方法，取代之前的 `default_content`\n  - `content` 方法会在调用资源时动态执行，这意味着我们可以声明动态资源内容，例如：\n  ```ruby\n  class HighestScoringUsersResource \u003C FastMcp::Resource\n  ...\n    def content\n      User.order(score: :desc).last(5).map(&:as_json)\n    end\n  end\n  ```\n- 更加健壮的 SSE 连接生命周期管理\n- 优化了测试套件，提高了执行速度\n- 增强了日志记录功能，便于调试连接问题\n- 文档中存在过时的示例\n\n## 变更内容\n* 更新 README.md，由 @dvantuyl 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F12 中完成\n* v1.0.0 版本发布，由 @yjacquin 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F15 中完成\n\n## 新贡献者\n* @dvantuyl 在 https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fpull\u002F12 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fyjacquin\u002Ffast-mcp\u002Fcompare\u002Fv0.1.0...v1.0.0","2025-03-30T17:38:20",{"id":185,"version":186,"summary_zh":187,"released_at":188},315059,"v0.1.0","## [0.1.0] - 2025-03-12\n\n### 新增\n\n- Fast MCP 库的初始版本\n- FastMcp::Tool 类，支持多种定义方式\n- FastMcp::Server 类，提供 STDIO 传输以及 HTTP\u002FSSE 传输\n- Rack 集成，包含认证中间件和标准中间件选项\n- 带订阅功能的资源管理\n- 二进制资源支持\n- 包含 STDIO 传输、HTTP 和 SSE、Rack 应用的示例\n- 支持初始化生命周期并具备相关能力\n- 使用 RSpec 构建的全面测试套件","2025-03-30T16:05:49"]