@yawlabs/ctxlint 0.5.0 → 0.7.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/.pre-commit-hooks.yaml +8 -0
- package/AGENT_SESSION_LINT_SPEC.md +366 -0
- package/CONTEXT_LINT_SPEC.md +613 -0
- package/MCP_CONFIG_LINT_SPEC.md +396 -0
- package/README.md +77 -17
- package/agent-session-lint-rules.json +157 -0
- package/context-lint-rules.json +415 -0
- package/dist/{chunk-FHTSMC5D.js → chunk-DYPYGTPV.js} +555 -23
- package/dist/chunk-ZXMDA7VB.js +16 -0
- package/dist/{cli-7IBRPDA6.js → cli-7DNRBGDO.js} +23 -8
- package/dist/index.js +3 -3
- package/dist/mcp/chunk-MCKGQKYU.js +15 -0
- package/dist/mcp/server.js +595 -25
- package/dist/mcp/tiktoken-MWTCLHI2.js +465 -0
- package/dist/{server-IFZ3VEK3.js → server-ADUSCPPU.js} +44 -3
- package/dist/tiktoken-CCNRJMFQ.js +466 -0
- package/mcp-config-lint-rules.json +413 -0
- package/package.json +33 -8
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"specVersion": "1.0.0-draft",
|
|
4
|
+
"specDate": "2026-04-07",
|
|
5
|
+
"mcpSpecCompatibility": "2025-11-25",
|
|
6
|
+
"repository": "https://github.com/YawLabs/ctxlint",
|
|
7
|
+
"categories": [
|
|
8
|
+
{
|
|
9
|
+
"id": "mcp-schema",
|
|
10
|
+
"name": "Schema Validation",
|
|
11
|
+
"description": "Validates that MCP config files are well-formed JSON with correct structure for their target client."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "mcp-security",
|
|
15
|
+
"name": "Security",
|
|
16
|
+
"description": "Detects hardcoded secrets and insecure transport in MCP config files."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "mcp-commands",
|
|
20
|
+
"name": "Command Validation",
|
|
21
|
+
"description": "Validates stdio server commands and file path arguments."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "mcp-deprecated",
|
|
25
|
+
"name": "Deprecation",
|
|
26
|
+
"description": "Flags deprecated MCP transport protocols and patterns."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "mcp-env",
|
|
30
|
+
"name": "Environment Variables",
|
|
31
|
+
"description": "Validates environment variable references for correctness and client compatibility."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "mcp-urls",
|
|
35
|
+
"name": "URL Validation",
|
|
36
|
+
"description": "Validates remote MCP server URLs."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "mcp-consistency",
|
|
40
|
+
"name": "Cross-File Consistency",
|
|
41
|
+
"description": "Compares MCP configs across multiple client config files in the same project."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "mcp-redundancy",
|
|
45
|
+
"name": "Redundancy",
|
|
46
|
+
"description": "Flags unnecessary or stale MCP config entries."
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"rules": [
|
|
50
|
+
{
|
|
51
|
+
"id": "mcp-schema/invalid-json",
|
|
52
|
+
"category": "mcp-schema",
|
|
53
|
+
"severity": "error",
|
|
54
|
+
"description": "MCP config file is not valid JSON.",
|
|
55
|
+
"trigger": "JSON.parse fails on the file content.",
|
|
56
|
+
"message": "MCP config is not valid JSON: {parseError}",
|
|
57
|
+
"fixable": false,
|
|
58
|
+
"clients": ["all"]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "mcp-schema/wrong-root-key",
|
|
62
|
+
"category": "mcp-schema",
|
|
63
|
+
"severity": "error",
|
|
64
|
+
"description": "Root key does not match the expected key for the target client. VS Code uses \"servers\"; all other clients use \"mcpServers\".",
|
|
65
|
+
"trigger": "Root key is \"mcpServers\" in .vscode/mcp.json, or \"servers\" in any other config file.",
|
|
66
|
+
"message": "{file} must use \"{expected}\" as root key, not \"{actual}\"",
|
|
67
|
+
"fixable": true,
|
|
68
|
+
"fixDescription": "Rename the root key to match the expected key for the client.",
|
|
69
|
+
"clients": ["all"]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "mcp-schema/missing-root-key",
|
|
73
|
+
"category": "mcp-schema",
|
|
74
|
+
"severity": "error",
|
|
75
|
+
"description": "No recognized root key (\"mcpServers\" or \"servers\") found in the config.",
|
|
76
|
+
"trigger": "The parsed JSON object has neither \"mcpServers\" nor \"servers\" as a key.",
|
|
77
|
+
"message": "MCP config has no \"{expected}\" key",
|
|
78
|
+
"fixable": false,
|
|
79
|
+
"clients": ["all"]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "mcp-schema/missing-command",
|
|
83
|
+
"category": "mcp-schema",
|
|
84
|
+
"severity": "error",
|
|
85
|
+
"description": "A stdio server entry has no \"command\" field.",
|
|
86
|
+
"trigger": "Server has type \"stdio\" (or no type with no url) and no \"command\" field.",
|
|
87
|
+
"message": "Server \"{name}\": missing \"command\" field",
|
|
88
|
+
"fixable": false,
|
|
89
|
+
"clients": ["all"]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "mcp-schema/missing-url",
|
|
93
|
+
"category": "mcp-schema",
|
|
94
|
+
"severity": "error",
|
|
95
|
+
"description": "An HTTP or SSE server entry has no \"url\" field.",
|
|
96
|
+
"trigger": "Server has type \"http\" or \"sse\" and no \"url\" field.",
|
|
97
|
+
"message": "Server \"{name}\": missing \"url\" field",
|
|
98
|
+
"fixable": false,
|
|
99
|
+
"clients": ["all"]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "mcp-schema/unknown-transport",
|
|
103
|
+
"category": "mcp-schema",
|
|
104
|
+
"severity": "warning",
|
|
105
|
+
"description": "Server type field is not a recognized transport.",
|
|
106
|
+
"trigger": "\"type\" field is present but is not \"stdio\", \"http\", or \"sse\".",
|
|
107
|
+
"message": "Server \"{name}\": unknown transport type \"{type}\"",
|
|
108
|
+
"fixable": false,
|
|
109
|
+
"clients": ["all"]
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "mcp-schema/ambiguous-transport",
|
|
113
|
+
"category": "mcp-schema",
|
|
114
|
+
"severity": "warning",
|
|
115
|
+
"description": "Server has both a command (stdio) and a URL (http), making the transport ambiguous.",
|
|
116
|
+
"trigger": "Server entry has both \"command\" and \"url\" fields.",
|
|
117
|
+
"message": "Server \"{name}\": has both \"command\" and \"url\" — transport is ambiguous",
|
|
118
|
+
"fixable": false,
|
|
119
|
+
"clients": ["all"]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "mcp-schema/empty-servers",
|
|
123
|
+
"category": "mcp-schema",
|
|
124
|
+
"severity": "info",
|
|
125
|
+
"description": "The config file has a root key but no server entries.",
|
|
126
|
+
"trigger": "Root key exists but the object is empty.",
|
|
127
|
+
"message": "MCP config has no server entries",
|
|
128
|
+
"fixable": false,
|
|
129
|
+
"clients": ["all"]
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"id": "mcp-security/hardcoded-bearer",
|
|
133
|
+
"category": "mcp-security",
|
|
134
|
+
"severity": "error",
|
|
135
|
+
"description": "A git-tracked config file contains a literal Bearer token in the Authorization header.",
|
|
136
|
+
"trigger": "Authorization header value matches \"Bearer <literal>\" where the token is not an env var reference, and the file is tracked by git.",
|
|
137
|
+
"message": "Server \"{name}\": hardcoded Bearer token in a git-tracked file",
|
|
138
|
+
"fixable": true,
|
|
139
|
+
"fixDescription": "Replace the literal token with an env var reference derived from the server name.",
|
|
140
|
+
"clients": ["all"]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "mcp-security/hardcoded-api-key",
|
|
144
|
+
"category": "mcp-security",
|
|
145
|
+
"severity": "error",
|
|
146
|
+
"description": "A git-tracked config file contains a value matching known API key patterns.",
|
|
147
|
+
"trigger": "A header or env value matches known API key prefixes (sk-, ghp_, xoxb-, AKIA, etc.) or is a high-entropy string > 20 chars, and the file is tracked by git.",
|
|
148
|
+
"message": "Server \"{name}\": possible API key in a git-tracked file",
|
|
149
|
+
"fixable": true,
|
|
150
|
+
"fixDescription": "Replace the literal value with an env var reference.",
|
|
151
|
+
"clients": ["all"]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "mcp-security/secret-in-url",
|
|
155
|
+
"category": "mcp-security",
|
|
156
|
+
"severity": "error",
|
|
157
|
+
"description": "A git-tracked config URL contains query parameters that look like secrets.",
|
|
158
|
+
"trigger": "URL contains query params like ?key=, ?token=, ?api_key= with literal values in a git-tracked file.",
|
|
159
|
+
"message": "Server \"{name}\": possible secret in URL query string",
|
|
160
|
+
"fixable": false,
|
|
161
|
+
"clients": ["all"]
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "mcp-security/http-no-tls",
|
|
165
|
+
"category": "mcp-security",
|
|
166
|
+
"severity": "warning",
|
|
167
|
+
"description": "Server URL uses HTTP without TLS for a non-localhost target.",
|
|
168
|
+
"trigger": "URL scheme is http:// and host is not localhost or 127.0.0.1.",
|
|
169
|
+
"message": "Server \"{name}\": URL uses HTTP without TLS",
|
|
170
|
+
"fixable": false,
|
|
171
|
+
"clients": ["all"]
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"id": "mcp-commands/windows-npx-no-wrapper",
|
|
175
|
+
"category": "mcp-commands",
|
|
176
|
+
"severity": "error",
|
|
177
|
+
"description": "On Windows, npx commands in stdio configs require a cmd /c wrapper to spawn correctly.",
|
|
178
|
+
"trigger": "Platform is Windows, command is \"npx\" (not \"cmd\" with /c npx in args).",
|
|
179
|
+
"message": "Server \"{name}\": npx requires \"cmd /c\" wrapper on Windows",
|
|
180
|
+
"fixable": true,
|
|
181
|
+
"fixDescription": "Rewrite command from \"npx\" to \"cmd\" with [\"/c\", \"npx\", ...] args.",
|
|
182
|
+
"clients": ["all"]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"id": "mcp-commands/command-not-found",
|
|
186
|
+
"category": "mcp-commands",
|
|
187
|
+
"severity": "warning",
|
|
188
|
+
"description": "A stdio command references a local file path that does not exist.",
|
|
189
|
+
"trigger": "Command starts with ./ or ../ and the resolved path does not exist.",
|
|
190
|
+
"message": "Server \"{name}\": command \"{command}\" not found",
|
|
191
|
+
"fixable": false,
|
|
192
|
+
"clients": ["all"]
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": "mcp-commands/args-path-missing",
|
|
196
|
+
"category": "mcp-commands",
|
|
197
|
+
"severity": "warning",
|
|
198
|
+
"description": "A stdio arg looks like a local file path but the file does not exist.",
|
|
199
|
+
"trigger": "An arg matches a file path pattern (contains / with extension, or starts with ./) and the file does not exist.",
|
|
200
|
+
"message": "Server \"{name}\": arg \"{arg}\" references a missing file",
|
|
201
|
+
"fixable": false,
|
|
202
|
+
"clients": ["all"]
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"id": "mcp-deprecated/sse-transport",
|
|
206
|
+
"category": "mcp-deprecated",
|
|
207
|
+
"severity": "warning",
|
|
208
|
+
"description": "SSE transport was deprecated in the March 2025 MCP spec update. Use Streamable HTTP instead.",
|
|
209
|
+
"trigger": "Server has \"type\": \"sse\".",
|
|
210
|
+
"message": "Server \"{name}\": SSE transport is deprecated — use \"http\" (Streamable HTTP)",
|
|
211
|
+
"fixable": true,
|
|
212
|
+
"fixDescription": "Replace \"sse\" with \"http\" in the type field.",
|
|
213
|
+
"clients": ["all"]
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"id": "mcp-env/wrong-syntax",
|
|
217
|
+
"category": "mcp-env",
|
|
218
|
+
"severity": "error",
|
|
219
|
+
"description": "Environment variable reference uses the wrong syntax for the target client.",
|
|
220
|
+
"trigger": "${VAR} used in Cursor config (should be ${env:VAR}), or ${env:VAR} used in Claude Code config (should be ${VAR}).",
|
|
221
|
+
"message": "Server \"{name}\": {client} uses {expected}, not {actual}",
|
|
222
|
+
"fixable": true,
|
|
223
|
+
"fixDescription": "Rewrite env var references to the correct syntax for the target client.",
|
|
224
|
+
"clients": ["claude-code", "cursor", "continue", "windsurf"]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "mcp-env/unset-variable",
|
|
228
|
+
"category": "mcp-env",
|
|
229
|
+
"severity": "info",
|
|
230
|
+
"description": "A referenced environment variable is not set in the current shell environment.",
|
|
231
|
+
"trigger": "Env var reference found but the variable is not in process.env.",
|
|
232
|
+
"message": "Server \"{name}\": environment variable \"{var}\" is not set",
|
|
233
|
+
"fixable": false,
|
|
234
|
+
"clients": ["claude-code", "cursor", "continue", "windsurf"]
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"id": "mcp-env/empty-env-block",
|
|
238
|
+
"category": "mcp-env",
|
|
239
|
+
"severity": "info",
|
|
240
|
+
"description": "Server has an empty env object that can be removed.",
|
|
241
|
+
"trigger": "\"env\" key is present but the object is empty ({}).",
|
|
242
|
+
"message": "Server \"{name}\": empty \"env\" block can be removed",
|
|
243
|
+
"fixable": false,
|
|
244
|
+
"clients": ["all"]
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"id": "mcp-urls/malformed",
|
|
248
|
+
"category": "mcp-urls",
|
|
249
|
+
"severity": "error",
|
|
250
|
+
"description": "Server URL is not a valid URL.",
|
|
251
|
+
"trigger": "URL cannot be parsed by standard URL parser and does not contain env var placeholders.",
|
|
252
|
+
"message": "Server \"{name}\": invalid URL",
|
|
253
|
+
"fixable": false,
|
|
254
|
+
"clients": ["all"]
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"id": "mcp-urls/localhost-in-project-config",
|
|
258
|
+
"category": "mcp-urls",
|
|
259
|
+
"severity": "warning",
|
|
260
|
+
"description": "A project-level config (committed to version control) references localhost, which won't work for other team members.",
|
|
261
|
+
"trigger": "URL host is localhost or 127.0.0.1 and the file is a project-level config.",
|
|
262
|
+
"message": "Server \"{name}\": localhost URL in project config won't work for teammates",
|
|
263
|
+
"fixable": false,
|
|
264
|
+
"clients": ["all"]
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"id": "mcp-urls/missing-path",
|
|
268
|
+
"category": "mcp-urls",
|
|
269
|
+
"severity": "info",
|
|
270
|
+
"description": "Server URL has no path component. Most MCP servers expect a path like /mcp.",
|
|
271
|
+
"trigger": "URL path is empty or just \"/\".",
|
|
272
|
+
"message": "Server \"{name}\": URL has no path — most MCP servers expect /mcp",
|
|
273
|
+
"fixable": false,
|
|
274
|
+
"clients": ["all"]
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"id": "mcp-consistency/same-server-different-config",
|
|
278
|
+
"category": "mcp-consistency",
|
|
279
|
+
"severity": "warning",
|
|
280
|
+
"description": "The same server name is configured differently across multiple client config files.",
|
|
281
|
+
"trigger": "Server name exists in 2+ config files with different url or command/args values.",
|
|
282
|
+
"message": "Server \"{name}\" is configured differently in {file1} and {file2}",
|
|
283
|
+
"fixable": false,
|
|
284
|
+
"clients": ["all"]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"id": "mcp-consistency/duplicate-server-name",
|
|
288
|
+
"category": "mcp-consistency",
|
|
289
|
+
"severity": "warning",
|
|
290
|
+
"description": "A server name appears more than once in the same config file. JSON last-write-wins behavior means only the last definition is used.",
|
|
291
|
+
"trigger": "Duplicate key in the mcpServers/servers object.",
|
|
292
|
+
"message": "Duplicate server name \"{name}\" in {file} — only the last definition is used",
|
|
293
|
+
"fixable": false,
|
|
294
|
+
"clients": ["all"]
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"id": "mcp-consistency/missing-from-client",
|
|
298
|
+
"category": "mcp-consistency",
|
|
299
|
+
"severity": "info",
|
|
300
|
+
"description": "A server in .mcp.json is not present in another client's project config that also exists.",
|
|
301
|
+
"trigger": "Server exists in .mcp.json but is absent from .cursor/mcp.json or .vscode/mcp.json (when those files exist).",
|
|
302
|
+
"message": "Server \"{name}\" is in .mcp.json but missing from {file}",
|
|
303
|
+
"fixable": false,
|
|
304
|
+
"clients": ["all"]
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"id": "mcp-redundancy/disabled-server",
|
|
308
|
+
"category": "mcp-redundancy",
|
|
309
|
+
"severity": "info",
|
|
310
|
+
"description": "A server entry is explicitly disabled.",
|
|
311
|
+
"trigger": "Server has \"disabled\": true.",
|
|
312
|
+
"message": "Server \"{name}\" is disabled — consider removing if no longer needed",
|
|
313
|
+
"fixable": false,
|
|
314
|
+
"clients": ["cline"]
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"id": "mcp-redundancy/identical-across-scopes",
|
|
318
|
+
"category": "mcp-redundancy",
|
|
319
|
+
"severity": "info",
|
|
320
|
+
"description": "The same server is identically configured at both project and global scope, making the global entry redundant.",
|
|
321
|
+
"trigger": "Server with same name and identical config exists at both project and global scope.",
|
|
322
|
+
"message": "Server \"{name}\" is identically configured in {projectFile} and {globalFile}",
|
|
323
|
+
"fixable": false,
|
|
324
|
+
"clients": ["claude-code", "cursor", "amazonq"]
|
|
325
|
+
}
|
|
326
|
+
],
|
|
327
|
+
"clients": [
|
|
328
|
+
{
|
|
329
|
+
"id": "claude-code",
|
|
330
|
+
"name": "Claude Code",
|
|
331
|
+
"projectConfig": ".mcp.json",
|
|
332
|
+
"globalConfig": ["~/.claude.json", "~/.claude/settings.json"],
|
|
333
|
+
"rootKey": "mcpServers",
|
|
334
|
+
"envVarSyntax": "${VAR}",
|
|
335
|
+
"envVarDefaultSyntax": "${VAR:-default}",
|
|
336
|
+
"transports": ["stdio", "http", "sse"],
|
|
337
|
+
"scopePrecedence": ["local", "project", "user"]
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"id": "claude-desktop",
|
|
341
|
+
"name": "Claude Desktop",
|
|
342
|
+
"projectConfig": null,
|
|
343
|
+
"globalConfig": {
|
|
344
|
+
"macos": "~/Library/Application Support/Claude/claude_desktop_config.json",
|
|
345
|
+
"windows": "%APPDATA%\\Claude\\claude_desktop_config.json"
|
|
346
|
+
},
|
|
347
|
+
"rootKey": "mcpServers",
|
|
348
|
+
"envVarSyntax": null,
|
|
349
|
+
"transports": ["stdio", "http", "sse"],
|
|
350
|
+
"scopePrecedence": ["global"]
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"id": "vscode",
|
|
354
|
+
"name": "VS Code / GitHub Copilot",
|
|
355
|
+
"projectConfig": ".vscode/mcp.json",
|
|
356
|
+
"globalConfig": null,
|
|
357
|
+
"rootKey": "servers",
|
|
358
|
+
"envVarSyntax": "${VAR}",
|
|
359
|
+
"transports": ["stdio", "http", "sse"],
|
|
360
|
+
"scopePrecedence": ["workspace", "user"]
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
"id": "cursor",
|
|
364
|
+
"name": "Cursor",
|
|
365
|
+
"projectConfig": ".cursor/mcp.json",
|
|
366
|
+
"globalConfig": "~/.cursor/mcp.json",
|
|
367
|
+
"rootKey": "mcpServers",
|
|
368
|
+
"envVarSyntax": "${env:VAR}",
|
|
369
|
+
"transports": ["stdio", "http", "sse"],
|
|
370
|
+
"scopePrecedence": ["project", "global"]
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"id": "windsurf",
|
|
374
|
+
"name": "Windsurf",
|
|
375
|
+
"projectConfig": null,
|
|
376
|
+
"globalConfig": "~/.codeium/windsurf/mcp_config.json",
|
|
377
|
+
"rootKey": "mcpServers",
|
|
378
|
+
"envVarSyntax": "${env:VAR}",
|
|
379
|
+
"transports": ["stdio", "http", "sse"],
|
|
380
|
+
"scopePrecedence": ["global"]
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"id": "cline",
|
|
384
|
+
"name": "Cline",
|
|
385
|
+
"projectConfig": null,
|
|
386
|
+
"globalConfig": "VS Code globalStorage: saoudrizwan.claude-dev/settings/cline_mcp_settings.json",
|
|
387
|
+
"rootKey": "mcpServers",
|
|
388
|
+
"envVarSyntax": null,
|
|
389
|
+
"transports": ["stdio", "http", "sse"],
|
|
390
|
+
"scopePrecedence": ["global"]
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"id": "amazonq",
|
|
394
|
+
"name": "Amazon Q Developer",
|
|
395
|
+
"projectConfig": ".amazonq/mcp.json",
|
|
396
|
+
"globalConfig": "~/.aws/amazonq/mcp.json",
|
|
397
|
+
"rootKey": "mcpServers",
|
|
398
|
+
"envVarSyntax": null,
|
|
399
|
+
"transports": ["stdio", "http"],
|
|
400
|
+
"scopePrecedence": ["workspace", "global"]
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"id": "continue",
|
|
404
|
+
"name": "Continue.dev",
|
|
405
|
+
"projectConfig": ".continue/mcpServers/*.json",
|
|
406
|
+
"globalConfig": "~/.continue/config.yaml",
|
|
407
|
+
"rootKey": "mcpServers",
|
|
408
|
+
"envVarSyntax": "${{ secrets.VAR }}",
|
|
409
|
+
"transports": ["stdio", "http", "sse"],
|
|
410
|
+
"scopePrecedence": ["workspace", "global"]
|
|
411
|
+
}
|
|
412
|
+
]
|
|
413
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yawlabs/ctxlint",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Lint your AI agent context files
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "Lint your AI agent context files, MCP server configs, and session data against your actual codebase",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ctxlint": "dist/index.js"
|
|
7
7
|
},
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"test:run": "vitest run",
|
|
14
14
|
"lint": "eslint src/",
|
|
15
15
|
"format": "prettier --write src/",
|
|
16
|
-
"mcp": "node dist/mcp
|
|
16
|
+
"mcp": "node dist/index.js --mcp-server"
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"claude",
|
|
@@ -32,22 +32,45 @@
|
|
|
32
32
|
"pre-commit",
|
|
33
33
|
"agentic",
|
|
34
34
|
"codex",
|
|
35
|
-
"sarif"
|
|
35
|
+
"sarif",
|
|
36
|
+
"mcp-server",
|
|
37
|
+
"model-context-protocol",
|
|
38
|
+
"context-lint",
|
|
39
|
+
"gemini",
|
|
40
|
+
"cline",
|
|
41
|
+
"windsurf",
|
|
42
|
+
"session",
|
|
43
|
+
"cross-project",
|
|
44
|
+
"agent-session",
|
|
45
|
+
"aider",
|
|
46
|
+
"vibe-cli",
|
|
47
|
+
"amazon-q",
|
|
48
|
+
"goose"
|
|
36
49
|
],
|
|
37
50
|
"files": [
|
|
38
51
|
"dist",
|
|
52
|
+
".pre-commit-hooks.yaml",
|
|
53
|
+
"CONTEXT_LINT_SPEC.md",
|
|
54
|
+
"MCP_CONFIG_LINT_SPEC.md",
|
|
55
|
+
"AGENT_SESSION_LINT_SPEC.md",
|
|
56
|
+
"context-lint-rules.json",
|
|
57
|
+
"mcp-config-lint-rules.json",
|
|
58
|
+
"agent-session-lint-rules.json",
|
|
39
59
|
"LICENSE",
|
|
40
60
|
"README.md"
|
|
41
61
|
],
|
|
42
62
|
"license": "MIT",
|
|
43
63
|
"repository": {
|
|
44
64
|
"type": "git",
|
|
45
|
-
"url": "git+https://github.com/
|
|
65
|
+
"url": "git+https://github.com/YawLabs/ctxlint.git"
|
|
46
66
|
},
|
|
47
|
-
"
|
|
67
|
+
"bugs": {
|
|
68
|
+
"url": "https://github.com/YawLabs/ctxlint/issues"
|
|
69
|
+
},
|
|
70
|
+
"homepage": "https://github.com/YawLabs/ctxlint",
|
|
48
71
|
"author": "Yaw Labs <contact@yaw.sh>",
|
|
49
72
|
"engines": {
|
|
50
|
-
"node": ">=
|
|
73
|
+
"node": ">=20"
|
|
51
74
|
},
|
|
52
75
|
"packageManager": "pnpm@10.33.0",
|
|
53
76
|
"dependencies": {
|
|
@@ -58,9 +81,11 @@
|
|
|
58
81
|
"glob": "^13.0.6",
|
|
59
82
|
"ora": "^9.3.0",
|
|
60
83
|
"simple-git": "^3.33.0",
|
|
61
|
-
"tiktoken": "^1.0.22",
|
|
62
84
|
"zod": "^4.3.6"
|
|
63
85
|
},
|
|
86
|
+
"optionalDependencies": {
|
|
87
|
+
"tiktoken": "^1.0.22"
|
|
88
|
+
},
|
|
64
89
|
"devDependencies": {
|
|
65
90
|
"@eslint/js": "^10.0.1",
|
|
66
91
|
"@types/fast-levenshtein": "^0.0.4",
|