@zachsents/ts-mcp 0.3.3 → 0.3.6
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 -83
- package/dist/index.js +45 -30
- package/dist/index.js.map +1 -1
- package/dist/lsp-client.js +253 -118
- package/dist/lsp-client.js.map +1 -1
- package/dist/pool.js +92 -27
- package/dist/pool.js.map +1 -1
- package/dist/resolve-binary.js +17 -21
- package/dist/resolve-binary.js.map +1 -1
- package/package.json +16 -11
package/README.md
CHANGED
|
@@ -2,91 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
**Give AI agents TypeScript type inference — no editor required.**
|
|
4
4
|
|
|
5
|
-
A standalone MCP server that provides
|
|
5
|
+
A standalone MCP server that provides type information using [TypeScript 7's native compiler](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/). Works with any MCP client that supports stdio MCP servers.
|
|
6
6
|
|
|
7
|
-
No running editor needed. It
|
|
8
|
-
|
|
9
|
-
## Prerequisites
|
|
10
|
-
|
|
11
|
-
Install tsgo globally:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npm install -g @typescript/native-preview
|
|
15
|
-
# or
|
|
16
|
-
bun add -g @typescript/native-preview
|
|
17
|
-
# or
|
|
18
|
-
pnpm add -g @typescript/native-preview
|
|
19
|
-
# or
|
|
20
|
-
yarn global add @typescript/native-preview
|
|
21
|
-
```
|
|
7
|
+
No running editor or global compiler install is needed. It includes TypeScript 7 and manages native LSP instances directly, keeping them warm for fast subsequent queries.
|
|
22
8
|
|
|
23
9
|
## Install
|
|
24
10
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
[](https://cursor.com/en/install-mcp?name=ts-hover&config=eyJjb21tYW5kIjoibnB4IC15IEB6YWNoc2VudHMvdHMtbWNwIn0%3D)
|
|
28
|
-
|
|
29
|
-
Or manually add to `.cursor/mcp.json`:
|
|
11
|
+
Add an MCP server named `ts-hover`:
|
|
30
12
|
|
|
31
13
|
```json
|
|
32
14
|
{
|
|
33
15
|
"mcpServers": {
|
|
34
16
|
"ts-hover": {
|
|
35
17
|
"command": "npx",
|
|
36
|
-
"args": ["-y", "@zachsents/ts-mcp"]
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### VS Code
|
|
43
|
-
|
|
44
|
-
Add to your User Settings (JSON):
|
|
45
|
-
|
|
46
|
-
```json
|
|
47
|
-
{
|
|
48
|
-
"mcp": {
|
|
49
|
-
"servers": {
|
|
50
|
-
"ts-hover": {
|
|
51
|
-
"command": "npx",
|
|
52
|
-
"args": ["-y", "@zachsents/ts-mcp"]
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### Claude Desktop
|
|
60
|
-
|
|
61
|
-
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
62
|
-
|
|
63
|
-
```json
|
|
64
|
-
{
|
|
65
|
-
"mcpServers": {
|
|
66
|
-
"ts-hover": {
|
|
67
|
-
"command": "npx",
|
|
68
|
-
"args": ["-y", "@zachsents/ts-mcp"]
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Claude Code
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
claude mcp add-json ts-hover '{"command":"npx","args":["-y","@zachsents/ts-mcp"]}'
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Windsurf
|
|
81
|
-
|
|
82
|
-
Add to your Windsurf MCP config:
|
|
83
|
-
|
|
84
|
-
```json
|
|
85
|
-
{
|
|
86
|
-
"mcpServers": {
|
|
87
|
-
"ts-hover": {
|
|
88
|
-
"command": "npx",
|
|
89
|
-
"args": ["-y", "@zachsents/ts-mcp"]
|
|
18
|
+
"args": ["-y", "@zachsents/ts-mcp"],
|
|
19
|
+
"cwd": "/tmp"
|
|
90
20
|
}
|
|
91
21
|
}
|
|
92
22
|
}
|
|
@@ -96,11 +26,11 @@ Add to your Windsurf MCP config:
|
|
|
96
26
|
|
|
97
27
|
1. Agent calls a tool (e.g. `hover` with a file path and position)
|
|
98
28
|
2. The MCP server finds the nearest `tsconfig.json` to determine the project root
|
|
99
|
-
3. It spawns (or reuses) a
|
|
29
|
+
3. It spawns (or reuses) a TypeScript 7 LSP instance for that project
|
|
100
30
|
4. Returns the type information
|
|
101
|
-
5. The
|
|
31
|
+
5. The TypeScript instance stays warm for 5 minutes, making follow-up queries near-instant
|
|
102
32
|
|
|
103
|
-
Multiple project roots are handled automatically — each gets its own
|
|
33
|
+
Multiple project roots are handled automatically — each gets its own TypeScript instance.
|
|
104
34
|
|
|
105
35
|
## Tools
|
|
106
36
|
|
|
@@ -161,13 +91,11 @@ Get inferred type annotations for a line range — variable types, parameter typ
|
|
|
161
91
|
| `startLine` | `number` | Start line (0-indexed, inclusive) |
|
|
162
92
|
| `endLine` | `number` | End line (0-indexed, exclusive) |
|
|
163
93
|
|
|
164
|
-
> **Note:** Requires tsgo inlay hint support, which is still in development. The tool will start returning results as tsgo fills in this capability.
|
|
165
|
-
|
|
166
94
|
## Configuration
|
|
167
95
|
|
|
168
|
-
| Env var
|
|
169
|
-
|
|
|
170
|
-
| `
|
|
96
|
+
| Env var | Description |
|
|
97
|
+
| ---------- | ------------------------------------------------- |
|
|
98
|
+
| `TSC_PATH` | Override the path to the native TypeScript binary |
|
|
171
99
|
|
|
172
100
|
## License
|
|
173
101
|
|
package/dist/index.js
CHANGED
|
@@ -3,10 +3,9 @@ import { readFile, writeFile } from "node:fs/promises";
|
|
|
3
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
const
|
|
9
|
-
const pool = new TsgoPool(binaryPath);
|
|
6
|
+
import { TypeScriptPool } from "./pool.js";
|
|
7
|
+
import { resolveTscBinary } from "./resolve-binary.js";
|
|
8
|
+
const pool = new TypeScriptPool(resolveTscBinary());
|
|
10
9
|
const server = new McpServer({
|
|
11
10
|
name: "ts-hover",
|
|
12
11
|
version: "0.3.0",
|
|
@@ -55,8 +54,7 @@ server.registerTool("diagnostics", {
|
|
|
55
54
|
}
|
|
56
55
|
const parts = [];
|
|
57
56
|
for (const d of diagnostics) {
|
|
58
|
-
|
|
59
|
-
parts.push(`${d.line}:${d.character} ${d.severity}${code}: ${d.message}`);
|
|
57
|
+
parts.push(`${d.line}:${d.character} ${d.severity}${d.code != null ? ` TS${d.code}` : ""}: ${d.message}`);
|
|
60
58
|
}
|
|
61
59
|
const fixes = actions.filter((a) => a.kind?.startsWith("quickfix"));
|
|
62
60
|
const sourceActions = actions.filter((a) => a.kind?.startsWith("source"));
|
|
@@ -101,11 +99,15 @@ server.registerTool("references", {
|
|
|
101
99
|
content: [{ type: "text", text: "No references found." }],
|
|
102
100
|
};
|
|
103
101
|
}
|
|
104
|
-
const text = locations
|
|
105
|
-
.map((loc) => `${loc.file}:${loc.line}:${loc.character}`)
|
|
106
|
-
.join("\n");
|
|
107
102
|
return {
|
|
108
|
-
content: [
|
|
103
|
+
content: [
|
|
104
|
+
{
|
|
105
|
+
type: "text",
|
|
106
|
+
text: locations
|
|
107
|
+
.map((loc) => `${loc.file}:${loc.line}:${loc.character}`)
|
|
108
|
+
.join("\n"),
|
|
109
|
+
},
|
|
110
|
+
],
|
|
109
111
|
};
|
|
110
112
|
});
|
|
111
113
|
server.registerTool("outline", {
|
|
@@ -184,23 +186,38 @@ server.registerTool("inlay_hints", {
|
|
|
184
186
|
content: [{ type: "text", text: "No inlay hints." }],
|
|
185
187
|
};
|
|
186
188
|
}
|
|
187
|
-
const text = hints
|
|
188
|
-
.map((h) => `${h.line}:${h.character} ${h.kind}: ${h.text}`)
|
|
189
|
-
.join("\n");
|
|
190
189
|
return {
|
|
191
|
-
content: [
|
|
190
|
+
content: [
|
|
191
|
+
{
|
|
192
|
+
type: "text",
|
|
193
|
+
text: hints
|
|
194
|
+
.map((h) => `${h.line}:${h.character} ${h.kind}: ${h.text}`)
|
|
195
|
+
.join("\n"),
|
|
196
|
+
},
|
|
197
|
+
],
|
|
192
198
|
};
|
|
193
199
|
});
|
|
194
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* Recursively format a symbol tree with indentation
|
|
202
|
+
*
|
|
203
|
+
* @param symbols - Symbols at the current tree level.
|
|
204
|
+
* @param lines - Output lines accumulated during traversal.
|
|
205
|
+
* @param depth - Current indentation depth.
|
|
206
|
+
*/
|
|
195
207
|
function formatSymbolTree(symbols, lines, depth) {
|
|
196
|
-
const indent = " ".repeat(depth);
|
|
197
208
|
for (const sym of symbols) {
|
|
198
|
-
lines.push(`${
|
|
209
|
+
lines.push(`${" ".repeat(depth)}${sym.kind} ${sym.name} (line ${sym.line})`);
|
|
199
210
|
if (sym.children.length > 0) {
|
|
200
211
|
formatSymbolTree(sym.children, lines, depth + 1);
|
|
201
212
|
}
|
|
202
213
|
}
|
|
203
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Format an LSP text edit for CLI output.
|
|
217
|
+
*
|
|
218
|
+
* @param edit - Text edit to render.
|
|
219
|
+
* @returns A human-readable summary of the edit.
|
|
220
|
+
*/
|
|
204
221
|
function formatTextEdit(edit) {
|
|
205
222
|
const loc = ` ${edit.file}:${edit.startLine}:${edit.startCharacter}`;
|
|
206
223
|
if (edit.newText === "") {
|
|
@@ -218,31 +235,29 @@ function formatTextEdit(edit) {
|
|
|
218
235
|
/**
|
|
219
236
|
* Apply LSP text edits to a file. Edits are sorted bottom-to-top so earlier
|
|
220
237
|
* positions aren't shifted by later replacements.
|
|
238
|
+
*
|
|
239
|
+
* @param filePath - Absolute path to the file being edited.
|
|
240
|
+
* @param edits - LSP edits to apply.
|
|
221
241
|
*/
|
|
222
242
|
async function applyEdits(filePath, edits) {
|
|
223
|
-
const
|
|
224
|
-
const
|
|
225
|
-
const sorted = [...edits].toSorted((a, b) => {
|
|
243
|
+
const lines = (await readFile(filePath, "utf-8")).split("\n");
|
|
244
|
+
for (const edit of [...edits].toSorted((a, b) => {
|
|
226
245
|
if (a.startLine !== b.startLine)
|
|
227
246
|
return b.startLine - a.startLine;
|
|
228
247
|
return b.startCharacter - a.startCharacter;
|
|
229
|
-
})
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const before = startLine.slice(0, edit.startCharacter);
|
|
234
|
-
const after = endLine.slice(edit.endCharacter);
|
|
235
|
-
const replacement = (before + edit.newText + after).split("\n");
|
|
236
|
-
lines.splice(edit.startLine, edit.endLine - edit.startLine + 1, ...replacement);
|
|
248
|
+
})) {
|
|
249
|
+
lines.splice(edit.startLine, edit.endLine - edit.startLine + 1, ...((lines[edit.startLine] ?? "").slice(0, edit.startCharacter) +
|
|
250
|
+
edit.newText +
|
|
251
|
+
(lines[edit.endLine] ?? "").slice(edit.endCharacter)).split("\n"));
|
|
237
252
|
}
|
|
238
253
|
await writeFile(filePath, lines.join("\n"));
|
|
239
254
|
}
|
|
255
|
+
/** Shut down the client pool before exiting. */
|
|
240
256
|
async function cleanup() {
|
|
241
257
|
await pool.shutdown();
|
|
242
258
|
process.exit(0);
|
|
243
259
|
}
|
|
244
260
|
process.on("SIGINT", cleanup);
|
|
245
261
|
process.on("SIGTERM", cleanup);
|
|
246
|
-
|
|
247
|
-
await server.connect(transport);
|
|
262
|
+
await server.connect(new StdioServerTransport());
|
|
248
263
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|