## Motivation and Context The MCP specification constrains `Annotations.priority` to the 0–1 range (`@minimum 0`, `@maximum 1`), but the Ruby SDK accepts any value. The other official SDKs already enforce this (TypeScript, Python, and PHP). This follows the existing pattern in `MCP::Icon`, which validates its constrained `theme` value in the constructor and raises `ArgumentError`. ## How Has This Been Tested? Added tests in `test/mcp/annotations_test.rb`: - valid `priority` at the lower (0) and upper (1) bounds is accepted - out-of-range `priority` (above 1, below 0) raises `ArgumentError` The full unit suite and RuboCop pass locally. ## Breaking Changes Strictly speaking yes: a caller that currently passes an out-of-range `priority` (e.g. `priority: 99`) will now get an `ArgumentError`. Such values already violate the MCP specification, and `nil` / in-range values are unaffected.
23 lines
550 B
Ruby
23 lines
550 B
Ruby
# frozen_string_literal: true
|
|
|
|
module MCP
|
|
class Annotations
|
|
attr_reader :audience, :priority, :last_modified
|
|
|
|
def initialize(audience: nil, priority: nil, last_modified: nil)
|
|
raise ArgumentError, "The value of priority must be between 0 and 1." if priority && !priority.between?(0, 1)
|
|
|
|
@audience = audience
|
|
@priority = priority
|
|
@last_modified = last_modified
|
|
end
|
|
|
|
def to_h
|
|
{
|
|
audience: audience,
|
|
priority: priority,
|
|
lastModified: last_modified,
|
|
}.compact
|
|
end
|
|
end
|
|
end
|