Skip to main content
The Royaltyport MCP server provides tools that let AI assistants browse projects, manage catalog data, upload files, and query financial analytics.

Project Tools

list_projects

List all projects for the authenticated organization. The organization is resolved automatically from your authentication token. Sample prompt: “Show me all my projects”

get_project

Get a project by ID.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
Sample prompt: “Get details about project a1b2c3d4-…“

search_project

Search across all resources in a project — contracts, entities, artists, writers, recordings, and compositions.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
querystringYes-Search query (1–500 characters)
Sample prompt: “Search for Sony in my project”

Contract Tools

list_contracts

List contracts for a project. Use includes to embed extracted sub-resource data inline.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
includesstring[]No-Sub-resources to include
Valid includes: entities, artists, writers, royalties, splits, costs, compensations, dates, accounting-periods, types, signatures, control-areas, creative-approvals, balances, recordings, compositions Sample prompt: “List all contracts with their royalty terms”

get_contract

Get a contract by ID with optional sub-resource includes.
ParameterTypeRequiredDefaultDescription
contractIdstringYes-Contract ID
projectIdUUIDYes-Project ID
includesstring[]No-Sub-resources to include (same list as above)
Sample prompt: “Get contract abc-123 with entities and dates”

Entity Tools

list_entities

List root entities for a project — companies, labels, publishers, or other organizations.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
includeMergedbooleanNofalseInclude merged (deduplicated) entities
Sample prompt: “List all entities in my project”

get_entity

Get an entity by ID with associated artists, writers, and relations.
ParameterTypeRequiredDefaultDescription
entityIdstringYes-Entity ID
projectIdUUIDYes-Project ID
includeMergedbooleanNofalseInclude merged entities
Sample prompt: “Get entity ent-456 with merged duplicates”

Artist Tools

list_artists

List root artists for a project — performers linked to recordings.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
includeMergedbooleanNofalseInclude merged artists
Sample prompt: “Show me all artists in the project”

get_artist

Get an artist by ID.
ParameterTypeRequiredDefaultDescription
artistIdstringYes-Artist ID
projectIdUUIDYes-Project ID
includeMergedbooleanNofalseInclude merged artists
Sample prompt: “Get details for artist art-789”

Writer Tools

list_writers

List root writers for a project — songwriters and composers.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
includeMergedbooleanNofalseInclude merged writers
Sample prompt: “List all writers in the project”

get_writer

Get a writer by ID.
ParameterTypeRequiredDefaultDescription
writerIdstringYes-Writer ID
projectIdUUIDYes-Project ID
includeMergedbooleanNofalseInclude merged writers
Sample prompt: “Get writer wrt-321”

Relation Tools

list_relations

List root relations for a project — contacts and people such as managers, A&R, and lawyers.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
includeMergedbooleanNofalseInclude merged relations
Sample prompt: “Show all contacts in the project”

get_relation

Get a relation by ID.
ParameterTypeRequiredDefaultDescription
relationIdstringYes-Relation ID
projectIdUUIDYes-Project ID
includeMergedbooleanNofalseInclude merged relations
Sample prompt: “Get relation rel-654”

Recording Tools

list_recordings

List recordings for a project — audio tracks identified by ISRC codes.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
includeProductsbooleanNofalseInclude associated products (albums, singles) with UPC codes
Sample prompt: “List recordings with their albums”

get_recording

Get a recording by ID with ISRC and artists.
ParameterTypeRequiredDefaultDescription
recordingIdstringYes-Recording ID
projectIdUUIDYes-Project ID
includeProductsbooleanNofalseInclude associated products
Sample prompt: “Get recording rec-111 with products”

Composition Tools

list_compositions

List compositions for a project — musical works identified by ISWC codes.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
includeProductsbooleanNofalseInclude associated products
Sample prompt: “List all compositions in my project”

get_composition

Get a composition by ID with ISWC and linked writers.
ParameterTypeRequiredDefaultDescription
compositionIdstringYes-Composition ID
projectIdUUIDYes-Project ID
includeProductsbooleanNofalseInclude associated products
Sample prompt: “Get composition comp-222”

