bowmark-mcp 1.0.0 → 1.0.2

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.md CHANGED
@@ -49,9 +49,15 @@ If your host speaks streamable HTTP, skip this bridge and connect directly to
49
49
  - **`?s=n` source code** is registered in `apps/api/src/mcp-sources.ts` +
50
50
  `mcp-registry/sources.json` (npm stdio bridge channel; the PyPI bridge is
51
51
  `?s=p`).
52
- - **The `mcp-name: ai.bowmark/bowmark` line above is load-bearing**: the
53
- official MCP Registry validates npm package ownership by finding that
54
- marker in the package README. Don't remove it.
52
+ - **npm ownership verification needs BOTH markers — the registry checks the
53
+ published package.json, not just the README.** The `mcp-name:
54
+ ai.bowmark/bowmark` line above and the `"mcpName": "ai.bowmark/bowmark"`
55
+ field in `package.json` are both load-bearing; don't remove either. Learned
56
+ the hard way 2026-07-04: `release-mcp.yml`'s registry republish failed for
57
+ five straight api releases (`server returned status 400: ... "NPM package
58
+ 'bowmark-mcp' is missing required 'mcpName' field"`) because only the
59
+ README marker was present — the package.json field is what `mcp-publisher
60
+ publish` actually validates against the live npm package.
55
61
  - **Versioning is manual** (thin bridge, not the api): bump `package.json`
56
62
  when it changes. Not wired into release-please; `private` is deliberately
57
63
  absent so npm publish works — release-please doesn't manage this package.
@@ -64,15 +70,25 @@ injected at the `callRemote`/`buildServer` seams.
64
70
 
65
71
  ## Publishing to npm
66
72
 
67
- **Live since 2026-07-04** (v0.1.0, published by CI + cold-verified via
73
+ **Live since 2026-07-04** (published by CI + cold-verified via
68
74
  `npx -y bowmark-mcp` against prod). To ship a version: **bump `version` in
69
- `package.json` (and the two `version` literals in `src/bridge.ts`)
70
- and merge** — `.github/workflows/publish-bowmark-mcp.yml` compares the
71
- manifest against live npm on every merge touching this folder and publishes
72
- only when the version is new (requires the `NPM_TOKEN_BOWMARK_MCP` Actions
73
- secret; token lives in the 1Password item "npm bowmark-mcp publish token" —
74
- 90-day expiry, so consider switching the workflow to npm Trusted Publishing).
75
- Not release-please; the bump IS the release action.
75
+ `package.json` (and the two `version` literals in `src/bridge.ts`) and
76
+ merge.** The actual publish does NOT run in this monorepo's CI — this repo
77
+ is private, and npm Trusted Publishing (OIDC) validates against
78
+ `package.json`'s `repository.url`, which (correctly) points at the public
79
+ mirror `github.com/bowmark-ai/mcp`, not `Metroxe/bowmark`. So merging here
80
+ only lands the version bump; `release-bowmark-mcp.yml` mirror-syncs it to
81
+ `bowmark-ai/mcp`, and THAT repo's own `.github/workflows/publish.yml`
82
+ (source-controlled at
83
+ [`packages/bowmark-mcp/.github/workflows/publish.yml`](../.github/workflows/publish.yml)
84
+ in this monorepo, mirrored in like any other file) does the real `npm
85
+ publish`. Auth is npm **Trusted Publishing** (OIDC) — no token, configured
86
+ on npmjs.com (package Settings → Trusted Publisher → GitHub Actions, repo
87
+ `bowmark-ai/mcp`, workflow `publish.yml`). Publishing from the public
88
+ mirror also auto-generates provenance attestations, which npm only produces
89
+ for public-repo publishes — impossible from this private monorepo
90
+ regardless of `repository.url`. Not release-please; the bump IS the release
91
+ action.
76
92
 
77
93
  `mcp-registry/server.json` carries the matching npm `packages` entry (landed
78
94
  after the first publish per the mcp-name ordering rule), and the website
package/dist/bridge.js CHANGED
@@ -35,7 +35,7 @@ export function authHeaders(env = process.env) {
35
35
  return key ? { "X-Bowmark-Key": key } : undefined;
36
36
  }
37
37
  async function withRemote(fn) {
38
- const client = new Client({ name: "bowmark-mcp-bridge", version: "1.0.0" });
38
+ const client = new Client({ name: "bowmark-mcp-bridge", version: "1.0.2" });
39
39
  const headers = authHeaders();
40
40
  const transport = new StreamableHTTPClientTransport(new URL(targetUrl()), {
41
41
  requestInit: headers ? { headers } : undefined,
@@ -60,7 +60,7 @@ export async function callRemote(fn, connect = withRemote) {
60
60
  }
61
61
  }
62
62
  export function buildServer(remote = callRemote) {
63
- const server = new Server({ name: "bowmark", version: "1.0.0" }, { capabilities: { tools: {} } });
63
+ const server = new Server({ name: "bowmark", version: "1.0.2" }, { capabilities: { tools: {} } });
64
64
  server.setRequestHandler(ListToolsRequestSchema, async () => {
65
65
  return await remote((c) => c.listTools());
66
66
  });
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "bowmark-mcp",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
+ "mcpName": "ai.bowmark/bowmark",
4
5
  "description": "Bowmark MCP over stdio \u2014 a thin bridge to the hosted Bowmark MCP at https://api.bowmark.ai/mcp",
5
6
  "license": "MIT",
6
7
  "author": "Bowmark AI <christopher@bowmark.ai>",