Commit graph

403 commits

Author SHA1 Message Date
Den Delimarsky
6df8e4c74c
Add SECURITY.md with GitHub Security Advisories guidance (#232) 2026-02-18 20:49:17 -05:00
Koichi ITO
b8f1cc92e6
Merge pull request #230 from koic/fix_logging_set_level
Fix `logging/setLevel` to return empty hash per MCP specification
2026-02-19 02:52:51 +09:00
Koichi ITO
34b7c68b5a
Merge pull request #219 from koic/acknowledge_shopify_in_the_initial_release
[Doc] Acknowledge Shopify in the initial release
2026-02-17 12:40:08 +09:00
Koichi ITO
4dc2a8eb4a Fix logging/setLevel to return empty hash per MCP specification
This PR fixes `logging/setLevel` to return empty hash per MCP specification.
The MCP specification requires `logging/setLevel` to return an empty result
on success, not nil or the `LoggingMessageNotification` object.

Specification reference:
https://modelcontextprotocol.io/specification/2025-11-25/server/utilities/logging

Fixes #229.
2026-02-17 01:00:15 +09:00
Koichi ITO
2b790d6804
Merge pull request #227 from koic/release_0_7_0 v0.7.0
Release 0.7.0
2026-02-14 15:44:43 +09:00
Koichi ITO
0175fff4dd Release 0.7.0
Some new features and fixes have been added, and it seems like a good time to cut a release.

- https://github.com/modelcontextprotocol/ruby-sdk/pull/103
- https://github.com/modelcontextprotocol/ruby-sdk/pull/223
- https://github.com/modelcontextprotocol/ruby-sdk/pull/218
- https://github.com/modelcontextprotocol/ruby-sdk/pull/221
- https://github.com/modelcontextprotocol/ruby-sdk/pull/225
- https://github.com/modelcontextprotocol/ruby-sdk/pull/224
- https://github.com/modelcontextprotocol/ruby-sdk/pull/220

For now, the features completed so far can be included in this release,
and subsequent feature proposals can continue to be incorporated into future releases.
2026-02-14 10:07:07 +09:00
Koichi ITO
c11393f4c4
Merge pull request #224 from koic/extract_annotations_from_mcp
Extract `MCP::Annotations` into a dedicated file
2026-02-10 02:30:42 +09:00
Koichi ITO
1a2750d6d7
Merge pull request #222 from koic/update_readme_for_instrumentation_callback
[Doc] Add `tool_arguments` to instrumentation callback documentation
2026-02-09 00:48:46 +09:00
Koichi ITO
ebd658d50d
Merge pull request #226 from sjrct/remove-unused-require
Remove unused require from logging_message_notification.rb
2026-02-07 02:59:16 +09:00
Koichi ITO
0e30dff80b
Merge pull request #225 from sjrct/add-client-resource-templates
Add resource_templates to MCP::Client
2026-02-07 02:58:52 +09:00
Chris Harding
d0107c304a logging_message_notification: Remove unused require 2026-02-05 16:05:08 -05:00
Chris Harding
c145fe39df Add resource_templates to MCP::Client
Includes relevant README addition and tests
2026-02-05 16:02:07 -05:00
Koichi ITO
15ef5ebda2
Merge pull request #223 from chattermill/md-protocol-negotiation
Add protocol version negotiation to server initialization
2026-02-06 00:11:28 +09:00
Mikhail Dubov
077a5cf15a Add protocol version negotiation to server initialization
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 10:43:59 +00:00
Koichi ITO
4a71fa8ec4
Merge pull request #221 from chattermill/md-client-instrumentation
Add client info to instrumentation callback
2026-02-05 11:28:14 +09:00
Mikhail Dubov
2d926ab386 Add client info to instrumentation callback 2026-02-04 12:03:03 +00:00
Koichi ITO
248c1ec532
Merge pull request #220 from koic/fix_resource_embedded_not_setting_resource_in_initialize
Fix `Resource::Embedded` not setting `@resource` in `initialize`
2026-02-04 10:58:49 +09:00
Koichi ITO
a85fa028f7 Extract MCP::Annotations into a dedicated file
This PR moves `MCP::Annotations` from lib/mcp.rb to lib/mcp/annotations.rb for better organization,
following the pattern used for other classes such as `Tool::Annotations`.

This PR also adds the missing `last_modified` attribute to `MCP::Annotations`:
https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/2025-11-25/schema.ts#L1701-L1736

It also adds a `to_h` method for serialization and includes comprehensive test coverage.

NOTE: This code is unused within the ruby-sdk repository, but it is kept for compatibility, as it may be used by users.
2026-02-03 15:38:04 +09:00
Koichi ITO
1c449ae549 [Doc] Add tool_arguments to instrumentation callback documentation
Follow-up to #218, which added the `tool_arguments` feature to the instrumentation callback.
This updates README.md to document the new `tool_arguments` key in both instrumentation callback sections,
and removes redundant instrumentation documentation.
2026-01-31 15:47:56 +09:00
Koichi ITO
0ab77c318f
Merge pull request #103 from dak2/support-logging
Add `logging` support
2026-01-30 12:29:29 +09:00
dak2
afa2fb4077 Add logging support
A server can send structured logging messages to the client.
https://modelcontextprotocol.io/specification/2025-06-18/server/utilities/logging#logging

Logging was specified in the 2024-11-05 specification, but since it was not supported in ruby-sdk, I implemented it.
https://modelcontextprotocol.io/specification/2024-11-05/server/utilities/logging

I also made it possible to output a simple notification message in the examples.
2026-01-26 22:23:46 +09:00
Koichi ITO
05c0119e53 Fix Resource::Embedded not setting @resource in initialize
The `initialize` method was missing the assignment of `@resource`,
causing the resource method to always return `nil` and `to_h` to return
an incorrect hash with an empty resource value.

Added comprehensive tests to verify the fix and prevent regression.
2026-01-26 11:37:33 +09:00
Koichi ITO
5331c237bd [Doc] Acknowledge Shopify in the initial release
The repository's "About" section currently states,
"The official Ruby SDK for the Model Context Protocol. Maintained in collaboration with Shopify."
However, now that MCP governance has been established, maintenance is handled by the MCP steering group.

Given this, it seems more accurate to remove the maintenance wording from the "About" section.
That said, I think it would be good to preserve acknowledgment of Shopify, which originally developed and released the Ruby SDK.

There may be a more appropriate place for this, but at the very least, it could be recorded in the changelog as part of the project's history.
2026-01-25 16:11:27 +09:00
Koichi ITO
3addc525df
Merge pull request #218 from chattermill/add-tool-arguments-to-instrumentation
Add Tool Arguments to Instrumentation Data
2026-01-23 01:11:28 +09:00
Mikhail Dubov
7412197e52 feat: add tool_arguments to instrumentation data
Include the tool arguments in instrumentation callback data when
tools/call is invoked. This allows consumers to track which arguments
were passed to each tool call for analytics and debugging purposes.
2026-01-21 17:18:28 +00:00
Koichi ITO
830913be5a
Merge pull request #214 from koic/add_explicit_permissions_to_ci_workflow
Add explicit permissions to CI workflow
2026-01-21 02:12:47 +09:00
Koichi ITO
ade3d1fa80
Merge pull request #216 from koic/release_0_6_0 v0.6.0
Release 0.6.0
2026-01-16 15:31:38 +09:00
Koichi ITO
c4fd83debf Release 0.6.0
This would have been 0.5.1 release with only the fix from #212, but it has been released as 0.6.0
because it also includes the license change in #213.
2026-01-16 14:58:48 +09:00
Koichi ITO
7bef102224
Merge pull request #212 from koic/omit_icons_from_response_when_empty_or_nil
Omit `icons` from responses when empty or nil
2026-01-15 08:53:14 +09:00
Koichi ITO
27e5dc9c80
Merge pull request #213 from modelcontextprotocol/chore/apache-2.0-license
chore: update licensing to Apache 2.0 for new contributions
2026-01-14 01:04:45 +09:00
Adam Jones
685a4913d4
chore: update licensing to Apache 2.0 for new contributions 2026-01-12 22:49:19 +00:00
Koichi ITO
e484029d53 Add explicit permissions to CI workflow
Set minimal `contents: read` permission following the principle of least privilege.
This prevents using overly permissive repository defaults.
2026-01-13 03:06:05 +09:00
Koichi ITO
bd416c7a5f Omit icons from responses when empty or nil
Previously, the `icons` parameter was always included in responses (as an empty array)
even when not configured. This differs from the response representation in MCP Ruby SDK 0.4.0.

Since `icons` is optional, it should be omitted from responses when unused to reduce
unnecessary context window usage.
https://modelcontextprotocol.io/specification/2025-11-25/schema#implementation

This fix applies to `Tool#to_h`, `Prompt#to_h`, `Resource#to_h`, `ResourceTemplate#to_h`,
and `Server#server_info`.

It doesn't seem critical, but if there are no other issues, it would be good to cut 0.5.1 bugfix release soon.
2026-01-12 09:46:45 +09:00
Koichi ITO
fd1d7a61ec
Merge pull request #211 from koic/release_0_5_0 v0.5.0
Release 0.5.0
2026-01-11 12:27:34 +09:00
Koichi ITO
7a21bbd14b Release 0.5.0
Many new features and fixes have been added, and it seems like a good time to cut a release.
This release enables the following user feedback to be addressed:

* https://github.com/modelcontextprotocol/ruby-sdk/issues/99#issuecomment-3667416303
* https://github.com/modelcontextprotocol/ruby-sdk/pull/206#issuecomment-3717086100

For now, the features completed so far can be included in this release,
and subsequent feature proposals can continue to be incorporated into future releases.
2026-01-11 03:37:34 +09:00
Koichi ITO
6b18ca41be
Merge pull request #209 from koic/avoid_redos_in_ruby_3_1_and_earlier
Fix ReDoS vulnerability in `StringUtils#underscore`
2026-01-10 01:16:27 +09:00
Koichi ITO
248b4d2dad Fix ReDoS vulnerability in StringUtils#underscore
## Summary

Replace regex patterns with lookahead/lookbehind assertions to prevent
catastrophic backtracking on Ruby 3.1 and earlier.

This issue only affects Ruby 3.1 and earlier. Since it does not occur on Ruby 3.2+,
it is not an issue in the current stable release (0.4.0), which does not include #206.

## Regression Testing

Ensure the regex patterns complete within 1 second for a 50,000-character input
that would otherwise trigger superlinear backtracking.
2026-01-09 01:14:52 +09:00
Koichi ITO
b92dbe4c28
Merge pull request #207 from keisku/add-Accept-header-validation
Add Accept header validation
2026-01-08 02:49:19 +09:00
Keisuke Umegaki
ab8f53c5b7
Add Accept header validation
- Set Accept header to request JSON or SSE responses
- Validate response Content-Type and raise error for non-JSON responses
- Add Accept header to test fixtures
- Use explicit hash syntax for Ruby 2.7 compatibility
2026-01-07 14:55:19 +09:00
Koichi ITO
05fb98c3bb
Merge pull request #206 from koic/support_for_ruby_2_7_to_3_1
Support Ruby 2.7 - Ruby 3.1
2026-01-07 11:13:05 +09:00
Keisuke Umegaki
6f86acc161
fix dev style (#208) 2026-01-06 01:00:31 -05:00
Koichi ITO
aa8bbad491 Support Ruby 2.7 - Ruby 3.1
## Summary

Unlike applications, libraries provide value by remaining usable for a broad range of users,
even when that means supporting older Ruby versions beyond Ruby's own EOL timeline.

I maintain RuboCop, a Ruby linter. Because linters need to work across the ecosystem,
they often need to keep compatibility with older Ruby versions to some extent.

The trade-off is that the MCP Ruby SDK must remain compatible with Ruby 2.7.
However, given the ecosystem impact, supporting Ruby 2.7 is still worthwhile.

For example, bundled gems such as `csv` (Ruby >= 2.5), `bigdecimal` (Ruby >= 2.5), `json` (Ruby >= 2.7),
and `language_server-protocol` (Ruby >= 2.5) tend to keep compatibility with older Ruby versions.

Unlike dropping support, which imposes restrictions on users,
this change broadens compatibility and does not introduce breaking changes.

## Development Note

`rubocop-shopify` (2.18) supports Ruby 3.1+, and this PR does not change that.
Since RuboCop can configure the runtime Ruby version and the target Ruby version for analysis independently,
CI continues to run RuboCop on Ruby 4.0, while analyzing code with `TargetRubyVersion: 2.7`.

When setting `TargetRubyVersion: 2.7`, several RuboCop offenses were resolved.

Additionally, Sorbet-related libraries support Ruby 3.0+. Since these are not dependencies of the MCP Ruby SDK itself,
they are versioned and tested in the development Gemfile.
2026-01-06 10:38:56 +09:00
Koichi ITO
4968d9cffc
Merge pull request #204 from koic/make_tool_names_stricter
Make tool names stricter
2026-01-04 06:58:20 +09:00
Koichi ITO
ab4f0807d4
Merge pull request #205 from koic/add_icons
Support `icons` parameter
2026-01-03 01:46:43 +09:00
Koichi ITO
d1038c9f90
Merge pull request #203 from koic/remove_redundant_descriptions_in_agents_md
[Doc] Remove redundant descriptions in AGENTS.md
2026-01-02 01:18:00 +09:00
Koichi ITO
3bc1c2c407
Merge pull request #194 from koic/show_exception_messages_for_tool_call_error
Show exception messages for tool call errors
2026-01-01 07:09:15 +09:00
Koichi ITO
b29d522d27 Show exception messages for tool call errors
Claude Code sometimes only shows `Error: MCP error -32603: Internal error`
when an unexpected exception occurs during a tool call.

This change broadens the exception handling scope so the server can surface
the exception message more often, making failures easier to diagnose.
2025-12-31 19:38:14 +09:00
Koichi ITO
ca934456de
Merge pull request #189 from koic/update_specification_url_to_latest
[Docs] Update specification URL to `latest`
2025-12-31 08:11:20 +09:00
Koichi ITO
028c5f3291 Support icons parameter
This PR adds support for the optional `icons` parameter in prompt, resource,
resource template, and server info.

The specifications for `icons` are as follows.
https://modelcontextprotocol.io/specification/2025-11-25/schema#icon

Resolves https://github.com/modelcontextprotocol/ruby-sdk/issues/127.
2025-12-30 05:35:22 +09:00
Koichi ITO
84ff1fcba1 Make tool names stricter
Follow-up to https://github.com/modelcontextprotocol/ruby-sdk/pull/199#issuecomment-3659688807

Tool names are now validated to comply with the specification.
https://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool-names

Since the tool name is optional, `nil` value is treated as "not specified" and is ignored without validation.
2025-12-29 01:19:39 +09:00