Statement Tools

list_statements

List statements for a project — royalty or revenue reports uploaded as files.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
pageintegerNo1Page number
perPageintegerNo20Items per page (1–100)
Sample prompt: “Show all statements in the project”
For querying the actual revenue data within statements, use the query tool with BigQuery SQL instead.

get_statement

Get a statement by ID with processing status and currency.
ParameterTypeRequiredDefaultDescription
statementIdstringYes-Statement ID
projectIdUUIDYes-Project ID
Sample prompt: “Get statement 1234”

Upload Tools

upload_file

Create a staging record and return a signed upload URL. Upload the file via HTTP PUT to the returned uploadUrl. After the upload completes, you must call upload_completed to trigger processing.
ParameterTypeRequiredDefaultDescription
projectIdUUIDYes-Project ID
resourceTypestringYes-contract or statement
fileNamestringYes-Original file name (e.g. contract.pdf)
fileTypestringNoapplication/pdfMIME type of the file
fileSizeintegerYes-File size in bytes
extractionsstring[]No-Extractions to run after upload (contract only)
Valid extractions: entities, artists, writers, royalties, splits, costs, compensations, dates, accounting-periods, types, signatures, control-areas, creative-approvals, balances, recordings, compositions Sample prompt: “Upload contract.pdf and extract royalties and dates”

upload_completed

Signal that a file upload is complete. Call this after successfully uploading the file via HTTP PUT to the uploadUrl returned by upload_file. This triggers processing.
ParameterTypeRequiredDefaultDescription
stagingIdstringYes-Staging ID returned from upload_file
projectIdUUIDYes-Project ID
resourceTypestringYes-contract or statement
Sample prompt: “Signal that upload stg-456 is complete”

upload_status

Check the processing status of an uploaded contract or statement.
ParameterTypeRequiredDefaultDescription
stagingIdstringYes-Staging ID returned from upload_file
projectIdUUIDYes-Project ID
resourceTypestringYes-contract or statement
Sample prompt: “Check the status of upload stg-456”

Download Tools

download_file

Get a signed download URL for a contract or statement file. The URL expires in 1 hour.
ParameterTypeRequiredDefaultDescription
resourceIdstringYes-Contract ID or Statement ID
projectIdUUIDYes-Project ID
resourceTypestringYes-contract or statement
Sample prompt: “Download contract abc-123”

BigQuery Tools

list_tables

Lists available BigQuery tables and their schemas. Returns a compact summary by default. Set verbose to true to include full column details (name, data type, description).
ParameterTypeRequiredDefaultDescription
datasetsstring[]No["rp_data_external", "rp_data_intermediate"]Filter by dataset name
verbosebooleanNofalseWhen true, includes column details (name, data type)
Available datasets: rp_data_external, rp_data_intermediate Sample prompt: “What tables are available for querying?“

query

Execute a read-only SQL query against BigQuery. Use this for financial analytics — revenue breakdowns, cost reports, statement-level data, and period comparisons. Every referenced table must be filtered by project_id = @project_id (use table aliases in JOINs, e.g., a.project_id = @project_id AND b.project_id = @project_id). The @project_id parameter is automatically bound to the current project ID. Use standard SQL syntax (not PostgreSQL). Always use fully qualified table names (e.g., rp_data_external.recording_revenues_ext).
ParameterTypeRequiredDefaultDescription
sqlstringYes-SQL query with @project_id named parameter
projectIdUUIDExternal auth onlyAuto-injectedProject ID (required for external auth, auto-injected for internal)
offsetintegerNo0Number of rows to skip. Use with truncated results to paginate (e.g., offset=1000 for the next page)
Example query:
SELECT
  recording_name,
  SUM(net_receipts_eur) AS total_revenue
FROM rp_data_external.recording_revenues_ext
WHERE project_id = @project_id
GROUP BY recording_name
ORDER BY total_revenue DESC
LIMIT 10
Results are capped at 1,000 rows. If the query returns more, truncated will be true in the response. Use offset to paginate through large result sets. Sample prompt: “What are the top 10 recordings by revenue?”