@sensegrep/mcp 0.1.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.
@@ -0,0 +1 @@
1
+ export {};
package/dist/server.js ADDED
@@ -0,0 +1,197 @@
1
+ import { SenseGrepTool, Indexer, Instance } from "@sensegrep/core";
2
+ function isIncremental(result) {
3
+ return result.mode === "incremental";
4
+ }
5
+ const toolPromise = SenseGrepTool.init();
6
+ const toolSchemas = [
7
+ {
8
+ name: "sensegrep.search",
9
+ description: "Semantic + structural code search with optional regex filters.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {
13
+ query: { type: "string" },
14
+ pattern: { type: "string" },
15
+ limit: { type: "number" },
16
+ include: { type: "string" },
17
+ symbolType: {
18
+ type: "string",
19
+ enum: ["function", "class", "method", "interface", "type", "variable", "namespace", "enum"],
20
+ },
21
+ isExported: { type: "boolean" },
22
+ minComplexity: { type: "number" },
23
+ maxComplexity: { type: "number" },
24
+ hasDocumentation: { type: "boolean" },
25
+ language: { type: "string", enum: ["typescript", "javascript", "tsx", "jsx"] },
26
+ parentScope: { type: "string" },
27
+ rerank: { type: "boolean" },
28
+ rootDir: { type: "string" },
29
+ },
30
+ required: ["query"],
31
+ additionalProperties: false,
32
+ },
33
+ },
34
+ {
35
+ name: "sensegrep.index",
36
+ description: "Create or update a semantic index for the given root directory.",
37
+ inputSchema: {
38
+ type: "object",
39
+ properties: {
40
+ rootDir: { type: "string" },
41
+ full: { type: "boolean" },
42
+ },
43
+ additionalProperties: false,
44
+ },
45
+ },
46
+ {
47
+ name: "sensegrep.stats",
48
+ description: "Get index stats for the given root directory.",
49
+ inputSchema: {
50
+ type: "object",
51
+ properties: {
52
+ rootDir: { type: "string" },
53
+ },
54
+ additionalProperties: false,
55
+ },
56
+ },
57
+ ];
58
+ function send(response) {
59
+ const json = JSON.stringify(response);
60
+ const header = `Content-Length: ${Buffer.byteLength(json, "utf8")}\r\n\r\n`;
61
+ process.stdout.write(header + json);
62
+ }
63
+ function resultText(text, meta) {
64
+ return {
65
+ content: [{ type: "text", text }],
66
+ meta,
67
+ };
68
+ }
69
+ async function handleRequest(req) {
70
+ const id = req.id ?? null;
71
+ if (req.method === "initialize") {
72
+ send({
73
+ jsonrpc: "2.0",
74
+ id,
75
+ result: {
76
+ protocolVersion: "2024-11-05",
77
+ serverInfo: { name: "sensegrep", version: "0.1.0" },
78
+ capabilities: { tools: {} },
79
+ },
80
+ });
81
+ return;
82
+ }
83
+ if (req.method === "tools/list") {
84
+ send({
85
+ jsonrpc: "2.0",
86
+ id,
87
+ result: { tools: toolSchemas },
88
+ });
89
+ return;
90
+ }
91
+ if (req.method === "tools/call") {
92
+ const params = req.params || {};
93
+ const name = params.name;
94
+ const args = params.arguments || {};
95
+ const rootDir = args.rootDir || process.env.SENSEGREP_ROOT || process.cwd();
96
+ try {
97
+ if (name === "sensegrep.search") {
98
+ const tool = await toolPromise;
99
+ const { rootDir: _root, ...toolArgs } = args;
100
+ const res = await Instance.provide({
101
+ directory: rootDir,
102
+ fn: () => tool.execute(toolArgs, {
103
+ sessionID: "mcp",
104
+ messageID: "mcp",
105
+ agent: "sensegrep-mcp",
106
+ abort: new AbortController().signal,
107
+ metadata(_input) { },
108
+ }),
109
+ });
110
+ send({
111
+ jsonrpc: "2.0",
112
+ id,
113
+ result: resultText(res.output, { title: res.title, metadata: res.metadata }),
114
+ });
115
+ return;
116
+ }
117
+ if (name === "sensegrep.index") {
118
+ const full = args.full === true;
119
+ const result = await Instance.provide({
120
+ directory: rootDir,
121
+ fn: () => (full ? Indexer.indexProject() : Indexer.indexProjectIncremental()),
122
+ });
123
+ send({
124
+ jsonrpc: "2.0",
125
+ id,
126
+ result: resultText(isIncremental(result)
127
+ ? `Indexed ${result.files} files (${result.chunks} chunks), skipped ${result.skipped}, removed ${result.removed} in ${(result.duration / 1000).toFixed(1)}s`
128
+ : `Indexed ${result.files} files (${result.chunks} chunks) in ${(result.duration / 1000).toFixed(1)}s`),
129
+ });
130
+ return;
131
+ }
132
+ if (name === "sensegrep.stats") {
133
+ const stats = await Instance.provide({
134
+ directory: rootDir,
135
+ fn: () => Indexer.getStats(),
136
+ });
137
+ send({
138
+ jsonrpc: "2.0",
139
+ id,
140
+ result: resultText(JSON.stringify(stats, null, 2)),
141
+ });
142
+ return;
143
+ }
144
+ send({
145
+ jsonrpc: "2.0",
146
+ id,
147
+ error: { code: -32601, message: `Method not found: ${name}` },
148
+ });
149
+ return;
150
+ }
151
+ catch (error) {
152
+ send({
153
+ jsonrpc: "2.0",
154
+ id,
155
+ error: { code: -32000, message: error?.message || "Internal error" },
156
+ });
157
+ return;
158
+ }
159
+ }
160
+ if (req.id !== undefined) {
161
+ send({
162
+ jsonrpc: "2.0",
163
+ id,
164
+ error: { code: -32601, message: `Method not found: ${req.method}` },
165
+ });
166
+ }
167
+ }
168
+ let buffer = Buffer.alloc(0);
169
+ process.stdin.on("data", (chunk) => {
170
+ buffer = Buffer.concat([buffer, Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)]);
171
+ while (true) {
172
+ const headerEnd = buffer.indexOf("\r\n\r\n");
173
+ if (headerEnd === -1)
174
+ break;
175
+ const header = buffer.slice(0, headerEnd).toString("utf8");
176
+ const match = header.match(/Content-Length:\s*(\d+)/i);
177
+ if (!match) {
178
+ buffer = buffer.slice(headerEnd + 4);
179
+ continue;
180
+ }
181
+ const length = Number(match[1]);
182
+ const bodyStart = headerEnd + 4;
183
+ const bodyEnd = bodyStart + length;
184
+ if (buffer.length < bodyEnd)
185
+ break;
186
+ const body = buffer.slice(bodyStart, bodyEnd).toString("utf8");
187
+ buffer = buffer.slice(bodyEnd);
188
+ try {
189
+ const req = JSON.parse(body);
190
+ void handleRequest(req);
191
+ }
192
+ catch {
193
+ // ignore malformed JSON
194
+ }
195
+ }
196
+ });
197
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@sensegrep/mcp",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/server.js",
6
+ "types": "./dist/server.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc -p tsconfig.json"
12
+ },
13
+ "engines": {
14
+ "bun": ">=1.1.0"
15
+ },
16
+ "dependencies": {
17
+ "@sensegrep/core": "workspace:*"
18
+ },
19
+ "license": "Apache-2.0",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/Stahldavid/sensegrep.git"
23
+ },
24
+ "homepage": "https://github.com/Stahldavid/sensegrep",
25
+ "bugs": {
26
+ "url": "https://github.com/Stahldavid/sensegrep/issues"
27
+ }
28
+ }