@netique/overleaf-mcp 0.1.0 → 0.2.1
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 +47 -21
- package/dist/api/http.js +56 -28
- package/dist/api/http.js.map +1 -1
- package/dist/api/socket.js +134 -28
- package/dist/api/socket.js.map +1 -1
- package/dist/auth/browserLogin.js +148 -0
- package/dist/auth/browserLogin.js.map +1 -0
- package/dist/auth/cdp.js +124 -0
- package/dist/auth/cdp.js.map +1 -0
- package/dist/auth/chromeFinder.js +91 -0
- package/dist/auth/chromeFinder.js.map +1 -0
- package/dist/auth/cli.js +102 -0
- package/dist/auth/cli.js.map +1 -0
- package/dist/auth/cookieStore.js +65 -0
- package/dist/auth/cookieStore.js.map +1 -0
- package/dist/auth/discover.js +39 -0
- package/dist/auth/discover.js.map +1 -0
- package/dist/config.js +6 -8
- package/dist/config.js.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/session/activeProject.js +3 -0
- package/dist/session/activeProject.js.map +1 -1
- package/dist/session/identity.js +12 -5
- package/dist/session/identity.js.map +1 -1
- package/dist/session/recovery.js +28 -0
- package/dist/session/recovery.js.map +1 -0
- package/dist/tools/compile.js +12 -9
- package/dist/tools/compile.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
2
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
5
|
import { registerListProjects } from "./tools/listProjects.js";
|
|
@@ -10,9 +11,13 @@ import { registerCompile, registerReadLog } from "./tools/compile.js";
|
|
|
10
11
|
import { registerComments } from "./tools/comments.js";
|
|
11
12
|
import { registerTrackedChanges } from "./tools/trackedChanges.js";
|
|
12
13
|
import { close as closeActiveProject } from "./session/activeProject.js";
|
|
14
|
+
import { maybeRunCli } from "./auth/cli.js";
|
|
13
15
|
import { logger } from "./util/logger.js";
|
|
14
16
|
const SERVER_NAME = "overleaf-mcp";
|
|
15
|
-
|
|
17
|
+
// Read once from the published package.json so a release bump can never
|
|
18
|
+
// desync from what the MCP handshake reports. Works in both `tsx` (src/)
|
|
19
|
+
// and the built layout (dist/) because the file is one level above each.
|
|
20
|
+
const SERVER_VERSION = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
|
|
16
21
|
const INSTRUCTIONS = [
|
|
17
22
|
"Overleaf MCP server. Operates on .tex files via Overleaf's Socket.IO web API",
|
|
18
23
|
"(not the Git bridge), so edits land in real time and respect tracked-changes mode.",
|
|
@@ -54,7 +59,9 @@ async function main() {
|
|
|
54
59
|
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
55
60
|
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
56
61
|
}
|
|
57
|
-
|
|
62
|
+
maybeRunCli(process.argv)
|
|
63
|
+
.then(() => main())
|
|
64
|
+
.catch((err) => {
|
|
58
65
|
logger.error("fatal startup error", err instanceof Error ? err.stack ?? err.message : err);
|
|
59
66
|
process.exit(1);
|
|
60
67
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,KAAK,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,WAAW,GAAG,cAAc,CAAC;AACnC,MAAM,cAAc,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ensureSocketForProject, disconnectActive } from "../api/socket.js";
|
|
2
2
|
import { flattenTree, isTrackChangesOnForUser } from "../api/projectTypes.js";
|
|
3
3
|
import { getIdentity } from "./identity.js";
|
|
4
|
+
import { clearDocCache } from "./docCache.js";
|
|
4
5
|
let active = null;
|
|
5
6
|
export function setLastCompile(result) {
|
|
6
7
|
if (active)
|
|
@@ -14,6 +15,7 @@ export async function open(projectId) {
|
|
|
14
15
|
if (!joinedProject) {
|
|
15
16
|
throw new Error("joinProject did not return a project entity");
|
|
16
17
|
}
|
|
18
|
+
clearDocCache();
|
|
17
19
|
// rootFolder is an array containing the single top-level folder.
|
|
18
20
|
const root = joinedProject.rootFolder?.[0];
|
|
19
21
|
const entities = root ? flattenTree(root) : [];
|
|
@@ -34,6 +36,7 @@ export async function open(projectId) {
|
|
|
34
36
|
}
|
|
35
37
|
export function close() {
|
|
36
38
|
disconnectActive();
|
|
39
|
+
clearDocCache();
|
|
37
40
|
active = null;
|
|
38
41
|
}
|
|
39
42
|
export function findByPath(path) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activeProject.js","sourceRoot":"","sources":["../../src/session/activeProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAuC,MAAM,wBAAwB,CAAC;AAEnH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"activeProject.js","sourceRoot":"","sources":["../../src/session/activeProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAuC,MAAM,wBAAwB,CAAC;AAEnH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAa9C,IAAI,MAAM,GAAyB,IAAI,CAAC;AAExC,MAAM,UAAU,cAAc,CAAC,MAAuB;IACpD,IAAI,MAAM;QAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,SAAiB;IAC1C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,aAAa,EAAE,CAAC;IAChB,iEAAiE;IACjE,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC;IAC3C,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/G,MAAM,GAAG;QACP,SAAS;QACT,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,WAAW;QACvC,OAAO,EAAE,aAAa;QACtB,QAAQ;QACR,mBAAmB;QACnB,SAAS;QACT,WAAW;KACZ,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,CAAC;IAChB,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AAC5D,CAAC"}
|
package/dist/session/identity.js
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import { loadConfig } from "../config.js";
|
|
2
2
|
import { OverleafAuthError } from "../api/errors.js";
|
|
3
3
|
import { logger } from "../util/logger.js";
|
|
4
|
+
import { discoverCookie } from "../auth/discover.js";
|
|
4
5
|
let cached = null;
|
|
5
6
|
let pending = null;
|
|
6
7
|
function extractMeta(html, name) {
|
|
7
8
|
const re = new RegExp(`<meta\\s+name=["']${name}["']\\s+content=["']([^"']*)["']`);
|
|
8
9
|
return html.match(re)?.[1];
|
|
9
10
|
}
|
|
10
|
-
async function
|
|
11
|
+
export async function validateCookie(cookie, config = loadConfig()) {
|
|
12
|
+
return resolveIdentity(cookie, config);
|
|
13
|
+
}
|
|
14
|
+
async function resolveIdentity(cookie, config) {
|
|
11
15
|
const url = `${config.baseUrl}/project`;
|
|
12
16
|
const res = await fetch(url, {
|
|
13
17
|
method: "GET",
|
|
14
18
|
redirect: "manual",
|
|
15
|
-
headers: { Cookie:
|
|
19
|
+
headers: { Cookie: cookie, Connection: "keep-alive" },
|
|
16
20
|
});
|
|
17
21
|
if (res.status === 301 || res.status === 302) {
|
|
18
22
|
const location = res.headers.get("location") ?? "";
|
|
19
23
|
throw new OverleafAuthError(`Session cookie rejected (redirected to ${location || "login"}). ` +
|
|
20
|
-
"The cookie is likely expired —
|
|
24
|
+
"The cookie is likely expired — run `overleaf-mcp login` to refresh.");
|
|
21
25
|
}
|
|
22
26
|
if (!res.ok) {
|
|
23
27
|
throw new OverleafAuthError(`GET /project returned HTTP ${res.status}`);
|
|
@@ -35,7 +39,7 @@ async function resolveIdentity(config) {
|
|
|
35
39
|
"Pass OL_CSRF as a fallback or check that your Overleaf server emits the meta tag.");
|
|
36
40
|
}
|
|
37
41
|
logger.info(`authenticated as ${userEmail || userId}`);
|
|
38
|
-
return { baseUrl: config.baseUrl, cookie
|
|
42
|
+
return { baseUrl: config.baseUrl, cookie, csrf, userId, userEmail };
|
|
39
43
|
}
|
|
40
44
|
export async function getIdentity() {
|
|
41
45
|
if (cached)
|
|
@@ -43,7 +47,10 @@ export async function getIdentity() {
|
|
|
43
47
|
if (pending)
|
|
44
48
|
return pending;
|
|
45
49
|
const config = loadConfig();
|
|
46
|
-
pending =
|
|
50
|
+
pending = (async () => {
|
|
51
|
+
const cookie = await discoverCookie(config.baseUrl);
|
|
52
|
+
return resolveIdentity(cookie, config);
|
|
53
|
+
})()
|
|
47
54
|
.then((id) => {
|
|
48
55
|
cached = id;
|
|
49
56
|
return id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/session/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/session/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Wrap an authenticated call so a single OverleafAuthError triggers a
|
|
2
|
+
// re-discovery (which may re-launch a browser in PR2) and exactly one retry.
|
|
3
|
+
//
|
|
4
|
+
// Lives in its own module to break a would-be cycle: socket.ts imports
|
|
5
|
+
// withAuthRetry, but disconnectActive lives in socket.ts. Resolved here via
|
|
6
|
+
// a dynamic import.
|
|
7
|
+
import { OverleafAuthError } from "../api/errors.js";
|
|
8
|
+
import { loadConfig } from "../config.js";
|
|
9
|
+
import { logger } from "../util/logger.js";
|
|
10
|
+
import { evictAndRediscover } from "../auth/discover.js";
|
|
11
|
+
import { clearIdentity } from "./identity.js";
|
|
12
|
+
export async function withAuthRetry(fn) {
|
|
13
|
+
try {
|
|
14
|
+
return await fn();
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
if (!(err instanceof OverleafAuthError))
|
|
18
|
+
throw err;
|
|
19
|
+
const config = loadConfig();
|
|
20
|
+
logger.info(`auth error, attempting recovery: ${err.message}`);
|
|
21
|
+
clearIdentity();
|
|
22
|
+
const { disconnectActive } = await import("../api/socket.js");
|
|
23
|
+
disconnectActive();
|
|
24
|
+
await evictAndRediscover(config.baseUrl);
|
|
25
|
+
return await fn();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/session/recovery.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,6EAA6E;AAC7E,EAAE;AACF,uEAAuE;AACvE,4EAA4E;AAC5E,oBAAoB;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,EAAoB;IACzD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,iBAAiB,CAAC;YAAE,MAAM,GAAG,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,oCAAoC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9D,gBAAgB,EAAE,CAAC;QACnB,MAAM,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;AACH,CAAC"}
|
package/dist/tools/compile.js
CHANGED
|
@@ -16,9 +16,9 @@ const Schema = z.object({
|
|
|
16
16
|
.default(false)
|
|
17
17
|
.describe("Stop on the first LaTeX error instead of continuing to produce a partial PDF."),
|
|
18
18
|
});
|
|
19
|
-
function summarizeErrors(log) {
|
|
19
|
+
export function summarizeErrors(log, maxErrorLines = 20) {
|
|
20
20
|
if (!log)
|
|
21
|
-
return { errors: [], warnings: 0 };
|
|
21
|
+
return { errors: [], error_count: 0, warnings: 0 };
|
|
22
22
|
const errors = [];
|
|
23
23
|
let warnings = 0;
|
|
24
24
|
for (const line of log.split("\n")) {
|
|
@@ -27,7 +27,7 @@ function summarizeErrors(log) {
|
|
|
27
27
|
else if (/warning/i.test(line))
|
|
28
28
|
warnings++;
|
|
29
29
|
}
|
|
30
|
-
return { errors: errors.slice(0,
|
|
30
|
+
return { errors: errors.slice(0, maxErrorLines), error_count: errors.length, warnings };
|
|
31
31
|
}
|
|
32
32
|
// Build the GET-able URL for an output file from a compile response, including
|
|
33
33
|
// the clsiserverid + compileGroup query params CLSI requires.
|
|
@@ -89,7 +89,7 @@ export function registerCompile(server) {
|
|
|
89
89
|
logBytes = log.length;
|
|
90
90
|
const summarized = summarizeErrors(log);
|
|
91
91
|
errorLines = summarized.errors;
|
|
92
|
-
errorCount =
|
|
92
|
+
errorCount = summarized.error_count;
|
|
93
93
|
warningCount = summarized.warnings;
|
|
94
94
|
}
|
|
95
95
|
}
|
|
@@ -141,7 +141,7 @@ export function registerReadLog(server) {
|
|
|
141
141
|
title: "Read the last compile's output.log",
|
|
142
142
|
description: "Returns the full LaTeX log from the most recent `compile` call. " +
|
|
143
143
|
"`compile` already includes the error count + first few errors in its response — use this only when you need more context (full log, line numbers, package warnings, etc.). " +
|
|
144
|
-
"Includes a summary of `!`-prefixed error lines at the top, then the full log (truncated to the last 8000 chars).",
|
|
144
|
+
"Includes a summary of `!`-prefixed error lines at the top (sampled, with total count), then the full log (truncated to the last 8000 chars).",
|
|
145
145
|
inputSchema: {},
|
|
146
146
|
annotations: { readOnlyHint: true },
|
|
147
147
|
}, async () => {
|
|
@@ -161,11 +161,12 @@ export function registerReadLog(server) {
|
|
|
161
161
|
if (fullLog == null) {
|
|
162
162
|
return { content: [{ type: "text", text: "No output.log available." }], isError: true };
|
|
163
163
|
}
|
|
164
|
-
const { errors, warnings } = summarizeErrors(fullLog);
|
|
164
|
+
const { errors, error_count, warnings } = summarizeErrors(fullLog, 200);
|
|
165
165
|
const tail = fullLog.length > 8000 ? fullLog.slice(-8000) : fullLog;
|
|
166
|
-
const
|
|
167
|
-
? `=== ${
|
|
168
|
-
:
|
|
166
|
+
const errorHeader = error_count > errors.length
|
|
167
|
+
? `=== ${error_count} error line(s) (showing first ${errors.length}) ===`
|
|
168
|
+
: `=== ${error_count} error line(s) ===`;
|
|
169
|
+
const errorBlock = errors.length ? `${errorHeader}\n${errors.join("\n")}\n\n` : "=== no '! ' error lines ===\n\n";
|
|
169
170
|
const text = errorBlock +
|
|
170
171
|
(fullLog.length > 8000 ? `=== output.log (last 8000 of ${fullLog.length} chars) ===\n` : "=== output.log ===\n") +
|
|
171
172
|
tail;
|
|
@@ -173,7 +174,9 @@ export function registerReadLog(server) {
|
|
|
173
174
|
content: [{ type: "text", text }],
|
|
174
175
|
structuredContent: {
|
|
175
176
|
log_bytes: fullLog.length,
|
|
177
|
+
error_count,
|
|
176
178
|
error_lines: errors,
|
|
179
|
+
error_lines_sampled: errors.length,
|
|
177
180
|
warning_count: warnings,
|
|
178
181
|
},
|
|
179
182
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/tools/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kHAAkH,CAAC;IAC/H,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,mBAAmB,EAAE,CAAC;SACnB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,+EAA+E,CAAC;CAC7F,CAAC,CAAC;AAEH,
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/tools/compile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netique/overleaf-mcp",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "MCP server for Overleaf with tracked-changes support, via the Socket.IO web API (not the Git bridge).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"dev": "tsx watch src/index.ts",
|
|
28
28
|
"start": "node dist/index.js",
|
|
29
29
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
30
|
-
"test": "node
|
|
30
|
+
"test": "node tests/run-unit-tests.mjs",
|
|
31
31
|
"prepublishOnly": "npm run build"
|
|
32
32
|
},
|
|
33
33
|
"keywords": [
|