oauth2-mcp 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f085908d39436f4a8552bd99340d6048ee7397cc4fbc5e42a0581e30b9db6293
4
- data.tar.gz: c6d0073dbf2cb02073fd1f9895752083c5811b9a080e648ff34a23bb72a873da
3
+ metadata.gz: e668111bb4a8619c601eb7fa95281d5e17fba8c7a8bdbaac2ae1196b3b2d0cc6
4
+ data.tar.gz: fa4b518aae06bda1a3f6ed485403ce139f00f1139689194354afb2c2b00ce05f
5
5
  SHA512:
6
- metadata.gz: 27c17a9a23c70a08b4a770633546f9447b1321ea9a96051d6f6b9bd6ae97bb8a86fbc0a38ecdd128131d1cf1e052f07a6506354dd864d249a6f67ebd870c94f5
7
- data.tar.gz: 168a19002a3952f5f658f4c7bce722efb6ba74da3e65bf62fdc69b12cb714b8b4a4fc16d7ed5039a500b7c8780544148b0aff0f7cf36f821bb06537da9eb8a4a
6
+ metadata.gz: ff2d90c31fb4b6e3dd7da97d63bbf2b9e42fddccc914851a3d97f2b1f8ebed378b6f58c7a3de5d785d437201fbca3297d82faafb8e50c8a71b701f7a70d0da56
7
+ data.tar.gz: 0c65069ebc32409f8ce4d60f27ac0db9ef3e48edf552d5fc3fd9fd761c3910400ce450c1e77bbd4e544ca6ec6ef3dd4d4202cf42a7169923bbbf9ccf065ca906
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,32 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [0.1.1] - 2026-06-15
34
+
35
+ - TAG: [v0.1.1][0.1.1t]
36
+ - COVERAGE: 100.00% -- 285/285 lines in 2 files
37
+ - BRANCH COVERAGE: 100.00% -- 82/82 branches in 2 files
38
+ - 67.05% documented
39
+
40
+ ### Changed
41
+
42
+ - Refreshed generated package metadata, support documentation, CI workflows,
43
+ `version_gem` >= 1.1.12, `appraisal2` >= 3.1.2, `nomono` >= 1.0.4, and
44
+ development dependency floors from the current kettle-jem template.
45
+ - Updated generated OpenCollective funding metadata to use the
46
+ `ruby-oauth` collective.
47
+ - Raised the runtime dependency floor for `oauth2` to `>= 2.0.23`.
48
+ - Updated the locked `auth-sanitizer` runtime dependency to v0.2.1.
49
+ - Updated the locked `snaky_hash` runtime dependency to v2.0.5.
50
+ - Updated generated documentation dependency metadata to require
51
+ `yaml-converter` >= 0.2.1.
52
+
53
+ ### Fixed
54
+
55
+ - Restored `docs/CNAME` so the generated documentation site keeps its custom domain.
56
+ - Fixed generated documentation URLs that incorrectly pointed at a monorepo
57
+ `gems/oauth2-mcp` path.
58
+
33
59
  ## [0.1.0] - 2026-05-28
34
60
 
35
61
  - TAG: [v0.1.0][0.1.0t]
@@ -43,6 +69,8 @@ Please file a bug if you notice a violation of semantic versioning.
43
69
  - Treated unsupported OAuth introspection response shapes as inactive tokens
44
70
  instead of allowing low-level indexing errors to escape.
45
71
 
46
- [Unreleased]: https://github.com/ruby-oauth/oauth2-mcp/compare/v0.1.0...HEAD
72
+ [Unreleased]: https://github.com/ruby-oauth/oauth2-mcp/compare/v0.1.1...HEAD
73
+ [0.1.1]: https://github.com/ruby-oauth/oauth2-mcp/compare/v0.1.0...v0.1.1
74
+ [0.1.1t]: https://github.com/ruby-oauth/oauth2-mcp/releases/tag/v0.1.1
47
75
  [0.1.0]: https://github.com/ruby-oauth/oauth2-mcp/compare/03b55e60f4a464acdaa9ebd4e29556579055f102...v0.1.0
48
76
  [0.1.0t]: https://github.com/ruby-oauth/oauth2-mcp/releases/tag/v0.1.0
data/CITATION.cff CHANGED
@@ -12,9 +12,9 @@ authors:
12
12
  orcid: 'https://orcid.org/0009-0008-8519-441X'
13
13
  identifiers:
14
14
  - type: url
15
- value: 'https://github.com/ruby-oauth/oauth2-mcp/tree/main/gems/oauth2-mcp'
15
+ value: 'https://github.com/ruby-oauth/oauth2-mcp'
16
16
  description: "oauth2-mcp"
