Commit graph

955 commits

Author SHA1 Message Date
Riley Shott
9a23141ac7 Add rackup as a development dependency 2025-06-09 14:12:49 -07:00
Riley Shott
711216f66a Fix examples 2025-06-09 14:12:13 -07:00
Riley Shott
e546d76991 Rubocop 2025-06-09 14:12:13 -07:00
Riley Shott
55b03fc7aa Add notification support
Co-authored-by: Kevin Fischer <kfischer_okarin@yahoo.co.jp>
2025-06-09 14:12:13 -07:00
Riley Shott
8fbb2e86aa Remove transport-specific code from server 2025-06-09 14:12:13 -07:00
Riley Shott
08be669b58 Move rack to a development dependency 2025-06-09 14:12:13 -07:00
Riley Shott
4e4455772b StreamableHTTP -> Streamable HTTP 2025-06-09 14:12:13 -07:00
Riley Shott
3e03a2af66 Implement StreamableHTTP transport
Co-authored-by: Topher Bullock <topher.bullock@shopify.com>
2025-06-09 14:12:11 -07:00
Tyler Rowsell
8dee60cfc2
Fix: Disallow $ref in tool input schemas 2025-06-09 13:32:20 -04:00
Tyler Rowsell
bae35facf6
Change Error Handling 2025-06-09 13:32:12 -04:00
Koichi ITO
04710ac472
Merge pull request #47 from koic/tweak_an_example_for_mcp_resource_in_readme
[Doc] Tweak an example for `MCP::Resource` in the README
2025-06-10 00:35:18 +09:00
Koichi ITO
2ee3d39814
Merge pull request #49 from koic/suppress_interrupt_exception_for_stdio_server
Suppress `Interrupt` exception for stdio server
2025-06-10 00:34:52 +09:00
Koichi ITO
b65d9b6553
Merge pull request #52 from koic/add_link_to_badge
[Doc] Add links to badges
2025-06-10 00:21:12 +09:00
Tyler Rowsell
934a5e8db4
Remove rescue block and add test for error bubbling in InputSchema validation 2025-06-09 10:25:51 -04:00
Koichi ITO
eecc0eaefb [Doc] Add links to badges
This PR adds links to the following two badges:

1. RubyGems badge: A link to the `mcp` gem will be added. The repository name is `ruby-sdk`,
following the modelcontextprotocol org's naming convention. Since the repository name and
the gem name are different, the link will help make it clear which gem it refers to.
2. MIT license badge: This will link to the MIT license file in the repository.

NOTE: Separately from this PR, the copyright notice in the MIT license should probably be addressed.
It currently says `Copyright (c) 2025 TODO: Write your name`, so the TODO should be resolved:
https://github.com/modelcontextprotocol/ruby-sdk/blob/v0.1.0/LICENSE.txt#L3

Other language SDKs seem to list `Anthropic, PBC` as the copyright holder,
though I would defer that decision to someone more knowledgeable.
2025-06-09 14:36:29 +09:00
Koichi ITO
85252e0546 Suppress Interrupt exception for stdio server
This PR suppresses the following backtrace of `Interrupt` (Ctrl+c) exception for stdio server:

## Before

```console
$ ./examples/stdio_server.rb
^C/Users/koic/src/github.com/modelcontextprotocol/ruby-sdk/lib/mcp/server/transports/stdio_transport.rb:20:
in 'IO#gets': Interrupt
        from /Users/koic/src/github.com/modelcontextprotocol/ruby-sdk/lib/mcp/server/transports/stdio_transport.rb:20:
             in 'MCP::Server::Transports::StdioTransport#open'
        from ./examples/stdio_server.rb:95:in '<main>'
$ echo $?
130
```

## After

```console
$ ./examples/stdio_server.rb
^C
Exiting...
$ echo $?
130
```

This change should prevent unexpected backtrace from appearing when running the example:
https://github.com/modelcontextprotocol/ruby-sdk?tab=readme-ov-file#stdio-transport
2025-06-07 19:25:37 +09:00
Koichi ITO
e9403c58a7 [Doc] Tweak an example for MCP::Resource in the README
`MCP::Resource` doesn't have `text` attribute:
https://github.com/modelcontextprotocol/ruby-sdk/blob/v0.1.0/lib/mcp/resource.rb#L8-L13

I've replaced it with attributes that it actually supports.

