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>
96 lines
2.4 KiB
Ruby
96 lines
2.4 KiB
Ruby
# 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
|