17
- repository-code: 'https://github.com/ruby-oauth/oauth2-mcp/tree/main/gems/oauth2-mcp'
17
+ repository-code: 'https://github.com/ruby-oauth/oauth2-mcp'
18
18
  abstract: >-
19
19
  oauth2-mcp
20
20
  license: See license file
data/CONTRIBUTING.md CHANGED
@@ -102,13 +102,29 @@ Git hooks and commit message helpers (exe/kettle-commit-msg)
102
102
  - GIT_HOOK_FOOTER_SENTINEL: Required when footer append is enabled — a unique first-line sentinel to prevent duplicates
103
103
  - GIT_HOOK_FOOTER_APPEND_DEBUG: Extra debug output in the footer template (true/false)
104
104
 
105
+ Git diff driver setup
106
+ - Local setup writes repository `.gitattributes` entries and local Git `diff.smorg-*` command config so this checkout uses StructuredMerge semantic diffs.
107
+ - Global setup registers `diff.smorg-*` commands once in the user Git config; use it when you work across several StructuredMerge-enabled repositories.
108
+ - Include-file setup writes `.git/smorg/config` and includes it from local Git config, keeping command registrations out of the repository files.
109
+ - Git hosting forges generally ignore external diff drivers, so pull request views may still show raw textual diffs even when local `git diff` uses semantic drivers.
110
+
111
+ ```console
112
+ K_JEM_TEMPLATING=true kettle-jem install
113
+ ```
114
+
115
+ Troubleshooting Git diffs
116
+ - Use `git diff --no-ext-diff` to compare against Git's built-in diff output.
117
+ - Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect.
118
+ - If Git reports a missing `smorg-*` executable, rerun `bundle install` and the setup command above, then check `git config --local --get-regexp '^diff\.smorg-'`.
119
+ - To remove managed local entries, run `K_JEM_TEMPLATING=true kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
120
+
105
121
  For a quick starting point, this repository’s `mise.toml` defines the shared defaults, and `.env.local` can override them locally. Copy `.env.local.example` to `.env.local`, use `KEY=value` lines, and either activate `mise` in your shell or run commands through `mise exec -C /path/to/project -- ...`.
106
122
 
107
123
  ## Appraisals
108
124
 
109
125
  From time to time the [appraisal2][🚎appraisal2] gemfiles in `gemfiles/` will need to be updated.
110
126
  Generated appraisal and CI workflow floors are controlled by `ruby.test_minimum`
111
- in `.kettle-jem.yml`; this project was templated with `ruby.test_minimum: 3.2.0`.
127
+ in `.structuredmerge/kettle-jem.yml`; this project was templated with `ruby.test_minimum: 3.2.0`.
112
128
  That value describes the lowest Ruby version expected to run the test/development
113
129
  toolchain, and it may be higher than the gemspec runtime floor.
114
130
 
@@ -233,9 +249,9 @@ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in th
233
249
  14. Run `bundle exec rake release` which will create a git tag for the version,
234
250
  push git commits and tags, and push the `.gem` file to the gem host configured in the gemspec.
235
251
 
236
- [📜src-gl]: https://gitlab.com/ruby-oauth/oauth2-mcp/-/tree/main/gems/oauth2-mcp
237
- [📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp/src/branch/main/gems/oauth2-mcp
238
- [📜src-gh]: https://github.com/ruby-oauth/oauth2-mcp/tree/main/gems/oauth2-mcp
252
+ [📜src-gl]: https://gitlab.com/ruby-oauth/oauth2-mcp
253
+ [📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp
254
+ [📜src-gh]: https://github.com/ruby-oauth/oauth2-mcp
239
255
  [🧪build]: https://github.com/ruby-oauth/oauth2-mcp/actions
240
256
  [🤝conduct]: https://github.com/ruby-oauth/oauth2-mcp/blob/main/CODE_OF_CONDUCT.md
241
257
  [🖐contrib-rocks]: https://contrib.rocks
data/FUNDING.md CHANGED
@@ -4,12 +4,16 @@ Official Discord 👉️ [![Live Chat on Discord][✉️discord-invite-img]][✉
4
4
 
5
5
  Many paths lead to being a sponsor or a backer of this project. Are you on such a path?
6
6
 
7
- [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal]
7
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal]
8
8
 
9
9
  [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
10
10
 
11
11
  [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
12
12
  [⛳liberapay]: https://liberapay.com/pboling/donate
13
+ [🖇osc-backers]: https://opencollective.com/ruby-oauth#backer
14
+ [🖇osc-backers-i]: https://opencollective.com/ruby-oauth/backers/badge.svg?style=flat
15
+ [🖇osc-sponsors]: https://opencollective.com/ruby-oauth#sponsor
16
+ [🖇osc-sponsors-i]: https://opencollective.com/ruby-oauth/sponsors/badge.svg?style=flat
13
17
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
14
18
  [🖇sponsor]: https://github.com/sponsors/pboling
15
19
  [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
@@ -42,7 +46,7 @@ To join the community or get help 👇️ Join the Discord.
42
46
 
43
47
  To say "thanks!" ☝️ Join the Discord or 👇️ send money.
44
48
 
45
- [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
49
+ [![Sponsor ruby-oauth/oauth2-mcp on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
46
50
 
47
51
  # Another Way to Support Open Source Software
48
52
 
@@ -55,6 +59,13 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
55
59
  **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
56
60
 
57
61
  [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
62
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/ruby-oauth
63
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth
64
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/ruby-oauth
65
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/ruby-oauth?style=for-the-badge
66
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth?style=for-the-badge
67
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/ruby-oauth?style=for-the-badge
68
+ [🖇osc]: https://opencollective.com/ruby-oauth
58
69
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
59
70
  [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
60
71
  [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
data/LICENSE.md CHANGED
@@ -7,4 +7,4 @@ Choose the option that best fits your use case:
7
7
 
8
8
  ## Copyright Notice
9
9
 
10
- Copyright (c) 2026 Peter H. Boling
10
+ - Copyright (c) 2026 Peter H. Boling
data/README.md CHANGED
@@ -1,23 +1,16 @@
1
- [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-floss-i]][🖼️galtzo-floss] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![ruby-oauth Logo by Chris Messina, CC BY-SA 3.0][🖼️oauth-i]][🖼️oauth]
1
+ <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" align="right"/></a> <a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by Chris Messina, CC BY-SA 3.0" src="https://logos.galtzo.com/assets/images/oauth/avatar-128px.svg" align="right"/></a>
2
2
 
3
- [🖼️galtzo-floss-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
4
- [🖼️galtzo-floss]: https://discord.gg/3qme4XHNKN
5
- [🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg
6
- [🖼️ruby-lang]: https://www.ruby-lang.org/
7
- [🖼️oauth-i]: https://logos.galtzo.com/assets/images/oauth/avatar-192px.svg
8
- [🖼️oauth]: https://github.com/ruby-oauth
3
+ # 🍲 OAuth2::MCP
9
4
 
10
- # 🔮 OAuth2::MCP
5
+ [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
11
6
 
12
- [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
13
-
14
- `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-floss], as I may have missed the [discord notification][🖼️galtzo-floss].
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
15
8
 
