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: October 26, 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.
Use another MCP app
You can also connect Parrot to an MCP app that runs on your own computer, such as a desktop AI assistant, a coding assistant, or the MCP Inspector. The app must support remote MCP servers with OAuth sign-in.
- In your MCP app, add a remote MCP server (sometimes called Streamable HTTP) with the URL
https://prod.parrotapp.com/mcp. No API key is needed. - The app opens your browser. Check that the page is on
parrotapp.com, then sign in to Parrot there. - Check that the consent page says An MCP app on your computer wants to connect to your Parrot account, and review what it can access.
- Tap Allow. Your browser sends you back to the app, and the Parrot tools appear.
Keep your connection safe
- Copy the server URL from this page. Do not use a Parrot server URL from another website or message.
- Type your Parrot password only on the Parrot page in your browser, never into the app or a chat.
- Parrot sends the sign-in result only to your own computer, so it cannot reach another website.
- Allow only apps you installed and trust. Every app you connect gets the access listed below.
- To disconnect, open Parrot and go to Settings → Connected Apps. Access ends right away.
AI apps that run on a website, not on your computer, can connect only after Parrot approves them. If your app shows an error that its redirect URI is not allowed, email support@parrotapp.com and tell us which app you use.
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. - Local tools and scripts can skip registration and use the built-in public client ID
parrot-mcp-local. It accepts any loopback redirect (http://127.0.0.1,http://[::1], orhttp://localhost, on any port) and still requires PKCE. - 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).