termsive-mcp 1.0.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,36 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Termsive MCP Server
4
+ *
5
+ * Exposes the full Termsive REST API as MCP tools so Claude agents and
6
+ * any MCP-compatible runtime can call Termsive natively as a tool.
7
+ *
8
+ * Usage:
9
+ * TERMSIVE_API_KEY=trm_... TERMSIVE_API_BASE_URL=https://app.termsive.com/api/v1 \
10
+ * npx ts-node mcp/termsive-mcp.ts
11
+ *
12
+ * Claude Desktop config:
13
+ * {
14
+ * "mcpServers": {
15
+ * "termsive": {
16
+ * "command": "node",
17
+ * "args": ["/path/to/termsive-mcp/dist/index.js"],
18
+ * "env": {
19
+ * "TERMSIVE_API_KEY": "trm_...",
20
+ * "TERMSIVE_API_BASE_URL": "https://app.termsive.com/api/v1"
21
+ * }
22
+ * }
23
+ * }
24
+ * }
25
+ *
26
+ * Tools (18 total):
27
+ * Documents (6): analyze_document, list_documents, get_document,
28
+ * get_document_status, download_document, delete_document
29
+ * Summaries (4): list_summaries, get_summary, delete_summary, email_summary
30
+ * Editing (4): update_key_date, update_financial_term, update_key_point,
31
+ * complete_obligation
32
+ * User (4): get_user_profile, get_time_saved, get_preferences,
33
+ * update_preferences
34
+ */
35
+ export {};
36
+ //# sourceMappingURL=termsive-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"termsive-mcp.d.ts","sourceRoot":"","sources":["../termsive-mcp.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG"}
@@ -0,0 +1,547 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Termsive MCP Server
4
+ *
5
+ * Exposes the full Termsive REST API as MCP tools so Claude agents and
6
+ * any MCP-compatible runtime can call Termsive natively as a tool.
7
+ *
8
+ * Usage:
9
+ * TERMSIVE_API_KEY=trm_... TERMSIVE_API_BASE_URL=https://app.termsive.com/api/v1 \
10
+ * npx ts-node mcp/termsive-mcp.ts
11
+ *
12
+ * Claude Desktop config:
13
+ * {
14
+ * "mcpServers": {
15
+ * "termsive": {
16
+ * "command": "node",
17
+ * "args": ["/path/to/termsive-mcp/dist/index.js"],
18
+ * "env": {
19
+ * "TERMSIVE_API_KEY": "trm_...",
20
+ * "TERMSIVE_API_BASE_URL": "https://app.termsive.com/api/v1"
21
+ * }
22
+ * }
23
+ * }
24
+ * }
25
+ *
26
+ * Tools (18 total):
27
+ * Documents (6): analyze_document, list_documents, get_document,
28
+ * get_document_status, download_document, delete_document
29
+ * Summaries (4): list_summaries, get_summary, delete_summary, email_summary
30
+ * Editing (4): update_key_date, update_financial_term, update_key_point,
31
+ * complete_obligation
32
+ * User (4): get_user_profile, get_time_saved, get_preferences,
33
+ * update_preferences
34
+ */
35
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
36
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
37
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
38
+ // ---------------------------------------------------------------------------
39
+ // Config
40
+ // ---------------------------------------------------------------------------
41
+ const API_KEY = process.env.TERMSIVE_API_KEY;
42
+ const BASE_URL = (process.env.TERMSIVE_API_BASE_URL || 'https://app.termsive.com/api/v1').replace(/\/$/, '');
43
+ if (!API_KEY) {
44
+ console.error('[termsive-mcp] TERMSIVE_API_KEY environment variable is required');
45
+ process.exit(1);
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // HTTP helper
49
+ // ---------------------------------------------------------------------------
50
+ async function apiRequest(method, path, body) {
51
+ const url = `${BASE_URL}${path}`;
52
+ const headers = {
53
+ Authorization: `Bearer ${API_KEY}`,
54
+ Accept: 'application/json',
55
+ };
56
+ if (body !== undefined && method !== 'GET') {
57
+ headers['Content-Type'] = 'application/json';
58
+ }
59
+ try {
60
+ const res = await fetch(url, {
61
+ method,
62
+ headers,
63
+ body: body !== undefined && method !== 'GET' ? JSON.stringify(body) : undefined,
64
+ });
65
+ const contentType = res.headers.get('content-type') || '';
66
+ if (contentType.includes('application/json')) {
67
+ const json = await res.json();
68
+ if (!res.ok) {
69
+ return { error: json.error || JSON.stringify(json), status: res.status };
70
+ }
71
+ return { data: json, status: res.status };
72
+ }
73
+ // Binary response (download)
74
+ if (res.ok) {
75
+ const contentDisposition = res.headers.get('content-disposition') || '';
76
+ const buffer = await res.arrayBuffer();
77
+ return {
78
+ data: {
79
+ _binary: true,
80
+ content_disposition: contentDisposition,
81
+ content_type: contentType,
82
+ size_bytes: buffer.byteLength,
83
+ note: 'Binary file received. Save to disk using the content_disposition filename.',
84
+ },
85
+ status: res.status,
86
+ };
87
+ }
88
+ return { error: `Request failed with status ${res.status}`, status: res.status };
89
+ }
90
+ catch (err) {
91
+ const message = err instanceof Error ? err.message : String(err);
92
+ return { error: `Network error: ${message}`, status: 0 };
93
+ }
94
+ }
95
+ function formatResult(result) {
96
+ if (result.error) {
97
+ return JSON.stringify({ error: result.error, status: result.status }, null, 2);
98
+ }
99
+ return JSON.stringify(result.data, null, 2);
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Tool definitions
103
+ // ---------------------------------------------------------------------------
104
+ const TOOLS = [
105
+ // ------------------------------------------------------------------
106
+ // DOCUMENTS
107
+ // ------------------------------------------------------------------
108
+ {
109
+ name: 'analyze_document',
110
+ description: 'Upload a document from a URL into Termsive. The document is automatically parsed, classified, and summarized. Use get_document_status to poll until complete.',
111
+ inputSchema: {
112
+ type: 'object',
113
+ properties: {
114
+ file_url: {
115
+ type: 'string',
116
+ description: 'HTTPS URL of the document to upload (PDF, DOCX, or TXT). Max 50 MB.',
117
+ },
118
+ document_name: {
119
+ type: 'string',
120
+ description: 'Optional display name for the document.',
121
+ },
122
+ },
123
+ required: ['file_url'],
124
+ },
125
+ },
126
+ {
127
+ name: 'list_documents',
128
+ description: 'List all documents in the user\'s Termsive account, with pagination and optional status filter.',
129
+ inputSchema: {
130
+ type: 'object',
131
+ properties: {
132
+ page: { type: 'number', description: 'Page number (default: 1)' },
133
+ limit: { type: 'number', description: 'Results per page (default: 20, max: 100)' },
134
+ status: {
135
+ type: 'string',
136
+ enum: ['pending', 'processing', 'completed', 'failed'],
137
+ description: 'Filter by document status',
138
+ },
139
+ },
140
+ },
141
+ },
142
+ {
143
+ name: 'get_document',
144
+ description: 'Get a single document record including its current pipeline status and metadata.',
145
+ inputSchema: {
146
+ type: 'object',
147
+ properties: {
148
+ document_id: { type: 'string', description: 'UUID of the document' },
149
+ },
150
+ required: ['document_id'],
151
+ },
152
+ },
153
+ {
154
+ name: 'get_document_status',
155
+ description: 'Poll the processing pipeline status of a document. Returns current step, status, and the summary_id when processing completes. Poll every 2–5 seconds until pipeline_status === "completed".',
156
+ inputSchema: {
157
+ type: 'object',
158
+ properties: {
159
+ document_id: { type: 'string', description: 'UUID of the document to check' },
160
+ },
161
+ required: ['document_id'],
162
+ },
163
+ },
164
+ {
165
+ name: 'download_document',
166
+ description: 'Download the original document file. Returns file metadata including size and content-type. Binary data is not returned in tool output — file metadata is provided instead.',
167
+ inputSchema: {
168
+ type: 'object',
169
+ properties: {
170
+ document_id: { type: 'string', description: 'UUID of the document to download' },
171
+ },
172
+ required: ['document_id'],
173
+ },
174
+ },
175
+ {
176
+ name: 'delete_document',
177
+ description: 'Delete a document and all associated summaries, key dates, financial terms, and other data. This action is irreversible.',
178
+ inputSchema: {
179
+ type: 'object',
180
+ properties: {
181
+ document_id: { type: 'string', description: 'UUID of the document to delete' },
182
+ },
183
+ required: ['document_id'],
184
+ },
185
+ },
186
+ // ------------------------------------------------------------------
187
+ // SUMMARIES
188
+ // ------------------------------------------------------------------
189
+ {
190
+ name: 'list_summaries',
191
+ description: 'List all document summaries in the user\'s account with counts of key dates, financial terms, and obligations.',
192
+ inputSchema: {
193
+ type: 'object',
194
+ properties: {
195
+ page: { type: 'number', description: 'Page number (default: 1)' },
196
+ limit: { type: 'number', description: 'Results per page (default: 20, max: 100)' },
197
+ },
198
+ },
199
+ },
200
+ {
201
+ name: 'get_summary',
202
+ description: 'Get the full structured summary for a document. Returns all extracted data: overview, key dates, financial terms, key points, obligations, risks, contingencies, and document parties.',
203
+ inputSchema: {
204
+ type: 'object',
205
+ properties: {
206
+ summary_id: { type: 'string', description: 'UUID of the summary' },
207
+ },
208
+ required: ['summary_id'],
209
+ },
210
+ },
211
+ {
212
+ name: 'delete_summary',
213
+ description: 'Delete a summary and all its associated data. The original document record remains. This action is irreversible.',
214
+ inputSchema: {
215
+ type: 'object',
216
+ properties: {
217
+ summary_id: { type: 'string', description: 'UUID of the summary to delete' },
218
+ },
219
+ required: ['summary_id'],
220
+ },
221
+ },
222
+ {
223
+ name: 'email_summary',
224
+ description: 'Email a summary snapshot to a specified recipient. Supports quick view (key dates + financial terms + risks) or full summary.',
225
+ inputSchema: {
226
+ type: 'object',
227
+ properties: {
228
+ summary_id: { type: 'string', description: 'UUID of the summary to email' },
229
+ recipient_email: { type: 'string', description: 'Email address of the recipient' },
230
+ recipient_name: { type: 'string', description: 'Optional display name of the recipient' },
231
+ summary_type: {
232
+ type: 'string',
233
+ enum: ['quick_view', 'full'],
234
+ description: 'Type of summary to send (default: full)',
235
+ },
236
+ personal_note: {
237
+ type: 'string',
238
+ description: 'Optional personal message to include in the email',
239
+ },
240
+ },
241
+ required: ['summary_id', 'recipient_email'],
242
+ },
243
+ },
244
+ // ------------------------------------------------------------------
245
+ // EDITING
246
+ // ------------------------------------------------------------------
247
+ {
248
+ name: 'update_key_date',
249
+ description: 'Correct or update an AI-extracted key date. Creates an audit history record of the change.',
250
+ inputSchema: {
251
+ type: 'object',
252
+ properties: {
253
+ summary_id: { type: 'string', description: 'UUID of the parent summary' },
254
+ date_id: { type: 'string', description: 'UUID of the key date to update' },
255
+ date: {
256
+ type: 'string',
257
+ description: 'New date value in ISO 8601 format (e.g. "2026-06-15")',
258
+ },
259
+ reason: {
260
+ type: 'string',
261
+ description: 'Optional reason for the change (stored in history)',
262
+ },
263
+ },
264
+ required: ['summary_id', 'date_id', 'date'],
265
+ },
266
+ },
267
+ {
268
+ name: 'update_financial_term',
269
+ description: 'Correct or update an AI-extracted financial amount. Creates an audit history record of the change.',
270
+ inputSchema: {
271
+ type: 'object',
272
+ properties: {
273
+ summary_id: { type: 'string', description: 'UUID of the parent summary' },
274
+ term_id: { type: 'string', description: 'UUID of the financial term to update' },
275
+ amount: { type: 'number', description: 'New amount value' },
276
+ reason: {
277
+ type: 'string',
278
+ description: 'Optional reason for the change (stored in history)',
279
+ },
280
+ },
281
+ required: ['summary_id', 'term_id', 'amount'],
282
+ },
283
+ },
284
+ {
285
+ name: 'update_key_point',
286
+ description: 'Correct or update an AI-extracted key point value. Creates an audit history record of the change.',
287
+ inputSchema: {
288
+ type: 'object',
289
+ properties: {
290
+ summary_id: { type: 'string', description: 'UUID of the parent summary' },
291
+ point_id: { type: 'string', description: 'UUID of the key point to update' },
292
+ value: { type: 'string', description: 'New value for the key point' },
293
+ reason: {
294
+ type: 'string',
295
+ description: 'Optional reason for the change (stored in history)',
296
+ },
297
+ },
298
+ required: ['summary_id', 'point_id', 'value'],
299
+ },
300
+ },
301
+ {
302
+ name: 'complete_obligation',
303
+ description: 'Mark an obligation as completed or revert it to pending.',
304
+ inputSchema: {
305
+ type: 'object',
306
+ properties: {
307
+ summary_id: { type: 'string', description: 'UUID of the parent summary' },
308
+ obligation_id: { type: 'string', description: 'UUID of the obligation to update' },
309
+ completed: {
310
+ type: 'boolean',
311
+ description: 'true to mark completed, false to revert to pending',
312
+ },
313
+ },
314
+ required: ['summary_id', 'obligation_id', 'completed'],
315
+ },
316
+ },
317
+ // ------------------------------------------------------------------
318
+ // USER
319
+ // ------------------------------------------------------------------
320
+ {
321
+ name: 'get_user_profile',
322
+ description: 'Get the current user\'s profile information including subscription tier, document count, and preferences summary.',
323
+ inputSchema: {
324
+ type: 'object',
325
+ properties: {},
326
+ },
327
+ },
328
+ {
329
+ name: 'get_time_saved',
330
+ description: 'Get statistics on how much time Termsive has saved the user by automating document analysis.',
331
+ inputSchema: {
332
+ type: 'object',
333
+ properties: {
334
+ period: {
335
+ type: 'string',
336
+ enum: ['month', 'year', 'total'],
337
+ description: 'Time period to calculate for (default: month)',
338
+ },
339
+ },
340
+ },
341
+ },
342
+ {
343
+ name: 'get_preferences',
344
+ description: 'Get the user\'s current notification and display preferences: timezone, notification days, email settings.',
345
+ inputSchema: {
346
+ type: 'object',
347
+ properties: {},
348
+ },
349
+ },
350
+ {
351
+ name: 'update_preferences',
352
+ description: 'Update one or more user preference fields. All fields are optional — only provided fields are updated.',
353
+ inputSchema: {
354
+ type: 'object',
355
+ properties: {
356
+ timezone: {
357
+ type: 'string',
358
+ description: 'IANA timezone string (e.g. "America/New_York")',
359
+ },
360
+ default_notification_days: {
361
+ type: 'number',
362
+ description: 'Days before deadline to send email reminders (1–30)',
363
+ },
364
+ email_notifications: {
365
+ type: 'boolean',
366
+ description: 'Enable or disable email notification reminders',
367
+ },
368
+ show_time_saved: {
369
+ type: 'boolean',
370
+ description: 'Show or hide the time saved counter in the dashboard header',
371
+ },
372
+ },
373
+ },
374
+ },
375
+ ];
376
+ // ---------------------------------------------------------------------------
377
+ // Tool handlers
378
+ // ---------------------------------------------------------------------------
379
+ async function handleTool(name, args) {
380
+ switch (name) {
381
+ // --- Documents ---
382
+ case 'analyze_document': {
383
+ const result = await apiRequest('POST', '/documents/upload', {
384
+ file_url: args.file_url,
385
+ document_name: args.document_name,
386
+ });
387
+ return formatResult(result);
388
+ }
389
+ case 'list_documents': {
390
+ const params = new URLSearchParams();
391
+ if (args.page)
392
+ params.set('page', String(args.page));
393
+ if (args.limit)
394
+ params.set('limit', String(args.limit));
395
+ if (args.status)
396
+ params.set('status', String(args.status));
397
+ const result = await apiRequest('GET', `/documents?${params}`);
398
+ return formatResult(result);
399
+ }
400
+ case 'get_document': {
401
+ const result = await apiRequest('GET', `/documents/${args.document_id}`);
402
+ return formatResult(result);
403
+ }
404
+ case 'get_document_status': {
405
+ const result = await apiRequest('GET', `/documents/${args.document_id}/status`);
406
+ return formatResult(result);
407
+ }
408
+ case 'download_document': {
409
+ const result = await apiRequest('GET', `/documents/${args.document_id}/download`);
410
+ return formatResult(result);
411
+ }
412
+ case 'delete_document': {
413
+ const result = await apiRequest('DELETE', `/documents/${args.document_id}`);
414
+ return formatResult(result);
415
+ }
416
+ // --- Summaries ---
417
+ case 'list_summaries': {
418
+ const params = new URLSearchParams();
419
+ if (args.page)
420
+ params.set('page', String(args.page));
421
+ if (args.limit)
422
+ params.set('limit', String(args.limit));
423
+ const result = await apiRequest('GET', `/summaries?${params}`);
424
+ return formatResult(result);
425
+ }
426
+ case 'get_summary': {
427
+ const result = await apiRequest('GET', `/summaries/${args.summary_id}`);
428
+ return formatResult(result);
429
+ }
430
+ case 'delete_summary': {
431
+ const result = await apiRequest('DELETE', `/summaries/${args.summary_id}`);
432
+ return formatResult(result);
433
+ }
434
+ case 'email_summary': {
435
+ const result = await apiRequest('POST', `/summaries/${args.summary_id}/email`, {
436
+ recipient_email: args.recipient_email,
437
+ recipient_name: args.recipient_name,
438
+ summary_type: args.summary_type || 'full',
439
+ personal_note: args.personal_note,
440
+ });
441
+ return formatResult(result);
442
+ }
443
+ // --- Editing ---
444
+ case 'update_key_date': {
445
+ const result = await apiRequest('PATCH', `/summaries/${args.summary_id}/key-dates/${args.date_id}`, { date: args.date, reason: args.reason });
446
+ return formatResult(result);
447
+ }
448
+ case 'update_financial_term': {
449
+ const result = await apiRequest('PATCH', `/summaries/${args.summary_id}/financial-terms/${args.term_id}`, { amount: args.amount, reason: args.reason });
450
+ return formatResult(result);
451
+ }
452
+ case 'update_key_point': {
453
+ const result = await apiRequest('PATCH', `/summaries/${args.summary_id}/key-points/${args.point_id}`, { value: args.value, reason: args.reason });
454
+ return formatResult(result);
455
+ }
456
+ case 'complete_obligation': {
457
+ const result = await apiRequest('PATCH', `/summaries/${args.summary_id}/obligations/${args.obligation_id}`, { completed: args.completed });
458
+ return formatResult(result);
459
+ }
460
+ // --- User ---
461
+ case 'get_user_profile': {
462
+ const result = await apiRequest('GET', '/user/profile');
463
+ return formatResult(result);
464
+ }
465
+ case 'get_time_saved': {
466
+ const params = new URLSearchParams();
467
+ if (args.period)
468
+ params.set('period', String(args.period));
469
+ const result = await apiRequest('GET', `/user/time-saved?${params}`);
470
+ return formatResult(result);
471
+ }
472
+ case 'get_preferences': {
473
+ const result = await apiRequest('GET', '/user/preferences');
474
+ return formatResult(result);
475
+ }
476
+ case 'update_preferences': {
477
+ const body = {};
478
+ if (args.timezone !== undefined)
479
+ body.timezone = args.timezone;
480
+ if (args.default_notification_days !== undefined)
481
+ body.default_notification_days = args.default_notification_days;
482
+ if (args.email_notifications !== undefined)
483
+ body.email_notifications = args.email_notifications;
484
+ if (args.show_time_saved !== undefined)
485
+ body.show_time_saved = args.show_time_saved;
486
+ const result = await apiRequest('PATCH', '/user/preferences', body);
487
+ return formatResult(result);
488
+ }
489
+ default:
490
+ return JSON.stringify({ error: `Unknown tool: ${name}` });
491
+ }
492
+ }
493
+ // ---------------------------------------------------------------------------
494
+ // Server setup
495
+ // ---------------------------------------------------------------------------
496
+ const server = new Server({
497
+ name: 'termsive',
498
+ version: '1.0.0',
499
+ }, {
500
+ capabilities: {
501
+ tools: {},
502
+ },
503
+ });
504
+ // List available tools
505
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
506
+ tools: TOOLS,
507
+ }));
508
+ // Handle tool calls
509
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
510
+ const { name, arguments: args = {} } = request.params;
511
+ try {
512
+ const result = await handleTool(name, args);
513
+ return {
514
+ content: [
515
+ {
516
+ type: 'text',
517
+ text: result,
518
+ },
519
+ ],
520
+ };
521
+ }
522
+ catch (err) {
523
+ const message = err instanceof Error ? err.message : String(err);
524
+ return {
525
+ content: [
526
+ {
527
+ type: 'text',
528
+ text: JSON.stringify({ error: message }),
529
+ },
530
+ ],
531
+ isError: true,
532
+ };
533
+ }
534
+ });
535
+ // ---------------------------------------------------------------------------
536
+ // Start
537
+ // ---------------------------------------------------------------------------
538
+ async function main() {
539
+ const transport = new StdioServerTransport();
540
+ await server.connect(transport);
541
+ console.error(`[termsive-mcp] Server running. Base URL: ${BASE_URL}`);
542
+ }
543
+ main().catch((err) => {
544
+ console.error('[termsive-mcp] Fatal error:', err);
545
+ process.exit(1);
546
+ });
547
+ //# sourceMappingURL=termsive-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"termsive-mcp.js","sourceRoot":"","sources":["../termsive-mcp.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "termsive-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Termsive — connect AI agents to your real estate and legal document analysis platform",
5
+ "keywords": [
6
+ "mcp",
7
+ "model-context-protocol",
8
+ "termsive",
9
+ "real-estate",
10
+ "legal",
11
+ "documents",
12
+ "ai",
13
+ "claude"
14
+ ],
15
+ "homepage": "https://termsive.com",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/doranchambers/termsive-mcp"
19
+ },
20
+ "license": "MIT",
21
+ "author": "Termsive",
22
+ "type": "module",
23
+ "main": "dist/termsive-mcp.js",
24
+ "bin": {
25
+ "termsive-mcp": "dist/termsive-mcp.js"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc --project tsconfig.json",
32
+ "prepublishOnly": "npm run build"
33
+ },
34
+ "dependencies": {
35
+ "@modelcontextprotocol/sdk": "^1.27.1"
36
+ },
37
+ "devDependencies": {
38
+ "typescript": "^5.0.0"
39
+ },
40
+ "engines": {
41
+ "node": ">=18.0.0"
42
+ }
43
+ }