16
9
  ---
17
10
 
18
11
  `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
19
12
 
20
- [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
13
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
21
14
 
22
15
  <details>
23
16
  <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
@@ -26,7 +19,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
26
19
 
27
20
  </details>
28
21
 
29
- ## 🌻 Synopsis
22
+ ## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
30
23
 
31
24
  `oauth2-mcp` is a Ruby resource-server toolkit for securing HTTP Model Context
32
25
  Protocol servers with OAuth 2.1-style bearer authorization.
@@ -76,8 +69,6 @@ not practical for the current toolchain.
76
69
  |------------------------------------------------|--------------------------------------------------------|
77
70
  | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
78
71
 
79
-
80
-
81
72
  ### Federated DVCS
82
73
 
83
74
  <details markdown="1">
@@ -144,7 +135,7 @@ issuer(s), and the scopes your endpoint understands:
144
135
  metadata = OAuth2::MCP::ProtectedResourceMetadata.new(
145
136
  resource: "https://brain.example.com/mcp",
146
137
  authorization_servers: ["https://example.authkit.app"],
147
- scopes_supported: %w[memory.read memory.write],
138
+ scopes_supported: %w[memory.read memory.write]
148
139
  )
149
140
  ```
150
141
 
@@ -164,8 +155,8 @@ server needs internal permission names:
164
155
  scope_mapper = OAuth2::MCP::ScopeMapper.new(
165
156
  mapping: {
166
157
  "memory.read" => "documents_read",
167
- "memory.write" => "documents_write",
168
- },
158
+ "memory.write" => "documents_write"
159
+ }
169
160
  )
170
161
  ```
171
162
 
@@ -178,7 +169,7 @@ resource_server = OAuth2::MCP::ResourceServer.new(
178
169
  resource_metadata: metadata,
179
170
  resource_metadata_url: "https://brain.example.com/.well-known/oauth-protected-resource/mcp",
180
171
  validator: validator,
181
- scope_mapper: scope_mapper,
172
+ scope_mapper: scope_mapper
182
173
  )
183
174
  ```
