@rockhopper-co/mcp-server 0.3.0 → 0.3.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 +12 -0
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/lib.d.ts +1 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js.map +1 -1
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +15 -8
- package/dist/server.js.map +1 -1
- package/dist/tools/index.d.ts +4 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -4
- package/dist/tools/index.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -75,6 +75,18 @@ Add to `.cursor/mcp.json` in your project:
|
|
|
75
75
|
| `ROCKHOPPER_TOKEN` | Yes | — | Personal Access Token (starts with `rh_pat_`) |
|
|
76
76
|
| `ROCKHOPPER_API_URL` | No | `https://api.rockhopper.co` | Rockhopper API base URL |
|
|
77
77
|
|
|
78
|
+
## Postman
|
|
79
|
+
|
|
80
|
+
A starter Postman collection + environment files are available in
|
|
81
|
+
`postman/` for gateway smoke testing (`/healthz`, `/mcp initialize`,
|
|
82
|
+
`/mcp tools/list`) across local/dev/staging/production.
|
|
83
|
+
|
|
84
|
+
Regenerate artifacts with:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npm run generate:postman
|
|
88
|
+
```
|
|
89
|
+
|
|
78
90
|
## Available Tools
|
|
79
91
|
|
|
80
92
|
| Tool | Description |
|
package/dist/cli.js
CHANGED
|
@@ -9,10 +9,30 @@ if (!ROCKHOPPER_TOKEN) {
|
|
|
9
9
|
'Create a Personal Access Token in Rockhopper Settings and set it as ROCKHOPPER_TOKEN.');
|
|
10
10
|
process.exit(1);
|
|
11
11
|
}
|
|
12
|
+
if (!ROCKHOPPER_TOKEN.startsWith('rh_pat_')) {
|
|
13
|
+
console.error('Error: ROCKHOPPER_TOKEN does not look like a valid Personal Access Token.\n' +
|
|
14
|
+
'Tokens start with "rh_pat_". Check that the full token was copied correctly.');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
12
17
|
const apiClient = new ApiClient({
|
|
13
18
|
baseUrl: ROCKHOPPER_API_URL,
|
|
14
19
|
token: ROCKHOPPER_TOKEN,
|
|
15
20
|
});
|
|
21
|
+
try {
|
|
22
|
+
await apiClient.getMe();
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
26
|
+
if (msg.includes('401') || msg.includes('403')) {
|
|
27
|
+
console.error('Error: ROCKHOPPER_TOKEN is invalid or expired.\n' +
|
|
28
|
+
'Create a new Personal Access Token in Rockhopper Settings and set it as ROCKHOPPER_TOKEN.');
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.error(`Error: Could not reach Rockhopper API at ${ROCKHOPPER_API_URL}.\n` +
|
|
32
|
+
`Details: ${msg}`);
|
|
33
|
+
}
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
16
36
|
const server = createServer(apiClient);
|
|
17
37
|
const transport = new StdioServerTransport();
|
|
18
38
|
await server.connect(transport);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,kBAAkB,GACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;AAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAEtD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,CACX,6DAA6D;QAC3D,uFAAuF,CAC1F,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;IAC9B,OAAO,EAAE,kBAAkB;IAC3B,KAAK,EAAE,gBAAgB;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEvC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,kBAAkB,GACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;AAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAEtD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,CACX,6DAA6D;QAC3D,uFAAuF,CAC1F,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,KAAK,CACX,6EAA6E;QAC3E,8EAA8E,CACjF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;IAC9B,OAAO,EAAE,kBAAkB;IAC3B,KAAK,EAAE,gBAAgB;CACxB,CAAC,CAAC;AAEH,IAAI,CAAC;IACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CACX,kDAAkD;YAChD,2FAA2F,CAC9F,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,4CAA4C,kBAAkB,KAAK;YACjE,YAAY,GAAG,EAAE,CACpB,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEvC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* - All `types` (Team, EnrolledFile, FileVersion, ...)
|
|
18
18
|
*/
|
|
19
19
|
export { createServer } from './server.js';
|
|
20
|
+
export { type RegisterToolsOptions } from './tools/index.js';
|
|
20
21
|
export { ApiClient, type ApiClientConfig } from './api-client.js';
|
|
21
22
|
export * from './types.js';
|
|
22
23
|
//# sourceMappingURL=lib.d.ts.map
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,cAAc,YAAY,CAAC"}
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAClE,cAAc,YAAY,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { ApiClient } from './api-client.js';
|
|
3
|
-
|
|
3
|
+
import { type RegisterToolsOptions } from './tools/index.js';
|
|
4
|
+
export declare function createServer(apiClient: ApiClient, options?: RegisterToolsOptions): McpServer;
|
|
4
5
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,SAAS,CA6BX"}
|
package/dist/server.js
CHANGED
|
@@ -2,20 +2,27 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
2
2
|
import { registerPrompts } from './prompts/index.js';
|
|
3
3
|
import { registerResources } from './resources/index.js';
|
|
4
4
|
import { registerTools } from './tools/index.js';
|
|
5
|
-
export function createServer(apiClient) {
|
|
5
|
+
export function createServer(apiClient, options) {
|
|
6
|
+
const readOnly = options?.scope === 'read-only';
|
|
6
7
|
const server = new McpServer({
|
|
7
8
|
name: 'rockhopper',
|
|
8
9
|
version: '0.1.0',
|
|
9
10
|
}, {
|
|
10
|
-
instructions:
|
|
11
|
-
'
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
instructions: readOnly
|
|
12
|
+
? 'Rockhopper MCP server for reading Excel file metadata. ' +
|
|
13
|
+
'Use list_files first to discover available files, then drill into ' +
|
|
14
|
+
'versions, comments, reviews, or cell history. ' +
|
|
15
|
+
'This token is read-only — write operations are not available. ' +
|
|
16
|
+
'File IDs use the platformId field (e.g. from list_files output).'
|
|
17
|
+
: 'Rockhopper MCP server for managing Excel file metadata. ' +
|
|
18
|
+
'Use list_files first to discover available files, then drill into ' +
|
|
19
|
+
'versions, comments, reviews, or cell history. Write operations ' +
|
|
20
|
+
'(add_comment, reply_to_comment, resolve_comment, create_review_request, ' +
|
|
21
|
+
'approve_review, update_file_description) require a read-write scoped token. ' +
|
|
22
|
+
'File IDs use the platformId field (e.g. from list_files output).',
|
|
16
23
|
});
|
|
17
24
|
registerResources(server, apiClient);
|
|
18
|
-
registerTools(server, apiClient);
|
|
25
|
+
registerTools(server, apiClient, options);
|
|
19
26
|
registerPrompts(server, apiClient);
|
|
20
27
|
return server;
|
|
21
28
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAA6B,MAAM,kBAAkB,CAAC;AAE5E,MAAM,UAAU,YAAY,CAC1B,SAAoB,EACpB,OAA8B;IAE9B,MAAM,QAAQ,GAAG,OAAO,EAAE,KAAK,KAAK,WAAW,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE,QAAQ;YACpB,CAAC,CAAC,yDAAyD;gBACzD,oEAAoE;gBACpE,gDAAgD;gBAChD,gEAAgE;gBAChE,kEAAkE;YACpE,CAAC,CAAC,0DAA0D;gBAC1D,oEAAoE;gBACpE,iEAAiE;gBACjE,0EAA0E;gBAC1E,8EAA8E;gBAC9E,kEAAkE;KACvE,CACF,CAAC;IAEF,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEnC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import type { ApiClient } from '../api-client.js';
|
|
3
|
-
export
|
|
3
|
+
export interface RegisterToolsOptions {
|
|
4
|
+
scope?: 'read-only' | 'read-write';
|
|
5
|
+
}
|
|
6
|
+
export declare function registerTools(server: McpServer, api: ApiClient, options?: RegisterToolsOptions): void;
|
|
4
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAWlD,wBAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAWlD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;CACpC;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,SAAS,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,IAAI,CAeN"}
|
package/dist/tools/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { registerSearchTool } from './search.js';
|
|
|
7
7
|
import { registerWriteCommentTools } from './write-comments.js';
|
|
8
8
|
import { registerWriteReviewTools } from './write-reviews.js';
|
|
9
9
|
import { registerWriteFileTool } from './write-files.js';
|
|
10
|
-
export function registerTools(server, api) {
|
|
10
|
+
export function registerTools(server, api, options) {
|
|
11
11
|
// Read-only tools (available to all scopes)
|
|
12
12
|
registerListFilesTool(server, api);
|
|
13
13
|
registerGetVersionsTool(server, api);
|
|
@@ -16,8 +16,10 @@ export function registerTools(server, api) {
|
|
|
16
16
|
registerGetCellHistoryTool(server, api);
|
|
17
17
|
registerSearchTool(server, api);
|
|
18
18
|
// Write tools (require read-write scope on PAT)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
if (options?.scope !== 'read-only') {
|
|
20
|
+
registerWriteCommentTools(server, api);
|
|
21
|
+
registerWriteReviewTools(server, api);
|
|
22
|
+
registerWriteFileTool(server, api);
|
|
23
|
+
}
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAMzD,MAAM,UAAU,aAAa,CAC3B,MAAiB,EACjB,GAAc,EACd,OAA8B;IAE9B,4CAA4C;IAC5C,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEhC,gDAAgD;IAChD,IAAI,OAAO,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;QACnC,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rockhopper-co/mcp-server",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Rockhopper MCP server — expose file metadata, versions, reviews, and comments to AI tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -33,6 +33,8 @@
|
|
|
33
33
|
"test:e2e:cov": "vitest run --config vitest.e2e.config.ts --coverage",
|
|
34
34
|
"test:cov": "vitest run --coverage",
|
|
35
35
|
"test:watch": "vitest",
|
|
36
|
+
"generate:postman": "tsx scripts/generate-postman-collection.ts && tsx scripts/generate-postman-environments.ts",
|
|
37
|
+
"generate:postman:check": "npm run generate:postman && git diff --exit-code -- postman/",
|
|
36
38
|
"prepublishOnly": "npm run build",
|
|
37
39
|
"release:patch": "npm version patch -m 'release: v%s' && git push && git push --tags",
|
|
38
40
|
"release:minor": "npm version minor -m 'release: v%s' && git push && git push --tags",
|
|
@@ -50,7 +52,8 @@
|
|
|
50
52
|
"@vitest/coverage-v8": "^3.2.4",
|
|
51
53
|
"tsx": "^4.19.4",
|
|
52
54
|
"typescript": "^5.8.3",
|
|
53
|
-
"vitest": "^3.1.2"
|
|
55
|
+
"vitest": "^3.1.2",
|
|
56
|
+
"zod-to-json-schema": "^3.24.6"
|
|
54
57
|
},
|
|
55
58
|
"keywords": [
|
|
56
59
|
"mcp",
|