Productivity & teams
Redmine
Issues, time entries and projects in your Redmine, from your agent.
12 endpoints
Your agent opens your Grammarly documents, reads the suggestions and accepts the fixes you want. It also runs the AI text and plagiarism check, cleans out Trash and keeps your dictionary in order.
15 tools Read and write
Grammarly has an official API for organizations: Writing Score, AI Detector, Plagiarism, Analytics and License Management, most of them in Beta and reached through Contact Sales (checked 6 Nov 2026). None of them reads your saved documents, suggestions or dictionary, and we found no official Grammarly MCP server. Cotlet runs 15 Grammarly tools in your signed-in account. There is no API key to request and nothing to develop. It works inside the ChatGPT and Claude apps, runs around the clock in our hosting, and one Cotlet account covers many apps.
| What you need | Grammarly API | Cotlet |
|---|---|---|
| Score a text for clarity and tone | Writing Score API, organizations (Beta) | Yes, any saved document |
| Check for AI text and plagiarism | Detector APIs, organizations (Beta) | Yes, on a paid plan |
| List and read your documents | No | Yes |
| Accept or dismiss suggestions | No | Yes |
| Dictionary, Trash and goals | No | Yes |
| Share an Authorship report | No | Yes, after your OK |
| Getting started | Contact Sales, OAuth 2.0, code | Sign up, sign in once |
Checked 6 Nov 2026. Sources: Grammarly APIs · Grammarly for Developers · Grammarly plans · Superhuman Go · Grammarly Help: Grammarly Editor user guide
Use your own account in its Cotlet Cloud Browser.
Paste one address into Claude or ChatGPT.
Your agent checks, fixes and tidies for you.
We never keep your Grammarly password, and sharing a report or emptying Trash waits for your OK. Who can see your session
Three steps. Chat apps sign in with OAuth. Editors, n8n and scripts use an API key.
Enable Grammarly for agents. Sign up, log in to Grammarly in its Cloud Browser, then press Enable for agents.
Add the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, also carries Grammarly next to your other apps. If you enable Grammarly after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-grammarly \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-grammarly": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-grammarly]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key> Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key> Documents come from the Grammarly Editor at app.grammarly.com. Text comes back plain, without formatting, and Trash keeps a deleted document for 30 days.
Lists the documents saved in your Grammarly Editor at app.grammarly.com, in the order the dashboard shows them. Each item has an id, a title and the time of the last edit. With status trash it lists Trash instead, where Grammarly keeps deleted documents for 30 days. Use document_id in the other tools.
MCP callgrammarly_read → list_documents
REST endpointGET https://cotlet.dev/api/v1/grammarly/documents
| Name | Type | Description |
|---|---|---|
| status string | string | active for the dashboard or trash for Trash. Default: active. |
| cursor string | string | next_cursor from the previous page. |
{
"documents": [
{
"document_id": "doc_7c21a9",
"title": "Launch announcement",
"updated_at": "2026-11-04T15:12:00Z"
},
{
"document_id": "doc_52fe08",
"title": "Customer case study",
"updated_at": "2026-10-29T09:40:00Z"
}
],
"next_cursor": null
} Returns the title and the text of one saved document. The text comes back as plain text: Grammarly shows uploaded files as plain text, and formatting such as bold, lists and headers is not returned. The document must be on your dashboard, not in Trash.
MCP callgrammarly_read → get_document
REST endpointGET https://cotlet.dev/api/v1/grammarly/documents/{document_id}
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_7c21a9",
"title": "Launch announcement",
"text": "We are happy to announce that our new reporting tool is live today.",
"updated_at": "2026-11-04T15:12:00Z"
} Opens a new document with New document and pastes your text into it, as the Editor lets you do. The text is plain; formatting is not applied. The document is private to your account and nobody is notified, so the call does not wait for your OK. Undo it with delete_document.
MCP callgrammarly_write → create_document
REST endpointPOST https://cotlet.dev/api/v1/grammarly/documents
| Name | Type | Description |
|---|---|---|
| text string required | string | The text to put in the new document. |
{
"text": "Hi team, the quarterly report is attached. Please send feedback by Friday."
} {
"document_id": "doc_9b40d2",
"title": "Untitled",
"created_at": "2026-11-05T08:00:00Z"
} Clicks the trash bin icon on the document in your list. Grammarly keeps it in Trash for 30 days and then deletes it for good. Until then restore_document brings it back, so the call does not wait for your OK.
MCP callgrammarly_write → delete_document
REST endpointDELETE https://cotlet.dev/api/v1/grammarly/documents/{document_id}
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_52fe08",
"status": "trash",
"delete_after": "2026-12-05"
} Opens Trash and clicks Restore on the document. It works within 30 days of deleting; after that Grammarly cannot recover the document. The document returns to your dashboard. It reaches nobody, so it does not wait for your OK.
MCP callgrammarly_write → restore_document
REST endpointPOST https://cotlet.dev/api/v1/grammarly/documents/{document_id}/restore
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents with status trash. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_52fe08",
"status": "active"
} Clicks Empty Trash, which deletes every document in Trash permanently. Grammarly warns that the documents cannot be restored afterwards, so read Trash with list_documents first. By default you confirm each call; you can switch that off for this tool.
MCP callgrammarly_write → empty_trash
REST endpointPOST https://cotlet.dev/api/v1/grammarly/trash/empty
No parameters.
{
"deleted": 3
} Suggestion ids change when the text changes, so list them again before you accept one. Goals are set per document.
Reads what the Overall score panel of the Editor shows for the document: the overall score and the statistics listed with it. The score reflects the document as it stands, with the goals set on it. Grammarly offers the same data as a PDF report in the Editor.
MCP callgrammarly_read → get_writing_stats
REST endpointGET https://cotlet.dev/api/v1/grammarly/documents/{document_id}/writing-stats
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_7c21a9",
"overall_score": 84,
"word_count": 412,
"goals": {
"domain": "Business",
"formality": "Formal"
}
} Lists the suggestion cards Grammarly shows beside the document. Each has an id, the underline color (red, blue, green or purple), the text it applies to, the suggested change and the explanation from its Learn more link. Gray underlines appear when a team style guide is in use. Suggestions you dismissed are not listed.
MCP callgrammarly_read → list_suggestions
REST endpointGET https://cotlet.dev/api/v1/grammarly/documents/{document_id}/suggestions
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents. |
| color string | string | Only suggestions with this underline color: red, blue, green or purple. |
{
"document_id": "document_8c41d2"
} {
"suggestions": [
{
"suggestion_id": "sg_103",
"color": "red",
"original": "recieve",
"replacement": "receive",
"explanation": "Misspelled word"
},
{
"suggestion_id": "sg_104",
"color": "blue",
"original": "in order to",
"replacement": "to",
"explanation": "Shorter wording"
}
]
} Presses Accept on a suggestion card, which applies the change to the text, or Dismiss, which ignores it. It edits your own document only and the Editor can undo it, so it does not wait for your OK. Read the suggestion with list_suggestions first, because ids change when the text changes.
MCP callgrammarly_write → resolve_suggestion
REST endpointPOST https://cotlet.dev/api/v1/grammarly/documents/{document_id}/suggestions/{suggestion_id}/resolve
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents. |
| suggestion_id string required | string | A suggestion_id from list_suggestions. |
| action string required | string | accept or dismiss. |
{
"document_id": "document_8c41d2",
"suggestion_id": "suggestion_8c41d2",
"action": "action"
} {
"document_id": "doc_7c21a9",
"suggestion_id": "sg_103",
"action": "accept",
"applied": true
} Opens Goals for the document and sets the options you pass, then clicks Done. Grammarly cannot save default goals, so they are set per document. Pass each value as the option name the Goals panel shows. The domain option is limited to Pro, Plus, Business and Education plans. It reaches nobody and changing it again undoes it, so it does not wait for your OK.
MCP callgrammarly_write → set_goals
REST endpointPUT https://cotlet.dev/api/v1/grammarly/documents/{document_id}/goals
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents. |
| audience string | string | The Audience option as the Goals panel names it. |
| formality string | string | The Formality option as the Goals panel names it. |
| domain string | string | The Domain option as the Goals panel names it. |
| intent string | string | The Intent option as the Goals panel names it. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_7c21a9",
"goals": {
"audience": "General",
"formality": "Formal",
"domain": "Business"
}
} The AI text and plagiarism check needs a paid Grammarly plan. An Authorship report covers only writing done while tracking was on.
Runs the Check for AI text & plagiarism button of the Editor and returns what its panel shows: passages that match external sources, each with the source Grammarly names, and the AI text result. The button belongs to paid plans, so on a free account the call fails with a plan error. It changes nothing in the document.
MCP callgrammarly_read → check_ai_and_plagiarism
REST endpointGET https://cotlet.dev/api/v1/grammarly/documents/{document_id}/ai-and-plagiarisms/check
| Name | Type | Description |
|---|---|---|
| document_id string required | string | A document_id from list_documents. |
{
"document_id": "document_8c41d2"
} {
"document_id": "doc_7c21a9",
"plagiarism_matches": [
{
"passage": "new reporting tool is live today",
"source": "example.com/blog/reporting-tool"
}
],
"ai_text": {
"flagged": false
}
} One word per entry, up to 100 symbols, no spaces. If your team admin turned the personal dictionary off, these tools fail.
Lists the words on the Your dictionary page under Account, then Writing. Grammarly stops flagging these words in all its products. If your team admin turned the personal dictionary off on the Feature access page, the page is closed and the call fails.
MCP callgrammarly_read → list_dictionary_words
REST endpointGET https://cotlet.dev/api/v1/grammarly/dictionary-words
No parameters.
{
"words": [
"Cotlet",
"Superflow",
"kubectl"
]
} Types the word into the Your dictionary field and clicks Assign. A word can have at most 100 symbols, only English letters, hyphens and a few other symbols, and no spaces: entries with !, ?, +, $, & or / are refused, and so are several words in one entry. It reaches nobody and remove_dictionary_word undoes it, so it does not wait for your OK.
MCP callgrammarly_write → add_dictionary_word
REST endpointPOST https://cotlet.dev/api/v1/grammarly/dictionary-words
| Name | Type | Description |
|---|---|---|
| word string required | string | One word, up to 100 symbols, no spaces. |
{
"word": "word"
} {
"word": "Superflow",
"added": true
} Finds the word on the Your dictionary page and clicks the trash bin icon next to it. Grammarly flags the word again afterwards. It reaches nobody and add_dictionary_word undoes it, so it does not wait for your OK.
MCP callgrammarly_write → remove_dictionary_word
REST endpointDELETE https://cotlet.dev/api/v1/grammarly/dictionary-words
| Name | Type | Description |
|---|---|---|
| word string required | string | A word from list_dictionary_words. |
{
"word": "word"
} {
"word": "kubectl",
"removed": true
} Your logged-in Grammarly profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 15 Grammarly tools. Never the cookie.
Your documents, Trash, suggestions, goals and dictionary.
Plan, billing, password, two-factor and the account itself.
A new device may get a code by email. You type it in, we never do.
Disable for agents, reset the browser, or sign out in Grammarly's account settings.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.
When Grammarly moves a button or renames a panel, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a document | Delete it; Trash holds it for 30 days |
| Delete a document | Restore it from Trash within 30 days |
| Accept or dismiss a suggestion | Undo in the Editor |
| Set document goals | Set them again |
| Add or remove a dictionary word | Run the opposite tool |
| Share an Authorship report | Delete the shared report on your Authorship page |
| Empty Trash | No, those documents are gone |
2 of 15 tools ask first: empty_trash and share_authorship_report, the two that cannot be taken back or that give a link to others. Everything else touches only your own documents, so it runs at once. Switch the wait off per tool for a scheduled run.
Anyone who has an Authorship report link sees everything in the report.
{
"name": "create_document",
"arguments": {
"text": "Hi team, the quarterly report is attached. Please send feedback by Friday."
}
} curl -X POST https://cotlet.dev/api/v1/grammarly/documents \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hi team, the quarterly report is attached. Please send feedback by Friday."}' {
"document_id": "doc_9b40d2",
"title": "Untitled",
"created_at": "2026-11-05T08:00:00Z"
} Scripts and cron jobs reach the same tools over REST, with the same key and price. The check for AI text and plagiarism fails on a free Grammarly plan, and a failed call costs nothing.
About $21 a monthfor a writer with 20 drafts a month, 3,680 credits. Your Grammarly plan is billed by Grammarly as before.
| Job | Calls | Credits |
|---|---|---|
| Score a draft and accept the spelling fixes | 9 × 20 | 1,800 |
| AI text and plagiarism pass, weekly | 6 × 4 | 240 |
| Move old documents to Trash, monthly | 6 × 1 | 60 |
| Add brand terms to the dictionary | 5 × 1 | 50 |
| Share an Authorship report | 1 × 3 | 30 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,680 |
The month is our example: about 20 drafts, a weekly AI and plagiarism pass, one clean-up of old documents, 3 Authorship reports. Grammarly publishes no typical account size. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| BjornMelin/grammarly-mcp | One tool that reads the AI and plagiarism scores in the Grammarly web app and rewrites text with Claude. 11 stars, MIT. | Scores only. You need a Grammarly Pro account, a Browserbase or Browser Use account and Claude Code. Last commit 14 Jan 2026. |
| michaelheichler/grammarly-docs-mcp | Local server for Grammarly Docs: proofreader output, AI detection, plagiarism, word counts and Grammarly's agents. MIT. | Runs on your computer with a local Chrome profile. 0 stars, last commit 28 May 2026. |
| Grammarly API | Official Writing Score, AI Detector, Plagiarism, Analytics and License Management APIs. | For organizations, through Contact Sales. They check text you send; they do not open your documents. |
The GitHub servers are good for one person on one computer who wants the scores. Cotlet adds the rest of the Editor, hosted, with one sign-in and the same tools in ChatGPT, Claude and scripts.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Grammarly tools.
Sign up at cotlet.dev, log in to Grammarly once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Grammarly account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Grammarly: check a draft before it goes out; run AI text and plagiarism checks on drafts; clean old documents out of Grammarly. You ask in plain words, and anything that reaches other people waits for your OK first.
Create a free account at https://cotlet.dev, open Grammarly under Integrations in the console and log in to Grammarly in its Cloud Browser. The trial starts with your first app, no card asked.
Not for documents, suggestions or your dictionary. The Check for AI text & plagiarism button is a paid-plan feature, so check_ai_and_plagiarism needs one, and the Goals domain setting is limited to Pro, Plus, Business and Education plans, says the Grammarly Editor user guide.
No. Cotlet reads documents saved in the Grammarly Editor at app.grammarly.com. Text you check with the extension inside other sites stays in those sites. To check such text, create a document with create_document and run the tools on it.
No. Grammarly's own API is arranged with its sales team for organizations. Cotlet works in your signed-in Grammarly account, so there is nothing to request or code.
Only the door is different. Both expose the same 15 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Grammarly or Superhuman.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy