@agentskit/doc-bridge 1.2.4 → 1.2.6
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/CHANGELOG.md +13 -0
- package/CONTRIBUTING.md +6 -0
- package/PRIVACY.md +38 -0
- package/README.md +21 -0
- package/SECURITY.md +7 -2
- package/action.yml +1 -1
- package/dist/cli/program.js +57 -27
- package/dist/cli/program.js.map +1 -1
- package/dist/index.d.ts +41 -9
- package/dist/index.js +57 -27
- package/dist/index.js.map +1 -1
- package/docs/mcp.md +16 -0
- package/mcpb/.mcpbignore +8 -0
- package/mcpb/icon.png +0 -0
- package/mcpb/manifest.json +96 -0
- package/package.json +11 -10
- package/src/mcp/server.ts +58 -26
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Restore the stable release security gate with patched Next.js and Sharp versions and pnpm 11-compatible dependency overrides.
|
|
8
|
+
|
|
9
|
+
## 1.2.5
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- d2429f4: Add read-only MCP tool annotations, a public privacy policy, and deterministic MCPB packaging for local Claude Desktop installation.
|
|
14
|
+
|
|
3
15
|
## 1.2.4
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -34,6 +46,7 @@
|
|
|
34
46
|
|
|
35
47
|
### Features
|
|
36
48
|
|
|
49
|
+
- Add read-only MCP tool annotations, a public privacy policy, and validated MCPB packaging for local Claude Desktop installation.
|
|
37
50
|
- Migrate the documentation portal dogfood from AgentsKit Chat 0.2 packages (`@agentskit/chat-protocol`, `@agentskit/chat-react`) to the consolidated 0.3.x surface (`@agentskit/chat/protocol`, `@agentskit/chat/react`) while keeping `@agentskit/chat` as the root package.
|
|
38
51
|
- Replace the legacy Pages landing with a statically exported Fumadocs portal backed directly by the canonical `docs/**` corpus.
|
|
39
52
|
- Generate `llms.txt`, `llms-full.txt`, raw Markdown, and a hash-verified deterministic AgentsKit Chat artifact from the repository's own Doc Bridge index.
|
package/CONTRIBUTING.md
CHANGED
|
@@ -19,6 +19,7 @@ pnpm build
|
|
|
19
19
|
- Add or update the smallest test that would fail if the behavior regresses.
|
|
20
20
|
- Public contract changes must update the relevant docs under `docs/spec/` or `docs/schemas/`.
|
|
21
21
|
- Dogfood AgentsKit Chat 0.4.x only: `@agentskit/chat`, `@agentskit/chat/protocol`, and `@agentskit/chat/react`. Never reintroduce `@agentskit/chat-protocol` or `@agentskit/chat-react` (`pnpm check:no-legacy-chat-imports`).
|
|
22
|
+
- Never commit API keys, tokens, secrets, or private repository content.
|
|
22
23
|
|
|
23
24
|
## Pull request checklist
|
|
24
25
|
|
|
@@ -38,3 +39,8 @@ pnpm release
|
|
|
38
39
|
```
|
|
39
40
|
|
|
40
41
|
Do not publish from a dirty worktree.
|
|
42
|
+
|
|
43
|
+
Project decisions and maintainer responsibilities are documented in
|
|
44
|
+
[GOVERNANCE.md](GOVERNANCE.md). By participating, you agree to follow the
|
|
45
|
+
[Code of Conduct](CODE_OF_CONDUCT.md). Report vulnerabilities through the
|
|
46
|
+
private process in [SECURITY.md](SECURITY.md).
|
package/PRIVACY.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Privacy Policy
|
|
2
|
+
|
|
3
|
+
Effective date: July 31, 2026
|
|
4
|
+
|
|
5
|
+
This policy covers the local Doc Bridge MCP server distributed by AgentsKit, including its MCP Bundle for Claude Desktop.
|
|
6
|
+
|
|
7
|
+
## Data the connector accesses
|
|
8
|
+
|
|
9
|
+
Doc Bridge accesses only the local project selected by the user through its `doc-bridge.config.json` file. Within that project, its MCP tools may read:
|
|
10
|
+
|
|
11
|
+
- the Doc Bridge configuration and deterministic index;
|
|
12
|
+
- documentation files explicitly included in that index;
|
|
13
|
+
- ownership and package metadata described by the configuration;
|
|
14
|
+
- `.agent-memory/**` and `.cursor/rules/*.mdc` when the user calls a memory-classification or draft-promotion tool.
|
|
15
|
+
|
|
16
|
+
Doc Bridge does not read Claude conversation history, Claude memory, browser data, credentials, or files outside the selected project boundary. Indexed-document reads reject paths and symbolic links that resolve outside that boundary.
|
|
17
|
+
|
|
18
|
+
## Collection, use, and storage
|
|
19
|
+
|
|
20
|
+
The local MCP server uses project data only to return the handoff, search, documentation, gate, retrieval, memory-classification, draft, or topology result requested by the user. The eight MCP tools are read-only and do not modify project files or publish data.
|
|
21
|
+
|
|
22
|
+
AgentsKit does not collect or store MCP requests, tool results, project files, or usage telemetry. Source files and any existing Doc Bridge index remain on the user's device and under the user's control.
|
|
23
|
+
|
|
24
|
+
## Sharing and external services
|
|
25
|
+
|
|
26
|
+
The local MCP server does not send project data to AgentsKit or another model provider and requires no API key. Claude Desktop receives tool results as the MCP client selected by the user; Anthropic's handling of data in Claude Desktop is governed by Anthropic's own terms and privacy policy.
|
|
27
|
+
|
|
28
|
+
Optional Doc Bridge RAG and chat integrations are not enabled or bundled by this local connector. If a user separately configures an external adapter or model provider, that provider's privacy terms apply to the data the user chooses to send through that separate integration.
|
|
29
|
+
|
|
30
|
+
## Retention and deletion
|
|
31
|
+
|
|
32
|
+
AgentsKit retains no data from the local MCP server. Users control retention by managing their project files, Doc Bridge index, MCP client history, and installed MCP Bundle. Uninstalling the bundle removes the connector; deleting local project data remains the user's responsibility.
|
|
33
|
+
|
|
34
|
+
## Contact
|
|
35
|
+
|
|
36
|
+
Questions about this policy can be filed at https://github.com/AgentsKit-io/doc-bridge/issues. Security concerns should follow the private reporting process at https://github.com/AgentsKit-io/doc-bridge/security/policy.
|
|
37
|
+
|
|
38
|
+
Material changes to this policy will be published in this repository with an updated effective date.
|
package/README.md
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@agentskit/doc-bridge)
|
|
4
4
|
[](https://github.com/AgentsKit-io/doc-bridge/actions/workflows/ci.yml)
|
|
5
5
|
[](https://doc-bridge.agentskit.io/)
|
|
6
|
+
[](https://www.bestpractices.dev/projects/13872)
|
|
6
7
|
[](LICENSE)
|
|
7
8
|
[](package.json)
|
|
8
9
|
[](dist/index.d.ts)
|
|
@@ -122,6 +123,21 @@ ak-docs mcp install --cursor # wires MCP into .cursor/mcp.json
|
|
|
122
123
|
|
|
123
124
|
See [docs/getting-started.md](docs/getting-started.md), [docs/mcp.md](docs/mcp.md), and [docs/examples.md](docs/examples.md).
|
|
124
125
|
|
|
126
|
+
## Claude Desktop MCP Bundle
|
|
127
|
+
|
|
128
|
+
Doc Bridge can be packaged as a local MCP Bundle for Claude Desktop. The bundle keeps the eight MCP tools read-only and asks the user to select the repository's `doc-bridge.config.json`; that file defines the project boundary Doc Bridge may read.
|
|
129
|
+
|
|
130
|
+
From a clean checkout:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
pnpm install --frozen-lockfile
|
|
134
|
+
pnpm mcpb:pack
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
The command builds Doc Bridge, creates a production-only staging directory, validates the MCPB manifest, packs the extension, checks its file inventory, and writes the local artifact under `.mcpb-output/`. Generated bundles and staging directories are intentionally excluded from Git.
|
|
138
|
+
|
|
139
|
+
Current packaged compatibility is macOS. Other operating systems will be declared only after the exact bundle passes an independent installation test there.
|
|
140
|
+
|
|
125
141
|
## Why this exists
|
|
126
142
|
|
|
127
143
|
| Pattern | Gap |
|
|
@@ -299,6 +315,10 @@ pnpm smoke:ollama # optional — skips if Ollama/peers unavailable
|
|
|
299
315
|
|
|
300
316
|
**Landing:** https://doc-bridge.agentskit.io/
|
|
301
317
|
|
|
318
|
+
## Privacy Policy
|
|
319
|
+
|
|
320
|
+
The local MCP server reads only the project selected through `doc-bridge.config.json`. It does not require an API key, send project data to AgentsKit, collect telemetry, or write project files through its eight MCP tools. See the complete [Privacy Policy](PRIVACY.md) for accessed paths, use, storage, sharing, retention, optional integrations, and contact information.
|
|
321
|
+
|
|
302
322
|
## Contributing
|
|
303
323
|
|
|
304
324
|
Issues and PRs are welcome. Start here:
|
|
@@ -306,6 +326,7 @@ Issues and PRs are welcome. Start here:
|
|
|
306
326
|
| Need | Doc |
|
|
307
327
|
|------|-----|
|
|
308
328
|
| Local setup, tests, release flow | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
329
|
+
| Governance and maintainer responsibilities | [GOVERNANCE.md](GOVERNANCE.md) |
|
|
309
330
|
| Vulnerability reports | [SECURITY.md](SECURITY.md) |
|
|
310
331
|
| Community standards | [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) |
|
|
311
332
|
| Release history | [CHANGELOG.md](CHANGELOG.md) |
|
package/SECURITY.md
CHANGED
|
@@ -8,14 +8,19 @@ Security fixes target the latest stable `@agentskit/doc-bridge` release on npm.
|
|
|
8
8
|
|
|
9
9
|
Please do not open a public issue for security reports.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Use [GitHub private vulnerability reporting](https://github.com/AgentsKit-io/doc-bridge/security/advisories/new) when possible. If that channel is unavailable, email `security@agentskit.io`.
|
|
12
|
+
|
|
13
|
+
Include:
|
|
12
14
|
|
|
13
15
|
- affected version or commit
|
|
14
16
|
- reproduction steps
|
|
15
17
|
- impact
|
|
16
18
|
- any suggested fix
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
Please do not include secrets or private repository content beyond what is
|
|
21
|
+
necessary to reproduce the issue. We aim to acknowledge a complete report
|
|
22
|
+
within 14 days, investigate it, and coordinate disclosure and remediation with
|
|
23
|
+
the reporter before publishing details.
|
|
19
24
|
|
|
20
25
|
## Security expectations
|
|
21
26
|
|
package/action.yml
CHANGED
package/dist/cli/program.js
CHANGED
|
@@ -1347,7 +1347,7 @@ var buildLookup = (config, packages, corpus, indexOutFile, humanDocs = {}, root
|
|
|
1347
1347
|
};
|
|
1348
1348
|
|
|
1349
1349
|
// src/version.ts
|
|
1350
|
-
var PACKAGE_VERSION = "1.2.
|
|
1350
|
+
var PACKAGE_VERSION = "1.2.6";
|
|
1351
1351
|
|
|
1352
1352
|
// src/index-builder/capabilities.ts
|
|
1353
1353
|
var renderCapabilitiesJson = (config, index, paths) => {
|
|
@@ -4080,7 +4080,9 @@ import { z as z6, ZodError } from "zod";
|
|
|
4080
4080
|
var MCP_TOOLS = [
|
|
4081
4081
|
{
|
|
4082
4082
|
name: "handoff.resolve",
|
|
4083
|
-
|
|
4083
|
+
title: "Resolve repository handoff",
|
|
4084
|
+
description: "Resolve a package or ownership id to its deterministic AgentHandoff.",
|
|
4085
|
+
annotations: { readOnlyHint: true },
|
|
4084
4086
|
inputSchema: {
|
|
4085
4087
|
type: "object",
|
|
4086
4088
|
properties: { id: { type: "string" }, kind: { type: "string", enum: ["package", "ownership"] } },
|
|
@@ -4089,7 +4091,9 @@ var MCP_TOOLS = [
|
|
|
4089
4091
|
},
|
|
4090
4092
|
{
|
|
4091
4093
|
name: "doc.search",
|
|
4092
|
-
|
|
4094
|
+
title: "Search repository documentation",
|
|
4095
|
+
description: "Search the deterministic Doc Bridge index for repository documentation.",
|
|
4096
|
+
annotations: { readOnlyHint: true },
|
|
4093
4097
|
inputSchema: {
|
|
4094
4098
|
type: "object",
|
|
4095
4099
|
properties: { term: { type: "string" }, limit: { type: "number" } },
|
|
@@ -4098,7 +4102,9 @@ var MCP_TOOLS = [
|
|
|
4098
4102
|
},
|
|
4099
4103
|
{
|
|
4100
4104
|
name: "doc.get",
|
|
4101
|
-
|
|
4105
|
+
title: "Read indexed documentation",
|
|
4106
|
+
description: "Read one indexed agent documentation file by id or indexed path.",
|
|
4107
|
+
annotations: { readOnlyHint: true },
|
|
4102
4108
|
inputSchema: {
|
|
4103
4109
|
type: "object",
|
|
4104
4110
|
properties: { id: { type: "string" }, path: { type: "string" } }
|
|
@@ -4106,12 +4112,16 @@ var MCP_TOOLS = [
|
|
|
4106
4112
|
},
|
|
4107
4113
|
{
|
|
4108
4114
|
name: "gate.status",
|
|
4109
|
-
|
|
4115
|
+
title: "Check documentation gates",
|
|
4116
|
+
description: "Evaluate documentation gates without writing files.",
|
|
4117
|
+
annotations: { readOnlyHint: true },
|
|
4110
4118
|
inputSchema: { type: "object", properties: {} }
|
|
4111
4119
|
},
|
|
4112
4120
|
{
|
|
4113
4121
|
name: "retriever.query",
|
|
4114
|
-
|
|
4122
|
+
title: "Retrieve documentation context",
|
|
4123
|
+
description: "Return relevant local Doc Bridge index chunks for a query.",
|
|
4124
|
+
annotations: { readOnlyHint: true },
|
|
4115
4125
|
inputSchema: {
|
|
4116
4126
|
type: "object",
|
|
4117
4127
|
properties: { query: { type: "string" }, limit: { type: "number" } },
|
|
@@ -4120,17 +4130,23 @@ var MCP_TOOLS = [
|
|
|
4120
4130
|
},
|
|
4121
4131
|
{
|
|
4122
4132
|
name: "memory.classify",
|
|
4123
|
-
|
|
4133
|
+
title: "Classify memory candidates",
|
|
4134
|
+
description: "Classify local memory candidates into agent, human, playbook, or discard routes.",
|
|
4135
|
+
annotations: { readOnlyHint: true },
|
|
4124
4136
|
inputSchema: { type: "object", properties: {} }
|
|
4125
4137
|
},
|
|
4126
4138
|
{
|
|
4127
4139
|
name: "memory.promoteDraft",
|
|
4128
|
-
|
|
4140
|
+
title: "Draft memory promotion",
|
|
4141
|
+
description: "Build a reviewable draft promotion body from local memory candidates without publishing it.",
|
|
4142
|
+
annotations: { readOnlyHint: true },
|
|
4129
4143
|
inputSchema: { type: "object", properties: {} }
|
|
4130
4144
|
},
|
|
4131
4145
|
{
|
|
4132
4146
|
name: "registry.topology",
|
|
4133
|
-
|
|
4147
|
+
title: "Inspect registry topology",
|
|
4148
|
+
description: "Return the static Doc Bridge curator and delegate topology.",
|
|
4149
|
+
annotations: { readOnlyHint: true },
|
|
4134
4150
|
inputSchema: { type: "object", properties: {} }
|
|
4135
4151
|
}
|
|
4136
4152
|
];
|
|
@@ -4247,13 +4263,14 @@ var handleMcpRequest = (ctx, request) => {
|
|
|
4247
4263
|
if (request.method?.startsWith("notifications/")) return void 0;
|
|
4248
4264
|
throw new Error(`Unsupported MCP method "${request.method ?? ""}"`);
|
|
4249
4265
|
};
|
|
4250
|
-
var writeFrame = (payload) => {
|
|
4266
|
+
var writeFrame = (payload, framing) => {
|
|
4251
4267
|
const body = JSON.stringify(payload);
|
|
4252
|
-
process.stdout.write(
|
|
4268
|
+
process.stdout.write(framing === "json-line" ? `${body}
|
|
4269
|
+
` : `Content-Length: ${Buffer.byteLength(body)}\r
|
|
4253
4270
|
\r
|
|
4254
4271
|
${body}`);
|
|
4255
4272
|
};
|
|
4256
|
-
var respond = (ctx, request) => {
|
|
4273
|
+
var respond = (ctx, request, framing) => {
|
|
4257
4274
|
if (request.id === void 0) {
|
|
4258
4275
|
try {
|
|
4259
4276
|
handleMcpRequest(ctx, request);
|
|
@@ -4263,13 +4280,13 @@ var respond = (ctx, request) => {
|
|
|
4263
4280
|
}
|
|
4264
4281
|
try {
|
|
4265
4282
|
const result = handleMcpRequest(ctx, request);
|
|
4266
|
-
writeFrame({ jsonrpc: "2.0", id: request.id, result: result ?? {} });
|
|
4283
|
+
writeFrame({ jsonrpc: "2.0", id: request.id, result: result ?? {} }, framing);
|
|
4267
4284
|
} catch (error) {
|
|
4268
4285
|
writeFrame({
|
|
4269
4286
|
jsonrpc: "2.0",
|
|
4270
4287
|
id: request.id,
|
|
4271
4288
|
error: { code: -32e3, message: error instanceof Error ? error.message : String(error) }
|
|
4272
|
-
});
|
|
4289
|
+
}, framing);
|
|
4273
4290
|
}
|
|
4274
4291
|
};
|
|
4275
4292
|
var startMcpStdioServer = (ctx) => {
|
|
@@ -4277,21 +4294,34 @@ var startMcpStdioServer = (ctx) => {
|
|
|
4277
4294
|
process.stdin.on("data", (chunk) => {
|
|
4278
4295
|
buffer = Buffer.concat([buffer, chunk]);
|
|
4279
4296
|
while (true) {
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
|
|
4297
|
+
if (/^content-length:/i.test(buffer.subarray(0, Math.min(buffer.length, 32)).toString("utf8"))) {
|
|
4298
|
+
const headerEnd = buffer.indexOf("\r\n\r\n");
|
|
4299
|
+
if (headerEnd === -1) return;
|
|
4300
|
+
const header = buffer.subarray(0, headerEnd).toString("utf8");
|
|
4301
|
+
const match = /content-length:\s*(\d+)/i.exec(header);
|
|
4302
|
+
if (!match?.[1]) {
|
|
4303
|
+
buffer = buffer.subarray(headerEnd + 4);
|
|
4304
|
+
continue;
|
|
4305
|
+
}
|
|
4306
|
+
const length = Number(match[1]);
|
|
4307
|
+
const bodyStart = headerEnd + 4;
|
|
4308
|
+
const bodyEnd = bodyStart + length;
|
|
4309
|
+
if (buffer.length < bodyEnd) return;
|
|
4310
|
+
const raw2 = buffer.subarray(bodyStart, bodyEnd).toString("utf8");
|
|
4311
|
+
buffer = buffer.subarray(bodyEnd);
|
|
4312
|
+
respond(ctx, JSON.parse(raw2), "content-length");
|
|
4286
4313
|
continue;
|
|
4287
4314
|
}
|
|
4288
|
-
const
|
|
4289
|
-
|
|
4290
|
-
const
|
|
4291
|
-
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
|
|
4315
|
+
const lineEnd = buffer.indexOf("\n");
|
|
4316
|
+
if (lineEnd === -1) return;
|
|
4317
|
+
const raw = buffer.subarray(0, lineEnd).toString("utf8").trim();
|
|
4318
|
+
buffer = buffer.subarray(lineEnd + 1);
|
|
4319
|
+
if (!raw) continue;
|
|
4320
|
+
try {
|
|
4321
|
+
respond(ctx, JSON.parse(raw), "json-line");
|
|
4322
|
+
} catch {
|
|
4323
|
+
writeFrame({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "Parse error" } }, "json-line");
|
|
4324
|
+
}
|
|
4295
4325
|
}
|
|
4296
4326
|
});
|
|
4297
4327
|
process.stdin.resume();
|