@trylighthouse/mcp-server 0.1.1 → 0.1.2

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 (2) hide show
  1. package/build/index.js +45 -30
  2. package/package.json +1 -1
package/build/index.js CHANGED
@@ -126,7 +126,7 @@ server.registerTool("lighthouse_crm_get_attribute", {
126
126
  description: "Get a single custom field definition by its field_permalink.",
127
127
  inputSchema: {
128
128
  field_permalink: z.string().describe("Field permalink (unique key) of the attribute"),
129
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type (required)"),
129
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type (required)"),
130
130
  },
131
131
  }, async (params) => {
132
132
  try {
@@ -143,9 +143,9 @@ server.registerTool("lighthouse_crm_create_attribute", {
143
143
  "Types: text, number, currency, percentage, date, datetimez, select, multi_select, status, checkbox, url, email, phone, rating, record, multi_record, user, multi_user.",
144
144
  inputSchema: {
145
145
  label: z.string().describe("Display label for the field"),
146
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type this field belongs to"),
146
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type this field belongs to"),
147
147
  data_type: z.string().describe("Field type (text, number, currency, percentage, date, datetimez, select, multi_select, status, checkbox, url, email, phone, rating, record, multi_record, user, multi_user)"),
148
- record_type: z.enum(["company", "person", "deal"]).optional().describe("For record/multi_record fields: which record type to link to"),
148
+ record_type: z.enum(["company", "person", "deal", "task"]).optional().describe("For record/multi_record fields: which record type to link to"),
149
149
  options: z
150
150
  .array(z.record(z.unknown()))
151
151
  .optional()
@@ -165,7 +165,7 @@ server.registerTool("lighthouse_crm_update_attribute", {
165
165
  description: "Update a custom field's label or configuration.",
166
166
  inputSchema: {
167
167
  field_permalink: z.string().describe("Field permalink of the attribute to update"),
168
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type (required)"),
168
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type (required)"),
169
169
  label: z.string().optional().describe("New display label"),
170
170
  },
171
171
  }, async (params) => {
@@ -183,7 +183,7 @@ server.registerTool("lighthouse_crm_delete_attribute", {
183
183
  description: "Delete (archive) a custom field. Only custom fields can be deleted, not system fields.",
184
184
  inputSchema: {
185
185
  field_permalink: z.string().describe("Field permalink of the attribute to delete"),
186
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type (required)"),
186
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type (required)"),
187
187
  },
188
188
  }, async (params) => {
189
189
  try {
@@ -215,7 +215,7 @@ server.registerTool("lighthouse_crm_list_options", {
215
215
  description: "Get select/multi_select field options. " +
216
216
  "Use this to discover available values for select fields before setting them on records.",
217
217
  inputSchema: {
218
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type"),
218
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
219
219
  field_permalink: z.string().describe("Field permalink of the select/multi_select field"),
220
220
  },
221
221
  }, async (params) => {
@@ -231,7 +231,7 @@ server.registerTool("lighthouse_crm_create_option", {
231
231
  title: "Create CRM Field Option",
232
232
  description: "Add a new option to a select/multi_select field. The option value is auto-generated from the label. Returns the updated list of options for the field.",
233
233
  inputSchema: {
234
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type"),
234
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
235
235
  field_permalink: z.string().describe("Field permalink of the select/multi_select field"),
236
236
  label: z.string().describe("Option display label"),
237
237
  color: z.string().optional().describe("Option color (hex code from palette, auto-assigned if omitted)"),
@@ -250,7 +250,7 @@ server.registerTool("lighthouse_crm_delete_option", {
250
250
  title: "Delete CRM Field Option",
251
251
  description: "Delete an option value from a select/multi_select field. Cannot delete system default options.",
252
252
  inputSchema: {
253
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type"),
253
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
254
254
  field_permalink: z.string().describe("Field permalink of the select/multi_select field"),
255
255
  value: z.string().describe("Option value to delete"),
256
256
  },
@@ -272,7 +272,7 @@ server.registerTool("lighthouse_crm_search_records", {
272
272
  "for the entity_type, then use those keys in your filter conditions. " +
273
273
  "NOT for discovering new companies/people — use lighthouse_discovery_* tools for that.",
274
274
  inputSchema: {
275
- type: z.enum(["company", "person", "deal"]).describe("Record type"),
275
+ type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
276
276
  filters: z
277
277
  .record(z.unknown())
278
278
  .optional()
@@ -308,7 +308,7 @@ server.registerTool("lighthouse_crm_get_record", {
308
308
  title: "Get CRM Record",
309
309
  description: "Get a single CRM record by ID with all fields and relationships.",
310
310
  inputSchema: {
311
- type: z.enum(["company", "person", "deal"]).describe("Record type"),
311
+ type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
312
312
  id: z.string().uuid().describe("Record ID"),
313
313
  },
314
314
  }, async (params) => {
@@ -325,7 +325,7 @@ server.registerTool("lighthouse_crm_create_record", {
325
325
  description: "Create a new CRM record. Required fields: " +
326
326
  "company (name, domain), person (first_name, last_name), deal (name).",
327
327
  inputSchema: {
328
- type: z.enum(["company", "person", "deal"]).describe("Record type"),
328
+ type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
329
329
  data: z.record(z.unknown()).describe("Record fields (name, domain, first_name, last_name, etc.)"),
330
330
  attributes: z
331
331
  .record(z.unknown())
@@ -348,7 +348,7 @@ server.registerTool("lighthouse_crm_update_record", {
348
348
  title: "Update CRM Record",
349
349
  description: "Update an existing CRM record's fields.",
350
350
  inputSchema: {
351
- type: z.enum(["company", "person", "deal"]).describe("Record type"),
351
+ type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
352
352
  id: z.string().uuid().describe("Record ID"),
353
353
  data: z.record(z.unknown()).describe("Fields to update"),
354
354
  attributes: z.record(z.unknown()).optional().describe("Custom field values to update (keyed by field_permalink)"),
@@ -369,7 +369,7 @@ server.registerTool("lighthouse_crm_delete_record", {
369
369
  title: "Delete CRM Record",
370
370
  description: "Permanently delete a CRM record.",
371
371
  inputSchema: {
372
- type: z.enum(["company", "person", "deal"]).describe("Record type"),
372
+ type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
373
373
  id: z.string().uuid().describe("Record ID"),
374
374
  },
375
375
  }, async (params) => {
@@ -387,7 +387,9 @@ server.registerTool("lighthouse_crm_create_list", {
387
387
  description: "Create a new CRM list to organize records.",
388
388
  inputSchema: {
389
389
  name: z.string().describe("List name"),
390
- type: z.enum(["company", "person", "deal"]).describe("Record type for this list"),
390
+ type: z.enum(["company", "person", "deal", "task"]).describe("Record type for this list"),
391
+ sharing: z.enum(["private", "workspace"]).default("private").optional().describe("Visibility: 'private' or 'workspace'"),
392
+ color: z.string().optional().describe("Hex color code for the list"),
391
393
  },
392
394
  }, async (params) => {
393
395
  try {
@@ -432,6 +434,8 @@ server.registerTool("lighthouse_crm_update_list", {
432
434
  inputSchema: {
433
435
  id: z.string().uuid().describe("List ID"),
434
436
  name: z.string().optional().describe("New list name"),
437
+ sharing: z.enum(["private", "workspace"]).optional().describe("New visibility setting"),
438
+ color: z.string().optional().describe("New hex color code"),
435
439
  },
436
440
  }, async (params) => {
437
441
  try {
@@ -486,7 +490,7 @@ server.registerTool("lighthouse_crm_add_to_list", {
486
490
  inputSchema: {
487
491
  list_id: z.string().uuid().describe("List ID"),
488
492
  record_id: z.string().uuid().describe("Record ID to add"),
489
- type: z.enum(["company", "person", "deal"]).describe("Record type"),
493
+ type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
490
494
  },
491
495
  }, async (params) => {
492
496
  try {
@@ -521,8 +525,8 @@ server.registerTool("lighthouse_crm_list_notes", {
521
525
  title: "List Notes",
522
526
  description: "Get notes for a CRM record.",
523
527
  inputSchema: {
524
- record_id: z.string().uuid().optional().describe("Record ID to filter notes by (optional — omit to list all notes)"),
525
- record_type: z.enum(["company", "person", "deal"]).optional().describe("Record type (required if record_id is provided)"),
528
+ record_id: z.string().uuid().optional().describe("Record ID to filter notes by (required)"),
529
+ record_type: z.enum(["company", "person", "deal", "task"]).optional().describe("Record type: company, person, or deal (required)"),
526
530
  limit: z.number().min(1).max(100).default(25),
527
531
  offset: z.number().min(0).default(0),
528
532
  },
@@ -547,7 +551,7 @@ server.registerTool("lighthouse_crm_create_note", {
547
551
  "Tagged users receive an in-app notification.",
548
552
  inputSchema: {
549
553
  record_id: z.string().uuid().describe("Record ID to attach the note to"),
550
- record_type: z.enum(["company", "person", "deal"]).describe("Record type"),
554
+ record_type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
551
555
  title: z.string().describe("Note title"),
552
556
  content: z.string().describe("Note content (plain text or HTML). Use <p> tags for paragraphs. For @mentions, include mention spans (see description)."),
553
557
  tagged_users: z
@@ -746,7 +750,7 @@ server.registerTool("lighthouse_crm_list_views", {
746
750
  title: "List CRM Views",
747
751
  description: "Get all saved CRM views. Views store filter/sort configurations that can be loaded in search_records.",
748
752
  inputSchema: {
749
- entity_type: z.enum(["company", "person", "deal"]).optional().describe("Filter by record type"),
753
+ entity_type: z.enum(["company", "person", "deal", "task"]).optional().describe("Filter by record type"),
750
754
  },
751
755
  }, async (params) => {
752
756
  try {
@@ -767,7 +771,7 @@ server.registerTool("lighthouse_crm_create_view", {
767
771
  "The saved filters will auto-apply when search_records is called with this view_id.",
768
772
  inputSchema: {
769
773
  name: z.string().describe("View name"),
770
- entity_type: z.enum(["company", "person", "deal"]).describe("Record type"),
774
+ entity_type: z.enum(["company", "person", "deal", "task"]).describe("Record type"),
771
775
  filters: z
772
776
  .record(z.unknown())
773
777
  .optional()
@@ -1012,7 +1016,9 @@ const WIDGET_CONFIG_DESCRIPTION = "Widget config object. Structure depends on re
1012
1016
  server.registerTool("lighthouse_reports_list_dashboards", {
1013
1017
  title: "List Dashboards",
1014
1018
  description: "List all report dashboards accessible to the current user. " +
1015
- "Returns dashboards you own, workspace-shared dashboards, and team-shared dashboards.",
1019
+ "Returns dashboards you own, workspace-shared dashboards, and team-shared dashboards. " +
1020
+ "Each dashboard includes: id, name, description, sharing (private/workspace), is_owner, " +
1021
+ "owner {id, first_name, last_name, full_name}, widget_count, shared_with_teams, created_at, updated_at.",
1016
1022
  inputSchema: {},
1017
1023
  }, async () => {
1018
1024
  try {
@@ -1026,7 +1032,7 @@ server.registerTool("lighthouse_reports_list_dashboards", {
1026
1032
  server.registerTool("lighthouse_reports_create_dashboard", {
1027
1033
  title: "Create Dashboard",
1028
1034
  description: "Create a new report dashboard. Dashboards contain report widgets (charts, tables, KPIs). " +
1029
- "Requires reports.create permission.",
1035
+ "Requires reports.create permission. Returns the full dashboard object (same format as get dashboard).",
1030
1036
  inputSchema: {
1031
1037
  name: z.string().describe("Dashboard name"),
1032
1038
  description: z.string().optional().describe("Dashboard description"),
@@ -1050,7 +1056,9 @@ server.registerTool("lighthouse_reports_create_dashboard", {
1050
1056
  });
1051
1057
  server.registerTool("lighthouse_reports_get_dashboard", {
1052
1058
  title: "Get Dashboard",
1053
- description: "Get a single dashboard by ID with all its widgets.",
1059
+ description: "Get a single dashboard by ID with all its widgets. " +
1060
+ "Returns: id, name, description, sharing, is_owner, owner {id, first_name, last_name, full_name}, " +
1061
+ "widget_count, shared_with_teams, widgets [{id, name, widget_type, config, created_at, updated_at}], created_at, updated_at.",
1054
1062
  inputSchema: {
1055
1063
  id: z.string().uuid().describe("Dashboard ID"),
1056
1064
  },
@@ -1065,7 +1073,8 @@ server.registerTool("lighthouse_reports_get_dashboard", {
1065
1073
  });
1066
1074
  server.registerTool("lighthouse_reports_update_dashboard", {
1067
1075
  title: "Update Dashboard",
1068
- description: "Update a dashboard's name, description, or sharing. Only the dashboard owner can update.",
1076
+ description: "Update a dashboard's name, description, or sharing. Only the dashboard owner can update. " +
1077
+ "Returns the full dashboard object (same format as get dashboard).",
1069
1078
  inputSchema: {
1070
1079
  id: z.string().uuid().describe("Dashboard ID"),
1071
1080
  name: z.string().optional().describe("New dashboard name"),
@@ -1116,7 +1125,8 @@ server.registerTool("lighthouse_reports_refresh_dashboard", {
1116
1125
  // ─── Reports: Widgets ────────────────────────────────────
1117
1126
  server.registerTool("lighthouse_reports_list_widgets", {
1118
1127
  title: "List Dashboard Widgets",
1119
- description: "Get all widgets for a dashboard.",
1128
+ description: "Get all widgets for a dashboard. " +
1129
+ "Each widget includes: id, name, widget_type, config, created_at, updated_at.",
1120
1130
  inputSchema: {
1121
1131
  id: z.string().uuid().describe("Dashboard ID"),
1122
1132
  },
@@ -1135,7 +1145,8 @@ server.registerTool("lighthouse_reports_create_widget", {
1135
1145
  "WORKFLOW: 1) Call lighthouse_crm_get_attributes to discover field keys for the entity type, " +
1136
1146
  "2) Build a config object using those keys, 3) Create the widget. " +
1137
1147
  "Widget types: bar, line, pie, table, kpi, funnel, area. " +
1138
- "Report types: standard (aggregate by field), funnel (pipeline conversion), stage_changes (historical transitions).",
1148
+ "Report types: standard (aggregate by field), funnel (pipeline conversion), stage_changes (historical transitions). " +
1149
+ "Returns: {id, name, widget_type, config, created_at, updated_at}.",
1139
1150
  inputSchema: {
1140
1151
  dashboard_id: z.string().uuid().describe("Dashboard ID to add widget to"),
1141
1152
  name: z.string().describe("Widget/report name"),
@@ -1161,7 +1172,8 @@ server.registerTool("lighthouse_reports_create_widget", {
1161
1172
  server.registerTool("lighthouse_reports_update_widget", {
1162
1173
  title: "Update Report Widget",
1163
1174
  description: "Update a report widget's name, type, config, or position. " +
1164
- "Only provide fields you want to change — others are preserved.",
1175
+ "Only provide fields you want to change — others are preserved. " +
1176
+ "Returns: {id, name, widget_type, config, created_at, updated_at}.",
1165
1177
  inputSchema: {
1166
1178
  dashboard_id: z.string().uuid().describe("Dashboard ID"),
1167
1179
  widget_id: z.string().uuid().describe("Widget ID"),
@@ -1262,7 +1274,8 @@ server.registerTool("lighthouse_crm_share_view_with_teams", {
1262
1274
  title: "Share View with Teams",
1263
1275
  description: "Grant team-level access to a CRM view. Only the view owner can share. " +
1264
1276
  "Use lighthouse_workspace_list_teams to find team IDs first. " +
1265
- "Requires views.share permission.",
1277
+ "Requires views.share permission. " +
1278
+ "Returns formatted view: {id, name, entity_type, view_type, filters, sort, grouped_by, sharing, owner, shared_with_teams, created_at}.",
1266
1279
  inputSchema: {
1267
1280
  id: z.string().uuid().describe("View ID"),
1268
1281
  team_ids: z.array(z.string().uuid()).describe("Array of team UUIDs to grant access to"),
@@ -1280,7 +1293,8 @@ server.registerTool("lighthouse_crm_share_view_with_teams", {
1280
1293
  server.registerTool("lighthouse_crm_revoke_view_from_teams", {
1281
1294
  title: "Revoke View Team Access",
1282
1295
  description: "Revoke team-level access from a CRM view. Only the view owner can revoke. " +
1283
- "Requires views.share permission.",
1296
+ "Requires views.share permission. " +
1297
+ "Returns formatted view: {id, name, entity_type, view_type, filters, sort, grouped_by, sharing, owner, shared_with_teams, created_at}.",
1284
1298
  inputSchema: {
1285
1299
  id: z.string().uuid().describe("View ID"),
1286
1300
  team_ids: z.array(z.string().uuid()).describe("Array of team UUIDs to revoke access from"),
@@ -1298,7 +1312,8 @@ server.registerTool("lighthouse_crm_revoke_view_from_teams", {
1298
1312
  server.registerTool("lighthouse_crm_update_view_sharing", {
1299
1313
  title: "Update View Sharing Status",
1300
1314
  description: "Change a CRM view's sharing visibility. Setting to 'private' also removes all team permissions. " +
1301
- "Only the view owner can change sharing. Requires views.share permission.",
1315
+ "Only the view owner can change sharing. Requires views.share permission. " +
1316
+ "Returns formatted view: {id, name, entity_type, view_type, filters, sort, grouped_by, sharing, owner, shared_with_teams, created_at}.",
1302
1317
  inputSchema: {
1303
1318
  id: z.string().uuid().describe("View ID"),
1304
1319
  sharing: z.enum(["private", "workspace"]).describe("New sharing visibility"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trylighthouse/mcp-server",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "MCP server for the Lighthouse CRM API",
5
5
  "type": "module",
6
6
  "bin": {