@tlog/mcp 0.1.3
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 +281 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -0
- package/dist/core-tools.d.ts +146 -0
- package/dist/core-tools.d.ts.map +1 -0
- package/dist/core-tools.js +884 -0
- package/dist/core-tools.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/normalization.d.ts +5 -0
- package/dist/normalization.d.ts.map +1 -0
- package/dist/normalization.js +186 -0
- package/dist/normalization.js.map +1 -0
- package/dist/runtime.d.ts +4 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +19 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-contract.d.ts +15 -0
- package/dist/schema-contract.d.ts.map +1 -0
- package/dist/schema-contract.js +439 -0
- package/dist/schema-contract.js.map +1 -0
- package/dist/schemas.d.ts +172 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +154 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +594 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +14 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +146 -0
- package/dist/utils.js.map +1 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# @tlog/mcp
|
|
2
|
+
|
|
3
|
+
MCP server for TLog (YAML-first test management).
|
|
4
|
+
|
|
5
|
+
This server exposes schema-safe tools for creating, updating, validating, and organizing TLog suites/cases from MCP-capable clients.
|
|
6
|
+
|
|
7
|
+
## Highlights
|
|
8
|
+
|
|
9
|
+
- Strict schema-first workflows (`suite`, `case`, `issue`) via shared validation.
|
|
10
|
+
- Safe write model (`write=false` preview, then `write=true` apply).
|
|
11
|
+
- ID-based operations (not filename-dependent).
|
|
12
|
+
- Context-guided generation with missing-context feedback.
|
|
13
|
+
- End-to-end maintenance tools (list, resolve, sync, stats, validate, delete).
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
## Option 1: Run directly with npx (recommended)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx @tlog/mcp --stdio
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Option 2: Install globally
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g @tlog/mcp
|
|
27
|
+
tlog-mcp --stdio
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Option 3: Build from source (local development)
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm run --workspace @tlog/mcp typecheck
|
|
34
|
+
npm run --workspace @tlog/mcp build
|
|
35
|
+
npm run --workspace @tlog/mcp test
|
|
36
|
+
node packages/mcp/dist/index.js --stdio
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Startup Contract
|
|
40
|
+
|
|
41
|
+
This server currently supports stdio transport.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
tlog-mcp --stdio
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If `--stdio` is omitted, startup fails with usage guidance.
|
|
48
|
+
|
|
49
|
+
## Client Configuration
|
|
50
|
+
|
|
51
|
+
All client examples below use stdio and pass `--stdio` explicitly.
|
|
52
|
+
|
|
53
|
+
Important:
|
|
54
|
+
|
|
55
|
+
- Use an absolute path for local `dist/index.js` execution.
|
|
56
|
+
- Tool inputs should include an absolute `workspaceRoot`.
|
|
57
|
+
|
|
58
|
+
## GitHub Copilot (MCP)
|
|
59
|
+
|
|
60
|
+
Example MCP server entry:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"mcpServers": {
|
|
65
|
+
"tlog": {
|
|
66
|
+
"command": "npx",
|
|
67
|
+
"args": ["-y", "@tlog/mcp", "--stdio"]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
For local build usage:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"mcpServers": {
|
|
78
|
+
"tlog": {
|
|
79
|
+
"command": "node",
|
|
80
|
+
"args": ["/absolute/path/to/packages/mcp/dist/index.js", "--stdio"]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Claude Code
|
|
87
|
+
|
|
88
|
+
Example MCP server entry:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"mcpServers": {
|
|
93
|
+
"tlog": {
|
|
94
|
+
"command": "npx",
|
|
95
|
+
"args": ["-y", "@tlog/mcp", "--stdio"]
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Local build variant:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"mcpServers": {
|
|
106
|
+
"tlog": {
|
|
107
|
+
"command": "node",
|
|
108
|
+
"args": ["/absolute/path/to/packages/mcp/dist/index.js", "--stdio"]
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Codex
|
|
115
|
+
|
|
116
|
+
Example MCP server entry:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"mcpServers": {
|
|
121
|
+
"tlog": {
|
|
122
|
+
"command": "npx",
|
|
123
|
+
"args": ["-y", "@tlog/mcp", "--stdio"]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Local build variant:
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"mcpServers": {
|
|
134
|
+
"tlog": {
|
|
135
|
+
"command": "node",
|
|
136
|
+
"args": ["/absolute/path/to/packages/mcp/dist/index.js", "--stdio"]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Note: exact config file location/UI differs by client version. Use each client's MCP settings entry point, then apply the same `command`/`args` payload.
|
|
143
|
+
|
|
144
|
+
## Recommended Agent Call Flow
|
|
145
|
+
|
|
146
|
+
A robust workflow (inspired by production-grade MCP servers):
|
|
147
|
+
|
|
148
|
+
1. `get_tlog_schema` (topic: `all` or specific).
|
|
149
|
+
2. `get_tlog_schema_examples` for concrete payload patterns.
|
|
150
|
+
3. `collect_missing_context` before mutation.
|
|
151
|
+
4. Mutation tools with `write=false` first.
|
|
152
|
+
5. Apply with `write=true`.
|
|
153
|
+
6. `validate_tests_directory` to verify final consistency.
|
|
154
|
+
|
|
155
|
+
## Feature Overview
|
|
156
|
+
|
|
157
|
+
## 1) Schema and Guidance Layer
|
|
158
|
+
|
|
159
|
+
- Canonical schema access and examples.
|
|
160
|
+
- Prompt templates for schema-safe usage.
|
|
161
|
+
- Missing-context detection and guided follow-up questions.
|
|
162
|
+
|
|
163
|
+
Resources:
|
|
164
|
+
|
|
165
|
+
- `tlog_schema` (`tlog://schema`)
|
|
166
|
+
- `tlog_schema_examples` (`tlog://schema/examples`)
|
|
167
|
+
|
|
168
|
+
Prompts:
|
|
169
|
+
|
|
170
|
+
- `tlog_instruction_template`
|
|
171
|
+
- `tlog_schema_usage_template` (`create_suite`, `create_case`, `update_case`)
|
|
172
|
+
|
|
173
|
+
Tools:
|
|
174
|
+
|
|
175
|
+
- `get_tlog_schema`
|
|
176
|
+
- `get_tlog_schema_examples`
|
|
177
|
+
- `collect_missing_context`
|
|
178
|
+
|
|
179
|
+
## 2) Authoring and Mutation
|
|
180
|
+
|
|
181
|
+
Generation-oriented:
|
|
182
|
+
|
|
183
|
+
- `create_suite_from_prompt`
|
|
184
|
+
- `create_testcase_from_prompt`
|
|
185
|
+
- `expand_testcase`
|
|
186
|
+
- `organize_test_execution_targets`
|
|
187
|
+
|
|
188
|
+
Structured create/update:
|
|
189
|
+
|
|
190
|
+
- `create_suite_file`
|
|
191
|
+
- `create_case_file`
|
|
192
|
+
- `update_suite`
|
|
193
|
+
- `update_case`
|
|
194
|
+
|
|
195
|
+
Template/bootstrap:
|
|
196
|
+
|
|
197
|
+
- `init_tests_directory`
|
|
198
|
+
- `create_template_directory`
|
|
199
|
+
|
|
200
|
+
## 3) Discovery and Operations
|
|
201
|
+
|
|
202
|
+
- `list_templates`
|
|
203
|
+
- `list_suites`
|
|
204
|
+
- `list_cases`
|
|
205
|
+
- `resolve_entity_path_by_id`
|
|
206
|
+
- `resolve_related_targets`
|
|
207
|
+
- `sync_related`
|
|
208
|
+
- `get_workspace_snapshot`
|
|
209
|
+
- `suite_stats`
|
|
210
|
+
- `validate_tests_directory`
|
|
211
|
+
|
|
212
|
+
## 4) Safety-Critical Delete Operations
|
|
213
|
+
|
|
214
|
+
- `delete_suite`
|
|
215
|
+
- `delete_case`
|
|
216
|
+
|
|
217
|
+
Safety contract:
|
|
218
|
+
|
|
219
|
+
- `dryRun=true` returns deletion plan and impact.
|
|
220
|
+
- Actual deletion requires both:
|
|
221
|
+
- `dryRun=false`
|
|
222
|
+
- `confirm=true`
|
|
223
|
+
|
|
224
|
+
## Tool Catalog
|
|
225
|
+
|
|
226
|
+
For quick scanning, here is the complete tool set currently registered by this server:
|
|
227
|
+
|
|
228
|
+
- `get_tlog_schema`
|
|
229
|
+
- `get_tlog_schema_examples`
|
|
230
|
+
- `collect_missing_context`
|
|
231
|
+
- `create_suite_from_prompt`
|
|
232
|
+
- `create_testcase_from_prompt`
|
|
233
|
+
- `expand_testcase`
|
|
234
|
+
- `organize_test_execution_targets`
|
|
235
|
+
- `init_tests_directory`
|
|
236
|
+
- `create_template_directory`
|
|
237
|
+
- `create_suite_file`
|
|
238
|
+
- `create_case_file`
|
|
239
|
+
- `update_suite`
|
|
240
|
+
- `update_case`
|
|
241
|
+
- `validate_tests_directory`
|
|
242
|
+
- `list_templates`
|
|
243
|
+
- `list_suites`
|
|
244
|
+
- `list_cases`
|
|
245
|
+
- `resolve_entity_path_by_id`
|
|
246
|
+
- `resolve_related_targets`
|
|
247
|
+
- `sync_related`
|
|
248
|
+
- `get_workspace_snapshot`
|
|
249
|
+
- `suite_stats`
|
|
250
|
+
- `delete_suite`
|
|
251
|
+
- `delete_case`
|
|
252
|
+
|
|
253
|
+
## Usage Notes for LLM Clients
|
|
254
|
+
|
|
255
|
+
- Always pass absolute `workspaceRoot`.
|
|
256
|
+
- Prefer id-based workflows over filename assumptions.
|
|
257
|
+
- Avoid unknown fields in `patch`/create payloads.
|
|
258
|
+
- Handle `missing_required_context` responses by asking follow-up questions from returned guidance.
|
|
259
|
+
- For `create_testcase_from_prompt`, prioritize `context.tests[].expected`.
|
|
260
|
+
- Use `context.expected` only as fallback.
|
|
261
|
+
|
|
262
|
+
## Error Handling Expectations
|
|
263
|
+
|
|
264
|
+
- Validation and not-found errors are returned as tool errors with stable error codes.
|
|
265
|
+
- Write operations should be treated as two-phase (`preview` then `apply`).
|
|
266
|
+
- If path resolution fails, verify `workspaceRoot` and `dir` are absolute/correct.
|
|
267
|
+
|
|
268
|
+
## Development
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
npm run --workspace @tlog/mcp typecheck
|
|
272
|
+
npm run --workspace @tlog/mcp test
|
|
273
|
+
npm run --workspace @tlog/mcp test:coverage
|
|
274
|
+
npm run --workspace @tlog/mcp build
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Package
|
|
278
|
+
|
|
279
|
+
- Name: `@tlog/mcp`
|
|
280
|
+
- Bin: `tlog-mcp`
|
|
281
|
+
- Transport: stdio (`--stdio`)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,aAAa,CAAC;AAC1C,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,YAAY,QAAwC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { type TestCase, type Suite } from "@tlog/shared";
|
|
2
|
+
export declare function createSuiteFromPromptCore(input: {
|
|
3
|
+
workspaceRoot: string;
|
|
4
|
+
targetDir: string;
|
|
5
|
+
instruction: string;
|
|
6
|
+
defaults?: Partial<Suite>;
|
|
7
|
+
write?: boolean;
|
|
8
|
+
}): Promise<Record<string, unknown>>;
|
|
9
|
+
export declare function createTestcaseFromPromptCore(input: {
|
|
10
|
+
workspaceRoot: string;
|
|
11
|
+
suiteDir: string;
|
|
12
|
+
instruction: string;
|
|
13
|
+
context?: Record<string, unknown>;
|
|
14
|
+
write?: boolean;
|
|
15
|
+
}): Promise<Record<string, unknown>>;
|
|
16
|
+
export declare function expandTestcaseCore(input: {
|
|
17
|
+
workspaceRoot: string;
|
|
18
|
+
testcasePath: string;
|
|
19
|
+
instruction: string;
|
|
20
|
+
preserveFields?: string[];
|
|
21
|
+
write?: boolean;
|
|
22
|
+
}): Promise<Record<string, unknown>>;
|
|
23
|
+
export declare function organizeExecutionTargetsCore(input: {
|
|
24
|
+
workspaceRoot: string;
|
|
25
|
+
testcasePath?: string;
|
|
26
|
+
testcase?: Record<string, unknown>;
|
|
27
|
+
strategy: "risk-based" | "flow-based" | "component-based";
|
|
28
|
+
mode: "replace" | "append" | "auto";
|
|
29
|
+
write?: boolean;
|
|
30
|
+
}): Promise<Record<string, unknown>>;
|
|
31
|
+
export declare function initTestsDirectoryCore(input: {
|
|
32
|
+
workspaceRoot: string;
|
|
33
|
+
outputDir?: string;
|
|
34
|
+
templateDir?: string | null;
|
|
35
|
+
write?: boolean;
|
|
36
|
+
}): Promise<Record<string, unknown>>;
|
|
37
|
+
export declare function createTemplateDirectoryCore(input: {
|
|
38
|
+
workspaceRoot: string;
|
|
39
|
+
outputDir: string;
|
|
40
|
+
fromDir?: string | null;
|
|
41
|
+
write?: boolean;
|
|
42
|
+
}): Promise<Record<string, unknown>>;
|
|
43
|
+
export declare function createSuiteFileCore(input: {
|
|
44
|
+
workspaceRoot: string;
|
|
45
|
+
dir: string;
|
|
46
|
+
id: string;
|
|
47
|
+
title: string;
|
|
48
|
+
fields?: Partial<Suite>;
|
|
49
|
+
write?: boolean;
|
|
50
|
+
}): Promise<Record<string, unknown>>;
|
|
51
|
+
export declare function createCaseFileCore(input: {
|
|
52
|
+
workspaceRoot: string;
|
|
53
|
+
dir: string;
|
|
54
|
+
id: string;
|
|
55
|
+
title: string;
|
|
56
|
+
fields?: Partial<TestCase>;
|
|
57
|
+
write?: boolean;
|
|
58
|
+
}): Promise<Record<string, unknown>>;
|
|
59
|
+
export declare function updateSuiteCore(input: {
|
|
60
|
+
workspaceRoot: string;
|
|
61
|
+
dir: string;
|
|
62
|
+
id: string;
|
|
63
|
+
patch: Partial<Suite>;
|
|
64
|
+
write?: boolean;
|
|
65
|
+
}): Promise<Record<string, unknown>>;
|
|
66
|
+
export declare function updateCaseCore(input: {
|
|
67
|
+
workspaceRoot: string;
|
|
68
|
+
dir: string;
|
|
69
|
+
id: string;
|
|
70
|
+
patch: Partial<TestCase>;
|
|
71
|
+
write?: boolean;
|
|
72
|
+
}): Promise<Record<string, unknown>>;
|
|
73
|
+
export declare function validateTestsDirectoryCore(input: {
|
|
74
|
+
workspaceRoot: string;
|
|
75
|
+
dir: string;
|
|
76
|
+
}): Promise<Record<string, unknown>>;
|
|
77
|
+
export declare function listTemplatesCore(input: {
|
|
78
|
+
workspaceRoot: string;
|
|
79
|
+
dir: string;
|
|
80
|
+
}): Promise<Record<string, unknown>>;
|
|
81
|
+
export declare function listSuitesCore(input: {
|
|
82
|
+
workspaceRoot: string;
|
|
83
|
+
dir: string;
|
|
84
|
+
filters?: {
|
|
85
|
+
id?: string;
|
|
86
|
+
tag?: string;
|
|
87
|
+
};
|
|
88
|
+
}): Promise<Record<string, unknown>>;
|
|
89
|
+
export declare function listCasesCore(input: {
|
|
90
|
+
workspaceRoot: string;
|
|
91
|
+
dir: string;
|
|
92
|
+
filters?: {
|
|
93
|
+
id?: string;
|
|
94
|
+
status?: string;
|
|
95
|
+
tags?: string[];
|
|
96
|
+
owners?: string[];
|
|
97
|
+
scopedOnly?: boolean;
|
|
98
|
+
issueHas?: string;
|
|
99
|
+
issueStatus?: string;
|
|
100
|
+
};
|
|
101
|
+
}): Promise<Record<string, unknown>>;
|
|
102
|
+
export declare function resolveEntityPathByIdCore(input: {
|
|
103
|
+
workspaceRoot: string;
|
|
104
|
+
dir: string;
|
|
105
|
+
id: string;
|
|
106
|
+
}): Promise<Record<string, unknown>>;
|
|
107
|
+
export declare function resolveRelatedTargetsCore(input: {
|
|
108
|
+
workspaceRoot: string;
|
|
109
|
+
dir: string;
|
|
110
|
+
sourceId: string;
|
|
111
|
+
relatedIds?: string[];
|
|
112
|
+
}): Promise<Record<string, unknown>>;
|
|
113
|
+
export declare function syncRelatedCore(input: {
|
|
114
|
+
workspaceRoot: string;
|
|
115
|
+
dir: string;
|
|
116
|
+
sourceId: string;
|
|
117
|
+
relatedIds?: string[];
|
|
118
|
+
mode: "one-way" | "two-way";
|
|
119
|
+
write?: boolean;
|
|
120
|
+
}): Promise<Record<string, unknown>>;
|
|
121
|
+
export declare function getWorkspaceSnapshotCore(input: {
|
|
122
|
+
workspaceRoot: string;
|
|
123
|
+
dir: string;
|
|
124
|
+
excludeUnscoped?: boolean;
|
|
125
|
+
}): Promise<Record<string, unknown>>;
|
|
126
|
+
export declare function suiteStatsCore(input: {
|
|
127
|
+
workspaceRoot: string;
|
|
128
|
+
dir: string;
|
|
129
|
+
suiteId: string;
|
|
130
|
+
excludeUnscoped?: boolean;
|
|
131
|
+
}): Promise<Record<string, unknown>>;
|
|
132
|
+
export declare function deleteSuiteCore(input: {
|
|
133
|
+
workspaceRoot: string;
|
|
134
|
+
dir: string;
|
|
135
|
+
id: string;
|
|
136
|
+
dryRun: boolean;
|
|
137
|
+
confirm?: boolean;
|
|
138
|
+
}): Promise<Record<string, unknown>>;
|
|
139
|
+
export declare function deleteCaseCore(input: {
|
|
140
|
+
workspaceRoot: string;
|
|
141
|
+
dir: string;
|
|
142
|
+
id: string;
|
|
143
|
+
dryRun: boolean;
|
|
144
|
+
confirm?: boolean;
|
|
145
|
+
}): Promise<Record<string, unknown>>;
|
|
146
|
+
//# sourceMappingURL=core-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-tools.d.ts","sourceRoot":"","sources":["../src/core-tools.ts"],"names":[],"mappings":"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"}
|