Commit graph

130 commits

Author SHA1 Message Date
Koichi ITO
c806e1ecd2
Merge pull request #67 from koic/remove_chebang_from_example_files
Remove shebang from example files
2025-06-24 02:21:12 +09:00
Koichi ITO
b28a477727
Merge pull request #70 from dak2/fix-error-handling-when-sending-notification
Fix handling response when sending notifications in `examples/streamable_http_client.rb`
2025-06-21 20:19:35 +09:00
dak2
7a5bd7c18f Fix handling response when sending notifications in examples/streamable_http_client.rb
Even though the 'tools/call' request to 'notification_tool' is successful and an 'MCP::Tool::Response' is returned, the logger still prints 'Error:'.

```
% ruby examples/streamable_http_client.rb
=== MCP SSE Test Client ===

[CLIENT] INFO 15:41:04.696 - Initializing session...
[CLIENT] INFO 15:41:04.698 - Session initialized: SESSION_ID
[CLIENT] INFO 15:41:04.698 - Server info: {"name" => "sse_test_server", "version" => "0.1.0"}
[CLIENT] INFO 15:41:04.698 - Connecting to SSE stream...
[CLIENT] INFO 15:41:04.698 - SSE stream connected successfully

=== Available Actions ===
1. Send custom notification
2. Test echo
3. List tools
0. Exit

Choose an action: 1
Enter notification message: notification test
Enter delay in seconds (0 for immediate):
[CLIENT] INFO 15:41:11.248 - SSE data: {"jsonrpc":"2.0","id":"0f657eeb-3e05-47bb-b7b4-898e2cb503af","result":{"content":[{"type":"text","text":"Notification: notification test (timestamp: 2025-06-21T15:41:11+09:00)"}],"isError":false}}
[CLIENT] ERROR 15:41:11.249 - Error:

=== Available Actions ===
1. Send custom notification
2. Test echo
3. List tools
0. Exit
```

It is probably trying to output an MCP::Tool::Response, but these appear in the SSE stream. Therefore, the response it is handling this time should either be accepted or an error.

I modified it so that it could handle them.
2025-06-21 19:38:33 +09:00
Ateş Göral
0fe0289a39
Merge pull request #69 from andyw8/andyw8/disable-release-workflow-on-forks
Disable release workflow on forks
2025-06-20 01:42:20 +03:00
Andy Waite
e955cecb61 Disable release workflow on forks 2025-06-19 15:40:18 -04:00
Koichi ITO
55a3cda66f
Merge pull request #68 from sambostock/deps
Remove `json-schema` limit and reorganize dev deps
2025-06-20 03:51:46 +09:00
Sam Bostock
6935db486e
Stop limiting json-schema version
This was causing conflicts in applications using `json-schema` 5.x.

The only breaking change in 5.0 was dropping support for old Ruby
versions, which we don't support either.
2025-06-19 14:28:09 -04:00
Sam Bostock
f4ba40a71e
Consistently organize development dependencies 2025-06-19 14:26:55 -04:00
Koichi ITO
100d1a1ab3 Remove shebang from example files
Since the example files are not executable binaries, this PR removes the shebangs.

This ensures that all examples are consistently executed via `ruby` command.
It also removes the executable permission from `examples/stdio_server.rb` using `chmod 444`,
bringing it in line with the other example files.
2025-06-19 16:00:38 +09:00
Ateş Göral
af686a387d
Merge pull request #66 from dak2/fix/readme-of-sse
Rename the example file names related to SSE.
2025-06-18 13:05:59 +03:00
dak2
10cb6c0eb9 Rename the example file names related to SSE.
This PR renamed the files related to the SSE example and fixed the README.md.
Because missing files were specified in README.md.

And also, I removed the word 'test' from the file names related to the SSE example.
Other examples file names do not contain the word `test`.
2025-06-18 18:30:40 +09:00
Topher Bullock
8dda58e77c
Merge pull request #43 from tylerrowsell/tool-arg-validation
Validate ToolCall Args against Schema
2025-06-17 17:39:13 -04:00
Sam Bostock
ffa06b103d
Merge pull request #64 from sambostock/duplicate-method-instrumentation
Remove duplicate `method` instrumentation
2025-06-17 11:58:36 -04:00
Koichi ITO
0027ce7126
Merge pull request #51 from koic/add_migration_path_for_server_transports_std_transport
Add a migration path for `Server::Transports::StdioTransport`
2025-06-18 00:25:00 +09:00
Sam Bostock
ce1c8719cf
Remove duplicate method instrumentation
`handle_request` already adds the `method` to the instrumentation data,
so there is no need to repeat this. Moreover, consumers can override
these anyway.
2025-06-17 02:07:25 -04:00
Koichi ITO
529f3bbe57
Merge pull request #62 from dak2/fix/rename-to-mcp
Rename to `MCP` when handling exceptions in Streamable HTTP transport
2025-06-15 15:43:28 +09:00
dak2
dc38c9f84a Rename to MCP when handling exceptions in Streamable HTTP transport
The reason for the change is that a NameError occurs when a POST request is made while the stream is closed because ModelContextProtocol is undefined.

I have also added test cases to check the behaviour when IOError and Errno::EPIPE occurs.
2025-06-15 15:21:22 +09:00
Topher Bullock
382ae13e25
Merge pull request #33 from Ginja/streamable-http
Implement Streamable HTTP transport
2025-06-13 18:29:40 -04:00
Topher Bullock
110160b40f
Merge pull request #58 from koic/update_the_mcp_spec_url
[Doc] Update the MCP spec URL
2025-06-13 18:25:06 -04:00
Riley Shott
4d79263a87 Addressing feedback 2025-06-11 13:44:54 -07:00
Riley Shott
2942d456cc JSON body fix in examples/http_server.rb 2025-06-10 12:54:21 -07:00
Koichi ITO
1b87b3ffde [Doc] Update the MCP spec URL
https://spec.modelcontextprotocol.io/specification/2024-11-05/ URL is redirected to
https://modelcontextprotocol.io/specification/2025-03-26

This update avoids unnecessary redirects from the old URL to the new URL.
2025-06-11 02:00:12 +09:00
Koichi ITO
16ab4bac81 Add a migration path for Server::Transports::StdioTransport
Follow-up to #27.

This PR adds a migration path for `Server::Transports::StdioTransport`. e.g.,

```console
$ cat /tmp/example.rb
require "mcp/transports/stdio"

MCP::Transports::StdioTransport
```

This change displays the following warning instead of raising an error for such cases, allowing execution to proceed:

```console
$ bundle exec ruby /tmp/example.rb
/tmp/example.rb:1: warning: Use `require "mcp/server/transports/stdio_transport"` instead of `require "mcp/transports/stdio"`.
Also use `MCP::Server::Transports::StdioTransport` instead of `MCP::Transports::StdioTransport`.
This API is deprecated and will be removed in a future release.
```

Currently (v0.1.0), it results in an error without any warning.
This MCP gem is not yet close to version 1.0, but introducing breaking changes to a published interface is undesirable.

This compatibility code should be removed at some point after a few releases.

Closes #50.
2025-06-10 16:27:22 +09:00
Riley Shott
91af9ad19a Gracefully handle POST requests with nil bodies 2025-06-09 14:14:41 -07:00
Riley Shott
580029954f Cleanup logs for examples/http_server.rb 2025-06-09 14:13:49 -07:00
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