Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

SRG+

PYPI · SRGPLUS-MCP · 2 COMPONENTS · SCANNED SEP 21

Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.

0 this week 62 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 30 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency32
Schema Quality & AI Usability67
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 8085 tokens (~83/item across 97 items; 97 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
  • Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (66% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 16 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 97 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the SRG+ MCP server?

SRG+ runs locally as a PyPI package, launched with uvx srgplus-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · srgplus-mcp

# add to Claude Code
claude mcp add srgplus-srgplus-mcp -- uvx srgplus-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "srgplus-srgplus-mcp": {
      "command": "uvx",
      "args": [
        "srgplus-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "srgplus-srgplus-mcp": {
      "command": "uvx",
      "args": [
        "srgplus-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add srgplus-srgplus-mcp -- uvx srgplus-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "srgplus-srgplus-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "srgplus-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add srgplus-srgplus-mcp --command uvx --arg srgplus-mcp
# ~/.hermes/config.yaml
mcp_servers:
  srgplus-srgplus-mcp:
    command: "uvx"
    args: ["srgplus-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "srgplus-srgplus-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "srgplus-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add srgplus-srgplus-mcp -t stdio -c uvx -a srgplus-mcp
// mcp.json
{
  "mcpServers": {
    "srgplus-srgplus-mcp": {
      "command": "uvx",
      "args": [
        "srgplus-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 17 Sept 26 0
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 −3
    • Stability: pass → 0.80 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed pypi/srgplus-mcp@0.4.7

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 30 packages
Packages resolved 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 97 exposed · ~8,085 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
get_permission_targets ~125

Get all targets of a given type accessible to the current user. workspace_id: target workspace ID — get available IDs from list_workspaces() target_type: "HubProfile", "Workspace", "Channel", etc. child_target_type: filter to targets that have a child of this type parent_target_id: filter to targets belonging to this parent Returns each target with its permission flags (can_edit, can_archive, etc.)

NameTypeReqDescription
child_target_type
parent_target_id
target_typestringyes
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

get_progression_stats ~69

Get completion statistics for the current user. workspace_id: target workspace ID — get available IDs from list_workspaces() Pass collection_id to scope to a specific collection. Returns total content count and how many the user has completed.

NameTypeReqDescription
collection_id
workspace_idstringyes

No output schema declared.

No examples provided.

get_subcontent ~207

List the subcontent items nested inside a collection, page by page. Returns the content items linked as subcontent inside the given collection's category. Each item includes its id, name, cover, privacy, progression, and the section it belongs to. workspace_id: target workspace ID — get available IDs from list_workspaces() content_id: ID of the collection (the parent content item) category_name: "Content" (nested content items) or "Asset" (nested assets) page_size: items per page (default 50) cursor: opaque cursor from a previous response; omit for first page order: "Asc" (default) or "Desc" Returns {"items": [...], "cursor": "..." | null}

NameTypeReqDescription
category_namestringyes
content_idstringyes
cursor
orderstring
page_sizeinteger
workspace_idstringyes

No output schema declared.

No examples provided.

get_user ~47

Get a user's full profile by ID. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
user_idstringyes
workspace_idstringyes

No output schema declared.

No examples provided.

get_workspace ~47

Get full details of a workspace (name, seats, subscription, hub profiles). workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
workspace_idstringyes

No output schema declared.

No examples provided.

get_workspace_action ~51

Get full details of a workspace automation action by ID. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
action_idstringyes
workspace_idstringyes

No output schema declared.

No examples provided.

get_workspace_hub_profiles ~45

List all hub profiles in a workspace (minimal representation). workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

get_workspace_invitation_link ~90

Generate a shareable invitation link for a workspace for a single email. workspace_id: target workspace ID — get available IDs from list_workspaces() role_id: 1 = Admin, 2 = Editor, 3 = Viewer Returns the invitation ID and access link URL.

NameTypeReqDescription
emailstringyes
role_idintegeryes
workspace_idstringyes

No output schema declared.

No examples provided.

get_workspace_users ~42

List all users in a workspace with their roles. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

give_permission ~113

Grant a user a role on a target (hub profile, workspace, channel, etc.). workspace_id: target workspace ID — get available IDs from list_workspaces() target_type: "HubProfile", "Workspace", or "Channel" role_id: 1 = Admin, 2 = Editor, 3 = Viewer

NameTypeReqDescription
role_idintegeryes
target_idstringyes
target_typestringyes
user_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

invite_to_hub_profile ~85

Send email invitations to join a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces() role_id: 1 = Admin, 2 = Editor, 3 = Viewer

NameTypeReqDescription
emailsarrayyes
hub_profile_idstringyes
role_idintegeryes
workspace_idstringyes

No output schema declared.

No examples provided.

invite_to_workspace ~73

Send email invitations to join a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces() role_id: 1 = Admin, 2 = Editor, 3 = Viewer

NameTypeReqDescription
emailsarrayyes
role_idintegeryes
workspace_idstringyes

No output schema declared.

No examples provided.

is_member ~62

Check whether the current user is a member of a target (any role). workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
target_idstringyes
target_typestringyes
workspace_idstringyes
NameTypeReqDescription
resultbooleanyes

No examples provided.

join_hub_profile ~54

Join a public hub profile as the current API key user. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
hub_profile_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

list_assets ~130

List assets in a hub profile with cursor-based pagination. workspace_id: target workspace ID — get available IDs from list_workspaces() types: e.g. ["Media", "File", "Image", "Embed", "Video"] or None for all Returns {"items": [...], "cursor": "..." | null}

NameTypeReqDescription
cursor
exclude_assets
exclude_collections
hub_profile_idstringyes
only_archivedboolean
page_sizeinteger
types
workspace_idstringyes

No output schema declared.

No examples provided.

list_channels ~57

List all channels for a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
hub_profile_idstringyes
include_archivedboolean
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

list_contents ~127

List content items in a hub profile with cursor-based pagination. workspace_id: target workspace ID — get available IDs from list_workspaces() types: ["Content"], ["Collection"], or None for both (default) Returns {"items": [...], "cursor": "..." | null}

NameTypeReqDescription
cursor
exclude_categories
exclude_collections
exclude_contents
hub_profile_idstringyes
only_archivedboolean
page_sizeinteger
types
workspace_idstringyes

No output schema declared.

No examples provided.

list_hub_profiles ~41

List all hub profiles in a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

list_invitations ~51

List all pending invitations for a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
hub_profile_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

list_managed_hub_profiles ~50

List hub profiles where the current API key user has Admin or Editor role. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

list_permission_groups ~67

List all permission groups for a target. workspace_id: target workspace ID — get available IDs from list_workspaces() target_type: "HubProfile" or "Workspace"

NameTypeReqDescription
target_idstringyes
target_typestringyes
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

list_workspace_actions ~41

List all automation actions configured on a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

list_workspace_invitations ~42

List all pending invitations for a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

list_workspaces ~65

List all workspaces accessible with the current API key(s). When multiple API keys were provided during OAuth, this returns all workspaces across all keys. Use the workspace_id from this list to target a specific workspace in any other tool that requires a workspace_id parameter.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultarrayyes

No examples provided.

move_content ~123

Move a content item to a different category section within a channel. workspace_id: target workspace ID — get available IDs from list_workspaces() content_id: ID of the content item to move channel_id: ID of the channel containing the target category category_id: ID of the destination category section_id: ID of the destination section within that category

NameTypeReqDescription
category_idstringyes
channel_idstringyes
content_idstringyes
section_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

move_hub_profile_to_workspace ~42

Transfer a hub profile to a different workspace (preserves content).

NameTypeReqDescription
hub_profile_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

move_subcontent ~198

Reorder a subcontent item within a collection section. Moves the item to the position immediately AFTER previous_subcontent_id. Pass previous_subcontent_id=None to move the item to the very first position in the section. workspace_id: target workspace ID — get available IDs from list_workspaces() content_id: ID of the collection (the parent content item) category_name: "Content" or "Asset" section_id: ID of the section containing the subcontent item subcontent_id: ID of the subcontent item to reorder previous_subcontent_id: ID of the item that should come directly before the moved item; None places it first in the section

NameTypeReqDescription
category_namestringyes
content_idstringyes
previous_subcontent_id
section_idstringyes
subcontent_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

patch_content_progression ~72

Update the current user's progression status for a content item. workspace_id: target workspace ID — get available IDs from list_workspaces() status: "NotStarted", "Incomplete", or "Completed"

NameTypeReqDescription
content_idstringyes
statusstringyes
workspace_idstringyes

No output schema declared.

No examples provided.

patch_media_progression ~74

Update the current user's last watched position in a media asset (seconds). workspace_id: target workspace ID — get available IDs from list_workspaces() Call periodically during playback to enable resume functionality.

NameTypeReqDescription
last_watched_timeintegeryes
media_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

remove_content_from_categories ~108

Remove a content item from one or more channel categories. The content item itself is not deleted. workspace_id: target workspace ID — get available IDs from list_workspaces() content_id: ID of the content item channel_id: ID of the channel category_ids: IDs of the categories to remove the content from

NameTypeReqDescription
category_idsarrayyes
channel_idstringyes
content_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

remove_user_from_permission_group ~58

Remove a user from a permission group. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
group_idstringyes
user_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

restore_hub_profile ~49

Restore a previously archived hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
hub_profile_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

search_assets ~98

Search assets in a hub profile by keyword. workspace_id: target workspace ID — get available IDs from list_workspaces() types: e.g. ["Media", "File"] or None for all types

NameTypeReqDescription
exclude_categories
exclude_collections
exclude_medias
hub_profile_idstringyes
searchstringyes
types
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

search_contents ~105

Search content items in a hub profile by keyword. workspace_id: target workspace ID — get available IDs from list_workspaces() types: ["Content"], ["Collection"], or None for both (default)

NameTypeReqDescription
exclude_categories
exclude_collections
exclude_contents
hub_profile_idstringyes
only_archivedboolean
searchstringyes
types
workspace_idstringyes
NameTypeReqDescription
resultarrayyes

No examples provided.

turn_on_hub_profile_community ~59

Enable community features for a hub profile (posts, comments, reactions). workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
hub_profile_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

update_asset ~94

Update an asset's display name, read-only flag, and optionally its cover image. workspace_id: target workspace ID — get available IDs from list_workspaces() cover_image: local file path or http(s):// URL — SDK uploads automatically.

NameTypeReqDescription
asset_idstringyes
cover_image
namestringyes
read_onlyboolean
workspace_idstringyes

No output schema declared.

No examples provided.

update_category ~161

Update a category's name, pin status, notification settings, and display options. workspace_id: target workspace ID — get available IDs from list_workspaces() view_type: display view type (e.g. "Grid", "List") progression_enabled: track user completion progress cover_show: show cover images in this category expandable: allow the category to be collapsed

NameTypeReqDescription
category_idstringyes
channel_idstringyes
cover_showboolean
expandableboolean
is_pinnedboolean
namestringyes
notifications_enabledboolean
progression_enabledboolean
view_type
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

update_channel ~105

Update a channel's name, privacy, and category order. workspace_id: target workspace ID — get available IDs from list_workspaces() privacy: "Public" or "Private" categories: list of {"id": "...", "order": 0} to reorder categories

NameTypeReqDescription
categories
channel_idstringyes
hub_profile_idstringyes
namestringyes
privacy
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

update_content ~204

Update a content item's metadata. Only provided fields are changed. workspace_id: target workspace ID — get available IDs from list_workspaces() privacy: "Preview", "Private", or "Public" channels: list of channel IDs (replaces existing placement) main_asset_id: ID of the primary playable asset url: external URL to associate with the content hub_profile_id: required if the content belongs to a specific profile cover_image: local path or http(s):// URL of the cover image (auto-upload) context: context widget objects (replaces existing) categories: category assignment objects (replaces existing)

NameTypeReqDescription
categories
channels
content_idstringyes
context
cover_image
details
hub_profile_id
main_asset_id
name
privacy
url
workspace_idstringyes

No output schema declared.

No examples provided.

update_content_section ~73

Rename a section inside a collection content item's category. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
category_namestringyes
content_idstringyes
namestringyes
section_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

update_hub_profile ~193

Update an existing hub profile's metadata. All fields are overwritten — provide the full desired state. workspace_id: target workspace ID — get available IDs from list_workspaces() availability_level: "Public" or "Private" primary_url: optional external URL shown on the profile app_clip_on: enable iOS App Clip widgets: profile widget configuration objects (replaces existing) buttons: action buttons (replaces existing), each {"title": "...", "logic": {"type": "...", "url": "..."}}

NameTypeReqDescription
app_clip_onboolean
availability_levelstring
buttons
description
hub_profile_idstringyes
namestringyes
primary_url
sub_name
user_namestringyes
widgets
workspace_idstringyes

No output schema declared.

No examples provided.

update_invitation ~84

Update the role assigned to a pending invitation. workspace_id: target workspace ID — get available IDs from list_workspaces() role_id: 1 = Admin, 2 = Editor, 3 = Viewer

NameTypeReqDescription
hub_profile_idstringyes
invitation_idstringyes
role_idintegeryes
workspace_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

update_permission_group ~52

Rename a permission group. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
group_idstringyes
namestringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

update_section ~70

Rename a section inside a channel category. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
category_idstringyes
channel_idstringyes
namestringyes
section_idstringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

update_workspace ~45

Update a workspace's display name. workspace_id: target workspace ID — get available IDs from list_workspaces()

NameTypeReqDescription
namestringyes
workspace_idstringyes

No output schema declared.

No examples provided.

update_workspace_action ~100

Update a workspace automation action. All fields are overwritten. workspace_id: target workspace ID — get available IDs from list_workspaces() metadata example: {"$type": "ProgressionUpdatedMetadata", "webhookUrl": "https://..."}

NameTypeReqDescription
action_idstringyes
details
hub_profile_ids
metadataobjectyes
titlestringyes
workspace_idstringyes
NameTypeReqDescription
resultyes

No examples provided.

update_workspace_invitation ~77

Update the role assigned to a pending workspace invitation. workspace_id: target workspace ID — get available IDs from list_workspaces() role_id: 1 = Admin, 2 = Editor, 3 = Viewer

NameTypeReqDescription
invitation_idstringyes
role_idintegeryes
workspace_idstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the SRG+ MCP server?

SRG+ is an MCP server listed in the public MCP registry as io.github.srgplus/srgplus-mcp. Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent. This page covers its PyPI package (srgplus-mcp).

Is the SRG+ MCP server safe to use?

SRG+ scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the SRG+ MCP server expose?

SRG+ exposes 97 tools: list_hub_profiles, list_managed_hub_profiles, get_hub_profile, get_hub_profile_by_username, filter_hub_profiles, and 92 more. Their descriptions and schemas cost roughly 8,085 tokens of context every time the server is loaded.

Is the SRG+ MCP server still maintained?

SRG+ is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.