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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +29 -1
- data/CITATION.cff +2 -2
- data/CONTRIBUTING.md +20 -4
- data/FUNDING.md +13 -2
- data/LICENSE.md +1 -1
- data/README.md +67 -43
- 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 +48 -28
- 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: e668111bb4a8619c601eb7fa95281d5e17fba8c7a8bdbaac2ae1196b3b2d0cc6
|
|
4
|
+
data.tar.gz: fa4b518aae06bda1a3f6ed485403ce139f00f1139689194354afb2c2b00ce05f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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
|
|
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,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
|
|
237
|
-
[📜src-cb]: https://codeberg.org/ruby-oauth/oauth2-mcp
|
|
238
|
-
[📜src-gh]: https://github.com/ruby-oauth/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
data/README.md
CHANGED
|
@@ -1,23 +1,16 @@
|
|
|
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 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, [
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 |
|
|
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
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.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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
106
|
+
version: '2.2'
|
|
107
107
|
- - ">="
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: 2.
|
|
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.
|
|
116
|
+
version: '2.2'
|
|
117
117
|
- - ">="
|
|
118
118
|
- !ruby/object:Gem::Version
|
|
119
|
-
version: 2.
|
|
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.
|
|
174
|
+
version: '3.1'
|
|
175
175
|
- - ">="
|
|
176
176
|
- !ruby/object:Gem::Version
|
|
177
|
-
version: 3.
|
|
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.
|
|
184
|
+
version: '3.1'
|
|
185
185
|
- - ">="
|
|
186
186
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: 3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
262
|
-
description: "\
|
|
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
|
-
-
|
|
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.
|
|
300
|
-
changelog_uri: https://github.com/ruby-oauth/oauth2-mcp/blob/v0.1.
|
|
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.
|
|
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 - \
|
|
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: "\
|
|
353
|
+
summary: "\U0001F372 OAuth 2.1 resource-server helpers for MCP servers."
|
|
334
354
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|