Koskamo

withPICA Directory MCP

A public music-rights directory MCP server that allows AI agents to search for songs, recordings, and creators, look up rights holders, and send licensing enquiries. It provides tools to find works by ISWC/ISRC, browse creators, and analyze audio characteristics like BPM and key, without requiring user authentication.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

withPICA Directory MCP logo, by withPICACommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by withPICA
MCP endpoint (Streamable HTTP)
https://directory.withpica.com/mcp
Vendor documentation

What its tools do

13 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

13 of 13 have a description · 13 of 13 declare behavior hints · 12 of 12 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Warning Advertises resources/templates/list but does not implement it
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for songs and creators by keywords
  • Look up work credits and rights holders by ISWC
  • Find recordings by audio features like BPM and key
  • Send licensing enquiries to song owners

Source and maintenance

Community listingRegistry 1.15.0

Protocol and capabilities

Server
pica-directory-mcp-server 1.15.0
MCP protocol negotiated in check
2025-11-25
Tools
13 advertised
Resources
6 advertised
Resource templates
Not advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

The PICA directory: search songs and their rights. Every listed song was put there by the people who own it, with writers, publishers, identifiers (ISWC, ISRC, IPI), how confirmed each credit is, and a way to ask the owner about licensing. No account or sign-in is needed. Start here: - A song about something ("a love song")? directory_list_works {q: "love"} first. Mood, BPM and key only narrow; few recordings have a mood yet. - Know the song or person? directory_chain {q} returns the song, its writers and publishers, its recording and audio profile in one call. directory_lookup_isrc for an ISRC. - Searching by sound (mood, BPM, key, energy)? directory_search_recordings. BPM, key and energy find only songs whose audio has been analysed; a mood search also finds songs whose owner set the mood, marked "mood set by the owner, not analysed". - A person by name: directory_list_people {q}, then directory_lookup_person with the ID. - Full detail on one song (credits with IPIs, confirmations, DSP links): directory_lookup_work. - Want to use a song? directory_send_licensing_enquiry, only after the user says yes and gives their own name, email and project. It is the only way to reach an owner: PICA never shares the owner's email address, so never write the enquiry as an email yourself. Nothing is agreed or priced. Skills: directory_skill_list shows step-by-step methods (find music for a sync brief, who owns this song, request a licence). directory_skill_get(name) loads one. Be honest about what is here. Say "not listed in the directory" rather than "doesn't exist", flag credits the owner hasn't confirmed, and never fill gaps from memory. Say "not listed" only after a title or text search finds nothing; its result carries a note on how the directory grows: pass it on once. An empty mood search only means no recording matched. "PICA Example Song" is PICA's example listing, marked example_listing: say it is an example, not a real song.

Tools

13 advertised

directory_list_works — List works
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'list works in PICA', 'works starting with B', 'find works by publisher X', 'browse the catalog', 'a song about love', 'songs about X'. For a theme or subject, search its plain word in q ('love', 'home', 'summer'): titles carry the theme. Start here before any mood or sound search, which only narrows. Browse and filter musical works their owners have listed in the PICA public directory. Filter by free-text (q), ISWC, ISRC, publisher, label, or starting letter (A–Z, or '#' for numeric). Sort by title (default) or recent. Returns paginated results. Each work carries ai_origin: whether the OWNER declared it human-made, AI-assisted or AI-generated (or 'not stated' — never assume human-made), with ACRCloud's AI detection beside it. Set human_made_only to keep only works the owner declared human-made that ACRCloud does not call likely AI. → then: directory_lookup_work (full details with credits and audio)

