@withpica/mcp-server
Version:
MCP Server for withPICA — enables AI assistants to interact with your withPICA music catalog
62 lines • 3.12 kB
TypeScript
/**
* ADR-180 Rule 9 (2026-05-02 amendment) — description hygiene.
*
* Two filter lists govern what's allowed in tool descriptions:
*
* PUBLIC_FORBIDDEN_KEYWORDS: broad. Bans data-source names + concept
* vocabulary so the unauthenticated lobby surface (anon `tools/list`,
* directory tools) gives no architectural intel to callers who haven't
* authenticated yet. Used by `public-filter.ts` to sanitise descriptions
* before they cross the lobby boundary.
*
* AUTHENTICATED_FORBIDDEN_KEYWORDS: narrow. Bans only infra / vendor /
* library names whose presence is always wrong regardless of audience —
* they leak hosting + integration choices that aren't load-bearing for
* any agent. Used by the lint at `scripts/lint-mcp-tools.ts` to enforce
* on every tool description, authenticated or not.
*
* Concept vocabulary that legitimately helps the agent (Tier A/B, cascade,
* "→ then:", MCP Apps) stays permitted on the authenticated surface — those
* are user-facing concepts the agent can reason about, not implementation
* leakage. Data-source names (MLC, ISNI, MusicBrainz, etc.) similarly stay
* permitted on the authenticated surface because the agent benefits from
* knowing which sources resolved a query.
*
* The two lists are explicitly disjoint by design — sanitisation for the
* lobby surface uses the union (PUBLIC ∪ AUTHENTICATED) since everything
* banned for authenticated surfaces is also banned for unauthenticated.
*/
/**
* Banned on the unauthenticated lobby surface (also banned on authenticated
* via union — see PUBLIC_FORBIDDEN_KEYWORDS_FULL below).
*
* Notably absent: "Spotify" and "YouTube" are public product surface that
* customers see in tool names like `pica_import_youtube_link` — hiding
* them in lobby descriptions would gut the utility-signal of those tools
* without protecting any algorithm.
*/
export declare const PUBLIC_FORBIDDEN_KEYWORDS: readonly string[];
/**
* Banned on every tool description, authenticated or not. These are infra /
* vendor / library names whose presence in a tool description is always
* implementation leakage — agents derive zero useful signal from knowing
* the email vendor, audio analysis library, or hosting platform.
*
* Stripe and Telegram are intentionally NOT banned — those are user-facing
* product surfaces (Stripe Checkout, Telegram reminders) the agent must
* reference in tool descriptions to drive correct behaviour.
*/
export declare const AUTHENTICATED_FORBIDDEN_KEYWORDS: readonly string[];
/**
* The full lobby filter is the union of both lists — anything banned on
* authenticated surfaces is also banned on unauthenticated.
*/
export declare const PUBLIC_FORBIDDEN_KEYWORDS_FULL: readonly string[];
/**
* Pattern matching any ADR reference (`ADR-123`, `ADR-1`, `ADR-9999` ...).
* The `\b` word boundaries prevent false matches on substrings like
* `LADRADR-`. ADR references are forbidden in every tool description on
* every surface.
*/
export declare const ADR_REFERENCE_REGEX: RegExp;
//# sourceMappingURL=forbidden-keywords.d.ts.map