@withpica/mcp-server
Version:
MCP Server for withPICA — enables AI assistants to interact with your withPICA music catalog
116 lines (75 loc) • 6.06 kB
Markdown
<!--
Hand-written prose for the two published npm READMEs.
`scripts/build-mcp-readmes.mjs` splices each block below onto a generated
tool inventory and writes `mcp-server/README.md` and
`mcp-server-directory/README.md`. Edit the prose HERE; never edit the
generated files, which carry a do-not-edit banner and are checked by
`node scripts/build-mcp-readmes.mjs --check`.
Both intros live in this one file because the generator has one input for
prose and one for structure. The markers below are load-bearing — the
generator splits on them.
-->
<!-- readme:mcp-server -->
# @withpica/mcp-server
MCP server for **withPICA** — music catalog management through conversation. Works, recordings, credits, agreements, rights, royalties, enrichment and registration-ready exports, from Claude, ChatGPT, Cursor, or any MCP-compatible client.
> **Not the same product as `@picahq/mcp`.** That is Pica / picaos.com, an unrelated API-integrations tool that happens to share the short name. If your assistant starts talking about integrations it never set up, or asks you to paste credentials into a dashboard, you have the other one installed.
## Install
```bash
claude mcp add withpica -- npx --yes @withpica/mcp-server@latest
```
Or, in any client that reads an `mcpServers` config:
```json
{
"mcpServers": {
"withpica": {
"command": "npx",
"args": ["@withpica/mcp-server"]
}
}
}
```
## Signing in
**On stdio (this package), no API key is needed up front.** Say _"sign me in to withpica"_ in chat; `pica_sign_in` emails you a magic link, you click it, and your tools unlock. `PICA_API_KEY` in the environment also works and skips the link.
**On the hosted HTTP transport** (`https://withpica.com/api/mcp`) there is no in-chat sign-in — `pica_sign_in` and `pica_sign_out` are stdio-only, because the credential file they write would land on an ephemeral filesystem your client never reads. Connect over OAuth 2.1 instead (dynamic client registration + PKCE S256, discovery at `https://withpica.com/.well-known/oauth-protected-resource`), or send an API key as a Bearer token. A Bearer caller should call `pica_introduce_self` first: PICA stamps that declaration onto every audit row that follows, so the owner can later reconstruct what their agent did.
API keys are created and revoked at <https://withpica.com/settings?tab=connections>.
## How the tools are surfaced
Over HTTP the server advertises a small meta-tool surface by default — `pica_discover` → `pica_tool_details` → `pica_execute` — so a schema-constrained client is not handed the whole registry at once. Every tool stays callable by name. Add `?layered=0` to the endpoint for the eager list.
Over stdio the full set is listed directly.
`pica_skill_list` / `pica_skill_get` load methodologies (catalog-audit, register-my-works, prepare-for-sync) as needed, rather than at handshake.
## Safety
Read tools are annotated read-only and are safe to call freely. Write tools report what changed. Destructive tools (delete, merge) require a two-step confirmation token and an elevated scope that ordinary agent grants cannot hold.
## Environment variables
| variable | required | meaning |
| -------------- | -------- | ------------------------------------------------- |
| `PICA_API_KEY` | no | skips the magic-link flow |
| `PICA_API_URL` | no | API base URL (default `https://withpica.com/api`) |
| `DEBUG` | no | verbose logging to stderr (`true` / `1`) |
## Links
- Connect guide: <https://withpica.com/connect>
- Machine-readable: <https://withpica.com/llms.txt>, <https://withpica.com/connect/llms.txt>
- Discovery: <https://withpica.com/.well-known/mcp.json>
- Support: support@withpica.com
<!-- readme:mcp-server-directory -->
# @withpica/mcp-server-directory
MCP server for the **withPICA public directory** — search over works, recordings and creators that rights holders have chosen to publish, plus one write: sending a licensing enquiry to an owner, when the user asks. Also hosted, no install: connect a remote MCP client to `https://withpica.com/api/mcp/directory`. No account, no API key, no setup.
## Install
```bash
claude mcp add withpica-directory -- npx --yes @withpica/mcp-server-directory@latest
```
## What it can answer
Who wrote this song. What the ISWC is. Which recordings exist of a work and what their ISRCs are. Which creators match a name, an ISNI or an IPI. Which published recordings sit in a tempo, key, energy or mood range. And, in one call, the rights chain for a work: writers, publishers, recording, audio.
Every entry is published deliberately by its rights holder, with attested credits and verified identifiers.
## REST, if you would rather not run a process
- `GET https://withpica.com/api/public/directory/works`
- `GET https://withpica.com/api/public/directory/people`
- `GET https://withpica.com/api/public/directory/search?q={query}`
- `GET https://withpica.com/api/public/directory/recordings`
- `GET https://withpica.com/api/public/directory/consent?iswc={iswc}`
100 requests/minute unauthenticated. Licensing keys unlock extended fields and their own limits.
## Before you train on any of this
withpica.com publishes a blanket TDM reservation at <https://withpica.com/.well-known/tdmrep.json> (`"tdm-reservation": 1`). Nothing here is licensed for text-and-data mining or model training by default.
The `consent` endpoint above is the granular counterpart: ask it about an identifier and it reports what the rights holders have actually cleared, and at what level. A work is cleared at a level only when every credited contributor has granted at least that level; one refusal blocks it. Read `no_assertion_published` literally — it means no permission is published for that identifier, which is not a maybe.
## Links
- Directory: <https://directory.withpica.com>
- Machine-readable: <https://withpica.com/directory/llms.txt>
- Support: support@withpica.com