AI Connector
Use Parrot in ChatGPT and Muse
Bring your Parrot Spanish level, streak, and vocabulary into your AI assistant, and save words you learn back to Parrot.
Last updated: September 29, 2026.
How it works
- In ChatGPT or Muse, add the Parrot connector.
- Sign in to your Parrot account and review what the app can access.
- Tap Allow. The assistant can now tailor Spanish practice to your level and your words.
What the assistant can and cannot do
| The assistant can | The assistant cannot |
|---|---|
| See your Parrot level and matching CEFR level (for example “Lower B1”) | Change your level or set your streak directly |
| See your day streak and how many words you know and are learning | See your email, payment details, or subscription |
| List the words you are learning and the words you know | See your lessons, cards, recordings, or messages |
| Save words to your Parrot dictionary as learning or known (up to 50 at a time, only when you ask) | Delete your account or your data |
| Count today toward your streak after a real practice session |
Parrot stays the source of truth. The connector never gives the AI app your Parrot password.
Example prompts
- “What's my Spanish level in Parrot?”
- “Quiz me on the words I'm learning in Parrot.”
- “Teach me five travel words at my level and save them to Parrot.”
- “Save mariposa (butterfly) as a word I'm learning.”
- “I practiced Spanish today, count it toward my streak.”
Privacy
Parrot shares only the data listed above, and only after you approve the connection. Access ends as soon as you disconnect. See the Connected AI Apps section of our privacy policy.
Support
Questions or problems? Email support@parrotapp.com.
Technical reference
For developers and reviewers
Server
MCP server URL:
https://prod.parrotapp.com/mcp
- Transport: Streamable HTTP, stateless JSON-RPC over
POST /mcp. There are no sessions or server-sent event streams (GETandDELETE /mcpreturn405). - Supported MCP protocol versions:
2025-11-25,2025-06-18,2025-03-26,2024-11-05. - Methods:
initialize,ping,tools/list,tools/call.
Authentication
- OAuth 2.1 authorization code flow with PKCE (
S256only). The learner signs in to Parrot and approves on a Parrot consent page. - Scopes:
learner:read(level, streak, word lists) andlearner:write(save words, record practice). - Discovery: an unauthenticated request to
/mcpreturns401with aWWW-Authenticateheader pointing to the protected resource metadata. - Client registration: supports Client ID Metadata Documents (the
client_idis an HTTPS URL to the client's metadata) and Dynamic Client Registration (RFC 7591). All clients are public PKCE clients; redirect URIs must be HTTPS on a trusted AI app's domain, or loopback for local development tools. - Access tokens last 1 hour. Refresh tokens last 90 days and rotate on every use. Authorization responses include
iss(RFC 9207). - Revoking a token through the revoke endpoint makes the next call return
401.
| Endpoint | URL |
|---|---|
| Protected resource metadata (RFC 9728) | https://prod.parrotapp.com/.well-known/oauth-protected-resource/mcp |
| Authorization server metadata (RFC 8414) | https://prod.parrotapp.com/.well-known/oauth-authorization-server |
| Dynamic Client Registration (RFC 7591) | https://prod.parrotapp.com/oauth/register |
| Authorize | https://prod.parrotapp.com/oauth/authorize |
| Token | https://prod.parrotapp.com/oauth/token |
| Revoke (RFC 7009) | https://prod.parrotapp.com/oauth/revoke |
Tools
| Tool | Access | What it does |
|---|---|---|
get_learner_context | read-only | Returns the learner's Parrot level, CEFR level, day streak, and counts of known and learning words. Call this first. |
list_learning_words | read-only | Lists words the learner is learning, newest first, with pagination. |
list_known_words | read-only | Lists words the learner knows, newest first, with pagination. |
set_word_status | write | Saves 1 to 50 Spanish words as learning or known. New words need their English meaning. |
record_practice_today | write | Counts today toward the learner's day streak. Returns whether today was newly counted. |
- Every tool declares an input and output schema. Results include
structuredContent. - No tool is destructive. Read-only tools are annotated
readOnlyHint: true. - Tools that need
learner:writereturn an error asking the user to reconnect with more access if the token only haslearner:read.
Example tool result: get_learner_context
{
"language": "es",
"level": { "parrotLevel": 12, "cefr": "Lower B1" },
"streak": { "dayStreak": 5 },
"counts": { "knownWords": 830, "learningWords": 41 }
}
cefr is null if the learner hasn't taken the placement test.
Example tool input: set_word_status
{ "words": [{ "targetWord": "mariposa", "nativeWord": "butterfly", "status": "learning" }] }
Limits: targetWord up to 80 characters, nativeWord up to 200. Existing words keep their stored meaning and only change status.
Example tool result: list_learning_words
{
"words": [{ "wordKey": "mariposa", "targetWord": "mariposa", "nativeWord": "butterfly", "status": "learning" }],
"nextCursor": null,
"totalCount": 41
}
Page size defaults to 100 (maximum 500). Pass nextCursor back as cursor for the next page; it is null on the last page.
HTTP API (same data, same JSON)
The same contract is available over REST with the same OAuth tokens, base URL https://prod.parrotapp.com:
| Endpoint | Access |
|---|---|
GET /v1/learner | read |
GET /v1/learner/words?status=learning|known&limit=&cursor= | read |
PUT /v1/learner/words | write |
POST /v1/learner/practice | write |
Errors use this shape:
{ "error": { "code": "...", "message": "..." } }
| Code | HTTP status |
|---|---|
invalid_request | 400 |
native_word_required | 400 |
invalid_token | 401 |
insufficient_scope | 403 |
dictionary_full | 409 |
rate_limited | 429, with Retry-After |
Rate limits
120 requests per minute per connection (burst 30).