184
175
 
@@ -190,7 +181,7 @@ Build protected-resource metadata for an MCP endpoint:
190
181
  metadata = OAuth2::MCP::ProtectedResourceMetadata.new(
191
182
  resource: "https://brain.example.com/mcp",
192
183
  authorization_servers: ["https://example.authkit.app"],
193
- scopes_supported: %w[memory.read memory.write],
184
+ scopes_supported: %w[memory.read memory.write]
194
185
  )
195
186
 
196
187
  metadata.to_json
@@ -203,7 +194,7 @@ challenge = OAuth2::MCP::BearerChallenge.new(
203
194
  resource_metadata: "https://brain.example.com/.well-known/oauth-protected-resource/mcp",
204
195
  scope: %w[memory.read],
205
196
  error: "insufficient_scope",
206
- error_description: "memory.read is required",
197
+ error_description: "memory.read is required"
207
198
  )
208
199
 
209
200
  headers["WWW-Authenticate"] = challenge.to_header
@@ -215,32 +206,32 @@ Authorize an MCP HTTP request with a provider-specific token validator:
215
206
  metadata = OAuth2::MCP::ProtectedResourceMetadata.new(
216
207
  resource: "https://brain.example.com/mcp",
217
208
  authorization_servers: ["https://example.authkit.app"],
218
- scopes_supported: %w[memory.read memory.write],
209
+ scopes_supported: %w[memory.read memory.write]
219
210
  )
220
211
 
221
212
  validator = OAuth2::MCP::JWTValidator.new(
222
213
  jwks: {"keys" => provider_jwks},
223
214
  issuer: "https://example.authkit.app",
224
- audience: "https://brain.example.com/mcp",
215
+ audience: "https://brain.example.com/mcp"
225
216
  )
226
217
 
227
218
  scope_mapper = OAuth2::MCP::ScopeMapper.new(
228
219
  mapping: {
229
220
  "memory.read" => "documents_read",
230
- "memory.write" => "documents_write",
231
- },
221
+ "memory.write" => "documents_write"
222
+ }
232
223
  )
233
224
 
234
225
  resource_server = OAuth2::MCP::ResourceServer.new(
235
226
  resource_metadata: metadata,
236
227
  resource_metadata_url: "https://brain.example.com/.well-known/oauth-protected-resource/mcp",
237
228
  validator: validator,
238
- scope_mapper: scope_mapper,
229
+ scope_mapper: scope_mapper
239
230
  )
240
231
 
241
232
  result = resource_server.authorize(
242
233
  request: rack_env,
243
- scopes: ["memory.read"],
234
+ scopes: ["memory.read"]
244
235
  )
245
236
 
246
237
  halt result.status, result.headers, "" unless result.allowed?
@@ -258,9 +249,9 @@ Or build the validator from OIDC discovery:
258
249
 
259
250
  ```ruby
260
251
  validator = OAuth2::MCP::OIDCDiscovery.new(
261
- issuer: "https://example.authkit.app",
252
+ issuer: "https://example.authkit.app"
262
253
  ).jwt_validator(
263
- audience: "https://brain.example.com/mcp",
254
+ audience: "https://brain.example.com/mcp"
264
255
  )
265
256
  ```
266
257
 
@@ -270,7 +261,7 @@ issuer and `/oauth2/jwks` endpoint:
270
261
  ```ruby
271
262
  validator = OAuth2::MCP::WorkOSAuthKit.new(
272
263
  subdomain: "acme",
273
- audience: "https://brain.example.com/mcp",
264
+ audience: "https://brain.example.com/mcp"
274
265
  )
275
266
  ```
276
267
 
@@ -282,7 +273,7 @@ validator = OAuth2::MCP::IntrospectionValidator.new(
282
273
  client: oauth_client,
283
274
  introspection_url: "https://auth.example.com/oauth2/introspection",
284
275
  audience: "https://brain.example.com/mcp",
285
- issuer: "https://auth.example.com",
276
+ issuer: "https://auth.example.com"
286
277
  )
