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 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.0-111111?style=flat-square" alt="Version 0.2.0">
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.0).** 워크스페이스 연결과 공식 도구 전달은 동작하며, 실제 워크스페이스 두 개를 Claude Code에 연결해 시험했습니다. 계획한 기능 중 아직 없는 것이 여럿 있습니다. [로드맵](#로드맵)과 [알려진 제약](#알려진-제약)을 참고하세요.
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에는 플러그인 스킬이 없으니 도구를 바로 씁니다. 아직 Claude 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 dist/index.js add "개인 메모"
128
- claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-workspace-for-notion/dist/index.js
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 dist/index.js` | MCP 서버를 stdio로 실행합니다. Claude가 실행하는 명령이라 직접 쓸 일은 없습니다. |
138
- | `node dist/index.js list` | 연결된 워크스페이스 목록을 보여줍니다: 이름, 상태, 설명 |
139
- | `node dist/index.js add [설명...]` | 브라우저 로그인으로 워크스페이스를 연결합니다. |
140
- | `node dist/index.js tools <이름>` | 저장된 토큰으로 붙어서 워크스페이스를 확인하고 도구 목록을 보여줍니다. 연결이 아직 살아 있는지 확인할 때 씁니다. |
141
- | `node dist/index.js remove <이름>` | 이 컴퓨터에서 워크스페이스의 토큰과 설정을 지우고 Notion 쪽 토큰도 해제합니다. |
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
- - [ ] npm에 배포하고, Claude Desktop에서 확장 시험하기
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 # dist/로 컴파일하고 plugin/server.mjs로 묶음
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.0-111111?style=flat-square" alt="Version 0.2.0">
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.0).** Connecting workspaces and proxying the official tools work and have been tested with two real workspaces in Claude Code. Several planned pieces are still missing; see [Roadmap](#roadmap) and [Known limitations](#known-limitations).
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`, not tested yet)
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. This path has not been tested in Claude Desktop yet.
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 dist/index.js add "My personal notes"
128
- claude mcp add --scope user multi-workspace -- node /absolute/path/to/multi-workspace-for-notion/dist/index.js
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 dist/index.js` | Runs the MCP server over stdio. Claude runs this; you don't need to. |
138
- | `node dist/index.js list` | Lists connected workspaces: name, status, description. |
139
- | `node dist/index.js add [description...]` | Connects a workspace through the browser. |
140
- | `node dist/index.js tools <name>` | Signs in with the saved tokens, confirms the workspace, and lists its tools. Useful to check a connection still works. |
141
- | `node dist/index.js remove <name>` | Deletes the workspace's tokens and settings from this computer and revokes the tokens on Notion's side. |
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
- - [ ] Publish to npm, and test the extension in Claude Desktop
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 # compiles to dist/ and bundles plugin/server.mjs
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.0",
3
+ "version": "0.2.1",
4
4
  "scripts": {
5
5
  "dev": "tsx src/index.ts",
6
6
  "typecheck": "tsc --noEmit",
7
- "build": "tsc -p tsconfig.build.json && npm run bundle",
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 bundle && git diff --exit-code --stat plugin/server.mjs"
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.0";
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 outcome;
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 openWorkspace(name);
20430
+ const session = await open2(name);
20425
20431
  try {
20426
20432
  const self = await session.getSelf();
20427
20433
  const tools = await session.listTools();