feat(mcp-catalog): add GitHub, Notion, and Sentry remote-OAuth connectors - #66653
feat(mcp-catalog): add GitHub, Notion, and Sentry remote-OAuth connectors#66653joelbrilliant wants to merge 2 commits into
Conversation
…tors Add three first-party remote-OAuth MCP catalog manifests so users get one-click curated connectors instead of hand-configuring servers: - github → https://api.githubcopilot.com/mcp/ - notion → https://mcp.notion.com/mcp - sentry → https://mcp.sentry.dev/mcp Each mirrors the existing `linear` manifest (optional-mcps/linear/ manifest.yaml): transport http + auth oauth, no `provider` field, so the MCP client handles native OAuth 2.1 discovery/PKCE/refresh from the server URL. No new fields introduced. The generic contract test (tests/hermes_cli/test_mcp_catalog.py:: TestShippedCatalog::test_all_shipped_manifests_parse) already auto-covers the new manifests' shape; add an explicit assertion that the three connectors are present, http, and native-oauth. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
tonydwb
left a comment
There was a problem hiding this comment.
{
"event": "APPROVE",
Code Review Summary
Verdict: Approved
MCP catalog entries for GitHub, Notion, and Sentry — all new YAML manifest files under optional-mcps/. Clean additive changes, well-documented with clear descriptions of OAuth flows and transport configuration. No source code modifications.
Looks Good
- Correct
manifest_version: 1format - Proper OAuth 2.1 / PKCE configuration for each provider
- Clear
post_installinstructions for user-facing setup - Reasonable
default_enabledomission (user prunes at install time)
Reviewed by Hermes Agent",
"comments": []
}
|
Note for the reviewer on the required-check failure: it's the |
teknium1
left a comment
There was a problem hiding this comment.
Thanks for adding these catalog entries. The native OAuth shape matches the existing catalog path: hermes_cli/mcp_catalog.py:489-493 writes auth: oauth, and tools/mcp_tool.py:2574-2582 routes that configuration through the MCP OAuth manager.
Problems
- The new manifests are absent from
[tool.setuptools.data-files].pyproject.toml:323-334requires one target peroptional-mcps/<name>directory to preserve wheel layout, but onlylinearandn8nare declared atpyproject.toml:335-336. Add targets forgithub,notion, andsentry; otherwise wheel installs will not catalog these entries. test_first_party_remote_oauth_connectors_presenthard-codes catalog names and URLs. That conflicts withtests/hermes_cli/test_mcp_catalog.py:821-836, which deliberately avoids catalog-name snapshots, and the change-detector-test policy inAGENTS.md:1331-1378. The generic parse/version-lock contracts should remain the coverage here.
Suggested changes
- Add the three wheel data-file targets in
pyproject.toml. - Remove the hard-coded catalog-entry test.
Automated hermes-sweeper review.
…test Address hermes-sweeper review on NousResearch#66653: - Add github/notion/sentry to [tool.setuptools.data-files] so wheel installs catalog the new manifests (one target per optional-mcps/<name>, matching the existing linear/n8n entries). - Remove test_first_party_remote_oauth_connectors_present, which snapshotted catalog names/URLs and conflicts with the repo change-detector-test policy. The generic parse + version-lock contracts already cover these manifests.
|
Thanks for the review, both points addressed in the pushed commit:
Verified: Minor, out of scope for this PR so flagging rather than touching it here: |
|
The remaining red check is the repository's manual MCP catalog security gate. All code, test, Docker, critical supply chain, and OSV checks passed. A maintainer now needs to review the bundled connector commands and environment requirements, add the mcp-catalog-reviewed label, and rerun CI. I have not applied that label myself because it is the explicit security approval gate. |
Adds three first-party remote-OAuth MCP catalog manifests so users get one-click curated connectors instead of hand-configuring servers:
githubhttps://api.githubcopilot.com/mcp/notionhttps://mcp.notion.com/mcpsentryhttps://mcp.sentry.dev/mcpTemplate. Each manifest mirrors the existing
linearentry field-for-field (optional-mcps/linear/manifest.yaml, transport at lines 13–15, auth at lines 17–21):transport.type: http+auth.type: oauthwith noprovider— i.e. native MCP OAuth 2.1 (case 1), so Hermes's MCP client +mcp_oauth_managerhandle discovery/PKCE/token-exchange/refresh straight from the server URL. No new manifest fields are introduced (schema authority:hermes_cli/mcp_catalog.py_parse_manifest, lines 158–278 — it reads onlyname, description, source, transport, auth, tools, install, post_install, so anicon/categoriesfield would be silently ignored; none added).Endpoints verified live (2026-07-18). Each MCP endpoint returns
401to an unauthenticatedinitialize(a real OAuth-gated MCP server, not a dead host), and each serves RFC 9728 OAuth Protected Resource Metadata: Notion at/.well-known/oauth-protected-resource(200), GitHub and Sentry at the path-scoped/.well-known/oauth-protected-resource/mcp(200). So the browser OAuth flow will discover and complete on first connect.Tests. The generic contract test
tests/hermes_cli/test_mcp_catalog.py::TestShippedCatalog::test_all_shipped_manifests_parse(line 818) auto-covers every shipped manifest's shape, so these entries are validated the moment they land. This PR also addstest_first_party_remote_oauth_connectors_presentpinning that the three connectors are present,http, and native-oauth (provider is None). Full file: 40 passed.No duplicates.
optional-mcps/previously heldblender, linear, n8n, unreal-engine; none ofgithub/notion/sentryexisted, and no test previously referenced them.Mergeability — honest-low. Other first-party remote entries (e.g. Vercel / Hugging Face / AWS Knowledge) are currently unmerged, so a slow review/merge on curated remote connectors is expected. This PR doesn't change that; it adds three well-documented, contract-tested, liveness-verified manifests that are trivial to accept or defer. The full end-to-end OAuth handshake only happens on a real first-connect and is the one thing not exercised here.