Also, the use of `text: "Hello, world!"` in the example of `server.resources_read_handler` implementation resulted in
an unexpected response the first time I worked with `Resource`. While it may not be the best (but better),
in my experience using Resources with Cline, `text: params[:uri]` served as a clearer response when interacting with an LLM,
making it easier to understand.
2025-06-06 13:36:33 +09:00
Ateş Göral
fda5640394
Merge pull request #46 from modelcontextprotocol/ag/badges
Update title + desc and add badges
2025-06-05 10:03:31 -04:00
Ateş Göral
9d78717718
Add CI badge
Co-authored-by: Koichi ITO <koic.ito@gmail.com>
2025-06-05 09:16:42 -04:00
Ateş Göral
d2c4d3ec18
Merge pull request #42 from kfischer-okarin/extract-capabilities-object
Refactor: Extract Capabilities object
2025-06-05 01:11:04 -04:00
Ates Goral
652a06ca6f Update title + desc and add badges 2025-06-05 00:57:47 -04:00
Ateş Göral
5649f0312c
Merge pull request #45 from koic/fix_a_typo
[Doc] Fix a typo
2025-06-05 00:22:10 -04:00
Koichi ITO
ced9481194 [Doc] Fix a typo 2025-06-05 11:19:31 +09:00
Tyler Rowsell
600c96f66a Validate ToolCall Args against Schema
(cherry picked from commit eeb287117535dfb43785704171625323f01d5bda)
2025-06-04 15:19:05 -04:00
Kevin Fischer
4a666ed0d9
Use Capabilities object instead of private method 2025-06-04 22:55:08 +09:00
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
Ateş Göral
a601558a21
Merge pull request #40 from koic/fix_build_error
Fix build error
2025-06-03 22:58:13 -04:00
Koichi ITO
70680fce88 Fix build error
Follow-up to #27.

This PR fixes the following build error:

```console
$ bundle exec rake
/Users/koic/.rbenv/versions/3.5-dev/lib/ruby/3.5.0+1/bundled_gems.rb:59:in 'Kernel.require': cannot load such file -- mcp/transports/stdio (LoadError)
Did you mean?  mcp/transports/stdio_transport_test
        from /Users/koic/.rbenv/versions/3.5-dev/lib/ruby/3.5.0+1/bundled_gems.rb:59:in 'block (2 levels) in Kernel#replace_require'
        from /Users/koic/src/github.com/modelcontextprotocol/ruby-sdk/test/mcp/transports/stdio_transport_test.rb:4:in '<top (required)>'
        from /Users/koic/.rbenv/versions/3.5-dev/lib/ruby/3.5.0+1/bundled_gems.rb:59:in 'Kernel.require'
        from /Users/koic/.rbenv/versions/3.5-dev/lib/ruby/3.5.0+1/bundled_gems.rb:59:in 'block (2 levels) in Kernel#replace_require'
        from /Users/koic/.rbenv/versions/3.5-dev/lib/ruby/gems/3.5.0+1/gems/rake-13.3.0/lib/rake/rake_test_loader.rb:21:in 'block in <main>'
        from /Users/koic/.rbenv/versions/3.5-dev/lib/ruby/gems/3.5.0+1/gems/rake-13.3.0/lib/rake/rake_test_loader.rb:6:in 'Array#select'
        from /Users/koic/.rbenv/versions/3.5-dev/lib/ruby/gems/3.5.0+1/gems/rake-13.3.0/lib/rake/rake_test_loader.rb:6:in '<main>'
rake aborted!
Command failed with status (1)
/Users/koic/.rbenv/versions/3.5-dev/bin/bundle:25:in 'Kernel#load'
/Users/koic/.rbenv/versions/3.5-dev/bin/bundle:25:in '<main>'
Tasks: TOP => default => test
(See full trace by running task with --trace)
```

https://github.com/modelcontextprotocol/ruby-sdk/actions/runs/15428236624/job/43420346011

The following is stated in #27.

> Breaking Changes
> `MCP::Transports::StdioTransport` is now `MCP::Server::Transports::StdioTransport`

What is shown here is the new name `MCP::Server::Transports::StdioTransport`, not `MCP::Server::Transports::Stdio`.

Therefore, the file path has been updated from `lib/mcp/server/transports/stdio.rb` to `lib/mcp/server/transports/stdio_transport.rb` to
match the module name. If `MCP::Server::Transports::Stdio` is preferred instead, please let me know and I will open a separate PR.
2025-06-04 11:48:25 +09:00
Topher Bullock
e901f94a3d
Merge pull request #37 from koic/tweak_stdio_transport_example_code_in_the_readme
[Doc] Tweak stdio transport example code in the README
2025-06-03 17:28:53 -04:00
Topher Bullock
dcc31ca6fd
Merge pull request #27 from jcat4/refactor-for-client-support
Refactor in preparation for client support
2025-06-03 17:27:54 -04:00
Koichi ITO
6de5468c8b [Doc] Tweak stdio transport example code in the README
The example code is located at `./examples/stdio_server.rb`.
Also, the content provided as input via stdio has been updated to avoid returning an error data.
Using ping pong as an example, here's the difference:

