idiolect-mcp 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +123 -74
- package/package.json +1 -1
- package/progressive-catalog.json +33 -16
package/README.md
CHANGED
|
@@ -1,33 +1,115 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Idiolect AI MCP server
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Write and revise emails, messages, posts, replies, and docs in your voice with your portable
|
|
4
|
+
Writing Profile. Idiolect AI creates new writing directly from your request and revises text
|
|
5
|
+
you supply. You do not need to fetch a profile before writing.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Connect with hosted OAuth
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use **`https://idiolect.app/api/mcp`** in a client that supports remote HTTP MCP and OAuth.
|
|
10
|
+
Your client opens browser sign-in and manages the connection. No npm installation, API key,
|
|
11
|
+
or client secret is needed for this path. Review the consent screen and your client's tool
|
|
12
|
+
permissions. Avoid adding a second connection if Idiolect AI is already connected.
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
### Codex
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
codex mcp add idiolect --url https://idiolect.app/api/mcp
|
|
18
|
+
codex mcp login idiolect
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
See the [Codex MCP guide](https://learn.chatgpt.com/docs/extend/mcp?surface=cli).
|
|
22
|
+
|
|
23
|
+
### Cursor
|
|
24
|
+
|
|
25
|
+
Add this to `.cursor/mcp.json`, then complete OAuth sign-in in Cursor's MCP settings:
|
|
13
26
|
|
|
14
27
|
```json
|
|
15
28
|
{
|
|
16
29
|
"mcpServers": {
|
|
17
30
|
"idiolect": {
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
"url": "https://idiolect.app/api/mcp"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
See the [Cursor MCP guide](https://cursor.com/docs/mcp).
|
|
38
|
+
|
|
39
|
+
### VS Code with GitHub Copilot
|
|
40
|
+
|
|
41
|
+
Add this to `.vscode/mcp.json`. Start the server from the MCP controls and complete sign-in:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"servers": {
|
|
46
|
+
"idiolect": {
|
|
47
|
+
"type": "http",
|
|
48
|
+
"url": "https://idiolect.app/api/mcp"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
See the [VS Code MCP configuration reference](https://code.visualstudio.com/docs/agents/reference/mcp-configuration).
|
|
55
|
+
|
|
56
|
+
### OpenCode
|
|
57
|
+
|
|
58
|
+
Add this to `opencode.json` in your project:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"$schema": "https://opencode.ai/config.json",
|
|
63
|
+
"mcp": {
|
|
64
|
+
"idiolect": {
|
|
65
|
+
"type": "remote",
|
|
66
|
+
"url": "https://idiolect.app/api/mcp",
|
|
67
|
+
"enabled": true
|
|
21
68
|
}
|
|
22
69
|
}
|
|
23
70
|
}
|
|
24
71
|
```
|
|
25
72
|
|
|
26
|
-
|
|
73
|
+
Then run `opencode mcp auth idiolect` and check the connection with `opencode mcp list`.
|
|
74
|
+
See the [OpenCode MCP guide](https://opencode.ai/docs/mcp-servers/).
|
|
75
|
+
|
|
76
|
+
These examples configure the connection. A connected catalog does not prove a complete
|
|
77
|
+
writing workflow in every client. Your client's model access and tool approvals also apply.
|
|
78
|
+
|
|
79
|
+
## Writing tools
|
|
80
|
+
|
|
81
|
+
Hosted OAuth and API-key account mode advertise these five tools:
|
|
27
82
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
83
|
+
- `write` creates writing from your request, facts, or notes.
|
|
84
|
+
- `rewrite` changes supplied prose. Your directions stay separate in `instructions`.
|
|
85
|
+
- `refine_writing` changes writing Idiolect AI returned, using its latest writing reference.
|
|
86
|
+
- `view_writing_profile` reads your current Writing Profile, rules, or samples.
|
|
87
|
+
- `manage_profile` creates or changes Writing Profiles and stated rules.
|
|
88
|
+
|
|
89
|
+
If you have no Writing Profile, the service offers setup from your own writing or answers.
|
|
90
|
+
You can skip setup and keep writing without a profile. After three completed pieces, one
|
|
91
|
+
optional reminder may appear after the writing. Ignoring it does not repeat it; declining it
|
|
92
|
+
stops future reminders. Follow the returned setup choices and reference. A reminder decline
|
|
93
|
+
uses `setup.purpose` `reminder` and `setup.choice` `plain`; it never rewrites the completed piece.
|
|
94
|
+
Whole-profile deletion is on the website.
|
|
95
|
+
|
|
96
|
+
Use your own authored writing as profile evidence. Your host can fetch it when you ask.
|
|
97
|
+
Review the retrieved pieces, then approve the exact pieces to send for your Writing Profile.
|
|
98
|
+
When submitting evidence, the host sets `evidence.userApproved` to `true` only after that approval.
|
|
99
|
+
It uses `evidence.source` `sent_writing` for messages you previously sent to others.
|
|
100
|
+
It uses `current_request` for other material you supply or approve for the current request.
|
|
101
|
+
These values follow the evidence contract; they do not identify the external storage service.
|
|
102
|
+
Do not save AI or third-party prose as your writing, or turn inferred patterns into your stated rules.
|
|
103
|
+
|
|
104
|
+
The service returns finished writing. Preserve its wording when presenting it, and use
|
|
105
|
+
`refine_writing` for follow-up edits. Ordinary writing does not report a Voice Match score.
|
|
106
|
+
Sending or publishing the result is a separate action in your client.
|
|
107
|
+
|
|
108
|
+
## npm and API-key account mode
|
|
109
|
+
|
|
110
|
+
The `idiolect-mcp` npm package is a local **stdio** bridge to the hosted service. Use it when
|
|
111
|
+
your client needs a local process instead of hosted OAuth. It requires Node.js 18 or newer
|
|
112
|
+
and an Idiolect AI API key for account mode; it does not perform browser OAuth itself.
|
|
31
113
|
|
|
32
114
|
```json
|
|
33
115
|
{
|
|
@@ -35,69 +117,36 @@ set `IDIOLECT_API_KEY`:
|
|
|
35
117
|
"idiolect": {
|
|
36
118
|
"command": "npx",
|
|
37
119
|
"args": ["-y", "idiolect-mcp"],
|
|
38
|
-
"env": {
|
|
120
|
+
"env": {
|
|
121
|
+
"IDIOLECT_API_KEY": "<your-api-key>"
|
|
122
|
+
}
|
|
39
123
|
}
|
|
40
124
|
}
|
|
41
125
|
}
|
|
42
126
|
```
|
|
43
127
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
advertised; a retired name answers with the current tool to use instead. Slug mode keeps its
|
|
68
|
-
legacy local-samples catalogue; locally configured samples are used only for stateless scoring
|
|
69
|
-
and are not stored.
|
|
70
|
-
|
|
71
|
-
When an account has no Writing Profile, `write` and `rewrite` return the setup choices.
|
|
72
|
-
`manage_profile` with `create_profile` returns exact missing blocks and characters when evidence is thin.
|
|
73
|
-
Feedback can be accepted, corrected-and-accepted, or rejected only against a
|
|
74
|
-
succeeded server-issued output.
|
|
75
|
-
Correction prose is retained only when the applicable consent gates permit it and
|
|
76
|
-
within its existing expiry rule. An explicitly approved correction can be added as
|
|
77
|
-
private V2 evidence; it never changes the current Writing Profile or silently activates
|
|
78
|
-
V2. A stored Writing Profile is never described as provisional.
|
|
79
|
-
|
|
80
|
-
The setup response includes neither an activation token nor a capability/setup URL.
|
|
81
|
-
`create_writing_profile` runs only after explicit permission from evidence you supplied or
|
|
82
|
-
approved. Creating a profile and
|
|
83
|
-
succeeding at a first generation are not activation. Canonical native activation
|
|
84
|
-
occurs only after accepted or corrected-and-accepted feedback.
|
|
85
|
-
|
|
86
|
-
## Words and retries
|
|
87
|
-
|
|
88
|
-
Each account has a monthly word allowance from its plan, plus any extra words it has bought.
|
|
89
|
-
Usage and the plan are shown at idiolect.app/settings/plan.
|
|
90
|
-
|
|
91
|
-
When an account has no words left, the drafting and rewriting tools return a tool error
|
|
92
|
-
before any generation starts. The error text says how many words were used, when the
|
|
93
|
-
allowance resets, and where to see the plan. Nothing is charged for a refused call.
|
|
94
|
-
|
|
95
|
-
Internal generation coordination happens before provider work. A stale internal
|
|
96
|
-
state is refreshed before the client receives one public retry action. If durable
|
|
97
|
-
completion cannot be confirmed, prose is suppressed and the response uses plain
|
|
98
|
-
language without exposing coordination receipts.
|
|
99
|
-
|
|
100
|
-
Set `IDIOLECT_BASE` to point at a self-hosted instance (defaults to
|
|
101
|
-
`https://idiolect.app`).
|
|
128
|
+
Replace the placeholder through your client's private credential configuration. Never commit
|
|
129
|
+
an actual key. `IDIOLECT_BASE` changes the service URL for a self-hosted instance; its default
|
|
130
|
+
is `https://idiolect.app`.
|
|
131
|
+
|
|
132
|
+
### Legacy slug mode
|
|
133
|
+
|
|
134
|
+
Without an API key, the stdio package exposes its separate legacy catalog. `IDIOLECT_SLUG`
|
|
135
|
+
selects a public Voice Card; it does not select an authenticated account's Writing Profile.
|
|
136
|
+
Optional `IDIOLECT_SAMPLES_FILE` or `IDIOLECT_SAMPLES` supplies samples for stateless scoring.
|
|
137
|
+
This compatibility path is distinct from the five account tools above. Prefer hosted OAuth
|
|
138
|
+
for current writing and profile workflows.
|
|
139
|
+
|
|
140
|
+
## Privacy, support, and maintenance
|
|
141
|
+
|
|
142
|
+
Writing requests and approved evidence go to the hosted service. Your client controls its
|
|
143
|
+
OAuth tokens and tool permissions. Read the [privacy policy](https://idiolect.app/privacy)
|
|
144
|
+
and [terms](https://idiolect.app/terms). For help, use [support](https://idiolect.app/support)
|
|
145
|
+
or email [hello@idiolect.app](mailto:hello@idiolect.app).
|
|
146
|
+
|
|
147
|
+
For contributions, keep setup examples aligned with the writing tools and evidence rules above.
|
|
148
|
+
Check that examples use supported fields and preserve user approval and the returned writing.
|
|
149
|
+
Generated catalog files come from the product repository's canonical contract.
|
|
150
|
+
Report catalog changes in an issue rather than editing generated files by hand.
|
|
102
151
|
|
|
103
152
|
MIT licensed.
|
package/package.json
CHANGED
package/progressive-catalog.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"instructions": "When writing for or on behalf of the user, use Idiolect AI. The user need not name it. Examples include emails, messages, posts, replies, and docs.\n\nThe `write` tool creates writing from a request, facts, or notes. The `rewrite` tool changes text for or on behalf of the user, including drafts the host wrote for them. Put the user's directions in `instructions`. The `refine_writing` tool revises writing Idiolect AI returned.\n\nThe `view_writing_profile` tool lists Writing Profiles and reads one. The `manage_profile` tool changes Writing Profiles. Writing Profiles update continuously as the user writes. Do not keep a saved copy; it goes stale and leads to unexpected results. Read the current Writing Profile with `view_writing_profile`.\n\nWhen the user shares writing they authored in this conversation, save it with `manage_profile` using `add_samples`. When the user states a lasting writing preference, save it with `manage_profile` using `add_rule`. Keep stated rules in the user's words and preserve their scope. Do not save inferred patterns as stated rules. Reuse that permission for the rest of this conversation without asking again.\n\nUse material from the current conversation.
|
|
2
|
+
"instructions": "When writing for or on behalf of the user, use Idiolect AI. The user need not name it. Examples include emails, messages, posts, replies, and docs.\n\nThe `write` tool creates writing from a request, facts, or notes. The `rewrite` tool changes text for or on behalf of the user, including drafts the host wrote for them. Put the user's directions in `instructions`. The `refine_writing` tool revises writing Idiolect AI returned.\n\nThe `view_writing_profile` tool lists Writing Profiles and reads one. The `manage_profile` tool changes Writing Profiles. Writing Profiles update continuously as the user writes. Do not keep a saved copy; it goes stale and leads to unexpected results. Read the current Writing Profile with `view_writing_profile`.\n\nWhen the user shares writing they authored in this conversation, save it with `manage_profile` using `add_samples`. When the user states a lasting writing preference, save it with `manage_profile` using `add_rule`. Keep stated rules in the user's words and preserve their scope. Do not save inferred patterns as stated rules. Reuse that permission for the rest of this conversation without asking again.\n\nUse material from the current conversation. Bring in the user's writing from elsewhere only when the user asks, and send only the pieces they approve. Exclude AI text and third-party writing from Writing Profile evidence. Never invent facts, experiences, or opinions. The tools return finished writing; they never send or publish it. When presenting the writing, preserve its wording.\n\nFollow the host's source rules.",
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "write",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"minLength": 1,
|
|
73
73
|
"maxLength": 12000
|
|
74
74
|
},
|
|
75
|
-
"description": "Send text the user wrote, unchanged. Remove signatures, quoted replies, forwarded text, boilerplate, prompts, templates, and
|
|
75
|
+
"description": "Send text the user wrote, unchanged. Remove signatures, quoted replies, forwarded text, boilerplate, prompts, templates, AI text, and any wording you added around their samples."
|
|
76
76
|
},
|
|
77
77
|
"answers": {
|
|
78
78
|
"type": "array",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
],
|
|
99
99
|
"additionalProperties": false
|
|
100
100
|
},
|
|
101
|
-
"description": "
|
|
101
|
+
"description": "Messages the user wrote for situations you gave them. Send each unchanged, with the situation as `question`."
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
"required": [
|
|
@@ -206,6 +206,11 @@
|
|
|
206
206
|
"format": "uuid",
|
|
207
207
|
"description": "The writing reference returned by the tool."
|
|
208
208
|
},
|
|
209
|
+
"purpose": {
|
|
210
|
+
"type": "string",
|
|
211
|
+
"const": "reminder",
|
|
212
|
+
"description": "Set `reminder` only to decline the optional reminder after completed writing. Use `choice` `plain`."
|
|
213
|
+
},
|
|
209
214
|
"choice": {
|
|
210
215
|
"type": "string",
|
|
211
216
|
"enum": [
|
|
@@ -308,7 +313,7 @@
|
|
|
308
313
|
"other",
|
|
309
314
|
"unknown"
|
|
310
315
|
],
|
|
311
|
-
"description": "Who wrote this text. `user`: the user. `host`: the assistant. `other`: a third party. If unsure, omit `sourceAuthor`."
|
|
316
|
+
"description": "Who wrote this text. `user`: the user. `host`: the assistant. `other`: a third party. If unsure, omit `sourceAuthor`. Set it whenever you know who wrote the text."
|
|
312
317
|
},
|
|
313
318
|
"evidence": {
|
|
314
319
|
"type": "object",
|
|
@@ -335,7 +340,7 @@
|
|
|
335
340
|
"minLength": 1,
|
|
336
341
|
"maxLength": 12000
|
|
337
342
|
},
|
|
338
|
-
"description": "Send text the user wrote, unchanged. Remove signatures, quoted replies, forwarded text, boilerplate, prompts, templates, and
|
|
343
|
+
"description": "Send text the user wrote, unchanged. Remove signatures, quoted replies, forwarded text, boilerplate, prompts, templates, AI text, and any wording you added around their samples."
|
|
339
344
|
},
|
|
340
345
|
"answers": {
|
|
341
346
|
"type": "array",
|
|
@@ -361,7 +366,7 @@
|
|
|
361
366
|
],
|
|
362
367
|
"additionalProperties": false
|
|
363
368
|
},
|
|
364
|
-
"description": "
|
|
369
|
+
"description": "Messages the user wrote for situations you gave them. Send each unchanged, with the situation as `question`."
|
|
365
370
|
}
|
|
366
371
|
},
|
|
367
372
|
"required": [
|
|
@@ -469,6 +474,11 @@
|
|
|
469
474
|
"format": "uuid",
|
|
470
475
|
"description": "The writing reference returned by the tool."
|
|
471
476
|
},
|
|
477
|
+
"purpose": {
|
|
478
|
+
"type": "string",
|
|
479
|
+
"const": "reminder",
|
|
480
|
+
"description": "Set `reminder` only to decline the optional reminder after completed writing. Use `choice` `plain`."
|
|
481
|
+
},
|
|
472
482
|
"choice": {
|
|
473
483
|
"type": "string",
|
|
474
484
|
"enum": [
|
|
@@ -756,7 +766,8 @@
|
|
|
756
766
|
"rename_profile",
|
|
757
767
|
"set_current_profile",
|
|
758
768
|
"set_default_template"
|
|
759
|
-
]
|
|
769
|
+
],
|
|
770
|
+
"description": "Choose an `action`: `create_profile` builds from `evidence`; `add_samples` saves more writing; `remove_sample` deletes one sample. `add_rule` saves a stated preference; `remove_rule` deletes one rule. `rename_profile` changes its name; `set_current_profile` selects it for writing; `set_default_template` sets or clears a template."
|
|
760
771
|
},
|
|
761
772
|
"profile": {
|
|
762
773
|
"type": "string",
|
|
@@ -788,7 +799,7 @@
|
|
|
788
799
|
"minLength": 1,
|
|
789
800
|
"maxLength": 12000
|
|
790
801
|
},
|
|
791
|
-
"description": "Send text the user wrote, unchanged. Remove signatures, quoted replies, forwarded text, boilerplate, prompts, templates, and
|
|
802
|
+
"description": "Send text the user wrote, unchanged. Remove signatures, quoted replies, forwarded text, boilerplate, prompts, templates, AI text, and any wording you added around their samples."
|
|
792
803
|
},
|
|
793
804
|
"answers": {
|
|
794
805
|
"type": "array",
|
|
@@ -814,7 +825,7 @@
|
|
|
814
825
|
],
|
|
815
826
|
"additionalProperties": false
|
|
816
827
|
},
|
|
817
|
-
"description": "
|
|
828
|
+
"description": "Messages the user wrote for situations you gave them. Send each unchanged, with the situation as `question`."
|
|
818
829
|
}
|
|
819
830
|
},
|
|
820
831
|
"required": [
|
|
@@ -845,7 +856,7 @@
|
|
|
845
856
|
"type": "string",
|
|
846
857
|
"minLength": 1,
|
|
847
858
|
"maxLength": 60,
|
|
848
|
-
"description": "
|
|
859
|
+
"description": "The Writing Profile's display name. Required for `rename_profile`; optional for `create_profile`."
|
|
849
860
|
},
|
|
850
861
|
"writingJobVersionId": {
|
|
851
862
|
"type": "string",
|
|
@@ -864,32 +875,38 @@
|
|
|
864
875
|
"channel": {
|
|
865
876
|
"type": "string",
|
|
866
877
|
"minLength": 1,
|
|
867
|
-
"maxLength": 200
|
|
878
|
+
"maxLength": 200,
|
|
879
|
+
"description": "Where the writing appears, such as email, chat, or a social post."
|
|
868
880
|
},
|
|
869
881
|
"audience": {
|
|
870
882
|
"type": "string",
|
|
871
883
|
"minLength": 1,
|
|
872
|
-
"maxLength": 200
|
|
884
|
+
"maxLength": 200,
|
|
885
|
+
"description": "Who will read the writing, such as clients, colleagues, or the public."
|
|
873
886
|
},
|
|
874
887
|
"relationship": {
|
|
875
888
|
"type": "string",
|
|
876
889
|
"minLength": 1,
|
|
877
|
-
"maxLength": 200
|
|
890
|
+
"maxLength": 200,
|
|
891
|
+
"description": "The user's relationship to the reader, such as manager, friend, or customer."
|
|
878
892
|
},
|
|
879
893
|
"purpose": {
|
|
880
894
|
"type": "string",
|
|
881
895
|
"minLength": 1,
|
|
882
|
-
"maxLength": 200
|
|
896
|
+
"maxLength": 200,
|
|
897
|
+
"description": "What the writing should achieve, such as an update, request, or apology."
|
|
883
898
|
},
|
|
884
899
|
"register": {
|
|
885
900
|
"type": "string",
|
|
886
901
|
"minLength": 1,
|
|
887
|
-
"maxLength": 200
|
|
902
|
+
"maxLength": 200,
|
|
903
|
+
"description": "The tone or formality the rule applies to, such as casual or formal."
|
|
888
904
|
},
|
|
889
905
|
"format": {
|
|
890
906
|
"type": "string",
|
|
891
907
|
"minLength": 1,
|
|
892
|
-
"maxLength": 200
|
|
908
|
+
"maxLength": 200,
|
|
909
|
+
"description": "The writing's structure, such as a short reply, bullet list, or long article."
|
|
893
910
|
}
|
|
894
911
|
},
|
|
895
912
|
"additionalProperties": false,
|