@firfi/huly-mcp 0.8.0 → 0.9.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.
- package/README.md +11 -1
- package/dist/index.cjs +25858 -25303
- package/package.json +31 -19
- package/dist/index.js +0 -116694
- package/dist/src/config/config.d.ts +0 -94
- package/dist/src/config/config.d.ts.map +0 -1
- package/dist/src/config/config.js +0 -247
- package/dist/src/config/config.js.map +0 -1
- package/dist/src/domain/schemas.d.ts +0 -256
- package/dist/src/domain/schemas.d.ts.map +0 -1
- package/dist/src/domain/schemas.js +0 -275
- package/dist/src/domain/schemas.js.map +0 -1
- package/dist/src/huly/client.d.ts +0 -63
- package/dist/src/huly/client.d.ts.map +0 -1
- package/dist/src/huly/client.js +0 -149
- package/dist/src/huly/client.js.map +0 -1
- package/dist/src/huly/errors.d.ts +0 -133
- package/dist/src/huly/errors.d.ts.map +0 -1
- package/dist/src/huly/errors.js +0 -108
- package/dist/src/huly/errors.js.map +0 -1
- package/dist/src/huly/operations/issues.d.ts +0 -122
- package/dist/src/huly/operations/issues.d.ts.map +0 -1
- package/dist/src/huly/operations/issues.js +0 -627
- package/dist/src/huly/operations/issues.js.map +0 -1
- package/dist/src/index.d.ts +0 -43
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -154
- package/dist/src/index.js.map +0 -1
- package/dist/src/mcp/error-mapping.d.ts +0 -67
- package/dist/src/mcp/error-mapping.d.ts.map +0 -1
- package/dist/src/mcp/error-mapping.js +0 -195
- package/dist/src/mcp/error-mapping.js.map +0 -1
- package/dist/src/mcp/server.d.ts +0 -86
- package/dist/src/mcp/server.d.ts.map +0 -1
- package/dist/src/mcp/server.js +0 -216
- package/dist/src/mcp/server.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/src/mcp/server.js
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Server infrastructure for Huly MCP server.
|
|
3
|
-
*
|
|
4
|
-
* Provides:
|
|
5
|
-
* - McpServer service wrapping @modelcontextprotocol/sdk
|
|
6
|
-
* - Tool registration with JSON Schema from Effect schemas
|
|
7
|
-
* - Transport selection (stdio/HTTP)
|
|
8
|
-
* - Graceful shutdown handling
|
|
9
|
-
*
|
|
10
|
-
* @module
|
|
11
|
-
*/
|
|
12
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
13
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
14
|
-
import { ListToolsRequestSchema, CallToolRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
15
|
-
import { Context, Effect, Layer, Schema, Exit, ParseResult } from "effect";
|
|
16
|
-
import { HulyClient } from "../huly/client.js";
|
|
17
|
-
import { listIssues, getIssue, createIssue, updateIssue, addLabel, } from "../huly/operations/issues.js";
|
|
18
|
-
import { listIssuesParamsJsonSchema, getIssueParamsJsonSchema, createIssueParamsJsonSchema, updateIssueParamsJsonSchema, addLabelParamsJsonSchema, parseListIssuesParams, parseGetIssueParams, parseCreateIssueParams, parseUpdateIssueParams, parseAddLabelParams, } from "../domain/schemas.js";
|
|
19
|
-
import { mapCauseToMcp, createSuccessResponse, createUnknownToolError, toMcpResponse, } from "./error-mapping.js";
|
|
20
|
-
/**
|
|
21
|
-
* MCP server error.
|
|
22
|
-
*/
|
|
23
|
-
export class McpServerError extends Schema.TaggedError()("McpServerError", {
|
|
24
|
-
message: Schema.String,
|
|
25
|
-
cause: Schema.optional(Schema.Defect),
|
|
26
|
-
}) {
|
|
27
|
-
}
|
|
28
|
-
// --- Tool Definitions ---
|
|
29
|
-
/**
|
|
30
|
-
* Tool definitions for MCP.
|
|
31
|
-
* Maps tool names to their descriptions and JSON schemas.
|
|
32
|
-
*/
|
|
33
|
-
export const TOOL_DEFINITIONS = {
|
|
34
|
-
list_issues: {
|
|
35
|
-
name: "list_issues",
|
|
36
|
-
description: "Query Huly issues with optional filters. Returns issues sorted by modification date (newest first). Supports filtering by project, status, assignee, and milestone.",
|
|
37
|
-
inputSchema: listIssuesParamsJsonSchema,
|
|
38
|
-
},
|
|
39
|
-
get_issue: {
|
|
40
|
-
name: "get_issue",
|
|
41
|
-
description: "Retrieve full details for a Huly issue including markdown description. Use this to view issue content, comments, or full metadata.",
|
|
42
|
-
inputSchema: getIssueParamsJsonSchema,
|
|
43
|
-
},
|
|
44
|
-
create_issue: {
|
|
45
|
-
name: "create_issue",
|
|
46
|
-
description: "Create a new issue in a Huly project. Description supports markdown formatting. Returns the created issue identifier.",
|
|
47
|
-
inputSchema: createIssueParamsJsonSchema,
|
|
48
|
-
},
|
|
49
|
-
update_issue: {
|
|
50
|
-
name: "update_issue",
|
|
51
|
-
description: "Update fields on an existing Huly issue. Only provided fields are modified. Description updates support markdown.",
|
|
52
|
-
inputSchema: updateIssueParamsJsonSchema,
|
|
53
|
-
},
|
|
54
|
-
add_issue_label: {
|
|
55
|
-
name: "add_issue_label",
|
|
56
|
-
description: "Add a tag/label to a Huly issue. Creates the tag if it doesn't exist in the project.",
|
|
57
|
-
inputSchema: addLabelParamsJsonSchema,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* MCP Server service tag.
|
|
62
|
-
*/
|
|
63
|
-
export class McpServerService extends Context.Tag("@hulymcp/McpServer")() {
|
|
64
|
-
/**
|
|
65
|
-
* Create the MCP server layer.
|
|
66
|
-
* Requires HulyClient to be available.
|
|
67
|
-
*/
|
|
68
|
-
static layer(config) {
|
|
69
|
-
return Layer.effect(McpServerService, Effect.gen(function* () {
|
|
70
|
-
const hulyClient = yield* HulyClient;
|
|
71
|
-
// Create the MCP server instance using low-level Server API
|
|
72
|
-
const server = new Server({
|
|
73
|
-
name: "huly-mcp",
|
|
74
|
-
version: "1.0.0",
|
|
75
|
-
}, {
|
|
76
|
-
capabilities: {
|
|
77
|
-
tools: {},
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
// Register tool list handler
|
|
81
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
82
|
-
tools: Object.values(TOOL_DEFINITIONS).map((tool) => ({
|
|
83
|
-
name: tool.name,
|
|
84
|
-
description: tool.description,
|
|
85
|
-
inputSchema: tool.inputSchema,
|
|
86
|
-
})),
|
|
87
|
-
}));
|
|
88
|
-
// Register tool call handler
|
|
89
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
90
|
-
const { name, arguments: args } = request.params;
|
|
91
|
-
const result = await handleToolCall(name, args ?? {}, hulyClient);
|
|
92
|
-
// Convert internal response to MCP SDK format
|
|
93
|
-
return toMcpResponse(result);
|
|
94
|
-
});
|
|
95
|
-
// Track server state
|
|
96
|
-
let isRunning = false;
|
|
97
|
-
const operations = {
|
|
98
|
-
run: () => Effect.gen(function* () {
|
|
99
|
-
if (isRunning) {
|
|
100
|
-
return yield* new McpServerError({
|
|
101
|
-
message: "MCP server is already running",
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
isRunning = true;
|
|
105
|
-
// Create and connect transport based on config
|
|
106
|
-
if (config.transport === "stdio") {
|
|
107
|
-
const transport = new StdioServerTransport();
|
|
108
|
-
yield* Effect.tryPromise({
|
|
109
|
-
try: () => server.connect(transport),
|
|
110
|
-
catch: (e) => new McpServerError({
|
|
111
|
-
message: `Failed to connect stdio transport: ${String(e)}`,
|
|
112
|
-
cause: e,
|
|
113
|
-
}),
|
|
114
|
-
});
|
|
115
|
-
// Keep running until stopped
|
|
116
|
-
yield* Effect.async((resume) => {
|
|
117
|
-
// Set up signal handlers for graceful shutdown
|
|
118
|
-
const cleanup = () => {
|
|
119
|
-
isRunning = false;
|
|
120
|
-
resume(Effect.void);
|
|
121
|
-
};
|
|
122
|
-
process.on("SIGINT", cleanup);
|
|
123
|
-
process.on("SIGTERM", cleanup);
|
|
124
|
-
// Return cleanup function for when Effect is interrupted
|
|
125
|
-
return Effect.sync(() => {
|
|
126
|
-
process.off("SIGINT", cleanup);
|
|
127
|
-
process.off("SIGTERM", cleanup);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
// Close server on shutdown
|
|
131
|
-
yield* Effect.tryPromise({
|
|
132
|
-
try: () => server.close(),
|
|
133
|
-
catch: (e) => new McpServerError({
|
|
134
|
-
message: `Failed to close server: ${String(e)}`,
|
|
135
|
-
cause: e,
|
|
136
|
-
}),
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
else if (config.transport === "http") {
|
|
140
|
-
// HTTP transport - for future implementation
|
|
141
|
-
// The MCP SDK provides SSE and StreamableHttp transports
|
|
142
|
-
return yield* new McpServerError({
|
|
143
|
-
message: "HTTP transport not yet implemented",
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
}),
|
|
147
|
-
stop: () => Effect.gen(function* () {
|
|
148
|
-
if (!isRunning) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
isRunning = false;
|
|
152
|
-
yield* Effect.tryPromise({
|
|
153
|
-
try: () => server.close(),
|
|
154
|
-
catch: (e) => new McpServerError({
|
|
155
|
-
message: `Failed to stop server: ${String(e)}`,
|
|
156
|
-
cause: e,
|
|
157
|
-
}),
|
|
158
|
-
});
|
|
159
|
-
}),
|
|
160
|
-
};
|
|
161
|
-
return operations;
|
|
162
|
-
}));
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Create a test layer for unit testing.
|
|
166
|
-
*/
|
|
167
|
-
static testLayer(mockOperations) {
|
|
168
|
-
const defaultOps = {
|
|
169
|
-
run: () => Effect.void,
|
|
170
|
-
stop: () => Effect.void,
|
|
171
|
-
};
|
|
172
|
-
return Layer.succeed(McpServerService, { ...defaultOps, ...mockOperations });
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
// --- Tool Handler ---
|
|
176
|
-
/**
|
|
177
|
-
* Handle a tool call by routing to the appropriate domain operation.
|
|
178
|
-
* Returns MCP protocol response with proper error codes.
|
|
179
|
-
*/
|
|
180
|
-
async function handleToolCall(toolName, args, hulyClient) {
|
|
181
|
-
switch (toolName) {
|
|
182
|
-
case "list_issues":
|
|
183
|
-
return runToolHandler(toolName, args, parseListIssuesParams, (params) => listIssues(params), hulyClient);
|
|
184
|
-
case "get_issue":
|
|
185
|
-
return runToolHandler(toolName, args, parseGetIssueParams, (params) => getIssue(params), hulyClient);
|
|
186
|
-
case "create_issue":
|
|
187
|
-
return runToolHandler(toolName, args, parseCreateIssueParams, (params) => createIssue(params), hulyClient);
|
|
188
|
-
case "update_issue":
|
|
189
|
-
return runToolHandler(toolName, args, parseUpdateIssueParams, (params) => updateIssue(params), hulyClient);
|
|
190
|
-
case "add_issue_label":
|
|
191
|
-
return runToolHandler(toolName, args, parseAddLabelParams, (params) => addLabel(params), hulyClient);
|
|
192
|
-
default:
|
|
193
|
-
return createUnknownToolError(toolName);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
// --- Tool Handler Execution ---
|
|
197
|
-
/**
|
|
198
|
-
* Execute a tool handler with proper error mapping to MCP protocol.
|
|
199
|
-
* Uses the error-mapping module for consistent error transformation.
|
|
200
|
-
*/
|
|
201
|
-
async function runToolHandler(toolName, args, parse, operation, hulyClient) {
|
|
202
|
-
// Parse and validate input
|
|
203
|
-
const parseResult = await Effect.runPromiseExit(parse(args));
|
|
204
|
-
if (Exit.isFailure(parseResult)) {
|
|
205
|
-
return mapCauseToMcp(parseResult.cause, toolName);
|
|
206
|
-
}
|
|
207
|
-
const params = parseResult.value;
|
|
208
|
-
// Execute the operation with HulyClient provided
|
|
209
|
-
const operationResult = await Effect.runPromiseExit(operation(params).pipe(Effect.provideService(HulyClient, hulyClient)));
|
|
210
|
-
if (Exit.isFailure(operationResult)) {
|
|
211
|
-
return mapCauseToMcp(operationResult.cause, toolName);
|
|
212
|
-
}
|
|
213
|
-
// Success - create response
|
|
214
|
-
return createSuccessResponse(operationResult.value);
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|