directory_list_works input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Text search across work titles and identifiers"
    },
    "isrc": {
      "type": "string",
      "description": "Filter by ISRC (exact match, cross-table recording lookup)"
    },
    "iswc": {
      "type": "string",
      "description": "Filter by ISWC (e.g. T-123.456.789-0)"
    },
    "page": {
      "type": "number",
      "description": "Page number (default: 1, 20 results per page)"
    },
    "sort": {
      "enum": [
        "title",
        "recent"
      ],
      "type": "string",
      "description": "Sort order (default: title)"
    },
    "label": {
      "type": "string",
      "description": "Filter by record label (partial match)"
    },
    "letter": {
      "type": "string",
      "description": "Filter by title starting letter (A–Z), or '#' for numeric"
    },
    "publisher": {
      "type": "string",
      "description": "Filter by publisher name (partial match)"
    },
    "human_made_only": {
      "type": "boolean",
      "description": "Only works the owner declared human-made, leaving out any ACRCloud calls likely AI-generated."
    }
  }
}
directory_list_works annotations
{
  "title": "List works",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_lookup_work — Look up a work
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'what's the ISWC for X?', 'who wrote X?', 'tell me about song X', 'is this song registered?'. Get the details of a single listed work by ISWC or work UUID. Returns the credits, one per person with each role marked confirmed or not confirmed by that person, and the person's IPI; each writer's share of the work, only when the owner chose to show shares AND that writer confirmed it themselves (with how many writers have); the recordings' ISRCs, audio analysis (BPM, key, energy) when the audio has been analysed, streaming links (Spotify, Apple Music, YouTube), AI origin (what the owner declared, with ACRCloud's detection beside it), the work's PICA score, and whether the owner is taking licensing enquiries, as a markdown summary. Fields with no data are omitted. → then: directory_lookup_person (a credited writer, by the credit's global_creator_id or IPI), directory_search_recordings (find similar tracks by audio)

directory_lookup_work input schema
{
  "type": "object",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "description": "ISWC (e.g. T-123.456.789-0) or work UUID"
    }
  }
}
directory_lookup_work annotations
{
  "title": "Look up a work",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_lookup_isrc — Look up a work by ISRC
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'lookup ISRC X', 'what's the work for ISRC X?', 'find the work for this recording'. Shortcut: look up the work(s) associated with a recording identifier (ISRC). Equivalent to directory_list_works with an isrc filter, pinned for recording-first discovery. → then: directory_lookup_work (full details on the matched work)

directory_lookup_isrc input schema
{
  "type": "object",
  "required": [
    "isrc"
  ],
  "properties": {
    "isrc": {
      "type": "string",
      "description": "ISRC code (e.g. USABC1234567)"
    }
  }
}
directory_lookup_isrc annotations
{
  "title": "Look up a work by ISRC",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_list_people — List creators
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'list creators in PICA', 'people starting with B', 'browse the people directory'. Browse and filter creators in the PICA public directory. Filter by free-text (q), ISNI, IPI, or starting letter (A–Z, or '#' for numeric). Returns paginated results. Each result carries global_creator_id, the ID directory_lookup_person takes. → then: directory_lookup_person (identifiers, roles, listed-work count and collaborators for one creator)

directory_list_people input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Text search across creator names"
    },
    "ipi": {
      "type": "string",
      "description": "Filter by IPI number"
    },
    "isni": {
      "type": "string",
      "description": "Filter by ISNI identifier"
    },
    "page": {
      "type": "number",
      "description": "Page number (default: 1, 20 results per page)"
    },
    "letter": {
      "type": "string",
      "description": "Filter by last name starting letter (A–Z), or '#' for numeric"
    }
  }
}
directory_list_people annotations
{
  "title": "List creators",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_lookup_person — Look up a creator
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'lookup IPI 12345', 'lookup ISNI X', 'find creator by MusicBrainz ID'. Also use it for the profile of a creator already found with directory_list_people or directory_search. Looks up ONE creator in the PICA public directory by an identifier: global_creator_id (UUID, from directory_list_people or directory_search), ISNI, IPI number, or MusicBrainz ID. It does not accept a name: to find a creator by name, or to choose between several people with the same name, use directory_list_people (q) or directory_search first. Returns the creator's name, identifiers (IPI, ISNI, MusicBrainz), roles, the number of their works listed in the directory, their PICA profile grade, and up to five collaborators on those listed works. It does not list the works themselves: use directory_list_works or directory_search with the creator's name for those. An unknown identifier returns not found. → then: directory_list_works (their listed works, by name)

directory_lookup_person input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "global_creator_id (UUID) from directory_list_people or directory_search, an ISNI, an IPI number, or a MusicBrainz ID. Not a name, and not person_id."
    }
  }
}
directory_lookup_person annotations
{
  "title": "Look up a creator",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_search — Search the directory
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'find me X', 'who or what is X?', 'find any record of X', 'a song about X'. Use when the entity type is not yet known. Convenience fan-out across works and creators — runs list_works and list_people with the same query and returns the union. No cross-type ranking; prefer list_works or list_people when the entity type is known. → then: directory_lookup_work (work details), directory_lookup_person (creator details, by the result's global_creator_id)

directory_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "type": {
      "enum": [
        "works",
        "people"
      ],
      "type": "string",
      "description": "Limit results to a specific entity type"
    },
    "query": {
      "type": "string",
      "description": "Search query — matches work titles, ISWCs, creator names, ISNIs"
    },
    "human_made_only": {
      "type": "boolean",
      "description": "Works only: keep works the owner declared human-made that ACRCloud does not call likely AI-generated."
    }
  }
}
directory_search annotations
{
  "title": "Search the directory",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_search_recordings — Find recordings by sound
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'find upbeat tracks around 120 BPM', 'find instrumental tracks in C minor', 'find energetic music for sync', 'tracks at X BPM in [key]'. AUDIO-FEATURE search only — for name- or title-shaped queries use directory_lookup_work, directory_lookup_isrc, or directory_list_people, NOT this tool. Not for a theme or subject ('a song about love'): search that in directory_list_works q first, then narrow here. Few recordings carry a mood yet, so an empty mood search does not mean the directory has no such song. Find tracks by BPM, key, energy, danceability, duration, mood, and more. The measured filters (BPM, key, energy, …) match analysed audio only; a mood search also returns works whose owner set the mood, marked mood_note "mood set by the owner, not analysed" — say so when you present them. Only returns recordings of works listed on the directory by their owner or a confirmed writer. → then: directory_lookup_work (credits and licensing details for a matched track)

directory_search_recordings input schema
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Musical key (e.g. 'C', 'F#', 'Bb'). Matches the detected key."
    },
    "mood": {
      "type": "string",
      "description": "Mood — one of: aggressive, ambient, calm, contemplative, dark, dramatic, dreamy, energetic, epic, ethereal, hopeful, intense, melancholic, nostalgic, passionate, playful, romantic, sad, tender, tense, triumphant, uplifting, warm. \"happy\" is read as \"uplifting\". Any other word is refused. A mood matches analysed recordings, and also listed songs whose owner set that mood on audio that is not analysed: those carry mood_note \"mood set by the owner, not analysed\" and no measured values. With a BPM, key, energy or other measured filter, only analysed recordings match."
    },
    "limit": {
      "type": "number",
      "description": "Max results to return (default: 20, max: 100)."
    },
    "max_bpm": {
      "type": "number",
      "description": "Maximum BPM (e.g. 140)"
    },
    "min_bpm": {
      "type": "number",
      "description": "Minimum BPM (e.g. 100)"
    },
    "key_mode": {
      "enum": [
        "major",
        "minor"
      ],
      "type": "string",
      "description": "Key mode — major or minor"
    },
    "max_energy": {
      "type": "number",
      "description": "Maximum energy, 0 to 1 (measured loudness)."
    },
    "min_energy": {
      "type": "number",
      "description": "Minimum energy, 0 to 1 — measured loudness (ITU-R BS.1770 integrated loudness on a quiet-to-loud scale), not a mood. Higher = louder."
    },
    "vocals_only": {
      "type": "boolean",
      "description": "Ignored: vocals are not measured and owners do not mark them."
    },
    "max_duration": {
      "type": "number",
      "description": "Maximum duration in seconds."
    },
    "max_dynamics": {
      "type": "number",
      "description": "Maximum dynamics, 0 to 1 (see min_dynamics)."
    },
    "min_duration": {
      "type": "number",
      "description": "Minimum duration in seconds."
    },
    "min_dynamics": {
      "type": "number",
      "description": "Minimum dynamics, 0 to 1 — measured loudness range (EBU R128). Not yet calibrated: accepted and ignored until it is (the result's ignored_filters says so)."
    },
    "max_brightness": {
      "type": "number",
      "description": "Maximum brightness, 0 to 1 (measured)."
    },
    "min_brightness": {
      "type": "number",
      "description": "Minimum brightness, 0 to 1 — measured high-frequency content (spectral rolloff), not a mood. 0 = the darkest 5% of the directory, 1 = the brightest 5%."
    },
    "max_danceability": {
      "type": "number",
      "description": "Ignored: danceability is not measured."
    },
    "min_danceability": {
      "type": "number",
      "description": "Ignored: danceability is not measured. Use min_rhythmic_density or min_energy."
    },
    "instrumental_only": {
      "type": "boolean",
      "description": "Only songs or recordings the OWNER marked instrumental (not a measurement)."
    },
    "max_rhythmic_density": {
      "type": "number",
      "description": "Maximum rhythmic density, 0 to 1 (see min_rhythmic_density)."
    },
    "min_rhythmic_density": {
      "type": "number",
      "description": "Minimum rhythmic density, 0 to 1 — measured onsets per second. Not yet calibrated: accepted and ignored until it is."
    }
  }
}
directory_search_recordings annotations
{
  "title": "Find recordings by sound",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_chain — Rights chain for a work
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'show me the rights chain for X', 'give me everything on this song', 'what's the full picture for X?', 'trace the chain from this writer to that work'. Graph lookup — resolves a query, ISWC, or ISRC to its full rights chain in one call. Each result bundles the work, its writers and publishers (names + roles, no IPIs or splits), the linked recording (ISRC, DSP presence, duration), and audio characteristics (BPM, key, energy). Prefer over stitching list_works + lookup_work + lookup_person when you want the whole graph around a track in a single round-trip. Supports audio-only queries (min_bpm, key, mood, etc.) when you don't have a text query. Work results carry programmable_since (every owner confirmed a locked split) and ready_to_license (composition and a master confirmed, with audio, ISRC and ISWC); filter to either with programmable_only / ready_to_license. → then: directory_lookup_work (deeper work detail), directory_list_people (research a named writer by name)

directory_chain input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Free-text query (work title, creator name, etc.). Minimum 2 characters."
    },
    "key": {
      "type": "string",
      "description": "Musical key (e.g. 'C', 'F#', 'Bb')"
    },
    "mood": {
      "type": "string",
      "description": "Mood — one of: aggressive, ambient, calm, contemplative, dark, dramatic, dreamy, energetic, epic, ethereal, hopeful, intense, melancholic, nostalgic, passionate, playful, romantic, sad, tender, tense, triumphant, uplifting, warm. \"happy\" is read as \"uplifting\". Any other word is refused. A mood matches analysed recordings, and also listed songs whose owner set that mood on audio that is not analysed: those carry mood_note \"mood set by the owner, not analysed\" and no measured values. With a BPM, key, energy or other measured filter, only analysed recordings match."
    },
    "limit": {
      "type": "number",
      "description": "Max results (default 10, max 20)"
    },
    "max_bpm": {
      "type": "number",
      "description": "Maximum BPM"
    },
    "min_bpm": {
      "type": "number",
      "description": "Minimum BPM"
    },
    "key_mode": {
      "enum": [
        "major",
        "minor"
      ],
      "type": "string",
      "description": "Key mode"
    },
    "identifier": {
      "type": "string",
      "description": "ISWC or ISRC — direct identifier lookup"
    },
    "max_energy": {
      "type": "number",
      "description": "Maximum energy, 0 to 1 (measured loudness)"
    },
    "min_energy": {
      "type": "number",
      "description": "Minimum energy, 0 to 1 — measured loudness, not a mood"
    },
    "ready_to_license": {
      "type": "boolean",
      "description": "Only works ready to license — composition and a master confirmed by every owner, that recording has audio and an ISRC, and the work has an ISWC. Audio results are the ready recordings themselves. Drops people from text results."
    },
    "programmable_only": {
      "type": "boolean",
      "description": "Only programmable works — every owner confirmed a locked split, so a licence fee is paid to each without chasing sign-off. Drops people from text results."
    }
  }
}
directory_chain annotations
{
  "title": "Rights chain for a work",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_skill_list — List directory skills
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'what skills do you have?', 'what can you do?', 'show me your methodologies', 'how do I find music here?'. Returns the list of downloadable directory skill methodologies — name, description, trigger phrases. Cheap to call. → then: directory_skill_get (load a specific skill's full methodology body)

directory_skill_list input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
directory_skill_list annotations
{
  "title": "List directory skills",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_skill_get — Get a directory skill
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'load a directory skill', 'use the sync brief method'. Call after directory_skill_list, to load the one skill the user's request matches (e.g. find-music-for-sync-brief). Returns the full methodology body for one directory skill — markdown with step-by-step instructions and tool chains. Call directory_skill_list first to see available skill names, then directory_skill_get to load one. Read once at the start of the workflow; do not re-fetch on every step. → then: directory_search (run the loaded methodology against the catalogue)

directory_skill_get input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Kebab-case skill name from directory_skill_list (e.g. 'find-music-for-sync-brief')."
    }
  },
  "additionalProperties": false
}
directory_skill_get annotations
{
  "title": "Get a directory skill",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_release_notes — Release notes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'what's new in the directory mcp', 'what changed in the directory', 'directory release notes', 'what version is the directory on'. Returns recent releases of the PICA directory MCP server — what shipped in the public catalogue surface itself. NOT for catalogue content searches (use directory_search / directory_list_works / directory_chain for those). Returns { package, current_version, releases: [{ version, date, sections, markdown }], resource_uri }. Defaults to the last 3 releases; use `since_version` to bound the output or `sections` to filter to Added/Fixed/etc. → then: directory_search (explore anything a release note mentions)

directory_release_notes input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Maximum number of releases to return. Default 3, max 20."
    },
    "sections": {
      "type": "array",
      "items": {
        "enum": [
          "Added",
          "Changed",
          "Fixed",
          "Removed",
          "Security",
          "Deprecated"
        ],
        "type": "string"
      },
      "description": "Filter each release's sections to only these names (e.g. ['Added', 'Fixed']). Sections not in the list are omitted from output."
    },
    "since_version": {
      "type": "string",
      "description": "If set, returns only releases strictly greater than this version (semver-compared). Versions equal to since_version are excluded."
    }
  }
}
directory_release_notes annotations
{
  "title": "Release notes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
directory_send_licensing_enquiry — Send a licensing enquiry
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Use when the user asks: 'ask the owner if I can license this', 'send a licensing enquiry for X', 'contact the rights holder about using this song'. Side effect: this SENDS AN EMAIL. It records a licensing enquiry for a work listed in the public directory and emails it to the work's owner, who can reply to the user by email (the user's address is shared with them); a confirmation email to the user is usually sent but not guaranteed. Nothing is agreed or priced: it only opens the conversation. This is the ONLY way to reach a listed work's owner: PICA never shares the owner's email address, so never draft the enquiry as an email for the user to send, and never guess an address. Sending through this tool is also what records the enquiry for the owner. ONLY call after the user has explicitly asked to send it and has given their own name, email and a description of the project. Never invent these, and never send on their behalf without asking. Get work_id from directory_lookup_work, directory_list_works or directory_chain. A 403 means the owner is not taking enquiries; a 404 means the work is not publicly listed; an unknown outcome means it may already have been sent, so never resend without asking. MORE WORKS FROM THE SAME OWNER: before sending, you may call directory_similar_from_owner and offer the user the owner's similar works. Put a work in also_work_ids ONLY if the user explicitly said yes to adding that work; never add works on your own judgement. All works go to the one owner in one enquiry (at most 10 in all); a work from another owner is refused. NOT FOR: looking up who owns a work (use directory_lookup_work). → first: directory_similar_from_owner (optional, to offer more of the owner's works) → then: directory_lookup_work (the work page and credits, to share with the user)