287
278
  ```
288
279
 
@@ -293,7 +284,7 @@ Raising a monthly budget of... "dollars" would make the project more sustainable
293
284
 
294
285
  We welcome both individual and corporate sponsors! We also offer a
295
286
  wide array of funding channels to account for your preferences.
296
- Currently, [GitHub Sponsors][🖇sponsor], and [Liberapay][⛳liberapay] are our preferred funding platforms.
287
+ Currently, [Open Collective][🖇osc] is our preferred funding platform.
297
288
 
298
289
  **If you're working in a company that's making significant use of ruby-oauth tools we'd
299
290
  appreciate it if you suggest to your company to become a ruby-oauth sponsor.**
@@ -302,12 +293,34 @@ You can support the development of ruby-oauth tools via
302
293
  [GitHub Sponsors][🖇sponsor],
303
294
  [Liberapay][⛳liberapay],
304
295
  [PayPal][🖇paypal],
296
+ [Open Collective][🖇osc]
305
297
  and [Tidelift][🏙️entsup-tidelift].
306
298
 
307
299
  | 📍 NOTE |
308
300
  |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
309
301
  | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
310
302
 
303
+ ### Open Collective for Individuals
304
+
305
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/ruby-oauth#backer)]
306
+
307
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
308
+
309
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
310
+ No backers yet. Be the first!
311
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
312
+
313
+ ### Open Collective for Organizations
314
+
315
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/ruby-oauth#sponsor)]
316
+
317
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
318
+
319
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
320
+ No sponsors yet. Be the first!
321
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
322
+
323
+ [kettle-readme-backers]: https://github.com/ruby-oauth/oauth2-mcp/blob/main/exe/kettle-readme-backers
311
324
 
312
325
  ### Another way to support open-source
313
326
 
@@ -319,7 +332,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
319
332
 
320
333
  **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
321
334
 
322
- [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
335
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
323
336
 
324
337
  ## 🔐 Security
325
338
 
@@ -435,15 +448,28 @@ To join the community or get help 👇️ Join the Discord.
435
448
 
436
449
  To say "thanks!" ☝️ Join the Discord or 👇️ send money.
437
450
 
438
- [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
451
+ [![Sponsor ruby-oauth/oauth2-mcp on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
439
452
 
440
453
  ### Please give the project a star ⭐ ♥.
441
454
 
455
+ Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
456
+
442
457
  Thanks for RTFM. ☺️
443
458
 
444
459
  [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
445
460
  [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
446
461
  [⛳liberapay]: https://liberapay.com/pboling/donate
462
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/ruby-oauth
463
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth
464
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/ruby-oauth
465
+ [🖇osc-backers]: https://opencollective.com/ruby-oauth#backer
466
+ [🖇osc-backers-i]: https://opencollective.com/ruby-oauth/backers/badge.svg?style=flat
467
+ [🖇osc-sponsors]: https://opencollective.com/ruby-oauth#sponsor
468
+ [🖇osc-sponsors-i]: https://opencollective.com/ruby-oauth/sponsors/badge.svg?style=flat
469
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/ruby-oauth?style=for-the-badge
470
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth?style=for-the-badge
471
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/ruby-oauth?style=for-the-badge
472
+ [🖇osc]: https://opencollective.com/ruby-oauth
447
473
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
448
474
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
449
475
  [🖇sponsor]: https://github.com/sponsors/pboling
@@ -467,7 +493,7 @@ Thanks for RTFM. ☺️
467
493
  [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
468
494
 
469
495
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
470
- [⛳️gem-namespace]: https://github.com/ruby-oauth/oauth2-mcp/tree/main/gems/oauth2-mcp
496
+ [⛳️gem-namespace]: https://github.com/ruby-oauth/oauth2-mcp
471
497
  [⛳️namespace-img]: https://img.shields.io/badge/namespace-OAuth2::MCP-3C2D2D.svg?style=square&logo=ruby&logoColor=white
472
498
  [⛳️gem-name]: https://bestgems.org/gems/oauth2-mcp
473
499
  [⛳️name-img]: https://img.shields.io/badge/name-oauth2--mcp-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
@@ -507,11 +533,11 @@ Thanks for RTFM. ☺️
507
533
  [💁🏼‍♂️peterboling]: http://www.peterboling.com
508
534
  [🚂railsbling]: http://www.railsbling.com
509
535
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
510
- [📜src-gl]: https://gitlab.com/ruby-oauth/oauth2-mcp/-/tree/main/gems/oauth2-mcp
536
+ [📜src-gl]: https://gitlab.com/ruby-oauth/oauth2-mcp
511
537
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
512
- [📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp/src/branch/main/gems/oauth2-mcp
538
+ [📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp
513
539
  [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
514
- [📜src-gh]: https://github.com/ruby-oauth/oauth2-mcp/tree/main/gems/oauth2-mcp
540
+ [📜src-gh]: https://github.com/ruby-oauth/oauth2-mcp
515
541
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
516
542
  [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
517
543
  [📜gl-wiki]: https://gitlab.com/ruby-oauth/oauth2-mcp/-/wikis/home
@@ -530,8 +556,6 @@ Thanks for RTFM. ☺️
530
556
  [🏀codecovi]: https://codecov.io/gh/ruby-oauth/oauth2-mcp/graph/badge.svg
531
557
  [🏀coveralls]: https://coveralls.io/github/ruby-oauth/oauth2-mcp?branch=main
532
558
  [🏀coveralls-img]: https://coveralls.io/repos/github/ruby-oauth/oauth2-mcp/badge.svg?branch=main
533
- [🖐codeQL]: https://github.com/ruby-oauth/oauth2-mcp/security/code-scanning
534
- [🖐codeQL-img]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/codeql-analysis.yml/badge.svg
535
559
  [🚎ruby-3.2-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/ruby-3.2.yml
536
560
  [🚎ruby-3.3-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/ruby-3.3.yml
537
561
  [🚎ruby-3.4-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/ruby-3.4.yml
@@ -602,7 +626,7 @@ Thanks for RTFM. ☺️
602
626
  [📄license-ref]: MIT.md
603
627
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
604
628
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
605
- [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-✓-259D6C.svg?style=flat&logo=Apache
629
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
606
630
 
607
631
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
608
632
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
@@ -620,9 +644,9 @@ Thanks for RTFM. ☺️
620
644
  | Field | Value |
621
645
  |---|---|
622
646
  | Package | oauth2-mcp |
623
- | Description | 🔮 oauth2-mcp provides Ruby helpers for securing HTTP Model Context Protocol servers with OAuth protected-resource metadata, bearer challenges, and scoped authorization. |
647
+ | Description | 🍲 oauth2-mcp provides Ruby helpers for securing HTTP Model Context Protocol servers with OAuth protected-resource metadata, bearer challenges, and scoped authorization. |
624
648
  | Homepage | https://github.com/ruby-oauth/oauth2-mcp |
625
649
  | Source | https://github.com/ruby-oauth/oauth2-mcp/tree/v0.1.0 |
626
650
  | License | `MIT` |
627
- | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/oauth2-mcp, https://www.buymeacoffee.com/pboling |
651
+ | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/oauth2-mcp, https://www.buymeacoffee.com/pboling |
628
652
  <!-- kettle-jem:metadata:end -->
data/SECURITY.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Version | Supported |
6
6
  |----------|-----------|
7
- | 1.latest | ✅ |
7
+ | 0.latest | ✅ |
8
8
 
9
9
  ## Security contact information
10
10
 
@@ -3,7 +3,7 @@
3
3
  module OAuth2
4
4
  module MCP
5
5
  module Version
6
- VERSION = "0.1.0"
6
+ VERSION = "0.1.1"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
data/lib/oauth2/mcp.rb CHANGED
@@ -39,7 +39,7 @@ module OAuth2
39
39
  audience: first_value(hash, :audience, "audience", :aud, "aud") || [],
40
40
  issuer: first_value(hash, :issuer, "issuer", :iss, "iss"),
41
41
  expires_at: first_value(hash, :expires_at, "expires_at", :exp, "exp"),
42
- raw: hash,
42
+ raw: hash
43
43
  )
44
44
  end
45
45
 
@@ -162,7 +162,7 @@ module OAuth2
162
162
  iss: issuer,
163
163
  verify_aud: !audience.nil?,
164
164
  aud: audience,
165
- leeway: leeway,
165
+ leeway: leeway
166
166
  }
167
167
  end
168
168
 
@@ -197,7 +197,7 @@ module OAuth2
197
197
  issuer: issuer,
198
198
  audience: audience,
199
199
  algorithms: algorithms || default_algorithms,
200
- leeway: leeway,
200
+ leeway: leeway
201
201
  )
202
202
  end
203
203
 
@@ -255,7 +255,7 @@ module OAuth2
255
255
  body: URI.encode_www_form(token: token, token_type_hint: token_type_hint),
256
256
  headers: {"Content-Type" => "application/x-www-form-urlencoded"},
257
257
  parse: :json,
258
- snaky: false,
258
+ snaky: false
259
259
  }
260
260
  end
261
261
 
@@ -294,7 +294,7 @@ module OAuth2
294
294
  issuer: issuer,
295
295
  audience: audience,
296
296
  algorithms: algorithms,
297
- leeway: leeway,
297
+ leeway: leeway
298
298
  )
299
299
  end
300
300
 
@@ -365,7 +365,7 @@ module OAuth2
365
365
  error: error,
366
366
  error_description: error_description,
367
367
  required_scopes: required_scopes,
368
- challenge: challenge,
368
+ challenge: challenge
369
369
  )
370
370
  end
371
371
  end
@@ -455,7 +455,7 @@ module OAuth2
455
455
  status: 401,
456
456
  error: nil,
457
457
  error_description: nil,
458
- required_scopes: required_scopes,
458
+ required_scopes: required_scopes
459
459
  )
460
460
  end
461
461
 
@@ -464,7 +464,7 @@ module OAuth2
464
464
  status: 401,
465
465
  error: "invalid_token",
466
466
  error_description: description,
467
- required_scopes: required_scopes,
467
+ required_scopes: required_scopes
468
468
  )
469
469
  end
470
470
 
@@ -473,7 +473,7 @@ module OAuth2
473
473
  status: 403,
474
474
  error: "insufficient_scope",
475
475
  error_description: "Additional scope is required.",
476
- required_scopes: required_scopes,
476
+ required_scopes: required_scopes
477
477
  )
478
478
  end
479
479
 
@@ -483,7 +483,7 @@ module OAuth2
483
483
  error: error,
484
484
  error_description: error_description,
485
485
  required_scopes: required_scopes,
486
- challenge: challenge(error: error, error_description: error_description, required_scopes: required_scopes),
486
+ challenge: challenge(error: error, error_description: error_description, required_scopes: required_scopes)
487
487
  )
488
488
  end
489
489
 
@@ -492,7 +492,7 @@ module OAuth2
492
492
  resource_metadata: resource_metadata_url,
493
493
  scope: required_scopes,
494
494
  error: error,
495
- error_description: error_description,
495
+ error_description: error_description
496
496
  )
497
497
  end
498
498
  end
@@ -516,7 +516,7 @@ module OAuth2
516
516
  {
517
517
  resource: resource,
518
518
  authorization_servers: authorization_servers,
519
- scopes_supported: scopes_supported,
519
+ scopes_supported: scopes_supported
520
520
  }.merge(metadata).compact
521
521
  end
522
522
 
@@ -550,7 +550,7 @@ module OAuth2
550
550
  resource_metadata: resource_metadata,
551
551
  scope: format_scope(scope),
552
552
  error: error,
553
- error_description: error_description,
553
+ error_description: error_description
554
554
  }.compact
555
555
 
556
556
  "Bearer #{parameters.map { |key, value| %(#{key}="#{escape(value)}") }.join(", ")}"
data/sig/oauth2/mcp.rbs CHANGED
@@ -1,7 +1,5 @@
1
1
  module OAuth2
2
2
  module MCP
3
- VERSION: String
4
-
5
3
  class Error < StandardError
6
4
  end
7
5
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth2-mcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -61,22 +61,22 @@ dependencies:
61
61
  name: oauth2
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - ">="
64
+ - - "~>"
65
65
  - !ruby/object:Gem::Version
66
66
  version: '2.0'
67
- - - "~>"
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 2.0.20
69
+ version: 2.0.23
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ">="
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '2.0'
77
- - - "~>"
77
+ - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 2.0.20
79
+ version: 2.0.23
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: version_gem
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -86,7 +86,7 @@ dependencies:
86
86
  version: '1.1'
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 1.1.9
89
+ version: 1.1.12
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
@@ -96,27 +96,27 @@ dependencies:
96
96
  version: '1.1'
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 1.1.9
99
+ version: 1.1.12
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: kettle-dev
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - "~>"
105
105
  - !ruby/object:Gem::Version
106
- version: '2.0'
106
+ version: '2.2'
107
107
  - - ">="
108
108
  - !ruby/object:Gem::Version
109
- version: 2.0.5
109
+ version: 2.2.9
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '2.0'
116
+ version: '2.2'
117
117
  - - ">="
118
118
  - !ruby/object:Gem::Version
119
- version: 2.0.5
119
+ version: 2.2.9
120
120
  - !ruby/object:Gem::Dependency
121
121
  name: bundler-audit
122
122
  requirement: !ruby/object:Gem::Requirement
@@ -171,20 +171,20 @@ dependencies:
171
171
  requirements:
172
172
  - - "~>"
173
173
  - !ruby/object:Gem::Version
174
- version: '3.0'
174
+ version: '3.1'
175
175
  - - ">="
176
176
  - !ruby/object:Gem::Version
177
- version: 3.0.6
177
+ version: 3.1.2
178
178
  type: :development
179
179
  prerelease: false
180
180
  version_requirements: !ruby/object:Gem::Requirement
181
181
  requirements:
182
182
  - - "~>"
183
183
  - !ruby/object:Gem::Version
184
- version: '3.0'
184
+ version: '3.1'
185
185
  - - ">="
186
186
  - !ruby/object:Gem::Version
187
- version: 3.0.6
187
+ version: 3.1.2
188
188
  - !ruby/object:Gem::Dependency
189
189
  name: kettle-test
190
190
  requirement: !ruby/object:Gem::Requirement
@@ -194,7 +194,7 @@ dependencies:
194
194
  version: '2.0'
195
195
  - - ">="
196
196
  - !ruby/object:Gem::Version
197
- version: 2.0.1
197
+ version: 2.0.5
198
198
  type: :development
199
199
  prerelease: false
200
200
  version_requirements: !ruby/object:Gem::Requirement
@@ -204,7 +204,27 @@ dependencies:
204
204
  version: '2.0'
205
205
  - - ">="
206
206
  - !ruby/object:Gem::Version
207
- version: 2.0.1
207
+ version: 2.0.5
208
+ - !ruby/object:Gem::Dependency
209
+ name: turbo_tests2
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '3.1'
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: 3.1.3
218
+ type: :development
219
+ prerelease: false
220
+ version_requirements: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - "~>"
223
+ - !ruby/object:Gem::Version
224
+ version: '3.1'
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: 3.1.3
208
228
  - !ruby/object:Gem::Dependency
209
229
  name: ruby-progressbar
210
230
  requirement: !ruby/object:Gem::Requirement
@@ -248,7 +268,7 @@ dependencies:
248
268
  version: '2.0'
249
269
  - - ">="
250
270
  - !ruby/object:Gem::Version
251
- version: 2.0.0
271
+ version: 2.0.2
252
272
  type: :development
253
273
  prerelease: false
254
274
  version_requirements: !ruby/object:Gem::Requirement
@@ -258,12 +278,12 @@ dependencies:
258
278
  version: '2.0'
259
279
  - - ">="
260
280
  - !ruby/object:Gem::Version
261
- version: 2.0.0
262
- description: "\U0001F52E oauth2-mcp provides Ruby helpers for securing HTTP Model
281
+ version: 2.0.2
282
+ description: "\U0001F372 oauth2-mcp provides Ruby helpers for securing HTTP Model
263
283
  Context Protocol servers with OAuth protected-resource metadata, bearer challenges,
264
284
  and scoped authorization."
265
285
  email:
266
- - peter.boling@gmail.com
286
+ - floss@galtzo.com
267
287
  executables: []
268
288
  extensions: []
269
289
  extra_rdoc_files:
@@ -296,10 +316,10 @@ licenses:
296
316
  - MIT
297
317
  metadata:
298
318
  homepage_uri: https://structuredmerge.org
299
- source_code_uri: https://github.com/ruby-oauth/oauth2-mcp/tree/v0.1.0
300
- changelog_uri: https://github.com/ruby-oauth/oauth2-mcp/blob/v0.1.0/CHANGELOG.md
319
+ source_code_uri: https://github.com/ruby-oauth/oauth2-mcp/tree/v0.1.1
320
+ changelog_uri: https://github.com/ruby-oauth/oauth2-mcp/blob/v0.1.1/CHANGELOG.md
301
321
  bug_tracker_uri: https://github.com/ruby-oauth/oauth2-mcp/issues
302
- documentation_uri: https://www.rubydoc.info/gems/oauth2-mcp/0.1.0
322
+ documentation_uri: https://www.rubydoc.info/gems/oauth2-mcp/0.1.1
303
323
  funding_uri: https://github.com/sponsors/pboling
304
324
  wiki_uri: https://github.com/ruby-oauth/oauth2-mcp/wiki
305
325
  news_uri: https://www.railsbling.com/tags/oauth2-mcp
@@ -307,7 +327,7 @@ metadata:
307
327
  rubygems_mfa_required: 'true'
308
328
  rdoc_options:
309
329
  - "--title"
310
- - "oauth2-mcp - \U0001F52E OAuth 2.1 resource-server helpers for MCP servers."
330
+ - "oauth2-mcp - \U0001F372 OAuth 2.1 resource-server helpers for MCP servers."
311
331
  - "--main"
312
332
  - README.md
313
333
  - "--exclude"
@@ -330,5 +350,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
330
350
  requirements: []
331
351
  rubygems_version: 4.0.10
332
352
  specification_version: 4
333
- summary: "\U0001F52E OAuth 2.1 resource-server helpers for MCP servers."
353
+ summary: "\U0001F372 OAuth 2.1 resource-server helpers for MCP servers."
334
354
  test_files: []
metadata.gz.sig CHANGED
Binary file