@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 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,4 @@
1
+ export declare const MCP_SERVER_NAME = "tlog-mcp";
2
+ export declare const MCP_SERVER_VERSION = "0.1.0";
3
+ export declare const DEFAULT_DATE: string;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -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,4 @@
1
+ export const MCP_SERVER_NAME = "tlog-mcp";
2
+ export const MCP_SERVER_VERSION = "0.1.0";
3
+ export const DEFAULT_DATE = new Date().toISOString().slice(0, 10);
4
+ //# sourceMappingURL=constants.js.map
@@ -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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"}