golutra-mcp 0.1.0

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.
@@ -0,0 +1,354 @@
1
+ import { z } from "zod";
2
+ import { findProjectSkillByName, readProjectSkillDocument } from "./project-skills.js";
3
+ import { buildToolError, buildToolSuccess } from "./tool-results.js";
4
+ const optionalWorkspacePath = z.string().trim().min(1).optional();
5
+ const optionalCliPath = z.string().trim().min(1).optional();
6
+ const optionalProfile = z.enum(["dev", "canary", "stable"]).optional();
7
+ const optionalTimeout = z.number().int().positive().max(300_000).optional();
8
+ const optionalConversationId = z.string().trim().min(1).optional();
9
+ const roadmapTaskSchema = z.object({
10
+ id: z.number().int().positive(),
11
+ number: z.string().trim().optional(),
12
+ title: z.string().trim().min(1),
13
+ status: z.enum(["pending", "in-progress", "done"]),
14
+ pinned: z.boolean().optional()
15
+ });
16
+ const roadmapSchema = z.object({
17
+ objective: z.string(),
18
+ tasks: z.array(roadmapTaskSchema)
19
+ });
20
+ export function registerTools(server, contextStore, gateway) {
21
+ server.registerTool("golutra-get-context", {
22
+ title: "Get Golutra MCP context",
23
+ description: "Read the current default golutra-cli path, profile, workspace path, and timeout."
24
+ }, () => buildToolSuccess("Current MCP context.", contextStore.getSnapshot()));
25
+ server.registerTool("golutra-set-context", {
26
+ title: "Set Golutra MCP context",
27
+ description: "Update the default golutra-cli path, profile, workspace path, or timeout for later tool calls.",
28
+ inputSchema: {
29
+ cliPath: optionalCliPath,
30
+ profile: optionalProfile,
31
+ workspacePath: optionalWorkspacePath,
32
+ timeoutMs: optionalTimeout
33
+ }
34
+ }, (input) => {
35
+ try {
36
+ const nextContext = contextStore.update(input);
37
+ return buildToolSuccess("Updated MCP context.", nextContext);
38
+ }
39
+ catch (error) {
40
+ return buildToolError(error);
41
+ }
42
+ });
43
+ server.registerTool("golutra-reset-context", {
44
+ title: "Reset Golutra MCP context",
45
+ description: "Reset the stored CLI path, profile, workspace path, and timeout back to the startup environment defaults."
46
+ }, () => buildToolSuccess("Reset MCP context to startup defaults.", contextStore.reset()));
47
+ server.registerTool("golutra-diagnose", {
48
+ title: "Diagnose Golutra connectivity",
49
+ description: "Check whether golutra-cli is callable and, when workspacePath and userId are available, whether the running Golutra app accepts workspace-scoped commands.",
50
+ inputSchema: {
51
+ userId: z.string().trim().min(1).optional(),
52
+ workspacePath: optionalWorkspacePath,
53
+ profile: optionalProfile,
54
+ cliPath: optionalCliPath,
55
+ timeoutMs: optionalTimeout
56
+ }
57
+ }, async (input) => {
58
+ const runtimeContext = contextStore.resolveCommandContext(input);
59
+ const diagnosis = {
60
+ context: runtimeContext,
61
+ checks: {
62
+ cli: {
63
+ ok: false
64
+ },
65
+ app: {
66
+ ok: false,
67
+ skipped: true
68
+ }
69
+ }
70
+ };
71
+ try {
72
+ const skills = await gateway.listSkills(runtimeContext, {});
73
+ diagnosis.checks = {
74
+ ...diagnosis.checks,
75
+ cli: {
76
+ ok: true,
77
+ builtInSkillNames: Object.keys(skills.skills ?? {})
78
+ }
79
+ };
80
+ }
81
+ catch (error) {
82
+ diagnosis.checks = {
83
+ ...diagnosis.checks,
84
+ cli: {
85
+ ok: false,
86
+ error: buildToolError(error).structuredContent
87
+ }
88
+ };
89
+ return buildToolSuccess("Golutra diagnosis completed.", diagnosis);
90
+ }
91
+ const workspacePath = runtimeContext.workspacePath;
92
+ if (!workspacePath || !input.userId) {
93
+ diagnosis.checks = {
94
+ ...diagnosis.checks,
95
+ app: {
96
+ ok: false,
97
+ skipped: true,
98
+ reason: "workspacePath and userId are both required for an app-backed chat.conversations.list probe."
99
+ }
100
+ };
101
+ return buildToolSuccess("Golutra diagnosis completed.", diagnosis);
102
+ }
103
+ try {
104
+ const conversations = await gateway.listConversations(runtimeContext, {
105
+ workspacePath,
106
+ userId: input.userId
107
+ });
108
+ diagnosis.checks = {
109
+ ...diagnosis.checks,
110
+ app: {
111
+ ok: true,
112
+ skipped: false,
113
+ channelCount: Array.isArray(conversations.channels)
114
+ ? conversations.channels.length
115
+ : 0,
116
+ defaultChannelId: conversations.defaultChannelId
117
+ }
118
+ };
119
+ }
120
+ catch (error) {
121
+ diagnosis.checks = {
122
+ ...diagnosis.checks,
123
+ app: {
124
+ ok: false,
125
+ skipped: false,
126
+ error: buildToolError(error).structuredContent
127
+ }
128
+ };
129
+ }
130
+ return buildToolSuccess("Golutra diagnosis completed.", diagnosis);
131
+ });
132
+ server.registerTool("golutra-list-conversations", {
133
+ title: "List Golutra conversations",
134
+ description: "List channel and direct-message conversations visible to a workspace member.",
135
+ inputSchema: {
136
+ userId: z.string().trim().min(1),
137
+ workspacePath: optionalWorkspacePath,
138
+ profile: optionalProfile
139
+ }
140
+ }, async (input) => {
141
+ try {
142
+ const workspacePath = contextStore.requireWorkspacePath(input);
143
+ const runtimeContext = contextStore.resolveCommandContext(input);
144
+ const result = await gateway.listConversations(runtimeContext, {
145
+ workspacePath,
146
+ userId: input.userId
147
+ });
148
+ return buildToolSuccess("Listed conversations.", result);
149
+ }
150
+ catch (error) {
151
+ return buildToolError(error);
152
+ }
153
+ });
154
+ server.registerTool("golutra-list-messages", {
155
+ title: "List Golutra messages",
156
+ description: "Read recent messages from a Golutra channel or direct conversation.",
157
+ inputSchema: {
158
+ conversationId: z.string().trim().min(1),
159
+ workspacePath: optionalWorkspacePath,
160
+ profile: optionalProfile,
161
+ limit: z.number().int().positive().max(200).optional(),
162
+ beforeId: z.string().trim().min(1).optional()
163
+ }
164
+ }, async (input) => {
165
+ try {
166
+ const workspacePath = contextStore.requireWorkspacePath(input);
167
+ const runtimeContext = contextStore.resolveCommandContext(input);
168
+ const result = await gateway.listMessages(runtimeContext, {
169
+ workspacePath,
170
+ conversationId: input.conversationId,
171
+ limit: input.limit,
172
+ beforeId: input.beforeId
173
+ });
174
+ return buildToolSuccess("Listed messages.", result);
175
+ }
176
+ catch (error) {
177
+ return buildToolError(error);
178
+ }
179
+ });
180
+ server.registerTool("golutra-send-message", {
181
+ title: "Send a Golutra message",
182
+ description: "Send a Golutra chat message through golutra-cli using a structured chat.send payload.",
183
+ inputSchema: {
184
+ conversationId: z.string().trim().min(1),
185
+ senderId: z.string().trim().min(1),
186
+ text: z.string().trim().min(1),
187
+ mentionIds: z.array(z.string().trim().min(1)).min(1),
188
+ workspacePath: optionalWorkspacePath,
189
+ profile: optionalProfile
190
+ }
191
+ }, async (input) => {
192
+ try {
193
+ const workspacePath = contextStore.requireWorkspacePath(input);
194
+ const runtimeContext = contextStore.resolveCommandContext(input);
195
+ const result = await gateway.sendMessage(runtimeContext, {
196
+ workspacePath,
197
+ conversationId: input.conversationId,
198
+ senderId: input.senderId,
199
+ text: input.text,
200
+ mentionIds: input.mentionIds
201
+ });
202
+ return buildToolSuccess("Sent message.", result);
203
+ }
204
+ catch (error) {
205
+ return buildToolError(error);
206
+ }
207
+ });
208
+ server.registerTool("golutra-read-roadmap", {
209
+ title: "Read Golutra roadmap",
210
+ description: "Read the workspace roadmap or a conversation-specific roadmap through golutra-cli.",
211
+ inputSchema: {
212
+ conversationId: optionalConversationId,
213
+ workspacePath: optionalWorkspacePath,
214
+ profile: optionalProfile
215
+ }
216
+ }, async (input) => {
217
+ try {
218
+ const workspacePath = contextStore.requireWorkspacePath(input);
219
+ const runtimeContext = contextStore.resolveCommandContext(input);
220
+ const result = await gateway.readRoadmap(runtimeContext, {
221
+ workspacePath,
222
+ ...(input.conversationId ? { conversationId: input.conversationId } : {})
223
+ });
224
+ return buildToolSuccess("Read roadmap.", result);
225
+ }
226
+ catch (error) {
227
+ return buildToolError(error);
228
+ }
229
+ });
230
+ server.registerTool("golutra-update-roadmap", {
231
+ title: "Update Golutra roadmap",
232
+ description: "Replace the current workspace or conversation roadmap through golutra-cli.",
233
+ inputSchema: {
234
+ conversationId: optionalConversationId,
235
+ workspacePath: optionalWorkspacePath,
236
+ profile: optionalProfile,
237
+ readOnly: z.boolean().optional(),
238
+ roadmap: roadmapSchema
239
+ }
240
+ }, async (input) => {
241
+ try {
242
+ const workspacePath = contextStore.requireWorkspacePath(input);
243
+ const runtimeContext = contextStore.resolveCommandContext(input);
244
+ const result = await gateway.updateRoadmap(runtimeContext, {
245
+ workspacePath,
246
+ ...(input.conversationId ? { conversationId: input.conversationId } : {}),
247
+ ...(typeof input.readOnly === "boolean" ? { readOnly: input.readOnly } : {}),
248
+ roadmap: input.roadmap
249
+ });
250
+ return buildToolSuccess("Updated roadmap.", result);
251
+ }
252
+ catch (error) {
253
+ return buildToolError(error);
254
+ }
255
+ });
256
+ server.registerTool("golutra-list-skills", {
257
+ title: "List Golutra CLI skills",
258
+ description: "List built-in golutra-cli skills and optionally append workspace project skills.",
259
+ inputSchema: {
260
+ workspacePath: optionalWorkspacePath,
261
+ profile: optionalProfile
262
+ }
263
+ }, async (input) => {
264
+ try {
265
+ const runtimeContext = contextStore.resolveCommandContext(input);
266
+ const workspacePath = runtimeContext.workspacePath;
267
+ const result = await gateway.listSkills(runtimeContext, {
268
+ ...(workspacePath ? { workspacePath } : {})
269
+ });
270
+ return buildToolSuccess("Listed skills.", result);
271
+ }
272
+ catch (error) {
273
+ return buildToolError(error);
274
+ }
275
+ });
276
+ server.registerTool("golutra-get-skill", {
277
+ title: "Get Golutra CLI skill detail",
278
+ description: "Read the detailed schema for a built-in golutra-cli skill.",
279
+ inputSchema: {
280
+ skillName: z.string().trim().min(1),
281
+ profile: optionalProfile
282
+ }
283
+ }, async (input) => {
284
+ try {
285
+ const runtimeContext = contextStore.resolveCommandContext(input);
286
+ const result = await gateway.getSkill(runtimeContext, input.skillName);
287
+ return buildToolSuccess(`Loaded skill ${input.skillName}.`, result);
288
+ }
289
+ catch (error) {
290
+ return buildToolError(error);
291
+ }
292
+ });
293
+ server.registerTool("golutra-validate-skill", {
294
+ title: "Validate a Golutra skill directory",
295
+ description: "Run golutra-cli skill-validate against a local skill directory that contains SKILL.md.",
296
+ inputSchema: {
297
+ skillPath: z.string().trim().min(1),
298
+ profile: optionalProfile
299
+ }
300
+ }, async (input) => {
301
+ try {
302
+ const runtimeContext = contextStore.resolveCommandContext(input);
303
+ const result = await gateway.validateSkill(runtimeContext, input.skillPath);
304
+ return buildToolSuccess("Validated skill.", result);
305
+ }
306
+ catch (error) {
307
+ return buildToolError(error);
308
+ }
309
+ });
310
+ server.registerTool("golutra-list-project-skills", {
311
+ title: "List Golutra project skills",
312
+ description: "List only workspace-resolved project skills discovered from .golutra/skills.",
313
+ inputSchema: {
314
+ workspacePath: optionalWorkspacePath,
315
+ profile: optionalProfile
316
+ }
317
+ }, async (input) => {
318
+ try {
319
+ const workspacePath = contextStore.requireWorkspacePath(input);
320
+ const runtimeContext = contextStore.resolveCommandContext(input);
321
+ const result = await gateway.listSkills(runtimeContext, { workspacePath });
322
+ return buildToolSuccess("Listed project skills.", {
323
+ projectSkillsRoot: result.projectSkillsRoot,
324
+ projectSkills: result.projectSkills ?? [],
325
+ projectSkillsNote: result.projectSkillsNote
326
+ });
327
+ }
328
+ catch (error) {
329
+ return buildToolError(error);
330
+ }
331
+ });
332
+ server.registerTool("golutra-read-project-skill", {
333
+ title: "Read a Golutra project skill document",
334
+ description: "Discover a workspace project skill by name and return its SKILL.md content.",
335
+ inputSchema: {
336
+ skillName: z.string().trim().min(1),
337
+ workspacePath: optionalWorkspacePath,
338
+ profile: optionalProfile
339
+ }
340
+ }, async (input) => {
341
+ try {
342
+ const workspacePath = contextStore.requireWorkspacePath(input);
343
+ const runtimeContext = contextStore.resolveCommandContext(input);
344
+ const skills = await gateway.listSkills(runtimeContext, { workspacePath });
345
+ const projectSkill = findProjectSkillByName(skills, input.skillName);
346
+ const result = await readProjectSkillDocument(projectSkill);
347
+ return buildToolSuccess(`Read project skill ${input.skillName}.`, result);
348
+ }
349
+ catch (error) {
350
+ return buildToolError(error);
351
+ }
352
+ });
353
+ }
354
+ //# sourceMappingURL=toolkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolkit.js","sourceRoot":"","sources":["../../src/lib/toolkit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ export declare const GOLUTRA_PROFILES: readonly ["dev", "canary", "stable"];
2
+ export type GolutraProfile = (typeof GOLUTRA_PROFILES)[number];
3
+ export interface RuntimeContextSnapshot {
4
+ cliPath: string;
5
+ profile?: GolutraProfile | undefined;
6
+ workspacePath?: string | undefined;
7
+ timeoutMs: number;
8
+ }
9
+ export interface CommandContextInput {
10
+ cliPath?: string | undefined;
11
+ profile?: GolutraProfile | undefined;
12
+ workspacePath?: string | undefined;
13
+ timeoutMs?: number | undefined;
14
+ }
15
+ export interface CliCommandRequest {
16
+ cliPath: string;
17
+ args: string[];
18
+ timeoutMs: number;
19
+ }
20
+ export interface StructuredCommandEnvelope {
21
+ ok: boolean;
22
+ requestId?: string | undefined;
23
+ result?: {
24
+ status: string;
25
+ message?: string | undefined;
26
+ data?: unknown;
27
+ } | undefined;
28
+ error?: string | undefined;
29
+ }
30
+ export interface ListSkillsResponse {
31
+ skills?: Record<string, {
32
+ description?: string | undefined;
33
+ }> | undefined;
34
+ projectSkillsRoot?: string | undefined;
35
+ projectSkills?: ProjectSkillDescriptor[] | undefined;
36
+ projectSkillsNote?: string | undefined;
37
+ }
38
+ export interface ProjectSkillDescriptor {
39
+ name: string;
40
+ targetPath: string;
41
+ skillMdPath: string;
42
+ relativePath: string;
43
+ }
44
+ export interface SkillValidationResult {
45
+ ok?: boolean | undefined;
46
+ message?: string | undefined;
47
+ errors?: unknown[] | undefined;
48
+ }
49
+ export interface ChatConversationsListData {
50
+ channels?: unknown[] | undefined;
51
+ directs?: unknown[] | undefined;
52
+ conversations?: unknown[] | undefined;
53
+ defaultChannelId?: string | undefined;
54
+ }
55
+ export interface ChatMessagesListData {
56
+ messages?: unknown[] | undefined;
57
+ }
58
+ export interface ChatSendData {
59
+ messageId?: string | undefined;
60
+ }
61
+ export interface RoadmapResultData {
62
+ workspaceId?: string | undefined;
63
+ workspacePath?: string | undefined;
64
+ conversationId?: string | null | undefined;
65
+ roadmap?: unknown;
66
+ source?: string | undefined;
67
+ storage?: string | undefined;
68
+ warning?: string | undefined;
69
+ }
70
+ export type StructuredCommand = {
71
+ type: "chat.send";
72
+ payload: {
73
+ workspacePath: string;
74
+ conversationId: string;
75
+ senderId: string;
76
+ text: string;
77
+ mentionIds: string[];
78
+ };
79
+ } | {
80
+ type: "chat.conversations.list";
81
+ payload: {
82
+ workspacePath: string;
83
+ userId: string;
84
+ };
85
+ } | {
86
+ type: "chat.messages.list";
87
+ payload: {
88
+ workspacePath: string;
89
+ conversationId: string;
90
+ limit?: number | undefined;
91
+ beforeId?: string | undefined;
92
+ };
93
+ } | {
94
+ type: "roadmap.read";
95
+ payload: {
96
+ workspacePath: string;
97
+ conversationId?: string | undefined;
98
+ };
99
+ } | {
100
+ type: "roadmap.update";
101
+ payload: {
102
+ workspacePath: string;
103
+ conversationId?: string | undefined;
104
+ readOnly?: boolean | undefined;
105
+ roadmap: {
106
+ objective: string;
107
+ tasks: Array<{
108
+ id: number;
109
+ number?: string | undefined;
110
+ title: string;
111
+ status: "pending" | "in-progress" | "done";
112
+ pinned?: boolean | undefined;
113
+ }>;
114
+ };
115
+ };
116
+ };
@@ -0,0 +1,2 @@
1
+ export const GOLUTRA_PROFILES = ["dev", "canary", "stable"];
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC"}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "golutra-mcp",
3
+ "version": "0.1.0",
4
+ "description": "Model Context Protocol server for Golutra via golutra-cli.",
5
+ "type": "module",
6
+ "private": false,
7
+ "author": "Golutra Contributors",
8
+ "license": "Apache-2.0",
9
+ "sideEffects": false,
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/golutra/golutra-mcp.git"
13
+ },
14
+ "homepage": "https://github.com/golutra/golutra-mcp#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/golutra/golutra-mcp/issues"
17
+ },
18
+ "bin": {
19
+ "golutra-mcp": "dist/index.js"
20
+ },
21
+ "exports": {
22
+ ".": "./dist/index.js"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ ".env.example",
27
+ "README.md",
28
+ "startup_processmd.md",
29
+ "LICENSE",
30
+ "CHANGELOG.md"
31
+ ],
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "engines": {
36
+ "node": ">=20.11"
37
+ },
38
+ "keywords": [
39
+ "golutra",
40
+ "mcp",
41
+ "model-context-protocol",
42
+ "ai",
43
+ "cli"
44
+ ],
45
+ "dependencies": {
46
+ "@modelcontextprotocol/sdk": "^1.27.1",
47
+ "zod": "^3.24.0"
48
+ },
49
+ "devDependencies": {
50
+ "@eslint/js": "^9.21.0",
51
+ "@types/node": "^22.13.0",
52
+ "eslint": "^9.21.0",
53
+ "globals": "^15.15.0",
54
+ "tsx": "^4.19.0",
55
+ "typescript": "^5.8.0",
56
+ "typescript-eslint": "^8.25.0",
57
+ "vitest": "^3.0.0"
58
+ },
59
+ "scripts": {
60
+ "build": "tsc -p tsconfig.json",
61
+ "check": "npm run lint && npm run typecheck && npm run test && npm run build",
62
+ "clean": "node --eval \"for (const path of ['dist','coverage']) { try { require('node:fs').rmSync(path, { recursive: true, force: true }); } catch {} }\"",
63
+ "dev": "tsx src/index.ts",
64
+ "lint": "eslint .",
65
+ "package:check": "npm pack --dry-run",
66
+ "prepack": "npm run build",
67
+ "test:e2e": "npm run build && node scripts/e2e-smoke.mjs",
68
+ "test": "vitest run",
69
+ "typecheck": "tsc --noEmit"
70
+ }
71
+ }