kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: move MCP package and harden publish workflow

Tin 1bec2494 c93f4d72

+113 -39
+73
.github/workflows/publish-mcp.yml
··· 1 + name: Publish MCP Package 2 + 3 + on: 4 + release: 5 + types: [published] 6 + 7 + permissions: 8 + contents: read 9 + id-token: write 10 + 11 + jobs: 12 + publish: 13 + runs-on: ubuntu-24.04 14 + if: ${{ startsWith(github.event.release.tag_name, 'mcp-v') }} 15 + 16 + steps: 17 + - name: Checkout repository 18 + uses: actions/checkout@v4 19 + 20 + - name: Setup pnpm 21 + uses: pnpm/action-setup@v4 22 + with: 23 + version: 10.32.1 24 + 25 + - name: Setup Node.js 26 + uses: actions/setup-node@v6 27 + with: 28 + node-version: 20.19.0 29 + cache: pnpm 30 + registry-url: https://registry.npmjs.org 31 + 32 + - name: Install dependencies 33 + run: pnpm install --frozen-lockfile 34 + 35 + - name: Run MCP checks 36 + run: | 37 + pnpm --filter @kaneo/mcp test 38 + pnpm --filter @kaneo/mcp build 39 + 40 + - name: Validate MCP release tag 41 + run: | 42 + PACKAGE_VERSION=$(node -p "require('./packages/mcp/package.json').version") 43 + TAG_VERSION="${GITHUB_REF_NAME#mcp-v}" 44 + 45 + if [ "${GITHUB_REF_NAME}" = "${TAG_VERSION}" ]; then 46 + echo "Release tag must start with mcp-v, got ${GITHUB_REF_NAME}" 47 + exit 1 48 + fi 49 + 50 + if [ "${TAG_VERSION}" != "${PACKAGE_VERSION}" ]; then 51 + echo "Release tag version (${TAG_VERSION}) does not match packages/mcp version (${PACKAGE_VERSION})" 52 + exit 1 53 + fi 54 + 55 + - name: Check whether @kaneo/mcp version is already published 56 + id: version_check 57 + run: | 58 + PACKAGE_VERSION=$(node -p "require('./packages/mcp/package.json').version") 59 + 60 + if npm view "@kaneo/mcp@${PACKAGE_VERSION}" version >/dev/null 2>&1; then 61 + echo "already_published=true" >> "$GITHUB_OUTPUT" 62 + echo "@kaneo/mcp@${PACKAGE_VERSION} is already published; skipping publish." 63 + else 64 + echo "already_published=false" >> "$GITHUB_OUTPUT" 65 + fi 66 + 67 + - name: Publish @kaneo/mcp 68 + if: ${{ steps.version_check.outputs.already_published == 'false' }} 69 + run: | 70 + cd packages/mcp 71 + npm publish --access public --provenance 72 + env: 73 + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
apps/mcp/LICENSE packages/mcp/LICENSE
+3 -3
apps/mcp/README.md packages/mcp/README.md
··· 2 2 3 3 `@kaneo/mcp` is a local MCP server for Kaneo. 4 4 5 - It runs over stdio, signs in with Kaneo's device flow, and then calls the Kaneo API with a bearer token. The package lives in `apps/mcp` in this monorepo and exposes the `kaneo-mcp` CLI. 5 + It runs over stdio, signs in with Kaneo's device flow, and then calls the Kaneo API with a bearer token. The package lives in `packages/mcp` in this monorepo and exposes the `kaneo-mcp` CLI. 6 6 7 7 ## Prerequisites 8 8 ··· 69 69 kaneo-mcp install --help 70 70 ``` 71 71 72 - If you are currently inside the local `apps/mcp` package directory, npm may resolve the local workspace package instead of the published one and fail to expose the bin. In that case, either run `npx` from outside `apps/mcp`, or use a local build: 72 + If you are currently inside the local `packages/mcp` package directory, npm may resolve the local workspace package instead of the published one and fail to expose the bin. In that case, either run `npx` from outside `packages/mcp`, or use a local build: 73 73 74 74 ```bash 75 75 node dist/index.js ··· 91 91 Or run it from the package directory: 92 92 93 93 ```bash 94 - pnpm -C apps/mcp run build 94 + pnpm -C packages/mcp run build 95 95 ``` 96 96 97 97 The CLI entry points to `./dist/index.js`. Use `npx @kaneo/mcp` or `kaneo-mcp` after a global install so your IDE config points at the resolved path.
+2 -1
apps/mcp/package.json packages/mcp/package.json
··· 6 6 "homepage": "https://github.com/usekaneo/kaneo/", 7 7 "repository": { 8 8 "type": "git", 9 - "url": "https://github.com/usekaneo/kaneo/" 9 + "url": "https://github.com/usekaneo/kaneo/", 10 + "directory": "packages/mcp" 10 11 }, 11 12 "type": "module", 12 13 "bin": {
apps/mcp/src/auth/auth-service.test.ts packages/mcp/src/auth/auth-service.test.ts
apps/mcp/src/auth/auth-service.ts packages/mcp/src/auth/auth-service.ts
apps/mcp/src/auth/device-flow.test.ts packages/mcp/src/auth/device-flow.test.ts
apps/mcp/src/auth/device-flow.ts packages/mcp/src/auth/device-flow.ts
apps/mcp/src/auth/token-store.ts packages/mcp/src/auth/token-store.ts
apps/mcp/src/cli.ts packages/mcp/src/cli.ts
apps/mcp/src/index.ts packages/mcp/src/index.ts
apps/mcp/src/install/index.ts packages/mcp/src/install/index.ts
apps/mcp/src/install/merge-config.test.ts packages/mcp/src/install/merge-config.test.ts
apps/mcp/src/install/merge-config.ts packages/mcp/src/install/merge-config.ts
apps/mcp/src/install/parse-install-args.test.ts packages/mcp/src/install/parse-install-args.test.ts
apps/mcp/src/install/resolve-entry.ts packages/mcp/src/install/resolve-entry.ts
apps/mcp/src/install/targets.ts packages/mcp/src/install/targets.ts
apps/mcp/src/install/wizard.ts packages/mcp/src/install/wizard.ts
apps/mcp/src/kaneo/client.test.ts packages/mcp/src/kaneo/client.test.ts
apps/mcp/src/kaneo/client.ts packages/mcp/src/kaneo/client.ts
apps/mcp/src/kaneo/task-helpers.test.ts packages/mcp/src/kaneo/task-helpers.test.ts
apps/mcp/src/kaneo/task-helpers.ts packages/mcp/src/kaneo/task-helpers.ts
apps/mcp/src/server.ts packages/mcp/src/server.ts
apps/mcp/src/tools/register.test.ts packages/mcp/src/tools/register.test.ts
apps/mcp/src/tools/register.ts packages/mcp/src/tools/register.ts
apps/mcp/src/utils/mcp-result.ts packages/mcp/src/utils/mcp-result.ts
apps/mcp/src/utils/normalize-base-url.test.ts packages/mcp/src/utils/normalize-base-url.test.ts
apps/mcp/src/utils/normalize-base-url.ts packages/mcp/src/utils/normalize-base-url.ts
+1 -1
apps/mcp/tsconfig.json packages/mcp/tsconfig.json
··· 1 1 { 2 - "extends": "../../packages/typescript-config/base.json", 2 + "extends": "../typescript-config/base.json", 3 3 "compilerOptions": { 4 4 "outDir": "dist", 5 5 "rootDir": "src",
apps/mcp/vitest.config.ts packages/mcp/vitest.config.ts
+34 -34
pnpm-lock.yaml
··· 158 158 specifier: ^4.1.2 159 159 version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(jsdom@29.0.1(@noble/hashes@2.0.1))(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 160 160 161 - apps/mcp: 162 - dependencies: 163 - '@modelcontextprotocol/sdk': 164 - specifier: ^1.26.0 165 - version: 1.26.0(zod@4.3.6) 166 - open: 167 - specifier: ^11.0.0 168 - version: 11.0.0 169 - prompts: 170 - specifier: ^2.4.2 171 - version: 2.4.2 172 - zod: 173 - specifier: ^4.3.6 174 - version: 4.3.6 175 - devDependencies: 176 - '@kaneo/typescript-config': 177 - specifier: workspace:* 178 - version: link:../../packages/typescript-config 179 - '@types/node': 180 - specifier: ^25.3.5 181 - version: 25.5.0 182 - '@types/prompts': 183 - specifier: ^2.4.9 184 - version: 2.4.9 185 - tsx: 186 - specifier: ^4.21.0 187 - version: 4.21.0 188 - typescript: 189 - specifier: ^5.9.3 190 - version: 5.9.3 191 - vitest: 192 - specifier: ^4.1.2 193 - version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(jsdom@29.0.1(@noble/hashes@2.0.1))(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 194 - 195 161 apps/site: 196 162 dependencies: 197 163 '@base-ui/react': ··· 626 592 vite: 627 593 specifier: ^7.3.1 628 594 version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) 595 + vitest: 596 + specifier: ^4.1.2 597 + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(jsdom@29.0.1(@noble/hashes@2.0.1))(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 598 + 599 + packages/mcp: 600 + dependencies: 601 + '@modelcontextprotocol/sdk': 602 + specifier: ^1.26.0 603 + version: 1.26.0(zod@4.3.6) 604 + open: 605 + specifier: ^11.0.0 606 + version: 11.0.0 607 + prompts: 608 + specifier: ^2.4.2 609 + version: 2.4.2 610 + zod: 611 + specifier: ^4.3.6 612 + version: 4.3.6 613 + devDependencies: 614 + '@kaneo/typescript-config': 615 + specifier: workspace:* 616 + version: link:../typescript-config 617 + '@types/node': 618 + specifier: ^25.3.5 619 + version: 25.5.0 620 + '@types/prompts': 621 + specifier: ^2.4.9 622 + version: 2.4.9 623 + tsx: 624 + specifier: ^4.21.0 625 + version: 4.21.0 626 + typescript: 627 + specifier: ^5.9.3 628 + version: 5.9.3 629 629 vitest: 630 630 specifier: ^4.1.2 631 631 version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(jsdom@29.0.1(@noble/hashes@2.0.1))(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))