Connectors for AI assistants

pending deployment — This page documents the implemented connector contract. The hosted service is not yet available for connection or directory installation. The server registers nine tools by default, or all eleven when the operator enables filing tools after deploying the account filing operation.

People’s Court is an AI arbitral forum. A connector lets your assistant read cases you can access, prepare a filing, and submit a brief or case message when you authorize those actions. The assistant does not give legal advice or accept arbitration for you. Review and acceptance happen on People’s Court.

Connect and authorize

The configured Streamable HTTP resource is https://mcp.peoplescourt.ai/mcp. Use that exact URL, including /mcp, as the OAuth resource on authorization and token requests.

Discovery starts with a 401 response whose WWW-Authenticate: Bearer challenge names resource_metadata and scope="cases:read". Protected resource metadata is at https://mcp.peoplescourt.ai/.well-known/oauth-protected-resource/mcp, with a root fallback at /.well-known/oauth-protected-resource. Its resource matches the connection URL and its sole authorization server is https://peoplescourt.ai. Authorization server metadata is at https://peoplescourt.ai/.well-known/oauth-authorization-server.

Sign in with a verified People’s Court account. Review the connector name, client URI where supplied, redirect hostname, requested scopes, Rules and AI disclosure. Authorization uses an authorization code with S256 PKCE; authorization responses include iss. Each authorization represents one account. It does not combine the two parties’ authority or grant standing authority to accept future cases.

Clients have three registration paths:

  1. An operator may pre-register a connector with fixed redirect URIs.
  2. A Client ID Metadata Document (CIMD) uses an HTTPS URL as client_id. The document must identify that exact URL and list the redirect URI. Discovery advertises client_id_metadata_document_supported. A CIMD client uses public-client authentication at the token endpoint.
  3. Dynamic client registration uses POST https://peoplescourt.ai/api/oauth/register with JSON client metadata. It returns a pcc_ client ID without a secret. Registration is rate-limited; unused registrations expire after 90 days.

Clients prefer an existing registration, then CIMD, then DCR. Claude uses CIMD or DCR; no held Claude client credential is planned. Connector clients cannot use the machine-only client_credentials grant. HTTPS redirects are exact matches; registered localhost and 127.0.0.1 loopback redirects ignore only the port.

Scopes and additional authorization

ScopePermission
cases:readList your cases and read authorized case views, events, served Awards, record manifests, Rules and fee quotes
filings:writePrepare your filing and confirm it after recorded hosted acceptance
submissions:writeSubmit a bounded text brief in an open phase
messages:writePost an authorized hosted-thread message
offline_accessObtain a rotating refresh token

Discovery advertises only cases:read. A write requiring another scope returns HTTP 403 with one WWW-Authenticate challenge containing error="insufficient_scope" and the complete operation scope set, such as cases:read submissions:write. The assistant should request that additional authorization before retrying. Scopes outside this set are refused with invalid_scope.

Tools

Every tool has a title and the MCP annotations readOnlyHint, destructiveHint, idempotentHint and openWorldHint. The reviewed read-tool contract sets readOnlyHint: true, destructiveHint: false, idempotentHint: true and openWorldHint: false. Brief and message writes set readOnlyHint: false, destructiveHint: true and openWorldHint: true. Briefs and messages set idempotentHint: true. Filing preparation and confirmation use idempotentHint: true and openWorldHint: false. Annotations guide the host; the service independently enforces authority.

ToolScopeUse and annotations
list_my_casescases:readList cases accessible to your account; read-only
get_case_viewcases:readRead your authorized case projection; read-only
get_case_eventscases:readRead events with a cursor; read-only
get_served_awardcases:readRead the served Award; read-only
get_case_record_manifestcases:readRead the record manifest; read-only
get_rules_versioncases:readRead the current Rules; read-only
quote_filing_feecases:readObtain a fee quote; read-only, moves no funds
prepare_filingfilings:writePrepare a standard-procedure filing as your account and return the review packet and hosted link; write, not destructive, idempotent
confirm_filingfilings:writeConfirm after hosted acceptance; write, destructive, idempotent
submit_briefsubmissions:writeSubmit a text brief; write, destructive, idempotent
post_case_messagemessages:writePost a hosted-thread message; write, destructive, idempotent

List and event pages default to 25 entries and accept a limit from 1 to 50. Briefs accept at most 50,000 characters and case messages at most 10,000; the request byte cap also applies. Unknown input properties are rejected.

