@hiai-gg/docsmint 0.8.7 → 0.8.8

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
@@ -42,17 +42,21 @@ instructions, and verify the connection. Hosted MCP follows your plan and
42
42
  workspace permissions. Prefer workspace-bound or category-scoped credentials.
43
43
 
44
44
  The Cloud endpoint is `https://docsmint.com/mcp` (Streamable HTTP). OAuth-capable
45
- clients discover authorization and open DocsMint login and consent in the browser.
46
- Choose your workspace and explicit scopes; the authorization code uses PKCE S256.
47
- Access tokens expire after one hour; reconnect through browser authorization when
48
- they expire (no refresh tokens). API-key clients
49
- send `Authorization: Bearer <key>`. Credentials cannot create or elevate other
50
- credentials; lifecycle management belongs to the signed-in browser session.
45
+ clients discover the hosted resource and authorization-server metadata; the current
46
+ authorization metadata advertises client registration at
47
+ `https://docsmint.com/oauth/register` (DCR). The hosted flow uses authorization-code
48
+ PKCE S256; metadata advertises only the `authorization_code` grant and no token
49
+ endpoint client authentication. CIMD is not part of the current contract. Browser consent binds the
50
+ one-hour opaque access token to the selected workspace, optional category, and
51
+ requested scopes. Refresh tokens are not issued. API-key clients can instead send
52
+ `Authorization: Bearer <key>` with an MCP/API credential created in the authenticated
53
+ browser UI. Credentials cannot create or elevate other credentials; lifecycle
54
+ management belongs to the signed-in browser session.
51
55
 
