Build a voice from your own texts, measure whether a text still sounds like you, then write in it.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token: an API key (kaneme_...) or an OAuth 2.1 access token. Discovery: /.well-known/oauth-protected-resource/api/mcp
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Measures whether a text is by the SAME HAND as three reference texts pasted in the call. No account, no credits, nothing stored. Exactly 3 references of 100+ words each, in DIFFERENT registers, and a text of 50+ words (150 to leave low confidence). Returns a calibrated PROBABILITY, its label and four stylometric dimensions (not a breakdown of the probability). `probability: null` with `unavailable` is a measured abstention; only `embedding_layer` is an outage on our side. Not verify_authorship, which uses the account’s saved voice. For that, a Kaneme account at https://kaneme.com and the authenticated MCP connection.
Text to attribute (50+ words), not taken from the references (self_overlap).
Exactly 3 texts by the person, 100+ words each, different registers.
human = this person vs an AI (default) · author = this person vs another human.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Measures whether a text is by the SAME HAND as three reference texts pasted in the call. No account, no credits, nothing stored. Exactly 3 references of 100+ words each, in DIFFERENT registers, and a text of 50+ words (150 to leave low confidence). Returns a calibrated PROBABILITY, its label and four stylometric dimensions (not a breakdown of the probability). `probability: null` with `unavailable` is a measured abstention; only `embedding_layer` is an outage on our side. Not verify_authorship, which uses the account’s saved voice. For that, a Kaneme account at https://kaneme.com and the authenticated MCP connection.
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to attribute (50+ words), not taken from the references (self_overlap). |
| samples* | array | Exactly 3 texts by the person, 100+ words each, different registers. |
| question | string | human = this person vs an AI (default) · author = this person vs another human. |
{
"type": "object",
"required": [
"samples",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Text to attribute (50+ words), not taken from the references (self_overlap)."
},
"samples": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exactly 3 texts by the person, 100+ words each, different registers."
},
"question": {
"enum": [
"human",
"author"
],
"type": "string",
"description": "human = this person vs an AI (default) · author = this person vs another human."
}
},
"additionalProperties": {}
}Reads a text with the Observatoire method (frozen copy, `methodVersion` returned): passages to reread, each with its criterion (G01 generic phrasing, S01 announced conclusion, V01 claim without visible evidence, R01 near-repeated vocabulary, S02 repeated opening, D01 long sentence), UTF-16 positions, the quoted passage and editorial advice. No account, no credits, nothing stored. It is NOT an AI detector, NOT a proof of authorship and has NO score: never turn the number of passages into a verdict, and never merge it with a Kaneme measurement. Labels and advice are in French: relay them in the user’s language. Language is detected when omitted; English rules are experimental. To rewrite the text in the user’s own voice, use improve_in_voice (account required).
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to read (12,000 characters max). |
| language | string | Text language (detected when omitted). |
| documentType | string | Kind of text; tunes the advice (default: general). |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Text to read (12,000 characters max)."
},
"language": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Text language (detected when omitted)."
},
"documentType": {
"enum": [
"general",
"social",
"article",
"email",
"report",
"marketing",
"documentation"
],
"type": "string",
"description": "Kind of text; tunes the advice (default: general)."
}
},
"additionalProperties": {}
}