directory_send_licensing_enquiry input schema
{
  "type": "object",
  "required": [
    "work_id",
    "contact_name",
    "contact_email",
    "project_type",
    "project_description"
  ],
  "properties": {
    "term": {
      "type": "string",
      "description": "For how long (optional; omit if the user didn't say)."
    },
    "work_id": {
      "type": "string",
      "description": "The work's UUID from the directory."
    },
    "territory": {
      "type": "string",
      "description": "Where it would be used (optional; omit if the user didn't say)."
    },
    "budget_notes": {
      "type": "string",
      "description": "Anything the user said about budget that isn't a single amount, e.g. a range."
    },
    "company_name": {
      "type": "string",
      "description": "The user's company or production (optional)."
    },
    "contact_name": {
      "type": "string",
      "description": "The user's own name, as they gave it."
    },
    "project_type": {
      "enum": [
        "film",
        "tv series",
        "commercial",
        "trailer",
        "video game",
        "podcast",
        "social media",
        "other"
      ],
      "type": "string",
      "description": "The kind of project."
    },
    "also_work_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 9,
      "description": "More works from the SAME owner to include, from directory_similar_from_owner, and only the ones the user explicitly agreed to add. Omit otherwise."
    },
    "budget_amount": {
      "type": "number",
      "description": "Proposed fee, only if the user named one (optional)."
    },
    "contact_email": {
      "type": "string",
      "description": "The user's own email address. The owner will reply to it."
    },
    "budget_currency": {
      "type": "string",
      "description": "Three-letter currency code (default GBP)."
    },
    "project_description": {
      "type": "string",
      "description": "How the music would be used, in the user's words."
    }
  },
  "additionalProperties": false
}
directory_send_licensing_enquiry annotations
{
  "title": "Send a licensing enquiry",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
directory_similar_from_owner — More works from the same owner
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use when the user asks: 'does this owner have anything similar?', 'any other songs like this from them?'. Typically while they are asking about licensing one song. Returns up to 9 of the SAME owner's other listed works that share this work's topics, genre or tempo, each with the reasons, and how many listed works the owner has in all. Never another owner's works. Nothing is sent: offer them to the user, and add any to directory_send_licensing_enquiry's also_work_ids only if the user explicitly says yes. Empty when the work is not listed or the owner is not taking enquiries. → then: directory_send_licensing_enquiry (with the user's go)

directory_similar_from_owner input schema
{
  "type": "object",
  "required": [
    "work_id"
  ],
  "properties": {
    "limit": {
      "type": "number",
      "maximum": 9,
      "minimum": 1,
      "description": "How many to suggest (default 9)."
    },
    "work_id": {
      "type": "string",
      "description": "The work the user is asking about (UUID)."
    }
  },
  "additionalProperties": false
}
directory_similar_from_owner annotations
{
  "title": "More works from the same owner",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

3 advertised

find-music

Advertised by the server during the last successful anonymous check.

Find music for a sync brief, playlist, or project — search by mood, BPM, key, energy, or description

brief
What you're looking for — a mood, scene description, or audio characteristics
research-creator

Advertised by the server during the last successful anonymous check.

Research a songwriter, composer, or performer — see their works, identifiers, collaborators, and verification status

name_or_id
Creator name, IPI number, ISNI, or MusicBrainz ID
directory-autopilot

Advertised by the server during the last successful anonymous check.

Not sure where to start? Describe what you need and get routed to the right workflow — sync search, rights research, or identifier lookup

No arguments advertised.

Resources

6 advertised

PICA Domain Primer

Advertised by the server during the last successful anonymous check.

Plain-language description of PICA's domain model, entity relationships, and recommended agent workflows. Read this first.

PICA Domain Primer URI
llms://primer

MIME type: text/markdown

withPICA Directory Skills Index

Advertised by the server during the last successful anonymous check.

Enumeration of downloadable directory skill methodologies (SEP-2640 bridge). Each entry maps a kebab-case name to its skill:// URI, description, and trigger phrases.

withPICA Directory Skills Index URI
skill://withpica/index.json

MIME type: application/json

Release Notes — @withpica/mcp-server-directory

Advertised by the server during the last successful anonymous check.

Full CHANGELOG.md for the PICA directory MCP server. For just the last few releases, agents can call directory_release_notes.

Release Notes — @withpica/mcp-server-directory URI
release-notes://withpica/mcp-server-directory/latest

MIME type: text/markdown

Skill — find-music-for-sync-brief

Advertised by the server during the last successful anonymous check.

Find music in the PICA public directory for a sync brief — translate a mood/vibe/scene description into audio search parameters, run the search, and return a rights-aware shortlist with credit details for licensing.

Skill — find-music-for-sync-brief URI
skill://withpica/find-music-for-sync-brief/SKILL.md

MIME type: text/markdown

Skill — request-a-licence

Advertised by the server during the last successful anonymous check.

Help someone ask the owner of a work in PICA's public music directory about licensing it for a film, TV, ad, game, podcast or social project. Confirm the right work, gather the user's own details and project description, show them the enquiry before it goes, and send it only with their explicit go-ahead.

Skill — request-a-licence URI
skill://withpica/request-a-licence/SKILL.md

MIME type: text/markdown

Skill — who-owns-this-song

Advertised by the server during the last successful anonymous check.

Answer "who owns this song?" from PICA's public music directory. Start from a work title, artist, ISRC or ISWC, find the work, and show who wrote and published it, how confirmed those credits are, and whether it is ready to license. Use when someone needs to know who to talk to about a piece of music.

Skill — who-owns-this-song URI
skill://withpica/who-owns-this-song/SKILL.md

MIME type: text/markdown

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2450 ms
95th percentile latency
2450 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2450 ms · metadata changed · 13 tool(s), 6 resource(s), 3 prompt(s); warnings: Advertises resources/templates/list but does not implement it

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http withpica-directory-mcp https://directory.withpica.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add withpica-directory-mcp --url https://directory.withpica.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable withpica-directory-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "withpica-directory-mcp": {
      "url": "https://directory.withpica.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "withpica-directory-mcp": {
      "type": "streamableHttp",
      "url": "https://directory.withpica.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start withpica-directory-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "withpica-directory-mcp": {
      "type": "http",
      "url": "https://directory.withpica.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http withpica-directory-mcp https://directory.withpica.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://directory.withpica.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "withpica-directory-mcp": {
      "serverUrl": "https://directory.withpica.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like withPICA Directory MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.