52
56
  **Self-hosted alternative:** run [DocsMint with Docker](#quickstart), create an API
53
57
  key in its browser UI, and configure `HIAI_DOCS_URL` and `HIAI_DOCS_API_KEY` for
54
58
  `npx --yes --package @hiai-gg/docsmint docsmint-mcp`. The npm package is a stdio
55
- bridge to your running deployment, not a server installer. See the
59
+ bridge to your own API, not a server installer or hosted OAuth server. See the
56
60
  [MCP guide](https://github.com/HiAi-gg/docsmint/blob/main/packages/mcp-server/README.md) for client configuration.
57
61
 
58
62
  ## Why DocsMint?
@@ -70,20 +74,19 @@ bridge to your running deployment, not a server installer. See the
70
74
  - **Choose how you run it.** Use [managed DocsMint](https://docsmint.com) or
71
75
  self-host the application, database, search, queues, and files.
72
76
 
73
- ## What's new in 0.8.7?
77
+ ## What's new in 0.8.8?
74
78
 
75
- Agents can now complete more document workflows without leaving MCP:
79
+ - Clarify that hosted MCP authorization belongs to DocsMint Cloud and that the
80
+ stdio bridge uses an API key to connect to your own DocsMint API.
81
+ - Synchronize MCP Registry and LobeHub descriptions with the current Cloud
82
+ authorization contract and the self-hosted boundary.
83
+ - Keep the published catalog aligned with the implementation: 21 tools,
84
+ 2 prompts, and 3 resources, with regression checks for route and metadata drift.
85
+ - Update vulnerability reporting details and clarify that OAuth protocol flaws
86
+ remain in scope for the product where they occur.
76
87
 
77
- - Move documents to trash, remove folders or categories, and restore saved versions.
78
- - Keep changes within workspace/category permissions; version restoration requires edit access.
79
- - Discover clearer tool descriptions, parameter guidance, and destructive-operation annotations.
80
- - Apply GraphRAG query text and related-document result limits consistently.
81
-
82
- The MCP surface grows additively from 17 to 21 tools. Existing tool names remain
83
- available. No database migration is required. Hosted clients receive these tools
84
- when their DocsMint host adopts this release.
85
-
86
- Read the [release notes](https://github.com/HiAi-gg/docsmint/releases/tag/v0.8.7)
88
+ No MCP capabilities, existing integrations, or database schema change in this
89
+ release. See the [release notes](https://github.com/HiAi-gg/docsmint/releases/tag/v0.8.8)
87
90
  and [changelog](https://github.com/HiAi-gg/docsmint/blob/main/CHANGELOG.md).
88
91
 
89
92
  ## Install with an AI agent
@@ -136,7 +139,7 @@ docker pull vgalibov/docsmint:web-latest
136
139
  docker pull vgalibov/docsmint:caddy-latest
137
140
  ```
138
141
 
139
- Use versioned tags `api-v0.8.7`, `web-v0.8.7`, and `caddy-v0.8.7` for
142
+ Use versioned tags `api-v0.8.8`, `web-v0.8.8`, and `caddy-v0.8.8` for
140
143
  reproducible deploys. Caddy is the supporting reverse proxy with rate limiting;
141
144
  it is separate from the API and web application. The quickstart still builds the Compose stack from this repository so PostgreSQL,
142
145
  Redis, and SeaweedFS start together with the application.
@@ -232059,50 +232059,6 @@ function stripQuotes2(value) {
232059
232059
  return trimmed;
232060
232060
  }
232061
232061
 
232062
- // ../../backend/src/api/routes/health.ts
232063
- function createHealthRoutes(dependencies) {
232064
- return new Elysia().get("/api/health", async ({ request, set: set2 }) => {
232065
- const ip = request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() ?? request.headers.get("x-real-ip") ?? "unknown";
232066
- const rateLimit = await dependencies.rateLimiter(ip, request);
232067
- set2.headers = {
232068
- "X-RateLimit-Remaining": String(rateLimit.remaining),
232069
- ...rateLimit.retryAfter ? { "Retry-After": String(rateLimit.retryAfter) } : {}
232070
- };
232071
- if (!rateLimit.allowed) {
232072
- set2.status = 429;
232073
- return { error: "Too many requests" };
232074
- }
232075
- const [databaseAvailable, redisAvailable, storageAvailable] = await Promise.all([
232076
- dependencies.databaseAvailable(),
232077
- dependencies.redisAvailable(),
232078
- dependencies.storageAvailable()
232079
- ]);
232080
- const queueAvailable = dependencies.queueAvailable();
232081
- const readiness = evaluatePipelineHealth({
232082
- databaseAvailable,
232083
- redisAvailable,
232084
- storageAvailable,
232085
- queueAvailable,
232086
- recoveryAvailable: true,
232087
- oldestInteractiveWaitMs: 0,
232088
- interactiveSloMs: Number.POSITIVE_INFINITY,
232089
- graphAvailable: true
232090
- });
232091
- if (readiness.status === "unhealthy")
232092
- set2.status = 503;
232093
- return {
232094
- status: readiness.status === "unhealthy" ? "unhealthy" : "ok",
232095
- service: "docsmint",
232096
- timestamp: new Date().toISOString(),
232097
- database: databaseAvailable ? "ok" : "error",
232098
- redis: redisAvailable ? "ok" : "error",
232099
- storage: storageAvailable ? "ok" : "error",
232100
- queue: queueAvailable ? "ok" : "error",
232101
- ...readiness.reasons.length ? { reasons: readiness.reasons } : {}
232102
- };
232103
- });
232104
- }
232105
-
232106
232062
  // ../../backend/src/api/routes/keys.ts
232107
232063
  init_schema2();
232108
232064
  init_drizzle_orm();
@@ -235959,6 +235915,53 @@ var webhookRoutes = new Elysia({ prefix: "/api/webhooks" }).post("/storage", asy
235959
235915
  return { received: true };
235960
235916
  });
235961
235917
 
235918
+ // ../../backend/src/api/register-routes.ts
235919
+ var selfHostedApiRoutes = new Elysia().use(authRoutes).use(tagRoutes).use(categoryRoutes).use(attachmentRoutes).use(shareRoutes).use(searchRoutes).use(documentRoutes).use(folderRoutes).use(versionRoutes).use(webhookRoutes).use(collaborationRoutes).use(graphRoutes).use(keysRoutes).use(pluginsRoutes).use(visibilityRoutes).use(adminRoutes).use(metricsRoutes);
235920
+
235921
+ // ../../backend/src/api/routes/health.ts
235922
+ function createHealthRoutes(dependencies) {
235923
+ return new Elysia().get("/api/health", async ({ request, set: set2 }) => {
235924
+ const ip = request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() ?? request.headers.get("x-real-ip") ?? "unknown";
235925
+ const rateLimit = await dependencies.rateLimiter(ip, request);
235926
+ set2.headers = {
235927
+ "X-RateLimit-Remaining": String(rateLimit.remaining),
235928
+ ...rateLimit.retryAfter ? { "Retry-After": String(rateLimit.retryAfter) } : {}
235929
+ };
235930
+ if (!rateLimit.allowed) {
235931
+ set2.status = 429;
235932
+ return { error: "Too many requests" };
235933
+ }
235934
+ const [databaseAvailable, redisAvailable, storageAvailable] = await Promise.all([
235935
+ dependencies.databaseAvailable(),
235936
+ dependencies.redisAvailable(),
235937
+ dependencies.storageAvailable()
235938
+ ]);
235939
+ const queueAvailable = dependencies.queueAvailable();
235940
+ const readiness = evaluatePipelineHealth({
235941
+ databaseAvailable,
235942
+ redisAvailable,
235943
+ storageAvailable,
235944
+ queueAvailable,
235945
+ recoveryAvailable: true,
235946
+ oldestInteractiveWaitMs: 0,
235947
+ interactiveSloMs: Number.POSITIVE_INFINITY,
235948
+ graphAvailable: true
235949
+ });
235950
+ if (readiness.status === "unhealthy")
235951
+ set2.status = 503;
235952
+ return {
235953
+ status: readiness.status === "unhealthy" ? "unhealthy" : "ok",
235954
+ service: "docsmint",
235955
+ timestamp: new Date().toISOString(),
235956
+ database: databaseAvailable ? "ok" : "error",
235957
+ redis: redisAvailable ? "ok" : "error",
235958
+ storage: storageAvailable ? "ok" : "error",
235959
+ queue: queueAvailable ? "ok" : "error",
235960
+ ...readiness.reasons.length ? { reasons: readiness.reasons } : {}
235961
+ };
235962
+ });
235963
+ }
235964
+
235962
235965
  // ../../backend/src/lib/api-key-owner.ts
235963
235966
  init_schema2();
235964
235967
  init_config();
@@ -238422,7 +238425,7 @@ var swaggerConfig = {
238422
238425
  },
238423
238426
  info: {
238424
238427
  title: "DocsMint API",
238425
- version: "0.8.7",
238428
+ version: "0.8.8",
238426
238429
  description: "Self-hosted AI-native knowledge workspace and installable PWA with hybrid search, GraphRAG, REST, SDK, CLI, and MCP access for people and AI agents.",
238427
238430
  contact: { name: "HiAi-gg", url: "https://github.com/HiAi-gg/docsmint" },
238428
238431
  license: {
@@ -238476,7 +238479,7 @@ var app = new Elysia().use(bodySizeLimit).onError(({ error: error53, set: set2 }
238476
238479
  redisAvailable: () => redis.ping().then(() => true, () => false),
238477
238480
  storageAvailable: () => storage.send(new ListBucketsCommand({})).then(() => true, () => false),
238478
238481
  queueAvailable: () => pipelineRuntime.workers.size === PIPELINE_STAGES.length && [...pipelineRuntime.workers.values()].every((worker2) => worker2.isRunning?.() === true)
238479
- })).use(csrfMiddleware).use(authMiddleware).use(authRoutes).use(tagRoutes).use(categoryRoutes).use(attachmentRoutes).use(shareRoutes).use(searchRoutes).use(documentRoutes).use(folderRoutes).use(versionRoutes).use(webhookRoutes).use(collaborationRoutes).use(graphRoutes).use(keysRoutes).use(pluginsRoutes).use(visibilityRoutes).use(adminRoutes).use(metricsRoutes);
238482
+ })).use(csrfMiddleware).use(authMiddleware).use(selfHostedApiRoutes);
238480
238483
  app.listen({
238481
238484
  port: config3.API_PORT,
238482
238485
  development: config3.NODE_ENV !== "production",
package/dist/mcp-cli.js CHANGED
@@ -1097,7 +1097,7 @@ function registerDocsmintMcpCapabilities(server, client2) {
1097
1097
  registerLifecycleCapabilities(server, client2, (handler11) => wrapHandler("lifecycle", handler11));
1098
1098
  }
1099
1099
  function createDocsmintMcpServer(options = {}) {
1100
- const server = new McpServer({ name: "docsmint", version: "0.8.7" });
1100
+ const server = new McpServer({ name: "docsmint", version: "0.8.8" });
1101
1101
  const client2 = options.docsClient ? createMcpDocsClient(options.docsClient, options.requestContext) : options.client ?? createMcpDocsClient(createDefaultDocsClient(), options.requestContext);
1102
1102
  registerDocsmintMcpCapabilities(server, client2);
1103
1103
  return server;
@@ -1093,7 +1093,7 @@ function registerDocsmintMcpCapabilities(server, client2) {
1093
1093
  registerLifecycleCapabilities(server, client2, (handler11) => wrapHandler("lifecycle", handler11));
1094
1094
  }
1095
1095
  function createDocsmintMcpServer(options = {}) {
1096
- const server = new McpServer({ name: "docsmint", version: "0.8.7" });
1096
+ const server = new McpServer({ name: "docsmint", version: "0.8.8" });
1097
1097
  const client2 = options.docsClient ? createMcpDocsClient(options.docsClient, options.requestContext) : options.client ?? createMcpDocsClient(createDefaultDocsClient(), options.requestContext);
1098
1098
  registerDocsmintMcpCapabilities(server, client2);
1099
1099
  return server;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hiai-gg/docsmint",
3
3
  "mcpName": "io.github.HiAi-gg/docsmint",
4
- "version": "0.8.7",
4
+ "version": "0.8.8",
5
5
  "type": "module",
6
6
  "browser": {
7
7
  "./dist/backend-launcher.js": false,
@@ -15,7 +15,7 @@
15
15
  "./dist/backend-account-runtime-cleanup.js": false
16
16
  },
17
17
  "license": "Apache-2.0",
18
- "description": "Managed or self-hosted knowledge workspace for AI agents with hybrid search, reranking, GraphRAG, and scoped document tools.",
18
+ "description": "DocsMint SDK and CLI plus a self-hosted MCP stdio bridge that uses your API key. For DocsMint Cloud MCP, connect to https://docsmint.com/mcp.",
19
19
  "repository": {
20
20
  "type": "git",
21
21
  "url": "https://github.com/HiAi-gg/docsmint"
@@ -25,7 +25,7 @@ import { registerSearch } from './commands/search.js';
25
25
  import { registerSnapshot } from './commands/snapshot.js';
26
26
  import { registerUpdate } from './commands/update.js';
27
27
 
28
- const VERSION = '0.8.7';
28
+ const VERSION = '0.8.8';
29
29
 
30
30
  const program = new Command();
31
31
  program.name('docsmint').description('CLI for the DocsMint knowledge workspace').version(VERSION);
package/server.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "id": "1249550690",
11
11
  "subfolder": "packages/mcp-server"
12
12
  },
13
- "version": "0.8.7",
13
+ "version": "0.8.8",
14
14
  "icons": [
15
15
  {
16
16
  "src": "https://raw.githubusercontent.com/HiAi-gg/docsmint/main/frontend/static/logo-dark.png",
@@ -30,7 +30,7 @@
30
30
  "registryType": "npm",
31
31
  "registryBaseUrl": "https://registry.npmjs.org",
32
32
  "identifier": "@hiai-gg/docsmint",
33
- "version": "0.8.7",
33
+ "version": "0.8.8",
34
34
  "runtimeHint": "npx",
35
35
  "transport": {
36
36
  "type": "stdio"
@@ -44,12 +44,12 @@
44
44
  "environmentVariables": [
45
45
  {
46
46
  "name": "HIAI_DOCS_URL",
47
- "description": "Base URL of your running self-hosted DocsMint API. For managed Cloud use https://docsmint.com/mcp.",
47
+ "description": "Base URL of your running self-hosted DocsMint REST API, for example http://localhost:50700. For Cloud MCP, use the Streamable HTTP remote below.",
48
48
  "default": "http://localhost:50700"
49
49
  },
50
50
  {
51
51
  "name": "HIAI_DOCS_API_KEY",
52
- "description": "Create an API key in your self-hosted DocsMint browser UI. Prefer workspace-bound or category-scoped credentials.",
52
+ "description": "Create an API key in your self-hosted DocsMint browser UI. The stdio bridge uses it only with your own API; it does not install the Cloud OAuth server. Prefer workspace-bound or category-scoped credentials.",
53
53
  "isRequired": true,
54
54
  "isSecret": true
55
55
  }
@@ -63,7 +63,7 @@
63
63
  "headers": [
64
64
  {
65
65
  "name": "Authorization",
66
- "description": "DocsMint Cloud: no self-hosting required. OAuth-capable clients use browser authorization discovered at the hosted endpoint. API-key clients: sign up or log in at https://docsmint.com/mcp/connect?source=mcp_registry and create a workspace-bound or category-scoped MCP/API credential in the authenticated browser UI. Enter Bearer <key>. Credential management requires a browser session; MCP cannot create or elevate credentials. Self-hosted users should use the stdio package.",
66
+ "description": "DocsMint Cloud remote at https://docsmint.com/mcp; no self-hosted server is required. Discovery advertises /oauth/authorize, /oauth/token, and active DCR at https://docsmint.com/oauth/register. Metadata supports the code response type, authorization_code grant only, no token-endpoint client authentication, and PKCE S256; CIMD is not part of the contract. Access tokens last one hour, have no refresh token, and are bound by browser consent to a workspace, optional category, and requested scopes. API-key clients can use Authorization: Bearer <key> with a workspace-bound or category-scoped credential created at https://docsmint.com/mcp/connect?source=mcp_registry. Credential management requires a browser session. For self-hosting, use the stdio package with your own API and API key; it does not install the Cloud OAuth server.",
67
67
  "isRequired": true,
68
68
  "isSecret": true
69
69
  },
@@ -83,7 +83,7 @@
83
83
  "licenseFile": "https://github.com/HiAi-gg/docsmint/blob/main/LICENSE",
84
84
  "documentationUrl": "https://docsmint.com/mcp/connect?source=mcp_registry",
85
85
  "catalog": {
86
- "tools": 17,
86
+ "tools": 21,
87
87
  "prompts": 2,
88
88
  "resources": 3
89
89
  }