multi-workspace-for-notion 0.2.0 → 0.2.1
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.ko.md +13 -14
- package/README.md +13 -14
- package/package.json +3 -5
- package/plugin/server.mjs +10 -4
package/README.ko.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<p align="center"><em>Claude Code 하나로 모든 Notion 워크스페이스를. 공식 도구는 그대로.</em></p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<img src="https://img.shields.io/badge/version-0.2.
|
|
6
|
+
<img src="https://img.shields.io/badge/version-0.2.1-111111?style=flat-square" alt="Version 0.2.1">
|
|
7
7
|
<img src="https://img.shields.io/badge/Claude%20Code-plugin-111111?style=flat-square" alt="Claude Code plugin">
|
|
8
8
|
<img src="https://img.shields.io/badge/platform-macOS-111111?style=flat-square" alt="macOS">
|
|
9
9
|
<img src="https://img.shields.io/badge/license-MIT-111111?style=flat-square" alt="MIT license">
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
Claude Code에서 여러 Notion 워크스페이스를 동시에 쓸 수 있게 해 줍니다. 공식 Notion MCP 서버의 도구를 하나도 빠짐없이 그대로 씁니다.
|
|
17
17
|
|
|
18
|
-
> **상태: 개발 초기 (v0.2.
|
|
18
|
+
> **상태: 개발 초기 (v0.2.1).** 워크스페이스 연결과 공식 도구 전달은 동작하며, 실제 워크스페이스를 Claude Code와 Claude Desktop에 연결해 시험했습니다. 계획한 기능 중 아직 없는 것이 여럿 있습니다. [로드맵](#로드맵)과 [알려진 제약](#알려진-제약)을 참고하세요.
|
|
19
19
|
>
|
|
20
20
|
> 비공식 프로젝트입니다. Notion Labs, Inc.와 관계가 없고 Notion의 승인을 받지 않았습니다.
|
|
21
21
|
|
|
@@ -104,7 +104,7 @@ claude.ai Notion 커넥터도 켜져 있으면 Claude에게 Notion 도구가 두
|
|
|
104
104
|
|
|
105
105
|
새 세션을 열 때마다 `Notion: 허 은서의 Notion, 회사`처럼 연결 상태가 한 줄로 표시되고, 확인이 필요한 워크스페이스가 있으면 `workspace-check`를 안내합니다.
|
|
106
106
|
|
|
107
|
-
## Claude Desktop 확장(`.mcpb
|
|
107
|
+
## Claude Desktop 확장(`.mcpb`)
|
|
108
108
|
|
|
109
109
|
[최신 릴리스](https://github.com/heoeunseo08/multi-workspace-for-notion/releases/latest)에서 `multi-workspace-for-notion.mcpb`를 받거나, 직접 빌드합니다.
|
|
110
110
|
|
|
@@ -113,7 +113,7 @@ npm install
|
|
|
113
113
|
npm run pack:mcpb # multi-workspace-for-notion.mcpb 생성
|
|
114
114
|
```
|
|
115
115
|
|
|
116
|
-
이 파일을 Claude Desktop으로 열어 설치한 뒤, Claude에게 워크스페이스를 연결해 달라고 하면 됩니다(`workspace_connect`). Desktop에는 플러그인 스킬이 없으니 도구를 바로 씁니다.
|
|
116
|
+
이 파일을 Claude Desktop으로 열어 설치한 뒤, Claude에게 워크스페이스를 연결해 달라고 하면 됩니다(`workspace_connect`). Desktop에는 플러그인 스킬이 없으니 도구를 바로 씁니다.
|
|
117
117
|
|
|
118
118
|
## 소스에서 설치
|
|
119
119
|
|
|
@@ -124,8 +124,8 @@ git clone https://github.com/heoeunseo08/multi-workspace-for-notion.git
|
|
|
124
124
|
cd multi-workspace-for-notion
|
|
125
125
|
npm install
|
|
126
126
|
npm run build
|
|
127
|
-
node
|
|
128
|
-
claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-workspace-for-notion/
|
|
127
|
+
node plugin/server.mjs add "개인 메모"
|
|
128
|
+
claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-workspace-for-notion/plugin/server.mjs
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
그다음 `claude mcp list`에서 `multi-workspace`가 연결됐는지 확인하세요.
|
|
@@ -134,11 +134,11 @@ claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-work
|
|
|
134
134
|
|
|
135
135
|
| 명령 | 하는 일 |
|
|
136
136
|
| --- | --- |
|
|
137
|
-
| `node
|
|
138
|
-
| `node
|
|
139
|
-
| `node
|
|
140
|
-
| `node
|
|
141
|
-
| `node
|
|
137
|
+
| `node plugin/server.mjs` | MCP 서버를 stdio로 실행합니다. Claude가 실행하는 명령이라 직접 쓸 일은 없습니다. |
|
|
138
|
+
| `node plugin/server.mjs list` | 연결된 워크스페이스 목록을 보여줍니다: 이름, 상태, 설명 |
|
|
139
|
+
| `node plugin/server.mjs add [설명...]` | 브라우저 로그인으로 워크스페이스를 연결합니다. |
|
|
140
|
+
| `node plugin/server.mjs tools <이름>` | 저장된 토큰으로 붙어서 워크스페이스를 확인하고 도구 목록을 보여줍니다. 연결이 아직 살아 있는지 확인할 때 씁니다. |
|
|
141
|
+
| `node plugin/server.mjs remove <이름>` | 이 컴퓨터에서 워크스페이스의 토큰과 설정을 지우고 Notion 쪽 토큰도 해제합니다. |
|
|
142
142
|
|
|
143
143
|
## Claude에게 보이는 도구
|
|
144
144
|
|
|
@@ -172,7 +172,6 @@ claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-work
|
|
|
172
172
|
## 알려진 제약
|
|
173
173
|
|
|
174
174
|
- **claude.ai 웹과 모바일에서는 쓸 수 없습니다.** 웹과 모바일의 커스텀 커넥터는 원격 URL만 받습니다.
|
|
175
|
-
- **Claude Desktop은 아직 시험하지 않았습니다.**
|
|
176
175
|
- **macOS만 지원합니다.** 키체인을 쓰기 때문입니다.
|
|
177
176
|
- **이미 열려 있는 다른 세션은 다시 시작해야 바뀐 워크스페이스를 봅니다.** 연결과 해제는 그 작업을 한 세션에서는 바로 반영되지만, 동시에 떠 있는 다른 세션은 다시 시작할 때까지 예전 목록을 씁니다.
|
|
178
177
|
- **MCP resources와 prompts는 넘겨주지 않습니다.** Notion의 `notion://docs/...` 문서는 `notion-fetch`로 읽을 수 있고, 서버가 Claude에게 그렇게 하라고 안내합니다.
|
|
@@ -199,7 +198,7 @@ claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-work
|
|
|
199
198
|
- [x] 워크스페이스를 지울 때 Notion 쪽 접근 권한도 해제
|
|
200
199
|
- [x] Claude Code 플러그인
|
|
201
200
|
- [x] 패키징: npm 패키지는 의존성 없이 묶은 서버 하나만 담고, `npm run pack:mcpb`로 Claude Desktop 확장을 만든다
|
|
202
|
-
- [
|
|
201
|
+
- [x] npm에 배포하고, Claude Desktop에서 확장 시험하기
|
|
203
202
|
|
|
204
203
|
## 개발
|
|
205
204
|
|
|
@@ -207,7 +206,7 @@ claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-work
|
|
|
207
206
|
npm install
|
|
208
207
|
npm run typecheck
|
|
209
208
|
npm test # 단위 테스트
|
|
210
|
-
npm run build #
|
|
209
|
+
npm run build # src/를 plugin/server.mjs 하나로 묶음
|
|
211
210
|
npm run check:bundle # 커밋한 뒤: 커밋된 묶음 파일이 src/와 다르면 실패
|
|
212
211
|
npm run dev # 소스에서 바로 MCP 서버(stdio) 실행
|
|
213
212
|
npm run dev -- list # 소스에서 바로 CLI 실행
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<p align="center"><em>One Claude Code, every Notion workspace. The official tools, untouched.</em></p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<img src="https://img.shields.io/badge/version-0.2.
|
|
6
|
+
<img src="https://img.shields.io/badge/version-0.2.1-111111?style=flat-square" alt="Version 0.2.1">
|
|
7
7
|
<img src="https://img.shields.io/badge/Claude%20Code-plugin-111111?style=flat-square" alt="Claude Code plugin">
|
|
8
8
|
<img src="https://img.shields.io/badge/platform-macOS-111111?style=flat-square" alt="macOS">
|
|
9
9
|
<img src="https://img.shields.io/badge/license-MIT-111111?style=flat-square" alt="MIT license">
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
Use several Notion workspaces at the same time from Claude Code, with every tool the official Notion MCP server offers.
|
|
17
17
|
|
|
18
|
-
> **Status: early development (v0.2.
|
|
18
|
+
> **Status: early development (v0.2.1).** Connecting workspaces and proxying the official tools work and have been tested with real workspaces in Claude Code and Claude Desktop. Several planned pieces are still missing; see [Roadmap](#roadmap) and [Known limitations](#known-limitations).
|
|
19
19
|
>
|
|
20
20
|
> This is an unofficial project. It is not affiliated with or endorsed by Notion Labs, Inc.
|
|
21
21
|
|
|
@@ -104,7 +104,7 @@ Then ask in plain language, for example "Search for 'roadmap' in both my work an
|
|
|
104
104
|
|
|
105
105
|
Each new session also starts with a one-line status, such as `Notion: My Notion, Acme`, and points you to `workspace-check` when a workspace needs attention.
|
|
106
106
|
|
|
107
|
-
## Claude Desktop extension (`.mcpb
|
|
107
|
+
## Claude Desktop extension (`.mcpb`)
|
|
108
108
|
|
|
109
109
|
Download `multi-workspace-for-notion.mcpb` from the [latest release](https://github.com/heoeunseo08/multi-workspace-for-notion/releases/latest), or build it yourself:
|
|
110
110
|
|
|
@@ -113,7 +113,7 @@ npm install
|
|
|
113
113
|
npm run pack:mcpb # writes multi-workspace-for-notion.mcpb
|
|
114
114
|
```
|
|
115
115
|
|
|
116
|
-
Open the file with Claude Desktop to install it, then ask Claude to connect a workspace (`workspace_connect`). Desktop has no plugin skills, so use the tools directly.
|
|
116
|
+
Open the file with Claude Desktop to install it, then ask Claude to connect a workspace (`workspace_connect`). Desktop has no plugin skills, so use the tools directly.
|
|
117
117
|
|
|
118
118
|
## Install from source
|
|
119
119
|
|
|
@@ -124,8 +124,8 @@ git clone https://github.com/heoeunseo08/multi-workspace-for-notion.git
|
|
|
124
124
|
cd multi-workspace-for-notion
|
|
125
125
|
npm install
|
|
126
126
|
npm run build
|
|
127
|
-
node
|
|
128
|
-
claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-workspace-for-notion/
|
|
127
|
+
node plugin/server.mjs add "My personal notes"
|
|
128
|
+
claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-workspace-for-notion/plugin/server.mjs
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
Then check that `multi-workspace` shows as connected in `claude mcp list`.
|
|
@@ -134,11 +134,11 @@ Then check that `multi-workspace` shows as connected in `claude mcp list`.
|
|
|
134
134
|
|
|
135
135
|
| Command | What it does |
|
|
136
136
|
| --- | --- |
|
|
137
|
-
| `node
|
|
138
|
-
| `node
|
|
139
|
-
| `node
|
|
140
|
-
| `node
|
|
141
|
-
| `node
|
|
137
|
+
| `node plugin/server.mjs` | Runs the MCP server over stdio. Claude runs this; you don't need to. |
|
|
138
|
+
| `node plugin/server.mjs list` | Lists connected workspaces: name, status, description. |
|
|
139
|
+
| `node plugin/server.mjs add [description...]` | Connects a workspace through the browser. |
|
|
140
|
+
| `node plugin/server.mjs tools <name>` | Signs in with the saved tokens, confirms the workspace, and lists its tools. Useful to check a connection still works. |
|
|
141
|
+
| `node plugin/server.mjs remove <name>` | Deletes the workspace's tokens and settings from this computer and revokes the tokens on Notion's side. |
|
|
142
142
|
|
|
143
143
|
CLI messages are currently in Korean.
|
|
144
144
|
|
|
@@ -174,7 +174,6 @@ Set `MWN_CONFIG_DIR` to use a different directory; point it at a private, owner-
|
|
|
174
174
|
## Known limitations
|
|
175
175
|
|
|
176
176
|
- **claude.ai web and mobile are not supported.** Their custom connectors accept only remote URLs.
|
|
177
|
-
- **Claude Desktop is not tested yet.**
|
|
178
177
|
- **macOS only**, because of the Keychain.
|
|
179
178
|
- **Other open sessions see workspace changes after a restart.** A connect or disconnect takes effect at once in the session that made it; other running sessions keep their old list until they restart.
|
|
180
179
|
- **MCP resources and prompts are not proxied.** Notion's `notion://docs/...` documents can still be read with `notion-fetch`; the server tells Claude to do so.
|
|
@@ -201,7 +200,7 @@ Set `MWN_CONFIG_DIR` to use a different directory; point it at a private, owner-
|
|
|
201
200
|
- [x] Revoke access on Notion's side when removing a workspace
|
|
202
201
|
- [x] Claude Code plugin
|
|
203
202
|
- [x] Packaging: the npm package ships only the bundled server, with no dependencies; `npm run pack:mcpb` builds a Claude Desktop extension
|
|
204
|
-
- [
|
|
203
|
+
- [x] Publish to npm, and test the extension in Claude Desktop
|
|
205
204
|
|
|
206
205
|
## Development
|
|
207
206
|
|
|
@@ -209,7 +208,7 @@ Set `MWN_CONFIG_DIR` to use a different directory; point it at a private, owner-
|
|
|
209
208
|
npm install
|
|
210
209
|
npm run typecheck
|
|
211
210
|
npm test # unit tests
|
|
212
|
-
npm run build #
|
|
211
|
+
npm run build # bundles src/ into plugin/server.mjs
|
|
213
212
|
npm run check:bundle # after committing: fails if the committed bundle doesn't match src/
|
|
214
213
|
npm run dev # MCP server over stdio, from source
|
|
215
214
|
npm run dev -- list # CLI, from source
|
package/package.json
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "multi-workspace-for-notion",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"dev": "tsx src/index.ts",
|
|
6
6
|
"typecheck": "tsc --noEmit",
|
|
7
|
-
"build": "
|
|
8
|
-
"start": "node dist/index.js",
|
|
7
|
+
"build": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --legal-comments=none --outfile=plugin/server.mjs --banner:js=\"import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);\"",
|
|
9
8
|
"test": "node --import tsx --test 'src/**/*.test.ts'",
|
|
10
|
-
"bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --legal-comments=none --outfile=plugin/server.mjs --banner:js=\"import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);\"",
|
|
11
9
|
"pack:mcpb": "npm run build && npx -y @anthropic-ai/mcpb@2 pack . multi-workspace-for-notion.mcpb",
|
|
12
10
|
"prepublishOnly": "npm run build",
|
|
13
|
-
"check:bundle": "npm run
|
|
11
|
+
"check:bundle": "npm run build && git diff --exit-code --stat plugin/server.mjs"
|
|
14
12
|
},
|
|
15
13
|
"type": "module",
|
|
16
14
|
"devDependencies": {
|
package/plugin/server.mjs
CHANGED
|
@@ -19308,7 +19308,7 @@ var StreamableHTTPClientTransport = class {
|
|
|
19308
19308
|
|
|
19309
19309
|
// src/meta.ts
|
|
19310
19310
|
var SERVER_NAME = "multi-workspace-for-notion";
|
|
19311
|
-
var SERVER_VERSION = "0.2.
|
|
19311
|
+
var SERVER_VERSION = "0.2.1";
|
|
19312
19312
|
|
|
19313
19313
|
// src/notion.ts
|
|
19314
19314
|
var NOTION_MCP_URL = new URL("https://mcp.notion.com/mcp");
|
|
@@ -20349,7 +20349,13 @@ async function connectInBackground(description, onChanged, connect = connectWork
|
|
|
20349
20349
|
if (pendingConnect?.outcome) {
|
|
20350
20350
|
const { outcome } = pendingConnect;
|
|
20351
20351
|
pendingConnect = void 0;
|
|
20352
|
-
return
|
|
20352
|
+
return {
|
|
20353
|
+
...outcome,
|
|
20354
|
+
content: [
|
|
20355
|
+
...outcome.content,
|
|
20356
|
+
{ type: "text", text: "\uC774 \uACB0\uACFC\uB294 \uC55E\uC11C \uC2DC\uC791\uD55C \uC5F0\uACB0\uC758 \uACB0\uACFC\uB2E4. \uB2E4\uB978 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uB97C \uC0C8\uB85C \uC5F0\uACB0\uD558\uB824\uB358 \uAC83\uC774\uBA74 workspace_connect\uB97C \uD55C \uBC88 \uB354 \uD638\uCD9C\uD55C\uB2E4." }
|
|
20357
|
+
]
|
|
20358
|
+
};
|
|
20353
20359
|
}
|
|
20354
20360
|
if (pendingConnect) {
|
|
20355
20361
|
return json({ status: "waiting_for_approval", authorizationUrl: pendingConnect.url, note: "\uC544\uC9C1 \uC2B9\uC778\uC744 \uAE30\uB2E4\uB9AC\uB294 \uC911\uC785\uB2C8\uB2E4." });
|
|
@@ -20416,12 +20422,12 @@ async function callManagementTool(name, args2, onChanged) {
|
|
|
20416
20422
|
return errorResult(error2.message);
|
|
20417
20423
|
}
|
|
20418
20424
|
}
|
|
20419
|
-
async function checkWorkspace(name) {
|
|
20425
|
+
async function checkWorkspace(name, open2 = openWorkspace) {
|
|
20420
20426
|
const entry = await findWorkspace(name);
|
|
20421
20427
|
let status;
|
|
20422
20428
|
let detail;
|
|
20423
20429
|
try {
|
|
20424
|
-
const session = await
|
|
20430
|
+
const session = await open2(name);
|
|
20425
20431
|
try {
|
|
20426
20432
|
const self = await session.getSelf();
|
|
20427
20433
|
const tools = await session.listTools();
|