@dropspot/mcp 1.2.0 → 1.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.
Files changed (3) hide show
  1. package/README.md +8 -2
  2. package/dist/index.js +133 -1
  3. package/package.json +53 -53
package/README.md CHANGED
@@ -104,7 +104,10 @@ Once connected, your AI gains native understanding of your Drop Spot workspace:
104
104
 
105
105
  - *"Create an intake request for Sarah Jenkins using our 2026 Tax Return template."*
106
106
  - *"Show me our client list and search for Acme Corp."*
107
- - *"Update Sarah's phone number to (555) 234-5678 and add a note that she is a VIP client."*
107
+ - *"Get the client CSV template and mold this spreadsheet data into Drop Spot format."*
108
+ - *"Import this CSV of 25 clients from TaxDome into our directory."*
109
+ - *"Export our entire client roster to a CSV file."*
110
+ - *"Update Sarah's phone number to (123) 456-7890 and add a note that she is a VIP client."*
108
111
  - *"Check if Sarah uploaded her W-2 form yet."*
109
112
  - *"Review Sarah's uploaded W-2 and approve it."*
110
113
  - *"Reject item #2 with the note: 'Page 2 is blurry. Please re-upload a clear scan.' "*
@@ -113,7 +116,7 @@ Once connected, your AI gains native understanding of your Drop Spot workspace:
113
116
 
114
117
  ---
115
118
 
116
- ## 🛠️ Available MCP Tools (12 Tools)
119
+ ## 🛠️ Available MCP Tools (15 Tools)
117
120
 
118
121
  | Tool Name | Description |
119
122
  | :--- | :--- |
@@ -125,6 +128,9 @@ Once connected, your AI gains native understanding of your Drop Spot workspace:
125
128
  | `list_clients` | Search and browse your firm's client directory by name, email, company, entity type, status, or tag. |
126
129
  | `get_client` | Fetch a client record with full accounting CRM metadata, spouses/linked contacts, tags, and intake history. |
127
130
  | `create_or_update_client` | Add a new client or update contact & CRM profile (tax entity, FYE, cadence, state, tags, masked ID, pinned notes, linked contacts). |
131
+ | `get_clients_csv_template` | Inspect the official CSV template, header specifications, and format guidelines so AI can mold arbitrary user spreadsheets into clean Drop Spot format. |
132
+ | `import_clients_csv` | Batch import client rosters from raw CSV text (with 50+ synonym headers & cell heuristics) or structured arrays. Deduplicates and merges profiles by email. |
133
+ | `export_clients_csv` | Export all client profiles as an RFC 4180 compliant CSV string with entity types, filing cadences, and formula injection defenses. |
128
134
  | `list_templates` | View your reusable checklist templates (e.g. 1040 Tax Return, KYC, Mortgage Intake). |
129
135
  | `get_template` | Inspect a specific checklist template and its default items. |
130
136
  | `create_template` | Create a new reusable checklist template with predefined items and categories. |
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ async function apiRequest(endpoint, options = {}) {
24
24
  }