Before submit_brief, ask the person to affirm the filing’s attestation of truthfulness and supply declarantName, declarantCapacity and executionLocation (each 1–200 characters). Pass the required boolean attest: true only after their explicit affirmation. Never default it or infer it from OAuth approval, permission to use the tool, or an earlier filing. Capacity must be “Individual party”, “Authorized representative of an entity”, or “Other:” followed by the person’s description. The tool’s description, required input schema and _meta["peoplescourt/declaration"] prompt for these fields; metadata grants no authority. The connector and SDK forward the declaration unchanged to the canonical submission route. Missing or false affirmation returns invalid_request with isError: true and creates no submission.

Use an idempotency key for every write. Reuse it for the same filing preparation or confirmation. A brief persists a receipt keyed by case, party, principal and key: the same request replays its result, and a changed body with the same key is refused. Every exposed message category persists its receipt atomically with the message, keyed by account, case and idempotency key. Reusing the key with the same input returns the original receipt after a lost response; changed input conflicts. A brief accepts text, including an ordinary citation or URL within that text, but has no file, URL-fetch or base64 input. The service never follows links found in party text. A connector provides no settlement, payment, respondent Answer, record-confirmation, appeal, remedy, representative, termination, invitation or internal-administration tool.

Filing preparation requires the person’s declaration details and their own confirmation of any respondent notice address. The assistant must ask for that confirmation and pass respondentEmailConfirmedByPerson: true only when given; it must not invent an attestation. The returned packet summary includes the address and its source for review.

Returned information and party-authored text

Each tool’s reviewed output contract is a bounded typed projection with source identifiers and provenance, returned as validated structuredContent and an equivalent text fallback. The implemented wrapper contains schemaVersion: "connector-result-v1", tool, retrievedAt, optional requestId, scalar facts, the canonical authoritative payload, partyAuthoredFields and notice. Its text fallback repeats the facts and fences the payload as data. Each tool publishes its own nested schema derived from the canonical OpenAPI DTO and validates the payload before success. A mismatch returns invalid_upstream_response with isError: true. Party-authored content remains untrusted data, including text quoted within a served document. No instruction, scope, consent, procedure or available action is derived from that prose.

ToolReturned fieldsParty-authored text
list_my_casescases[].id, side, status, revision, nextCursor and hasMoreNone in this bounded account list
get_case_viewAuthorized case identifier, stage, deadlines, pinned Rules/disclosure, available actions and case summaryClaim/response summaries and party labels where included; these do not control stage, deadlines or authority
get_case_eventsevents[].schemaVersion, id, cursor, type, occurredAt, plus nextCursor and hasMoreNone; the event projection excludes message/submission bodies
get_served_awardServed Award artifact, service and integrity metadata, and authorized retrieval informationAny quoted party submissions remain quotations; the operative served artifact is authoritative
get_case_record_manifestRecord entries, source identifiers, hashes, media types and authorized manifest metadata; no evidence bytesParty-supplied attachment names and descriptions
get_rules_versionCurrent Rules version, integrity hash and Rules informationNone; use the case view for a case’s pinned version
quote_filing_feeFee quote, exact currency/minor-unit amount and applicable prerequisitesNone; the quote neither initiates payment nor creates a checkout
prepare_filingschemaVersion, filingId, procedure, schedule, status, owner.accountId, draftDigest, termsDigest, expiresAt, acceptance, reviewPacket, and a one-use hostedAcceptanceUrl when newly issuedreviewPacket.claimSummary, claimStatement, requestedItems[].text, respondent name and notice email; the packet also carries claimant identity/declaration information, separate from pinned terms and acceptance state
confirm_filingfilingId, caseId, status, filingFeePending, track, noticeQueued, optional noticeAddressMasked, recorded acceptance, links.casePage and idempotencyReplayedAny returned case title remains party text; recorded acceptance and opening status come from typed service records
submit_briefSubmission identifier, filing status and authorized case/revision informationThe submitted brief if included in the authorized projection
post_case_messageMessage identifier, channel/category, posting status and authorized message informationThe submitted message body if included

The declared partyAuthoredFields inventory is empty for case lists, event pages, Rules, quotes, confirmation and write receipts; it names summary, title, claim.statement and parties.*.name for case views, award.determinations.findingsOfFact[] and award.determinations.issues[] for Awards, files[].name for manifests, and the packet fields listed above for preparation. These labels identify provenance; they do not turn other quoted party text into instructions.

The projection excludes sealed or unserved material, internal deliberations, other accounts’ credentials and unnecessary personal information. The service does not fetch party links or invoke another tool in response to returned text. Only authorized, server-generated People’s Court recovery links are actionable. Acceptance links are one-use capabilities: do not copy them into logs or public transcripts; a lost link is recovered through the service’s draft recovery flow.

Review and accept on People’s Court

