ruby-sdk/lib/mcp/server/capabilities.rb
Kevin Fischer 72663c0a3f
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>
2025-06-04 22:52:16 +09:00

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