@ainote/mcp 1.3.1 → 1.3.3
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/LICENSE +20 -20
- package/README-ko.md +374 -374
- package/README.md +800 -777
- package/index.js +61 -56
- package/lib/auth/device-flow.js +285 -274
- package/lib/auth/mcp-key.js +40 -40
- package/lib/auth/oauth.js +18 -18
- package/lib/auth/refresh.js +78 -78
- package/lib/auth/strategy-factory.js +31 -31
- package/lib/auth/token-store.js +302 -286
- package/lib/cli/call.js +211 -0
- package/lib/cli/login.js +238 -238
- package/lib/cli/logout.js +39 -39
- package/lib/cli/signup.js +118 -118
- package/lib/cli/whoami.js +77 -77
- package/lib/core/api-client.js +1 -1
- package/lib/core/config-manager.js +106 -106
- package/lib/core/config.js +1 -1
- package/lib/core/mcp-server.js +2 -2
- package/lib/core/server-factory.js +82 -82
- package/lib/core/tool-registry.js +31 -31
- package/lib/tools/chatgpt-tools.js +93 -93
- package/lib/tools/dev-doc-tools.js +643 -643
- package/lib/tools/index.js +5 -5
- package/lib/tools/internal/claude-scanner.js +150 -150
- package/lib/tools/internal/encryption.js +88 -88
- package/lib/tools/internal/formatters.js +80 -80
- package/lib/tools/internal/keychain.js +98 -98
- package/lib/tools/internal/path-mapper.js +221 -221
- package/lib/tools/onboarding-tools.js +124 -124
- package/lib/tools/shared-tools.js +280 -280
- package/lib/utils/api-client.js +152 -152
- package/package.json +101 -101
- package/server.js +99 -99
package/index.js
CHANGED
|
@@ -1,56 +1,61 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* AI Note MCP Server — Claude Desktop integration (stdio transport).
|
|
4
|
-
*
|
|
5
|
-
* Also supports CLI subcommands:
|
|
6
|
-
* signup — interactive account creation
|
|
7
|
-
* login — device-authorization grant (RFC 8628)
|
|
8
|
-
* logout — revoke + clear local credentials
|
|
9
|
-
* whoami — show currently authenticated user
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
const subcommand = process.argv[2];
|
|
13
|
-
|
|
14
|
-
if (subcommand === 'signup') {
|
|
15
|
-
const { runSignup } = await import('./lib/cli/signup.js');
|
|
16
|
-
await runSignup();
|
|
17
|
-
} else if (subcommand === 'login') {
|
|
18
|
-
const { run } = await import('./lib/cli/login.js');
|
|
19
|
-
await run();
|
|
20
|
-
} else if (subcommand === 'logout') {
|
|
21
|
-
const { run } = await import('./lib/cli/logout.js');
|
|
22
|
-
await run();
|
|
23
|
-
} else if (subcommand === 'whoami') {
|
|
24
|
-
const { run } = await import('./lib/cli/whoami.js');
|
|
25
|
-
await run();
|
|
26
|
-
} else {
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
const {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AI Note MCP Server — Claude Desktop integration (stdio transport).
|
|
4
|
+
*
|
|
5
|
+
* Also supports CLI subcommands:
|
|
6
|
+
* signup — interactive account creation
|
|
7
|
+
* login — device-authorization grant (RFC 8628)
|
|
8
|
+
* logout — revoke + clear local credentials
|
|
9
|
+
* whoami — show currently authenticated user
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const subcommand = process.argv[2];
|
|
13
|
+
|
|
14
|
+
if (subcommand === 'signup') {
|
|
15
|
+
const { runSignup } = await import('./lib/cli/signup.js');
|
|
16
|
+
await runSignup();
|
|
17
|
+
} else if (subcommand === 'login') {
|
|
18
|
+
const { run } = await import('./lib/cli/login.js');
|
|
19
|
+
await run();
|
|
20
|
+
} else if (subcommand === 'logout') {
|
|
21
|
+
const { run } = await import('./lib/cli/logout.js');
|
|
22
|
+
await run();
|
|
23
|
+
} else if (subcommand === 'whoami') {
|
|
24
|
+
const { run } = await import('./lib/cli/whoami.js');
|
|
25
|
+
await run();
|
|
26
|
+
} else if (subcommand === 'call') {
|
|
27
|
+
// `ainote-mcp call <tool> [--key=value ...]` — direct shell invocation.
|
|
28
|
+
// Bypasses the stdio MCP host and posts JSON-RPC tools/call to the API.
|
|
29
|
+
const { run } = await import('./lib/cli/call.js');
|
|
30
|
+
await run(process.argv.slice(3));
|
|
31
|
+
} else {
|
|
32
|
+
// Default: start MCP stdio server
|
|
33
|
+
const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
|
|
34
|
+
const { resolveAuthContext } = await import('./lib/auth/strategy-factory.js');
|
|
35
|
+
const { createClaudeServer } = await import('./lib/core/server-factory.js');
|
|
36
|
+
const { getConfigAsync } = await import('./lib/core/config-manager.js');
|
|
37
|
+
|
|
38
|
+
// Hydrate AINOTE_API_KEY from the token store BEFORE auth context resolution
|
|
39
|
+
// so existing sync `authenticateWithMcpKey()` paths see the stored credential.
|
|
40
|
+
if (!process.env.AINOTE_API_KEY) {
|
|
41
|
+
try {
|
|
42
|
+
const cfg = await getConfigAsync();
|
|
43
|
+
if (cfg.api.key) {
|
|
44
|
+
process.env.AINOTE_API_KEY = cfg.api.key;
|
|
45
|
+
}
|
|
46
|
+
} catch { /* anonymous fallback handled below */ }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const transport = new StdioServerTransport();
|
|
50
|
+
const defaultAuthContext = resolveAuthContext('stdio');
|
|
51
|
+
|
|
52
|
+
if (defaultAuthContext.type === 'anonymous') {
|
|
53
|
+
console.error('[ainote-mcp] No AINOTE_API_KEY found. Starting in onboarding mode.');
|
|
54
|
+
console.error('[ainote-mcp] Run `npx @ainote/mcp login` (browser flow) or `npx @ainote/mcp signup`.');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const { server } = createClaudeServer({ defaultAuthContext });
|
|
58
|
+
|
|
59
|
+
await server.connect(transport);
|
|
60
|
+
console.error('AI Note MCP stdio server started (Claude Desktop compatible)');
|
|
61
|
+
}
|