Extract server capabilities into dedicated Capabilities class
Refactor capabilities handling into MCP::Server::Capabilities to improve code organization and separation of concerns. This provides a cleaner API for configuring server capabilities including prompts, resources, tools, completions, logging, and experimental features. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
a601558a21
commit
72663c0a3f
1 changed files with 294 additions and 0 deletions
96
lib/mcp/server/capabilities.rb
Normal file
96
lib/mcp/server/capabilities.rb
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MCP
|
||||
class Server
|
||||
class Capabilities
|
||||
def initialize(capabilities_hash = nil)
|
||||
@completions = nil
|
||||
@experimental = nil
|
||||
@logging = nil
|
||||
@prompts = nil
|
||||
@resources = nil
|
||||
@tools = nil
|
||||
|
||||
if capabilities_hash
|
||||
support_completions if capabilities_hash.key?(:completions)
|
||||
support_experimental(capabilities_hash[:experimental]) if capabilities_hash.key?(:experimental)
|
||||
support_logging if capabilities_hash.key?(:logging)
|
||||
|
||||
if capabilities_hash.key?(:prompts)
|
||||
support_prompts
|
||||
prompts_config = capabilities_hash[:prompts] || {}
|
||||
support_prompts_list_changed if prompts_config[:listChanged]
|
||||
end
|
||||
|
||||
if capabilities_hash.key?(:resources)
|
||||
support_resources
|
||||
resources_config = capabilities_hash[:resources] || {}
|
||||
support_resources_list_changed if resources_config[:listChanged]
|
||||
support_resources_subscribe if resources_config[:subscribe]
|
||||
end
|
||||
|
||||
if capabilities_hash.key?(:tools)
|
||||
support_tools
|
||||
tools_config = capabilities_hash[:tools] || {}
|
||||
support_tools_list_changed if tools_config[:listChanged]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def support_completions
|
||||
@completions ||= {}
|
||||
end
|
||||
|
||||
def support_experimental(config = {})
|
||||
@experimental = config || {}
|
||||
end
|
||||
|
||||
def support_logging
|
||||
@logging ||= {}
|
||||
end
|
||||
|
||||
def support_prompts
|
||||
@prompts ||= {}
|
||||
end
|
||||
|
||||
def support_prompts_list_changed
|
||||
support_prompts
|
||||
@prompts[:listChanged] = true
|
||||
end
|
||||
|
||||
def support_resources
|
||||
@resources ||= {}
|
||||
end
|
||||
|
||||
def support_resources_list_changed
|
||||
support_resources
|
||||
@resources[:listChanged] = true
|
||||
end
|
||||
|
||||
def support_resources_subscribe
|
||||
support_resources
|
||||
@resources[:subscribe] = true
|
||||
end
|
||||
|
||||
def support_tools
|
||||
@tools ||= {}
|
||||
end
|
||||
|
||||
def support_tools_list_changed
|
||||
support_tools
|
||||
@tools[:listChanged] = true
|
||||
end
|
||||
|
||||
def to_h
|
||||
{
|
||||
completions: @completions,
|
||||
experimental: @experimental,
|
||||
logging: @logging,
|
||||
prompts: @prompts,
|
||||
resources: @resources,
|
||||
tools: @tools,
|
||||
}.compact
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Reference in a new issue