onlymcp 0.10.0 → 0.12.0
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 +14 -11
- package/dist/apiBaseUrl.d.ts +12 -0
- package/dist/apiBaseUrl.js +28 -0
- package/dist/apiBaseUrl.js.map +1 -0
- package/dist/apiClient.d.ts +37 -2
- package/dist/apiClient.js +42 -4
- package/dist/apiClient.js.map +1 -1
- package/dist/bin/cli.js +189 -151
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/mcp.js +4 -2
- package/dist/bin/mcp.js.map +1 -1
- package/dist/deviceId.d.ts +2 -0
- package/dist/deviceId.js +97 -0
- package/dist/deviceId.js.map +1 -0
- package/dist/identity.d.ts +5 -1
- package/dist/identity.js +12 -2
- package/dist/identity.js.map +1 -1
- package/dist/import/secrets.js +1 -1
- package/dist/import/secrets.js.map +1 -1
- package/dist/import/upload.js +7 -1
- package/dist/import/upload.js.map +1 -1
- package/dist/install.d.ts +66 -12
- package/dist/install.js +137 -63
- package/dist/install.js.map +1 -1
- package/dist/instructions.js +2 -0
- package/dist/instructions.js.map +1 -1
- package/dist/paths.d.ts +2 -0
- package/dist/paths.js +4 -0
- package/dist/paths.js.map +1 -1
- package/dist/registry/caveats.d.ts +17 -0
- package/dist/registry/caveats.js +50 -0
- package/dist/registry/caveats.js.map +1 -0
- package/dist/registry/clients.d.ts +11 -0
- package/dist/registry/clients.js +333 -0
- package/dist/registry/clients.js.map +1 -0
- package/dist/registry/index.d.ts +5 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/serverInfo.d.ts +25 -0
- package/dist/registry/serverInfo.js +33 -0
- package/dist/registry/serverInfo.js.map +1 -0
- package/dist/registry/servers.d.ts +50 -0
- package/dist/registry/servers.js +225 -0
- package/dist/registry/servers.js.map +1 -0
- package/dist/registry/types.d.ts +60 -0
- package/dist/registry/types.js +6 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/stubs.js +2 -2
- package/dist/tools/getAgentDefinition.js +5 -2
- package/dist/tools/getAgentDefinition.js.map +1 -1
- package/dist/tools/getSkill.js +1 -1
- package/dist/tools/getSkill.js.map +1 -1
- package/dist/tools/getSkillFile.js +3 -3
- package/dist/tools/getSkillFile.js.map +1 -1
- package/dist/tools/memoryGraph.js +16 -11
- package/dist/tools/memoryGraph.js.map +1 -1
- package/dist/tools/memoryRead.js +1 -1
- package/dist/tools/memoryRead.js.map +1 -1
- package/dist/tools/memoryWrite.js +4 -2
- package/dist/tools/memoryWrite.js.map +1 -1
- package/dist/tools/write.js +3 -3
- package/dist/tools/write.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -7,10 +7,10 @@ in every MCP client you use. This package ships two binaries: the stdio MCP serv
|
|
|
7
7
|
**There is a second way in, and for most people it is the better one.** The hosted
|
|
8
8
|
server at `https://only-mcp.com/api/mcp` needs nothing installed, works from any
|
|
9
9
|
machine, and is the only way to reach the tools of the MCP servers you connect to
|
|
10
|
-
your account (GitHub,
|
|
10
|
+
your account (GitHub, Linear, Notion, your own — see "The gateway" below):
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
claude mcp add --transport http onlymcp https://only-mcp.com/api/mcp \
|
|
13
|
+
claude mcp add --transport http --scope user onlymcp https://only-mcp.com/api/mcp \
|
|
14
14
|
--header "Authorization: Bearer omk_…"
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -23,7 +23,7 @@ Requires a free account at [only-mcp.com](https://only-mcp.com) and Node.js 22 o
|
|
|
23
23
|
## Set up a client
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
npx onlymcp install --client claude # or: codex, gemini
|
|
26
|
+
npx onlymcp install --client claude-code # or: codex, gemini-cli
|
|
27
27
|
npx onlymcp login
|
|
28
28
|
```
|
|
29
29
|
|
|
@@ -36,8 +36,10 @@ merges into what is already there rather than replacing it:
|
|
|
36
36
|
| Codex | `~/.codex/config.toml` |
|
|
37
37
|
| Gemini CLI | `~/.gemini/settings.json` |
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
the
|
|
39
|
+
`npx onlymcp install --all` writes into every one of these whose config file already
|
|
40
|
+
exists on this machine, and skips the rest. Any other MCP client works too:
|
|
41
|
+
`npx onlymcp install --print --client claude-code` prints the JSON snippet to paste in
|
|
42
|
+
by hand.
|
|
41
43
|
|
|
42
44
|
`login` connects the device over an OAuth device code (a code plus a QR in the
|
|
43
45
|
terminal) and stores the token in the operating system keyring, never in a file.
|
|
@@ -46,12 +48,13 @@ terminal) and stores the token in the operating system keyring, never in a file.
|
|
|
46
48
|
|
|
47
49
|
| Command | What it does |
|
|
48
50
|
| --- | --- |
|
|
49
|
-
| `onlymcp install --client <id>` | Add OnlyMCP to a client's config |
|
|
50
|
-
| `onlymcp install --
|
|
51
|
-
| `onlymcp
|
|
52
|
-
| `onlymcp
|
|
53
|
-
| `onlymcp
|
|
54
|
-
| `onlymcp
|
|
51
|
+
| `npx onlymcp install --client <id>` | Add OnlyMCP to a client's config |
|
|
52
|
+
| `npx onlymcp install --all` | Add OnlyMCP to every client already set up on this machine |
|
|
53
|
+
| `npx onlymcp install --print --client <id>` | Print the snippet, write nothing |
|
|
54
|
+
| `npx onlymcp login` | Connect this device |
|
|
55
|
+
| `npx onlymcp status` | Show whether this device is connected |
|
|
56
|
+
| `npx onlymcp sync` | Rewrite the local stub files |
|
|
57
|
+
| `npx onlymcp logout` | End this device's session on the server, then remove the token and the local cache |
|
|
55
58
|
|
|
56
59
|
## What the agent gets
|
|
57
60
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The address of the OnlyMCP API that the stdio server talks to: ONLYMCP_API_URL, or https://only-mcp.com when the
|
|
3
|
+
* variable is not set. A variable that is set but empty is not "not set": it is a misconfiguration (an unexpanded
|
|
4
|
+
* `${VAR}` in an MCP client's config file lands here as the literal text).
|
|
5
|
+
*
|
|
6
|
+
* Fails fast and does not fall back: the stdio server has no degraded mode, every tool calls the API, and a guessed
|
|
7
|
+
* origin would hide the mistake. The message names the variable and shows the value, because the MCP client reports
|
|
8
|
+
* nothing but a closed connection; credentials in the value (`user:pass@`) are masked, as stderr ends up in client logs.
|
|
9
|
+
* Only http: and https: are accepted.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_API_URL = "https://only-mcp.com";
|
|
12
|
+
export declare function apiBaseUrl(raw?: string | undefined): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The address of the OnlyMCP API that the stdio server talks to: ONLYMCP_API_URL, or https://only-mcp.com when the
|
|
3
|
+
* variable is not set. A variable that is set but empty is not "not set": it is a misconfiguration (an unexpanded
|
|
4
|
+
* `${VAR}` in an MCP client's config file lands here as the literal text).
|
|
5
|
+
*
|
|
6
|
+
* Fails fast and does not fall back: the stdio server has no degraded mode, every tool calls the API, and a guessed
|
|
7
|
+
* origin would hide the mistake. The message names the variable and shows the value, because the MCP client reports
|
|
8
|
+
* nothing but a closed connection; credentials in the value (`user:pass@`) are masked, as stderr ends up in client logs.
|
|
9
|
+
* Only http: and https: are accepted.
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_API_URL = 'https://only-mcp.com';
|
|
12
|
+
export function apiBaseUrl(raw = process.env.ONLYMCP_API_URL) {
|
|
13
|
+
if (raw === undefined)
|
|
14
|
+
return DEFAULT_API_URL;
|
|
15
|
+
let protocol;
|
|
16
|
+
try {
|
|
17
|
+
protocol = new URL(raw).protocol;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Not parseable at all: reported below like a wrong scheme.
|
|
21
|
+
}
|
|
22
|
+
if (protocol !== 'http:' && protocol !== 'https:') {
|
|
23
|
+
const shown = raw.replace(/\/\/[^/@]*@/, '//***@');
|
|
24
|
+
throw new Error(`ONLYMCP_API_URL is not a valid http(s) URL: ${JSON.stringify(shown)}`);
|
|
25
|
+
}
|
|
26
|
+
return raw;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=apiBaseUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiBaseUrl.js","sourceRoot":"","sources":["../src/apiBaseUrl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAEtD,MAAM,UAAU,UAAU,CAAC,MAA0B,OAAO,CAAC,GAAG,CAAC,eAAe;IAC9E,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC;IAC9C,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/apiClient.d.ts
CHANGED
|
@@ -64,6 +64,7 @@ export type MemoryFile = {
|
|
|
64
64
|
};
|
|
65
65
|
updatedAt: string;
|
|
66
66
|
updatedByDevice: string | null;
|
|
67
|
+
updatedByName?: string | null;
|
|
67
68
|
};
|
|
68
69
|
export type SearchHit = {
|
|
69
70
|
kind: 'memory' | 'skill' | 'agent';
|
|
@@ -133,6 +134,11 @@ export type WriteResult = {
|
|
|
133
134
|
code: string;
|
|
134
135
|
params: Record<string, unknown>;
|
|
135
136
|
};
|
|
137
|
+
/** Set when the server created the file in a team instead of the personal space. */
|
|
138
|
+
routedTo?: {
|
|
139
|
+
teamId: string;
|
|
140
|
+
teamName: string;
|
|
141
|
+
};
|
|
136
142
|
};
|
|
137
143
|
export declare class ApiClient {
|
|
138
144
|
private readonly baseUrl;
|
|
@@ -148,6 +154,22 @@ export declare class ApiClient {
|
|
|
148
154
|
/** Optional, weil eine aeltere API sie nicht schickt. Fehlt sie, gilt an. */
|
|
149
155
|
brainvaultMode?: boolean;
|
|
150
156
|
}>;
|
|
157
|
+
/**
|
|
158
|
+
* Tells the server this device just finished an import or a sync (POST
|
|
159
|
+
* /api/devices/current/run), so the devices page can show when and how many files. The caller
|
|
160
|
+
* treats a failure as nothing: an older server answers 404, and a report is never worth a
|
|
161
|
+
* failed command. Five seconds at most, so a slow server cannot hold the command up.
|
|
162
|
+
*/
|
|
163
|
+
reportRun(kind: 'import' | 'sync', files: number): Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Ends this device's session on the server (POST /api/auth/sign-out, Better Auth's own sign-out:
|
|
166
|
+
* the API's bearer plugin turns the token into the session cookie that endpoint reads). For
|
|
167
|
+
* `onlymcp logout`, which forgets the login on this machine whatever this answers. Five seconds
|
|
168
|
+
* at most, so an unreachable server cannot hold the logout up.
|
|
169
|
+
*/
|
|
170
|
+
signOut(): Promise<{
|
|
171
|
+
success: boolean;
|
|
172
|
+
}>;
|
|
151
173
|
listSkills(): Promise<{
|
|
152
174
|
skills: SkillListItem[];
|
|
153
175
|
}>;
|
|
@@ -189,7 +211,15 @@ export declare class ApiClient {
|
|
|
189
211
|
name: string;
|
|
190
212
|
updatedAt: string;
|
|
191
213
|
}>;
|
|
192
|
-
|
|
214
|
+
/**
|
|
215
|
+
* `use` says "I am loading this definition to run it", and the server counts
|
|
216
|
+
* a load for the agent's "Used" line. Only `get_agent_definition` asks. Any
|
|
217
|
+
* other read of the same route (the write tool looking at the previous state)
|
|
218
|
+
* is not a use and must not send it.
|
|
219
|
+
*/
|
|
220
|
+
getAgent(name: string, { use }?: {
|
|
221
|
+
use?: boolean;
|
|
222
|
+
}): Promise<Scoped & {
|
|
193
223
|
name: string;
|
|
194
224
|
description: string;
|
|
195
225
|
model: string | null;
|
|
@@ -213,7 +243,12 @@ export declare class ApiClient {
|
|
|
213
243
|
memoryTree(scope?: string): Promise<{
|
|
214
244
|
nodes: TreeEntry[];
|
|
215
245
|
}>;
|
|
216
|
-
|
|
246
|
+
/**
|
|
247
|
+
* A move is a write of the moved file and of every file whose links it rewrites, and the
|
|
248
|
+
* server records the device each write came from. This machine's host name, as the
|
|
249
|
+
* memory_write tool and the import name it, so a write and a move from here are one device.
|
|
250
|
+
*/
|
|
251
|
+
moveMemory(from: string, to: string, updateLinks?: boolean, deviceLabel?: string): Promise<{
|
|
217
252
|
from: string;
|
|
218
253
|
to: string;
|
|
219
254
|
rewritten: number;
|
package/dist/apiClient.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hostname } from 'node:os';
|
|
1
2
|
import { identityHeaders } from './identity.js';
|
|
2
3
|
export class ApiError extends Error {
|
|
3
4
|
code;
|
|
@@ -44,6 +45,32 @@ export class ApiClient {
|
|
|
44
45
|
getMe() {
|
|
45
46
|
return this.call('/api/me');
|
|
46
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Tells the server this device just finished an import or a sync (POST
|
|
50
|
+
* /api/devices/current/run), so the devices page can show when and how many files. The caller
|
|
51
|
+
* treats a failure as nothing: an older server answers 404, and a report is never worth a
|
|
52
|
+
* failed command. Five seconds at most, so a slow server cannot hold the command up.
|
|
53
|
+
*/
|
|
54
|
+
reportRun(kind, files) {
|
|
55
|
+
return this.call('/api/devices/current/run', {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
body: JSON.stringify({ kind, files }),
|
|
58
|
+
signal: AbortSignal.timeout(5000),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Ends this device's session on the server (POST /api/auth/sign-out, Better Auth's own sign-out:
|
|
63
|
+
* the API's bearer plugin turns the token into the session cookie that endpoint reads). For
|
|
64
|
+
* `onlymcp logout`, which forgets the login on this machine whatever this answers. Five seconds
|
|
65
|
+
* at most, so an unreachable server cannot hold the logout up.
|
|
66
|
+
*/
|
|
67
|
+
signOut() {
|
|
68
|
+
return this.call('/api/auth/sign-out', {
|
|
69
|
+
method: 'POST',
|
|
70
|
+
body: '{}',
|
|
71
|
+
signal: AbortSignal.timeout(5000),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
47
74
|
listSkills() {
|
|
48
75
|
return this.call('/api/skills');
|
|
49
76
|
}
|
|
@@ -79,8 +106,14 @@ export class ApiClient {
|
|
|
79
106
|
putAgent(name, a) {
|
|
80
107
|
return this.call(`/api/agents/${encodeURIComponent(name)}`, { method: 'PUT', body: JSON.stringify(a) });
|
|
81
108
|
}
|
|
82
|
-
|
|
83
|
-
|
|
109
|
+
/**
|
|
110
|
+
* `use` says "I am loading this definition to run it", and the server counts
|
|
111
|
+
* a load for the agent's "Used" line. Only `get_agent_definition` asks. Any
|
|
112
|
+
* other read of the same route (the write tool looking at the previous state)
|
|
113
|
+
* is not a use and must not send it.
|
|
114
|
+
*/
|
|
115
|
+
getAgent(name, { use = false } = {}) {
|
|
116
|
+
return this.call(`/api/agents/${encodeURIComponent(name)}${use ? '?use=1' : ''}`);
|
|
84
117
|
}
|
|
85
118
|
readMemory(path) {
|
|
86
119
|
return this.call(this.memoryUrl(path));
|
|
@@ -111,10 +144,15 @@ export class ApiClient {
|
|
|
111
144
|
memoryTree(scope = 'all') {
|
|
112
145
|
return this.call(`/api/memory/tree?scope=${encodeURIComponent(scope)}`);
|
|
113
146
|
}
|
|
114
|
-
|
|
147
|
+
/**
|
|
148
|
+
* A move is a write of the moved file and of every file whose links it rewrites, and the
|
|
149
|
+
* server records the device each write came from. This machine's host name, as the
|
|
150
|
+
* memory_write tool and the import name it, so a write and a move from here are one device.
|
|
151
|
+
*/
|
|
152
|
+
moveMemory(from, to, updateLinks = true, deviceLabel = hostname()) {
|
|
115
153
|
return this.call('/api/memory/move', {
|
|
116
154
|
method: 'POST',
|
|
117
|
-
body: JSON.stringify({ from, to, updateLinks }),
|
|
155
|
+
body: JSON.stringify({ from, to, updateLinks, deviceLabel }),
|
|
118
156
|
});
|
|
119
157
|
}
|
|
120
158
|
// --- Der Weg nach draussen ---------------------------------------------
|
package/dist/apiClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../src/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEtB;IACA;IACA;IAHX,YACW,IAAY,EACZ,SAAkC,EAAE,EACpC,SAAS,CAAC;QAEnB,KAAK,CAAC,IAAI,CAAC,CAAC;QAJH,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAA8B;QACpC,WAAM,GAAN,MAAM,CAAI;QAGnB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../src/apiClient.ts"],"names":[],"mappings":"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"}
|