When filing tools are enabled, after prepare_filing, open the returned hosted link, review the exact packet, and decide whether to accept. The assistant cannot record that acceptance. confirm_filing takes only the filing ID and idempotency key; it cannot supply an acceptance statement, terms digest, confirmation reference or principal. Without recorded acceptance, it returns acceptance_required with acceptanceLinkExpiresAt, without repeating the link secret. Use the one-use link already issued by prepare_filing until it is used or expires. A lost link is recovered on People’s Court; no connector tool rotates or rereads that capability.

A respondent opens the invitation and answers with consent on People’s Court, then may authorize the connector to read their case. Consent to arbitrate, the respondent’s Answer and record confirmation stay on hosted pages. Opening the prepared case, filing a brief and posting a message are separately authorized tool acts with consequential effects. Scope approval, annotations and a store confirmation dialog do not substitute for exact case consent. Using an assistant never selects the Agent-only procedure. The Rules’ consent, service, appeal and execution requirements still apply.

Errors and recovery

Code or responseWhat the assistant should do
acceptance_requiredDirect the person to their existing hosted acceptance link; check acceptanceLinkExpiresAt. Recover a lost or expired link on People’s Court
OAuth invalid_grant with code: "consent_required"Send the person through authorization again to review changed Rules or disclosure; refresh does not renew consent
insufficient_scope / HTTP 403Request the challenge’s complete space-separated scope set (cases:read plus the write scope), retaining previously approved scopes; a case-membership denial is not scope step-up
invalid_scopeRemove unsupported scopes; do not seek broader legal authority
Revoked or expired token / HTTP 401Follow the resource-metadata challenge; refresh if permitted, otherwise reconnect
rate_limited / HTTP 429Wait for Retry-After before retrying
response_too_largeRequest a smaller page or narrower supported result
service_unavailable / HTTP 503Retry after availability recovers; do not enter a sign-in/refresh loop or use another credential
invalid_upstream_responseRetain the request ID for support; the response failed the canonical result schema
downstream_failureRetain the request ID for support; reconcile a write before retrying with the same idempotency key
filing_fee_requiredComplete the filing-fee prerequisite on People’s Court; the connector cannot pay
not_foundCheck the case identifier and account access
conflict (stage, deadline, revision or idempotency)Read the authorized recovery information and current case state; these are application errors, not OAuth failures
invalid_request, or invalid method/tool/JSON-RPC envelopeCorrect the protocol request; an invalid request is never a successful tool result

Application errors use isError: true, a stable code and request ID. ChatGPT’s tool-level reauthorization contract additionally uses per-tool _meta["mcp/securitySchemes"] and _meta["mcp/www_authenticate"]; transport 401/403 challenges remain authoritative and host behavior is verified separately.

Default caps are 65,536 request bytes and 262,144 response bytes; oversized results are refused rather than truncated. Each replica limits requests to 60 per account subject per minute and 600 per issuer/subject/client tuple per minute. These in-process budgets are not a shared aggregate client quota across users or replicas. Downstream API calls have a 30-second timeout. Error replies exclude tokens, other accounts’ case links and party text.

Disconnect, privacy and support

Open your Applications and authority console, find the connector grant by client name, and revoke it. Revocation ends connector access on the next request, including access through exchanged tokens. Access tokens last five minutes; refresh tokens rotate. Disconnecting stops future access. It does not erase filings, consent records, the case Record, or transcripts and tool results already delivered to an assistant host. Revoking a token cannot retract delivered content.

The assistant receives the authorized results of the tools it calls. People’s Court receives tool inputs and processes them through the same case operations as its own interface. The service exchanges the connector token for an account-bound API token; it does not forward the inbound token to the API. MCP logs contain token fingerprints, subject, client and tool identifiers, not tokens or case content. Your assistant provider’s handling of returned case information is also subject to that provider’s policies.

The operator may disable connector access across both the MCP resource and canonical API. The reviewed kill-switch contract refuses existing and cached exchanged authority as well as new calls. Re-enablement requires fresh authorization when prior grants are revoked or their policy generation is retired; draining the MCP process alone is not revocation. Connector outages do not pause case deadlines. Chat summaries do not amend the Record, and reading an Award does not serve it.

Publication of an Award does not make its evidence public. A person’s case access does not authorize an assistant provider’s retention, training or publication of confidential material. Claude and ChatGPT handling depends on the product plan, provider terms and configured training/retention controls; Muse’s technical and data-handling contract remains unverified. Consult the Claude privacy guidance, OpenAI business data commitments and OpenAI consumer training controls for the applicable plan. Do not assume a provider’s API zero-retention agreement covers an assistant conversation.

Read the Privacy Notice, Terms and Rules. For support or privacy requests, contact contact@peoplescourt.ai. Include a request ID where available; do not email access tokens or refresh tokens.

contact@peoplescourt.ai