oauth2-mcp 0.1.0 → 0.1.2
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +55 -1
- data/CITATION.cff +2 -2
- data/CONTRIBUTING.md +24 -5
- data/FUNDING.md +14 -7
- data/LICENSE.md +1 -1
- data/MIT.md +21 -0
- data/README.md +99 -55
- data/SECURITY.md +1 -1
- data/lib/oauth2/mcp/version.rb +1 -1
- data/lib/oauth2/mcp.rb +13 -13
- data/sig/oauth2/mcp.rbs +0 -2
- data.tar.gz.sig +0 -0
- metadata +53 -32
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9081c4f81e43038eb6d8d05df66e33efcdfc88823aa05f43696a4b60554c0ada
|
|
4
|
+
data.tar.gz: 88e3823dd00208e5081f8dc40e31aa0bcc34c75e03f8505d1cab12d5c0e369f0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ae9d905301d29dee55608baf1ee803b4b2edfcd242fff7998861fc327afc7cb4cd09eb5cb39efdf8794dc7aca54087910330516eda2e16b7b0f52fa02fe638dd
|
|
7
|
+
data.tar.gz: 14e288b5816c8a8d7a7101493781d0fddec2b2b0c74508a513b54b692b2aefee190eecbed508a7b80ac29ea76d7c15415542cb0c9cd59ea371c7df1aa2f0cf8f
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,56 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [0.1.2] - 2026-07-14
|
|
34
|
+
|
|
35
|
+
- TAG: [v0.1.2][0.1.2t]
|
|
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
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Added support for JRuby 10.1 and TruffleRuby 34.0.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Retemplated generated project metadata, support documentation, CI workflows,
|
|
47
|
+
binstubs, and development dependency floors with `kettle-jem` v7.0.0.
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
- Corrected RubyGems homepage metadata to point at the gem documentation site.
|
|
52
|
+
- Corrected persisted Open Collective metadata to use the `ruby-oauth`
|
|
53
|
+
collective.
|
|
54
|
+
|
|
55
|
+
- Package configured license files in gem release file lists.
|
|
56
|
+
|
|
57
|
+
## [0.1.1] - 2026-06-15
|
|
58
|
+
|
|
59
|
+
- TAG: [v0.1.1][0.1.1t]
|
|
60
|
+
- COVERAGE: 100.00% -- 285/285 lines in 2 files
|
|
61
|
+
- BRANCH COVERAGE: 100.00% -- 82/82 branches in 2 files
|
|
62
|
+
- 67.05% documented
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
|
|
66
|
+
- Refreshed generated package metadata, support documentation, CI workflows,
|
|
67
|
+
`version_gem` >= 1.1.12, `appraisal2` >= 3.1.2, `nomono` >= 1.0.4, and
|
|
68
|
+
development dependency floors from the current kettle-jem template.
|
|
69
|
+
- Updated generated OpenCollective funding metadata to use the
|
|
70
|
+
`ruby-oauth` collective.
|
|
71
|
+
- Raised the runtime dependency floor for `oauth2` to `>= 2.0.23`.
|
|
72
|
+
- Updated the locked `auth-sanitizer` runtime dependency to v0.2.1.
|
|
73
|
+
- Updated the locked `snaky_hash` runtime dependency to v2.0.5.
|
|
74
|
+
- Updated generated documentation dependency metadata to require
|
|
75
|
+
`yaml-converter` >= 0.2.1.
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- Restored `docs/CNAME` so the generated documentation site keeps its custom domain.
|
|
80
|
+
- Fixed generated documentation URLs that incorrectly pointed at a monorepo
|
|
81
|
+
`gems/oauth2-mcp` path.
|
|
82
|
+
|
|
33
83
|
## [0.1.0] - 2026-05-28
|
|
34
84
|
|
|
35
85
|
- TAG: [v0.1.0][0.1.0t]
|
|
@@ -43,6 +93,10 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
43
93
|
- Treated unsupported OAuth introspection response shapes as inactive tokens
|
|
44
94
|
instead of allowing low-level indexing errors to escape.
|
|
45
95
|
|
|
46
|
-
[Unreleased]: https://github.com/ruby-oauth/oauth2-mcp/compare/v0.1.
|
|
96
|
+
[Unreleased]: https://github.com/ruby-oauth/oauth2-mcp/compare/v0.1.2...HEAD
|
|
97
|
+
[0.1.2]: https://github.com/ruby-oauth/oauth2-mcp/compare/v0.1.1...v0.1.2
|
|
98
|
+
[0.1.2t]: https://github.com/ruby-oauth/oauth2-mcp/releases/tag/v0.1.2
|
|
99
|
+
[0.1.1]: https://github.com/ruby-oauth/oauth2-mcp/compare/v0.1.0...v0.1.1
|
|
100
|
+
[0.1.1t]: https://github.com/ruby-oauth/oauth2-mcp/releases/tag/v0.1.1
|
|
47
101
|
[0.1.0]: https://github.com/ruby-oauth/oauth2-mcp/compare/03b55e60f4a464acdaa9ebd4e29556579055f102...v0.1.0
|
|
48
102
|
[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
|
|
15
|
+
value: 'https://github.com/ruby-oauth/oauth2-mcp'
|
|
16
16
|
description: "oauth2-mcp"
|
|
17
|
-
repository-code: 'https://github.com/ruby-oauth/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,22 +102,41 @@ 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
|
|
|
115
131
|
They are created and updated with the commands:
|
|
116
132
|
|
|
117
133
|
```console
|
|
118
|
-
bin/rake appraisal:
|
|
134
|
+
bin/rake appraisal:generate
|
|
119
135
|
```
|
|
120
136
|
|
|
137
|
+
Use `bin/rake appraisal:update` when you intentionally need to resolve fresh
|
|
138
|
+
appraisal locks.
|
|
139
|
+
|
|
121
140
|
If you need to reset all gemfiles/*.gemfile.lock files:
|
|
122
141
|
|
|
123
142
|
```console
|
|
@@ -233,9 +252,9 @@ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in th
|
|
|
233
252
|
14. Run `bundle exec rake release` which will create a git tag for the version,
|
|
234
253
|
push git commits and tags, and push the `.gem` file to the gem host configured in the gemspec.
|
|
235
254
|
|
|
236
|
-
[📜src-gl]: https://gitlab.com/ruby-oauth/oauth2-mcp
|
|
237
|
-
[📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp
|
|
238
|
-
[📜src-gh]: https://github.com/ruby-oauth/oauth2-mcp
|
|
255
|
+
[📜src-gl]: https://gitlab.com/ruby-oauth/oauth2-mcp
|
|
256
|
+
[📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp
|
|
257
|
+
[📜src-gh]: https://github.com/ruby-oauth/oauth2-mcp
|
|
239
258
|
[🧪build]: https://github.com/ruby-oauth/oauth2-mcp/actions
|
|
240
259
|
[🤝conduct]: https://github.com/ruby-oauth/oauth2-mcp/blob/main/CODE_OF_CONDUCT.md
|
|
241
260
|
[🖐contrib-rocks]: https://contrib.rocks
|
data/FUNDING.md
CHANGED
|
@@ -4,20 +4,20 @@ 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
|
-
[![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
9
|
+
[![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
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
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
16
|
-
[🖇polar]: https://polar.sh/pboling
|
|
17
19
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
18
20
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
19
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
20
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
21
21
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
22
22
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
23
23
|
[🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
|
|
@@ -42,7 +42,7 @@ To join the community or get help 👇️ Join the Discord.
|
|
|
42
42
|
|
|
43
43
|
To say "thanks!" ☝️ Join the Discord or 👇️ send money.
|
|
44
44
|
|
|
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]
|
|
45
|
+
[![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
46
|
|
|
47
47
|
# Another Way to Support Open Source Software
|
|
48
48
|
|
|
@@ -55,6 +55,13 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
55
55
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
56
56
|
|
|
57
57
|
[⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
|
|
58
|
+
[🖇osc-all-img]: https://img.shields.io/opencollective/all/ruby-oauth
|
|
59
|
+
[🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth
|
|
60
|
+
[🖇osc-backers-img]: https://img.shields.io/opencollective/backers/ruby-oauth
|
|
61
|
+
[🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/ruby-oauth?style=for-the-badge
|
|
62
|
+
[🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth?style=for-the-badge
|
|
63
|
+
[🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/ruby-oauth?style=for-the-badge
|
|
64
|
+
[🖇osc]: https://opencollective.com/ruby-oauth
|
|
58
65
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
59
66
|
[🖇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
67
|
[🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
|
data/LICENSE.md
CHANGED
data/MIT.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
See [LICENSE.md](LICENSE.md) for the copyright notice.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
|
@@ -1,32 +1,25 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
21
14
|
|
|
22
|
-
<details>
|
|
15
|
+
<details markdown="1">
|
|
23
16
|
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
24
17
|
|
|
25
18
|
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
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.
|
|
@@ -52,9 +45,9 @@ claims and mapped capabilities, not the raw bearer token.
|
|
|
52
45
|
|
|
53
46
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
54
47
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
55
|
-
| Works with JRuby | [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
56
|
-
| Works with Truffle Ruby | [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
|
|
57
|
-
| Works with MRI Ruby 4 | [![Ruby
|
|
48
|
+
| Works with JRuby | [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
49
|
+
| Works with Truffle Ruby | [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
|
|
50
|
+
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
58
51
|
| Works with MRI Ruby 3 | [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
|
|
59
52
|
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
60
53
|
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
|
|
@@ -72,11 +65,25 @@ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
|
72
65
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
73
66
|
not practical for the current toolchain.
|
|
74
67
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
<a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
|
|
69
|
+
|
|
70
|
+
The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
78
71
|
|
|
72
|
+
<details markdown="1">
|
|
73
|
+
<summary>How kettle-dev manages complexity in tests</summary>
|
|
74
|
+
|
|
75
|
+
| Gem | Source | Role | Daily download rank |
|
|
76
|
+
|-----|--------|------|---------------------|
|
|
77
|
+
| [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](https://bestgems.org/gems/appraisal2) |
|
|
78
|
+
| [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [](https://bestgems.org/gems/appraisal2-rubocop) |
|
|
79
|
+
| [kettle-dev](https://bestgems.org/gems/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [](https://bestgems.org/gems/kettle-dev) |
|
|
80
|
+
| [kettle-jem](https://bestgems.org/gems/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [](https://bestgems.org/gems/kettle-jem) |
|
|
81
|
+
| [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [](https://bestgems.org/gems/kettle-soup-cover) |
|
|
82
|
+
| [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [](https://bestgems.org/gems/kettle-test) |
|
|
83
|
+
| [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [](https://bestgems.org/gems/rubocop-lts) |
|
|
84
|
+
| [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [](https://bestgems.org/gems/turbo_tests2) |
|
|
79
85
|
|
|
86
|
+
</details>
|
|
80
87
|
|
|
81
88
|
### Federated DVCS
|
|
82
89
|
|
|
@@ -144,7 +151,7 @@ issuer(s), and the scopes your endpoint understands:
|
|
|
144
151
|
metadata = OAuth2::MCP::ProtectedResourceMetadata.new(
|
|
145
152
|
resource: "https://brain.example.com/mcp",
|
|
146
153
|
authorization_servers: ["https://example.authkit.app"],
|
|
147
|
-
scopes_supported: %w[memory.read memory.write]
|
|
154
|
+
scopes_supported: %w[memory.read memory.write]
|
|
148
155
|
)
|
|
149
156
|
```
|
|
150
157
|
|
|
@@ -164,8 +171,8 @@ server needs internal permission names:
|
|
|
164
171
|
scope_mapper = OAuth2::MCP::ScopeMapper.new(
|
|
165
172
|
mapping: {
|
|
166
173
|
"memory.read" => "documents_read",
|
|
167
|
-
"memory.write" => "documents_write"
|
|
168
|
-
}
|
|
174
|
+
"memory.write" => "documents_write"
|
|
175
|
+
}
|
|
169
176
|
)
|
|
170
177
|
```
|
|
171
178
|
|
|
@@ -178,7 +185,7 @@ resource_server = OAuth2::MCP::ResourceServer.new(
|
|
|
178
185
|
resource_metadata: metadata,
|
|
179
186
|
resource_metadata_url: "https://brain.example.com/.well-known/oauth-protected-resource/mcp",
|
|
180
187
|
validator: validator,
|
|
181
|
-
scope_mapper: scope_mapper
|
|
188
|
+
scope_mapper: scope_mapper
|
|
182
189
|
)
|
|
183
190
|
```
|
|
184
191
|
|
|
@@ -190,7 +197,7 @@ Build protected-resource metadata for an MCP endpoint:
|
|
|
190
197
|
metadata = OAuth2::MCP::ProtectedResourceMetadata.new(
|
|
191
198
|
resource: "https://brain.example.com/mcp",
|
|
192
199
|
authorization_servers: ["https://example.authkit.app"],
|
|
193
|
-
scopes_supported: %w[memory.read memory.write]
|
|
200
|
+
scopes_supported: %w[memory.read memory.write]
|
|
194
201
|
)
|
|
195
202
|
|
|
196
203
|
metadata.to_json
|
|
@@ -203,7 +210,7 @@ challenge = OAuth2::MCP::BearerChallenge.new(
|
|
|
203
210
|
resource_metadata: "https://brain.example.com/.well-known/oauth-protected-resource/mcp",
|
|
204
211
|
scope: %w[memory.read],
|
|
205
212
|
error: "insufficient_scope",
|
|
206
|
-
error_description: "memory.read is required"
|
|
213
|
+
error_description: "memory.read is required"
|
|
207
214
|
)
|
|
208
215
|
|
|
209
216
|
headers["WWW-Authenticate"] = challenge.to_header
|
|
@@ -215,32 +222,32 @@ Authorize an MCP HTTP request with a provider-specific token validator:
|
|
|
215
222
|
metadata = OAuth2::MCP::ProtectedResourceMetadata.new(
|
|
216
223
|
resource: "https://brain.example.com/mcp",
|
|
217
224
|
authorization_servers: ["https://example.authkit.app"],
|
|
218
|
-
scopes_supported: %w[memory.read memory.write]
|
|
225
|
+
scopes_supported: %w[memory.read memory.write]
|
|
219
226
|
)
|
|
220
227
|
|
|
221
228
|
validator = OAuth2::MCP::JWTValidator.new(
|
|
222
229
|
jwks: {"keys" => provider_jwks},
|
|
223
230
|
issuer: "https://example.authkit.app",
|
|
224
|
-
audience: "https://brain.example.com/mcp"
|
|
231
|
+
audience: "https://brain.example.com/mcp"
|
|
225
232
|
)
|
|
226
233
|
|
|
227
234
|
scope_mapper = OAuth2::MCP::ScopeMapper.new(
|
|
228
235
|
mapping: {
|
|
229
236
|
"memory.read" => "documents_read",
|
|
230
|
-
"memory.write" => "documents_write"
|
|
231
|
-
}
|
|
237
|
+
"memory.write" => "documents_write"
|
|
238
|
+
}
|
|
232
239
|
)
|
|
233
240
|
|
|
234
241
|
resource_server = OAuth2::MCP::ResourceServer.new(
|
|
235
242
|
resource_metadata: metadata,
|
|
236
243
|
resource_metadata_url: "https://brain.example.com/.well-known/oauth-protected-resource/mcp",
|
|
237
244
|
validator: validator,
|
|
238
|
-
scope_mapper: scope_mapper
|
|
245
|
+
scope_mapper: scope_mapper
|
|
239
246
|
)
|
|
240
247
|
|
|
241
248
|
result = resource_server.authorize(
|
|
242
249
|
request: rack_env,
|
|
243
|
-
scopes: ["memory.read"]
|
|
250
|
+
scopes: ["memory.read"]
|
|
244
251
|
)
|
|
245
252
|
|
|
246
253
|
halt result.status, result.headers, "" unless result.allowed?
|
|
@@ -258,9 +265,9 @@ Or build the validator from OIDC discovery:
|
|
|
258
265
|
|
|
259
266
|
```ruby
|
|
260
267
|
validator = OAuth2::MCP::OIDCDiscovery.new(
|
|
261
|
-
issuer: "https://example.authkit.app"
|
|
268
|
+
issuer: "https://example.authkit.app"
|
|
262
269
|
).jwt_validator(
|
|
263
|
-
audience: "https://brain.example.com/mcp"
|
|
270
|
+
audience: "https://brain.example.com/mcp"
|
|
264
271
|
)
|
|
265
272
|
```
|
|
266
273
|
|
|
@@ -270,7 +277,7 @@ issuer and `/oauth2/jwks` endpoint:
|
|
|
270
277
|
```ruby
|
|
271
278
|
validator = OAuth2::MCP::WorkOSAuthKit.new(
|
|
272
279
|
subdomain: "acme",
|
|
273
|
-
audience: "https://brain.example.com/mcp"
|
|
280
|
+
audience: "https://brain.example.com/mcp"
|
|
274
281
|
)
|
|
275
282
|
```
|
|
276
283
|
|
|
@@ -282,7 +289,7 @@ validator = OAuth2::MCP::IntrospectionValidator.new(
|
|
|
282
289
|
client: oauth_client,
|
|
283
290
|
introspection_url: "https://auth.example.com/oauth2/introspection",
|
|
284
291
|
audience: "https://brain.example.com/mcp",
|
|
285
|
-
issuer: "https://auth.example.com"
|
|
292
|
+
issuer: "https://auth.example.com"
|
|
286
293
|
)
|
|
287
294
|
```
|
|
288
295
|
|
|
@@ -293,7 +300,7 @@ Raising a monthly budget of... "dollars" would make the project more sustainable
|
|
|
293
300
|
|
|
294
301
|
We welcome both individual and corporate sponsors! We also offer a
|
|
295
302
|
wide array of funding channels to account for your preferences.
|
|
296
|
-
Currently, [
|
|
303
|
+
Currently, [Open Collective][🖇osc] is our preferred funding platform.
|
|
297
304
|
|
|
298
305
|
**If you're working in a company that's making significant use of ruby-oauth tools we'd
|
|
299
306
|
appreciate it if you suggest to your company to become a ruby-oauth sponsor.**
|
|
@@ -302,12 +309,38 @@ You can support the development of ruby-oauth tools via
|
|
|
302
309
|
[GitHub Sponsors][🖇sponsor],
|
|
303
310
|
[Liberapay][⛳liberapay],
|
|
304
311
|
[PayPal][🖇paypal],
|
|
312
|
+
[Open Collective][🖇osc]
|
|
305
313
|
and [Tidelift][🏙️entsup-tidelift].
|
|
306
314
|
|
|
307
315
|
| 📍 NOTE |
|
|
308
316
|
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
309
317
|
| 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
318
|
|
|
319
|
+
### Open Collective for Individuals
|
|
320
|
+
|
|
321
|
+
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/ruby-oauth#backer)]
|
|
322
|
+
|
|
323
|
+
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
324
|
+
|
|
325
|
+
<!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
|
|
326
|
+
No backers yet. Be the first!
|
|
327
|
+
<!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
|
|
328
|
+
|
|
329
|
+
### Open Collective for Organizations
|
|
330
|
+
|
|
331
|
+
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)]
|
|
332
|
+
|
|
333
|
+
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
334
|
+
|
|
335
|
+
<!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
|
|
336
|
+
No sponsors yet. Be the first!
|
|
337
|
+
|
|
338
|
+
### Open Collective for Donors
|
|
339
|
+
|
|
340
|
+
[Bill Woika](https://opencollective.com/bill-woika) [Philipp Ebneter](https://opencollective.com/guest-e77282f7) [Grigoriy](https://opencollective.com/guest-c93e0c48)
|
|
341
|
+
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
342
|
+
|
|
343
|
+
[kettle-readme-backers]: https://github.com/ruby-oauth/oauth2-mcp/blob/main/bin/kettle-readme-backers
|
|
311
344
|
|
|
312
345
|
### Another way to support open-source
|
|
313
346
|
|
|
@@ -319,7 +352,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
319
352
|
|
|
320
353
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
321
354
|
|
|
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
|
|
355
|
+
[![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 to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
323
356
|
|
|
324
357
|
## 🔐 Security
|
|
325
358
|
|
|
@@ -365,7 +398,7 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
365
398
|
|
|
366
399
|
Also see GitLab Contributors: [https://gitlab.com/ruby-oauth/oauth2-mcp/-/graphs/main][🚎contributors-gl]
|
|
367
400
|
|
|
368
|
-
<details>
|
|
401
|
+
<details markdown="1">
|
|
369
402
|
<summary>⭐️ Star History</summary>
|
|
370
403
|
|
|
371
404
|
<a href="https://star-history.com/ruby-oauth/oauth2-mcp&Date">
|
|
@@ -435,24 +468,33 @@ To join the community or get help 👇️ Join the Discord.
|
|
|
435
468
|
|
|
436
469
|
To say "thanks!" ☝️ Join the Discord or 👇️ send money.
|
|
437
470
|
|
|
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]
|
|
471
|
+
[![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
472
|
|
|
440
473
|
### Please give the project a star ⭐ ♥.
|
|
441
474
|
|
|
475
|
+
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.
|
|
476
|
+
|
|
442
477
|
Thanks for RTFM. ☺️
|
|
443
478
|
|
|
444
479
|
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
|
|
445
480
|
[⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
|
|
446
481
|
[⛳liberapay]: https://liberapay.com/pboling/donate
|
|
482
|
+
[🖇osc-all-img]: https://img.shields.io/opencollective/all/ruby-oauth
|
|
483
|
+
[🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth
|
|
484
|
+
[🖇osc-backers-img]: https://img.shields.io/opencollective/backers/ruby-oauth
|
|
485
|
+
[🖇osc-backers]: https://opencollective.com/ruby-oauth#backer
|
|
486
|
+
[🖇osc-backers-i]: https://opencollective.com/ruby-oauth/backers/badge.svg?style=flat
|
|
487
|
+
[🖇osc-sponsors]: https://opencollective.com/ruby-oauth#sponsor
|
|
488
|
+
[🖇osc-sponsors-i]: https://opencollective.com/ruby-oauth/sponsors/badge.svg?style=flat
|
|
489
|
+
[🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/ruby-oauth?style=for-the-badge
|
|
490
|
+
[🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth?style=for-the-badge
|
|
491
|
+
[🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/ruby-oauth?style=for-the-badge
|
|
492
|
+
[🖇osc]: https://opencollective.com/ruby-oauth
|
|
447
493
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
448
494
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
449
495
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
450
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
451
|
-
[🖇polar]: https://polar.sh/pboling
|
|
452
496
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
453
497
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
454
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
455
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
456
498
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
457
499
|
[🖇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
|
|
458
500
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
@@ -467,7 +509,7 @@ Thanks for RTFM. ☺️
|
|
|
467
509
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
468
510
|
|
|
469
511
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
470
|
-
[⛳️gem-namespace]: https://github.com/ruby-oauth/oauth2-mcp
|
|
512
|
+
[⛳️gem-namespace]: https://github.com/ruby-oauth/oauth2-mcp
|
|
471
513
|
[⛳️namespace-img]: https://img.shields.io/badge/namespace-OAuth2::MCP-3C2D2D.svg?style=square&logo=ruby&logoColor=white
|
|
472
514
|
[⛳️gem-name]: https://bestgems.org/gems/oauth2-mcp
|
|
473
515
|
[⛳️name-img]: https://img.shields.io/badge/name-oauth2--mcp-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
|
|
@@ -507,11 +549,11 @@ Thanks for RTFM. ☺️
|
|
|
507
549
|
[💁🏼♂️peterboling]: http://www.peterboling.com
|
|
508
550
|
[🚂railsbling]: http://www.railsbling.com
|
|
509
551
|
[📜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
|
|
552
|
+
[📜src-gl]: https://gitlab.com/ruby-oauth/oauth2-mcp
|
|
511
553
|
[📜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
|
|
554
|
+
[📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp
|
|
513
555
|
[📜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
|
|
556
|
+
[📜src-gh]: https://github.com/ruby-oauth/oauth2-mcp
|
|
515
557
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
516
558
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
517
559
|
[📜gl-wiki]: https://gitlab.com/ruby-oauth/oauth2-mcp/-/wikis/home
|
|
@@ -530,13 +572,13 @@ Thanks for RTFM. ☺️
|
|
|
530
572
|
[🏀codecovi]: https://codecov.io/gh/ruby-oauth/oauth2-mcp/graph/badge.svg
|
|
531
573
|
[🏀coveralls]: https://coveralls.io/github/ruby-oauth/oauth2-mcp?branch=main
|
|
532
574
|
[🏀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
575
|
[🚎ruby-3.2-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/ruby-3.2.yml
|
|
536
576
|
[🚎ruby-3.3-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/ruby-3.3.yml
|
|
537
577
|
[🚎ruby-3.4-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/ruby-3.4.yml
|
|
578
|
+
[🚎jruby-10.0-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/jruby-10.0.yml
|
|
538
579
|
[🚎truby-24.2-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/truffleruby-24.2.yml
|
|
539
580
|
[🚎truby-25.0-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/truffleruby-25.0.yml
|
|
581
|
+
[🚎truby-33.0-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/truffleruby-33.0.yml
|
|
540
582
|
[🚎2-cov-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/coverage.yml
|
|
541
583
|
[🚎2-cov-wfi]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/coverage.yml/badge.svg
|
|
542
584
|
[🚎3-hd-wf]: https://github.com/ruby-oauth/oauth2-mcp/actions/workflows/heads.yml
|
|
@@ -560,12 +602,14 @@ Thanks for RTFM. ☺️
|
|
|
560
602
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
561
603
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
562
604
|
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
563
|
-
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
564
605
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
565
606
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
566
607
|
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
567
608
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
609
|
+
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
568
610
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
611
|
+
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
612
|
+
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
569
613
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
570
614
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
571
615
|
[🤝gh-issues]: https://github.com/ruby-oauth/oauth2-mcp/issues
|
|
@@ -602,7 +646,7 @@ Thanks for RTFM. ☺️
|
|
|
602
646
|
[📄license-ref]: MIT.md
|
|
603
647
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
604
648
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
605
|
-
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A
|
|
649
|
+
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
|
|
606
650
|
|
|
607
651
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
|
608
652
|
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
|
@@ -620,9 +664,9 @@ Thanks for RTFM. ☺️
|
|
|
620
664
|
| Field | Value |
|
|
621
665
|
|---|---|
|
|
622
666
|
| Package | oauth2-mcp |
|
|
623
|
-
| Description |
|
|
667
|
+
| Description | 🍲 oauth2-mcp provides Ruby helpers for securing HTTP Model Context Protocol servers with OAuth protected-resource metadata, bearer challenges, and scoped authorization. |
|
|
624
668
|
| Homepage | https://github.com/ruby-oauth/oauth2-mcp |
|
|
625
|
-
| Source | https://github.com/ruby-oauth/oauth2-mcp
|
|
669
|
+
| Source | https://github.com/ruby-oauth/oauth2-mcp |
|
|
626
670
|
| License | `MIT` |
|
|
627
|
-
| Funding | https://github.com/sponsors/pboling, https://
|
|
671
|
+
| Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/oauth2-mcp, https://www.buymeacoffee.com/pboling |
|
|
628
672
|
<!-- kettle-jem:metadata:end -->
|
data/SECURITY.md
CHANGED
data/lib/oauth2/mcp/version.rb
CHANGED
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
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.
|
|
4
|
+
version: 0.1.2
|
|
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.
|
|
69
|
+
version: 2.0.25
|
|
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.
|
|
79
|
+
version: 2.0.25
|
|
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.
|
|
89
|
+
version: 1.1.14
|
|
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.
|
|
99
|
+
version: 1.1.14
|
|
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.
|
|
106
|
+
version: '2.3'
|
|
107
107
|
- - ">="
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: 2.
|
|
109
|
+
version: 2.3.4
|
|
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.
|
|
116
|
+
version: '2.3'
|
|
117
117
|
- - ">="
|
|
118
118
|
- !ruby/object:Gem::Version
|
|
119
|
-
version: 2.
|
|
119
|
+
version: 2.3.4
|
|
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.
|
|
174
|
+
version: '3.1'
|
|
175
175
|
- - ">="
|
|
176
176
|
- !ruby/object:Gem::Version
|
|
177
|
-
version: 3.
|
|
177
|
+
version: 3.1.4
|
|
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.
|
|
184
|
+
version: '3.1'
|
|
185
185
|
- - ">="
|
|
186
186
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: 3.
|
|
187
|
+
version: 3.1.4
|
|
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.
|
|
197
|
+
version: 2.0.10
|
|
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.
|
|
207
|
+
version: 2.0.10
|
|
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.8
|
|
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.8
|
|
208
228
|
- !ruby/object:Gem::Dependency
|
|
209
229
|
name: ruby-progressbar
|
|
210
230
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -228,7 +248,7 @@ dependencies:
|
|
|
228
248
|
version: '1.0'
|
|
229
249
|
- - ">="
|
|
230
250
|
- !ruby/object:Gem::Version
|
|
231
|
-
version: 1.0.
|
|
251
|
+
version: 1.0.6
|
|
232
252
|
type: :development
|
|
233
253
|
prerelease: false
|
|
234
254
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -238,7 +258,7 @@ dependencies:
|
|
|
238
258
|
version: '1.0'
|
|
239
259
|
- - ">="
|
|
240
260
|
- !ruby/object:Gem::Version
|
|
241
|
-
version: 1.0.
|
|
261
|
+
version: 1.0.6
|
|
242
262
|
- !ruby/object:Gem::Dependency
|
|
243
263
|
name: gitmoji-regex
|
|
244
264
|
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.
|
|
271
|
+
version: 2.0.4
|
|
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.
|
|
262
|
-
description: "\
|
|
281
|
+
version: 2.0.4
|
|
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
|
-
-
|
|
286
|
+
- floss@galtzo.com
|
|
267
287
|
executables: []
|
|
268
288
|
extensions: []
|
|
269
289
|
extra_rdoc_files:
|
|
@@ -283,6 +303,7 @@ files:
|
|
|
283
303
|
- CONTRIBUTING.md
|
|
284
304
|
- FUNDING.md
|
|
285
305
|
- LICENSE.md
|
|
306
|
+
- MIT.md
|
|
286
307
|
- README.md
|
|
287
308
|
- RUBOCOP.md
|
|
288
309
|
- SECURITY.md
|
|
@@ -295,11 +316,11 @@ homepage: https://github.com/ruby-oauth/oauth2-mcp
|
|
|
295
316
|
licenses:
|
|
296
317
|
- MIT
|
|
297
318
|
metadata:
|
|
298
|
-
homepage_uri: https://
|
|
299
|
-
source_code_uri: https://github.com/ruby-oauth/oauth2-mcp/tree/v0.1.
|
|
300
|
-
changelog_uri: https://github.com/ruby-oauth/oauth2-mcp/blob/v0.1.
|
|
319
|
+
homepage_uri: https://oauth2-mcp.galtzo.com
|
|
320
|
+
source_code_uri: https://github.com/ruby-oauth/oauth2-mcp/tree/v0.1.2
|
|
321
|
+
changelog_uri: https://github.com/ruby-oauth/oauth2-mcp/blob/v0.1.2/CHANGELOG.md
|
|
301
322
|
bug_tracker_uri: https://github.com/ruby-oauth/oauth2-mcp/issues
|
|
302
|
-
documentation_uri: https://www.rubydoc.info/gems/oauth2-mcp/0.1.
|
|
323
|
+
documentation_uri: https://www.rubydoc.info/gems/oauth2-mcp/0.1.2
|
|
303
324
|
funding_uri: https://github.com/sponsors/pboling
|
|
304
325
|
wiki_uri: https://github.com/ruby-oauth/oauth2-mcp/wiki
|
|
305
326
|
news_uri: https://www.railsbling.com/tags/oauth2-mcp
|
|
@@ -307,7 +328,7 @@ metadata:
|
|
|
307
328
|
rubygems_mfa_required: 'true'
|
|
308
329
|
rdoc_options:
|
|
309
330
|
- "--title"
|
|
310
|
-
- "oauth2-mcp - \
|
|
331
|
+
- "oauth2-mcp - \U0001F372 OAuth 2.1 resource-server helpers for MCP servers."
|
|
311
332
|
- "--main"
|
|
312
333
|
- README.md
|
|
313
334
|
- "--exclude"
|
|
@@ -328,7 +349,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
328
349
|
- !ruby/object:Gem::Version
|
|
329
350
|
version: '0'
|
|
330
351
|
requirements: []
|
|
331
|
-
rubygems_version: 4.0.
|
|
352
|
+
rubygems_version: 4.0.16
|
|
332
353
|
specification_version: 4
|
|
333
|
-
summary: "\
|
|
354
|
+
summary: "\U0001F372 OAuth 2.1 resource-server helpers for MCP servers."
|
|
334
355
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|