25
25
  const server = new Server({
26
26
  name: 'dropspot-mcp',
27
- version: '1.2.0',
27
+ version: '1.3.0',
28
28
  }, {
29
29
  capabilities: {
30
30
  tools: {},
@@ -301,6 +301,75 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
301
301
  required: ['name', 'email'],
302
302
  },
303
303
  },
304
+ {
305
+ name: 'get_clients_csv_template',
306
+ description: 'Retrieve the official Drop Spot CSV template, column specifications, and sample rows for client rosters. AI models can use this schema to mold, map, or normalize arbitrary user spreadsheets into the exact Drop Spot format before importing.',
307
+ inputSchema: {
308
+ type: 'object',
309
+ properties: {
310
+ includeSampleRows: {
311
+ type: 'boolean',
312
+ description: 'Whether to include sample client rows in the template (default: true)',
313
+ },
314
+ },
315
+ },
316
+ },
317
+ {
318
+ name: 'import_clients_csv',
319
+ description: 'Batch import a client roster into the workspace directory. Accepts raw CSV text (with intelligent auto-mapping across 50+ synonym headers like TaxDome, Drake, QuickBooks, UltraTax, etc.) or an array of client objects. Automatically deduplicates and merges existing profiles by email.',
320
+ inputSchema: {
321
+ type: 'object',
322
+ properties: {
323
+ csvText: {
324
+ type: 'string',
325
+ description: 'Raw CSV text containing client rows to import',
326
+ },
327
+ clients: {
328
+ type: 'array',
329
+ items: {
330
+ type: 'object',
331
+ properties: {
332
+ name: { type: 'string', description: 'Full name of client' },
333
+ email: { type: 'string', description: 'Client email address' },
334
+ phone: { type: 'string', description: 'Client phone number' },
335
+ company: { type: 'string', description: 'Company or business entity name' },
336
+ entityType: { type: 'string', description: 'Tax entity type (e.g. "individual", "s_corp", "c_corp", "partnership", "llc")' },
337
+ status: { type: 'string', description: 'Lifecycle status ("active", "extension", "lead", "inactive")' },
338
+ maskedId: { type: 'string', description: 'SSN/EIN masked tax ID (e.g. "***-**-1234")' },
339
+ stateOfFiling: { type: 'string', description: 'Filing state (e.g. "FL", "NY")' },
340
+ taxYear: { type: 'string', description: 'Tax year (e.g. "2026")' },
341
+ tags: { type: 'array', items: { type: 'string' }, description: 'Tags' },
342
+ pinnedNote: { type: 'string', description: 'Internal pinned notes' },
343
+ notes: { type: 'string', description: 'General client notes' },
344
+ },
345
+ required: ['name', 'email'],
346
+ },
347
+ description: 'Alternative structured array of client objects if already transformed by AI',
348
+ },
349
+ columnOverrides: {
350
+ type: 'object',
351
+ description: 'Optional mapping of standard fields to custom header names in the CSV',
352
+ },
353
+ },
354
+ },
355
+ },
356
+ {
357
+ name: 'export_clients_csv',
358
+ description: 'Export all client profiles from the workspace directory as an RFC 4180 compliant CSV string, complete with tax entities, filing cadences, and tags.',
359
+ inputSchema: {
360
+ type: 'object',
361
+ properties: {
362
+ tag: {
363
+ type: 'string',
364
+ description: 'Optional filter by client tag (e.g. "VIP", "1040")',
365
+ },
366
+ status: {
367
+ type: 'string',
368
+ description: 'Optional filter by status (e.g. "active", "extension", "lead", "inactive")',
369
+ },
370
+ },
371
+ },
372
+ },
304
373
  // TEMPLATES MANAGEMENT TOOLS
305
374
  {
306
375
  name: 'list_templates',
@@ -672,6 +741,69 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
672
741
  ],
673
742
  };
674
743
  }
744
+ case 'get_clients_csv_template': {
745
+ const res = await apiRequest('/clients/template');
746
+ return {
747
+ content: [
748
+ {
749
+ type: 'text',
750
+ text: `📋 Drop Spot Client CSV Template Specification:\n\n` +
751
+ `\`\`\`csv\n${res.templateCsv}\n\`\`\`\n\n` +
752
+ `Key Field Guidelines for AI Data Molding:\n` +
753
+ `• Email is required for every client profile.\n` +
754
+ `• Standard placeholder phone: (123)456-7890\n` +
755
+ `• Masked IDs strictly show last 4 digits (***-**-XXXX or **-***XXXX)\n` +
756
+ `• Entity types: individual, s_corp, c_corp, partnership, llc\n\n` +
757
+ `AI models can mold arbitrary spreadsheet rows into this format and pass them directly to import_clients_csv.`,
758
+ },
759
+ ],
760
+ };
761
+ }
762
+ case 'import_clients_csv': {
763
+ const payload = {};
764
+ if (args?.csvText)
765
+ payload.csv = args.csvText;
766
+ if (args?.clients)
767
+ payload.clients = args.clients;
768
+ if (args?.columnOverrides)
769
+ payload.columnOverrides = args.columnOverrides;
770
+ const res = await apiRequest('/clients/import', {
771
+ method: 'POST',
772
+ body: JSON.stringify(payload),
773
+ });
774
+ const previewList = (res.clients || [])
775
+ .slice(0, 5)
776
+ .map((c) => `• ${c.name} (${c.email}) - ${c.entity_type || 'individual'}`)
777
+ .join('\n');
778
+ return {
779
+ content: [
780
+ {
781
+ type: 'text',
782
+ text: `✅ Successfully imported ${res.imported || 0} client profile(s) into Drop Spot workspace!\n\n` +
783
+ (previewList ? `Preview of imported clients:\n${previewList}\n\n` : '') +
784
+ `Clients are now in the directory and ready for 1-click document requests.`,
785
+ },
786
+ ],
787
+ };
788
+ }
789
+ case 'export_clients_csv': {
790
+ const params = new URLSearchParams();
791
+ params.set('format', 'json');
792
+ if (args?.tag)
793
+ params.set('tag', String(args.tag));
794
+ if (args?.status)
795
+ params.set('status', String(args.status));
796
+ const res = await apiRequest(`/clients/export?${params.toString()}`);
797
+ return {
798
+ content: [
799
+ {
800
+ type: 'text',
801
+ text: `📁 Exported ${res.count || 0} client profile(s) as RFC 4180 CSV:\n\n` +
802
+ `\`\`\`csv\n${res.csv}\n\`\`\``,
803
+ },
804
+ ],
805
+ };
806
+ }
675
807
  // TEMPLATE HANDLERS
