@tekmidian/devonthink-mcp 1.0.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/LICENSE +21 -0
- package/README.md +149 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.js +89 -0
- package/dist/server.js.map +1 -0
- package/dist/setup.d.ts +12 -0
- package/dist/setup.js +323 -0
- package/dist/setup.js.map +1 -0
- package/package.json +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Matthias Nott
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# devonthink-mcp
|
|
2
|
+
|
|
3
|
+
DEVONthink MCP server for Claude Code. Zero-config setup — one command and you're done.
|
|
4
|
+
|
|
5
|
+
Powered by [mcp-server-devonthink](https://github.com/dvcrn/mcp-server-devonthink).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quick start
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx @tekmidian/devonthink-mcp setup
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The wizard checks prerequisites, configures `~/.claude.json`, and enables the server. Restart Claude Code and DEVONthink tools are immediately available.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## What it provides
|
|
20
|
+
|
|
21
|
+
With this server running, Claude Code can:
|
|
22
|
+
|
|
23
|
+
- Search and browse all open DEVONthink databases
|
|
24
|
+
- Read document content (PDFs, Markdown, plain text, HTML, rich text)
|
|
25
|
+
- Create, update, and delete records
|
|
26
|
+
- Add and remove tags, classify documents, manage metadata
|
|
27
|
+
- Move, replicate, and duplicate records across groups
|
|
28
|
+
- Cross-reference emails with archived documents
|
|
29
|
+
- Ask AI about documents (DEVONthink's built-in AI)
|
|
30
|
+
- List and navigate database groups
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Requirements
|
|
35
|
+
|
|
36
|
+
- macOS (DEVONthink is macOS-only)
|
|
37
|
+
- [DEVONthink 3](https://www.devontechnologies.com/apps/devonthink) installed and running
|
|
38
|
+
- Node.js >= 18
|
|
39
|
+
- Claude Code
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Installation
|
|
44
|
+
|
|
45
|
+
### Option 1: npx (no install required)
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx @tekmidian/devonthink-mcp setup
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Option 2: Global install
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm install -g @tekmidian/devonthink-mcp
|
|
55
|
+
devonthink-mcp setup
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Option 3: Clone and build
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git clone https://github.com/mnott/devonthink-mcp ~/dev/ai/devonthink-mcp
|
|
62
|
+
cd ~/dev/ai/devonthink-mcp
|
|
63
|
+
npm install
|
|
64
|
+
npm run build
|
|
65
|
+
node dist/index.js setup
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Manual configuration
|
|
71
|
+
|
|
72
|
+
If you prefer to configure Claude Code manually, add this to the `mcpServers` section of `~/.claude.json`:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
"devonthink": {
|
|
76
|
+
"type": "stdio",
|
|
77
|
+
"command": "npx",
|
|
78
|
+
"args": ["-y", "@tekmidian/devonthink-mcp", "serve"],
|
|
79
|
+
"env": {}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Or if you have it installed locally:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
"devonthink": {
|
|
87
|
+
"type": "stdio",
|
|
88
|
+
"command": "node",
|
|
89
|
+
"args": ["/path/to/devonthink-mcp/dist/index.js", "serve"],
|
|
90
|
+
"env": {}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Restart Claude Code after editing `~/.claude.json`.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Usage
|
|
99
|
+
|
|
100
|
+
Once configured, Claude Code has access to all DEVONthink tools automatically. DEVONthink must be running with at least one database open.
|
|
101
|
+
|
|
102
|
+
Example prompts:
|
|
103
|
+
|
|
104
|
+
- "Search my DEVONthink databases for notes about the Q3 budget"
|
|
105
|
+
- "Find the email from John about the contract and show me related documents"
|
|
106
|
+
- "Create a new markdown note in my Inbox with today's meeting notes"
|
|
107
|
+
- "List all documents tagged 'todo' in my Ablegen database"
|
|
108
|
+
- "Read the content of the PDF I imported yesterday"
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## How it works
|
|
113
|
+
|
|
114
|
+
`devonthink-mcp` is a thin wrapper around the excellent [mcp-server-devonthink](https://github.com/dvcrn/mcp-server-devonthink) package by [@dvcrn](https://github.com/dvcrn). It adds:
|
|
115
|
+
|
|
116
|
+
1. **A `setup` command** — interactive wizard that configures Claude Code automatically
|
|
117
|
+
2. **A stable entry point** — `devonthink-mcp serve` resolves and starts the underlying server
|
|
118
|
+
|
|
119
|
+
The underlying server communicates with DEVONthink via AppleScript over the macOS Scripting Bridge.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Troubleshooting
|
|
124
|
+
|
|
125
|
+
**"DEVONthink not found"**
|
|
126
|
+
Make sure DEVONthink 3 is installed in `/Applications` and running.
|
|
127
|
+
|
|
128
|
+
**"No databases found"**
|
|
129
|
+
Open at least one DEVONthink database before using the MCP tools.
|
|
130
|
+
|
|
131
|
+
**Tools not appearing in Claude Code**
|
|
132
|
+
1. Verify `~/.claude.json` has the `devonthink` entry
|
|
133
|
+
2. Restart Claude Code (not just a new session — fully quit and reopen)
|
|
134
|
+
3. Check that DEVONthink is running
|
|
135
|
+
|
|
136
|
+
**AppleScript errors**
|
|
137
|
+
Grant Claude Code (or Terminal) Automation permissions in System Settings > Privacy & Security > Automation.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Credits
|
|
142
|
+
|
|
143
|
+
The DEVONthink MCP implementation is by [dvcrn](https://github.com/dvcrn/mcp-server-devonthink). This package adds the setup tooling and packaging.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## License
|
|
148
|
+
|
|
149
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* index.ts — CLI entry point for devonthink-mcp
|
|
4
|
+
*
|
|
5
|
+
* Usage: devonthink-mcp <command>
|
|
6
|
+
*
|
|
7
|
+
* Commands:
|
|
8
|
+
* serve Start the MCP server (pass-through to mcp-server-devonthink)
|
|
9
|
+
* setup Interactive first-time setup — configures ~/.claude.json
|
|
10
|
+
* version Print the version
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* index.ts — CLI entry point for devonthink-mcp
|
|
4
|
+
*
|
|
5
|
+
* Usage: devonthink-mcp <command>
|
|
6
|
+
*
|
|
7
|
+
* Commands:
|
|
8
|
+
* serve Start the MCP server (pass-through to mcp-server-devonthink)
|
|
9
|
+
* setup Interactive first-time setup — configures ~/.claude.json
|
|
10
|
+
* version Print the version
|
|
11
|
+
*/
|
|
12
|
+
import { runSetup } from "./setup.js";
|
|
13
|
+
import { spawnMcpServer } from "./server.js";
|
|
14
|
+
import { readFileSync } from "node:fs";
|
|
15
|
+
import { join, dirname } from "node:path";
|
|
16
|
+
import { fileURLToPath } from "node:url";
|
|
17
|
+
const command = process.argv[2];
|
|
18
|
+
function getVersion() {
|
|
19
|
+
try {
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const distDir = dirname(__filename);
|
|
22
|
+
const pkgPath = join(distDir, "..", "package.json");
|
|
23
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
24
|
+
return pkg.version ?? "unknown";
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return "unknown";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function main() {
|
|
31
|
+
switch (command) {
|
|
32
|
+
case "serve":
|
|
33
|
+
case undefined: {
|
|
34
|
+
// Default: start the MCP server (this is what Claude Code invokes)
|
|
35
|
+
await spawnMcpServer();
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
case "setup": {
|
|
39
|
+
await runSetup();
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
case "version":
|
|
43
|
+
case "--version":
|
|
44
|
+
case "-v": {
|
|
45
|
+
process.stdout.write(`devonthink-mcp v${getVersion()}\n`);
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
default: {
|
|
49
|
+
process.stderr.write([
|
|
50
|
+
"Usage: devonthink-mcp <command>",
|
|
51
|
+
"",
|
|
52
|
+
"Commands:",
|
|
53
|
+
" serve Start the MCP server (default if no command given)",
|
|
54
|
+
" setup Interactive first-time setup — configures ~/.claude.json",
|
|
55
|
+
" version Print the version",
|
|
56
|
+
"",
|
|
57
|
+
].join("\n"));
|
|
58
|
+
process.exit(command ? 1 : 0);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
main().catch((err) => {
|
|
63
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
64
|
+
process.stderr.write(`[devonthink-mcp] Fatal error: ${msg}\n`);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAEpD,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,mEAAmE;YACnE,MAAM,cAAc,EAAE,CAAC;YACvB,MAAM;QACR,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,QAAQ,EAAE,CAAC;YACjB,MAAM;QACR,CAAC;QAED,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,EAAE,IAAI,CAAC,CAAC;YAC1D,MAAM;QACR,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;gBACE,iCAAiC;gBACjC,EAAE;gBACF,WAAW;gBACX,+DAA+D;gBAC/D,qEAAqE;gBACrE,8BAA8B;gBAC9B,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* server.ts — Thin pass-through to mcp-server-devonthink
|
|
3
|
+
*
|
|
4
|
+
* Spawns the underlying mcp-server-devonthink process and pipes stdio.
|
|
5
|
+
* This lets devonthink-mcp act as the MCP entry point while delegating
|
|
6
|
+
* all actual DEVONthink communication to the established package.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Start the MCP server by spawning mcp-server-devonthink with inherited stdio.
|
|
10
|
+
* Claude Code communicates with the child process directly via stdin/stdout.
|
|
11
|
+
*/
|
|
12
|
+
export declare function spawnMcpServer(): Promise<void>;
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* server.ts — Thin pass-through to mcp-server-devonthink
|
|
3
|
+
*
|
|
4
|
+
* Spawns the underlying mcp-server-devonthink process and pipes stdio.
|
|
5
|
+
* This lets devonthink-mcp act as the MCP entry point while delegating
|
|
6
|
+
* all actual DEVONthink communication to the established package.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from "node:child_process";
|
|
9
|
+
import { createRequire } from "node:module";
|
|
10
|
+
import { join, dirname } from "node:path";
|
|
11
|
+
import { existsSync } from "node:fs";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
/**
|
|
14
|
+
* Resolve the path to mcp-server-devonthink's dist/index.js.
|
|
15
|
+
* Tries the local node_modules first (when installed as dependency),
|
|
16
|
+
* then falls back to the globally installed package via npx resolution.
|
|
17
|
+
*/
|
|
18
|
+
function resolveMcpServerPath() {
|
|
19
|
+
// Strategy 1: resolve from local node_modules (preferred — deterministic)
|
|
20
|
+
try {
|
|
21
|
+
const require = createRequire(import.meta.url);
|
|
22
|
+
// Resolve the package main entry point
|
|
23
|
+
const resolved = require.resolve("mcp-server-devonthink");
|
|
24
|
+
if (resolved && existsSync(resolved)) {
|
|
25
|
+
return resolved;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// not installed locally
|
|
30
|
+
}
|
|
31
|
+
// Strategy 2: look relative to this file (npx usage — package installed in npx cache)
|
|
32
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
33
|
+
const distDir = dirname(__filename);
|
|
34
|
+
const candidates = [
|
|
35
|
+
join(distDir, "..", "node_modules", "mcp-server-devonthink", "dist", "index.js"),
|
|
36
|
+
join(distDir, "..", "..", "mcp-server-devonthink", "dist", "index.js"),
|
|
37
|
+
];
|
|
38
|
+
for (const candidate of candidates) {
|
|
39
|
+
if (existsSync(candidate)) {
|
|
40
|
+
return candidate;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Start the MCP server by spawning mcp-server-devonthink with inherited stdio.
|
|
47
|
+
* Claude Code communicates with the child process directly via stdin/stdout.
|
|
48
|
+
*/
|
|
49
|
+
export async function spawnMcpServer() {
|
|
50
|
+
const serverPath = resolveMcpServerPath();
|
|
51
|
+
if (serverPath) {
|
|
52
|
+
// Spawn via Node.js directly (fastest, no PATH lookup needed)
|
|
53
|
+
const child = spawn(process.execPath, [serverPath], {
|
|
54
|
+
stdio: "inherit",
|
|
55
|
+
env: process.env,
|
|
56
|
+
});
|
|
57
|
+
await new Promise((resolve, reject) => {
|
|
58
|
+
child.on("exit", (code) => {
|
|
59
|
+
if (code === 0 || code === null) {
|
|
60
|
+
resolve();
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
reject(new Error(`mcp-server-devonthink exited with code ${code}`));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
child.on("error", reject);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Fallback: run via npx (works without local install)
|
|
71
|
+
process.stderr.write("[devonthink-mcp] mcp-server-devonthink not found locally — falling back to npx\n");
|
|
72
|
+
const child = spawn("npx", ["-y", "mcp-server-devonthink"], {
|
|
73
|
+
stdio: "inherit",
|
|
74
|
+
env: process.env,
|
|
75
|
+
});
|
|
76
|
+
await new Promise((resolve, reject) => {
|
|
77
|
+
child.on("exit", (code) => {
|
|
78
|
+
if (code === 0 || code === null) {
|
|
79
|
+
resolve();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
reject(new Error(`mcp-server-devonthink (npx) exited with code ${code}`));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
child.on("error", reject);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setup.ts — Interactive first-time setup for devonthink-mcp
|
|
3
|
+
*
|
|
4
|
+
* Run with: npx @tekmidian/devonthink-mcp setup
|
|
5
|
+
*
|
|
6
|
+
* Walks the user through:
|
|
7
|
+
* 1. Prerequisites check (macOS, Node version, DEVONthink installed)
|
|
8
|
+
* 2. Update ~/.claude.json mcpServers
|
|
9
|
+
* 3. Update ~/.claude/settings.json enabledMcpjsonServers (if present)
|
|
10
|
+
* 4. Done summary with next steps
|
|
11
|
+
*/
|
|
12
|
+
export declare function runSetup(): Promise<void>;
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setup.ts — Interactive first-time setup for devonthink-mcp
|
|
3
|
+
*
|
|
4
|
+
* Run with: npx @tekmidian/devonthink-mcp setup
|
|
5
|
+
*
|
|
6
|
+
* Walks the user through:
|
|
7
|
+
* 1. Prerequisites check (macOS, Node version, DEVONthink installed)
|
|
8
|
+
* 2. Update ~/.claude.json mcpServers
|
|
9
|
+
* 3. Update ~/.claude/settings.json enabledMcpjsonServers (if present)
|
|
10
|
+
* 4. Done summary with next steps
|
|
11
|
+
*/
|
|
12
|
+
import { createInterface } from "node:readline";
|
|
13
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
14
|
+
import { homedir, platform } from "node:os";
|
|
15
|
+
import { join, dirname } from "node:path";
|
|
16
|
+
import { fileURLToPath } from "node:url";
|
|
17
|
+
import { execSync } from "node:child_process";
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// ANSI color helpers (no external deps)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
const RESET = "\x1b[0m";
|
|
22
|
+
const BOLD = "\x1b[1m";
|
|
23
|
+
const GREEN = "\x1b[32m";
|
|
24
|
+
const RED = "\x1b[31m";
|
|
25
|
+
const YELLOW = "\x1b[33m";
|
|
26
|
+
const CYAN = "\x1b[36m";
|
|
27
|
+
const DIM = "\x1b[2m";
|
|
28
|
+
function bold(s) {
|
|
29
|
+
return `${BOLD}${s}${RESET}`;
|
|
30
|
+
}
|
|
31
|
+
function green(s) {
|
|
32
|
+
return `${GREEN}${s}${RESET}`;
|
|
33
|
+
}
|
|
34
|
+
function red(s) {
|
|
35
|
+
return `${RED}${s}${RESET}`;
|
|
36
|
+
}
|
|
37
|
+
function yellow(s) {
|
|
38
|
+
return `${YELLOW}${s}${RESET}`;
|
|
39
|
+
}
|
|
40
|
+
function cyan(s) {
|
|
41
|
+
return `${CYAN}${s}${RESET}`;
|
|
42
|
+
}
|
|
43
|
+
function dim(s) {
|
|
44
|
+
return `${DIM}${s}${RESET}`;
|
|
45
|
+
}
|
|
46
|
+
function ok(msg) {
|
|
47
|
+
process.stdout.write(` ${green("✓")} ${msg}\n`);
|
|
48
|
+
}
|
|
49
|
+
function fail(msg) {
|
|
50
|
+
process.stdout.write(` ${red("✗")} ${msg}\n`);
|
|
51
|
+
}
|
|
52
|
+
function warn(msg) {
|
|
53
|
+
process.stdout.write(` ${yellow("!")} ${msg}\n`);
|
|
54
|
+
}
|
|
55
|
+
function info(msg) {
|
|
56
|
+
process.stdout.write(` ${dim("·")} ${msg}\n`);
|
|
57
|
+
}
|
|
58
|
+
function header(title) {
|
|
59
|
+
process.stdout.write(`\n${bold(title)}\n`);
|
|
60
|
+
process.stdout.write("─".repeat(title.length) + "\n");
|
|
61
|
+
}
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Readline helpers
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
let rl = null;
|
|
66
|
+
function getReadline() {
|
|
67
|
+
if (!rl) {
|
|
68
|
+
rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
69
|
+
rl.on("close", () => { });
|
|
70
|
+
}
|
|
71
|
+
return rl;
|
|
72
|
+
}
|
|
73
|
+
function closeReadline() {
|
|
74
|
+
if (rl) {
|
|
75
|
+
rl.close();
|
|
76
|
+
rl = null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function prompt(question) {
|
|
80
|
+
return new Promise((resolve) => {
|
|
81
|
+
getReadline().question(question, (answer) => resolve(answer.trim()));
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
async function promptYesNo(question, defaultYes = true) {
|
|
85
|
+
const hint = defaultYes ? "[Y/n]" : "[y/N]";
|
|
86
|
+
const answer = await prompt(` ${question} ${dim(hint)}: `);
|
|
87
|
+
if (answer === "")
|
|
88
|
+
return defaultYes;
|
|
89
|
+
return answer.toLowerCase().startsWith("y");
|
|
90
|
+
}
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// Resolve the path to this package's dist/index.js
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
function getIndexJsPath() {
|
|
95
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
96
|
+
const distDir = dirname(__filename);
|
|
97
|
+
return join(distDir, "index.js");
|
|
98
|
+
}
|
|
99
|
+
function checkDevonThinkInstalled() {
|
|
100
|
+
const candidates = [
|
|
101
|
+
"/Applications/DEVONthink 3.app",
|
|
102
|
+
"/Applications/DEVONthink Pro.app",
|
|
103
|
+
"/Applications/DEVONthink Personal.app",
|
|
104
|
+
"/Applications/DEVONthink.app",
|
|
105
|
+
];
|
|
106
|
+
for (const candidate of candidates) {
|
|
107
|
+
if (existsSync(candidate)) {
|
|
108
|
+
return { installed: true, path: candidate };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Try mdfind as a fallback
|
|
112
|
+
try {
|
|
113
|
+
const result = execSync('mdfind "kMDItemCFBundleIdentifier == \'com.devon-technologies.think3\'" 2>/dev/null', { encoding: "utf-8", timeout: 5000 }).trim();
|
|
114
|
+
if (result) {
|
|
115
|
+
const firstPath = result.split("\n")[0];
|
|
116
|
+
return { installed: true, path: firstPath ?? null };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// mdfind failed or not available
|
|
121
|
+
}
|
|
122
|
+
return { installed: false, path: null };
|
|
123
|
+
}
|
|
124
|
+
async function stepPrerequisites() {
|
|
125
|
+
header("Step 1: Prerequisites");
|
|
126
|
+
const isMacOS = platform() === "darwin";
|
|
127
|
+
const nodeVersion = process.version;
|
|
128
|
+
if (isMacOS) {
|
|
129
|
+
ok("macOS detected");
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
fail(`Platform: ${platform()} — DEVONthink is macOS-only`);
|
|
133
|
+
warn("devonthink-mcp requires macOS with DEVONthink 3 installed.");
|
|
134
|
+
warn("This setup cannot continue on non-macOS platforms.");
|
|
135
|
+
throw new Error("devonthink-mcp requires macOS.");
|
|
136
|
+
}
|
|
137
|
+
const nodeOk = nodeVersion.startsWith("v") && parseInt(nodeVersion.slice(1)) >= 18;
|
|
138
|
+
if (nodeOk) {
|
|
139
|
+
ok(`Node ${nodeVersion} — supported`);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
warn(`Node ${nodeVersion} may be too old. Node 18+ recommended.`);
|
|
143
|
+
}
|
|
144
|
+
const { installed, path: devonthinkPath } = checkDevonThinkInstalled();
|
|
145
|
+
if (installed) {
|
|
146
|
+
ok(`DEVONthink found: ${cyan(devonthinkPath ?? "yes")}`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
fail("DEVONthink 3 not found in /Applications");
|
|
150
|
+
warn("Install DEVONthink from https://www.devontechnologies.com/apps/devonthink");
|
|
151
|
+
warn("Note: The MCP server still works if DEVONthink is installed elsewhere.");
|
|
152
|
+
}
|
|
153
|
+
return { isMacOS, nodeVersion, devonthinkInstalled: installed, devonthinkPath };
|
|
154
|
+
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// Step 2: Update ~/.claude.json
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
async function stepUpdateClaudeJson(indexJsPath) {
|
|
159
|
+
header("Step 2: Configure Claude Code (/.claude.json)");
|
|
160
|
+
const claudeJsonPath = join(homedir(), ".claude.json");
|
|
161
|
+
if (!existsSync(claudeJsonPath)) {
|
|
162
|
+
warn("~/.claude.json not found.");
|
|
163
|
+
warn("This file is created the first time you run Claude Code. Run Claude Code once, then re-run setup.");
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
let parsed;
|
|
167
|
+
try {
|
|
168
|
+
const raw = readFileSync(claudeJsonPath, "utf-8");
|
|
169
|
+
parsed = JSON.parse(raw);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
warn(`Could not parse ~/.claude.json: ${err}`);
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
const mcpServers = parsed["mcpServers"] ?? {};
|
|
176
|
+
// Check if already configured
|
|
177
|
+
const existingEntry = mcpServers["devonthink"];
|
|
178
|
+
if (existingEntry) {
|
|
179
|
+
const currentArgs = existingEntry["args"] ?? [];
|
|
180
|
+
const currentCmd = existingEntry["command"] ?? "";
|
|
181
|
+
info(`Existing entry: ${cyan([currentCmd, ...currentArgs].join(" "))}`);
|
|
182
|
+
info(`Proposed entry: ${cyan(`node ${indexJsPath} serve`)}`);
|
|
183
|
+
process.stdout.write("\n");
|
|
184
|
+
const doUpdate = await promptYesNo("Update the existing devonthink entry to use this installation?", true);
|
|
185
|
+
if (!doUpdate) {
|
|
186
|
+
warn("Skipping ~/.claude.json update");
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
info(`Will add: ${cyan(`devonthink`)}`);
|
|
192
|
+
info(`Command: ${cyan(`node ${indexJsPath} serve`)}`);
|
|
193
|
+
process.stdout.write("\n");
|
|
194
|
+
const doAdd = await promptYesNo('Add "devonthink" MCP server to ~/.claude.json?', true);
|
|
195
|
+
if (!doAdd) {
|
|
196
|
+
warn("Skipping ~/.claude.json update");
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Update the mcpServers entry
|
|
201
|
+
const updatedServers = { ...mcpServers };
|
|
202
|
+
updatedServers["devonthink"] = {
|
|
203
|
+
type: "stdio",
|
|
204
|
+
command: "node",
|
|
205
|
+
args: [indexJsPath, "serve"],
|
|
206
|
+
env: {},
|
|
207
|
+
};
|
|
208
|
+
parsed["mcpServers"] = updatedServers;
|
|
209
|
+
try {
|
|
210
|
+
writeFileSync(claudeJsonPath, JSON.stringify(parsed, null, 2) + "\n", "utf-8");
|
|
211
|
+
ok(`Updated ~/.claude.json — "devonthink" MCP server configured`);
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
throw new Error(`Failed to write ~/.claude.json: ${err}`);
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
// Step 3: Update ~/.claude/settings.json (enabledMcpjsonServers)
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
async function stepUpdateSettings() {
|
|
222
|
+
header("Step 3: Enable in Claude Code Settings");
|
|
223
|
+
const settingsPath = join(homedir(), ".claude", "settings.json");
|
|
224
|
+
if (!existsSync(settingsPath)) {
|
|
225
|
+
info("~/.claude/settings.json not found — skipping");
|
|
226
|
+
info("(This file is optional; Claude Code creates it when needed)");
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
let parsed;
|
|
230
|
+
try {
|
|
231
|
+
const raw = readFileSync(settingsPath, "utf-8");
|
|
232
|
+
parsed = JSON.parse(raw);
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
warn(`Could not parse ~/.claude/settings.json: ${err}`);
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
const enabled = parsed["enabledMcpjsonServers"] ?? [];
|
|
239
|
+
if (enabled.includes("devonthink")) {
|
|
240
|
+
ok('"devonthink" is already in enabledMcpjsonServers');
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
const disabled = parsed["disabledMcpjsonServers"] ?? [];
|
|
244
|
+
const doEnable = await promptYesNo('Add "devonthink" to enabledMcpjsonServers in ~/.claude/settings.json?', true);
|
|
245
|
+
if (!doEnable) {
|
|
246
|
+
warn("Skipping settings.json update");
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
parsed["enabledMcpjsonServers"] = [...enabled, "devonthink"];
|
|
250
|
+
// Remove from disabled list if present
|
|
251
|
+
if (disabled.includes("devonthink")) {
|
|
252
|
+
parsed["disabledMcpjsonServers"] = disabled.filter((s) => s !== "devonthink");
|
|
253
|
+
info('Removed "devonthink" from disabledMcpjsonServers');
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
writeFileSync(settingsPath, JSON.stringify(parsed, null, 2) + "\n", "utf-8");
|
|
257
|
+
ok('Added "devonthink" to enabledMcpjsonServers in ~/.claude/settings.json');
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
throw new Error(`Failed to write ~/.claude/settings.json: ${err}`);
|
|
261
|
+
}
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
// Step 4: Done summary
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
function stepDone(opts) {
|
|
268
|
+
header("Setup Complete!");
|
|
269
|
+
const { claudeJsonUpdated, settingsUpdated, indexJsPath } = opts;
|
|
270
|
+
process.stdout.write("\n");
|
|
271
|
+
if (claudeJsonUpdated || settingsUpdated) {
|
|
272
|
+
ok('DEVONthink MCP server is now configured for Claude Code');
|
|
273
|
+
warn("Restart Claude Code to load the new MCP server.");
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
info("Configuration was not updated. You can run setup again or configure manually.");
|
|
277
|
+
process.stdout.write("\n");
|
|
278
|
+
process.stdout.write(bold(" Manual configuration:\n"));
|
|
279
|
+
process.stdout.write(" Add this to the mcpServers section of ~/.claude.json:\n\n");
|
|
280
|
+
process.stdout.write(` "devonthink": {\n "type": "stdio",\n "command": "node",\n "args": ["${indexJsPath}", "serve"],\n "env": {}\n }\n`);
|
|
281
|
+
}
|
|
282
|
+
process.stdout.write("\n");
|
|
283
|
+
process.stdout.write(bold(" What this MCP server provides:\n"));
|
|
284
|
+
process.stdout.write(" · Search and browse DEVONthink databases\n");
|
|
285
|
+
process.stdout.write(" · Read document content\n");
|
|
286
|
+
process.stdout.write(" · Create, update, and organize records\n");
|
|
287
|
+
process.stdout.write(" · Add tags, classify, and manage metadata\n");
|
|
288
|
+
process.stdout.write(" · Cross-reference emails and documents\n");
|
|
289
|
+
process.stdout.write("\n");
|
|
290
|
+
process.stdout.write(bold(" Requires:\n"));
|
|
291
|
+
process.stdout.write(" · DEVONthink 3 running on macOS\n");
|
|
292
|
+
process.stdout.write(" · One or more open databases\n");
|
|
293
|
+
process.stdout.write("\n");
|
|
294
|
+
}
|
|
295
|
+
// ---------------------------------------------------------------------------
|
|
296
|
+
// Main entry point
|
|
297
|
+
// ---------------------------------------------------------------------------
|
|
298
|
+
export async function runSetup() {
|
|
299
|
+
process.stdout.write("\n");
|
|
300
|
+
process.stdout.write(bold("devonthink-mcp setup") + "\n");
|
|
301
|
+
process.stdout.write("====================\n");
|
|
302
|
+
process.stdout.write(dim("Configure devonthink-mcp for Claude Code. Press Ctrl+C to abort.\n"));
|
|
303
|
+
const indexJsPath = getIndexJsPath();
|
|
304
|
+
try {
|
|
305
|
+
// Step 1: Prerequisites
|
|
306
|
+
await stepPrerequisites();
|
|
307
|
+
// Step 2: Update ~/.claude.json
|
|
308
|
+
const claudeJsonUpdated = await stepUpdateClaudeJson(indexJsPath);
|
|
309
|
+
// Step 3: Update ~/.claude/settings.json
|
|
310
|
+
const settingsUpdated = await stepUpdateSettings();
|
|
311
|
+
// Step 4: Done
|
|
312
|
+
stepDone({ claudeJsonUpdated, settingsUpdated, indexJsPath });
|
|
313
|
+
}
|
|
314
|
+
catch (err) {
|
|
315
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
316
|
+
process.stdout.write(`\n${red("Setup failed:")} ${msg}\n`);
|
|
317
|
+
process.exit(1);
|
|
318
|
+
}
|
|
319
|
+
finally {
|
|
320
|
+
closeReadline();
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tekmidian/devonthink-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "DEVONthink MCP server for Claude Code. Zero-config setup with automatic Claude configuration.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"devonthink-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"mcp",
|
|
22
|
+
"devonthink",
|
|
23
|
+
"claude",
|
|
24
|
+
"claude-code",
|
|
25
|
+
"mcp-server",
|
|
26
|
+
"macos",
|
|
27
|
+
"document-management",
|
|
28
|
+
"applescript"
|
|
29
|
+
],
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"author": "Matthias Nott",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/mnott/devonthink-mcp.git"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"mcp-server-devonthink": "^1.7.1"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^22",
|
|
44
|
+
"typescript": "^5.7"
|
|
45
|
+
}
|
|
46
|
+
}
|