Shipflow MCP
read-onlymachine-to-machineAn authenticated, read-only MCP endpoint that exposes Shipflow issues, cases, source health, and guides. Auth is machine-to-machine via Google OIDC — a caller (e.g. AURUM) presents a Google-signed ID token minted by an allowlisted service account. There is no static token, and it is not connectable from the claude.ai Connectors UI (that path needs interactive OAuth).
Authorization header.https://shipflow.agi.tech/api/shipflow/mcp- Caller sends
Authorization: Bearer <id_token>. - Server verifies Google's signature, issuer, and expiry, and that
audequalsSHIPFLOW_MCP_AUDIENCE. - Server authorizes only if the token's verified
emailis inSHIPFLOW_MCP_ALLOWED_EMAILS.
SHIPFLOW_MCP_AUDIENCEThe expected aud claim. Must match the audience the caller mints for, byte-for-byte.
SHIPFLOW_MCP_ALLOWED_EMAILSComma-separated allowlist of trusted service-account emails. Must include the client_emailof the caller's service account (e.g. AURUM's GCP_KEY_BASE64 account).
# Mint an ID token for the allowlisted service account.
# --audiences must equal SHIPFLOW_MCP_AUDIENCE on the server.
ID_TOKEN=$(gcloud auth print-identity-token \
--impersonate-service-account="<allowlisted-sa>@<project>.iam.gserviceaccount.com" \
--audiences="<SHIPFLOW_MCP_AUDIENCE>")# In-process minting (how AURUM's sss client does it).
from google.oauth2 import service_account
import google.auth.transport.requests
creds = service_account.IDTokenCredentials.from_service_account_info(
info, # the service-account JSON (e.g. from GCP_KEY_BASE64)
target_audience="<SHIPFLOW_MCP_AUDIENCE>",
)
creds.refresh(google.auth.transport.requests.Request())
id_token = creds.token # short-lived (~1h); refresh when invalidcurl -X POST https://shipflow.agi.tech/api/shipflow/mcp \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'list_shipflow_issuesList evaluated issues (feedback turned into new or updated tickets), each with a validity signal. Filter by label, priority, verdict, source, validity, and limit.
get_shipflow_issue_statsAggregate issue counts — total, plus breakdowns by label (bug/feature/improvement) and priority (critical/high/medium/low).
get_shipflow_caseOne issue with safe source references, freshness, validity evidence, and guide state. Omits raw messages, prompts, author names, and screenshots.
get_shipflow_source_healthPer-source signal counts, pending counts, latest signal time, and age in minutes. The caller decides what age is acceptable.
list_shipflow_guidesAI-generated guides (reusable agent strategies) paired with their issue. Filter by review status; paginated 100 at a time.