Idiolect AI
Server Details
Loads your personal writing voice into any AI and scores how closely a draft matches it.
- Status
- Unhealthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- moshpit-labs/idiolect-mcp
- GitHub Stars
- 0
- Server Listing
- idiolect-mcp
Available Tools
2 toolsrewriteRewriteAInspect
Change prose the user supplied while preserving the meaning, facts and deliberate details that must survive. Use this for anything from a light edit to a substantial rewrite or a recast for another writing situation. Idiolect AI applies the user's established writing patterns automatically. If more personal writing is needed, this tool returns the precise shortfall so you can gather only that evidence, obtain permission to store it and retry the same task. Do not check profile state first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The prose to change. Treat it as source material whose meaning, facts and deliberate details must survive unless the user explicitly asks to change them. Never mix the user's rewrite instruction into this field. | |
| format | No | The new form only when the user explicitly asks to recast the piece: email, Slack message, social post or essay. Omit this for ordinary edits and rewrites. | |
| evidence | No | Use only after this writing tool says personalization needs more evidence. Include the exact natural writing the user actually authored and has explicitly agreed Idiolect AI may store for personalization. Prefer the smallest trustworthy set from a writing situation close to the current task; broaden only when needed. Exclude prompts, AI-written text, templates, boilerplate, signatures, quoted or forwarded text and anything with uncertain authorship. | |
| instructions | No | What the user wants changed, such as shorter, clearer, warmer, less formal, more direct or only lightly edited. Keep this separate from the prose itself. Omit it when the request is already unambiguous. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| text | No | The finished writing. Present only when status is complete. |
| error | No | |
| status | Yes | Where the original writing task stands: finished, waiting for approved writing evidence, ready for the same task to be retried, still preparing personalization or unable to complete. |
| message | Yes | A concise explanation of what happened and, when needed, the exact next step. |
| neededWriting | No | |
| omitEvidenceOnRetry | No | True when approved evidence has been accepted and the same writing task should now be retried without sending that evidence again. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses automatic application of the user's established writing patterns, the shortfall-return mechanism when more personal writing is needed, and the instruction not to pre-check profile state. These are behavioral details that materially shape how the agent invokes the tool, and nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, all informative, with the main purpose front-loaded. It is slightly longer than the minimal two-sentence ideal, but each sentence contributes either scope, behavior, or workflow guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity, the description supplies the core workflow: preserve meaning and facts, automatic personalization, evidence shortfall/retry loop, and no profile pre-check. The comprehensive input schema and presence of an output schema carry the parameter and return detail, so an agent has what it needs to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with detailed descriptions, so the baseline is 3. The description reinforces the 'text' parameter ('prose the user supplied') and recasting, but it does not add new param-level semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and object: 'Change prose the user supplied...' and defines scope as light edit, substantial rewrite, or recast. This makes it clearly a transformation of existing user text, distinct in spirit from the sibling 'write' which would produce new text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this for anything from a light edit to a substantial rewrite or a recast for another writing situation,' giving clear invocation context. It also says not to check profile state first. It does not explicitly name the alternative 'write' or state when not to use the tool, so it stops one point short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
writeWriteAInspect
Create a new piece of writing for the user. Start with the request and facts already available; a short request is enough. Idiolect AI applies the user's established writing patterns automatically. If more personal writing is needed, this tool returns the precise shortfall so you can find only that evidence, obtain permission to store it and retry the same task. Do not check profile state first.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | The kind of finished piece when the user has made it clear. Omit this when it is not clear; the writing task can still proceed. | |
| request | Yes | What the finished piece should do. Carry forward the audience, purpose, facts and constraints already present in the user's request. A short request is enough. Do not invent facts merely to make it feel more complete. | |
| evidence | No | Use only after this writing tool says personalization needs more evidence. Include the exact natural writing the user actually authored and has explicitly agreed Idiolect AI may store for personalization. Prefer the smallest trustworthy set from a writing situation close to the current task; broaden only when needed. Exclude prompts, AI-written text, templates, boilerplate, signatures, quoted or forwarded text and anything with uncertain authorship. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| text | No | The finished writing. Present only when status is complete. |
| error | No | |
| status | Yes | Where the original writing task stands: finished, waiting for approved writing evidence, ready for the same task to be retried, still preparing personalization or unable to complete. |
| message | Yes | A concise explanation of what happened and, when needed, the exact next step. |
| neededWriting | No | |
| omitEvidenceOnRetry | No | True when approved evidence has been accepted and the same writing task should now be retried without sending that evidence again. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide little behavioral signal beyond readOnly=false and destructive=false. The description adds that Idiolect AI applies the user's writing patterns automatically, that insufficient personalization produces a precise shortfall, and that the caller should collect evidence, obtain permission, and retry. This is meaningful behavioral context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, roughly 80 words, with the purpose front-loaded and every sentence earning its place. It covers the basic call, the personalization behavior, the evidence retry loop, and a direct do-not-check instruction without repeating schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers the full workflow: initial request, automatic personalization, shortfall detection, evidence collection with permission, and retry. An output schema exists, so return-value details are not required. The main omission is an explicit routing statement against the rewrite sibling, but that is a moderate gap given the otherwise complete guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all parameters fully, including the evidence consent rules, so the baseline is 3. The description adds cross-cutting guidance: a short request is sufficient, facts should not be invented, and evidence should only be gathered after the tool reports a shortfall. This pushes it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and resource: 'Create a new piece of writing for the user.' The word 'new' distinguishes it from the sibling tool 'rewrite', making the tool's role clear without needing to name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear practical guidance: start with the request and facts already available, keep the request short, and do not check profile state first. It also explains the retry flow when more personal evidence is needed. It does not explicitly compare with rewrite or state when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
- Removed
add_samples_to_writing_profile - Removed
create_my_voice - Removed
create_writing_profile - Removed
delete_writing_profile - Removed
draft_in_voice - Removed
get_my_voice - Removed
list_writing_profile_samples - Removed
list_writing_profiles - Removed
record_voice_feedback - Removed
remove_sample_from_writing_profile - Removed
replace_samples_in_writing_profile - Added
rewrite - Removed
rewrite_in_voice - Removed
score_voice - Removed
set_current_writing_profile - Added
write
1 tool update
- Changed
create_my_voice1 field changed- changed
Input schema / properties / samples / descriptionPrevious value: -"Distinct blocks of writing supplied or explicitly approved by the user."New value: +"Distinct, natural blocks of writing the user actually authored. Approval alone does not establish authorship; exclude prompts and AI-written text."
1 tool update
- Changed
record_voice_feedback4 fields changed- removed
Output schema / properties / feedbackRemoved value: -{ - "enum": [ - "accepted", - "corrected_and_accepted", - "rejected" - ], - "type": "string" -} - removed
Output schema / properties / learnedRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / needsFinalTextAdded value: +{ + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "state", - "message", - "next", - "feedback", - "learned" -]New value: +[ + "state", + "message", + "next", + "needsFinalText" +]
1 tool update
- Changed
record_voice_feedback2 fields changed- changed
Input schema / properties / critique / maxLengthPrevious value: -2000New value: +20000 - changed
Input schema / properties / status / enumPrevious value: -[ - "accepted", - "corrected_and_accepted", - "rejected" -]New value: +[ + "accepted", + "corrected_and_accepted", + "rejected", + "normal" +]
1 tool update
- Changed
record_voice_feedback4 fields changed- changed
Input schema / properties / correctionText / descriptionPrevious value: -"The complete final text the user actually used after correcting the output. Never send an excerpt, summary, or diff."New value: +"The user's final text, verbatim and complete. Never an excerpt, a diff, or your own description of what changed — if you do not have their exact words, omit this field and describe the change in critique instead." - added
Input schema / properties / critique / descriptionAdded value: +"What you observed about how the output landed, in the user's words or your own: what was wrong, what they changed, or why they kept it. Free text, and the right home for any description of an edit you cannot quote verbatim." - removed
Input schema / properties / permissionToLearnRemoved value: -{ - "type": "boolean" -} - changed
Input schema / requiredPrevious value: -[ - "outputId", - "status", - "permissionToLearn" -]New value: +[ + "outputId", + "status" +]
5 tool updates
- Changed
create_my_voice2 fields changed- added
Output schema / properties / errorAdded value: +{ + "additionalProperties": false, + "properties": { + "code": { + "enum": [ + "insufficient_credits", + "credit_accounting_unavailable", + "local_llm_budget_exhausted" + ], + "type": "string" + }, + "retryable": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "code", + "retryable" + ], + "type": "object" +} - changed
Output schema / properties / status / enumPrevious value: -[ - "ready", - "more_evidence_required", - "build_in_progress", - "failed" -]New value: +[ + "ready", + "more_evidence_required", + "build_in_progress", + "failed", + "rate_limited" +]
- Changed
draft_in_voice2 fields changed- changed
Output schema / properties / error / properties / code / enumPrevious value: -[ - "insufficient_credits", - "credit_accounting_unavailable" -]New value: +[ + "insufficient_credits", + "credit_accounting_unavailable", + "local_llm_budget_exhausted" +] - changed
Output schema / properties / status / enumPrevious value: -[ - "ready", - "setup_required", - "purchase_required", - "accounting_unavailable" -]New value: +[ + "ready", + "setup_required", + "purchase_required", + "accounting_unavailable", + "rate_limited" +]
- Added
list_writing_profile_samples - Changed
rewrite_in_voice2 fields changed- changed
Output schema / properties / error / properties / code / enumPrevious value: -[ - "insufficient_credits", - "credit_accounting_unavailable" -]New value: +[ + "insufficient_credits", + "credit_accounting_unavailable", + "local_llm_budget_exhausted" +] - changed
Output schema / properties / status / enumPrevious value: -[ - "ready", - "setup_required", - "purchase_required", - "accounting_unavailable" -]New value: +[ + "ready", + "setup_required", + "purchase_required", + "accounting_unavailable", + "rate_limited" +]
- Changed
score_voice2 fields changed- added
Output schema / properties / errorAdded value: +{ + "additionalProperties": false, + "properties": { + "code": { + "enum": [ + "insufficient_credits", + "credit_accounting_unavailable", + "local_llm_budget_exhausted" + ], + "type": "string" + }, + "retryable": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "code", + "retryable" + ], + "type": "object" +} - changed
Output schema / properties / status / enumPrevious value: -[ - "ready", - "setup_required" -]New value: +[ + "ready", + "setup_required", + "rate_limited" +]
1 tool update
- Changed
rewrite_in_voice1 field changed- changed
Input schema / properties / targetRegister / enumPrevious value: -[ - "email", - "slack", - "essay" -]New value: +[ + "email", + "slack", + "social", + "essay" +]
1 tool update
- Changed
record_voice_feedback1 field changed- added
Input schema / properties / correctionText / descriptionAdded value: +"The complete final text the user actually used after correcting the output. Never send an excerpt, summary, or diff."
2 tool updates
- Changed
remove_sample_from_writing_profile2 fields changed- added
Output schema / properties / value / properties / heldNotUsableAdded value: +{ + "minimum": 0, + "type": "integer" +} - changed
Output schema / properties / value / requiredPrevious value: -[ - "profileId", - "generation", - "samples", - "needsWriting" -]New value: +[ + "profileId", + "generation", + "samples", + "needsWriting", + "heldNotUsable" +]
- Changed
replace_samples_in_writing_profile3 fields changed- changed
Output schema / properties / error / properties / code / enumPrevious value: -[ - "insufficient_evidence", - "profile_not_found", - "unexpected_error" -]New value: +[ + "insufficient_evidence", + "profile_not_found", + "samples_not_fully_visible", + "unexpected_error" +] - added
Output schema / properties / value / properties / heldNotUsableAdded value: +{ + "minimum": 0, + "type": "integer" +} - changed
Output schema / properties / value / requiredPrevious value: -[ - "profileId", - "generation", - "samples", - "needsWriting" -]New value: +[ + "profileId", + "generation", + "samples", + "needsWriting", + "heldNotUsable" +]
3 tool updates
- Changed
draft_in_voice1 field changed- changed
Output schema / properties / generationStatus / enumPrevious value: -[ - "succeeded", - "in_progress", - "completed_unavailable", - "failed", - "fenced_out", - "rebuild_required" -]New value: +[ + "succeeded" +]
- Changed
get_my_voice4 fields changed- removed
Output schema / properties / feedbackAvailableRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / feedbackInstructionRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / generationStatusRemoved value: -{ - "enum": [ - "succeeded" - ], - "type": "string" -} - removed
Output schema / properties / outputIdRemoved value: -{ - "type": [ - "string", - "null" - ] -}
- Changed
rewrite_in_voice1 field changed- changed
Output schema / properties / generationStatus / enumPrevious value: -[ - "succeeded", - "in_progress", - "completed_unavailable", - "failed", - "fenced_out", - "rebuild_required" -]New value: +[ + "succeeded" +]
7 tool updates
- Changed
add_samples_to_writing_profile5 fields changed- added
Input schema / properties / profileId / descriptionAdded value: +"The Writing Profile's id, or its exact name. Omit to use the current profile." - removed
Input schema / properties / profileId / formatRemoved value: -"uuid" - added
Input schema / properties / profileId / minLengthAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "profileId", - "samples" -]New value: +[ + "samples" +] - changed
Output schema / properties / error / properties / detail / requiredPrevious value: -[ - "reason", - "message", - "neededChars", - "neededBlocks", - "droppedBlocks", - "minimumChars", - "minimumBlocks" -]New value: +[ + "message" +]
- Changed
create_writing_profile1 field changed- changed
Output schema / properties / error / properties / detail / requiredPrevious value: -[ - "reason", - "message", - "neededChars", - "neededBlocks", - "droppedBlocks", - "minimumChars", - "minimumBlocks" -]New value: +[ + "message" +]
- Changed
delete_writing_profile7 fields changed- added
Input schema / properties / profileId / descriptionAdded value: +"The Writing Profile's id, or its exact name." - removed
Input schema / properties / profileId / formatRemoved value: -"uuid" - added
Input schema / properties / profileId / minLengthAdded value: +1 - added
Input schema / properties / replacementProfileId / descriptionAdded value: +"The Writing Profile's id, or its exact name." - removed
Input schema / properties / replacementProfileId / formatRemoved value: -"uuid" - added
Input schema / properties / replacementProfileId / minLengthAdded value: +1 - changed
Output schema / properties / error / properties / detail / requiredPrevious value: -[ - "reason", - "message", - "neededChars", - "neededBlocks", - "droppedBlocks", - "minimumChars", - "minimumBlocks" -]New value: +[ + "message" +]
- Changed
list_writing_profiles1 field changed- changed
Output schema / properties / error / properties / detail / requiredPrevious value: -[ - "reason", - "message", - "neededChars", - "neededBlocks", - "droppedBlocks", - "minimumChars", - "minimumBlocks" -]New value: +[ + "message" +]
- Changed
remove_sample_from_writing_profile4 fields changed- added
Input schema / properties / profileId / descriptionAdded value: +"The Writing Profile's id, or its exact name." - removed
Input schema / properties / profileId / formatRemoved value: -"uuid" - added
Input schema / properties / profileId / minLengthAdded value: +1 - changed
Output schema / properties / error / properties / detail / requiredPrevious value: -[ - "reason", - "message", - "neededChars", - "neededBlocks", - "droppedBlocks", - "minimumChars", - "minimumBlocks" -]New value: +[ + "message" +]
- Changed
replace_samples_in_writing_profile4 fields changed- added
Input schema / properties / profileId / descriptionAdded value: +"The Writing Profile's id, or its exact name." - removed
Input schema / properties / profileId / formatRemoved value: -"uuid" - added
Input schema / properties / profileId / minLengthAdded value: +1 - changed
Output schema / properties / error / properties / detail / requiredPrevious value: -[ - "reason", - "message", - "neededChars", - "neededBlocks", - "droppedBlocks", - "minimumChars", - "minimumBlocks" -]New value: +[ + "message" +]
- Changed
set_current_writing_profile4 fields changed- added
Input schema / properties / profileId / descriptionAdded value: +"The Writing Profile's id, or its exact name." - removed
Input schema / properties / profileId / formatRemoved value: -"uuid" - added
Input schema / properties / profileId / minLengthAdded value: +1 - changed
Output schema / properties / error / properties / detail / requiredPrevious value: -[ - "reason", - "message", - "neededChars", - "neededBlocks", - "droppedBlocks", - "minimumChars", - "minimumBlocks" -]New value: +[ + "message" +]
2 tool updates
- Changed
draft_in_voice1 field changed- changed
Input schema / properties / brief / maxLengthPrevious value: -4000New value: +8000
- Changed
replace_samples_in_writing_profile1 field changed- changed
Output schema / properties / error / properties / code / enumPrevious value: -[ - "profile_not_found", - "unexpected_error" -]New value: +[ + "insufficient_evidence", + "profile_not_found", + "unexpected_error" +]
7 tool updates
- Changed
add_samples_to_writing_profile1 field changed- added
Output schema / properties / error / properties / detailAdded value: +{ + "additionalProperties": false, + "properties": { + "droppedBlocks": { + "minimum": 0, + "type": "integer" + }, + "message": { + "type": "string" + }, + "minimumBlocks": { + "minimum": 0, + "type": "integer" + }, + "minimumChars": { + "minimum": 0, + "type": "integer" + }, + "neededBlocks": { + "minimum": 0, + "type": "integer" + }, + "neededChars": { + "minimum": 0, + "type": "integer" + }, + "reason": { + "enum": [ + "insufficient_input", + "unsupported_language" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message", + "neededChars", + "neededBlocks", + "droppedBlocks", + "minimumChars", + "minimumBlocks" + ], + "type": "object" +}
- Changed
create_writing_profile1 field changed- added
Output schema / properties / error / properties / detailAdded value: +{ + "additionalProperties": false, + "properties": { + "droppedBlocks": { + "minimum": 0, + "type": "integer" + }, + "message": { + "type": "string" + }, + "minimumBlocks": { + "minimum": 0, + "type": "integer" + }, + "minimumChars": { + "minimum": 0, + "type": "integer" + }, + "neededBlocks": { + "minimum": 0, + "type": "integer" + }, + "neededChars": { + "minimum": 0, + "type": "integer" + }, + "reason": { + "enum": [ + "insufficient_input", + "unsupported_language" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message", + "neededChars", + "neededBlocks", + "droppedBlocks", + "minimumChars", + "minimumBlocks" + ], + "type": "object" +}
- Changed
delete_writing_profile1 field changed- added
Output schema / properties / error / properties / detailAdded value: +{ + "additionalProperties": false, + "properties": { + "droppedBlocks": { + "minimum": 0, + "type": "integer" + }, + "message": { + "type": "string" + }, + "minimumBlocks": { + "minimum": 0, + "type": "integer" + }, + "minimumChars": { + "minimum": 0, + "type": "integer" + }, + "neededBlocks": { + "minimum": 0, + "type": "integer" + }, + "neededChars": { + "minimum": 0, + "type": "integer" + }, + "reason": { + "enum": [ + "insufficient_input", + "unsupported_language" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message", + "neededChars", + "neededBlocks", + "droppedBlocks", + "minimumChars", + "minimumBlocks" + ], + "type": "object" +}
- Changed
list_writing_profiles1 field changed- added
Output schema / properties / error / properties / detailAdded value: +{ + "additionalProperties": false, + "properties": { + "droppedBlocks": { + "minimum": 0, + "type": "integer" + }, + "message": { + "type": "string" + }, + "minimumBlocks": { + "minimum": 0, + "type": "integer" + }, + "minimumChars": { + "minimum": 0, + "type": "integer" + }, + "neededBlocks": { + "minimum": 0, + "type": "integer" + }, + "neededChars": { + "minimum": 0, + "type": "integer" + }, + "reason": { + "enum": [ + "insufficient_input", + "unsupported_language" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message", + "neededChars", + "neededBlocks", + "droppedBlocks", + "minimumChars", + "minimumBlocks" + ], + "type": "object" +}
- Changed
remove_sample_from_writing_profile1 field changed- added
Output schema / properties / error / properties / detailAdded value: +{ + "additionalProperties": false, + "properties": { + "droppedBlocks": { + "minimum": 0, + "type": "integer" + }, + "message": { + "type": "string" + }, + "minimumBlocks": { + "minimum": 0, + "type": "integer" + }, + "minimumChars": { + "minimum": 0, + "type": "integer" + }, + "neededBlocks": { + "minimum": 0, + "type": "integer" + }, + "neededChars": { + "minimum": 0, + "type": "integer" + }, + "reason": { + "enum": [ + "insufficient_input", + "unsupported_language" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message", + "neededChars", + "neededBlocks", + "droppedBlocks", + "minimumChars", + "minimumBlocks" + ], + "type": "object" +}
- Changed
replace_samples_in_writing_profile1 field changed- added
Output schema / properties / error / properties / detailAdded value: +{ + "additionalProperties": false, + "properties": { + "droppedBlocks": { + "minimum": 0, + "type": "integer" + }, + "message": { + "type": "string" + }, + "minimumBlocks": { + "minimum": 0, + "type": "integer" + }, + "minimumChars": { + "minimum": 0, + "type": "integer" + }, + "neededBlocks": { + "minimum": 0, + "type": "integer" + }, + "neededChars": { + "minimum": 0, + "type": "integer" + }, + "reason": { + "enum": [ + "insufficient_input", + "unsupported_language" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message", + "neededChars", + "neededBlocks", + "droppedBlocks", + "minimumChars", + "minimumBlocks" + ], + "type": "object" +}
- Changed
set_current_writing_profile1 field changed- added
Output schema / properties / error / properties / detailAdded value: +{ + "additionalProperties": false, + "properties": { + "droppedBlocks": { + "minimum": 0, + "type": "integer" + }, + "message": { + "type": "string" + }, + "minimumBlocks": { + "minimum": 0, + "type": "integer" + }, + "minimumChars": { + "minimum": 0, + "type": "integer" + }, + "neededBlocks": { + "minimum": 0, + "type": "integer" + }, + "neededChars": { + "minimum": 0, + "type": "integer" + }, + "reason": { + "enum": [ + "insufficient_input", + "unsupported_language" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message", + "neededChars", + "neededBlocks", + "droppedBlocks", + "minimumChars", + "minimumBlocks" + ], + "type": "object" +}
2 tool updates
- Added
remove_sample_from_writing_profile - Added
replace_samples_in_writing_profile
5 tool updates
- Added
add_samples_to_writing_profile - Added
create_writing_profile - Added
delete_writing_profile - Added
list_writing_profiles - Added
set_current_writing_profile
2 tool updates
- Changed
record_voice_feedback1 field changed- added
Input schema / properties / critiqueAdded value: +{ + "maxLength": 2000, + "minLength": 1, + "type": "string" +}
- Changed
rewrite_in_voice1 field changed- added
Input schema / properties / instructionsAdded value: +{ + "description": "Optional instruction from the user about the rewrite itself — length, tone, audience, what to cut or keep. Kept separate from `text`: put the request here, never inside the prose to rewrite.", + "maxLength": 4000, + "minLength": 1, + "type": "string" +}
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Build a voice from your own texts, measure whether a text still sounds like you, then write in it.
1A personal RAG database you build from chat, so AI creates work that sounds like you.
Write LinkedIn posts in your voice: ideas, drafts, scheduling, analytics from your personal AI.
Find AI-isms with evidence and fingerprint a writing voice from samples. 3 of 5 free.
Related MCP Servers
FlicenseNot gradedqualityDmaintenancePersonal RAG database and semantic search built from inside your AI chat. Store knowledge, voice, and skills; Claude and ChatGPT create work that sounds like you.-- AlicenseAqualityBmaintenanceMCP server that analyzes your writing style to generate personal voice rules, scores drafts for AI slop, and verifies authorship, enabling LLMs to write in your specific voice.7MIT
- FlicenseAqualityBmaintenanceEnables LLMs to access a user's personal writing context—voice, style, opinions, expertise, projects, and communication patterns—via curated markdown files, helping the LLM match the user's voice when generating written content.23-
- AlicenseAqualityAmaintenanceEnables human-like non-fiction authoring by training custom voices, applying tone presets, auditing drafts for AI tells, and managing dictionaries, all locally.10192098MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
The two tools are clearly distinct: 'write' creates new text while 'rewrite' modifies supplied prose. Each description explicitly states the different input and purpose, leaving no ambiguity about which tool to select.
Both tool names are single lowercase verbs that form a natural pair: write and rewrite. The naming is simple, predictable, and consistent in style.
Two tools feel minimal for a writing assistant, but the server's scope is tightly focused on generating and revising text. It is borderline rather than severely underprovisioned.
The core creation and revision workflows are covered, and the integrated profile shortfall mechanism handles personalization. A minor gap is the lack of any tool to manage or inspect the writing profile directly, but agents can work around it.