SRG+
PYPI · SRGPLUS-MCP · 2 COMPONENTS · SCANNED SEP 21
Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.
Available components
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
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 138 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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
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
claude mcp add srgplus-srgplus-mcp -- uvx srgplus-mcp
{
"mcpServers": {
"srgplus-srgplus-mcp": {
"command": "uvx",
"args": [
"srgplus-mcp"
]
}
}
} {
"servers": {
"srgplus-srgplus-mcp": {
"command": "uvx",
"args": [
"srgplus-mcp"
]
}
}
} codex mcp add srgplus-srgplus-mcp -- uvx srgplus-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"srgplus-srgplus-mcp": {
"type": "local",
"command": [
"uvx",
"srgplus-mcp"
],
"enabled": true
}
}
} openclaw mcp add srgplus-srgplus-mcp --command uvx --arg srgplus-mcp
mcp_servers:
srgplus-srgplus-mcp:
command: "uvx"
args: ["srgplus-mcp"] {
"McpServers": {
"srgplus-srgplus-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"srgplus-mcp"
]
}
}
} assistant mcp add srgplus-srgplus-mcp -t stdio -c uvx -a srgplus-mcp
{
"mcpServers": {
"srgplus-srgplus-mcp": {
"command": "uvx",
"args": [
"srgplus-mcp"
]
}
}
} 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
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 →
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 →
add_content_to_categories ~103
Add a content item to one or more channel categories. 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 inside that channel to add the content to
| Name | Type | Req | Description |
|---|---|---|---|
| category_ids | array | yes | – |
| channel_id | string | yes | – |
| content_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
add_content_to_category ~79
Add one or more content items to a section inside a channel category. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | string | yes | – |
| channel_id | string | yes | – |
| content_ids | array | yes | – |
| section_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
add_subcontent ~202
Link existing content items as subcontent inside a collection section. Subcontent is the nested content that lives inside a Collection — think lessons inside a course, or chapters inside a module. A Content item automatically becomes a Collection once it has at least one subcontent item. workspace_id: target workspace ID — get available IDs from list_workspaces() content_id: ID of the collection (the parent content item) category_name: "Content" for nested content items, "Asset" for nested assets section_id: ID of the section to add the subcontent into (create a section first with create_content_section if needed) subcontent_ids: list of content IDs to link as subcontent (one or more)
| Name | Type | Req | Description |
|---|---|---|---|
| category_name | string | yes | – |
| content_id | string | yes | – |
| section_id | string | yes | – |
| subcontent_ids | array | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
add_users_to_permission_group ~60
Add one or more users to a permission group. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| group_id | string | yes | – |
| user_ids | array | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
archive_category ~54
Archive a category inside a channel. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | string | yes | – |
| channel_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
archive_channel ~50
Archive a channel (hidden from members, content preserved). workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
archive_hub_profile ~54
Archive a hub profile (hidden from listings, content preserved). workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| hub_profile_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
can_archive ~57
Check whether the current user can archive a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| target_id | string | yes | – |
| target_type | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | boolean | yes | – |
No examples provided.
can_create_child ~89
Check whether the current user can create a child resource inside a parent. workspace_id: target workspace ID — get available IDs from list_workspaces() Example: can the user create a "Channel" inside a "HubProfile"?
| Name | Type | Req | Description |
|---|---|---|---|
| child_target_type | string | yes | – |
| parent_target_id | string | yes | – |
| parent_target_type | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | boolean | yes | – |
No examples provided.
can_edit ~77
Check whether the current user has edit access to a target. workspace_id: target workspace ID — get available IDs from list_workspaces() target_type: "HubProfile", "Workspace", "Channel", "Content", etc.
| Name | Type | Req | Description |
|---|---|---|---|
| target_id | string | yes | – |
| target_type | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | boolean | yes | – |
No examples provided.
can_manage_permissions ~62
Check whether the current user can grant/revoke roles on a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| target_id | string | yes | – |
| target_type | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | boolean | yes | – |
No examples provided.
can_read ~77
Check whether the current user has read access to a target. workspace_id: target workspace ID — get available IDs from list_workspaces() target_type: "HubProfile", "Workspace", "Channel", "Content", etc.
| Name | Type | Req | Description |
|---|---|---|---|
| target_id | string | yes | – |
| target_type | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | boolean | yes | – |
No examples provided.
check_user_exists_by_email ~53
Check whether a user account with the given email address exists. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | – | |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | boolean | yes | – |
No examples provided.
check_user_exists_by_phone ~63
Check whether a user account with the given phone number exists (e.g. "+1234567890"). workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| phone_number | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | boolean | yes | – |
No examples provided.
create_category ~180
Create a new category inside a channel. Returns the new category ID. 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 sections: list of {"name": "...", "type": "...", "reference_ids": [...]} for initial sections
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | – |
| cover_show | boolean | – | – |
| expandable | boolean | – | – |
| is_pinned | boolean | – | – |
| name | string | yes | – |
| notifications_enabled | boolean | – | – |
| progression_enabled | boolean | – | – |
| sections | – | – | – |
| view_type | – | – | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_channel ~81
Create a new channel in a hub profile. Returns the new channel ID. workspace_id: target workspace ID — get available IDs from list_workspaces() privacy: "Private" (default) or "Public"
| Name | Type | Req | Description |
|---|---|---|---|
| hub_profile_id | string | yes | – |
| name | string | yes | – |
| privacy | string | – | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_content ~183
Create a new content item in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces() privacy: "Preview" (default), "Private", or "Public" channels: list of channel IDs to place the content in main_asset_id: ID of the primary playable asset url: optional external URL to associate with the content cover_image: local path or http(s):// URL of the cover image (auto-upload) context: additional context widget objects categories: category assignment objects
| Name | Type | Req | Description |
|---|---|---|---|
| categories | – | – | – |
| channels | – | – | – |
| context | – | – | – |
| cover_image | – | – | – |
| details | – | – | – |
| hub_profile_id | string | yes | – |
| main_asset_id | – | – | – |
| name | string | yes | – |
| privacy | string | – | – |
| url | – | – | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
create_content_section ~83
Create a section inside a collection content item's category. workspace_id: target workspace ID — get available IDs from list_workspaces() category_name: the name slug of the category (e.g. "week-1")
| Name | Type | Req | Description |
|---|---|---|---|
| category_name | string | yes | – |
| content_id | string | yes | – |
| name | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
create_embed_asset ~76
Create an embed asset (external URL embed) in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| duration_in_seconds | – | – | – |
| hub_profile_id | string | yes | – |
| name | string | yes | – |
| url | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
create_file_asset ~96
Create a file asset record in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces() extension: without dot, e.g. "pdf" Returns a signed URL for uploading the actual file.
| Name | Type | Req | Description |
|---|---|---|---|
| extension | string | yes | – |
| hub_profile_id | string | yes | – |
| memory_size_in_bytes | integer | yes | – |
| name | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
create_hub_profile ~169
Create a new hub profile in a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces() availability_level: "Public" (default) or "Private" primary_url: optional external URL shown on the profile app_clip_on: enable iOS App Clip widgets: profile widget configuration objects buttons: action buttons, each {"title": "...", "logic": {"type": "...", "url": "..."}}
| Name | Type | Req | Description |
|---|---|---|---|
| app_clip_on | boolean | – | – |
| availability_level | string | – | – |
| buttons | – | – | – |
| description | – | – | – |
| name | string | yes | – |
| primary_url | – | – | – |
| sub_name | – | – | – |
| user_name | string | yes | – |
| widgets | – | – | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
create_image_asset ~110
Create an image asset record in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces() extension: without dot, e.g. "png" Returns a signed URL for uploading the actual image.
| Name | Type | Req | Description |
|---|---|---|---|
| extension | string | yes | – |
| height | number | yes | – |
| hub_profile_id | string | yes | – |
| memory_size_in_bytes | integer | yes | – |
| name | string | yes | – |
| width | number | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
create_media_asset ~87
Create a media (video) asset record in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces() Returns a signed URL for uploading the actual video file.
| Name | Type | Req | Description |
|---|---|---|---|
| duration_in_seconds | – | – | – |
| hub_profile_id | string | yes | – |
| memory_size_in_bytes | – | – | – |
| name | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
create_permission_group ~81
Create a new permission group on a target. Returns the new group ID. workspace_id: target workspace ID — get available IDs from list_workspaces() target_type: "HubProfile" or "Workspace"
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| target_id | string | yes | – |
| target_type | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_section ~69
Create a new section inside a channel category. Returns the new section ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | string | yes | – |
| channel_id | string | yes | – |
| name | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
create_video_asset ~99
Create a video file asset record in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces() extension: without dot, e.g. "mp4" Returns a signed URL for uploading the actual video file.
| Name | Type | Req | Description |
|---|---|---|---|
| extension | string | yes | – |
| hub_profile_id | string | yes | – |
| memory_size_in_bytes | integer | yes | – |
| name | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
create_workspace_action ~112
Create a workspace automation action. Returns the new action ID. workspace_id: target workspace ID — get available IDs from list_workspaces() metadata example for a webhook trigger: {"$type": "ProgressionUpdatedMetadata", "webhookUrl": "https://..."} hub_profile_ids: profiles this action applies to (default: all)
| Name | Type | Req | Description |
|---|---|---|---|
| details | – | – | – |
| hub_profile_ids | – | – | – |
| metadata | object | yes | – |
| title | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_category ~60
Permanently delete a category from a channel. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | string | yes | – |
| channel_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_channel ~55
Permanently delete a channel and all its categories/sections. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_content_section ~70
Delete a section from a collection content item's category. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| category_name | string | yes | – |
| content_id | string | yes | – |
| section_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_hub_profile ~57
Permanently delete a hub profile and all its data. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| hub_profile_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_invitation ~57
Cancel and permanently delete a pending invitation. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| hub_profile_id | string | yes | – |
| invitation_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_permission ~80
Revoke all permissions a user has on a target. workspace_id: target workspace ID — get available IDs from list_workspaces() target_type: "HubProfile", "Workspace", or "Channel"
| Name | Type | Req | Description |
|---|---|---|---|
| target_id | string | yes | – |
| target_type | string | yes | – |
| user_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_permission_group ~52
Permanently delete a permission group. Members lose inherited permissions. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| group_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_section ~69
Permanently delete a section from a channel category. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | string | yes | – |
| channel_id | string | yes | – |
| section_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_subcontent ~165
Unlink a subcontent item from a collection section. Removes the link between the collection and the subcontent item. The subcontent item itself is NOT deleted — it continues to exist as a standalone content item. 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 that currently contains the subcontent item subcontent_id: ID of the subcontent item to unlink
| Name | Type | Req | Description |
|---|---|---|---|
| category_name | string | yes | – |
| content_id | string | yes | – |
| section_id | string | yes | – |
| subcontent_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_workspace_action ~48
Permanently delete a workspace automation action. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| action_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
delete_workspace_invitation ~50
Cancel and permanently delete a pending workspace invitation. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| invitation_id | string | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
filter_hub_profiles ~73
Batch-fetch lightweight hub profile data for a list of IDs. workspace_id: target workspace ID — get available IDs from list_workspaces() availability_level: "Public" or "Private" to filter by visibility
| Name | Type | Req | Description |
|---|---|---|---|
| availability_level | – | – | – |
| ids | array | yes | – |
| workspace_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_asset ~57
Get full asset details by ID (Media, File, Image, Embed, or Video). workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| asset_id | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_category_by_slugs ~76
Get category details by hub profile username, channel name, and category name slugs. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| category_name | string | yes | – |
| channel_name | string | yes | – |
| hub_profile_username | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_category_references ~89
List content references in a category with cursor-based pagination. workspace_id: target workspace ID — get available IDs from list_workspaces() Returns items and a cursor for the next page (null if no more pages).
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | string | yes | – |
| channel_id | string | yes | – |
| cursor | – | – | – |
| page_size | integer | – | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_channel ~52
Get full channel details by ID (includes categories and heading content). workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_channel_by_name ~63
Get channel details by hub profile username slug and channel name slug. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| channel_name | string | yes | – |
| hub_profile_username | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_content ~69
Get content item details by ID (v1 schema). workspace_id: target workspace ID — get available IDs from list_workspaces() hub_profile_id: optional, used to resolve access context
| Name | Type | Req | Description |
|---|---|---|---|
| content_id | string | yes | – |
| hub_profile_id | – | – | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_content_v2 ~62
Get content item by ID (v2 schema). workspace_id: target workspace ID — get available IDs from list_workspaces() Includes main asset, user progression, and extended metadata.
| Name | Type | Req | Description |
|---|---|---|---|
| content_id | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_hub_profile ~50
Get full hub profile details by ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| hub_profile_id | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_hub_profile_by_username ~53
Get hub profile details by its URL username/slug. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| username | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_invitation_link ~96
Generate a shareable invitation link for a single email address. 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.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | – | |
| hub_profile_id | string | yes | – |
| role_id | integer | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
get_permission_group ~51
Get a permission group by ID, including its members. workspace_id: target workspace ID — get available IDs from list_workspaces()
| Name | Type | Req | Description |
|---|---|---|---|
| group_id | string | yes | – |
| workspace_id | string | yes | – |
No output schema declared.
No examples provided.
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.