https://github.com/srgplus/srgplus-mcp
· scanned 2026-06-16 00:20 UTC (2 months, 2 weeks ago)
75 raw signals (34 security + 41 graph)
Last scanned 2 months, 2 weeks ago · v1 · 45 actionable findings from 2 signal sources. 61 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 350 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
test_validate_single_source_accepts_url_only |
software | healthy | tests/test_assets.py:16 |
test_validate_single_source_accepts_base64_only |
software | healthy | tests/test_assets.py:20 |
test_validate_single_source_rejects_neither |
software | healthy | tests/test_assets.py:24 |
test_validate_single_source_rejects_both |
software | healthy | tests/test_assets.py:29 |
test_infer_extension |
software | healthy | tests/test_assets.py:44 |
_lifespan |
software | healthy | tests/conftest.py:42 |
receive |
software | healthy | tests/conftest.py:48 |
send |
software | healthy | tests/conftest.py:56 |
client |
software | healthy | tests/conftest.py:81 |
test_root_post_requires_auth |
software | healthy | tests/test_root_endpoint.py:16 |
test_root_post_serves_core_profile |
software | healthy | tests/test_root_endpoint.py:23 |
test_root_get_still_serves_branding_page |
software | healthy | tests/test_root_endpoint.py:42 |
test_unsuffixed_resource_doc_advertises_root |
software | healthy | tests/test_root_endpoint.py:50 |
_s256 |
software | healthy | tests/test_oauth.py:52 |
_consent_csrf |
software | healthy | tests/test_oauth.py:57 |
reset_state |
software | healthy | tests/test_oauth.py:70 |
srg_mock |
software | healthy | tests/test_oauth.py:78 |
_register |
software | healthy | tests/test_oauth.py:101 |
_full_authorize_flow |
software | healthy | tests/test_oauth.py:109 |
test_authorization_server_metadata |
software | healthy | tests/test_oauth.py:154 |
test_protected_resource_metadata |
software | healthy | tests/test_oauth.py:171 |
test_dcr_happy_path |
software | healthy | tests/test_oauth.py:189 |
test_dcr_rejects_missing_redirect_uris |
software | healthy | tests/test_oauth.py:211 |
test_dcr_rejects_relative_redirect_uri |
software | healthy | tests/test_oauth.py:218 |
test_dcr_rejects_non_none_auth_method |
software | healthy | tests/test_oauth.py:227 |
test_authorize_get_renders_consent |
software | healthy | tests/test_oauth.py:242 |
test_authorize_get_rejects_unregistered_redirect_uri |
software | healthy | tests/test_oauth.py:263 |
test_authorize_get_rejects_substring_redirect_uri |
software | healthy | tests/test_oauth.py:282 |
test_authorize_get_rejects_unknown_client_id |
software | healthy | tests/test_oauth.py:299 |
test_authorize_get_rejects_plain_pkce |
software | healthy | tests/test_oauth.py:314 |
test_authorize_post_valid_key_redirects_with_code |
software | healthy | tests/test_oauth.py:333 |
test_authorize_post_invalid_csrf_rerenders |
software | healthy | tests/test_oauth.py:371 |
test_authorize_post_csrf_is_stateless_across_instances |
software | healthy | tests/test_oauth.py:393 |
test_authorize_post_invalid_api_key_rerenders |
software | healthy | tests/test_oauth.py:436 |
test_token_code_exchange |
software | healthy | tests/test_oauth.py:477 |
test_token_code_replay_rejected |
software | healthy | tests/test_oauth.py:501 |
test_token_bad_pkce_verifier |
software | healthy | tests/test_oauth.py:530 |
test_token_redirect_uri_mismatch |
software | healthy | tests/test_oauth.py:548 |
test_token_unsupported_grant |
software | healthy | tests/test_oauth.py:566 |
test_refresh_token_grant_rotates |
software | healthy | tests/test_oauth.py:576 |
test_revoke_returns_200_for_anything |
software | healthy | tests/test_oauth.py:621 |
test_revoke_marks_access_token_invalid |
software | healthy | tests/test_oauth.py:629 |
test_mcp_unauthenticated_includes_www_authenticate |
software | healthy | tests/test_oauth.py:663 |
test_mcp_x_api_key_backward_compat |
software | healthy | tests/test_oauth.py:680 |
test_mcp_bearer_srgplus_backward_compat |
software | healthy | tests/test_oauth.py:700 |
test_mcp_oauth_bearer_jwt_works |
software | healthy | tests/test_oauth.py:715 |
test_mcp_invalid_jwt_returns_401 |
software | healthy | tests/test_oauth.py:746 |
test_cors_preflight_from_claude_ai |
software | healthy | tests/test_oauth.py:763 |
test_cors_preflight_for_mcp |
software | healthy | tests/test_oauth.py:779 |
test_favicon_ico_served |
software | healthy | tests/test_static.py:24 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
README.md |
software | healthy | README.md |
Dockerfile |
software | healthy | Dockerfile |
server.json |
software | healthy | server.json |
pyproject.toml |
software | healthy | pyproject.toml |
test_assets.py |
software | healthy | tests/test_assets.py |
__init__.py |
software | healthy | tests/__init__.py |
conftest.py |
software | healthy | tests/conftest.py |
test_root_endpoint.py |
software | healthy | tests/test_root_endpoint.py |
test_oauth.py |
software | healthy | tests/test_oauth.py |
test_static.py |
software | healthy | tests/test_static.py |
test_instructions.py |
software | healthy | tests/test_instructions.py |
test_core_profile.py |
software | healthy | tests/test_core_profile.py |
test_stability.py |
software | healthy | tests/test_stability.py |
cloudbuild.yaml |
software | healthy | infra/cloudbuild.yaml |
__init__.py |
software | healthy | srg_mcp/__init__.py |
guide.py |
software | healthy | srg_mcp/guide.py |
contents.py |
software | healthy | srg_mcp/contents.py |
assets.py |
software | healthy | srg_mcp/assets.py |
hub_profiles.py |
software | healthy | srg_mcp/hub_profiles.py |
_client.py |
software | healthy | srg_mcp/_client.py |
users.py |
software | healthy | srg_mcp/users.py |
_app.py |
software | healthy | srg_mcp/_app.py |
server.py |
software | healthy | srg_mcp/server.py |
permission_groups.py |
software | healthy | srg_mcp/permission_groups.py |
workspaces.py |
software | healthy | srg_mcp/workspaces.py |
channels.py |
software | healthy | srg_mcp/channels.py |
__init__.py |
software | healthy | srg_mcp/serve/__init__.py |
_tool_errors.py |
software | healthy | srg_mcp/serve/_tool_errors.py |
profiles.py |
software | healthy | srg_mcp/serve/profiles.py |
main.py |
software | healthy | srg_mcp/serve/main.py |
__init__.py |
software | healthy | srg_mcp/serve/oauth/__init__.py |
consent.html |
software | healthy | srg_mcp/serve/oauth/consent.html |
store.py |
software | healthy | srg_mcp/serve/oauth/store.py |
discovery.py |
software | healthy | srg_mcp/serve/oauth/discovery.py |
pkce.py |
software | healthy | srg_mcp/serve/oauth/pkce.py |
authorize.py |
software | healthy | srg_mcp/serve/oauth/authorize.py |
token.py |
software | healthy | srg_mcp/serve/oauth/token.py |
dcr.py |
software | healthy | srg_mcp/serve/oauth/dcr.py |
jwt_codec.py |
software | healthy | srg_mcp/serve/oauth/jwt_codec.py |
errors.py |
software | healthy | srg_mcp/serve/oauth/errors.py |
| Label | Layer | Status | Path |
|---|---|---|---|
auth::tests/test_oauth.py |
security | healthy | tests/test_oauth.py |
auth::srg_mcp/serve/oauth/token.py |
security | healthy | srg_mcp/serve/oauth/token.py |
auth::server.json |
security | healthy | server.json |
auth::srg_mcp/serve/oauth/jwt_codec.py |
security | healthy | srg_mcp/serve/oauth/jwt_codec.py |
auth::tests/test_static.py |
security | healthy | tests/test_static.py |
auth::srg_mcp/serve/oauth/discovery.py |
security | healthy | srg_mcp/serve/oauth/discovery.py |
auth::srg_mcp/serve/oauth/errors.py |
security | healthy | srg_mcp/serve/oauth/errors.py |
auth::srg_mcp/serve/oauth/dcr.py |
security | healthy | srg_mcp/serve/oauth/dcr.py |
auth::tests/conftest.py |
security | healthy | tests/conftest.py |
auth::tests/test_core_profile.py |
security | healthy | tests/test_core_profile.py |
auth::srg_mcp/serve/oauth/consent.html |
security | healthy | srg_mcp/serve/oauth/consent.html |
auth::srg_mcp/serve/oauth/store.py |
security | healthy | srg_mcp/serve/oauth/store.py |
auth::srg_mcp/serve/main.py |
security | healthy | srg_mcp/serve/main.py |
auth::srg_mcp/serve/oauth/__init__.py |
security | healthy | srg_mcp/serve/oauth/__init__.py |
auth::README.md |
security | healthy | README.md |
auth::srg_mcp/serve/oauth/authorize.py |
security | healthy | srg_mcp/serve/oauth/authorize.py |
auth::pyproject.toml |
security | healthy | pyproject.toml |
auth::tests/test_root_endpoint.py |
security | healthy | tests/test_root_endpoint.py |
| Label | Layer | Status | Path |
|---|---|---|---|
_DummyClient |
software | healthy | tests/test_stability.py:18 |
_MCPEndpoint |
software | healthy | srg_mcp/serve/main.py:203 |
OAuthError |
software | healthy | srg_mcp/serve/oauth/errors.py:13 |
InvalidRequest |
software | healthy | srg_mcp/serve/oauth/errors.py:45 |
InvalidClient |
software | healthy | srg_mcp/serve/oauth/errors.py:53 |
InvalidGrant |
software | healthy | srg_mcp/serve/oauth/errors.py:59 |
UnauthorizedClient |
software | healthy | srg_mcp/serve/oauth/errors.py:65 |
UnsupportedGrantType |
software | healthy | srg_mcp/serve/oauth/errors.py:71 |
InvalidRedirectURI |
software | healthy | srg_mcp/serve/oauth/errors.py:77 |
| Label | Layer | Status | Path |
|---|---|---|---|
tests |
software | healthy | tests |
infra |
software | healthy | infra |
srg_mcp |
software | healthy | srg_mcp |
serve |
software | healthy | srg_mcp/serve |
oauth |
software | healthy | srg_mcp/serve/oauth |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-1eh5g9sm |
software | healthy | /tmp/repobility-clone-1eh5g9sm |
| Label | Layer | Status | Path |
|---|---|---|---|
redis |
data | healthy | srg_mcp/serve/oauth/store.py |
| Label | Layer | Status | Path |
|---|---|---|---|
port:8090 |
network | healthy | README.md |
| Label | Layer | Status | Path |
|---|---|---|---|
loadbalancer |
network | healthy | srg_mcp/serve/oauth/store.py |
| Label | Layer | Status | Path |
|---|---|---|---|
4.1.2.1 |
network | healthy | srg_mcp/serve/oauth/authorize.py |
| Label | Layer | Status | Path |
|---|---|---|---|
image::Dockerfile |
hardware | healthy | Dockerfile |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::gcp |
hardware | healthy | README.md |
This page is publicly accessible at:
https://repobility.com/scan/f4eba3d5-3dfa-4a92-96d0-f0ef06d96b10/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/f4eba3d5-3dfa-4a92-96d0-f0ef06d96b10/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.