676
808
  case 'list_templates': {
677
809
  const params = new URLSearchParams();
package/package.json CHANGED
@@ -1,53 +1,53 @@
1
- {
2
- "name": "@dropspot/mcp",
3
- "version": "1.2.0",
4
- "description": "Model Context Protocol (MCP) server for Drop Spot — automated client document collection, file intake, checklist management, and 1-click reviews for Claude Desktop, Cursor, and AI agents.",
5
- "type": "module",
6
- "homepage": "https://godropspot.com",
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/officialdropspot/dropspot-mcp.git"
10
- },
11
- "keywords": [
12
- "mcp",
13
- "model-context-protocol",
14
- "claude-desktop",
15
- "cursor",
16
- "antigravity",
17
- "file-sharing",
18
- "document-collection",
19
- "client-portal",
20
- "client-intake",
21
- "tax-documents",
22
- "paperwork-automation",
23
- "file-intake"
24
- ],
25
- "main": "dist/index.js",
26
- "files": [
27
- "dist",
28
- "README.md",
29
- "LICENSE",
30
- "smithery.yaml",
31
- "glama.json"
32
- ],
33
- "publishConfig": {
34
- "access": "public"
35
- },
36
- "license": "MIT",
37
- "bin": {
38
- "dropspot-mcp": "dist/index.js"
39
- },
40
- "scripts": {
41
- "build": "tsc",
42
- "start": "node dist/index.js",
43
- "prepublishOnly": "npm run build"
44
- },
45
- "dependencies": {
46
- "@modelcontextprotocol/sdk": "^1.6.1",
47
- "zod": "^3.24.2"
48
- },
49
- "devDependencies": {
50
- "@types/node": "^22.10.1",
51
- "typescript": "~5.7.2"
52
- }
53
- }
1
+ {
2
+ "name": "@dropspot/mcp",
3
+ "version": "1.3.0",
4
+ "description": "Model Context Protocol (MCP) server for Drop Spot — automated client document collection, file intake, checklist management, and 1-click reviews for Claude Desktop, Cursor, and AI agents.",
5
+ "type": "module",
6
+ "homepage": "https://godropspot.com",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/officialdropspot/dropspot-mcp.git"
10
+ },
11
+ "keywords": [
12
+ "mcp",
13
+ "model-context-protocol",
14
+ "claude-desktop",
15
+ "cursor",
16
+ "antigravity",
17
+ "file-sharing",
18
+ "document-collection",
19
+ "client-portal",
20
+ "client-intake",
21
+ "tax-documents",
22
+ "paperwork-automation",
23
+ "file-intake"
24
+ ],
25
+ "main": "dist/index.js",
26
+ "files": [
27
+ "dist",
28
+ "README.md",
29
+ "LICENSE",
30
+ "smithery.yaml",
31
+ "glama.json"
32
+ ],
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "license": "MIT",
37
+ "bin": {
38
+ "dropspot-mcp": "dist/index.js"
39
+ },
40
+ "scripts": {
41
+ "build": "tsc",
42
+ "start": "node dist/index.js",
43
+ "prepublishOnly": "npm run build"
44
+ },
45
+ "dependencies": {
46
+ "@modelcontextprotocol/sdk": "^1.6.1",
47
+ "zod": "^3.24.2"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.10.1",
51
+ "typescript": "~5.7.2"
52
+ }
53
+ }