generated: '2026-08-12' method: searched source: https://github.com/awhite07/p39-custom-category-mcp (stdio server, v1.0.9) and https://github.com/awhite07/peer39-mcp-connector (remote connector, v0.1.0), plus live probes of https://mcp-connector.scatter-brain.ai on 2026-08-12. name: Peer39 Custom Category MCP Server status: pre-release ownership: verdict: first-party-authored, not officially published evidence: - package.json name is "@peer39/mcp-server"; the connector is "@peer39/mcp-connector" - both READMEs close with "UNLICENSED — internal Peer39 project" / "internal Peer39 beta" - the README states "Once we publish to npm under @peer39, the URL will change" — first-person plural, npm scope @peer39 - GitHub repo homepage is set to https://app.peer39.com - 'src/partners.ts is annotated "Source of truth: Peer39 internal ''Symphony accounts'' partner list"' caveats: - Published under a personal GitHub account (awhite07), not a Peer39 GitHub organization — no github.com/peer39 org exists. - 'Not published to npm: @peer39/mcp-server, @peer39/sdk and peer39 all return 404 from registry.npmjs.org as of 2026-08-12.' - The remote connector is deployed on mcp-connector.scatter-brain.ai — a third-party droplet, NOT a peer39.com host. - Peer39 does not link to either repo from www.peer39.com. conclusion: Treated as a real, publicly installable, first-party-authored MCP surface for the Peer39 External API in PRE-RELEASE. It is deliberately NOT recorded as an officially hosted, Peer39-operated MCP endpoint, because Peer39 serves it from no domain it controls and announces it nowhere on its own site. deployments: - kind: stdio transport: stdio install: npx -y github:awhite07/p39-custom-category-mcp#v1.0.9 version: 1.0.9 published: '2026-07-14' host_client: Claude Desktop (or any MCP-compatible client) auth: Peer39 username + password supplied as PEER39_USERNAME / PEER39_PASSWORD env vars; the server exchanges them for a session id against https://app.peer39.com/api/external/login. config_env: PEER39_USERNAME: required PEER39_PASSWORD: required PEER39_BUYER_ID: optional PEER39_SYSTEM: optional PEER39_USER_EMAIL: optional PEER39_DEFAULT_PARTNER_ID: optional PEER39_BASE_URL: optional, defaults to https://app.peer39.com tool_count: 10 - kind: remote transport: streamable-http url: https://mcp-connector.scatter-brain.ai/mcp version: 0.1.0 published: '2026-05-18' host_note: NOT a Peer39-controlled domain. A tester-facing beta on a shared personal droplet, fronted by Caddy. Recorded because it is live and publicly reachable, not because Peer39 operates it. tool_count: 9 tools_omitted_vs_stdio: - peer39_configure auth: model: OAuth 2.1 probes: - url: https://mcp-connector.scatter-brain.ai/health http_status: 200 body: '{"ok":true}' - url: https://mcp-connector.scatter-brain.ai/.well-known/oauth-authorization-server http_status: 200 - url: https://mcp-connector.scatter-brain.ai/.well-known/oauth-protected-resource http_status: 200 - url: https://mcp-connector.scatter-brain.ai/mcp method: POST tools/list http_status: 401 note: Live tools/list introspection is auth-gated, so the tool inputSchemas below are read from the published TypeScript/zod source rather than from the wire. metadata: issuer: https://mcp-connector.scatter-brain.ai authorization_endpoint: https://mcp-connector.scatter-brain.ai/authorize token_endpoint: https://mcp-connector.scatter-brain.ai/token registration_endpoint: https://mcp-connector.scatter-brain.ai/register jwks_uri: https://mcp-connector.scatter-brain.ai/.well-known/jwks.json response_types_supported: - code grant_types_supported: - authorization_code - refresh_token code_challenge_methods_supported: - S256 token_endpoint_auth_methods_supported: - none - client_secret_post scopes_supported: - mcp rfcs_implemented: - RFC 7591 - RFC 8414 - RFC 9728 - RFC 8707 credential_storage: Peer39 username/password stored per-user, AES-256-GCM with the OAuth subject as AAD. tools: - name: peer39_configure category: configuration description: Persist buyer ID, system name, default email and default partner to ~/.peer39-mcp/config.json (mode 0600). stdio deployment only. - name: peer39_check_setup category: configuration description: Report current configuration — what is set, what is missing, and where in app.peer39.com to find each missing value. - name: peer39_create_category category: category-write description: Create a new custom category (keyword, URL, mobile app, CTV app, mobile-app keyword or CTV keyword) and sync it to a DSP. - name: peer39_get_category category: category-read description: Fetch one category's full details. - name: peer39_list_categories category: category-read description: List categories on a buyer account, with filtering and paging. - name: peer39_update_category_details category: category-write description: Update only the metadata — name, type, description, language, expiration, email. - name: peer39_update_category_items category: category-write description: Modify the items list. Defaults to APPEND in the MCP server even though the underlying API defaults to replace; pass append:false to replace. - name: peer39_update_category category: category-write description: '"Update all" — rewrite name, items and every other field in one call.' - name: peer39_delete_category category: category-write description: Batch delete categories. Destructive. - name: peer39_get_url_examples category: prediction description: Preview which URLs Peer39 would classify as matching a set of keyword phrases. Meaningful only for web keyword categories (type 2). crosswalk: mcp/peer39-tool-crosswalk.yml cross_reference: authentication: authentication/peer39-authentication.yml conventions: conventions/peer39-conventions.yml errors: errors/peer39-problem-types.yml deployment: mode: none verified: derived tools: 10 checked: '2026-08-12' source: catalog MCP census