From 694b05458cf41d6b056d810db54b7239ae70b3de Mon Sep 17 00:00:00 2001 From: Simon KP Date: Wed, 3 Jun 2026 07:59:41 +1000 Subject: [PATCH] refactor: publish npm package as @keeperhub/mcp - Rename the TypeScript package @keeperhub/mcp-client -> @keeperhub/mcp. - Move packages/mcp-client -> packages/mcp; point repository URLs at KeeperHub/mcp; rename the private monorepo root to @keeperhub/mcp-monorepo. - Update the default MCP clientInfo.name and the pnpm --filter targets in ci.yml / release-npm.yml to track the new package name and path. - Python package keeperhub-mcp-client (PyPI) is unchanged. Build, type-check, and the 14 unit tests pass from packages/mcp. --- .github/workflows/ci.yml | 6 +++--- .github/workflows/release-npm.yml | 10 +++++----- README.md | 4 ++-- package.json | 4 ++-- packages/{mcp-client => mcp}/LICENSE | 0 packages/{mcp-client => mcp}/README.md | 8 ++++---- packages/{mcp-client => mcp}/package.json | 8 ++++---- .../{mcp-client => mcp}/src/__tests__/client.test.ts | 0 packages/{mcp-client => mcp}/src/client.ts | 2 +- packages/{mcp-client => mcp}/src/index.ts | 0 packages/{mcp-client => mcp}/src/keys.ts | 0 packages/{mcp-client => mcp}/tsconfig.json | 0 packages/{mcp-client => mcp}/tsup.config.ts | 0 packages/{mcp-client => mcp}/vitest.config.ts | 0 pnpm-lock.yaml | 2 +- python/README.md | 2 +- python/pyproject.toml | 4 ++-- 17 files changed, 25 insertions(+), 25 deletions(-) rename packages/{mcp-client => mcp}/LICENSE (100%) rename packages/{mcp-client => mcp}/README.md (81%) rename packages/{mcp-client => mcp}/package.json (85%) rename packages/{mcp-client => mcp}/src/__tests__/client.test.ts (100%) rename packages/{mcp-client => mcp}/src/client.ts (99%) rename packages/{mcp-client => mcp}/src/index.ts (100%) rename packages/{mcp-client => mcp}/src/keys.ts (100%) rename packages/{mcp-client => mcp}/tsconfig.json (100%) rename packages/{mcp-client => mcp}/tsup.config.ts (100%) rename packages/{mcp-client => mcp}/vitest.config.ts (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d6d714b..f6f2459 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: node-version: 22 cache: pnpm - run: pnpm install --frozen-lockfile - - run: pnpm --filter @keeperhub/mcp-client build - - run: pnpm --filter @keeperhub/mcp-client test - - run: pnpm --filter @keeperhub/mcp-client type-check + - run: pnpm --filter @keeperhub/mcp build + - run: pnpm --filter @keeperhub/mcp test + - run: pnpm --filter @keeperhub/mcp type-check python: runs-on: ubuntu-latest diff --git a/.github/workflows/release-npm.yml b/.github/workflows/release-npm.yml index b7f63da..44e146b 100644 --- a/.github/workflows/release-npm.yml +++ b/.github/workflows/release-npm.yml @@ -1,12 +1,12 @@ name: release-npm -# Publishes @keeperhub/mcp-client (TypeScript) to npm via trusted publishing (OIDC). +# Publishes @keeperhub/mcp (TypeScript) to npm via trusted publishing (OIDC). # Triggered by an npm release tag, e.g. `git tag npm-v0.1.0 && git push origin npm-v0.1.0`. # (Independent of the Python package, which uses py-v* tags / release-pypi.yml.) # # ONE-TIME SETUP (npm cannot trust a package that doesn't exist yet): -# 1. Publish v1 manually once: `cd packages/mcp-client && npm publish`. -# 2. On npmjs.com: package @keeperhub/mcp-client -> Settings -> Trusted Publisher -> +# 1. Publish v1 manually once: `cd packages/mcp && npm publish`. +# 2. On npmjs.com: package @keeperhub/mcp -> Settings -> Trusted Publisher -> # GitHub Actions, org "KeeperHub", repo "mcp-client", workflow file "release-npm.yml". on: @@ -36,7 +36,7 @@ jobs: - name: Ensure npm supports OIDC trusted publishing run: npm install -g npm@latest # OIDC requires npm >= 11.5.1 - run: pnpm install --frozen-lockfile - - run: pnpm --filter @keeperhub/mcp-client build + - run: pnpm --filter @keeperhub/mcp build - name: Publish to npm - working-directory: packages/mcp-client + working-directory: packages/mcp run: npm publish # no token, no --provenance: both handled by trusted publishing diff --git a/README.md b/README.md index 649ee4e..433f44e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# @keeperhub/mcp-client +# @keeperhub/mcp Shared MCP client foundation for connecting agent frameworks to [KeeperHub](https://keeperhub.com). @@ -8,7 +8,7 @@ This repo holds the small, framework-agnostic MCP kernel that framework adapters | Package | Language | Path | Registry | | -- | -- | -- | -- | -| `@keeperhub/mcp-client` | TypeScript | `packages/mcp-client` | npm | +| `@keeperhub/mcp` | TypeScript | `packages/mcp` | npm | | `keeperhub-mcp-client` | Python | `python` | PyPI | Both clients implement the same kernel: diff --git a/package.json b/package.json index 4ec3f09..de8489c 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { - "name": "@keeperhub/mcp-client-monorepo", + "name": "@keeperhub/mcp-monorepo", "version": "0.0.0", "private": true, "description": "KeeperHub MCP client foundation (TypeScript + Python).", "license": "Apache-2.0", "repository": { "type": "git", - "url": "https://github.com/KeeperHub/mcp-client.git" + "url": "https://github.com/KeeperHub/mcp.git" }, "scripts": { "build": "pnpm -r build", diff --git a/packages/mcp-client/LICENSE b/packages/mcp/LICENSE similarity index 100% rename from packages/mcp-client/LICENSE rename to packages/mcp/LICENSE diff --git a/packages/mcp-client/README.md b/packages/mcp/README.md similarity index 81% rename from packages/mcp-client/README.md rename to packages/mcp/README.md index f29649f..559fe3a 100644 --- a/packages/mcp-client/README.md +++ b/packages/mcp/README.md @@ -1,4 +1,4 @@ -# @keeperhub/mcp-client +# @keeperhub/mcp Official TypeScript client for the KeeperHub MCP HTTP endpoint (`https://app.keeperhub.com/mcp`). @@ -13,7 +13,7 @@ Official TypeScript client for the KeeperHub MCP HTTP endpoint (`https://app.kee ## Usage ```ts -import { getClient, resolveApiKey } from "@keeperhub/mcp-client"; +import { getClient, resolveApiKey } from "@keeperhub/mcp"; const apiKey = resolveApiKey({ env: process.env }); if (!apiKey) throw new Error("KH_API_KEY not set"); @@ -29,8 +29,8 @@ const workflows = await client.callTool("list_workflows", {}); ```bash pnpm install -pnpm --filter @keeperhub/mcp-client build -pnpm --filter @keeperhub/mcp-client test +pnpm --filter @keeperhub/mcp build +pnpm --filter @keeperhub/mcp test ``` ## License diff --git a/packages/mcp-client/package.json b/packages/mcp/package.json similarity index 85% rename from packages/mcp-client/package.json rename to packages/mcp/package.json index 53da43f..b47ab4d 100644 --- a/packages/mcp-client/package.json +++ b/packages/mcp/package.json @@ -1,5 +1,5 @@ { - "name": "@keeperhub/mcp-client", + "name": "@keeperhub/mcp", "version": "0.1.0", "description": "Shared MCP client foundation for KeeperHub agent-framework adapters.", "author": "KeeperHub", @@ -30,12 +30,12 @@ }, "repository": { "type": "git", - "url": "https://github.com/KeeperHub/mcp-client.git", - "directory": "packages/mcp-client" + "url": "https://github.com/KeeperHub/mcp.git", + "directory": "packages/mcp" }, "homepage": "https://docs.keeperhub.com", "bugs": { - "url": "https://github.com/KeeperHub/mcp-client/issues" + "url": "https://github.com/KeeperHub/mcp/issues" }, "scripts": { "build": "tsup", diff --git a/packages/mcp-client/src/__tests__/client.test.ts b/packages/mcp/src/__tests__/client.test.ts similarity index 100% rename from packages/mcp-client/src/__tests__/client.test.ts rename to packages/mcp/src/__tests__/client.test.ts diff --git a/packages/mcp-client/src/client.ts b/packages/mcp/src/client.ts similarity index 99% rename from packages/mcp-client/src/client.ts rename to packages/mcp/src/client.ts index e4ee091..5407792 100644 --- a/packages/mcp-client/src/client.ts +++ b/packages/mcp/src/client.ts @@ -59,7 +59,7 @@ export class KeeperHubMcpClient { this.apiKeyKind = classifyApiKey(apiKey); this.baseUrl = options.baseUrl ?? DEFAULT_MCP_URL; this.clientInfo = options.clientInfo ?? { - name: "@keeperhub/mcp-client", + name: "@keeperhub/mcp", version: "0.1.0", }; this.logger = options.logger ?? console; diff --git a/packages/mcp-client/src/index.ts b/packages/mcp/src/index.ts similarity index 100% rename from packages/mcp-client/src/index.ts rename to packages/mcp/src/index.ts diff --git a/packages/mcp-client/src/keys.ts b/packages/mcp/src/keys.ts similarity index 100% rename from packages/mcp-client/src/keys.ts rename to packages/mcp/src/keys.ts diff --git a/packages/mcp-client/tsconfig.json b/packages/mcp/tsconfig.json similarity index 100% rename from packages/mcp-client/tsconfig.json rename to packages/mcp/tsconfig.json diff --git a/packages/mcp-client/tsup.config.ts b/packages/mcp/tsup.config.ts similarity index 100% rename from packages/mcp-client/tsup.config.ts rename to packages/mcp/tsup.config.ts diff --git a/packages/mcp-client/vitest.config.ts b/packages/mcp/vitest.config.ts similarity index 100% rename from packages/mcp-client/vitest.config.ts rename to packages/mcp/vitest.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b7e938..2f5852b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,7 @@ importers: .: {} - packages/mcp-client: + packages/mcp: devDependencies: '@types/node': specifier: 24.1.0 diff --git a/python/README.md b/python/README.md index 3513ea7..1ab9545 100644 --- a/python/README.md +++ b/python/README.md @@ -2,7 +2,7 @@ Python MCP client foundation for connecting agent frameworks (Hermes and others) to [KeeperHub](https://keeperhub.com). -The Python counterpart to [`@keeperhub/mcp-client`](https://www.npmjs.com/package/@keeperhub/mcp-client). Implements the same kernel: MCP session bootstrap + re-init on `401`/`404`, `kh_` vs `wfb_` key disambiguation, and single JSON-result unwrap. +The Python counterpart to [`@keeperhub/mcp`](https://www.npmjs.com/package/@keeperhub/mcp). Implements the same kernel: MCP session bootstrap + re-init on `401`/`404`, `kh_` vs `wfb_` key disambiguation, and single JSON-result unwrap. ## Usage diff --git a/python/pyproject.toml b/python/pyproject.toml index 8e5e6aa..0178345 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -18,8 +18,8 @@ dev = ["pytest>=8", "httpx>=0.27"] [project.urls] Homepage = "https://keeperhub.com" Documentation = "https://docs.keeperhub.com" -Repository = "https://github.com/KeeperHub/mcp-client" -Issues = "https://github.com/KeeperHub/mcp-client/issues" +Repository = "https://github.com/KeeperHub/mcp" +Issues = "https://github.com/KeeperHub/mcp/issues" [tool.hatch.build.targets.wheel] packages = ["keeperhub_mcp_client"]