aidocx-mcp-server 0.1.2 → 0.3.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/README.md +14 -7
- package/build/api-client.d.ts +2 -1
- package/build/api-client.js +30 -5
- package/build/index.js +14 -3
- package/build/tools/analyze-contract.js +36 -0
- package/build/tools/create-contract.d.ts +3 -0
- package/build/tools/{create-contract-html.js → create-contract.js} +6 -7
- package/build/tools/delete-contract.d.ts +3 -0
- package/build/tools/delete-contract.js +30 -0
- package/build/tools/delete-folder.d.ts +3 -0
- package/build/tools/delete-folder.js +38 -0
- package/build/tools/list-contracts.js +14 -5
- package/build/tools/search-contracts.d.ts +3 -0
- package/build/tools/search-contracts.js +68 -0
- package/package.json +2 -2
- /package/build/tools/{create-contract-html.d.ts → analyze-contract.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -34,11 +34,12 @@ Add to your `claude_desktop_config.json`:
|
|
|
34
34
|
#### Claude Code
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
claude mcp add aidocx
|
|
37
|
+
claude mcp add aidocx \
|
|
38
|
+
-e AIDOCX_API_KEY=ak_xxxxxxxx \
|
|
39
|
+
-e AIDOCX_API_SECRET=your_secret_here \
|
|
40
|
+
-- npx aidocx-mcp-server
|
|
38
41
|
```
|
|
39
42
|
|
|
40
|
-
Then set environment variables `AIDOCX_API_KEY` and `AIDOCX_API_SECRET`.
|
|
41
|
-
|
|
42
43
|
### 3. Start Using
|
|
43
44
|
|
|
44
45
|
Ask your AI assistant:
|
|
@@ -46,21 +47,27 @@ Ask your AI assistant:
|
|
|
46
47
|
- "계약서 양식 만들어서 AiDocX에 올려줘" (Create a contract and upload to AiDocX)
|
|
47
48
|
- "NDA 계약서 작성해줘" (Draft an NDA)
|
|
48
49
|
- "내 문서 목록 보여줘" (Show my documents)
|
|
50
|
+
- "이 계약서 AI로 분석해줘" (Analyze this contract with AI)
|
|
51
|
+
- "계약서 검색해줘" (Search my contracts)
|
|
49
52
|
|
|
50
53
|
## Available Tools
|
|
51
54
|
|
|
52
55
|
| Tool | Description |
|
|
53
56
|
|------|-------------|
|
|
54
|
-
| `
|
|
57
|
+
| `create_contract` | Create a new contract — auto-generates a professionally formatted PDF |
|
|
55
58
|
| `upload_contract` | Upload a PDF or Office file (DOC, DOCX, HWP, XLS, XLSX, PPT, PPTX) |
|
|
56
|
-
| `list_contracts` | List contracts
|
|
57
|
-
| `get_contract` | Get contract details |
|
|
59
|
+
| `list_contracts` | List contracts with optional pagination |
|
|
60
|
+
| `get_contract` | Get contract details and extracted text |
|
|
61
|
+
| `delete_contract` | Delete a contract |
|
|
58
62
|
| `list_folders` | List folders |
|
|
59
63
|
| `create_folder` | Create a new folder |
|
|
64
|
+
| `delete_folder` | Delete a folder (optionally with all contents) |
|
|
65
|
+
| `search_contracts` | Search contracts with text query, date filters, and pagination |
|
|
66
|
+
| `analyze_contract` | AI-powered contract analysis with risk score and insights |
|
|
60
67
|
|
|
61
68
|
## Workflow
|
|
62
69
|
|
|
63
|
-
1. **AI generates a contract** → calls `
|
|
70
|
+
1. **AI generates a contract** → calls `create_contract` → PDF is created in AiDocX
|
|
64
71
|
2. **Open the signing workspace URL** returned by the tool
|
|
65
72
|
3. **Place signature fields** and send to signers in the AiDocX web app
|
|
66
73
|
|
package/build/api-client.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ export declare class AiDocxClient {
|
|
|
5
5
|
private get headers();
|
|
6
6
|
get appUrl(): string;
|
|
7
7
|
private url;
|
|
8
|
+
private formatError;
|
|
8
9
|
get<T = any>(path: string, params?: Record<string, string>): Promise<T>;
|
|
9
10
|
post<T = any>(path: string, body: Record<string, any>): Promise<T>;
|
|
10
|
-
delete<T = any>(path: string): Promise<T>;
|
|
11
|
+
delete<T = any>(path: string, params?: Record<string, string>): Promise<T>;
|
|
11
12
|
}
|
package/build/api-client.js
CHANGED
|
@@ -16,6 +16,24 @@ export class AiDocxClient {
|
|
|
16
16
|
url(path) {
|
|
17
17
|
return `${this.config.apiUrl}/api${path}`;
|
|
18
18
|
}
|
|
19
|
+
formatError(status, body) {
|
|
20
|
+
switch (status) {
|
|
21
|
+
case 401:
|
|
22
|
+
return new Error(`[${status}] Authentication failed. Your API key or secret is invalid or expired. Regenerate at https://app.aidocx.ai/settings → API Keys.`);
|
|
23
|
+
case 402:
|
|
24
|
+
return new Error(`[${status}] Insufficient tokens or subscription required. Upgrade your plan at https://app.aidocx.ai/settings → Billing.`);
|
|
25
|
+
case 403:
|
|
26
|
+
return new Error(`[${status}] Permission denied. You do not have access to this resource.`);
|
|
27
|
+
case 404:
|
|
28
|
+
return new Error(`[${status}] Resource not found. The requested contract, folder, or resource does not exist.`);
|
|
29
|
+
case 413:
|
|
30
|
+
return new Error(`[${status}] File too large. Maximum upload size is 50MB.`);
|
|
31
|
+
case 429:
|
|
32
|
+
return new Error(`[${status}] Rate limited. Too many requests — please wait a moment and try again.`);
|
|
33
|
+
default:
|
|
34
|
+
return new Error(`[${status}] ${body || "Unknown error"}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
19
37
|
async get(path, params) {
|
|
20
38
|
const url = new URL(this.url(path));
|
|
21
39
|
if (params) {
|
|
@@ -27,7 +45,7 @@ export class AiDocxClient {
|
|
|
27
45
|
const res = await fetch(url.toString(), { headers: this.headers });
|
|
28
46
|
if (!res.ok) {
|
|
29
47
|
const body = await res.text();
|
|
30
|
-
throw
|
|
48
|
+
throw this.formatError(res.status, body);
|
|
31
49
|
}
|
|
32
50
|
return res.json();
|
|
33
51
|
}
|
|
@@ -39,18 +57,25 @@ export class AiDocxClient {
|
|
|
39
57
|
});
|
|
40
58
|
if (!res.ok) {
|
|
41
59
|
const text = await res.text();
|
|
42
|
-
throw
|
|
60
|
+
throw this.formatError(res.status, text);
|
|
43
61
|
}
|
|
44
62
|
return res.json();
|
|
45
63
|
}
|
|
46
|
-
async delete(path) {
|
|
47
|
-
const
|
|
64
|
+
async delete(path, params) {
|
|
65
|
+
const url = new URL(this.url(path));
|
|
66
|
+
if (params) {
|
|
67
|
+
for (const [k, v] of Object.entries(params)) {
|
|
68
|
+
if (v !== undefined && v !== "")
|
|
69
|
+
url.searchParams.set(k, v);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const res = await fetch(url.toString(), {
|
|
48
73
|
method: "DELETE",
|
|
49
74
|
headers: this.headers,
|
|
50
75
|
});
|
|
51
76
|
if (!res.ok) {
|
|
52
77
|
const text = await res.text();
|
|
53
|
-
throw
|
|
78
|
+
throw this.formatError(res.status, text);
|
|
54
79
|
}
|
|
55
80
|
return res.json();
|
|
56
81
|
}
|
package/build/index.js
CHANGED
|
@@ -1,27 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
2
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
5
|
import { loadConfig } from "./config.js";
|
|
5
6
|
import { AiDocxClient } from "./api-client.js";
|
|
6
|
-
import { register as
|
|
7
|
+
import { register as registerCreateContract } from "./tools/create-contract.js";
|
|
7
8
|
import { register as registerUploadContract } from "./tools/upload-contract.js";
|
|
8
9
|
import { register as registerListContracts } from "./tools/list-contracts.js";
|
|
9
10
|
import { register as registerGetContract } from "./tools/get-contract.js";
|
|
10
11
|
import { register as registerListFolders } from "./tools/list-folders.js";
|
|
11
12
|
import { register as registerCreateFolder } from "./tools/create-folder.js";
|
|
13
|
+
import { register as registerDeleteContract } from "./tools/delete-contract.js";
|
|
14
|
+
import { register as registerDeleteFolder } from "./tools/delete-folder.js";
|
|
15
|
+
import { register as registerSearchContracts } from "./tools/search-contracts.js";
|
|
16
|
+
import { register as registerAnalyzeContract } from "./tools/analyze-contract.js";
|
|
17
|
+
const require = createRequire(import.meta.url);
|
|
18
|
+
const { version } = require("../package.json");
|
|
12
19
|
async function main() {
|
|
13
20
|
const config = loadConfig();
|
|
14
21
|
const client = new AiDocxClient(config);
|
|
15
22
|
const server = new McpServer({
|
|
16
23
|
name: "aidocx",
|
|
17
|
-
version
|
|
24
|
+
version,
|
|
18
25
|
});
|
|
19
|
-
|
|
26
|
+
registerCreateContract(server, client);
|
|
20
27
|
registerUploadContract(server, client);
|
|
21
28
|
registerListContracts(server, client);
|
|
22
29
|
registerGetContract(server, client);
|
|
23
30
|
registerListFolders(server, client);
|
|
24
31
|
registerCreateFolder(server, client);
|
|
32
|
+
registerDeleteContract(server, client);
|
|
33
|
+
registerDeleteFolder(server, client);
|
|
34
|
+
registerSearchContracts(server, client);
|
|
35
|
+
registerAnalyzeContract(server, client);
|
|
25
36
|
const transport = new StdioServerTransport();
|
|
26
37
|
await server.connect(transport);
|
|
27
38
|
console.error("[AiDocX MCP] Server running on stdio");
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const inputSchema = {
|
|
3
|
+
id: z.string().describe("Contract ID to analyze"),
|
|
4
|
+
};
|
|
5
|
+
export function register(server, client) {
|
|
6
|
+
server.registerTool("analyze_contract", {
|
|
7
|
+
description: "Analyze a contract using AI. Returns a summary, risk score (0-100), and detailed insights " +
|
|
8
|
+
"including key clauses, missing protections, and opportunities for improvement.\n\n" +
|
|
9
|
+
"NOTE: This operation consumes AI tokens from the user's subscription plan. " +
|
|
10
|
+
"The analysis may take 10-30 seconds depending on contract length.",
|
|
11
|
+
inputSchema,
|
|
12
|
+
}, async ({ id }) => {
|
|
13
|
+
try {
|
|
14
|
+
const result = await client.post("/ai/analyze", { id });
|
|
15
|
+
return {
|
|
16
|
+
content: [{
|
|
17
|
+
type: "text",
|
|
18
|
+
text: JSON.stringify({
|
|
19
|
+
success: true,
|
|
20
|
+
contractId: id,
|
|
21
|
+
summary: result.summary,
|
|
22
|
+
riskScore: result.riskScore,
|
|
23
|
+
insights: result.insights,
|
|
24
|
+
tokensUsed: result.tokensUsed,
|
|
25
|
+
}, null, 2),
|
|
26
|
+
}],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return {
|
|
31
|
+
content: [{ type: "text", text: `Error: ${error.message}` }],
|
|
32
|
+
isError: true,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function register(server, client) {
|
|
3
3
|
// @ts-expect-error -- MCP SDK generic recursion with zod v3.25+ optional()
|
|
4
|
-
server.registerTool("
|
|
5
|
-
description: "Create a new contract in AiDocX
|
|
6
|
-
"
|
|
7
|
-
"A4 page size with 2cm margins.\n\n" +
|
|
4
|
+
server.registerTool("create_contract", {
|
|
5
|
+
description: "Create a new contract in AiDocX. The content is rendered to a professionally formatted PDF " +
|
|
6
|
+
"(A4, proper margins) and stored in document management.\n\n" +
|
|
8
7
|
"IMPORTANT: Before calling this tool, you MUST confirm the following with the user:\n" +
|
|
9
8
|
"1. Contract type (e.g., service agreement, employment contract, NDA)\n" +
|
|
10
9
|
"2. Parties involved (company names, representative names, roles)\n" +
|
|
@@ -15,9 +14,9 @@ export function register(server, client) {
|
|
|
15
14
|
"and signature blocks for each signer at the bottom. " +
|
|
16
15
|
"Do NOT include <html>/<head>/<body> wrapper — only the inner content.",
|
|
17
16
|
inputSchema: {
|
|
18
|
-
name: z.string(),
|
|
19
|
-
html: z.string(),
|
|
20
|
-
folderId: z.string().optional(),
|
|
17
|
+
name: z.string().describe("Contract title"),
|
|
18
|
+
html: z.string().describe("Contract body content"),
|
|
19
|
+
folderId: z.string().optional().describe("Target folder ID"),
|
|
21
20
|
},
|
|
22
21
|
}, async ({ name, html, folderId }) => {
|
|
23
22
|
try {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const inputSchema = {
|
|
3
|
+
id: z.string().describe("Contract ID to delete"),
|
|
4
|
+
};
|
|
5
|
+
export function register(server, client) {
|
|
6
|
+
server.registerTool("delete_contract", {
|
|
7
|
+
description: "Delete a contract from AiDocX document management. This action is irreversible.\n\n" +
|
|
8
|
+
"IMPORTANT: Always confirm with the user before deleting a contract.",
|
|
9
|
+
inputSchema,
|
|
10
|
+
}, async ({ id }) => {
|
|
11
|
+
try {
|
|
12
|
+
await client.delete(`/contracts/${id}`);
|
|
13
|
+
return {
|
|
14
|
+
content: [{
|
|
15
|
+
type: "text",
|
|
16
|
+
text: JSON.stringify({
|
|
17
|
+
success: true,
|
|
18
|
+
message: `Contract ${id} has been deleted.`,
|
|
19
|
+
}, null, 2),
|
|
20
|
+
}],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
content: [{ type: "text", text: `Error: ${error.message}` }],
|
|
26
|
+
isError: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const inputSchema = {
|
|
3
|
+
id: z.string().describe("Folder ID to delete"),
|
|
4
|
+
recursive: z.boolean().optional().describe("If true, delete the folder and all its contents (subfolders and contracts). " +
|
|
5
|
+
"If false or omitted, the folder must be empty to delete."),
|
|
6
|
+
};
|
|
7
|
+
export function register(server, client) {
|
|
8
|
+
server.registerTool("delete_folder", {
|
|
9
|
+
description: "Delete a folder from AiDocX document management.\n\n" +
|
|
10
|
+
"IMPORTANT: Always confirm with the user before deleting. " +
|
|
11
|
+
"Use recursive=true only when the user explicitly wants to delete all contents.",
|
|
12
|
+
inputSchema,
|
|
13
|
+
},
|
|
14
|
+
// @ts-expect-error -- MCP SDK generic recursion with zod v3.25+ optional()
|
|
15
|
+
async ({ id, recursive }) => {
|
|
16
|
+
try {
|
|
17
|
+
const params = {};
|
|
18
|
+
if (recursive)
|
|
19
|
+
params.recursive = "true";
|
|
20
|
+
await client.delete(`/contracts/folders/${id}`, params);
|
|
21
|
+
return {
|
|
22
|
+
content: [{
|
|
23
|
+
type: "text",
|
|
24
|
+
text: JSON.stringify({
|
|
25
|
+
success: true,
|
|
26
|
+
message: `Folder ${id} has been deleted${recursive ? " with all contents" : ""}.`,
|
|
27
|
+
}, null, 2),
|
|
28
|
+
}],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return {
|
|
33
|
+
content: [{ type: "text", text: `Error: ${error.message}` }],
|
|
34
|
+
isError: true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
const inputSchema = {
|
|
3
3
|
folderId: z.string().optional().describe("Folder ID to list. Omit for root folder."),
|
|
4
|
+
limit: z.number().optional().describe("Maximum number of contracts to return. Default: 50"),
|
|
5
|
+
offset: z.number().optional().describe("Number of contracts to skip. Default: 0"),
|
|
4
6
|
};
|
|
5
7
|
export function register(server, client) {
|
|
6
8
|
server.registerTool("list_contracts", {
|
|
7
|
-
description: "List contracts in the user's AiDocX document management.",
|
|
9
|
+
description: "List contracts in the user's AiDocX document management. Supports pagination.",
|
|
8
10
|
inputSchema,
|
|
9
|
-
}, async ({ folderId }) => {
|
|
11
|
+
}, async ({ folderId, limit, offset }) => {
|
|
10
12
|
try {
|
|
11
13
|
const params = {};
|
|
12
14
|
if (folderId)
|
|
13
15
|
params.folderId = folderId;
|
|
14
16
|
const result = await client.get("/contracts", params);
|
|
15
17
|
const contracts = result.contracts || result;
|
|
16
|
-
const
|
|
18
|
+
const all = Array.isArray(contracts)
|
|
17
19
|
? contracts.map((c) => ({
|
|
18
20
|
id: c.id, name: c.name, fileType: c.fileType,
|
|
19
21
|
fileSize: c.fileSize, contentType: c.contentType,
|
|
20
22
|
createdAt: c.createdAt, updatedAt: c.updatedAt,
|
|
21
23
|
}))
|
|
22
24
|
: contracts;
|
|
25
|
+
const effectiveLimit = limit ?? 50;
|
|
26
|
+
const effectiveOffset = offset ?? 0;
|
|
27
|
+
const paginated = Array.isArray(all)
|
|
28
|
+
? all.slice(effectiveOffset, effectiveOffset + effectiveLimit)
|
|
29
|
+
: all;
|
|
23
30
|
return {
|
|
24
31
|
content: [{
|
|
25
32
|
type: "text",
|
|
26
33
|
text: JSON.stringify({
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
total: Array.isArray(all) ? all.length : 0,
|
|
35
|
+
count: Array.isArray(paginated) ? paginated.length : 0,
|
|
36
|
+
contracts: paginated,
|
|
37
|
+
pagination: { limit: effectiveLimit, offset: effectiveOffset },
|
|
29
38
|
}, null, 2),
|
|
30
39
|
}],
|
|
31
40
|
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const inputSchema = {
|
|
3
|
+
query: z.string().optional().describe("Search query text. Searches contract names and content."),
|
|
4
|
+
sortBy: z.enum(["relevance", "date", "name"]).optional().describe("Sort results by relevance, date, or name. Default: relevance"),
|
|
5
|
+
sortOrder: z.enum(["asc", "desc"]).optional().describe("Sort order. Default: desc"),
|
|
6
|
+
dateFrom: z.string().optional().describe("Filter results from this date (ISO 8601, e.g., '2024-01-01')"),
|
|
7
|
+
dateTo: z.string().optional().describe("Filter results up to this date (ISO 8601)"),
|
|
8
|
+
limit: z.number().optional().describe("Maximum results to return (1-100). Default: 20"),
|
|
9
|
+
offset: z.number().optional().describe("Number of results to skip for pagination. Default: 0"),
|
|
10
|
+
};
|
|
11
|
+
export function register(server, client) {
|
|
12
|
+
server.registerTool("search_contracts", {
|
|
13
|
+
description: "Search contracts in AiDocX. Supports text search, date filtering, and pagination. " +
|
|
14
|
+
"Returns matching contracts sorted by relevance by default.",
|
|
15
|
+
inputSchema,
|
|
16
|
+
},
|
|
17
|
+
// @ts-expect-error -- MCP SDK generic recursion with zod v3.25+ optional()
|
|
18
|
+
async ({ query, sortBy, sortOrder, dateFrom, dateTo, limit, offset }) => {
|
|
19
|
+
try {
|
|
20
|
+
const params = { types: "contract" };
|
|
21
|
+
if (query)
|
|
22
|
+
params.q = query;
|
|
23
|
+
if (sortBy)
|
|
24
|
+
params.sortBy = sortBy;
|
|
25
|
+
if (sortOrder)
|
|
26
|
+
params.sortOrder = sortOrder;
|
|
27
|
+
if (dateFrom)
|
|
28
|
+
params.dateFrom = dateFrom;
|
|
29
|
+
if (dateTo)
|
|
30
|
+
params.dateTo = dateTo;
|
|
31
|
+
if (limit !== undefined)
|
|
32
|
+
params.limit = String(limit);
|
|
33
|
+
if (offset !== undefined)
|
|
34
|
+
params.offset = String(offset);
|
|
35
|
+
const result = await client.get("/search", params);
|
|
36
|
+
const items = result.results || result;
|
|
37
|
+
return {
|
|
38
|
+
content: [{
|
|
39
|
+
type: "text",
|
|
40
|
+
text: JSON.stringify({
|
|
41
|
+
total: result.total ?? (Array.isArray(items) ? items.length : 0),
|
|
42
|
+
results: Array.isArray(items)
|
|
43
|
+
? items.map((item) => ({
|
|
44
|
+
id: item.id,
|
|
45
|
+
name: item.name,
|
|
46
|
+
type: item.type,
|
|
47
|
+
fileType: item.fileType,
|
|
48
|
+
fileSize: item.fileSize,
|
|
49
|
+
createdAt: item.createdAt,
|
|
50
|
+
updatedAt: item.updatedAt,
|
|
51
|
+
}))
|
|
52
|
+
: items,
|
|
53
|
+
pagination: {
|
|
54
|
+
limit: limit ?? 20,
|
|
55
|
+
offset: offset ?? 0,
|
|
56
|
+
},
|
|
57
|
+
}, null, 2),
|
|
58
|
+
}],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return {
|
|
63
|
+
content: [{ type: "text", text: `Error: ${error.message}` }],
|
|
64
|
+
isError: true,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aidocx-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "MCP server for AiDocX - Create, upload, and manage contracts from Claude Desktop and other AI assistants",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"aidocx-mcp": "./build/index.js"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
|
-
"build": "tsc",
|
|
28
|
+
"build": "NODE_OPTIONS=--max-old-space-size=8192 tsc",
|
|
29
29
|
"start": "node build/index.js",
|
|
30
30
|
"dev": "tsx src/index.ts"
|
|
31
31
|
},
|
|
File without changes
|