Changelog
2026-10-15
The public host serves guides next to the API. A later pass the same day aims the same host at agents.
Audio as JSON
Chat, Claude, and Gemini pass JSON to tools. They do not attach a microphone. proximity is not retuned.
score,heard_as, andrecognizeacceptipa,audio_base64(at most 256 KiB decoded), oraudio_url.ipawins when it is also sent.create_uploadreturns a PUT URL. This build stores the wav in process memory for 15 minutes (32 slots). It does not sign Cloudflare R2. WhenR2_ACCOUNT_ID,R2_ACCESS_KEY_ID,R2_SECRET_ACCESS_KEY, andR2_BUCKETare all set, the note says so and still returns the memory URL. The response does not echo those values.ui://ipa/record.html(GET /apps/record) is a record-button stub. The MIME type istext/html;profile=mcp-app.scoreandscore_attemptpoint at it.- HTML responses send
Content-Security-Policy.script-srcincludes'unsafe-inline'so the landing JSON-LD block and the record widget can run. - Install, Privacy, and Terms. Privacy and terms are placeholders for Aaron to review.
robots.txtalways allows the search and user-triggered agents.ALLOW_TRAINING_CRAWLERSinscripts/build_api_docs.pydefaults to allow forGPTBot,ClaudeBot,Google-Extended, andCCBot./server.jsonis the official MCP registry document. The name iscom.raymati/ipa. It is not published./server-card.jsonis the same JSON.- Anonymous callers stay on the free tier. Auth is the OAuth 2.1 design. This host does not serve
/.well-known/oauth-protected-resource.
Agent discovery
The score contract is unchanged. proximity is not retuned.
POST /mcplistsscore,heard_as,recognize,create_upload, andscore_attempt(alias ofscore).heard_asis theheard_asobject from the same score and does not changeproximity.- HTML GETs honor
Accept: text/markdownand setVary: Accept.Prefer: return=consolidatedalso getsPreference-Applied. That pair is draft-consolidated-content-01, not an RFC..mdURLs stay. robots.txtallows the documented AI crawler tokens, including theGoogle-ExtendedandApplebot-Extendedcontrol tokens.- The landing page embeds schema.org
WebAPIJSON-LD. /.well-known/agent-card.jsonis the A2A v1 discovery file. This host does not implement an A2A task endpoint.- Registries and Submitting have the submit steps. Nothing was submitted.
Guides
- OpenAPI 3.1 at
/openapi.json. Response examples are filled by the scorer from the requests inopenapi.yaml. /llms.txt,/llms-full.txt, and a Markdown alternate for each HTML guide (Link: rel=alternate; type=text/markdownandrel=describedby)./.well-known/security.txt(RFC 9116). Convenience copies:openapi.json,ai-plugin.json,ai-catalog.json. The server card is/server-card.json.- Errors are
application/problem+json.detailkeeps the previous plain-text sentence. Success bodies are unchanged. RateLimit-Policy: "tutor";q=60;w=60onPOST /v1/tutorandPOST /mcptools/call. The window is per client. The Workers bindingTUTORis the limit when it is bound. The in-memory window is the fallback. POST bodies are capped at 400 KiB.audio_urlis https-only with a 256 KiB streamed cap. Proximity is not retuned.
Audio still reaches ZIPA through the container behind the Rust worker (route wiring 04354ee, image prototype a16c62c). Proximity does not read GOP.
The lexicon and the Platt map remain the d0b6159 set. This documentation pass does not retune proximity, stress, different_word, or heard_as.