Mediagraph MCP
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEDIAGRAPH_PAT | Yes | Personal Access Token (headless auth) | |
| MEDIAGRAPH_ORGANIZATION_ID | Yes | Organization id (required with PAT) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiA | Get information about the currently authenticated user and organization |
| get_organizationA | Get details about an organization by ID |
| find_organizationA | Find an organization by slug. Useful when you have a custom-domain URL or know the slug but not the id. |
| get_organization_abilitiesA | Get the current user's role-derived abilities (manage Asset, view_details Tag, etc.) in an organization. Pair with INSUFFICIENT_SCOPE errors so you can distinguish role denial from missing token scope. |
| list_my_organizationsA | List every organization the current user belongs to (across orgs). Useful for multi-tenant agents picking which org to operate in. |
| list_my_invitesA | List pending org invitations addressed to the current user. |
| accept_my_inviteB | Accept a pending org invitation by id. |
| get_my_otp_uriA | Get the otpauth:// URI for setting up TOTP 2FA on the current user account (encode in a QR code). |
| enable_my_otpA | Enable TOTP 2FA on the current user account by confirming a 6-digit code. |
| disable_my_otpA | Disable TOTP 2FA on the current user account. |
| list_membershipsC | List organization memberships |
| get_membershipB | Get membership details by ID |
| update_membershipD | Update a membership |
| reauthorizeA | Re-run the OAuth authorization flow. Use this to switch to a different Mediagraph organization or re-authenticate. |
| search_assetsA | Search for assets using filters and advanced query operators. ADVANCED SEARCH QUERY SYNTAX (for the 'q' parameter):
NOTE on multi-word queries: the API uses Elasticsearch cross_fields, so a multi-word query like "red barn" can match if "red" appears in one field and "barn" appears in another. Quote phrases ("red barn") to require both terms in the same field. Sort: pass either 'order' or its alias 'direction' (asc/desc). Results have an implicit id:asc tiebreaker (except when using a custom sort). COMMON SEARCH FIELDS:
|
| get_assetC | Get detailed information about a specific asset |
| update_assetC | Update asset metadata |
| delete_assetA | Delete (trash) an asset |
| add_tags_to_assetC | Add tags to an asset |
| get_asset_downloadB | Get a download URL for an asset |
| bulk_download_assetsA | Get a download URL for multiple assets (returns a ZIP file) |
| get_asset_auto_tagsB | Get AI-generated auto tags for an asset |
| get_asset_face_taggingsB | Get face taggings for an asset |
| tag_video_faceC | Manually tag a face track in a video; indexes the cropped frame into Rekognition. |
| detect_video_facesA | Trigger face detection for an existing video asset (for videos uploaded before video face tagging shipped). |
| tag_asset_faceA | Manually tag a detected face crop on an image asset and index it into Rekognition for org-wide face matching. Workflow for "upload a headshot for a person tag":
After indexing, future uploads automatically run face matching against this person. |
| search_asset_facesB | Run face search on an asset using the org-wide face index; matches detected faces to indexed person tags. Reindexes the asset on success. |
| block_asset_faceA | Block a detected face crop on an asset (creates a "Blocked Face" tag and excludes from future matching). |
| ignore_asset_face_toggleA | Toggle the per-asset "ignore" state on a detected face id. Useful for hiding low-confidence detections without blocking the face globally. |
| ignore_asset_unidentified_facesA | Hide all unidentified (unmatched) face crops on an asset. |
| set_asset_custom_metaA | Write to a custom meta field on an asset. The field's shape determines which value param to pass:
Pass none of value/text/*_id to clear the field. The asset is reindexed on success. |
| explain_asset_searchA | Super-admin diagnostic: show which Elasticsearch fields/terms matched a query for a given asset. |
| delete_published_imageA | Delete a single PublishedImage row. Auto-cleans the parent PublishedAsset when the last image is removed. |
| get_asset_versionsB | Get version history for an asset |
| revert_assetB | Revert an asset to a previous version |
| get_asset_countsC | Get asset counts with optional filters |
| get_trashed_assetsC | Get trashed assets |
| get_popular_assetsD | Get popular assets |
| bulk_edit_assetsA | Update fields on many assets in a single call. Pass an |
| bulk_add_tags_to_assetsB | Add the same tag names to many assets at once. |
| bulk_remove_tags_from_assetsA | Remove the same tag names from many assets at once. |
| bulk_set_asset_rights_packageA | Set (or clear with null) the rights package on many assets in one call. |
| bulk_set_asset_creator_tagA | Set (or clear with null) the creator tag on many assets in one call. |
| remove_assets_from_groupA | Remove many assets from a collection / lightbox / storage folder at once. |
| auto_tag_assetA | Run Rekognition / Vision auto-tagging on a single asset. Existing auto-tags are preserved; new ones are appended. |
| remove_asset_auto_tagB | Dismiss a specific auto-tag from this asset (does not delete the auto-tag globally). |
| generate_asset_alt_textA | Generate accessibility alt text for an asset using AI; saves to the alt_text field. |
| run_asset_aiA | Invoke an AI-enabled custom meta field action on an asset (e.g., LLM-driven extraction, classification, or description). |
| clear_asset_nsfwA | Mark an NSFW detection as a false positive on an asset; clears the moderation flag and re-indexes. |
| restore_assetA | Restore a trashed asset (undo delete_asset). |
| get_asset_metaA | Get extracted EXIF / IPTC / XMP / file metadata for an asset. |
| get_asset_contentB | Get extracted text content for a document asset (PDF/DOCX/etc.). |
| get_asset_ocr_contentB | Get OCR-extracted text from an image asset. |
| update_asset_descriptionA | Patch only the description field on an asset (lighter than update_asset; does not touch other fields). |
| get_selected_assetsA | Fetch full asset records for an explicit ID list in one call. Use after |
| get_assets_updated_since_last_syncA | Sync helper: returns asset ids that changed since |
| get_asset_event_logB | Audit trail for an asset: every version + who did what, paginated. |
| get_asset_added_byA | Find which user added a given asset to a given asset_group (collection / lightbox / folder). |
| add_asset_versionA | Initiate an upload of a NEW version of an existing asset. Returns a signed S3 URL; PUT the file there to complete. For end-to-end uploads from disk, prefer |
| slice_new_asset_versionA | Slice a video asset between |
| slice_new_assetA | Slice a video asset between |
| set_asset_preview_image_from_timeA | For a video asset: set the poster/preview image from the frame at |
| upload_asset_transcriptB | Upload a closed-caption / transcript text for a video asset (e.g. WebVTT or plain text). |
| list_collectionsC | List collections in the organization |
| get_collectionC | Get collection details |
| create_collectionC | Create a new collection |
| update_collectionD | Update a collection |
| delete_collectionC | Delete a collection |
| add_asset_to_collectionC | Add an asset to a collection |
| get_collections_treeA | Get collections hierarchy as a tree |
| add_assets_to_groupA | Add multiple assets to a Collection or Lightbox at once |
| list_lightboxesB | List lightboxes in the organization |
| get_lightboxB | Get lightbox details |
| create_lightboxC | Create a new lightbox |
| update_lightboxC | Update a lightbox |
| delete_lightboxB | Delete a lightbox |
| add_asset_to_lightboxB | Add an asset to a lightbox |
| get_lightboxes_treeB | Get lightboxes hierarchy as a tree |
| list_storage_foldersC | List storage folders |
| get_storage_folderB | Get storage folder details |
| create_storage_folderD | Create a new storage folder |
| get_storage_folders_treeA | Get storage folders hierarchy as a tree |
| transfer_lightbox_ownershipA | Transfer ownership of a lightbox to another user (by user id). |
| apply_lightbox_membership_assetsA | Push a lightbox membership's pinned assets out to all members (creates per-member copies). Used to broadcast curated picks to a shared lightbox. |
| remove_lightbox_membership_assetsB | Remove pinned-assets from a lightbox membership (counterpart to apply). |
| list_asset_group_invitesB | List pending and accepted invitations to collections, lightboxes, and storage folders. |
| get_asset_group_inviteB | Get an asset group invite by id. |
| create_asset_group_inviteA | Invite a user (by email) or existing membership to a collection / lightbox / storage folder. |
| update_asset_group_inviteB | Update an asset group invite (e.g. change role). |
| delete_asset_group_inviteB | Cancel/revoke an asset group invite. |
| list_tagsC | List tags in the organization |
| check_tag_nameA | Async uniqueness check for a tag name (e.g., for artwork inventory numbers). Returns { exists: boolean }. |
| get_tagC | Get tag details |
| create_tagA | Create a new tag. Supports the full enrichment surface (description, sub_type, link, event fields, artwork fields, external-system identifiers). |
| update_tagB | Update a tag — accepts every enrichment field (description, sub_type, link, event fields, artwork fields, external-system links, synonym graph). |
| delete_tagB | Delete a tag |
| merge_tagsA | Merge one tag into another. With set_synonym=true, the source tag is preserved as a synonym of the target instead of being deleted. |
| reset_tag_faceA | Clear face-tagging state on a person tag and re-enqueue Rekognition indexing. |
| add_tag_to_taxonomyB | Add an existing tag to a taxonomy as a taxonomy_tag. |
| remove_tag_taxonomiesA | Detach a tag from all taxonomies it belongs to. |
| bulk_find_tagsA | Find or stub many tags by name in a single call. Returns existing tags where matched, otherwise unsaved Tag-shaped records the agent can persist. |
| bulk_update_tagsC | Apply a single change to many tags (set list, attach/detach taxonomy). |
| bulk_delete_tagsA | Delete many tags by id in a single call. |
| get_tag_eventsB | List recent tag activity events for the org. Optionally filter by year/month. |
| get_recent_tag_eventsA | Top 10 most recent tag activity events (no pagination). |
| get_tag_associated_facesA | List the face crops currently associated with a person tag (across the org). |
| set_tag_face_membershipA | Associate a person tag with a user (by email). The user becomes the canonical "face" for the tag — useful for faceless tags that need to point to a real person. |
| remove_tag_face_membershipC | Remove the user-membership association from a person tag. |
| set_tag_face_creator_tagA | Link a person tag to a creator tag by name. Photos created by that creator gain the linked person tag automatically. |
| remove_tag_face_creator_tagB | Unlink the creator-tag association from a person tag. |
| set_main_face_for_taggingA | Promote a tagging to the canonical face for its tag. Used after tag_asset_face to pick which crop represents the person. |
| associate_tagging_with_faceA | Associate an existing tagging with a Rekognition face id (link tagging → detected face crop). |
| disassociate_tagging_with_faceA | Remove the face-crop association from a tagging. |
| get_taggingB | Get details of a specific tagging (tag-to-asset relationship) |
| delete_taggingA | Remove a tagging (untag an asset) |
| list_auto_tagsB | List AI-generated auto tags |
| get_auto_tagC | Get auto tag details |
| bulk_find_auto_tagsA | Find multiple auto tags by their names at once |
| delete_auto_tagC | Delete/dismiss an auto tag |
| list_taxonomiesB | List taxonomies (controlled vocabularies) |
| get_taxonomyC | Get taxonomy details |
| create_taxonomyC | Create a new taxonomy |
| update_taxonomyC | Update a taxonomy (name, description, etc.). |
| delete_taxonomyA | Delete a taxonomy. Tags inside it are detached, not deleted. |
| list_taxonomy_tagsB | List tags within a taxonomy |
| get_taxonomy_tags_treeA | Hierarchical tree view of all taxonomy_tags within a taxonomy (parent → children). |
| get_taxonomy_tags_visible_asset_countsA | Count assets visible-to-current-user under each taxonomy_tag id (for displaying counts in a tree view). |
| bulk_find_taxonomy_tagsA | Find or stub many taxonomy_tags by name in a single call (top-level — searches across taxonomies). |
| create_taxonomy_tagC | Create a tag within a taxonomy |
| update_taxonomy_tagC | Update a tag inside a taxonomy. |
| delete_taxonomy_tagC | Delete a tag from a taxonomy. |
| list_creator_tagsC | List creator/photographer tags |
| create_creator_tagC | Create a new creator tag |
| list_rights_packagesB | List rights packages for managing asset usage rights |
| get_rights_packageC | Get rights package details |
| create_rights_packageC | Create a new rights package |
| list_share_linksC | List share links |
| get_share_linkC | Get share link details |
| create_share_linkB | Create a share link for a Collection, Lightbox, or Storage Folder |
| delete_share_linkC | Delete a share link |
| list_access_requestsC | List access requests and grants |
| get_access_requestC | Get access request details |
| submit_access_requestD | Submit an access request |
| get_share_statusA | Lightweight status poll for a share (aasm_state, progress, code, url, direct_link) |
| list_sharesA | List shares (one-off transfers of an asset/group to a user, distinct from public share_links). |
| get_shareB | Get a share by id. |
| create_shareC | Create a share (transfer assets / a group to a user). See Mediagraph share docs for the body fields supported by your org. |
| delete_shareB | Revoke / delete a share by id. |
| get_share_htmlA | Render the HTML email body that would be sent for this share (preview). |
| get_share_assetsA | List the assets included in a share. |
| create_access_requestA | Create a draft access request (pre-submit). Use submit_access_request to send it. |
| update_access_requestC | Update an in-progress access request. |
| delete_access_requestB | Delete an access request. |
| finalize_access_requestA | Admin: finalize a submitted access request — approves and grants access. |
| revoke_access_requestB | Admin: revoke a previously granted access request. |
| agree_to_access_requestB | Guest: record agreement to terms / NDA on an access request. |
| set_access_request_custom_metaB | Set a custom meta field value on an access request (mirrors set_asset_custom_meta). |
| find_access_requestA | Find an access request by guid (used in guest-link resolution). |
| get_access_requests_treeA | Hierarchical tree view of access requests by asset group. |
| list_access_grantsA | List access grants (the records produced when an access request is finalized). |
| delete_access_grantC | Delete (revoke) an access grant. |
| list_bulk_jobsC | List bulk jobs |
| get_bulk_jobB | Get bulk job details and status |
| create_bulk_jobA | Create a bulk job for batch operations on assets. Supports multiple operation types:
|
| preview_rename_bulk_jobA | Preview the filenames a rename bulk job will produce, before submitting it. |
| cancel_bulk_jobB | Cancel a running bulk job |
| get_bulk_job_queue_positionB | Get queue position for a bulk job |
| list_meta_importsC | List metadata import jobs |
| get_meta_importC | Get metadata import job details |
| list_ingestionsC | List ingestion jobs |
| list_custom_meta_fieldsC | List custom metadata fields |
| get_custom_meta_fieldB | Get custom meta field details |
| create_custom_meta_fieldC | Create a custom metadata field |
| list_workflowsC | List workflows |
| get_workflowC | Get workflow details |
| create_workflowC | Create a new workflow. |
| update_workflowD | Update a workflow. |
| delete_workflowA | Delete a workflow. In-flight workflow_steps may need to be cancelled separately. |
| list_workflow_stepsA | List workflow steps (the user-facing approval queue). |
| get_workflow_stepA | Get a workflow step by id. |
| create_workflow_stepB | Create a workflow step (typically attached to a workflow + asset_group). |
| update_workflow_stepC | Update a workflow step. |
| delete_workflow_stepB | Delete a workflow step. |
| approve_workflow_stepB | Approve all selected assets in a workflow step, moving them to the next step. |
| approve_workflow_step_picksA | Approve a curated subset (picks) within a workflow step. Same shape as approve_workflow_step but only the chosen assets advance. |
| list_commentsA | List comments on a Lightbox or Collection |
| create_commentA | Create a new comment on a Lightbox or Collection. Supports markdown and @mentions. |
| update_commentA | Update a comment. Only the comment author can update their own comments. |
| delete_commentA | Delete a comment. Only the comment author can delete their own comments. |
| list_notificationsC | List notifications |
| get_notification_countA | Get unread notification count |
| create_downloadC | Create a batch download for multiple assets |
| get_downloadC | Get download status and URL |
| upload_fileA | Upload a file to Mediagraph. Two body modes (file_path or file_data) and three session modes: Body modes:
Session modes (mutually exclusive):
Files >16 MiB automatically use S3 multipart upload (parallel parts, retry per part); smaller files go through a single signed PUT. |
| upload_filesA | Upload multiple files from the local filesystem in one operation. Session behavior:
Files >16 MiB use S3 multipart automatically. |
| create_upload_sessionA | Create a long-lived upload session that you can append files to over multiple upload_file / upload_files calls. Use this when batch-uploading many files from a script or agent loop, when you want them grouped under one upload in the Mediagraph UI, or when you need to resume after a crash. Returns the session guid plus aws_key/bucket (used internally for direct-to-S3 multipart). Call set_upload_done with the returned id when the batch is complete. |
| set_upload_doneA | Finalize an upload session, marking it as complete. Triggers any post-upload hooks (notifications, contribution acceptance, etc.). Call this after the last upload_file/upload_files in a batch you opened with create_upload_session. |
| list_webhooksB | List webhooks |
| get_webhookB | Get webhook details |
| create_webhookB | Create a webhook to receive event notifications |
| delete_webhookB | Delete a webhook |
| get_webhook_logsC | Get webhook delivery logs |
| list_user_groupsC | List user groups |
| get_user_groupA | Get a user group by id (members + permissions). |
| create_user_groupC | Create a user group |
| update_user_groupC | Update a user group (name, description, etc.). |
| delete_user_groupA | Delete a user group. Members are not deleted. |
| list_invitesC | List pending invites |
| create_inviteB | Invite a user to the organization |
| update_inviteB | Update an invite (change role or note) |
| resend_inviteB | Resend an invite email |
| find_inviteA | Look up an invite by token (for the public invite-acceptance flow). |
| check_invite_emailA | Check whether a given email is a valid recipient for a new invite (already has account, already in org, etc.). |
| get_available_invite_role_levelsA | Return the list of role_level values that the current user is allowed to grant in an invite. Helps prevent BAD_ARGS at create time. |
| accept_inviteA | Accept an invite using its email-link token (public flow — distinct from |
| find_membershipB | Find a single membership in the current org by username OR user_id. |
| search_membershipsA | Search memberships within a comment context (collection / lightbox) — used for assignee pickers and @-mention lookups in commenting flows. |
| update_membership_statusA | Update the AASM status of a membership (e.g. activate, suspend). Different from |
| list_membership_requestsA | List pending requests from users asking to join the current org. |
| get_pending_membership_requests_countA | Count of pending membership requests (for badging admin dashboards). |
| list_filter_groupsC | List saved filter groups |
| get_filter_groupC | Get filter group details |
| create_filter_groupC | Create a new filter group with saved filter configurations |
| update_filter_groupC | Update a filter group |
| update_filter_group_visibilityB | Update the visibility of a specific filter within a filter group |
| delete_filter_groupB | Delete a filter group |
| list_search_queriesB | List saved search queries |
| get_search_queryC | Get search query details |
| create_search_queryA | Save a new search query. The sql field should contain an Elasticsearch SQL WHERE clause. |
| update_search_queryA | Update a saved search query name or description. Note: The SQL query cannot be changed after creation. |
| delete_search_queryB | Delete a saved search query |
| list_crop_presetsC | List crop presets |
| create_crop_presetC | Create a crop preset |
| can_uploadA | Check if uploads are allowed (storage quota) |
| list_uploadsC | List upload sessions |
| add_assets_to_uploadB | Add assets to an upload session |
| list_contributionsA | List contribution portals (upload links). Use contribution_id with upload_file/upload_files to upload to a specific storage folder or lightbox. |
| get_contributionC | Get contribution details |
| create_contributionB | Create a new contribution portal (named upload link tied to a collection / lightbox / folder). |
| update_contributionC | Update a contribution portal. |
| delete_contributionC | Delete a contribution portal. |
| find_contributionC | Find a contribution by slug. |
| list_featured_contributionsA | List featured contribution portals (those highlighted in the org UI). |
| list_group_contributionsB | List contributions tied to a collection / lightbox / folder. |
| list_lightbox_contributionsB | List contributions tied to lightboxes. |
| list_link_contributionsA | List standalone (link-only) contributions. |
| list_personal_access_tokensA | List personal access tokens |
| create_personal_access_tokenC | Create a personal access token |
| delete_personal_access_tokenB | Delete a personal access token |
| disable_personal_access_tokenA | Super-admin: disable a PAT (requests respond with X-PAT-Disabled header) |
| enable_personal_access_tokenA | Super-admin: re-enable a previously disabled PAT |
| add_organization_cai_budgetB | Super-admin: send a Stripe invoice for a CAI budget top-up |
| grant_organization_cai_budgetC | Super-admin: grant free CAI budget to an organization |
| mark_organization_cai_invoice_paidB | Super-admin: mark an open CAI invoice as paid out-of-band |
| extend_organization_trialA | Admin: extend a trialing/past_due/canceled subscription |
| export_custom_meta_fieldsC | Bulk export custom meta fields by ID |
| search_assets_visualA | Search for assets and display results in an interactive visual gallery. This tool provides a rich visual interface for browsing search results with:
Use this when the user wants to visually browse or explore assets. |
| list_tag_importsB | List tag-import jobs |
| get_tag_importC | Get a tag-import job |
| create_tag_importB | Create a tag-import job. |
| update_tag_importC | Update a tag-import job |
| delete_tag_importB | Delete a tag-import job |
| update_tag_import_mappingC | Set the column mapping for a tag-import job |
| start_tag_importA | Start processing a tag-import job once it is in the |
| get_tag_import_tagsA | List tags created/updated by a tag-import job |
| list_rename_presetsB | List rename presets |
| get_rename_presetA | Get a rename preset |
| create_rename_presetC | Create a rename preset |
| update_rename_presetC | Update a rename preset |
| delete_rename_presetB | Delete a rename preset |
| reorder_rename_presetsB | Reorder rename presets by moving one from oldIndex to newIndex |
| list_meta_downloadsB | List background metadata-export jobs |
| get_meta_download_columnsA | Get the column catalog for metadata exports (grouped + IPTC + custom meta fields), plus the default |
| create_meta_downloadA | Kick off a background metadata CSV export. Returns { guid } to poll status. |
| update_meta_downloadA | Toggle the |
| generate_urlA | Generate a direct deep-link URL to a Mediagraph entity (asset, collection, lightbox, storage folder, tag, creator tag, share link, or the explore root). Two host modes:
Path patterns: asset → /explore#/assets/{guid} (hash route) collection → /explore/collections/{slug} lightbox → /explore/projects/{id}-{slug} storage_folder → /explore/folders/{slug} tag, creator_tag → /explore/tags/{id}-{name} share_link → /share-links/{share_code} Identifier rules:
Override host with --host (e.g., point at staging) or --base_host (just the fallback). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 276 tools
Many tools have overlapping or near-identical purposes: search_assets vs search_assets_visual, update_asset vs bulk_edit_assets vs set_asset_custom_meta vs update_asset_description, and a dense cluster of face/tagging tools (tag_asset_face, associate_tagging_with_face, set_main_face_for_tagging, set_tag_face_creator_tag, set_tag_face_membership) that are hard to distinguish without deep domain knowledge. Invite/share/access-request/contribution concepts also fragment into dozens of similarly named tools (create_share vs create_share_link vs create_invite vs create_contribution), making misselection likely.
Nearly everything is snake_case verb_noun (list_tags, create_collection, delete_webhook), with consistent bulk_/get_/list_/create_/update_/delete_ prefixes. Minor deviations exist: whoami, reauthorize, and the mix of find_* vs get_* for lookups, but the convention remains readable and predictable.
276 tools is an extreme surface far beyond what an agent can navigate reliably; many are super-admin, diagnostic, or one-off maintenance operations (mark_organization_cai_invoice_paid, explain_asset_search, get_pending_membership_requests_count). The set should be split into narrower servers or consolidated.
The DAM domain is covered comprehensively: asset CRUD/versioning/restore, tags, taxonomies, collections, lightboxes, storage folders, shares, access requests, workflows, webhooks, uploads, contributions, bulk jobs, and meta import/export. Minor gaps exist (no update/delete for rights packages, some lifecycle actions only partially covered), but core workflows have no dead ends.