## Before

An error data is returned.

```console
$ ./examples/stdio_server.rb
{"jsonrpc":"2.0","id":"1","result":"pong"}
{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"Invalid Request","data":"Method name must be a string and not start with \"rpc.\""}}
```

This error message is generated in the following location:
https://github.com/Shopify/json-rpc-handler/blob/v0.1.1/lib/json_rpc_handler.rb#L70

## After

The expected result is returned without error data.

```console
$ ./examples/stdio_server.rb
{"jsonrpc":"2.0","id":"1","method":"ping"}
{"jsonrpc":"2.0","id":"1","result":{}}
```

The other stdin example has been updated to use data that does not cause errors.

With this document update, users can verify the behavior of the MCP server via stdin without using an MCP client.
2025-06-03 23:41:13 +09:00
Ateş Göral
08abc3e17b
Merge pull request #36 from koic/remove_unused_config_from_dot_rubocop
Remove unused config from .rubocop.yml
2025-06-01 13:23:20 -04:00
Koichi ITO
4db222f659 Remove unused config from .rubocop.yml
Follow-up to #24.

lib/mcp-ruby.rb was removed in https://github.com/modelcontextprotocol/ruby-sdk/pull/24.
2025-06-02 01:44:42 +09:00
Ateş Göral
8d88156d71
Merge pull request #34 from koic/make_some_optional_kwargs_in_resource
Make `description` and `mime_type` optional keyword arguments in `Resource`
2025-05-31 13:34:25 -04:00
Ateş Göral
0f3384e5aa
Merge pull request #35 from koic/rename_directory_from_model_context_protocol_to_mcp
Rename test directory from `model_context_protocol` to `mcp`
2025-05-31 13:33:18 -04:00
Koichi ITO
f33fe309b4 Rename test directory from model_context_protocol to mcp
Follow-up to #24.

The directory structure of the product code and test code is expected to match.
2025-06-01 02:13:28 +09:00
Joey Cardosi
0fbd229ae3
sort imports 2025-05-30 20:01:31 -04:00
Joey Cardosi
5cc3d9d526
stop using shared dir 2025-05-30 14:33:22 -04:00
Topher Bullock
7ad1e904eb
Merge pull request #32 from modelcontextprotocol/release-0.1.0 v0.1.0
Release 0.1.0
2025-05-30 14:19:47 -04:00
Topher Bullock
542e3766f3 release 0.1.0 2025-05-30 13:53:16 -04:00
Topher Bullock
e98b5f12c1
Merge pull request #31 from modelcontextprotocol/add-release-workflow
add release workflow for publishing to RubyGems
2025-05-30 13:30:43 -04:00
Koichi ITO
eb1c93909b Make description and mime_type optional keyword arguments in Resource
This change is related to #29.

According to the specification, both `description` and `mimeType` of Resource are optional:
https://modelcontextprotocol.io/specification/2025-03-26/server/resources#resource

Therefore, it makes sense to treat them as optional keyword arguments,
similar to how this is done in `ResourceTemplate`:
https://github.com/modelcontextprotocol/ruby-sdk/blob/0b49c3/lib/mcp/resource_template.rb#L8

As additional context, the TypeScript SDK also treats them as optional.
https://github.com/modelcontextprotocol/typescript-sdk/blob/1.12.1/src/types.ts#L438-L466
2025-05-31 01:24:23 +09:00
Joey Cardosi
3c8ff5a547
fix + cleanup stdio 2025-05-30 12:17:09 -04:00
Joey Cardosi
d80b13736e
just redo all of it from scratch 2025-05-30 12:15:11 -04:00
Topher Bullock
5db96f0b5c document release process 2025-05-30 11:42:50 -04:00
Topher Bullock
2dd9e96b98 add release workflow for publishing to RubyGems 2025-05-30 08:59:52 -04:00
Ateş Göral
0b49c3f711
Merge pull request #26 from koic/suppress_rubocop_info
Enable RuboCop Minitest and RuboCop Rake for development
2025-05-30 00:27:06 -04:00
Ateş Göral
a32b7d2499
Merge pull request #25 from koic/enable_rubocop_on_ci
Enable RuboCop on CI
2025-05-30 00:25:03 -04:00
Ateş Göral
8db094d300
Merge pull request #29 from koic/suppress_redundant_attributes_in_resources
Suppress redundant attributes in Resources
2025-05-30 00:22:24 -04:00
Ateş Göral
5ae86796c9
Merge pull request #30 from koic/fix_an_error_when_using_bin_console]
Fix an error when using `bin/console`
2025-05-30 00:21:40 -04:00