@hasna/contacts 0.6.34 → 0.6.35
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/dashboard/dist/assets/index-0l6aQb1t.css +1 -0
- package/dashboard/dist/assets/index-opnZdkVD.js +229 -0
- package/dashboard/dist/index.html +13 -0
- package/dist/cli/commands/advanced.d.ts +3 -0
- package/dist/cli/commands/advanced.d.ts.map +1 -0
- package/dist/cli/commands/audience.d.ts +18 -0
- package/dist/cli/commands/audience.d.ts.map +1 -0
- package/dist/cli/commands/core.d.ts +3 -0
- package/dist/cli/commands/core.d.ts.map +1 -0
- package/dist/cli/commands/crm.d.ts +3 -0
- package/dist/cli/commands/crm.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +1060 -46
- package/dist/cli/storage.d.ts +3 -0
- package/dist/cli/storage.d.ts.map +1 -0
- package/dist/cli/utils.d.ts +10 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cloud/http-storage.d.ts +88 -0
- package/dist/cloud/http-storage.d.ts.map +1 -0
- package/dist/db/activity.d.ts +15 -0
- package/dist/db/activity.d.ts.map +1 -0
- package/dist/db/applications.d.ts +10 -0
- package/dist/db/applications.d.ts.map +1 -0
- package/dist/db/audiences.d.ts +51 -0
- package/dist/db/audiences.d.ts.map +1 -0
- package/dist/db/companies.d.ts +19 -0
- package/dist/db/companies.d.ts.map +1 -0
- package/dist/db/contact-tasks.d.ts +19 -0
- package/dist/db/contact-tasks.d.ts.map +1 -0
- package/dist/db/contacts.d.ts +30 -0
- package/dist/db/contacts.d.ts.map +1 -0
- package/dist/db/coordination.d.ts +30 -0
- package/dist/db/coordination.d.ts.map +1 -0
- package/dist/db/database.d.ts +8 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/deals.d.ts +14 -0
- package/dist/db/deals.d.ts.map +1 -0
- package/dist/db/documents.d.ts +38 -0
- package/dist/db/documents.d.ts.map +1 -0
- package/dist/db/events.d.ts +14 -0
- package/dist/db/events.d.ts.map +1 -0
- package/dist/db/field-history.d.ts +17 -0
- package/dist/db/field-history.d.ts.map +1 -0
- package/dist/db/freshness.d.ts +24 -0
- package/dist/db/freshness.d.ts.map +1 -0
- package/dist/db/graph.d.ts +21 -0
- package/dist/db/graph.d.ts.map +1 -0
- package/dist/db/groups.d.ts +22 -0
- package/dist/db/groups.d.ts.map +1 -0
- package/dist/db/health.d.ts +40 -0
- package/dist/db/health.d.ts.map +1 -0
- package/dist/db/identity.d.ts +32 -0
- package/dist/db/identity.d.ts.map +1 -0
- package/dist/db/job-history.d.ts +29 -0
- package/dist/db/job-history.d.ts.map +1 -0
- package/dist/db/learnings.d.ts +43 -0
- package/dist/db/learnings.d.ts.map +1 -0
- package/dist/db/notes.d.ts +8 -0
- package/dist/db/notes.d.ts.map +1 -0
- package/dist/db/org-chart.d.ts +37 -0
- package/dist/db/org-chart.d.ts.map +1 -0
- package/dist/db/org-members.d.ts +9 -0
- package/dist/db/org-members.d.ts.map +1 -0
- package/dist/db/paths.d.ts +3 -0
- package/dist/db/paths.d.ts.map +1 -0
- package/dist/db/pg-migrations.d.ts +8 -0
- package/dist/db/pg-migrations.d.ts.map +1 -0
- package/dist/db/project-memberships.d.ts +8 -0
- package/dist/db/project-memberships.d.ts.map +1 -0
- package/dist/db/relationships.d.ts +30 -0
- package/dist/db/relationships.d.ts.map +1 -0
- package/dist/db/signals.d.ts +18 -0
- package/dist/db/signals.d.ts.map +1 -0
- package/dist/db/sqlite-adapter.d.ts +15 -0
- package/dist/db/sqlite-adapter.d.ts.map +1 -0
- package/dist/db/storage.d.ts +15 -0
- package/dist/db/storage.d.ts.map +1 -0
- package/dist/db/tags.d.ts +14 -0
- package/dist/db/tags.d.ts.map +1 -0
- package/dist/db/tombstones.d.ts +19 -0
- package/dist/db/tombstones.d.ts.map +1 -0
- package/dist/db/vendor-comms.d.ts +15 -0
- package/dist/db/vendor-comms.d.ts.map +1 -0
- package/dist/generated/storage-kit/health.d.ts +20 -0
- package/dist/generated/storage-kit/health.d.ts.map +1 -0
- package/dist/generated/storage-kit/index.d.ts +8 -0
- package/dist/generated/storage-kit/index.d.ts.map +1 -0
- package/dist/generated/storage-kit/migrations.d.ts +48 -0
- package/dist/generated/storage-kit/migrations.d.ts.map +1 -0
- package/dist/generated/storage-kit/mode.d.ts +48 -0
- package/dist/generated/storage-kit/mode.d.ts.map +1 -0
- package/dist/generated/storage-kit/pool.d.ts +34 -0
- package/dist/generated/storage-kit/pool.d.ts.map +1 -0
- package/dist/generated/storage-kit/query.d.ts +36 -0
- package/dist/generated/storage-kit/query.d.ts.map +1 -0
- package/dist/generated/storage-kit/tls.d.ts +26 -0
- package/dist/generated/storage-kit/tls.d.ts.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +613 -23
- package/dist/lib/apple-contacts.d.ts +3 -0
- package/dist/lib/apple-contacts.d.ts.map +1 -0
- package/dist/lib/audience-contract.d.ts +215 -0
- package/dist/lib/audience-contract.d.ts.map +1 -0
- package/dist/lib/audit.d.ts +12 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/brief.d.ts +3 -0
- package/dist/lib/brief.d.ts.map +1 -0
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/connector.d.ts +44 -0
- package/dist/lib/connector.d.ts.map +1 -0
- package/dist/lib/context.d.ts +5 -0
- package/dist/lib/context.d.ts.map +1 -0
- package/dist/lib/dedup.d.ts +10 -0
- package/dist/lib/dedup.d.ts.map +1 -0
- package/dist/lib/document-scanner.d.ts +8 -0
- package/dist/lib/document-scanner.d.ts.map +1 -0
- package/dist/lib/embeddings.d.ts +9 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/export.d.ts +8 -0
- package/dist/lib/export.d.ts.map +1 -0
- package/dist/lib/freshness.d.ts +19 -0
- package/dist/lib/freshness.d.ts.map +1 -0
- package/dist/lib/gmail-import.d.ts +51 -0
- package/dist/lib/gmail-import.d.ts.map +1 -0
- package/dist/lib/google-contacts.d.ts +115 -0
- package/dist/lib/google-contacts.d.ts.map +1 -0
- package/dist/lib/images.d.ts +30 -0
- package/dist/lib/images.d.ts.map +1 -0
- package/dist/lib/import.d.ts +10 -0
- package/dist/lib/import.d.ts.map +1 -0
- package/dist/lib/learning-maintenance.d.ts +8 -0
- package/dist/lib/learning-maintenance.d.ts.map +1 -0
- package/dist/lib/mailery-sync.d.ts +46 -0
- package/dist/lib/mailery-sync.d.ts.map +1 -0
- package/dist/lib/meeting-capture.d.ts +15 -0
- package/dist/lib/meeting-capture.d.ts.map +1 -0
- package/dist/lib/package-version.d.ts +6 -0
- package/dist/lib/package-version.d.ts.map +1 -0
- package/dist/lib/signals.d.ts +9 -0
- package/dist/lib/signals.d.ts.map +1 -0
- package/dist/lib/signature-parser.d.ts +36 -0
- package/dist/lib/signature-parser.d.ts.map +1 -0
- package/dist/lib/stats.d.ts +24 -0
- package/dist/lib/stats.d.ts.map +1 -0
- package/dist/lib/timeline.d.ts +11 -0
- package/dist/lib/timeline.d.ts.map +1 -0
- package/dist/lib/upcoming.d.ts +14 -0
- package/dist/lib/upcoming.d.ts.map +1 -0
- package/dist/lib/vault.d.ts +24 -0
- package/dist/lib/vault.d.ts.map +1 -0
- package/dist/mcp/handlers/advanced.d.ts +14 -0
- package/dist/mcp/handlers/advanced.d.ts.map +1 -0
- package/dist/mcp/handlers/audience.d.ts +9 -0
- package/dist/mcp/handlers/audience.d.ts.map +1 -0
- package/dist/mcp/handlers/core.d.ts +10 -0
- package/dist/mcp/handlers/core.d.ts.map +1 -0
- package/dist/mcp/handlers/crm.d.ts +14 -0
- package/dist/mcp/handlers/crm.d.ts.map +1 -0
- package/dist/mcp/handlers/index.d.ts +4 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -0
- package/dist/mcp/handlers/types.d.ts +10 -0
- package/dist/mcp/handlers/types.d.ts.map +1 -0
- package/dist/mcp/http.d.ts +17 -0
- package/dist/mcp/http.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +339 -27
- package/dist/mcp/register-tools.d.ts +3 -0
- package/dist/mcp/register-tools.d.ts.map +1 -0
- package/dist/mcp/schema.d.ts +3 -0
- package/dist/mcp/schema.d.ts.map +1 -0
- package/dist/mcp/storage-tools.d.ts +3 -0
- package/dist/mcp/storage-tools.d.ts.map +1 -0
- package/dist/mcp/tools.d.ts +3799 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/sdk/index.d.ts +16 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +63 -0
- package/dist/sdk/v1.generated.d.ts +270 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -0
- package/dist/server/cloud-index.d.ts +3 -0
- package/dist/server/cloud-index.d.ts.map +1 -0
- package/dist/server/cloud-serve.d.ts +3 -0
- package/dist/server/cloud-serve.d.ts.map +1 -0
- package/dist/server/cloud.d.ts +53 -0
- package/dist/server/cloud.d.ts.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +1022 -46
- package/dist/server/openapi.d.ts +1134 -0
- package/dist/server/openapi.d.ts.map +1 -0
- package/dist/server/pg-store.d.ts +893 -0
- package/dist/server/pg-store.d.ts.map +1 -0
- package/dist/server/security.d.ts +24 -0
- package/dist/server/security.d.ts.map +1 -0
- package/dist/server/serve.d.ts +9 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/v1.d.ts +28 -0
- package/dist/server/v1.d.ts.map +1 -0
- package/dist/store/index.d.ts +387 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +856 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/project-memberships.d.ts +32 -0
- package/dist/types/project-memberships.d.ts.map +1 -0
- package/migrations/0015_contact_project_membership_authority.sql +88 -0
- package/package.json +1 -1
- package/vendor/fast-uri/README.md +12 -0
- package/dist/server/cloud-index.js +0 -9187
|
@@ -0,0 +1,3799 @@
|
|
|
1
|
+
export declare const TOOL_DEFINITIONS: readonly [{
|
|
2
|
+
readonly name: "create_contact";
|
|
3
|
+
readonly description: "Create a new contact. Provide at minimum display_name or first_name+last_name. Emails, phones, addresses, and social_profiles are arrays of objects. relationship_type values: colleague|friend|family|reports_to|mentor|investor|partner|client|vendor|other. source values: manual|import|linkedin|github|twitter|email|calendar|crm|other.";
|
|
4
|
+
readonly inputSchema: {
|
|
5
|
+
readonly type: "object";
|
|
6
|
+
readonly properties: {
|
|
7
|
+
readonly first_name: {
|
|
8
|
+
readonly type: "string";
|
|
9
|
+
};
|
|
10
|
+
readonly last_name: {
|
|
11
|
+
readonly type: "string";
|
|
12
|
+
};
|
|
13
|
+
readonly display_name: {
|
|
14
|
+
readonly type: "string";
|
|
15
|
+
readonly description: "Display name (auto-generated from first+last if omitted)";
|
|
16
|
+
};
|
|
17
|
+
readonly nickname: {
|
|
18
|
+
readonly type: "string";
|
|
19
|
+
};
|
|
20
|
+
readonly job_title: {
|
|
21
|
+
readonly type: "string";
|
|
22
|
+
};
|
|
23
|
+
readonly company_id: {
|
|
24
|
+
readonly type: "string";
|
|
25
|
+
};
|
|
26
|
+
readonly notes: {
|
|
27
|
+
readonly type: "string";
|
|
28
|
+
};
|
|
29
|
+
readonly birthday: {
|
|
30
|
+
readonly type: "string";
|
|
31
|
+
readonly description: "YYYY-MM-DD";
|
|
32
|
+
};
|
|
33
|
+
readonly website: {
|
|
34
|
+
readonly type: "string";
|
|
35
|
+
readonly description: "Personal or professional website URL";
|
|
36
|
+
};
|
|
37
|
+
readonly last_contacted_at: {
|
|
38
|
+
readonly type: "string";
|
|
39
|
+
readonly description: "ISO 8601 datetime of last contact";
|
|
40
|
+
};
|
|
41
|
+
readonly preferred_contact_method: {
|
|
42
|
+
readonly type: "string";
|
|
43
|
+
readonly enum: readonly ["email", "phone", "telegram", "whatsapp", "linkedin", "twitter", "other"];
|
|
44
|
+
};
|
|
45
|
+
readonly status: {
|
|
46
|
+
readonly type: "string";
|
|
47
|
+
readonly enum: readonly ["active", "pending_reply", "converted", "closed", "other"];
|
|
48
|
+
readonly description: "Contact lifecycle status (default: active)";
|
|
49
|
+
};
|
|
50
|
+
readonly follow_up_at: {
|
|
51
|
+
readonly type: "string";
|
|
52
|
+
readonly description: "ISO 8601 datetime to follow up with this contact";
|
|
53
|
+
};
|
|
54
|
+
readonly project_id: {
|
|
55
|
+
readonly type: "string";
|
|
56
|
+
readonly description: "Primary project ID (single). Use project_ids for multiple.";
|
|
57
|
+
};
|
|
58
|
+
readonly project_ids: {
|
|
59
|
+
readonly type: "array";
|
|
60
|
+
readonly items: {
|
|
61
|
+
readonly type: "string";
|
|
62
|
+
};
|
|
63
|
+
readonly description: "Associate contact with multiple todos project IDs";
|
|
64
|
+
};
|
|
65
|
+
readonly emails: {
|
|
66
|
+
readonly type: "array";
|
|
67
|
+
readonly items: {
|
|
68
|
+
readonly type: "object";
|
|
69
|
+
readonly properties: {
|
|
70
|
+
readonly address: {
|
|
71
|
+
readonly type: "string";
|
|
72
|
+
};
|
|
73
|
+
readonly type: {
|
|
74
|
+
readonly type: "string";
|
|
75
|
+
readonly enum: readonly ["work", "personal", "other"];
|
|
76
|
+
};
|
|
77
|
+
readonly is_primary: {
|
|
78
|
+
readonly type: "boolean";
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
readonly required: readonly ["address"];
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
readonly phones: {
|
|
85
|
+
readonly type: "array";
|
|
86
|
+
readonly items: {
|
|
87
|
+
readonly type: "object";
|
|
88
|
+
readonly properties: {
|
|
89
|
+
readonly number: {
|
|
90
|
+
readonly type: "string";
|
|
91
|
+
};
|
|
92
|
+
readonly type: {
|
|
93
|
+
readonly type: "string";
|
|
94
|
+
readonly enum: readonly ["mobile", "work", "home", "fax", "whatsapp", "other"];
|
|
95
|
+
};
|
|
96
|
+
readonly is_primary: {
|
|
97
|
+
readonly type: "boolean";
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
readonly required: readonly ["number"];
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
readonly addresses: {
|
|
104
|
+
readonly type: "array";
|
|
105
|
+
readonly items: {
|
|
106
|
+
readonly type: "object";
|
|
107
|
+
readonly properties: {
|
|
108
|
+
readonly type: {
|
|
109
|
+
readonly type: "string";
|
|
110
|
+
readonly enum: readonly ["physical", "mailing", "billing", "virtual", "other"];
|
|
111
|
+
};
|
|
112
|
+
readonly street: {
|
|
113
|
+
readonly type: "string";
|
|
114
|
+
};
|
|
115
|
+
readonly city: {
|
|
116
|
+
readonly type: "string";
|
|
117
|
+
};
|
|
118
|
+
readonly state: {
|
|
119
|
+
readonly type: "string";
|
|
120
|
+
};
|
|
121
|
+
readonly zip: {
|
|
122
|
+
readonly type: "string";
|
|
123
|
+
};
|
|
124
|
+
readonly country: {
|
|
125
|
+
readonly type: "string";
|
|
126
|
+
};
|
|
127
|
+
readonly is_primary: {
|
|
128
|
+
readonly type: "boolean";
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
readonly social_profiles: {
|
|
134
|
+
readonly type: "array";
|
|
135
|
+
readonly items: {
|
|
136
|
+
readonly type: "object";
|
|
137
|
+
readonly properties: {
|
|
138
|
+
readonly platform: {
|
|
139
|
+
readonly type: "string";
|
|
140
|
+
readonly enum: readonly ["twitter", "linkedin", "github", "instagram", "telegram", "discord", "youtube", "tiktok", "bluesky", "facebook", "whatsapp", "snapchat", "reddit", "other"];
|
|
141
|
+
};
|
|
142
|
+
readonly handle: {
|
|
143
|
+
readonly type: "string";
|
|
144
|
+
};
|
|
145
|
+
readonly url: {
|
|
146
|
+
readonly type: "string";
|
|
147
|
+
};
|
|
148
|
+
readonly is_primary: {
|
|
149
|
+
readonly type: "boolean";
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
readonly required: readonly ["platform"];
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
readonly tag_ids: {
|
|
156
|
+
readonly type: "array";
|
|
157
|
+
readonly items: {
|
|
158
|
+
readonly type: "string";
|
|
159
|
+
};
|
|
160
|
+
readonly description: "Tag IDs to assign";
|
|
161
|
+
};
|
|
162
|
+
readonly source: {
|
|
163
|
+
readonly type: "string";
|
|
164
|
+
readonly enum: readonly ["manual", "import", "linkedin", "github", "twitter", "email", "calendar", "crm", "other"];
|
|
165
|
+
};
|
|
166
|
+
readonly sensitivity: {
|
|
167
|
+
readonly type: "string";
|
|
168
|
+
readonly enum: readonly ["normal", "confidential", "restricted"];
|
|
169
|
+
readonly description: "Contact sensitivity level (default: normal)";
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "get_contact";
|
|
175
|
+
readonly description: "Get a contact by ID, returning all details including emails, phones, addresses, social profiles, tags, and company.";
|
|
176
|
+
readonly inputSchema: {
|
|
177
|
+
readonly type: "object";
|
|
178
|
+
readonly properties: {
|
|
179
|
+
readonly id: {
|
|
180
|
+
readonly type: "string";
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
readonly required: readonly ["id"];
|
|
184
|
+
};
|
|
185
|
+
}, {
|
|
186
|
+
readonly name: "update_contact";
|
|
187
|
+
readonly description: "Update an existing contact's fields. Only provided fields are changed. Supports all contact fields including status, follow_up_at, project_id. Use emails_add/phones_add to append new contact methods without replacing existing ones.";
|
|
188
|
+
readonly inputSchema: {
|
|
189
|
+
readonly type: "object";
|
|
190
|
+
readonly properties: {
|
|
191
|
+
readonly id: {
|
|
192
|
+
readonly type: "string";
|
|
193
|
+
};
|
|
194
|
+
readonly first_name: {
|
|
195
|
+
readonly type: "string";
|
|
196
|
+
};
|
|
197
|
+
readonly last_name: {
|
|
198
|
+
readonly type: "string";
|
|
199
|
+
};
|
|
200
|
+
readonly display_name: {
|
|
201
|
+
readonly type: "string";
|
|
202
|
+
};
|
|
203
|
+
readonly nickname: {
|
|
204
|
+
readonly type: "string";
|
|
205
|
+
};
|
|
206
|
+
readonly job_title: {
|
|
207
|
+
readonly type: "string";
|
|
208
|
+
};
|
|
209
|
+
readonly company_id: {
|
|
210
|
+
readonly type: "string";
|
|
211
|
+
};
|
|
212
|
+
readonly notes: {
|
|
213
|
+
readonly type: "string";
|
|
214
|
+
};
|
|
215
|
+
readonly birthday: {
|
|
216
|
+
readonly type: "string";
|
|
217
|
+
readonly description: "YYYY-MM-DD";
|
|
218
|
+
};
|
|
219
|
+
readonly website: {
|
|
220
|
+
readonly type: "string";
|
|
221
|
+
};
|
|
222
|
+
readonly last_contacted_at: {
|
|
223
|
+
readonly type: "string";
|
|
224
|
+
readonly description: "ISO 8601 datetime of last contact";
|
|
225
|
+
};
|
|
226
|
+
readonly preferred_contact_method: {
|
|
227
|
+
readonly type: "string";
|
|
228
|
+
readonly enum: readonly ["email", "phone", "telegram", "whatsapp", "linkedin", "twitter", "other"];
|
|
229
|
+
};
|
|
230
|
+
readonly status: {
|
|
231
|
+
readonly type: "string";
|
|
232
|
+
readonly enum: readonly ["active", "pending_reply", "converted", "closed", "other"];
|
|
233
|
+
};
|
|
234
|
+
readonly follow_up_at: {
|
|
235
|
+
readonly type: "string";
|
|
236
|
+
readonly description: "ISO 8601 datetime for follow-up reminder (null to clear)";
|
|
237
|
+
};
|
|
238
|
+
readonly project_id: {
|
|
239
|
+
readonly type: "string";
|
|
240
|
+
readonly description: "Primary project ID (single, null to clear)";
|
|
241
|
+
};
|
|
242
|
+
readonly project_ids: {
|
|
243
|
+
readonly type: "array";
|
|
244
|
+
readonly items: {
|
|
245
|
+
readonly type: "string";
|
|
246
|
+
};
|
|
247
|
+
readonly description: "Replace all project links with this array of todos project IDs";
|
|
248
|
+
};
|
|
249
|
+
readonly source: {
|
|
250
|
+
readonly type: "string";
|
|
251
|
+
readonly enum: readonly ["manual", "import", "linkedin", "github", "twitter", "email", "calendar", "crm", "other"];
|
|
252
|
+
};
|
|
253
|
+
readonly sensitivity: {
|
|
254
|
+
readonly type: "string";
|
|
255
|
+
readonly enum: readonly ["normal", "confidential", "restricted"];
|
|
256
|
+
};
|
|
257
|
+
readonly emails_add: {
|
|
258
|
+
readonly type: "array";
|
|
259
|
+
readonly items: {
|
|
260
|
+
readonly type: "object";
|
|
261
|
+
readonly properties: {
|
|
262
|
+
readonly address: {
|
|
263
|
+
readonly type: "string";
|
|
264
|
+
};
|
|
265
|
+
readonly type: {
|
|
266
|
+
readonly type: "string";
|
|
267
|
+
};
|
|
268
|
+
readonly is_primary: {
|
|
269
|
+
readonly type: "boolean";
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
readonly required: readonly ["address"];
|
|
273
|
+
};
|
|
274
|
+
readonly description: "New email addresses to append (duplicates are skipped)";
|
|
275
|
+
};
|
|
276
|
+
readonly phones_add: {
|
|
277
|
+
readonly type: "array";
|
|
278
|
+
readonly items: {
|
|
279
|
+
readonly type: "object";
|
|
280
|
+
readonly properties: {
|
|
281
|
+
readonly number: {
|
|
282
|
+
readonly type: "string";
|
|
283
|
+
};
|
|
284
|
+
readonly type: {
|
|
285
|
+
readonly type: "string";
|
|
286
|
+
};
|
|
287
|
+
readonly country_code: {
|
|
288
|
+
readonly type: "string";
|
|
289
|
+
};
|
|
290
|
+
readonly is_primary: {
|
|
291
|
+
readonly type: "boolean";
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
readonly required: readonly ["number"];
|
|
295
|
+
};
|
|
296
|
+
readonly description: "New phone numbers to append (duplicates are skipped)";
|
|
297
|
+
};
|
|
298
|
+
};
|
|
299
|
+
readonly required: readonly ["id"];
|
|
300
|
+
};
|
|
301
|
+
}, {
|
|
302
|
+
readonly name: "delete_contact";
|
|
303
|
+
readonly description: "Permanently delete a contact by ID. All associated emails, phones, addresses, tags, and relationships are also deleted.";
|
|
304
|
+
readonly inputSchema: {
|
|
305
|
+
readonly type: "object";
|
|
306
|
+
readonly properties: {
|
|
307
|
+
readonly id: {
|
|
308
|
+
readonly type: "string";
|
|
309
|
+
};
|
|
310
|
+
};
|
|
311
|
+
readonly required: readonly ["id"];
|
|
312
|
+
};
|
|
313
|
+
}, {
|
|
314
|
+
readonly name: "list_contacts";
|
|
315
|
+
readonly description: "List contacts with optional filters. Supports filtering by company, tag(s), source, status, project, follow-up due, last_contacted date range, and archived state. Returns paginated results with total count.";
|
|
316
|
+
readonly inputSchema: {
|
|
317
|
+
readonly type: "object";
|
|
318
|
+
readonly properties: {
|
|
319
|
+
readonly company_id: {
|
|
320
|
+
readonly type: "string";
|
|
321
|
+
};
|
|
322
|
+
readonly tag_id: {
|
|
323
|
+
readonly type: "string";
|
|
324
|
+
readonly description: "Filter by a single tag ID";
|
|
325
|
+
};
|
|
326
|
+
readonly tag_ids: {
|
|
327
|
+
readonly type: "array";
|
|
328
|
+
readonly items: {
|
|
329
|
+
readonly type: "string";
|
|
330
|
+
};
|
|
331
|
+
readonly description: "Filter by multiple tag IDs (AND logic — contact must have all tags)";
|
|
332
|
+
};
|
|
333
|
+
readonly source: {
|
|
334
|
+
readonly type: "string";
|
|
335
|
+
readonly enum: readonly ["manual", "import", "linkedin", "github", "twitter", "email", "calendar", "crm", "other"];
|
|
336
|
+
};
|
|
337
|
+
readonly status: {
|
|
338
|
+
readonly type: "string";
|
|
339
|
+
readonly enum: readonly ["active", "pending_reply", "converted", "closed", "other"];
|
|
340
|
+
};
|
|
341
|
+
readonly project_id: {
|
|
342
|
+
readonly type: "string";
|
|
343
|
+
readonly description: "Filter by project ID";
|
|
344
|
+
};
|
|
345
|
+
readonly archived: {
|
|
346
|
+
readonly type: "boolean";
|
|
347
|
+
readonly description: "Include archived contacts (default false)";
|
|
348
|
+
};
|
|
349
|
+
readonly include_restricted: {
|
|
350
|
+
readonly type: "boolean";
|
|
351
|
+
readonly description: "Include restricted-sensitivity contacts (default false)";
|
|
352
|
+
};
|
|
353
|
+
readonly follow_up_due: {
|
|
354
|
+
readonly type: "boolean";
|
|
355
|
+
readonly description: "Only return contacts whose follow_up_at is in the past";
|
|
356
|
+
};
|
|
357
|
+
readonly last_contacted_after: {
|
|
358
|
+
readonly type: "string";
|
|
359
|
+
readonly description: "ISO 8601 date — only contacts last contacted after this date";
|
|
360
|
+
};
|
|
361
|
+
readonly last_contacted_before: {
|
|
362
|
+
readonly type: "string";
|
|
363
|
+
readonly description: "ISO 8601 date — only contacts last contacted before this date";
|
|
364
|
+
};
|
|
365
|
+
readonly limit: {
|
|
366
|
+
readonly type: "number";
|
|
367
|
+
readonly description: "Max results (default 50)";
|
|
368
|
+
};
|
|
369
|
+
readonly offset: {
|
|
370
|
+
readonly type: "number";
|
|
371
|
+
};
|
|
372
|
+
readonly order_by: {
|
|
373
|
+
readonly type: "string";
|
|
374
|
+
readonly enum: readonly ["display_name", "created_at", "updated_at", "last_contacted_at", "follow_up_at"];
|
|
375
|
+
};
|
|
376
|
+
readonly order_dir: {
|
|
377
|
+
readonly type: "string";
|
|
378
|
+
readonly enum: readonly ["asc", "desc"];
|
|
379
|
+
};
|
|
380
|
+
};
|
|
381
|
+
};
|
|
382
|
+
}, {
|
|
383
|
+
readonly name: "search_contacts";
|
|
384
|
+
readonly description: "Full-text search across contacts by name, nickname, notes, job title, and more. Also searches email addresses and phone numbers. Returns up to 50 results.";
|
|
385
|
+
readonly inputSchema: {
|
|
386
|
+
readonly type: "object";
|
|
387
|
+
readonly properties: {
|
|
388
|
+
readonly query: {
|
|
389
|
+
readonly type: "string";
|
|
390
|
+
};
|
|
391
|
+
};
|
|
392
|
+
readonly required: readonly ["query"];
|
|
393
|
+
};
|
|
394
|
+
}, {
|
|
395
|
+
readonly name: "create_company";
|
|
396
|
+
readonly description: "Create a new company/organization. Attach emails, phones, addresses, and social_profiles as arrays. Tag with tag_ids.";
|
|
397
|
+
readonly inputSchema: {
|
|
398
|
+
readonly type: "object";
|
|
399
|
+
readonly properties: {
|
|
400
|
+
readonly name: {
|
|
401
|
+
readonly type: "string";
|
|
402
|
+
};
|
|
403
|
+
readonly domain: {
|
|
404
|
+
readonly type: "string";
|
|
405
|
+
readonly description: "Primary domain, e.g. acme.com";
|
|
406
|
+
};
|
|
407
|
+
readonly description: {
|
|
408
|
+
readonly type: "string";
|
|
409
|
+
};
|
|
410
|
+
readonly industry: {
|
|
411
|
+
readonly type: "string";
|
|
412
|
+
};
|
|
413
|
+
readonly size: {
|
|
414
|
+
readonly type: "string";
|
|
415
|
+
readonly description: "e.g. '1-10', '11-50', '51-200', '201-500', '500+'";
|
|
416
|
+
};
|
|
417
|
+
readonly founded_year: {
|
|
418
|
+
readonly type: "number";
|
|
419
|
+
};
|
|
420
|
+
readonly notes: {
|
|
421
|
+
readonly type: "string";
|
|
422
|
+
};
|
|
423
|
+
readonly emails: {
|
|
424
|
+
readonly type: "array";
|
|
425
|
+
readonly items: {
|
|
426
|
+
readonly type: "object";
|
|
427
|
+
};
|
|
428
|
+
};
|
|
429
|
+
readonly phones: {
|
|
430
|
+
readonly type: "array";
|
|
431
|
+
readonly items: {
|
|
432
|
+
readonly type: "object";
|
|
433
|
+
};
|
|
434
|
+
};
|
|
435
|
+
readonly addresses: {
|
|
436
|
+
readonly type: "array";
|
|
437
|
+
readonly items: {
|
|
438
|
+
readonly type: "object";
|
|
439
|
+
};
|
|
440
|
+
};
|
|
441
|
+
readonly social_profiles: {
|
|
442
|
+
readonly type: "array";
|
|
443
|
+
readonly items: {
|
|
444
|
+
readonly type: "object";
|
|
445
|
+
};
|
|
446
|
+
};
|
|
447
|
+
readonly tag_ids: {
|
|
448
|
+
readonly type: "array";
|
|
449
|
+
readonly items: {
|
|
450
|
+
readonly type: "string";
|
|
451
|
+
};
|
|
452
|
+
};
|
|
453
|
+
};
|
|
454
|
+
readonly required: readonly ["name"];
|
|
455
|
+
};
|
|
456
|
+
}, {
|
|
457
|
+
readonly name: "get_company";
|
|
458
|
+
readonly description: "Get a company by ID, including all emails, phones, addresses, social profiles, tags, and employee count.";
|
|
459
|
+
readonly inputSchema: {
|
|
460
|
+
readonly type: "object";
|
|
461
|
+
readonly properties: {
|
|
462
|
+
readonly id: {
|
|
463
|
+
readonly type: "string";
|
|
464
|
+
};
|
|
465
|
+
};
|
|
466
|
+
readonly required: readonly ["id"];
|
|
467
|
+
};
|
|
468
|
+
}, {
|
|
469
|
+
readonly name: "update_company";
|
|
470
|
+
readonly description: "Update an existing company's fields. Only provided fields are changed; omitted fields remain unchanged.";
|
|
471
|
+
readonly inputSchema: {
|
|
472
|
+
readonly type: "object";
|
|
473
|
+
readonly properties: {
|
|
474
|
+
readonly id: {
|
|
475
|
+
readonly type: "string";
|
|
476
|
+
};
|
|
477
|
+
readonly name: {
|
|
478
|
+
readonly type: "string";
|
|
479
|
+
};
|
|
480
|
+
readonly domain: {
|
|
481
|
+
readonly type: "string";
|
|
482
|
+
};
|
|
483
|
+
readonly description: {
|
|
484
|
+
readonly type: "string";
|
|
485
|
+
};
|
|
486
|
+
readonly industry: {
|
|
487
|
+
readonly type: "string";
|
|
488
|
+
};
|
|
489
|
+
readonly size: {
|
|
490
|
+
readonly type: "string";
|
|
491
|
+
};
|
|
492
|
+
readonly founded_year: {
|
|
493
|
+
readonly type: "number";
|
|
494
|
+
};
|
|
495
|
+
readonly notes: {
|
|
496
|
+
readonly type: "string";
|
|
497
|
+
};
|
|
498
|
+
};
|
|
499
|
+
readonly required: readonly ["id"];
|
|
500
|
+
};
|
|
501
|
+
}, {
|
|
502
|
+
readonly name: "delete_company";
|
|
503
|
+
readonly description: "Permanently delete a company by ID. Contacts that belong to this company will have their company_id cleared.";
|
|
504
|
+
readonly inputSchema: {
|
|
505
|
+
readonly type: "object";
|
|
506
|
+
readonly properties: {
|
|
507
|
+
readonly id: {
|
|
508
|
+
readonly type: "string";
|
|
509
|
+
};
|
|
510
|
+
};
|
|
511
|
+
readonly required: readonly ["id"];
|
|
512
|
+
};
|
|
513
|
+
}, {
|
|
514
|
+
readonly name: "list_companies";
|
|
515
|
+
readonly description: "List companies with optional filters by industry, tag, project, or archived state. Returns paginated results with total count.";
|
|
516
|
+
readonly inputSchema: {
|
|
517
|
+
readonly type: "object";
|
|
518
|
+
readonly properties: {
|
|
519
|
+
readonly tag_id: {
|
|
520
|
+
readonly type: "string";
|
|
521
|
+
};
|
|
522
|
+
readonly industry: {
|
|
523
|
+
readonly type: "string";
|
|
524
|
+
};
|
|
525
|
+
readonly project_id: {
|
|
526
|
+
readonly type: "string";
|
|
527
|
+
readonly description: "Filter by project ID";
|
|
528
|
+
};
|
|
529
|
+
readonly archived: {
|
|
530
|
+
readonly type: "boolean";
|
|
531
|
+
readonly description: "Include archived companies (default false)";
|
|
532
|
+
};
|
|
533
|
+
readonly limit: {
|
|
534
|
+
readonly type: "number";
|
|
535
|
+
};
|
|
536
|
+
readonly offset: {
|
|
537
|
+
readonly type: "number";
|
|
538
|
+
};
|
|
539
|
+
};
|
|
540
|
+
};
|
|
541
|
+
}, {
|
|
542
|
+
readonly name: "search_companies";
|
|
543
|
+
readonly description: "Search companies by name or domain using full-text search. Returns up to 50 matches.";
|
|
544
|
+
readonly inputSchema: {
|
|
545
|
+
readonly type: "object";
|
|
546
|
+
readonly properties: {
|
|
547
|
+
readonly query: {
|
|
548
|
+
readonly type: "string";
|
|
549
|
+
};
|
|
550
|
+
};
|
|
551
|
+
readonly required: readonly ["query"];
|
|
552
|
+
};
|
|
553
|
+
}, {
|
|
554
|
+
readonly name: "create_tag";
|
|
555
|
+
readonly description: "Create a new tag for categorizing contacts and companies. Tags are shared across contacts and companies.";
|
|
556
|
+
readonly inputSchema: {
|
|
557
|
+
readonly type: "object";
|
|
558
|
+
readonly properties: {
|
|
559
|
+
readonly name: {
|
|
560
|
+
readonly type: "string";
|
|
561
|
+
};
|
|
562
|
+
readonly color: {
|
|
563
|
+
readonly type: "string";
|
|
564
|
+
readonly description: "Hex color (e.g. #FF5733). Defaults to indigo.";
|
|
565
|
+
};
|
|
566
|
+
readonly description: {
|
|
567
|
+
readonly type: "string";
|
|
568
|
+
};
|
|
569
|
+
};
|
|
570
|
+
readonly required: readonly ["name"];
|
|
571
|
+
};
|
|
572
|
+
}, {
|
|
573
|
+
readonly name: "list_tags";
|
|
574
|
+
readonly description: "List all available tags with their colors and descriptions.";
|
|
575
|
+
readonly inputSchema: {
|
|
576
|
+
readonly type: "object";
|
|
577
|
+
readonly properties: {};
|
|
578
|
+
};
|
|
579
|
+
}, {
|
|
580
|
+
readonly name: "delete_tag";
|
|
581
|
+
readonly description: "Delete a tag by ID. The tag will be removed from all contacts and companies it was applied to.";
|
|
582
|
+
readonly inputSchema: {
|
|
583
|
+
readonly type: "object";
|
|
584
|
+
readonly properties: {
|
|
585
|
+
readonly id: {
|
|
586
|
+
readonly type: "string";
|
|
587
|
+
};
|
|
588
|
+
};
|
|
589
|
+
readonly required: readonly ["id"];
|
|
590
|
+
};
|
|
591
|
+
}, {
|
|
592
|
+
readonly name: "add_tag_to_contact";
|
|
593
|
+
readonly description: "Apply an existing tag to a contact. Use list_tags to find tag IDs.";
|
|
594
|
+
readonly inputSchema: {
|
|
595
|
+
readonly type: "object";
|
|
596
|
+
readonly properties: {
|
|
597
|
+
readonly contact_id: {
|
|
598
|
+
readonly type: "string";
|
|
599
|
+
};
|
|
600
|
+
readonly tag_id: {
|
|
601
|
+
readonly type: "string";
|
|
602
|
+
};
|
|
603
|
+
};
|
|
604
|
+
readonly required: readonly ["contact_id", "tag_id"];
|
|
605
|
+
};
|
|
606
|
+
}, {
|
|
607
|
+
readonly name: "remove_tag_from_contact";
|
|
608
|
+
readonly description: "Remove a tag from a contact. The tag itself is not deleted.";
|
|
609
|
+
readonly inputSchema: {
|
|
610
|
+
readonly type: "object";
|
|
611
|
+
readonly properties: {
|
|
612
|
+
readonly contact_id: {
|
|
613
|
+
readonly type: "string";
|
|
614
|
+
};
|
|
615
|
+
readonly tag_id: {
|
|
616
|
+
readonly type: "string";
|
|
617
|
+
};
|
|
618
|
+
};
|
|
619
|
+
readonly required: readonly ["contact_id", "tag_id"];
|
|
620
|
+
};
|
|
621
|
+
}, {
|
|
622
|
+
readonly name: "add_relationship";
|
|
623
|
+
readonly description: "Link two contacts with a typed relationship. relationship_type: colleague (work peer), friend (personal), family (relative), reports_to (A reports to B), mentor (A mentors B), investor (A invests in B), partner (business partner), client, vendor, other.";
|
|
624
|
+
readonly inputSchema: {
|
|
625
|
+
readonly type: "object";
|
|
626
|
+
readonly properties: {
|
|
627
|
+
readonly contact_a_id: {
|
|
628
|
+
readonly type: "string";
|
|
629
|
+
};
|
|
630
|
+
readonly contact_b_id: {
|
|
631
|
+
readonly type: "string";
|
|
632
|
+
};
|
|
633
|
+
readonly relationship_type: {
|
|
634
|
+
readonly type: "string";
|
|
635
|
+
readonly enum: readonly ["colleague", "friend", "family", "reports_to", "mentor", "investor", "partner", "client", "vendor", "other"];
|
|
636
|
+
};
|
|
637
|
+
readonly notes: {
|
|
638
|
+
readonly type: "string";
|
|
639
|
+
};
|
|
640
|
+
};
|
|
641
|
+
readonly required: readonly ["contact_a_id", "contact_b_id", "relationship_type"];
|
|
642
|
+
};
|
|
643
|
+
}, {
|
|
644
|
+
readonly name: "list_relationships";
|
|
645
|
+
readonly description: "List all relationships for a contact, showing both directions (where contact is A or B).";
|
|
646
|
+
readonly inputSchema: {
|
|
647
|
+
readonly type: "object";
|
|
648
|
+
readonly properties: {
|
|
649
|
+
readonly contact_id: {
|
|
650
|
+
readonly type: "string";
|
|
651
|
+
};
|
|
652
|
+
};
|
|
653
|
+
readonly required: readonly ["contact_id"];
|
|
654
|
+
};
|
|
655
|
+
}, {
|
|
656
|
+
readonly name: "delete_relationship";
|
|
657
|
+
readonly description: "Delete a relationship by its ID. Use list_relationships to find relationship IDs.";
|
|
658
|
+
readonly inputSchema: {
|
|
659
|
+
readonly type: "object";
|
|
660
|
+
readonly properties: {
|
|
661
|
+
readonly id: {
|
|
662
|
+
readonly type: "string";
|
|
663
|
+
};
|
|
664
|
+
};
|
|
665
|
+
readonly required: readonly ["id"];
|
|
666
|
+
};
|
|
667
|
+
}, {
|
|
668
|
+
readonly name: "merge_contacts";
|
|
669
|
+
readonly description: "Merge two contacts into one — all emails, phones, addresses, tags, and relationships from merge_id are moved to keep_id, then merge_id is deleted. Fields missing in keep_id are filled from merge_id.";
|
|
670
|
+
readonly inputSchema: {
|
|
671
|
+
readonly type: "object";
|
|
672
|
+
readonly properties: {
|
|
673
|
+
readonly keep_id: {
|
|
674
|
+
readonly type: "string";
|
|
675
|
+
};
|
|
676
|
+
readonly merge_id: {
|
|
677
|
+
readonly type: "string";
|
|
678
|
+
};
|
|
679
|
+
};
|
|
680
|
+
readonly required: readonly ["keep_id", "merge_id"];
|
|
681
|
+
};
|
|
682
|
+
}, {
|
|
683
|
+
readonly name: "import_contacts";
|
|
684
|
+
readonly description: "Import contacts from CSV (Google Contacts format), vCard (.vcf, v3/v4), or JSON array. Pass raw file contents as the data string. format: 'csv'|'vcf'|'json'.";
|
|
685
|
+
readonly inputSchema: {
|
|
686
|
+
readonly type: "object";
|
|
687
|
+
readonly properties: {
|
|
688
|
+
readonly format: {
|
|
689
|
+
readonly type: "string";
|
|
690
|
+
readonly enum: readonly ["json", "csv", "vcf"];
|
|
691
|
+
};
|
|
692
|
+
readonly data: {
|
|
693
|
+
readonly type: "string";
|
|
694
|
+
readonly description: "Raw file contents (CSV text, vCard text, or JSON array string)";
|
|
695
|
+
};
|
|
696
|
+
};
|
|
697
|
+
readonly required: readonly ["format", "data"];
|
|
698
|
+
};
|
|
699
|
+
}, {
|
|
700
|
+
readonly name: "export_contacts";
|
|
701
|
+
readonly description: "Export contacts to CSV, vCard (.vcf), or JSON format. Optionally specify contact_ids to export a subset; omit to export all contacts. Use updated_since to export only contacts updated after a date.";
|
|
702
|
+
readonly inputSchema: {
|
|
703
|
+
readonly type: "object";
|
|
704
|
+
readonly properties: {
|
|
705
|
+
readonly format: {
|
|
706
|
+
readonly type: "string";
|
|
707
|
+
readonly enum: readonly ["json", "csv", "vcf"];
|
|
708
|
+
};
|
|
709
|
+
readonly contact_ids: {
|
|
710
|
+
readonly type: "array";
|
|
711
|
+
readonly items: {
|
|
712
|
+
readonly type: "string";
|
|
713
|
+
};
|
|
714
|
+
readonly description: "Specific contact IDs to export (omit for all)";
|
|
715
|
+
};
|
|
716
|
+
readonly updated_since: {
|
|
717
|
+
readonly type: "string";
|
|
718
|
+
readonly description: "ISO 8601 date — only export contacts updated/contacted after this date";
|
|
719
|
+
};
|
|
720
|
+
};
|
|
721
|
+
readonly required: readonly ["format"];
|
|
722
|
+
};
|
|
723
|
+
}, {
|
|
724
|
+
readonly name: "get_stats";
|
|
725
|
+
readonly description: "Get database statistics: total counts of contacts, companies, tags, and groups.";
|
|
726
|
+
readonly inputSchema: {
|
|
727
|
+
readonly type: "object";
|
|
728
|
+
readonly properties: {};
|
|
729
|
+
};
|
|
730
|
+
}, {
|
|
731
|
+
readonly name: "log_interaction";
|
|
732
|
+
readonly description: "Record a contact interaction — sets last_contacted_at to now (or a provided date) and optionally appends a timestamped note. Use this to track when you last spoke with someone.";
|
|
733
|
+
readonly inputSchema: {
|
|
734
|
+
readonly type: "object";
|
|
735
|
+
readonly properties: {
|
|
736
|
+
readonly contact_id: {
|
|
737
|
+
readonly type: "string";
|
|
738
|
+
};
|
|
739
|
+
readonly note: {
|
|
740
|
+
readonly type: "string";
|
|
741
|
+
readonly description: "Optional note about the interaction to append to the contact's notes";
|
|
742
|
+
};
|
|
743
|
+
readonly date: {
|
|
744
|
+
readonly type: "string";
|
|
745
|
+
readonly description: "ISO 8601 datetime (defaults to now)";
|
|
746
|
+
};
|
|
747
|
+
};
|
|
748
|
+
readonly required: readonly ["contact_id"];
|
|
749
|
+
};
|
|
750
|
+
}, {
|
|
751
|
+
readonly name: "find_or_create_contact";
|
|
752
|
+
readonly description: "Find an existing contact by email or name, or create a new one if not found. Returns { contact, found: boolean, created: boolean }. The #1 tool for agent workflows — avoids duplicate creation. Searches by email first (exact match), then by display_name.";
|
|
753
|
+
readonly inputSchema: {
|
|
754
|
+
readonly type: "object";
|
|
755
|
+
readonly properties: {
|
|
756
|
+
readonly first_name: {
|
|
757
|
+
readonly type: "string";
|
|
758
|
+
};
|
|
759
|
+
readonly last_name: {
|
|
760
|
+
readonly type: "string";
|
|
761
|
+
};
|
|
762
|
+
readonly display_name: {
|
|
763
|
+
readonly type: "string";
|
|
764
|
+
};
|
|
765
|
+
readonly nickname: {
|
|
766
|
+
readonly type: "string";
|
|
767
|
+
};
|
|
768
|
+
readonly job_title: {
|
|
769
|
+
readonly type: "string";
|
|
770
|
+
};
|
|
771
|
+
readonly company_id: {
|
|
772
|
+
readonly type: "string";
|
|
773
|
+
};
|
|
774
|
+
readonly notes: {
|
|
775
|
+
readonly type: "string";
|
|
776
|
+
};
|
|
777
|
+
readonly birthday: {
|
|
778
|
+
readonly type: "string";
|
|
779
|
+
};
|
|
780
|
+
readonly website: {
|
|
781
|
+
readonly type: "string";
|
|
782
|
+
};
|
|
783
|
+
readonly last_contacted_at: {
|
|
784
|
+
readonly type: "string";
|
|
785
|
+
};
|
|
786
|
+
readonly preferred_contact_method: {
|
|
787
|
+
readonly type: "string";
|
|
788
|
+
readonly enum: readonly ["email", "phone", "telegram", "whatsapp", "linkedin", "twitter", "other"];
|
|
789
|
+
};
|
|
790
|
+
readonly emails: {
|
|
791
|
+
readonly type: "array";
|
|
792
|
+
readonly items: {
|
|
793
|
+
readonly type: "object";
|
|
794
|
+
readonly properties: {
|
|
795
|
+
readonly address: {
|
|
796
|
+
readonly type: "string";
|
|
797
|
+
};
|
|
798
|
+
readonly type: {
|
|
799
|
+
readonly type: "string";
|
|
800
|
+
};
|
|
801
|
+
readonly is_primary: {
|
|
802
|
+
readonly type: "boolean";
|
|
803
|
+
};
|
|
804
|
+
};
|
|
805
|
+
readonly required: readonly ["address"];
|
|
806
|
+
};
|
|
807
|
+
};
|
|
808
|
+
readonly phones: {
|
|
809
|
+
readonly type: "array";
|
|
810
|
+
readonly items: {
|
|
811
|
+
readonly type: "object";
|
|
812
|
+
};
|
|
813
|
+
};
|
|
814
|
+
readonly addresses: {
|
|
815
|
+
readonly type: "array";
|
|
816
|
+
readonly items: {
|
|
817
|
+
readonly type: "object";
|
|
818
|
+
};
|
|
819
|
+
};
|
|
820
|
+
readonly social_profiles: {
|
|
821
|
+
readonly type: "array";
|
|
822
|
+
readonly items: {
|
|
823
|
+
readonly type: "object";
|
|
824
|
+
};
|
|
825
|
+
};
|
|
826
|
+
readonly tag_ids: {
|
|
827
|
+
readonly type: "array";
|
|
828
|
+
readonly items: {
|
|
829
|
+
readonly type: "string";
|
|
830
|
+
};
|
|
831
|
+
};
|
|
832
|
+
readonly source: {
|
|
833
|
+
readonly type: "string";
|
|
834
|
+
};
|
|
835
|
+
};
|
|
836
|
+
};
|
|
837
|
+
}, {
|
|
838
|
+
readonly name: "upsert_contact";
|
|
839
|
+
readonly description: "Update a contact if one with matching email exists, otherwise create a new one. Returns { contact, action: 'created'|'updated' }. Ideal for syncing data from external sources. Requires email in the emails array or as a top-level email field.";
|
|
840
|
+
readonly inputSchema: {
|
|
841
|
+
readonly type: "object";
|
|
842
|
+
readonly properties: {
|
|
843
|
+
readonly first_name: {
|
|
844
|
+
readonly type: "string";
|
|
845
|
+
};
|
|
846
|
+
readonly last_name: {
|
|
847
|
+
readonly type: "string";
|
|
848
|
+
};
|
|
849
|
+
readonly display_name: {
|
|
850
|
+
readonly type: "string";
|
|
851
|
+
};
|
|
852
|
+
readonly nickname: {
|
|
853
|
+
readonly type: "string";
|
|
854
|
+
};
|
|
855
|
+
readonly job_title: {
|
|
856
|
+
readonly type: "string";
|
|
857
|
+
};
|
|
858
|
+
readonly company_id: {
|
|
859
|
+
readonly type: "string";
|
|
860
|
+
};
|
|
861
|
+
readonly notes: {
|
|
862
|
+
readonly type: "string";
|
|
863
|
+
};
|
|
864
|
+
readonly birthday: {
|
|
865
|
+
readonly type: "string";
|
|
866
|
+
};
|
|
867
|
+
readonly website: {
|
|
868
|
+
readonly type: "string";
|
|
869
|
+
};
|
|
870
|
+
readonly last_contacted_at: {
|
|
871
|
+
readonly type: "string";
|
|
872
|
+
};
|
|
873
|
+
readonly preferred_contact_method: {
|
|
874
|
+
readonly type: "string";
|
|
875
|
+
readonly enum: readonly ["email", "phone", "telegram", "whatsapp", "linkedin", "twitter", "other"];
|
|
876
|
+
};
|
|
877
|
+
readonly email: {
|
|
878
|
+
readonly type: "string";
|
|
879
|
+
readonly description: "Primary email address (alternative to emails array)";
|
|
880
|
+
};
|
|
881
|
+
readonly emails: {
|
|
882
|
+
readonly type: "array";
|
|
883
|
+
readonly items: {
|
|
884
|
+
readonly type: "object";
|
|
885
|
+
readonly properties: {
|
|
886
|
+
readonly address: {
|
|
887
|
+
readonly type: "string";
|
|
888
|
+
};
|
|
889
|
+
readonly type: {
|
|
890
|
+
readonly type: "string";
|
|
891
|
+
};
|
|
892
|
+
readonly is_primary: {
|
|
893
|
+
readonly type: "boolean";
|
|
894
|
+
};
|
|
895
|
+
};
|
|
896
|
+
readonly required: readonly ["address"];
|
|
897
|
+
};
|
|
898
|
+
};
|
|
899
|
+
readonly phones: {
|
|
900
|
+
readonly type: "array";
|
|
901
|
+
readonly items: {
|
|
902
|
+
readonly type: "object";
|
|
903
|
+
};
|
|
904
|
+
};
|
|
905
|
+
readonly addresses: {
|
|
906
|
+
readonly type: "array";
|
|
907
|
+
readonly items: {
|
|
908
|
+
readonly type: "object";
|
|
909
|
+
};
|
|
910
|
+
};
|
|
911
|
+
readonly social_profiles: {
|
|
912
|
+
readonly type: "array";
|
|
913
|
+
readonly items: {
|
|
914
|
+
readonly type: "object";
|
|
915
|
+
};
|
|
916
|
+
};
|
|
917
|
+
readonly tag_ids: {
|
|
918
|
+
readonly type: "array";
|
|
919
|
+
readonly items: {
|
|
920
|
+
readonly type: "string";
|
|
921
|
+
};
|
|
922
|
+
};
|
|
923
|
+
readonly source: {
|
|
924
|
+
readonly type: "string";
|
|
925
|
+
};
|
|
926
|
+
};
|
|
927
|
+
};
|
|
928
|
+
}, {
|
|
929
|
+
readonly name: "add_note";
|
|
930
|
+
readonly description: "Add a structured timestamped note to a contact. Returns the note object with id, body, created_at. Optionally scope the note to a specific company context.";
|
|
931
|
+
readonly inputSchema: {
|
|
932
|
+
readonly type: "object";
|
|
933
|
+
readonly properties: {
|
|
934
|
+
readonly contact_id: {
|
|
935
|
+
readonly type: "string";
|
|
936
|
+
};
|
|
937
|
+
readonly note: {
|
|
938
|
+
readonly type: "string";
|
|
939
|
+
readonly description: "Note text/body";
|
|
940
|
+
};
|
|
941
|
+
readonly created_by: {
|
|
942
|
+
readonly type: "string";
|
|
943
|
+
readonly description: "Agent or user who created the note (optional)";
|
|
944
|
+
};
|
|
945
|
+
readonly company_id: {
|
|
946
|
+
readonly type: "string";
|
|
947
|
+
readonly description: "Optional company context — scope this note to a specific contact-company pair";
|
|
948
|
+
};
|
|
949
|
+
};
|
|
950
|
+
readonly required: readonly ["contact_id", "note"];
|
|
951
|
+
};
|
|
952
|
+
}, {
|
|
953
|
+
readonly name: "list_notes";
|
|
954
|
+
readonly description: "List all structured notes for a contact, ordered by date ascending. Optionally filter by company_id to show only notes scoped to that contact-company pair.";
|
|
955
|
+
readonly inputSchema: {
|
|
956
|
+
readonly type: "object";
|
|
957
|
+
readonly properties: {
|
|
958
|
+
readonly contact_id: {
|
|
959
|
+
readonly type: "string";
|
|
960
|
+
};
|
|
961
|
+
readonly company_id: {
|
|
962
|
+
readonly type: "string";
|
|
963
|
+
readonly description: "Optional company ID — if provided, only returns notes scoped to this contact-company pair";
|
|
964
|
+
};
|
|
965
|
+
};
|
|
966
|
+
readonly required: readonly ["contact_id"];
|
|
967
|
+
};
|
|
968
|
+
}, {
|
|
969
|
+
readonly name: "delete_note";
|
|
970
|
+
readonly description: "Delete a specific note by its ID.";
|
|
971
|
+
readonly inputSchema: {
|
|
972
|
+
readonly type: "object";
|
|
973
|
+
readonly properties: {
|
|
974
|
+
readonly note_id: {
|
|
975
|
+
readonly type: "string";
|
|
976
|
+
};
|
|
977
|
+
};
|
|
978
|
+
readonly required: readonly ["note_id"];
|
|
979
|
+
};
|
|
980
|
+
}, {
|
|
981
|
+
readonly name: "link_contact_to_project";
|
|
982
|
+
readonly description: "Associate a contact with a todos project ID. Contacts can belong to multiple projects.";
|
|
983
|
+
readonly inputSchema: {
|
|
984
|
+
readonly type: "object";
|
|
985
|
+
readonly properties: {
|
|
986
|
+
readonly contact_id: {
|
|
987
|
+
readonly type: "string";
|
|
988
|
+
};
|
|
989
|
+
readonly project_id: {
|
|
990
|
+
readonly type: "string";
|
|
991
|
+
readonly description: "Todos project ID";
|
|
992
|
+
};
|
|
993
|
+
};
|
|
994
|
+
readonly required: readonly ["contact_id", "project_id"];
|
|
995
|
+
};
|
|
996
|
+
}, {
|
|
997
|
+
readonly name: "unlink_contact_from_project";
|
|
998
|
+
readonly description: "Remove the association between a contact and a todos project.";
|
|
999
|
+
readonly inputSchema: {
|
|
1000
|
+
readonly type: "object";
|
|
1001
|
+
readonly properties: {
|
|
1002
|
+
readonly contact_id: {
|
|
1003
|
+
readonly type: "string";
|
|
1004
|
+
};
|
|
1005
|
+
readonly project_id: {
|
|
1006
|
+
readonly type: "string";
|
|
1007
|
+
};
|
|
1008
|
+
};
|
|
1009
|
+
readonly required: readonly ["contact_id", "project_id"];
|
|
1010
|
+
};
|
|
1011
|
+
}, {
|
|
1012
|
+
readonly name: "list_contacts_by_project";
|
|
1013
|
+
readonly description: "List all contacts linked to a specific todos project ID.";
|
|
1014
|
+
readonly inputSchema: {
|
|
1015
|
+
readonly type: "object";
|
|
1016
|
+
readonly properties: {
|
|
1017
|
+
readonly project_id: {
|
|
1018
|
+
readonly type: "string";
|
|
1019
|
+
};
|
|
1020
|
+
readonly limit: {
|
|
1021
|
+
readonly type: "number";
|
|
1022
|
+
readonly description: "Max results (default 100)";
|
|
1023
|
+
};
|
|
1024
|
+
readonly offset: {
|
|
1025
|
+
readonly type: "number";
|
|
1026
|
+
};
|
|
1027
|
+
};
|
|
1028
|
+
readonly required: readonly ["project_id"];
|
|
1029
|
+
};
|
|
1030
|
+
}, {
|
|
1031
|
+
readonly name: "list_contacts_by_company";
|
|
1032
|
+
readonly description: "List all contacts belonging to a specific company. Equivalent to list_contacts with company_id filter but more ergonomic.";
|
|
1033
|
+
readonly inputSchema: {
|
|
1034
|
+
readonly type: "object";
|
|
1035
|
+
readonly properties: {
|
|
1036
|
+
readonly company_id: {
|
|
1037
|
+
readonly type: "string";
|
|
1038
|
+
};
|
|
1039
|
+
readonly limit: {
|
|
1040
|
+
readonly type: "number";
|
|
1041
|
+
readonly description: "Max results (default 50)";
|
|
1042
|
+
};
|
|
1043
|
+
readonly offset: {
|
|
1044
|
+
readonly type: "number";
|
|
1045
|
+
};
|
|
1046
|
+
};
|
|
1047
|
+
readonly required: readonly ["company_id"];
|
|
1048
|
+
};
|
|
1049
|
+
}, {
|
|
1050
|
+
readonly name: "list_contacts_by_tag";
|
|
1051
|
+
readonly description: "List all contacts with a specific tag. Accepts either a tag ID (UUID) or a tag name string.";
|
|
1052
|
+
readonly inputSchema: {
|
|
1053
|
+
readonly type: "object";
|
|
1054
|
+
readonly properties: {
|
|
1055
|
+
readonly tag: {
|
|
1056
|
+
readonly type: "string";
|
|
1057
|
+
readonly description: "Tag name or tag ID (UUID)";
|
|
1058
|
+
};
|
|
1059
|
+
readonly limit: {
|
|
1060
|
+
readonly type: "number";
|
|
1061
|
+
readonly description: "Max results (default 50)";
|
|
1062
|
+
};
|
|
1063
|
+
readonly offset: {
|
|
1064
|
+
readonly type: "number";
|
|
1065
|
+
};
|
|
1066
|
+
};
|
|
1067
|
+
readonly required: readonly ["tag"];
|
|
1068
|
+
};
|
|
1069
|
+
}, {
|
|
1070
|
+
readonly name: "create_group";
|
|
1071
|
+
readonly description: "Create a new group for organizing contacts. Groups are named collections that can hold multiple contacts.";
|
|
1072
|
+
readonly inputSchema: {
|
|
1073
|
+
readonly type: "object";
|
|
1074
|
+
readonly properties: {
|
|
1075
|
+
readonly name: {
|
|
1076
|
+
readonly type: "string";
|
|
1077
|
+
};
|
|
1078
|
+
readonly description: {
|
|
1079
|
+
readonly type: "string";
|
|
1080
|
+
};
|
|
1081
|
+
readonly project_id: {
|
|
1082
|
+
readonly type: "string";
|
|
1083
|
+
readonly description: "Associate this group with a todos project ID";
|
|
1084
|
+
};
|
|
1085
|
+
};
|
|
1086
|
+
readonly required: readonly ["name"];
|
|
1087
|
+
};
|
|
1088
|
+
}, {
|
|
1089
|
+
readonly name: "list_groups";
|
|
1090
|
+
readonly description: "List all groups with their member counts.";
|
|
1091
|
+
readonly inputSchema: {
|
|
1092
|
+
readonly type: "object";
|
|
1093
|
+
readonly properties: {
|
|
1094
|
+
readonly project_id: {
|
|
1095
|
+
readonly type: "string";
|
|
1096
|
+
readonly description: "Filter groups by todos project ID";
|
|
1097
|
+
};
|
|
1098
|
+
};
|
|
1099
|
+
};
|
|
1100
|
+
}, {
|
|
1101
|
+
readonly name: "get_group";
|
|
1102
|
+
readonly description: "Get a group by ID.";
|
|
1103
|
+
readonly inputSchema: {
|
|
1104
|
+
readonly type: "object";
|
|
1105
|
+
readonly properties: {
|
|
1106
|
+
readonly id: {
|
|
1107
|
+
readonly type: "string";
|
|
1108
|
+
};
|
|
1109
|
+
};
|
|
1110
|
+
readonly required: readonly ["id"];
|
|
1111
|
+
};
|
|
1112
|
+
}, {
|
|
1113
|
+
readonly name: "update_group";
|
|
1114
|
+
readonly description: "Update a group's name, description, or project association.";
|
|
1115
|
+
readonly inputSchema: {
|
|
1116
|
+
readonly type: "object";
|
|
1117
|
+
readonly properties: {
|
|
1118
|
+
readonly id: {
|
|
1119
|
+
readonly type: "string";
|
|
1120
|
+
};
|
|
1121
|
+
readonly name: {
|
|
1122
|
+
readonly type: "string";
|
|
1123
|
+
};
|
|
1124
|
+
readonly description: {
|
|
1125
|
+
readonly type: "string";
|
|
1126
|
+
};
|
|
1127
|
+
readonly project_id: {
|
|
1128
|
+
readonly type: "string";
|
|
1129
|
+
readonly description: "Associate with a todos project ID (null to clear)";
|
|
1130
|
+
};
|
|
1131
|
+
};
|
|
1132
|
+
readonly required: readonly ["id"];
|
|
1133
|
+
};
|
|
1134
|
+
}, {
|
|
1135
|
+
readonly name: "delete_group";
|
|
1136
|
+
readonly description: "Delete a group by ID. Contacts in the group are not deleted — only the group itself.";
|
|
1137
|
+
readonly inputSchema: {
|
|
1138
|
+
readonly type: "object";
|
|
1139
|
+
readonly properties: {
|
|
1140
|
+
readonly id: {
|
|
1141
|
+
readonly type: "string";
|
|
1142
|
+
};
|
|
1143
|
+
};
|
|
1144
|
+
readonly required: readonly ["id"];
|
|
1145
|
+
};
|
|
1146
|
+
}, {
|
|
1147
|
+
readonly name: "add_contact_to_group";
|
|
1148
|
+
readonly description: "Add one or more contacts to a group. Pass contact_id for a single contact, or contact_ids (array) for bulk.";
|
|
1149
|
+
readonly inputSchema: {
|
|
1150
|
+
readonly type: "object";
|
|
1151
|
+
readonly properties: {
|
|
1152
|
+
readonly contact_id: {
|
|
1153
|
+
readonly type: "string";
|
|
1154
|
+
readonly description: "Single contact ID (use contact_ids for bulk)";
|
|
1155
|
+
};
|
|
1156
|
+
readonly contact_ids: {
|
|
1157
|
+
readonly type: "array";
|
|
1158
|
+
readonly items: {
|
|
1159
|
+
readonly type: "string";
|
|
1160
|
+
};
|
|
1161
|
+
readonly description: "Multiple contact IDs to add at once";
|
|
1162
|
+
};
|
|
1163
|
+
readonly group_id: {
|
|
1164
|
+
readonly type: "string";
|
|
1165
|
+
};
|
|
1166
|
+
};
|
|
1167
|
+
readonly required: readonly ["group_id"];
|
|
1168
|
+
};
|
|
1169
|
+
}, {
|
|
1170
|
+
readonly name: "remove_contact_from_group";
|
|
1171
|
+
readonly description: "Remove a contact from a group.";
|
|
1172
|
+
readonly inputSchema: {
|
|
1173
|
+
readonly type: "object";
|
|
1174
|
+
readonly properties: {
|
|
1175
|
+
readonly contact_id: {
|
|
1176
|
+
readonly type: "string";
|
|
1177
|
+
};
|
|
1178
|
+
readonly group_id: {
|
|
1179
|
+
readonly type: "string";
|
|
1180
|
+
};
|
|
1181
|
+
};
|
|
1182
|
+
readonly required: readonly ["contact_id", "group_id"];
|
|
1183
|
+
};
|
|
1184
|
+
}, {
|
|
1185
|
+
readonly name: "list_contacts_in_group";
|
|
1186
|
+
readonly description: "List all contact IDs in a group.";
|
|
1187
|
+
readonly inputSchema: {
|
|
1188
|
+
readonly type: "object";
|
|
1189
|
+
readonly properties: {
|
|
1190
|
+
readonly group_id: {
|
|
1191
|
+
readonly type: "string";
|
|
1192
|
+
};
|
|
1193
|
+
};
|
|
1194
|
+
readonly required: readonly ["group_id"];
|
|
1195
|
+
};
|
|
1196
|
+
}, {
|
|
1197
|
+
readonly name: "list_groups_for_contact";
|
|
1198
|
+
readonly description: "List all groups that a contact belongs to.";
|
|
1199
|
+
readonly inputSchema: {
|
|
1200
|
+
readonly type: "object";
|
|
1201
|
+
readonly properties: {
|
|
1202
|
+
readonly contact_id: {
|
|
1203
|
+
readonly type: "string";
|
|
1204
|
+
};
|
|
1205
|
+
};
|
|
1206
|
+
readonly required: readonly ["contact_id"];
|
|
1207
|
+
};
|
|
1208
|
+
}, {
|
|
1209
|
+
readonly name: "get_contact_by_email";
|
|
1210
|
+
readonly description: "Fast lookup of a contact by exact email address. Returns null if not found. Unlike search_contacts, this is a precise read-only lookup with no side effects.";
|
|
1211
|
+
readonly inputSchema: {
|
|
1212
|
+
readonly type: "object";
|
|
1213
|
+
readonly properties: {
|
|
1214
|
+
readonly email: {
|
|
1215
|
+
readonly type: "string";
|
|
1216
|
+
readonly description: "Exact email address to look up";
|
|
1217
|
+
};
|
|
1218
|
+
};
|
|
1219
|
+
readonly required: readonly ["email"];
|
|
1220
|
+
};
|
|
1221
|
+
}, {
|
|
1222
|
+
readonly name: "add_email_to_contact";
|
|
1223
|
+
readonly description: "Append a new email address to a contact. Idempotent — silently skips if the email already exists on this contact.";
|
|
1224
|
+
readonly inputSchema: {
|
|
1225
|
+
readonly type: "object";
|
|
1226
|
+
readonly properties: {
|
|
1227
|
+
readonly contact_id: {
|
|
1228
|
+
readonly type: "string";
|
|
1229
|
+
};
|
|
1230
|
+
readonly address: {
|
|
1231
|
+
readonly type: "string";
|
|
1232
|
+
};
|
|
1233
|
+
readonly type: {
|
|
1234
|
+
readonly type: "string";
|
|
1235
|
+
readonly enum: readonly ["work", "personal", "other"];
|
|
1236
|
+
};
|
|
1237
|
+
readonly is_primary: {
|
|
1238
|
+
readonly type: "boolean";
|
|
1239
|
+
};
|
|
1240
|
+
};
|
|
1241
|
+
readonly required: readonly ["contact_id", "address"];
|
|
1242
|
+
};
|
|
1243
|
+
}, {
|
|
1244
|
+
readonly name: "add_phone_to_contact";
|
|
1245
|
+
readonly description: "Append a new phone number to a contact. Idempotent — silently skips if the number already exists on this contact.";
|
|
1246
|
+
readonly inputSchema: {
|
|
1247
|
+
readonly type: "object";
|
|
1248
|
+
readonly properties: {
|
|
1249
|
+
readonly contact_id: {
|
|
1250
|
+
readonly type: "string";
|
|
1251
|
+
};
|
|
1252
|
+
readonly number: {
|
|
1253
|
+
readonly type: "string";
|
|
1254
|
+
};
|
|
1255
|
+
readonly type: {
|
|
1256
|
+
readonly type: "string";
|
|
1257
|
+
readonly enum: readonly ["mobile", "work", "home", "fax", "whatsapp", "other"];
|
|
1258
|
+
};
|
|
1259
|
+
readonly country_code: {
|
|
1260
|
+
readonly type: "string";
|
|
1261
|
+
};
|
|
1262
|
+
readonly is_primary: {
|
|
1263
|
+
readonly type: "boolean";
|
|
1264
|
+
};
|
|
1265
|
+
};
|
|
1266
|
+
readonly required: readonly ["contact_id", "number"];
|
|
1267
|
+
};
|
|
1268
|
+
}, {
|
|
1269
|
+
readonly name: "archive_contact";
|
|
1270
|
+
readonly description: "Soft-delete a contact by setting archived=true. Archived contacts are excluded from list_contacts and search_contacts by default. Use unarchive_contact to restore.";
|
|
1271
|
+
readonly inputSchema: {
|
|
1272
|
+
readonly type: "object";
|
|
1273
|
+
readonly properties: {
|
|
1274
|
+
readonly id: {
|
|
1275
|
+
readonly type: "string";
|
|
1276
|
+
};
|
|
1277
|
+
};
|
|
1278
|
+
readonly required: readonly ["id"];
|
|
1279
|
+
};
|
|
1280
|
+
}, {
|
|
1281
|
+
readonly name: "unarchive_contact";
|
|
1282
|
+
readonly description: "Restore an archived contact. Sets archived=false so the contact reappears in lists and searches.";
|
|
1283
|
+
readonly inputSchema: {
|
|
1284
|
+
readonly type: "object";
|
|
1285
|
+
readonly properties: {
|
|
1286
|
+
readonly id: {
|
|
1287
|
+
readonly type: "string";
|
|
1288
|
+
};
|
|
1289
|
+
};
|
|
1290
|
+
readonly required: readonly ["id"];
|
|
1291
|
+
};
|
|
1292
|
+
}, {
|
|
1293
|
+
readonly name: "archive_company";
|
|
1294
|
+
readonly description: "Soft-delete a company by setting archived=true. Archived companies are excluded from list_companies by default.";
|
|
1295
|
+
readonly inputSchema: {
|
|
1296
|
+
readonly type: "object";
|
|
1297
|
+
readonly properties: {
|
|
1298
|
+
readonly id: {
|
|
1299
|
+
readonly type: "string";
|
|
1300
|
+
};
|
|
1301
|
+
};
|
|
1302
|
+
readonly required: readonly ["id"];
|
|
1303
|
+
};
|
|
1304
|
+
}, {
|
|
1305
|
+
readonly name: "unarchive_company";
|
|
1306
|
+
readonly description: "Restore an archived company. Sets archived=false.";
|
|
1307
|
+
readonly inputSchema: {
|
|
1308
|
+
readonly type: "object";
|
|
1309
|
+
readonly properties: {
|
|
1310
|
+
readonly id: {
|
|
1311
|
+
readonly type: "string";
|
|
1312
|
+
};
|
|
1313
|
+
};
|
|
1314
|
+
readonly required: readonly ["id"];
|
|
1315
|
+
};
|
|
1316
|
+
}, {
|
|
1317
|
+
readonly name: "find_duplicates";
|
|
1318
|
+
readonly description: "Scan contacts for potential duplicates — by shared email address (exact) or by similar display name (Levenshtein distance ≤ 2). Returns groups of contact IDs that may be the same person.";
|
|
1319
|
+
readonly inputSchema: {
|
|
1320
|
+
readonly type: "object";
|
|
1321
|
+
readonly properties: {};
|
|
1322
|
+
};
|
|
1323
|
+
}, {
|
|
1324
|
+
readonly name: "list_interactions";
|
|
1325
|
+
readonly description: "List activity log entries for a contact or company. Shows all logged interactions, creates, updates, and merges in reverse chronological order.";
|
|
1326
|
+
readonly inputSchema: {
|
|
1327
|
+
readonly type: "object";
|
|
1328
|
+
readonly properties: {
|
|
1329
|
+
readonly contact_id: {
|
|
1330
|
+
readonly type: "string";
|
|
1331
|
+
};
|
|
1332
|
+
readonly company_id: {
|
|
1333
|
+
readonly type: "string";
|
|
1334
|
+
};
|
|
1335
|
+
readonly limit: {
|
|
1336
|
+
readonly type: "number";
|
|
1337
|
+
readonly description: "Max results (default 50)";
|
|
1338
|
+
};
|
|
1339
|
+
readonly offset: {
|
|
1340
|
+
readonly type: "number";
|
|
1341
|
+
};
|
|
1342
|
+
};
|
|
1343
|
+
};
|
|
1344
|
+
}, {
|
|
1345
|
+
readonly name: "add_tag_to_company";
|
|
1346
|
+
readonly description: "Apply an existing tag to a company. Use list_tags to find tag IDs.";
|
|
1347
|
+
readonly inputSchema: {
|
|
1348
|
+
readonly type: "object";
|
|
1349
|
+
readonly properties: {
|
|
1350
|
+
readonly company_id: {
|
|
1351
|
+
readonly type: "string";
|
|
1352
|
+
};
|
|
1353
|
+
readonly tag_id: {
|
|
1354
|
+
readonly type: "string";
|
|
1355
|
+
};
|
|
1356
|
+
};
|
|
1357
|
+
readonly required: readonly ["company_id", "tag_id"];
|
|
1358
|
+
};
|
|
1359
|
+
}, {
|
|
1360
|
+
readonly name: "remove_tag_from_company";
|
|
1361
|
+
readonly description: "Remove a tag from a company. The tag itself is not deleted.";
|
|
1362
|
+
readonly inputSchema: {
|
|
1363
|
+
readonly type: "object";
|
|
1364
|
+
readonly properties: {
|
|
1365
|
+
readonly company_id: {
|
|
1366
|
+
readonly type: "string";
|
|
1367
|
+
};
|
|
1368
|
+
readonly tag_id: {
|
|
1369
|
+
readonly type: "string";
|
|
1370
|
+
};
|
|
1371
|
+
};
|
|
1372
|
+
readonly required: readonly ["company_id", "tag_id"];
|
|
1373
|
+
};
|
|
1374
|
+
}, {
|
|
1375
|
+
readonly name: "add_company_to_group";
|
|
1376
|
+
readonly description: "Add a company to a group. Returns { added, already_member } — idempotent.";
|
|
1377
|
+
readonly inputSchema: {
|
|
1378
|
+
readonly type: "object";
|
|
1379
|
+
readonly properties: {
|
|
1380
|
+
readonly company_id: {
|
|
1381
|
+
readonly type: "string";
|
|
1382
|
+
};
|
|
1383
|
+
readonly group_id: {
|
|
1384
|
+
readonly type: "string";
|
|
1385
|
+
};
|
|
1386
|
+
};
|
|
1387
|
+
readonly required: readonly ["company_id", "group_id"];
|
|
1388
|
+
};
|
|
1389
|
+
}, {
|
|
1390
|
+
readonly name: "remove_company_from_group";
|
|
1391
|
+
readonly description: "Remove a company from a group.";
|
|
1392
|
+
readonly inputSchema: {
|
|
1393
|
+
readonly type: "object";
|
|
1394
|
+
readonly properties: {
|
|
1395
|
+
readonly company_id: {
|
|
1396
|
+
readonly type: "string";
|
|
1397
|
+
};
|
|
1398
|
+
readonly group_id: {
|
|
1399
|
+
readonly type: "string";
|
|
1400
|
+
};
|
|
1401
|
+
};
|
|
1402
|
+
readonly required: readonly ["company_id", "group_id"];
|
|
1403
|
+
};
|
|
1404
|
+
}, {
|
|
1405
|
+
readonly name: "list_companies_in_group";
|
|
1406
|
+
readonly description: "List all company IDs in a group.";
|
|
1407
|
+
readonly inputSchema: {
|
|
1408
|
+
readonly type: "object";
|
|
1409
|
+
readonly properties: {
|
|
1410
|
+
readonly group_id: {
|
|
1411
|
+
readonly type: "string";
|
|
1412
|
+
};
|
|
1413
|
+
};
|
|
1414
|
+
readonly required: readonly ["group_id"];
|
|
1415
|
+
};
|
|
1416
|
+
}, {
|
|
1417
|
+
readonly name: "list_groups_for_company";
|
|
1418
|
+
readonly description: "List all groups that a company belongs to.";
|
|
1419
|
+
readonly inputSchema: {
|
|
1420
|
+
readonly type: "object";
|
|
1421
|
+
readonly properties: {
|
|
1422
|
+
readonly company_id: {
|
|
1423
|
+
readonly type: "string";
|
|
1424
|
+
};
|
|
1425
|
+
};
|
|
1426
|
+
readonly required: readonly ["company_id"];
|
|
1427
|
+
};
|
|
1428
|
+
}, {
|
|
1429
|
+
readonly name: "bulk_create_contacts";
|
|
1430
|
+
readonly description: "Create multiple contacts in one call. Each item in the contacts array follows the same schema as create_contact. Returns { created, errors }.";
|
|
1431
|
+
readonly inputSchema: {
|
|
1432
|
+
readonly type: "object";
|
|
1433
|
+
readonly properties: {
|
|
1434
|
+
readonly contacts: {
|
|
1435
|
+
readonly type: "array";
|
|
1436
|
+
readonly items: {
|
|
1437
|
+
readonly type: "object";
|
|
1438
|
+
};
|
|
1439
|
+
readonly description: "Array of contact input objects (same schema as create_contact)";
|
|
1440
|
+
};
|
|
1441
|
+
};
|
|
1442
|
+
readonly required: readonly ["contacts"];
|
|
1443
|
+
};
|
|
1444
|
+
}, {
|
|
1445
|
+
readonly name: "auto_link_to_company";
|
|
1446
|
+
readonly description: "Auto-link a contact to a company by matching the contact's email domain against known company domains. Only sets company_id if the contact has no company yet and a matching company exists. Returns the updated contact, or null if no match.";
|
|
1447
|
+
readonly inputSchema: {
|
|
1448
|
+
readonly type: "object";
|
|
1449
|
+
readonly properties: {
|
|
1450
|
+
readonly contact_id: {
|
|
1451
|
+
readonly type: "string";
|
|
1452
|
+
};
|
|
1453
|
+
};
|
|
1454
|
+
readonly required: readonly ["contact_id"];
|
|
1455
|
+
};
|
|
1456
|
+
}, {
|
|
1457
|
+
readonly name: "add_company_relationship";
|
|
1458
|
+
readonly description: "Declare a typed relationship between a contact and a company. relationship_type: client|vendor|partner|employee|contractor|investor|advisor|tax_preparer|bank_manager|attorney|registered_agent|accountant|payroll_specialist|insurance_broker|other. Supports optional start_date, end_date, is_primary, and status fields.";
|
|
1459
|
+
readonly inputSchema: {
|
|
1460
|
+
readonly type: "object";
|
|
1461
|
+
readonly properties: {
|
|
1462
|
+
readonly contact_id: {
|
|
1463
|
+
readonly type: "string";
|
|
1464
|
+
};
|
|
1465
|
+
readonly company_id: {
|
|
1466
|
+
readonly type: "string";
|
|
1467
|
+
};
|
|
1468
|
+
readonly relationship_type: {
|
|
1469
|
+
readonly type: "string";
|
|
1470
|
+
readonly enum: readonly ["client", "vendor", "partner", "employee", "contractor", "investor", "advisor", "tax_preparer", "bank_manager", "attorney", "registered_agent", "accountant", "payroll_specialist", "insurance_broker", "other"];
|
|
1471
|
+
};
|
|
1472
|
+
readonly notes: {
|
|
1473
|
+
readonly type: "string";
|
|
1474
|
+
};
|
|
1475
|
+
readonly start_date: {
|
|
1476
|
+
readonly type: "string";
|
|
1477
|
+
readonly description: "ISO date when the relationship began (YYYY-MM-DD)";
|
|
1478
|
+
};
|
|
1479
|
+
readonly end_date: {
|
|
1480
|
+
readonly type: "string";
|
|
1481
|
+
readonly description: "ISO date when the relationship ended (YYYY-MM-DD)";
|
|
1482
|
+
};
|
|
1483
|
+
readonly is_primary: {
|
|
1484
|
+
readonly type: "boolean";
|
|
1485
|
+
readonly description: "Whether this is the primary contact for this relationship type at this company";
|
|
1486
|
+
};
|
|
1487
|
+
readonly status: {
|
|
1488
|
+
readonly type: "string";
|
|
1489
|
+
readonly enum: readonly ["active", "inactive", "ended"];
|
|
1490
|
+
readonly description: "Relationship status (default: active)";
|
|
1491
|
+
};
|
|
1492
|
+
};
|
|
1493
|
+
readonly required: readonly ["contact_id", "company_id", "relationship_type"];
|
|
1494
|
+
};
|
|
1495
|
+
}, {
|
|
1496
|
+
readonly name: "list_company_relationships";
|
|
1497
|
+
readonly description: "List typed contact↔company relationships, optionally filtered by contact, company, or type.";
|
|
1498
|
+
readonly inputSchema: {
|
|
1499
|
+
readonly type: "object";
|
|
1500
|
+
readonly properties: {
|
|
1501
|
+
readonly contact_id: {
|
|
1502
|
+
readonly type: "string";
|
|
1503
|
+
};
|
|
1504
|
+
readonly company_id: {
|
|
1505
|
+
readonly type: "string";
|
|
1506
|
+
};
|
|
1507
|
+
readonly relationship_type: {
|
|
1508
|
+
readonly type: "string";
|
|
1509
|
+
};
|
|
1510
|
+
};
|
|
1511
|
+
};
|
|
1512
|
+
}, {
|
|
1513
|
+
readonly name: "delete_company_relationship";
|
|
1514
|
+
readonly description: "Delete a contact↔company relationship by ID.";
|
|
1515
|
+
readonly inputSchema: {
|
|
1516
|
+
readonly type: "object";
|
|
1517
|
+
readonly properties: {
|
|
1518
|
+
readonly id: {
|
|
1519
|
+
readonly type: "string";
|
|
1520
|
+
};
|
|
1521
|
+
};
|
|
1522
|
+
readonly required: readonly ["id"];
|
|
1523
|
+
};
|
|
1524
|
+
}, {
|
|
1525
|
+
readonly name: "import_contacts_from_gmail";
|
|
1526
|
+
readonly description: "Extract unique contacts from Gmail messages matching a search query and batch-upsert them. Requires connect-gmail auth login first. Returns { imported, skipped, errors }.";
|
|
1527
|
+
readonly inputSchema: {
|
|
1528
|
+
readonly type: "object";
|
|
1529
|
+
readonly properties: {
|
|
1530
|
+
readonly query: {
|
|
1531
|
+
readonly type: "string";
|
|
1532
|
+
readonly description: "Gmail search query, e.g. 'from:(company.com) newer_than:30d'";
|
|
1533
|
+
};
|
|
1534
|
+
readonly max_messages: {
|
|
1535
|
+
readonly type: "number";
|
|
1536
|
+
readonly description: "Max messages to scan (default 200, max 500)";
|
|
1537
|
+
};
|
|
1538
|
+
readonly gmail_profile: {
|
|
1539
|
+
readonly type: "string";
|
|
1540
|
+
readonly description: "connect-gmail profile to use (default: 'default')";
|
|
1541
|
+
};
|
|
1542
|
+
readonly tag_ids: {
|
|
1543
|
+
readonly type: "array";
|
|
1544
|
+
readonly items: {
|
|
1545
|
+
readonly type: "string";
|
|
1546
|
+
};
|
|
1547
|
+
readonly description: "Tag IDs to apply to all imported contacts";
|
|
1548
|
+
};
|
|
1549
|
+
readonly group_id: {
|
|
1550
|
+
readonly type: "string";
|
|
1551
|
+
readonly description: "Group ID to add all imported contacts to";
|
|
1552
|
+
};
|
|
1553
|
+
readonly dry_run: {
|
|
1554
|
+
readonly type: "boolean";
|
|
1555
|
+
readonly description: "If true, extract contacts but do not save to database";
|
|
1556
|
+
};
|
|
1557
|
+
};
|
|
1558
|
+
readonly required: readonly ["query"];
|
|
1559
|
+
};
|
|
1560
|
+
}, {
|
|
1561
|
+
readonly name: "sync_from_google_contacts";
|
|
1562
|
+
readonly description: "Pull contacts from Google Contacts (People API) and upsert them into the local database. Skips contacts that already exist by email. Requires connect-googlecontacts auth login. Returns { imported, skipped, errors }.";
|
|
1563
|
+
readonly inputSchema: {
|
|
1564
|
+
readonly type: "object";
|
|
1565
|
+
readonly properties: {
|
|
1566
|
+
readonly query: {
|
|
1567
|
+
readonly type: "string";
|
|
1568
|
+
readonly description: "Optional search query to filter which Google Contacts to import";
|
|
1569
|
+
};
|
|
1570
|
+
readonly page_size: {
|
|
1571
|
+
readonly type: "number";
|
|
1572
|
+
readonly description: "Contacts per page (default: connector default)";
|
|
1573
|
+
};
|
|
1574
|
+
readonly google_profile: {
|
|
1575
|
+
readonly type: "string";
|
|
1576
|
+
readonly description: "connect-googlecontacts profile (default: 'default')";
|
|
1577
|
+
};
|
|
1578
|
+
readonly tag_ids: {
|
|
1579
|
+
readonly type: "array";
|
|
1580
|
+
readonly items: {
|
|
1581
|
+
readonly type: "string";
|
|
1582
|
+
};
|
|
1583
|
+
readonly description: "Tag IDs to apply to all imported contacts";
|
|
1584
|
+
};
|
|
1585
|
+
readonly project_id: {
|
|
1586
|
+
readonly type: "string";
|
|
1587
|
+
readonly description: "Project ID to assign to all imported contacts";
|
|
1588
|
+
};
|
|
1589
|
+
readonly dry_run: {
|
|
1590
|
+
readonly type: "boolean";
|
|
1591
|
+
readonly description: "Preview what would be imported without saving";
|
|
1592
|
+
};
|
|
1593
|
+
};
|
|
1594
|
+
};
|
|
1595
|
+
}, {
|
|
1596
|
+
readonly name: "push_contact_to_google";
|
|
1597
|
+
readonly description: "Push a local contact to Google Contacts — creates a new Google contact (or updates if google_resource_name is stored in custom_fields). Requires connect-googlecontacts auth login.";
|
|
1598
|
+
readonly inputSchema: {
|
|
1599
|
+
readonly type: "object";
|
|
1600
|
+
readonly properties: {
|
|
1601
|
+
readonly contact_id: {
|
|
1602
|
+
readonly type: "string";
|
|
1603
|
+
readonly description: "Local contact ID to push";
|
|
1604
|
+
};
|
|
1605
|
+
readonly google_profile: {
|
|
1606
|
+
readonly type: "string";
|
|
1607
|
+
readonly description: "connect-googlecontacts profile (default: 'default')";
|
|
1608
|
+
};
|
|
1609
|
+
readonly update_existing: {
|
|
1610
|
+
readonly type: "boolean";
|
|
1611
|
+
readonly description: "If true, update existing Google contact when google_resource_name is present in custom_fields";
|
|
1612
|
+
};
|
|
1613
|
+
};
|
|
1614
|
+
readonly required: readonly ["contact_id"];
|
|
1615
|
+
};
|
|
1616
|
+
}, {
|
|
1617
|
+
readonly name: "search_google_contacts";
|
|
1618
|
+
readonly description: "Search Google Contacts by name or email (read-only, does not import). Returns raw Google People API objects. Useful for lookup or preview before a push/sync.";
|
|
1619
|
+
readonly inputSchema: {
|
|
1620
|
+
readonly type: "object";
|
|
1621
|
+
readonly properties: {
|
|
1622
|
+
readonly query: {
|
|
1623
|
+
readonly type: "string";
|
|
1624
|
+
};
|
|
1625
|
+
readonly google_profile: {
|
|
1626
|
+
readonly type: "string";
|
|
1627
|
+
readonly description: "connect-googlecontacts profile (default: 'default')";
|
|
1628
|
+
};
|
|
1629
|
+
};
|
|
1630
|
+
readonly required: readonly ["query"];
|
|
1631
|
+
};
|
|
1632
|
+
}, {
|
|
1633
|
+
readonly name: "get_contact_workload";
|
|
1634
|
+
readonly description: "Get a comprehensive workload summary for a contact: entities/companies they manage, active tasks assigned to them, overdue tasks, pending applications they're linked to, days since last contact, org memberships with specializations. Essential for checking if a key contact is overloaded or responsive.";
|
|
1635
|
+
readonly inputSchema: {
|
|
1636
|
+
readonly type: "object";
|
|
1637
|
+
readonly properties: {
|
|
1638
|
+
readonly contact_id: {
|
|
1639
|
+
readonly type: "string";
|
|
1640
|
+
};
|
|
1641
|
+
};
|
|
1642
|
+
readonly required: readonly ["contact_id"];
|
|
1643
|
+
};
|
|
1644
|
+
}, {
|
|
1645
|
+
readonly name: "list_overdue_contact_tasks";
|
|
1646
|
+
readonly description: "List all contact tasks that are past their deadline and not yet completed/cancelled. Includes escalation rules so agents know who to escalate to.";
|
|
1647
|
+
readonly inputSchema: {
|
|
1648
|
+
readonly type: "object";
|
|
1649
|
+
readonly properties: {};
|
|
1650
|
+
};
|
|
1651
|
+
}, {
|
|
1652
|
+
readonly name: "check_escalations";
|
|
1653
|
+
readonly description: "Check all contact tasks with escalation rules to see which ones should be escalated now based on days overdue vs escalation thresholds. Returns tasks with the contact to escalate to.";
|
|
1654
|
+
readonly inputSchema: {
|
|
1655
|
+
readonly type: "object";
|
|
1656
|
+
readonly properties: {};
|
|
1657
|
+
};
|
|
1658
|
+
}, {
|
|
1659
|
+
readonly name: "add_org_member";
|
|
1660
|
+
readonly description: "Add a contact as an org member of a company (employee, team member) with optional title, specialization, office phone, SLA hours, and notes.";
|
|
1661
|
+
readonly inputSchema: {
|
|
1662
|
+
readonly type: "object";
|
|
1663
|
+
readonly properties: {
|
|
1664
|
+
readonly company_id: {
|
|
1665
|
+
readonly type: "string";
|
|
1666
|
+
};
|
|
1667
|
+
readonly contact_id: {
|
|
1668
|
+
readonly type: "string";
|
|
1669
|
+
};
|
|
1670
|
+
readonly title: {
|
|
1671
|
+
readonly type: "string";
|
|
1672
|
+
};
|
|
1673
|
+
readonly specialization: {
|
|
1674
|
+
readonly type: "string";
|
|
1675
|
+
};
|
|
1676
|
+
readonly office_phone: {
|
|
1677
|
+
readonly type: "string";
|
|
1678
|
+
};
|
|
1679
|
+
readonly response_sla_hours: {
|
|
1680
|
+
readonly type: "number";
|
|
1681
|
+
};
|
|
1682
|
+
readonly notes: {
|
|
1683
|
+
readonly type: "string";
|
|
1684
|
+
};
|
|
1685
|
+
};
|
|
1686
|
+
readonly required: readonly ["company_id", "contact_id"];
|
|
1687
|
+
};
|
|
1688
|
+
}, {
|
|
1689
|
+
readonly name: "list_org_members";
|
|
1690
|
+
readonly description: "List all org members (contacts) of a company.";
|
|
1691
|
+
readonly inputSchema: {
|
|
1692
|
+
readonly type: "object";
|
|
1693
|
+
readonly properties: {
|
|
1694
|
+
readonly company_id: {
|
|
1695
|
+
readonly type: "string";
|
|
1696
|
+
};
|
|
1697
|
+
};
|
|
1698
|
+
readonly required: readonly ["company_id"];
|
|
1699
|
+
};
|
|
1700
|
+
}, {
|
|
1701
|
+
readonly name: "update_org_member";
|
|
1702
|
+
readonly description: "Update an org member's title, specialization, office phone, SLA hours, or notes.";
|
|
1703
|
+
readonly inputSchema: {
|
|
1704
|
+
readonly type: "object";
|
|
1705
|
+
readonly properties: {
|
|
1706
|
+
readonly id: {
|
|
1707
|
+
readonly type: "string";
|
|
1708
|
+
};
|
|
1709
|
+
readonly title: {
|
|
1710
|
+
readonly type: "string";
|
|
1711
|
+
};
|
|
1712
|
+
readonly specialization: {
|
|
1713
|
+
readonly type: "string";
|
|
1714
|
+
};
|
|
1715
|
+
readonly office_phone: {
|
|
1716
|
+
readonly type: "string";
|
|
1717
|
+
};
|
|
1718
|
+
readonly response_sla_hours: {
|
|
1719
|
+
readonly type: "number";
|
|
1720
|
+
};
|
|
1721
|
+
readonly notes: {
|
|
1722
|
+
readonly type: "string";
|
|
1723
|
+
};
|
|
1724
|
+
};
|
|
1725
|
+
readonly required: readonly ["id"];
|
|
1726
|
+
};
|
|
1727
|
+
}, {
|
|
1728
|
+
readonly name: "remove_org_member";
|
|
1729
|
+
readonly description: "Remove a contact from a company's org members by org member record ID.";
|
|
1730
|
+
readonly inputSchema: {
|
|
1731
|
+
readonly type: "object";
|
|
1732
|
+
readonly properties: {
|
|
1733
|
+
readonly id: {
|
|
1734
|
+
readonly type: "string";
|
|
1735
|
+
};
|
|
1736
|
+
};
|
|
1737
|
+
readonly required: readonly ["id"];
|
|
1738
|
+
};
|
|
1739
|
+
}, {
|
|
1740
|
+
readonly name: "log_vendor_communication";
|
|
1741
|
+
readonly description: "Log a vendor communication (email, invoice request, call, payment, etc.) for a company. Track invoice amounts, references, follow-up dates, and status.";
|
|
1742
|
+
readonly inputSchema: {
|
|
1743
|
+
readonly type: "object";
|
|
1744
|
+
readonly properties: {
|
|
1745
|
+
readonly company_id: {
|
|
1746
|
+
readonly type: "string";
|
|
1747
|
+
};
|
|
1748
|
+
readonly contact_id: {
|
|
1749
|
+
readonly type: "string";
|
|
1750
|
+
};
|
|
1751
|
+
readonly comm_date: {
|
|
1752
|
+
readonly type: "string";
|
|
1753
|
+
readonly description: "ISO date (defaults to today)";
|
|
1754
|
+
};
|
|
1755
|
+
readonly type: {
|
|
1756
|
+
readonly type: "string";
|
|
1757
|
+
readonly enum: readonly ["email", "call", "meeting", "invoice_request", "invoice_received", "payment", "dispute", "other"];
|
|
1758
|
+
};
|
|
1759
|
+
readonly direction: {
|
|
1760
|
+
readonly type: "string";
|
|
1761
|
+
readonly enum: readonly ["inbound", "outbound"];
|
|
1762
|
+
};
|
|
1763
|
+
readonly subject: {
|
|
1764
|
+
readonly type: "string";
|
|
1765
|
+
};
|
|
1766
|
+
readonly body: {
|
|
1767
|
+
readonly type: "string";
|
|
1768
|
+
};
|
|
1769
|
+
readonly status: {
|
|
1770
|
+
readonly type: "string";
|
|
1771
|
+
readonly enum: readonly ["sent", "awaiting_response", "responded", "no_response", "resolved"];
|
|
1772
|
+
};
|
|
1773
|
+
readonly invoice_amount: {
|
|
1774
|
+
readonly type: "number";
|
|
1775
|
+
};
|
|
1776
|
+
readonly invoice_currency: {
|
|
1777
|
+
readonly type: "string";
|
|
1778
|
+
};
|
|
1779
|
+
readonly invoice_ref: {
|
|
1780
|
+
readonly type: "string";
|
|
1781
|
+
};
|
|
1782
|
+
readonly follow_up_date: {
|
|
1783
|
+
readonly type: "string";
|
|
1784
|
+
readonly description: "ISO date for follow-up (YYYY-MM-DD)";
|
|
1785
|
+
};
|
|
1786
|
+
};
|
|
1787
|
+
readonly required: readonly ["company_id", "type"];
|
|
1788
|
+
};
|
|
1789
|
+
}, {
|
|
1790
|
+
readonly name: "list_vendor_communications";
|
|
1791
|
+
readonly description: "List vendor communications for a company, optionally filtered by type or status.";
|
|
1792
|
+
readonly inputSchema: {
|
|
1793
|
+
readonly type: "object";
|
|
1794
|
+
readonly properties: {
|
|
1795
|
+
readonly company_id: {
|
|
1796
|
+
readonly type: "string";
|
|
1797
|
+
};
|
|
1798
|
+
readonly type: {
|
|
1799
|
+
readonly type: "string";
|
|
1800
|
+
readonly enum: readonly ["email", "call", "meeting", "invoice_request", "invoice_received", "payment", "dispute", "other"];
|
|
1801
|
+
};
|
|
1802
|
+
readonly status: {
|
|
1803
|
+
readonly type: "string";
|
|
1804
|
+
readonly enum: readonly ["sent", "awaiting_response", "responded", "no_response", "resolved"];
|
|
1805
|
+
};
|
|
1806
|
+
};
|
|
1807
|
+
readonly required: readonly ["company_id"];
|
|
1808
|
+
};
|
|
1809
|
+
}, {
|
|
1810
|
+
readonly name: "list_missing_invoices";
|
|
1811
|
+
readonly description: "List all invoice_request communications with no_response or awaiting_response status — vendors who haven't sent invoices yet.";
|
|
1812
|
+
readonly inputSchema: {
|
|
1813
|
+
readonly type: "object";
|
|
1814
|
+
readonly properties: {};
|
|
1815
|
+
};
|
|
1816
|
+
}, {
|
|
1817
|
+
readonly name: "list_pending_followups";
|
|
1818
|
+
readonly description: "List all vendor communications with follow_up_date on or before today that haven't been marked done.";
|
|
1819
|
+
readonly inputSchema: {
|
|
1820
|
+
readonly type: "object";
|
|
1821
|
+
readonly properties: {};
|
|
1822
|
+
};
|
|
1823
|
+
}, {
|
|
1824
|
+
readonly name: "mark_followup_done";
|
|
1825
|
+
readonly description: "Mark a vendor communication follow-up as done.";
|
|
1826
|
+
readonly inputSchema: {
|
|
1827
|
+
readonly type: "object";
|
|
1828
|
+
readonly properties: {
|
|
1829
|
+
readonly id: {
|
|
1830
|
+
readonly type: "string";
|
|
1831
|
+
};
|
|
1832
|
+
};
|
|
1833
|
+
readonly required: readonly ["id"];
|
|
1834
|
+
};
|
|
1835
|
+
}, {
|
|
1836
|
+
readonly name: "create_contact_task";
|
|
1837
|
+
readonly description: "Create a task assigned to a contact, with optional deadline, priority, entity link, escalation rules, and todos task link.";
|
|
1838
|
+
readonly inputSchema: {
|
|
1839
|
+
readonly type: "object";
|
|
1840
|
+
readonly properties: {
|
|
1841
|
+
readonly title: {
|
|
1842
|
+
readonly type: "string";
|
|
1843
|
+
};
|
|
1844
|
+
readonly contact_id: {
|
|
1845
|
+
readonly type: "string";
|
|
1846
|
+
};
|
|
1847
|
+
readonly description: {
|
|
1848
|
+
readonly type: "string";
|
|
1849
|
+
};
|
|
1850
|
+
readonly assigned_by: {
|
|
1851
|
+
readonly type: "string";
|
|
1852
|
+
};
|
|
1853
|
+
readonly deadline: {
|
|
1854
|
+
readonly type: "string";
|
|
1855
|
+
readonly description: "ISO date (YYYY-MM-DD)";
|
|
1856
|
+
};
|
|
1857
|
+
readonly priority: {
|
|
1858
|
+
readonly type: "string";
|
|
1859
|
+
readonly enum: readonly ["low", "medium", "high", "critical"];
|
|
1860
|
+
};
|
|
1861
|
+
readonly entity_id: {
|
|
1862
|
+
readonly type: "string";
|
|
1863
|
+
readonly description: "Company/entity ID this task is for";
|
|
1864
|
+
};
|
|
1865
|
+
readonly escalation_rules: {
|
|
1866
|
+
readonly type: "array";
|
|
1867
|
+
readonly items: {
|
|
1868
|
+
readonly type: "object";
|
|
1869
|
+
readonly properties: {
|
|
1870
|
+
readonly after_days: {
|
|
1871
|
+
readonly type: "number";
|
|
1872
|
+
};
|
|
1873
|
+
readonly escalate_to_contact_id: {
|
|
1874
|
+
readonly type: "string";
|
|
1875
|
+
};
|
|
1876
|
+
readonly method: {
|
|
1877
|
+
readonly type: "string";
|
|
1878
|
+
readonly enum: readonly ["email", "note", "both"];
|
|
1879
|
+
};
|
|
1880
|
+
};
|
|
1881
|
+
readonly required: readonly ["after_days", "escalate_to_contact_id", "method"];
|
|
1882
|
+
};
|
|
1883
|
+
};
|
|
1884
|
+
readonly linked_todos_task_id: {
|
|
1885
|
+
readonly type: "string";
|
|
1886
|
+
};
|
|
1887
|
+
};
|
|
1888
|
+
readonly required: readonly ["title", "contact_id"];
|
|
1889
|
+
};
|
|
1890
|
+
}, {
|
|
1891
|
+
readonly name: "list_contact_tasks";
|
|
1892
|
+
readonly description: "List contact tasks, optionally filtered by contact, entity, status, or priority.";
|
|
1893
|
+
readonly inputSchema: {
|
|
1894
|
+
readonly type: "object";
|
|
1895
|
+
readonly properties: {
|
|
1896
|
+
readonly contact_id: {
|
|
1897
|
+
readonly type: "string";
|
|
1898
|
+
};
|
|
1899
|
+
readonly entity_id: {
|
|
1900
|
+
readonly type: "string";
|
|
1901
|
+
};
|
|
1902
|
+
readonly status: {
|
|
1903
|
+
readonly type: "string";
|
|
1904
|
+
readonly enum: readonly ["pending", "awaiting_response", "in_progress", "completed", "cancelled", "escalated"];
|
|
1905
|
+
};
|
|
1906
|
+
readonly priority: {
|
|
1907
|
+
readonly type: "string";
|
|
1908
|
+
readonly enum: readonly ["low", "medium", "high", "critical"];
|
|
1909
|
+
};
|
|
1910
|
+
};
|
|
1911
|
+
};
|
|
1912
|
+
}, {
|
|
1913
|
+
readonly name: "update_contact_task";
|
|
1914
|
+
readonly description: "Update a contact task's title, status, deadline, priority, description, or escalation rules.";
|
|
1915
|
+
readonly inputSchema: {
|
|
1916
|
+
readonly type: "object";
|
|
1917
|
+
readonly properties: {
|
|
1918
|
+
readonly id: {
|
|
1919
|
+
readonly type: "string";
|
|
1920
|
+
};
|
|
1921
|
+
readonly title: {
|
|
1922
|
+
readonly type: "string";
|
|
1923
|
+
};
|
|
1924
|
+
readonly status: {
|
|
1925
|
+
readonly type: "string";
|
|
1926
|
+
readonly enum: readonly ["pending", "awaiting_response", "in_progress", "completed", "cancelled", "escalated"];
|
|
1927
|
+
};
|
|
1928
|
+
readonly deadline: {
|
|
1929
|
+
readonly type: "string";
|
|
1930
|
+
};
|
|
1931
|
+
readonly priority: {
|
|
1932
|
+
readonly type: "string";
|
|
1933
|
+
readonly enum: readonly ["low", "medium", "high", "critical"];
|
|
1934
|
+
};
|
|
1935
|
+
readonly description: {
|
|
1936
|
+
readonly type: "string";
|
|
1937
|
+
};
|
|
1938
|
+
readonly escalation_rules: {
|
|
1939
|
+
readonly type: "array";
|
|
1940
|
+
readonly items: {
|
|
1941
|
+
readonly type: "object";
|
|
1942
|
+
};
|
|
1943
|
+
};
|
|
1944
|
+
};
|
|
1945
|
+
readonly required: readonly ["id"];
|
|
1946
|
+
};
|
|
1947
|
+
}, {
|
|
1948
|
+
readonly name: "delete_contact_task";
|
|
1949
|
+
readonly description: "Delete a contact task by ID.";
|
|
1950
|
+
readonly inputSchema: {
|
|
1951
|
+
readonly type: "object";
|
|
1952
|
+
readonly properties: {
|
|
1953
|
+
readonly id: {
|
|
1954
|
+
readonly type: "string";
|
|
1955
|
+
};
|
|
1956
|
+
};
|
|
1957
|
+
readonly required: readonly ["id"];
|
|
1958
|
+
};
|
|
1959
|
+
}, {
|
|
1960
|
+
readonly name: "create_application";
|
|
1961
|
+
readonly description: "Create an application record (grant, AI credits, startup program, visa, trademark, tax filing, etc.).";
|
|
1962
|
+
readonly inputSchema: {
|
|
1963
|
+
readonly type: "object";
|
|
1964
|
+
readonly properties: {
|
|
1965
|
+
readonly program_name: {
|
|
1966
|
+
readonly type: "string";
|
|
1967
|
+
};
|
|
1968
|
+
readonly type: {
|
|
1969
|
+
readonly type: "string";
|
|
1970
|
+
readonly enum: readonly ["ai_credits", "grant", "startup_program", "visa", "trademark", "tax_filing", "loan", "other"];
|
|
1971
|
+
};
|
|
1972
|
+
readonly value_usd: {
|
|
1973
|
+
readonly type: "number";
|
|
1974
|
+
};
|
|
1975
|
+
readonly provider_company_id: {
|
|
1976
|
+
readonly type: "string";
|
|
1977
|
+
};
|
|
1978
|
+
readonly primary_contact_id: {
|
|
1979
|
+
readonly type: "string";
|
|
1980
|
+
};
|
|
1981
|
+
readonly status: {
|
|
1982
|
+
readonly type: "string";
|
|
1983
|
+
readonly enum: readonly ["draft", "submitted", "pending", "approved", "rejected", "follow_up_needed", "expired", "cancelled"];
|
|
1984
|
+
};
|
|
1985
|
+
readonly submitted_date: {
|
|
1986
|
+
readonly type: "string";
|
|
1987
|
+
};
|
|
1988
|
+
readonly follow_up_date: {
|
|
1989
|
+
readonly type: "string";
|
|
1990
|
+
};
|
|
1991
|
+
readonly notes: {
|
|
1992
|
+
readonly type: "string";
|
|
1993
|
+
};
|
|
1994
|
+
readonly method: {
|
|
1995
|
+
readonly type: "string";
|
|
1996
|
+
readonly enum: readonly ["email", "form", "typeform", "hubspot", "manual", "browser", "feathery", "other"];
|
|
1997
|
+
};
|
|
1998
|
+
readonly form_url: {
|
|
1999
|
+
readonly type: "string";
|
|
2000
|
+
};
|
|
2001
|
+
};
|
|
2002
|
+
readonly required: readonly ["program_name"];
|
|
2003
|
+
};
|
|
2004
|
+
}, {
|
|
2005
|
+
readonly name: "list_applications";
|
|
2006
|
+
readonly description: "List applications, optionally filtered by type, status, or provider company.";
|
|
2007
|
+
readonly inputSchema: {
|
|
2008
|
+
readonly type: "object";
|
|
2009
|
+
readonly properties: {
|
|
2010
|
+
readonly type: {
|
|
2011
|
+
readonly type: "string";
|
|
2012
|
+
readonly enum: readonly ["ai_credits", "grant", "startup_program", "visa", "trademark", "tax_filing", "loan", "other"];
|
|
2013
|
+
};
|
|
2014
|
+
readonly status: {
|
|
2015
|
+
readonly type: "string";
|
|
2016
|
+
readonly enum: readonly ["draft", "submitted", "pending", "approved", "rejected", "follow_up_needed", "expired", "cancelled"];
|
|
2017
|
+
};
|
|
2018
|
+
readonly provider_company_id: {
|
|
2019
|
+
readonly type: "string";
|
|
2020
|
+
};
|
|
2021
|
+
};
|
|
2022
|
+
};
|
|
2023
|
+
}, {
|
|
2024
|
+
readonly name: "update_application";
|
|
2025
|
+
readonly description: "Update an application's program name, status, dates, value, notes, or other fields.";
|
|
2026
|
+
readonly inputSchema: {
|
|
2027
|
+
readonly type: "object";
|
|
2028
|
+
readonly properties: {
|
|
2029
|
+
readonly id: {
|
|
2030
|
+
readonly type: "string";
|
|
2031
|
+
};
|
|
2032
|
+
readonly program_name: {
|
|
2033
|
+
readonly type: "string";
|
|
2034
|
+
};
|
|
2035
|
+
readonly type: {
|
|
2036
|
+
readonly type: "string";
|
|
2037
|
+
readonly enum: readonly ["ai_credits", "grant", "startup_program", "visa", "trademark", "tax_filing", "loan", "other"];
|
|
2038
|
+
};
|
|
2039
|
+
readonly value_usd: {
|
|
2040
|
+
readonly type: "number";
|
|
2041
|
+
};
|
|
2042
|
+
readonly provider_company_id: {
|
|
2043
|
+
readonly type: "string";
|
|
2044
|
+
};
|
|
2045
|
+
readonly primary_contact_id: {
|
|
2046
|
+
readonly type: "string";
|
|
2047
|
+
};
|
|
2048
|
+
readonly status: {
|
|
2049
|
+
readonly type: "string";
|
|
2050
|
+
readonly enum: readonly ["draft", "submitted", "pending", "approved", "rejected", "follow_up_needed", "expired", "cancelled"];
|
|
2051
|
+
};
|
|
2052
|
+
readonly submitted_date: {
|
|
2053
|
+
readonly type: "string";
|
|
2054
|
+
};
|
|
2055
|
+
readonly decision_date: {
|
|
2056
|
+
readonly type: "string";
|
|
2057
|
+
};
|
|
2058
|
+
readonly follow_up_date: {
|
|
2059
|
+
readonly type: "string";
|
|
2060
|
+
};
|
|
2061
|
+
readonly notes: {
|
|
2062
|
+
readonly type: "string";
|
|
2063
|
+
};
|
|
2064
|
+
readonly method: {
|
|
2065
|
+
readonly type: "string";
|
|
2066
|
+
};
|
|
2067
|
+
readonly form_url: {
|
|
2068
|
+
readonly type: "string";
|
|
2069
|
+
};
|
|
2070
|
+
};
|
|
2071
|
+
readonly required: readonly ["id"];
|
|
2072
|
+
};
|
|
2073
|
+
}, {
|
|
2074
|
+
readonly name: "get_followup_due_applications";
|
|
2075
|
+
readonly description: "List applications with follow_up_date on or before today that haven't been completed or cancelled.";
|
|
2076
|
+
readonly inputSchema: {
|
|
2077
|
+
readonly type: "object";
|
|
2078
|
+
readonly properties: {};
|
|
2079
|
+
};
|
|
2080
|
+
}, {
|
|
2081
|
+
readonly name: "list_owned_entities";
|
|
2082
|
+
readonly description: "List all companies marked as owned entities (is_owned_entity=true) — your legal entities, subsidiaries, and operating companies.";
|
|
2083
|
+
readonly inputSchema: {
|
|
2084
|
+
readonly type: "object";
|
|
2085
|
+
readonly properties: {};
|
|
2086
|
+
};
|
|
2087
|
+
}, {
|
|
2088
|
+
readonly name: "get_entity_team";
|
|
2089
|
+
readonly description: "Get the full team for an owned entity — all contacts linked via company_relationships, with their roles and primary status.";
|
|
2090
|
+
readonly inputSchema: {
|
|
2091
|
+
readonly type: "object";
|
|
2092
|
+
readonly properties: {
|
|
2093
|
+
readonly company_id: {
|
|
2094
|
+
readonly type: "string";
|
|
2095
|
+
};
|
|
2096
|
+
};
|
|
2097
|
+
readonly required: readonly ["company_id"];
|
|
2098
|
+
};
|
|
2099
|
+
}, {
|
|
2100
|
+
readonly name: "get_contact_brief";
|
|
2101
|
+
readonly description: "Generate a comprehensive pre-meeting briefing for a contact. Returns structured markdown covering: role/company, contact details, status, last contacted, open tasks, overdue items, entity relationships, recent notes, recent activity. Feed this to an AI before a meeting or call.";
|
|
2102
|
+
readonly inputSchema: {
|
|
2103
|
+
readonly type: "object";
|
|
2104
|
+
readonly properties: {
|
|
2105
|
+
readonly contact_id: {
|
|
2106
|
+
readonly type: "string";
|
|
2107
|
+
};
|
|
2108
|
+
};
|
|
2109
|
+
readonly required: readonly ["contact_id"];
|
|
2110
|
+
};
|
|
2111
|
+
}, {
|
|
2112
|
+
readonly name: "list_cold_contacts";
|
|
2113
|
+
readonly description: "List contacts you haven't been in touch with for N days (default 30). Sorted by most neglected first. Use to identify who needs re-engagement. 'never' means last_contacted_at was never set.";
|
|
2114
|
+
readonly inputSchema: {
|
|
2115
|
+
readonly type: "object";
|
|
2116
|
+
readonly properties: {
|
|
2117
|
+
readonly days: {
|
|
2118
|
+
readonly type: "number";
|
|
2119
|
+
readonly description: "Days threshold (default 30)";
|
|
2120
|
+
};
|
|
2121
|
+
};
|
|
2122
|
+
};
|
|
2123
|
+
}, {
|
|
2124
|
+
readonly name: "get_upcoming";
|
|
2125
|
+
readonly description: "Get a unified calendar of upcoming items: follow-ups due, birthdays, task deadlines, application follow-ups, vendor follow-ups. Default 7-day window. Returns items sorted by date with urgency (overdue/today/upcoming).";
|
|
2126
|
+
readonly inputSchema: {
|
|
2127
|
+
readonly type: "object";
|
|
2128
|
+
readonly properties: {
|
|
2129
|
+
readonly days: {
|
|
2130
|
+
readonly type: "number";
|
|
2131
|
+
readonly description: "Days ahead to show (default 7)";
|
|
2132
|
+
};
|
|
2133
|
+
};
|
|
2134
|
+
};
|
|
2135
|
+
}, {
|
|
2136
|
+
readonly name: "get_network_stats";
|
|
2137
|
+
readonly description: "Get comprehensive network health stats: contact counts, cold contacts (30d/60d/never), data completeness, overdue tasks, pending applications, missing invoices, active deal pipeline value. The health dashboard for your network.";
|
|
2138
|
+
readonly inputSchema: {
|
|
2139
|
+
readonly type: "object";
|
|
2140
|
+
readonly properties: {};
|
|
2141
|
+
};
|
|
2142
|
+
}, {
|
|
2143
|
+
readonly name: "audit_contacts";
|
|
2144
|
+
readonly description: "Score all contacts for data completeness (0-100). Points: email +20, phone +15, company +15, last_contacted_at +20, tags +10, notes +10, job_title +10. Returns contacts sorted by score ascending (worst first) so you know who to enrich.";
|
|
2145
|
+
readonly inputSchema: {
|
|
2146
|
+
readonly type: "object";
|
|
2147
|
+
readonly properties: {
|
|
2148
|
+
readonly limit: {
|
|
2149
|
+
readonly type: "number";
|
|
2150
|
+
readonly description: "Number to show (default 20)";
|
|
2151
|
+
};
|
|
2152
|
+
};
|
|
2153
|
+
};
|
|
2154
|
+
}, {
|
|
2155
|
+
readonly name: "create_deal";
|
|
2156
|
+
readonly description: "Create a new deal or opportunity, optionally linked to a contact and/or company.";
|
|
2157
|
+
readonly inputSchema: {
|
|
2158
|
+
readonly type: "object";
|
|
2159
|
+
readonly properties: {
|
|
2160
|
+
readonly title: {
|
|
2161
|
+
readonly type: "string";
|
|
2162
|
+
};
|
|
2163
|
+
readonly contact_id: {
|
|
2164
|
+
readonly type: "string";
|
|
2165
|
+
};
|
|
2166
|
+
readonly company_id: {
|
|
2167
|
+
readonly type: "string";
|
|
2168
|
+
};
|
|
2169
|
+
readonly stage: {
|
|
2170
|
+
readonly type: "string";
|
|
2171
|
+
readonly enum: readonly ["lead", "qualified", "proposal", "negotiation", "won", "lost", "cancelled"];
|
|
2172
|
+
readonly description: "Deal stage (default: lead)";
|
|
2173
|
+
};
|
|
2174
|
+
readonly value_usd: {
|
|
2175
|
+
readonly type: "number";
|
|
2176
|
+
};
|
|
2177
|
+
readonly currency: {
|
|
2178
|
+
readonly type: "string";
|
|
2179
|
+
};
|
|
2180
|
+
readonly close_date: {
|
|
2181
|
+
readonly type: "string";
|
|
2182
|
+
readonly description: "Expected close date (YYYY-MM-DD)";
|
|
2183
|
+
};
|
|
2184
|
+
readonly notes: {
|
|
2185
|
+
readonly type: "string";
|
|
2186
|
+
};
|
|
2187
|
+
};
|
|
2188
|
+
readonly required: readonly ["title"];
|
|
2189
|
+
};
|
|
2190
|
+
}, {
|
|
2191
|
+
readonly name: "get_deal";
|
|
2192
|
+
readonly description: "Get a deal by ID.";
|
|
2193
|
+
readonly inputSchema: {
|
|
2194
|
+
readonly type: "object";
|
|
2195
|
+
readonly properties: {
|
|
2196
|
+
readonly id: {
|
|
2197
|
+
readonly type: "string";
|
|
2198
|
+
};
|
|
2199
|
+
};
|
|
2200
|
+
readonly required: readonly ["id"];
|
|
2201
|
+
};
|
|
2202
|
+
}, {
|
|
2203
|
+
readonly name: "list_deals";
|
|
2204
|
+
readonly description: "List deals, optionally filtered by stage, contact, or company.";
|
|
2205
|
+
readonly inputSchema: {
|
|
2206
|
+
readonly type: "object";
|
|
2207
|
+
readonly properties: {
|
|
2208
|
+
readonly stage: {
|
|
2209
|
+
readonly type: "string";
|
|
2210
|
+
readonly enum: readonly ["lead", "qualified", "proposal", "negotiation", "won", "lost", "cancelled"];
|
|
2211
|
+
};
|
|
2212
|
+
readonly contact_id: {
|
|
2213
|
+
readonly type: "string";
|
|
2214
|
+
};
|
|
2215
|
+
readonly company_id: {
|
|
2216
|
+
readonly type: "string";
|
|
2217
|
+
};
|
|
2218
|
+
};
|
|
2219
|
+
};
|
|
2220
|
+
}, {
|
|
2221
|
+
readonly name: "update_deal";
|
|
2222
|
+
readonly description: "Update a deal's title, stage, value, close date, or notes.";
|
|
2223
|
+
readonly inputSchema: {
|
|
2224
|
+
readonly type: "object";
|
|
2225
|
+
readonly properties: {
|
|
2226
|
+
readonly id: {
|
|
2227
|
+
readonly type: "string";
|
|
2228
|
+
};
|
|
2229
|
+
readonly title: {
|
|
2230
|
+
readonly type: "string";
|
|
2231
|
+
};
|
|
2232
|
+
readonly stage: {
|
|
2233
|
+
readonly type: "string";
|
|
2234
|
+
readonly enum: readonly ["lead", "qualified", "proposal", "negotiation", "won", "lost", "cancelled"];
|
|
2235
|
+
};
|
|
2236
|
+
readonly value_usd: {
|
|
2237
|
+
readonly type: "number";
|
|
2238
|
+
};
|
|
2239
|
+
readonly close_date: {
|
|
2240
|
+
readonly type: "string";
|
|
2241
|
+
};
|
|
2242
|
+
readonly notes: {
|
|
2243
|
+
readonly type: "string";
|
|
2244
|
+
};
|
|
2245
|
+
};
|
|
2246
|
+
readonly required: readonly ["id"];
|
|
2247
|
+
};
|
|
2248
|
+
}, {
|
|
2249
|
+
readonly name: "delete_deal";
|
|
2250
|
+
readonly description: "Delete a deal by ID.";
|
|
2251
|
+
readonly inputSchema: {
|
|
2252
|
+
readonly type: "object";
|
|
2253
|
+
readonly properties: {
|
|
2254
|
+
readonly id: {
|
|
2255
|
+
readonly type: "string";
|
|
2256
|
+
};
|
|
2257
|
+
};
|
|
2258
|
+
readonly required: readonly ["id"];
|
|
2259
|
+
};
|
|
2260
|
+
}, {
|
|
2261
|
+
readonly name: "log_event";
|
|
2262
|
+
readonly description: "Log a meeting, call, or interaction event with one or more contacts.";
|
|
2263
|
+
readonly inputSchema: {
|
|
2264
|
+
readonly type: "object";
|
|
2265
|
+
readonly properties: {
|
|
2266
|
+
readonly title: {
|
|
2267
|
+
readonly type: "string";
|
|
2268
|
+
};
|
|
2269
|
+
readonly type: {
|
|
2270
|
+
readonly type: "string";
|
|
2271
|
+
readonly enum: readonly ["meeting", "call", "email", "lunch", "conference", "demo", "other"];
|
|
2272
|
+
};
|
|
2273
|
+
readonly event_date: {
|
|
2274
|
+
readonly type: "string";
|
|
2275
|
+
readonly description: "ISO date or datetime of the event";
|
|
2276
|
+
};
|
|
2277
|
+
readonly duration_min: {
|
|
2278
|
+
readonly type: "number";
|
|
2279
|
+
readonly description: "Duration in minutes";
|
|
2280
|
+
};
|
|
2281
|
+
readonly contact_ids: {
|
|
2282
|
+
readonly type: "array";
|
|
2283
|
+
readonly items: {
|
|
2284
|
+
readonly type: "string";
|
|
2285
|
+
};
|
|
2286
|
+
readonly description: "Contact IDs who attended";
|
|
2287
|
+
};
|
|
2288
|
+
readonly company_id: {
|
|
2289
|
+
readonly type: "string";
|
|
2290
|
+
};
|
|
2291
|
+
readonly notes: {
|
|
2292
|
+
readonly type: "string";
|
|
2293
|
+
};
|
|
2294
|
+
readonly outcome: {
|
|
2295
|
+
readonly type: "string";
|
|
2296
|
+
};
|
|
2297
|
+
readonly deal_id: {
|
|
2298
|
+
readonly type: "string";
|
|
2299
|
+
};
|
|
2300
|
+
};
|
|
2301
|
+
readonly required: readonly ["title", "event_date"];
|
|
2302
|
+
};
|
|
2303
|
+
}, {
|
|
2304
|
+
readonly name: "list_events";
|
|
2305
|
+
readonly description: "List events, optionally filtered by contact, company, type, or date range.";
|
|
2306
|
+
readonly inputSchema: {
|
|
2307
|
+
readonly type: "object";
|
|
2308
|
+
readonly properties: {
|
|
2309
|
+
readonly contact_id: {
|
|
2310
|
+
readonly type: "string";
|
|
2311
|
+
};
|
|
2312
|
+
readonly company_id: {
|
|
2313
|
+
readonly type: "string";
|
|
2314
|
+
};
|
|
2315
|
+
readonly type: {
|
|
2316
|
+
readonly type: "string";
|
|
2317
|
+
};
|
|
2318
|
+
readonly date_from: {
|
|
2319
|
+
readonly type: "string";
|
|
2320
|
+
};
|
|
2321
|
+
readonly date_to: {
|
|
2322
|
+
readonly type: "string";
|
|
2323
|
+
};
|
|
2324
|
+
};
|
|
2325
|
+
};
|
|
2326
|
+
}, {
|
|
2327
|
+
readonly name: "delete_event";
|
|
2328
|
+
readonly description: "Delete an event by ID.";
|
|
2329
|
+
readonly inputSchema: {
|
|
2330
|
+
readonly type: "object";
|
|
2331
|
+
readonly properties: {
|
|
2332
|
+
readonly id: {
|
|
2333
|
+
readonly type: "string";
|
|
2334
|
+
};
|
|
2335
|
+
};
|
|
2336
|
+
readonly required: readonly ["id"];
|
|
2337
|
+
};
|
|
2338
|
+
}, {
|
|
2339
|
+
readonly name: "get_contact_timeline";
|
|
2340
|
+
readonly description: "Get full chronological activity history for a contact: notes, events, tasks, vendor communications, interactions — all unified in reverse date order. The account history view.";
|
|
2341
|
+
readonly inputSchema: {
|
|
2342
|
+
readonly type: "object";
|
|
2343
|
+
readonly properties: {
|
|
2344
|
+
readonly contact_id: {
|
|
2345
|
+
readonly type: "string";
|
|
2346
|
+
};
|
|
2347
|
+
readonly limit: {
|
|
2348
|
+
readonly type: "number";
|
|
2349
|
+
readonly description: "Max items (default 50)";
|
|
2350
|
+
};
|
|
2351
|
+
};
|
|
2352
|
+
readonly required: readonly ["contact_id"];
|
|
2353
|
+
};
|
|
2354
|
+
}, {
|
|
2355
|
+
readonly name: "enrich_contact";
|
|
2356
|
+
readonly description: "Search the web for missing contact data (LinkedIn, Twitter, GitHub, phone, company website) using the contact's name, email, and company. Returns SUGGESTIONS only — does not auto-apply. Review and apply with update_contact.";
|
|
2357
|
+
readonly inputSchema: {
|
|
2358
|
+
readonly type: "object";
|
|
2359
|
+
readonly properties: {
|
|
2360
|
+
readonly contact_id: {
|
|
2361
|
+
readonly type: "string";
|
|
2362
|
+
};
|
|
2363
|
+
};
|
|
2364
|
+
readonly required: readonly ["contact_id"];
|
|
2365
|
+
};
|
|
2366
|
+
}, {
|
|
2367
|
+
readonly name: "get_contacts_for_context";
|
|
2368
|
+
readonly description: "Find contacts relevant to a topic or domain. Searches job titles, notes, specializations, company names, relationship types, tags, and org memberships. Returns ranked results with relevance reason. Essential for agents: 'who do I contact about trademark law?' → returns attorneys at Revision Legal.";
|
|
2369
|
+
readonly inputSchema: {
|
|
2370
|
+
readonly type: "object";
|
|
2371
|
+
readonly properties: {
|
|
2372
|
+
readonly topic: {
|
|
2373
|
+
readonly type: "string";
|
|
2374
|
+
readonly description: "Topic or domain to search for (e.g. 'trademark law', 'payroll', 'banking')";
|
|
2375
|
+
};
|
|
2376
|
+
readonly limit: {
|
|
2377
|
+
readonly type: "number";
|
|
2378
|
+
readonly description: "Max results (default 10)";
|
|
2379
|
+
};
|
|
2380
|
+
};
|
|
2381
|
+
readonly required: readonly ["topic"];
|
|
2382
|
+
};
|
|
2383
|
+
}, {
|
|
2384
|
+
readonly name: "set_reminder";
|
|
2385
|
+
readonly description: "Schedule a follow-up reminder for a contact. Sets follow_up_at to the specified date and adds a note with the reminder text. Will appear in get_upcoming results. Use: set_reminder({contact_id, remind_at: '2026-04-01', note: 'Check on invoice status'})";
|
|
2386
|
+
readonly inputSchema: {
|
|
2387
|
+
readonly type: "object";
|
|
2388
|
+
readonly properties: {
|
|
2389
|
+
readonly contact_id: {
|
|
2390
|
+
readonly type: "string";
|
|
2391
|
+
};
|
|
2392
|
+
readonly remind_at: {
|
|
2393
|
+
readonly type: "string";
|
|
2394
|
+
readonly description: "Reminder date (YYYY-MM-DD)";
|
|
2395
|
+
};
|
|
2396
|
+
readonly note: {
|
|
2397
|
+
readonly type: "string";
|
|
2398
|
+
readonly description: "Optional reminder note";
|
|
2399
|
+
};
|
|
2400
|
+
};
|
|
2401
|
+
readonly required: readonly ["contact_id", "remind_at"];
|
|
2402
|
+
};
|
|
2403
|
+
}, {
|
|
2404
|
+
readonly name: "check_and_fire_webhooks";
|
|
2405
|
+
readonly description: "Check all registered webhooks and fire any that match current conditions: contact.stale (last_contacted_at > 30 days), task.overdue (deadline passed), followup.due (follow_up_at <= today). Returns list of fired webhooks.";
|
|
2406
|
+
readonly inputSchema: {
|
|
2407
|
+
readonly type: "object";
|
|
2408
|
+
readonly properties: {};
|
|
2409
|
+
};
|
|
2410
|
+
}, {
|
|
2411
|
+
readonly name: "bulk_tag_contacts";
|
|
2412
|
+
readonly description: "Apply or remove a tag from multiple contacts at once. Either pass contact_ids array directly, or pass a search query and all matching contacts will be tagged. Returns count of contacts tagged.";
|
|
2413
|
+
readonly inputSchema: {
|
|
2414
|
+
readonly type: "object";
|
|
2415
|
+
readonly properties: {
|
|
2416
|
+
readonly tag_id_or_name: {
|
|
2417
|
+
readonly type: "string";
|
|
2418
|
+
readonly description: "Tag ID (UUID) or tag name to apply/remove";
|
|
2419
|
+
};
|
|
2420
|
+
readonly action: {
|
|
2421
|
+
readonly type: "string";
|
|
2422
|
+
readonly enum: readonly ["add", "remove"];
|
|
2423
|
+
};
|
|
2424
|
+
readonly contact_ids: {
|
|
2425
|
+
readonly type: "array";
|
|
2426
|
+
readonly items: {
|
|
2427
|
+
readonly type: "string";
|
|
2428
|
+
};
|
|
2429
|
+
readonly description: "Specific contact IDs (alternative to query)";
|
|
2430
|
+
};
|
|
2431
|
+
readonly query: {
|
|
2432
|
+
readonly type: "string";
|
|
2433
|
+
readonly description: "Search query — all matching contacts will be tagged";
|
|
2434
|
+
};
|
|
2435
|
+
};
|
|
2436
|
+
readonly required: readonly ["tag_id_or_name", "action"];
|
|
2437
|
+
};
|
|
2438
|
+
}, {
|
|
2439
|
+
readonly name: "set_do_not_contact";
|
|
2440
|
+
readonly description: "Mark a contact as do-not-contact (DNC). They will be excluded from list_contacts, cold, and upcoming results unless explicitly requested. Use for GDPR compliance or unsubscribes.";
|
|
2441
|
+
readonly inputSchema: {
|
|
2442
|
+
readonly type: "object";
|
|
2443
|
+
readonly properties: {
|
|
2444
|
+
readonly contact_id: {
|
|
2445
|
+
readonly type: "string";
|
|
2446
|
+
};
|
|
2447
|
+
readonly do_not_contact: {
|
|
2448
|
+
readonly type: "boolean";
|
|
2449
|
+
};
|
|
2450
|
+
readonly reason: {
|
|
2451
|
+
readonly type: "string";
|
|
2452
|
+
readonly description: "Reason for DNC flag (optional)";
|
|
2453
|
+
};
|
|
2454
|
+
};
|
|
2455
|
+
readonly required: readonly ["contact_id", "do_not_contact"];
|
|
2456
|
+
};
|
|
2457
|
+
}, {
|
|
2458
|
+
readonly name: "get_field_history";
|
|
2459
|
+
readonly description: "Get the change history for one or all fields of a contact (temporal audit trail).";
|
|
2460
|
+
readonly inputSchema: {
|
|
2461
|
+
readonly type: "object";
|
|
2462
|
+
readonly properties: {
|
|
2463
|
+
readonly contact_id: {
|
|
2464
|
+
readonly type: "string";
|
|
2465
|
+
};
|
|
2466
|
+
readonly field_name: {
|
|
2467
|
+
readonly type: "string";
|
|
2468
|
+
readonly description: "Optional — filter to a single field";
|
|
2469
|
+
};
|
|
2470
|
+
};
|
|
2471
|
+
readonly required: readonly ["contact_id"];
|
|
2472
|
+
};
|
|
2473
|
+
}, {
|
|
2474
|
+
readonly name: "get_contact_at";
|
|
2475
|
+
readonly description: "Reconstruct a contact's profile as it was at a specific point in time, using field history.";
|
|
2476
|
+
readonly inputSchema: {
|
|
2477
|
+
readonly type: "object";
|
|
2478
|
+
readonly properties: {
|
|
2479
|
+
readonly contact_id: {
|
|
2480
|
+
readonly type: "string";
|
|
2481
|
+
};
|
|
2482
|
+
readonly timestamp: {
|
|
2483
|
+
readonly type: "string";
|
|
2484
|
+
readonly description: "ISO 8601 datetime — reconstruct profile at this point in time";
|
|
2485
|
+
};
|
|
2486
|
+
};
|
|
2487
|
+
readonly required: readonly ["contact_id", "timestamp"];
|
|
2488
|
+
};
|
|
2489
|
+
}, {
|
|
2490
|
+
readonly name: "get_job_history";
|
|
2491
|
+
readonly description: "Get the employment timeline for a contact — all past and current job entries in reverse chronological order.";
|
|
2492
|
+
readonly inputSchema: {
|
|
2493
|
+
readonly type: "object";
|
|
2494
|
+
readonly properties: {
|
|
2495
|
+
readonly contact_id: {
|
|
2496
|
+
readonly type: "string";
|
|
2497
|
+
};
|
|
2498
|
+
};
|
|
2499
|
+
readonly required: readonly ["contact_id"];
|
|
2500
|
+
};
|
|
2501
|
+
}, {
|
|
2502
|
+
readonly name: "add_job_entry";
|
|
2503
|
+
readonly description: "Add a job history entry to a contact's employment timeline.";
|
|
2504
|
+
readonly inputSchema: {
|
|
2505
|
+
readonly type: "object";
|
|
2506
|
+
readonly properties: {
|
|
2507
|
+
readonly contact_id: {
|
|
2508
|
+
readonly type: "string";
|
|
2509
|
+
};
|
|
2510
|
+
readonly company_name: {
|
|
2511
|
+
readonly type: "string";
|
|
2512
|
+
};
|
|
2513
|
+
readonly title: {
|
|
2514
|
+
readonly type: "string";
|
|
2515
|
+
};
|
|
2516
|
+
readonly start_date: {
|
|
2517
|
+
readonly type: "string";
|
|
2518
|
+
};
|
|
2519
|
+
readonly end_date: {
|
|
2520
|
+
readonly type: "string";
|
|
2521
|
+
};
|
|
2522
|
+
readonly is_current: {
|
|
2523
|
+
readonly type: "boolean";
|
|
2524
|
+
};
|
|
2525
|
+
};
|
|
2526
|
+
readonly required: readonly ["contact_id", "company_name"];
|
|
2527
|
+
};
|
|
2528
|
+
}, {
|
|
2529
|
+
readonly name: "save_learning";
|
|
2530
|
+
readonly description: "Save a structured learning about a contact — preferences, facts, inferences, warnings, or signals. Include confidence (0-100) and importance (1-10).";
|
|
2531
|
+
readonly inputSchema: {
|
|
2532
|
+
readonly type: "object";
|
|
2533
|
+
readonly properties: {
|
|
2534
|
+
readonly contact_id: {
|
|
2535
|
+
readonly type: "string";
|
|
2536
|
+
};
|
|
2537
|
+
readonly content: {
|
|
2538
|
+
readonly type: "string";
|
|
2539
|
+
};
|
|
2540
|
+
readonly type: {
|
|
2541
|
+
readonly type: "string";
|
|
2542
|
+
readonly enum: readonly ["preference", "fact", "inference", "warning", "signal"];
|
|
2543
|
+
};
|
|
2544
|
+
readonly confidence: {
|
|
2545
|
+
readonly type: "number";
|
|
2546
|
+
};
|
|
2547
|
+
readonly importance: {
|
|
2548
|
+
readonly type: "number";
|
|
2549
|
+
};
|
|
2550
|
+
readonly learned_by: {
|
|
2551
|
+
readonly type: "string";
|
|
2552
|
+
};
|
|
2553
|
+
readonly visibility: {
|
|
2554
|
+
readonly type: "string";
|
|
2555
|
+
readonly enum: readonly ["private", "shared", "human"];
|
|
2556
|
+
};
|
|
2557
|
+
readonly tags: {
|
|
2558
|
+
readonly type: "array";
|
|
2559
|
+
readonly items: {
|
|
2560
|
+
readonly type: "string";
|
|
2561
|
+
};
|
|
2562
|
+
};
|
|
2563
|
+
};
|
|
2564
|
+
readonly required: readonly ["contact_id", "content"];
|
|
2565
|
+
};
|
|
2566
|
+
}, {
|
|
2567
|
+
readonly name: "get_learnings";
|
|
2568
|
+
readonly description: "Get all learnings for a contact, optionally filtered by type and minimum importance.";
|
|
2569
|
+
readonly inputSchema: {
|
|
2570
|
+
readonly type: "object";
|
|
2571
|
+
readonly properties: {
|
|
2572
|
+
readonly contact_id: {
|
|
2573
|
+
readonly type: "string";
|
|
2574
|
+
};
|
|
2575
|
+
readonly type: {
|
|
2576
|
+
readonly type: "string";
|
|
2577
|
+
readonly enum: readonly ["preference", "fact", "inference", "warning", "signal"];
|
|
2578
|
+
};
|
|
2579
|
+
readonly min_importance: {
|
|
2580
|
+
readonly type: "number";
|
|
2581
|
+
};
|
|
2582
|
+
};
|
|
2583
|
+
readonly required: readonly ["contact_id"];
|
|
2584
|
+
};
|
|
2585
|
+
}, {
|
|
2586
|
+
readonly name: "search_learnings";
|
|
2587
|
+
readonly description: "Cross-contact search across all learnings for a keyword or phrase.";
|
|
2588
|
+
readonly inputSchema: {
|
|
2589
|
+
readonly type: "object";
|
|
2590
|
+
readonly properties: {
|
|
2591
|
+
readonly query: {
|
|
2592
|
+
readonly type: "string";
|
|
2593
|
+
};
|
|
2594
|
+
readonly type: {
|
|
2595
|
+
readonly type: "string";
|
|
2596
|
+
};
|
|
2597
|
+
readonly contact_id: {
|
|
2598
|
+
readonly type: "string";
|
|
2599
|
+
readonly description: "Optional — limit to a specific contact";
|
|
2600
|
+
};
|
|
2601
|
+
};
|
|
2602
|
+
readonly required: readonly ["query"];
|
|
2603
|
+
};
|
|
2604
|
+
}, {
|
|
2605
|
+
readonly name: "confirm_learning";
|
|
2606
|
+
readonly description: "Confirm a learning as correct, boosting its confidence score.";
|
|
2607
|
+
readonly inputSchema: {
|
|
2608
|
+
readonly type: "object";
|
|
2609
|
+
readonly properties: {
|
|
2610
|
+
readonly learning_id: {
|
|
2611
|
+
readonly type: "string";
|
|
2612
|
+
};
|
|
2613
|
+
readonly agent_name: {
|
|
2614
|
+
readonly type: "string";
|
|
2615
|
+
};
|
|
2616
|
+
};
|
|
2617
|
+
readonly required: readonly ["learning_id", "agent_name"];
|
|
2618
|
+
};
|
|
2619
|
+
}, {
|
|
2620
|
+
readonly name: "get_stale_learnings";
|
|
2621
|
+
readonly description: "Find learnings that haven't been confirmed recently and may need review.";
|
|
2622
|
+
readonly inputSchema: {
|
|
2623
|
+
readonly type: "object";
|
|
2624
|
+
readonly properties: {
|
|
2625
|
+
readonly days_old: {
|
|
2626
|
+
readonly type: "number";
|
|
2627
|
+
};
|
|
2628
|
+
readonly min_confidence: {
|
|
2629
|
+
readonly type: "number";
|
|
2630
|
+
};
|
|
2631
|
+
};
|
|
2632
|
+
};
|
|
2633
|
+
}, {
|
|
2634
|
+
readonly name: "run_learning_maintenance";
|
|
2635
|
+
readonly description: "Run decay (reduce confidence on old unconfirmed learnings) and contradiction detection across all learnings.";
|
|
2636
|
+
readonly inputSchema: {
|
|
2637
|
+
readonly type: "object";
|
|
2638
|
+
readonly properties: {};
|
|
2639
|
+
};
|
|
2640
|
+
}, {
|
|
2641
|
+
readonly name: "acquire_contact_lock";
|
|
2642
|
+
readonly description: "Acquire a write lock on a contact to prevent conflicts when multiple agents edit the same record. Returns {acquired, lock, held_by}.";
|
|
2643
|
+
readonly inputSchema: {
|
|
2644
|
+
readonly type: "object";
|
|
2645
|
+
readonly properties: {
|
|
2646
|
+
readonly contact_id: {
|
|
2647
|
+
readonly type: "string";
|
|
2648
|
+
};
|
|
2649
|
+
readonly agent_name: {
|
|
2650
|
+
readonly type: "string";
|
|
2651
|
+
};
|
|
2652
|
+
readonly ttl_seconds: {
|
|
2653
|
+
readonly type: "number";
|
|
2654
|
+
};
|
|
2655
|
+
readonly reason: {
|
|
2656
|
+
readonly type: "string";
|
|
2657
|
+
};
|
|
2658
|
+
readonly session_id: {
|
|
2659
|
+
readonly type: "string";
|
|
2660
|
+
};
|
|
2661
|
+
};
|
|
2662
|
+
readonly required: readonly ["contact_id", "agent_name"];
|
|
2663
|
+
};
|
|
2664
|
+
}, {
|
|
2665
|
+
readonly name: "release_contact_lock";
|
|
2666
|
+
readonly description: "Release a contact write lock previously acquired by this agent.";
|
|
2667
|
+
readonly inputSchema: {
|
|
2668
|
+
readonly type: "object";
|
|
2669
|
+
readonly properties: {
|
|
2670
|
+
readonly contact_id: {
|
|
2671
|
+
readonly type: "string";
|
|
2672
|
+
};
|
|
2673
|
+
readonly agent_name: {
|
|
2674
|
+
readonly type: "string";
|
|
2675
|
+
};
|
|
2676
|
+
};
|
|
2677
|
+
readonly required: readonly ["contact_id", "agent_name"];
|
|
2678
|
+
};
|
|
2679
|
+
}, {
|
|
2680
|
+
readonly name: "check_contact_lock";
|
|
2681
|
+
readonly description: "Check if a contact is currently locked by any agent.";
|
|
2682
|
+
readonly inputSchema: {
|
|
2683
|
+
readonly type: "object";
|
|
2684
|
+
readonly properties: {
|
|
2685
|
+
readonly contact_id: {
|
|
2686
|
+
readonly type: "string";
|
|
2687
|
+
};
|
|
2688
|
+
};
|
|
2689
|
+
readonly required: readonly ["contact_id"];
|
|
2690
|
+
};
|
|
2691
|
+
}, {
|
|
2692
|
+
readonly name: "log_agent_activity";
|
|
2693
|
+
readonly description: "Log an agent action against a contact for audit/coordination purposes.";
|
|
2694
|
+
readonly inputSchema: {
|
|
2695
|
+
readonly type: "object";
|
|
2696
|
+
readonly properties: {
|
|
2697
|
+
readonly contact_id: {
|
|
2698
|
+
readonly type: "string";
|
|
2699
|
+
};
|
|
2700
|
+
readonly agent_name: {
|
|
2701
|
+
readonly type: "string";
|
|
2702
|
+
};
|
|
2703
|
+
readonly action: {
|
|
2704
|
+
readonly type: "string";
|
|
2705
|
+
};
|
|
2706
|
+
readonly details: {
|
|
2707
|
+
readonly type: "string";
|
|
2708
|
+
};
|
|
2709
|
+
readonly session_id: {
|
|
2710
|
+
readonly type: "string";
|
|
2711
|
+
};
|
|
2712
|
+
};
|
|
2713
|
+
readonly required: readonly ["contact_id", "agent_name", "action"];
|
|
2714
|
+
};
|
|
2715
|
+
}, {
|
|
2716
|
+
readonly name: "get_contact_agent_activity";
|
|
2717
|
+
readonly description: "Get the recent agent activity log for a contact.";
|
|
2718
|
+
readonly inputSchema: {
|
|
2719
|
+
readonly type: "object";
|
|
2720
|
+
readonly properties: {
|
|
2721
|
+
readonly contact_id: {
|
|
2722
|
+
readonly type: "string";
|
|
2723
|
+
};
|
|
2724
|
+
readonly limit: {
|
|
2725
|
+
readonly type: "number";
|
|
2726
|
+
};
|
|
2727
|
+
};
|
|
2728
|
+
readonly required: readonly ["contact_id"];
|
|
2729
|
+
};
|
|
2730
|
+
}, {
|
|
2731
|
+
readonly name: "get_relationship_strength";
|
|
2732
|
+
readonly description: "Compute and return the relationship strength score (0-100) for a contact based on interaction frequency and recency.";
|
|
2733
|
+
readonly inputSchema: {
|
|
2734
|
+
readonly type: "object";
|
|
2735
|
+
readonly properties: {
|
|
2736
|
+
readonly contact_id: {
|
|
2737
|
+
readonly type: "string";
|
|
2738
|
+
};
|
|
2739
|
+
};
|
|
2740
|
+
readonly required: readonly ["contact_id"];
|
|
2741
|
+
};
|
|
2742
|
+
}, {
|
|
2743
|
+
readonly name: "find_warm_path";
|
|
2744
|
+
readonly description: "Find the shortest warm introduction path between two contacts through the relationship graph.";
|
|
2745
|
+
readonly inputSchema: {
|
|
2746
|
+
readonly type: "object";
|
|
2747
|
+
readonly properties: {
|
|
2748
|
+
readonly from_contact_id: {
|
|
2749
|
+
readonly type: "string";
|
|
2750
|
+
};
|
|
2751
|
+
readonly to_contact_id: {
|
|
2752
|
+
readonly type: "string";
|
|
2753
|
+
};
|
|
2754
|
+
};
|
|
2755
|
+
readonly required: readonly ["from_contact_id", "to_contact_id"];
|
|
2756
|
+
};
|
|
2757
|
+
}, {
|
|
2758
|
+
readonly name: "find_connections_at_company";
|
|
2759
|
+
readonly description: "Find all contacts linked to a specific company, with relationship strength scores.";
|
|
2760
|
+
readonly inputSchema: {
|
|
2761
|
+
readonly type: "object";
|
|
2762
|
+
readonly properties: {
|
|
2763
|
+
readonly company_id: {
|
|
2764
|
+
readonly type: "string";
|
|
2765
|
+
};
|
|
2766
|
+
};
|
|
2767
|
+
readonly required: readonly ["company_id"];
|
|
2768
|
+
};
|
|
2769
|
+
}, {
|
|
2770
|
+
readonly name: "get_cooling_relationships";
|
|
2771
|
+
readonly description: "Get all relationships that are cooling (no contact in 45+ days) — use to prioritize re-engagement outreach.";
|
|
2772
|
+
readonly inputSchema: {
|
|
2773
|
+
readonly type: "object";
|
|
2774
|
+
readonly properties: {};
|
|
2775
|
+
};
|
|
2776
|
+
}, {
|
|
2777
|
+
readonly name: "resolve_contact_identity";
|
|
2778
|
+
readonly description: "Resolve a contact's identity from partial signals (email, name, LinkedIn URL, phone, or external system ID). Returns ranked matches with confidence scores.";
|
|
2779
|
+
readonly inputSchema: {
|
|
2780
|
+
readonly type: "object";
|
|
2781
|
+
readonly properties: {
|
|
2782
|
+
readonly email: {
|
|
2783
|
+
readonly type: "string";
|
|
2784
|
+
};
|
|
2785
|
+
readonly name: {
|
|
2786
|
+
readonly type: "string";
|
|
2787
|
+
};
|
|
2788
|
+
readonly linkedin_url: {
|
|
2789
|
+
readonly type: "string";
|
|
2790
|
+
};
|
|
2791
|
+
readonly phone: {
|
|
2792
|
+
readonly type: "string";
|
|
2793
|
+
};
|
|
2794
|
+
readonly system: {
|
|
2795
|
+
readonly type: "string";
|
|
2796
|
+
};
|
|
2797
|
+
readonly external_id: {
|
|
2798
|
+
readonly type: "string";
|
|
2799
|
+
};
|
|
2800
|
+
};
|
|
2801
|
+
};
|
|
2802
|
+
}, {
|
|
2803
|
+
readonly name: "add_contact_identity";
|
|
2804
|
+
readonly description: "Register an external system identity (e.g. Salesforce ID, LinkedIn URL) for a contact.";
|
|
2805
|
+
readonly inputSchema: {
|
|
2806
|
+
readonly type: "object";
|
|
2807
|
+
readonly properties: {
|
|
2808
|
+
readonly contact_id: {
|
|
2809
|
+
readonly type: "string";
|
|
2810
|
+
};
|
|
2811
|
+
readonly system: {
|
|
2812
|
+
readonly type: "string";
|
|
2813
|
+
};
|
|
2814
|
+
readonly external_id: {
|
|
2815
|
+
readonly type: "string";
|
|
2816
|
+
};
|
|
2817
|
+
readonly external_url: {
|
|
2818
|
+
readonly type: "string";
|
|
2819
|
+
};
|
|
2820
|
+
readonly confidence: {
|
|
2821
|
+
readonly type: "string";
|
|
2822
|
+
readonly enum: readonly ["verified", "inferred"];
|
|
2823
|
+
};
|
|
2824
|
+
};
|
|
2825
|
+
readonly required: readonly ["contact_id", "system", "external_id"];
|
|
2826
|
+
};
|
|
2827
|
+
}, {
|
|
2828
|
+
readonly name: "get_contact_identities";
|
|
2829
|
+
readonly description: "Get all registered external system identities for a contact.";
|
|
2830
|
+
readonly inputSchema: {
|
|
2831
|
+
readonly type: "object";
|
|
2832
|
+
readonly properties: {
|
|
2833
|
+
readonly contact_id: {
|
|
2834
|
+
readonly type: "string";
|
|
2835
|
+
};
|
|
2836
|
+
};
|
|
2837
|
+
readonly required: readonly ["contact_id"];
|
|
2838
|
+
};
|
|
2839
|
+
}, {
|
|
2840
|
+
readonly name: "semantic_search_contacts";
|
|
2841
|
+
readonly description: "Search contacts by capability or context using TF-IDF semantic similarity — finds contacts based on meaning, not just keyword match.";
|
|
2842
|
+
readonly inputSchema: {
|
|
2843
|
+
readonly type: "object";
|
|
2844
|
+
readonly properties: {
|
|
2845
|
+
readonly query: {
|
|
2846
|
+
readonly type: "string";
|
|
2847
|
+
};
|
|
2848
|
+
readonly limit: {
|
|
2849
|
+
readonly type: "number";
|
|
2850
|
+
};
|
|
2851
|
+
};
|
|
2852
|
+
readonly required: readonly ["query"];
|
|
2853
|
+
};
|
|
2854
|
+
}, {
|
|
2855
|
+
readonly name: "embed_all_contacts";
|
|
2856
|
+
readonly description: "Build TF-IDF embeddings for all contacts in the database — run once to enable semantic_search_contacts.";
|
|
2857
|
+
readonly inputSchema: {
|
|
2858
|
+
readonly type: "object";
|
|
2859
|
+
readonly properties: {};
|
|
2860
|
+
};
|
|
2861
|
+
}, {
|
|
2862
|
+
readonly name: "get_relationship_signals";
|
|
2863
|
+
readonly description: "Get relationship health signals for a contact: warming/cooling/ghost/healthy status with reasons.";
|
|
2864
|
+
readonly inputSchema: {
|
|
2865
|
+
readonly type: "object";
|
|
2866
|
+
readonly properties: {
|
|
2867
|
+
readonly contact_id: {
|
|
2868
|
+
readonly type: "string";
|
|
2869
|
+
};
|
|
2870
|
+
};
|
|
2871
|
+
readonly required: readonly ["contact_id"];
|
|
2872
|
+
};
|
|
2873
|
+
}, {
|
|
2874
|
+
readonly name: "get_ghost_contacts";
|
|
2875
|
+
readonly description: "List contacts you haven't been in touch with for 180+ days — relationships at risk of becoming permanently cold.";
|
|
2876
|
+
readonly inputSchema: {
|
|
2877
|
+
readonly type: "object";
|
|
2878
|
+
readonly properties: {};
|
|
2879
|
+
};
|
|
2880
|
+
}, {
|
|
2881
|
+
readonly name: "get_warming_contacts";
|
|
2882
|
+
readonly description: "List contacts with rising interaction frequency — relationships gaining momentum.";
|
|
2883
|
+
readonly inputSchema: {
|
|
2884
|
+
readonly type: "object";
|
|
2885
|
+
readonly properties: {};
|
|
2886
|
+
};
|
|
2887
|
+
}, {
|
|
2888
|
+
readonly name: "recompute_signals";
|
|
2889
|
+
readonly description: "Recompute engagement_status for all contacts based on interaction counts and recency.";
|
|
2890
|
+
readonly inputSchema: {
|
|
2891
|
+
readonly type: "object";
|
|
2892
|
+
readonly properties: {};
|
|
2893
|
+
};
|
|
2894
|
+
}, {
|
|
2895
|
+
readonly name: "get_contact_card";
|
|
2896
|
+
readonly description: "Get a minimal ~50-token contact summary: name, title, company, primary email and phone. Ideal for lists and agent context injection.";
|
|
2897
|
+
readonly inputSchema: {
|
|
2898
|
+
readonly type: "object";
|
|
2899
|
+
readonly properties: {
|
|
2900
|
+
readonly contact_id: {
|
|
2901
|
+
readonly type: "string";
|
|
2902
|
+
};
|
|
2903
|
+
};
|
|
2904
|
+
readonly required: readonly ["contact_id"];
|
|
2905
|
+
};
|
|
2906
|
+
}, {
|
|
2907
|
+
readonly name: "assemble_context";
|
|
2908
|
+
readonly description: "Assemble a multi-contact context package for meetings, deals, outreach, or research. Returns task-relevant briefs for each contact.";
|
|
2909
|
+
readonly inputSchema: {
|
|
2910
|
+
readonly type: "object";
|
|
2911
|
+
readonly properties: {
|
|
2912
|
+
readonly contact_ids: {
|
|
2913
|
+
readonly type: "array";
|
|
2914
|
+
readonly items: {
|
|
2915
|
+
readonly type: "string";
|
|
2916
|
+
};
|
|
2917
|
+
};
|
|
2918
|
+
readonly format: {
|
|
2919
|
+
readonly type: "string";
|
|
2920
|
+
readonly enum: readonly ["meeting_prep", "deal_review", "outreach", "research"];
|
|
2921
|
+
};
|
|
2922
|
+
};
|
|
2923
|
+
readonly required: readonly ["contact_ids"];
|
|
2924
|
+
};
|
|
2925
|
+
}, {
|
|
2926
|
+
readonly name: "parse_email_signature";
|
|
2927
|
+
readonly description: "Parse an email signature text to extract contact fields (name, title, company, phone, email, LinkedIn, website). Does NOT create a contact.";
|
|
2928
|
+
readonly inputSchema: {
|
|
2929
|
+
readonly type: "object";
|
|
2930
|
+
readonly properties: {
|
|
2931
|
+
readonly signature_text: {
|
|
2932
|
+
readonly type: "string";
|
|
2933
|
+
};
|
|
2934
|
+
};
|
|
2935
|
+
readonly required: readonly ["signature_text"];
|
|
2936
|
+
};
|
|
2937
|
+
}, {
|
|
2938
|
+
readonly name: "ingest_email_participants";
|
|
2939
|
+
readonly description: "Find or create contacts from email thread participants (with optional signatures). Returns { created, updated, contacts }.";
|
|
2940
|
+
readonly inputSchema: {
|
|
2941
|
+
readonly type: "object";
|
|
2942
|
+
readonly properties: {
|
|
2943
|
+
readonly participants: {
|
|
2944
|
+
readonly type: "array";
|
|
2945
|
+
readonly items: {
|
|
2946
|
+
readonly type: "object";
|
|
2947
|
+
readonly properties: {
|
|
2948
|
+
readonly name: {
|
|
2949
|
+
readonly type: "string";
|
|
2950
|
+
};
|
|
2951
|
+
readonly email: {
|
|
2952
|
+
readonly type: "string";
|
|
2953
|
+
};
|
|
2954
|
+
readonly signature: {
|
|
2955
|
+
readonly type: "string";
|
|
2956
|
+
};
|
|
2957
|
+
};
|
|
2958
|
+
readonly required: readonly ["email"];
|
|
2959
|
+
};
|
|
2960
|
+
};
|
|
2961
|
+
readonly context: {
|
|
2962
|
+
readonly type: "string";
|
|
2963
|
+
};
|
|
2964
|
+
};
|
|
2965
|
+
readonly required: readonly ["participants"];
|
|
2966
|
+
};
|
|
2967
|
+
}, {
|
|
2968
|
+
readonly name: "ingest_meeting_participants";
|
|
2969
|
+
readonly description: "Ingest meeting attendees: find-or-create contacts and log the meeting as an event. Returns { created, updated, contact_ids }.";
|
|
2970
|
+
readonly inputSchema: {
|
|
2971
|
+
readonly type: "object";
|
|
2972
|
+
readonly properties: {
|
|
2973
|
+
readonly title: {
|
|
2974
|
+
readonly type: "string";
|
|
2975
|
+
};
|
|
2976
|
+
readonly event_date: {
|
|
2977
|
+
readonly type: "string";
|
|
2978
|
+
};
|
|
2979
|
+
readonly attendees: {
|
|
2980
|
+
readonly type: "array";
|
|
2981
|
+
readonly items: {
|
|
2982
|
+
readonly type: "object";
|
|
2983
|
+
readonly properties: {
|
|
2984
|
+
readonly name: {
|
|
2985
|
+
readonly type: "string";
|
|
2986
|
+
};
|
|
2987
|
+
readonly email: {
|
|
2988
|
+
readonly type: "string";
|
|
2989
|
+
};
|
|
2990
|
+
};
|
|
2991
|
+
readonly required: readonly ["name", "email"];
|
|
2992
|
+
};
|
|
2993
|
+
};
|
|
2994
|
+
readonly context: {
|
|
2995
|
+
readonly type: "string";
|
|
2996
|
+
};
|
|
2997
|
+
};
|
|
2998
|
+
readonly required: readonly ["title", "event_date", "attendees"];
|
|
2999
|
+
};
|
|
3000
|
+
}, {
|
|
3001
|
+
readonly name: "get_freshness_score";
|
|
3002
|
+
readonly description: "Get a per-field freshness and confidence breakdown for a contact — shows which fields are verified, stale, or missing.";
|
|
3003
|
+
readonly inputSchema: {
|
|
3004
|
+
readonly type: "object";
|
|
3005
|
+
readonly properties: {
|
|
3006
|
+
readonly contact_id: {
|
|
3007
|
+
readonly type: "string";
|
|
3008
|
+
};
|
|
3009
|
+
};
|
|
3010
|
+
readonly required: readonly ["contact_id"];
|
|
3011
|
+
};
|
|
3012
|
+
}, {
|
|
3013
|
+
readonly name: "get_stale_contacts";
|
|
3014
|
+
readonly description: "List contacts with low data completeness scores (below threshold). Default threshold: 40.";
|
|
3015
|
+
readonly inputSchema: {
|
|
3016
|
+
readonly type: "object";
|
|
3017
|
+
readonly properties: {
|
|
3018
|
+
readonly threshold: {
|
|
3019
|
+
readonly type: "number";
|
|
3020
|
+
readonly description: "Score threshold 0-100 (default 40)";
|
|
3021
|
+
};
|
|
3022
|
+
};
|
|
3023
|
+
};
|
|
3024
|
+
}, {
|
|
3025
|
+
readonly name: "mark_field_verified";
|
|
3026
|
+
readonly description: "Mark a specific contact field as verified by a human or trusted source.";
|
|
3027
|
+
readonly inputSchema: {
|
|
3028
|
+
readonly type: "object";
|
|
3029
|
+
readonly properties: {
|
|
3030
|
+
readonly contact_id: {
|
|
3031
|
+
readonly type: "string";
|
|
3032
|
+
};
|
|
3033
|
+
readonly field_name: {
|
|
3034
|
+
readonly type: "string";
|
|
3035
|
+
};
|
|
3036
|
+
readonly source: {
|
|
3037
|
+
readonly type: "string";
|
|
3038
|
+
};
|
|
3039
|
+
};
|
|
3040
|
+
readonly required: readonly ["contact_id", "field_name"];
|
|
3041
|
+
};
|
|
3042
|
+
}, {
|
|
3043
|
+
readonly name: "add_org_chart_edge";
|
|
3044
|
+
readonly description: "Add a relationship edge to the org chart for a company (reports_to, manages, peer, collaborates_with).";
|
|
3045
|
+
readonly inputSchema: {
|
|
3046
|
+
readonly type: "object";
|
|
3047
|
+
readonly properties: {
|
|
3048
|
+
readonly company_id: {
|
|
3049
|
+
readonly type: "string";
|
|
3050
|
+
};
|
|
3051
|
+
readonly contact_a_id: {
|
|
3052
|
+
readonly type: "string";
|
|
3053
|
+
};
|
|
3054
|
+
readonly contact_b_id: {
|
|
3055
|
+
readonly type: "string";
|
|
3056
|
+
};
|
|
3057
|
+
readonly edge_type: {
|
|
3058
|
+
readonly type: "string";
|
|
3059
|
+
readonly enum: readonly ["reports_to", "manages", "collaborates_with", "peer"];
|
|
3060
|
+
};
|
|
3061
|
+
};
|
|
3062
|
+
readonly required: readonly ["company_id", "contact_a_id", "contact_b_id", "edge_type"];
|
|
3063
|
+
};
|
|
3064
|
+
}, {
|
|
3065
|
+
readonly name: "get_org_chart";
|
|
3066
|
+
readonly description: "Get the org chart for a company as a list of directed edges with contact names.";
|
|
3067
|
+
readonly inputSchema: {
|
|
3068
|
+
readonly type: "object";
|
|
3069
|
+
readonly properties: {
|
|
3070
|
+
readonly company_id: {
|
|
3071
|
+
readonly type: "string";
|
|
3072
|
+
};
|
|
3073
|
+
};
|
|
3074
|
+
readonly required: readonly ["company_id"];
|
|
3075
|
+
};
|
|
3076
|
+
}, {
|
|
3077
|
+
readonly name: "set_deal_contact_role";
|
|
3078
|
+
readonly description: "Assign a contact a buying committee role in a deal (economic_buyer, technical_evaluator, champion, blocker, influencer, user, sponsor, other).";
|
|
3079
|
+
readonly inputSchema: {
|
|
3080
|
+
readonly type: "object";
|
|
3081
|
+
readonly properties: {
|
|
3082
|
+
readonly deal_id: {
|
|
3083
|
+
readonly type: "string";
|
|
3084
|
+
};
|
|
3085
|
+
readonly contact_id: {
|
|
3086
|
+
readonly type: "string";
|
|
3087
|
+
};
|
|
3088
|
+
readonly account_role: {
|
|
3089
|
+
readonly type: "string";
|
|
3090
|
+
readonly enum: readonly ["economic_buyer", "technical_evaluator", "champion", "blocker", "influencer", "user", "sponsor", "other"];
|
|
3091
|
+
};
|
|
3092
|
+
};
|
|
3093
|
+
readonly required: readonly ["deal_id", "contact_id", "account_role"];
|
|
3094
|
+
};
|
|
3095
|
+
}, {
|
|
3096
|
+
readonly name: "get_deal_team";
|
|
3097
|
+
readonly description: "Get the full buying committee for a deal with contact names and roles.";
|
|
3098
|
+
readonly inputSchema: {
|
|
3099
|
+
readonly type: "object";
|
|
3100
|
+
readonly properties: {
|
|
3101
|
+
readonly deal_id: {
|
|
3102
|
+
readonly type: "string";
|
|
3103
|
+
};
|
|
3104
|
+
};
|
|
3105
|
+
readonly required: readonly ["deal_id"];
|
|
3106
|
+
};
|
|
3107
|
+
}, {
|
|
3108
|
+
readonly name: "get_coverage_gaps";
|
|
3109
|
+
readonly description: "Identify coverage gaps in a company account — missing economic buyer, technical evaluator, or org chart relationships.";
|
|
3110
|
+
readonly inputSchema: {
|
|
3111
|
+
readonly type: "object";
|
|
3112
|
+
readonly properties: {
|
|
3113
|
+
readonly company_id: {
|
|
3114
|
+
readonly type: "string";
|
|
3115
|
+
};
|
|
3116
|
+
};
|
|
3117
|
+
readonly required: readonly ["company_id"];
|
|
3118
|
+
};
|
|
3119
|
+
}, {
|
|
3120
|
+
readonly name: "get_recent_contact_events";
|
|
3121
|
+
readonly description: "Polling fallback for change events — returns recent activity log entries, optionally filtered by event type or date.";
|
|
3122
|
+
readonly inputSchema: {
|
|
3123
|
+
readonly type: "object";
|
|
3124
|
+
readonly properties: {
|
|
3125
|
+
readonly since: {
|
|
3126
|
+
readonly type: "string";
|
|
3127
|
+
readonly description: "ISO 8601 datetime — only events after this date";
|
|
3128
|
+
};
|
|
3129
|
+
readonly event_types: {
|
|
3130
|
+
readonly type: "array";
|
|
3131
|
+
readonly items: {
|
|
3132
|
+
readonly type: "string";
|
|
3133
|
+
};
|
|
3134
|
+
};
|
|
3135
|
+
};
|
|
3136
|
+
};
|
|
3137
|
+
}, {
|
|
3138
|
+
readonly name: "set_contact_photo";
|
|
3139
|
+
readonly description: "Set a contact's profile photo. Provide either a local file path or base64-encoded image data (with or without data URI prefix). Stores image in ~/.hasna/contacts/images/ and updates avatar_url. Supported formats: jpg, png, gif, webp, svg, avif.";
|
|
3140
|
+
readonly inputSchema: {
|
|
3141
|
+
readonly type: "object";
|
|
3142
|
+
readonly properties: {
|
|
3143
|
+
readonly contact_id: {
|
|
3144
|
+
readonly type: "string";
|
|
3145
|
+
};
|
|
3146
|
+
readonly image: {
|
|
3147
|
+
readonly type: "string";
|
|
3148
|
+
readonly description: "File path (e.g. /tmp/photo.jpg) OR base64 data (e.g. data:image/png;base64,...) OR raw base64 string";
|
|
3149
|
+
};
|
|
3150
|
+
readonly format: {
|
|
3151
|
+
readonly type: "string";
|
|
3152
|
+
readonly description: "Image format hint when using raw base64 (jpg, png, webp). Not needed for file paths or data URIs.";
|
|
3153
|
+
};
|
|
3154
|
+
};
|
|
3155
|
+
readonly required: readonly ["contact_id", "image"];
|
|
3156
|
+
};
|
|
3157
|
+
}, {
|
|
3158
|
+
readonly name: "get_contact_photo";
|
|
3159
|
+
readonly description: "Get a contact's profile photo as base64 data URI. Returns null if no photo is set.";
|
|
3160
|
+
readonly inputSchema: {
|
|
3161
|
+
readonly type: "object";
|
|
3162
|
+
readonly properties: {
|
|
3163
|
+
readonly contact_id: {
|
|
3164
|
+
readonly type: "string";
|
|
3165
|
+
};
|
|
3166
|
+
};
|
|
3167
|
+
readonly required: readonly ["contact_id"];
|
|
3168
|
+
};
|
|
3169
|
+
}, {
|
|
3170
|
+
readonly name: "delete_contact_photo";
|
|
3171
|
+
readonly description: "Remove a contact's profile photo.";
|
|
3172
|
+
readonly inputSchema: {
|
|
3173
|
+
readonly type: "object";
|
|
3174
|
+
readonly properties: {
|
|
3175
|
+
readonly contact_id: {
|
|
3176
|
+
readonly type: "string";
|
|
3177
|
+
};
|
|
3178
|
+
};
|
|
3179
|
+
readonly required: readonly ["contact_id"];
|
|
3180
|
+
};
|
|
3181
|
+
}, {
|
|
3182
|
+
readonly name: "set_company_logo";
|
|
3183
|
+
readonly description: "Set a company's logo image. Provide either a local file path or base64-encoded image data. Stores image in ~/.hasna/contacts/images/ and updates logo_url.";
|
|
3184
|
+
readonly inputSchema: {
|
|
3185
|
+
readonly type: "object";
|
|
3186
|
+
readonly properties: {
|
|
3187
|
+
readonly company_id: {
|
|
3188
|
+
readonly type: "string";
|
|
3189
|
+
};
|
|
3190
|
+
readonly image: {
|
|
3191
|
+
readonly type: "string";
|
|
3192
|
+
readonly description: "File path or base64 data";
|
|
3193
|
+
};
|
|
3194
|
+
readonly format: {
|
|
3195
|
+
readonly type: "string";
|
|
3196
|
+
readonly description: "Image format hint for raw base64";
|
|
3197
|
+
};
|
|
3198
|
+
};
|
|
3199
|
+
readonly required: readonly ["company_id", "image"];
|
|
3200
|
+
};
|
|
3201
|
+
}, {
|
|
3202
|
+
readonly name: "get_company_logo";
|
|
3203
|
+
readonly description: "Get a company's logo as base64 data URI.";
|
|
3204
|
+
readonly inputSchema: {
|
|
3205
|
+
readonly type: "object";
|
|
3206
|
+
readonly properties: {
|
|
3207
|
+
readonly company_id: {
|
|
3208
|
+
readonly type: "string";
|
|
3209
|
+
};
|
|
3210
|
+
};
|
|
3211
|
+
readonly required: readonly ["company_id"];
|
|
3212
|
+
};
|
|
3213
|
+
}, {
|
|
3214
|
+
readonly name: "delete_company_logo";
|
|
3215
|
+
readonly description: "Remove a company's logo image.";
|
|
3216
|
+
readonly inputSchema: {
|
|
3217
|
+
readonly type: "object";
|
|
3218
|
+
readonly properties: {
|
|
3219
|
+
readonly company_id: {
|
|
3220
|
+
readonly type: "string";
|
|
3221
|
+
};
|
|
3222
|
+
};
|
|
3223
|
+
readonly required: readonly ["company_id"];
|
|
3224
|
+
};
|
|
3225
|
+
}, {
|
|
3226
|
+
readonly name: "set_sensitivity";
|
|
3227
|
+
readonly description: "Set a contact's sensitivity level (normal, confidential, restricted). Restricted contacts are hidden from list/search unless explicitly requested.";
|
|
3228
|
+
readonly inputSchema: {
|
|
3229
|
+
readonly type: "object";
|
|
3230
|
+
readonly properties: {
|
|
3231
|
+
readonly contact_id: {
|
|
3232
|
+
readonly type: "string";
|
|
3233
|
+
};
|
|
3234
|
+
readonly sensitivity: {
|
|
3235
|
+
readonly type: "string";
|
|
3236
|
+
readonly enum: readonly ["normal", "confidential", "restricted"];
|
|
3237
|
+
};
|
|
3238
|
+
};
|
|
3239
|
+
readonly required: readonly ["contact_id", "sensitivity"];
|
|
3240
|
+
};
|
|
3241
|
+
}, {
|
|
3242
|
+
readonly name: "vault_init";
|
|
3243
|
+
readonly description: "Initialize the encrypted document vault with a passphrase. Must be called before storing documents or health data.";
|
|
3244
|
+
readonly inputSchema: {
|
|
3245
|
+
readonly type: "object";
|
|
3246
|
+
readonly properties: {
|
|
3247
|
+
readonly passphrase: {
|
|
3248
|
+
readonly type: "string";
|
|
3249
|
+
};
|
|
3250
|
+
};
|
|
3251
|
+
readonly required: readonly ["passphrase"];
|
|
3252
|
+
};
|
|
3253
|
+
}, {
|
|
3254
|
+
readonly name: "vault_unlock";
|
|
3255
|
+
readonly description: "Unlock the vault for this session with a passphrase.";
|
|
3256
|
+
readonly inputSchema: {
|
|
3257
|
+
readonly type: "object";
|
|
3258
|
+
readonly properties: {
|
|
3259
|
+
readonly passphrase: {
|
|
3260
|
+
readonly type: "string";
|
|
3261
|
+
};
|
|
3262
|
+
};
|
|
3263
|
+
readonly required: readonly ["passphrase"];
|
|
3264
|
+
};
|
|
3265
|
+
}, {
|
|
3266
|
+
readonly name: "vault_lock";
|
|
3267
|
+
readonly description: "Lock the vault, clearing the encryption key from memory.";
|
|
3268
|
+
readonly inputSchema: {
|
|
3269
|
+
readonly type: "object";
|
|
3270
|
+
readonly properties: {};
|
|
3271
|
+
};
|
|
3272
|
+
}, {
|
|
3273
|
+
readonly name: "vault_status";
|
|
3274
|
+
readonly description: "Check vault initialization and lock status.";
|
|
3275
|
+
readonly inputSchema: {
|
|
3276
|
+
readonly type: "object";
|
|
3277
|
+
readonly properties: {};
|
|
3278
|
+
};
|
|
3279
|
+
}, {
|
|
3280
|
+
readonly name: "add_document";
|
|
3281
|
+
readonly description: "Store a document for a contact (passport, tax_id, medical_record, etc.). Text values are encrypted; file attachments are stored plain so agents can read them. Vault must be unlocked.";
|
|
3282
|
+
readonly inputSchema: {
|
|
3283
|
+
readonly type: "object";
|
|
3284
|
+
readonly properties: {
|
|
3285
|
+
readonly contact_id: {
|
|
3286
|
+
readonly type: "string";
|
|
3287
|
+
};
|
|
3288
|
+
readonly doc_type: {
|
|
3289
|
+
readonly type: "string";
|
|
3290
|
+
readonly enum: readonly ["passport", "national_id", "tax_id", "ssn", "drivers_license", "bank_account", "visa", "insurance", "contract", "certificate", "medical_record", "prescription", "allergy_list", "vaccination", "blood_type", "health_insurance", "medical_condition", "emergency_contact_medical", "other"];
|
|
3291
|
+
};
|
|
3292
|
+
readonly label: {
|
|
3293
|
+
readonly type: "string";
|
|
3294
|
+
};
|
|
3295
|
+
readonly value: {
|
|
3296
|
+
readonly type: "string";
|
|
3297
|
+
readonly description: "Plaintext value (will be encrypted in DB)";
|
|
3298
|
+
};
|
|
3299
|
+
readonly file_path: {
|
|
3300
|
+
readonly type: "string";
|
|
3301
|
+
readonly description: "File to attach — stored PLAIN in ~/.hasna/contacts/documents/ for agent access";
|
|
3302
|
+
};
|
|
3303
|
+
readonly metadata: {
|
|
3304
|
+
readonly type: "object";
|
|
3305
|
+
};
|
|
3306
|
+
readonly expires_at: {
|
|
3307
|
+
readonly type: "string";
|
|
3308
|
+
};
|
|
3309
|
+
};
|
|
3310
|
+
readonly required: readonly ["contact_id", "doc_type", "value"];
|
|
3311
|
+
};
|
|
3312
|
+
}, {
|
|
3313
|
+
readonly name: "list_documents";
|
|
3314
|
+
readonly description: "List documents for a contact (metadata only — no decryption needed). Returns file_path for attachments so agents can read them directly.";
|
|
3315
|
+
readonly inputSchema: {
|
|
3316
|
+
readonly type: "object";
|
|
3317
|
+
readonly properties: {
|
|
3318
|
+
readonly contact_id: {
|
|
3319
|
+
readonly type: "string";
|
|
3320
|
+
};
|
|
3321
|
+
};
|
|
3322
|
+
readonly required: readonly ["contact_id"];
|
|
3323
|
+
};
|
|
3324
|
+
}, {
|
|
3325
|
+
readonly name: "get_document";
|
|
3326
|
+
readonly description: "Get a document with decrypted value and file_path. Vault must be unlocked for the text value; file is always accessible.";
|
|
3327
|
+
readonly inputSchema: {
|
|
3328
|
+
readonly type: "object";
|
|
3329
|
+
readonly properties: {
|
|
3330
|
+
readonly document_id: {
|
|
3331
|
+
readonly type: "string";
|
|
3332
|
+
};
|
|
3333
|
+
};
|
|
3334
|
+
readonly required: readonly ["document_id"];
|
|
3335
|
+
};
|
|
3336
|
+
}, {
|
|
3337
|
+
readonly name: "get_document_file";
|
|
3338
|
+
readonly description: "Get the plain file path for a document attachment. Agents can read this file directly — it is NOT encrypted. Returns null if no file attached.";
|
|
3339
|
+
readonly inputSchema: {
|
|
3340
|
+
readonly type: "object";
|
|
3341
|
+
readonly properties: {
|
|
3342
|
+
readonly document_id: {
|
|
3343
|
+
readonly type: "string";
|
|
3344
|
+
};
|
|
3345
|
+
};
|
|
3346
|
+
readonly required: readonly ["document_id"];
|
|
3347
|
+
};
|
|
3348
|
+
}, {
|
|
3349
|
+
readonly name: "delete_document";
|
|
3350
|
+
readonly description: "Delete a document and its file attachment.";
|
|
3351
|
+
readonly inputSchema: {
|
|
3352
|
+
readonly type: "object";
|
|
3353
|
+
readonly properties: {
|
|
3354
|
+
readonly document_id: {
|
|
3355
|
+
readonly type: "string";
|
|
3356
|
+
};
|
|
3357
|
+
};
|
|
3358
|
+
readonly required: readonly ["document_id"];
|
|
3359
|
+
};
|
|
3360
|
+
}, {
|
|
3361
|
+
readonly name: "scan_document";
|
|
3362
|
+
readonly description: "Scan a document image using AI vision (OpenAI GPT-4o) to extract structured data. Optionally auto-save to vault.";
|
|
3363
|
+
readonly inputSchema: {
|
|
3364
|
+
readonly type: "object";
|
|
3365
|
+
readonly properties: {
|
|
3366
|
+
readonly image: {
|
|
3367
|
+
readonly type: "string";
|
|
3368
|
+
readonly description: "File path or base64 image data";
|
|
3369
|
+
};
|
|
3370
|
+
readonly doc_type: {
|
|
3371
|
+
readonly type: "string";
|
|
3372
|
+
readonly description: "Hint: passport, national_id, drivers_license, etc.";
|
|
3373
|
+
};
|
|
3374
|
+
readonly contact_id: {
|
|
3375
|
+
readonly type: "string";
|
|
3376
|
+
readonly description: "Contact to associate scanned document with";
|
|
3377
|
+
};
|
|
3378
|
+
readonly auto_save: {
|
|
3379
|
+
readonly type: "boolean";
|
|
3380
|
+
readonly description: "Automatically save extracted data as a vault document";
|
|
3381
|
+
};
|
|
3382
|
+
};
|
|
3383
|
+
readonly required: readonly ["image"];
|
|
3384
|
+
};
|
|
3385
|
+
}, {
|
|
3386
|
+
readonly name: "set_health_data";
|
|
3387
|
+
readonly description: "Set or update health data for a contact. Vault must be unlocked.";
|
|
3388
|
+
readonly inputSchema: {
|
|
3389
|
+
readonly type: "object";
|
|
3390
|
+
readonly properties: {
|
|
3391
|
+
readonly contact_id: {
|
|
3392
|
+
readonly type: "string";
|
|
3393
|
+
};
|
|
3394
|
+
readonly blood_type: {
|
|
3395
|
+
readonly type: "string";
|
|
3396
|
+
};
|
|
3397
|
+
readonly allergies: {
|
|
3398
|
+
readonly type: "array";
|
|
3399
|
+
readonly items: {
|
|
3400
|
+
readonly type: "string";
|
|
3401
|
+
};
|
|
3402
|
+
};
|
|
3403
|
+
readonly medical_conditions: {
|
|
3404
|
+
readonly type: "array";
|
|
3405
|
+
readonly items: {
|
|
3406
|
+
readonly type: "string";
|
|
3407
|
+
};
|
|
3408
|
+
};
|
|
3409
|
+
readonly medications: {
|
|
3410
|
+
readonly type: "array";
|
|
3411
|
+
readonly items: {
|
|
3412
|
+
readonly type: "string";
|
|
3413
|
+
};
|
|
3414
|
+
};
|
|
3415
|
+
readonly emergency_contacts: {
|
|
3416
|
+
readonly type: "array";
|
|
3417
|
+
readonly items: {
|
|
3418
|
+
readonly type: "object";
|
|
3419
|
+
readonly properties: {
|
|
3420
|
+
readonly name: {
|
|
3421
|
+
readonly type: "string";
|
|
3422
|
+
};
|
|
3423
|
+
readonly phone: {
|
|
3424
|
+
readonly type: "string";
|
|
3425
|
+
};
|
|
3426
|
+
readonly relationship: {
|
|
3427
|
+
readonly type: "string";
|
|
3428
|
+
};
|
|
3429
|
+
};
|
|
3430
|
+
readonly required: readonly ["name", "phone", "relationship"];
|
|
3431
|
+
};
|
|
3432
|
+
};
|
|
3433
|
+
readonly health_insurance_provider: {
|
|
3434
|
+
readonly type: "string";
|
|
3435
|
+
};
|
|
3436
|
+
readonly health_insurance_id: {
|
|
3437
|
+
readonly type: "string";
|
|
3438
|
+
};
|
|
3439
|
+
readonly primary_physician: {
|
|
3440
|
+
readonly type: "string";
|
|
3441
|
+
};
|
|
3442
|
+
readonly primary_physician_phone: {
|
|
3443
|
+
readonly type: "string";
|
|
3444
|
+
};
|
|
3445
|
+
readonly organ_donor: {
|
|
3446
|
+
readonly type: "boolean";
|
|
3447
|
+
};
|
|
3448
|
+
readonly notes: {
|
|
3449
|
+
readonly type: "string";
|
|
3450
|
+
};
|
|
3451
|
+
};
|
|
3452
|
+
readonly required: readonly ["contact_id"];
|
|
3453
|
+
};
|
|
3454
|
+
}, {
|
|
3455
|
+
readonly name: "get_health_data";
|
|
3456
|
+
readonly description: "Get health data for a contact. Vault must be unlocked.";
|
|
3457
|
+
readonly inputSchema: {
|
|
3458
|
+
readonly type: "object";
|
|
3459
|
+
readonly properties: {
|
|
3460
|
+
readonly contact_id: {
|
|
3461
|
+
readonly type: "string";
|
|
3462
|
+
};
|
|
3463
|
+
};
|
|
3464
|
+
readonly required: readonly ["contact_id"];
|
|
3465
|
+
};
|
|
3466
|
+
}, {
|
|
3467
|
+
readonly name: "delete_health_data";
|
|
3468
|
+
readonly description: "Delete all health data for a contact.";
|
|
3469
|
+
readonly inputSchema: {
|
|
3470
|
+
readonly type: "object";
|
|
3471
|
+
readonly properties: {
|
|
3472
|
+
readonly contact_id: {
|
|
3473
|
+
readonly type: "string";
|
|
3474
|
+
};
|
|
3475
|
+
};
|
|
3476
|
+
readonly required: readonly ["contact_id"];
|
|
3477
|
+
};
|
|
3478
|
+
}, {
|
|
3479
|
+
readonly name: "send_feedback";
|
|
3480
|
+
readonly description: "Send feedback about this service";
|
|
3481
|
+
readonly inputSchema: {
|
|
3482
|
+
readonly type: "object";
|
|
3483
|
+
readonly properties: {
|
|
3484
|
+
readonly message: {
|
|
3485
|
+
readonly type: "string";
|
|
3486
|
+
};
|
|
3487
|
+
readonly email: {
|
|
3488
|
+
readonly type: "string";
|
|
3489
|
+
};
|
|
3490
|
+
readonly category: {
|
|
3491
|
+
readonly type: "string";
|
|
3492
|
+
readonly enum: readonly ["bug", "feature", "general"];
|
|
3493
|
+
};
|
|
3494
|
+
};
|
|
3495
|
+
readonly required: readonly ["message"];
|
|
3496
|
+
};
|
|
3497
|
+
}, {
|
|
3498
|
+
readonly name: "register_agent";
|
|
3499
|
+
readonly description: "Register an agent session. Returns agent_id. Auto-triggers a heartbeat.";
|
|
3500
|
+
readonly inputSchema: {
|
|
3501
|
+
readonly type: "object";
|
|
3502
|
+
readonly properties: {
|
|
3503
|
+
readonly name: {
|
|
3504
|
+
readonly type: "string";
|
|
3505
|
+
};
|
|
3506
|
+
readonly session_id: {
|
|
3507
|
+
readonly type: "string";
|
|
3508
|
+
};
|
|
3509
|
+
};
|
|
3510
|
+
readonly required: readonly ["name"];
|
|
3511
|
+
};
|
|
3512
|
+
}, {
|
|
3513
|
+
readonly name: "heartbeat";
|
|
3514
|
+
readonly description: "Update last_seen_at to signal agent is active.";
|
|
3515
|
+
readonly inputSchema: {
|
|
3516
|
+
readonly type: "object";
|
|
3517
|
+
readonly properties: {
|
|
3518
|
+
readonly agent_id: {
|
|
3519
|
+
readonly type: "string";
|
|
3520
|
+
};
|
|
3521
|
+
};
|
|
3522
|
+
readonly required: readonly ["agent_id"];
|
|
3523
|
+
};
|
|
3524
|
+
}, {
|
|
3525
|
+
readonly name: "set_focus";
|
|
3526
|
+
readonly description: "Set active project context for this agent session.";
|
|
3527
|
+
readonly inputSchema: {
|
|
3528
|
+
readonly type: "object";
|
|
3529
|
+
readonly properties: {
|
|
3530
|
+
readonly agent_id: {
|
|
3531
|
+
readonly type: "string";
|
|
3532
|
+
};
|
|
3533
|
+
readonly project_id: {
|
|
3534
|
+
readonly type: "string";
|
|
3535
|
+
};
|
|
3536
|
+
};
|
|
3537
|
+
readonly required: readonly ["agent_id"];
|
|
3538
|
+
};
|
|
3539
|
+
}, {
|
|
3540
|
+
readonly name: "list_agents";
|
|
3541
|
+
readonly description: "List all registered agents.";
|
|
3542
|
+
readonly inputSchema: {
|
|
3543
|
+
readonly type: "object";
|
|
3544
|
+
readonly properties: {};
|
|
3545
|
+
};
|
|
3546
|
+
}, {
|
|
3547
|
+
readonly name: "create_audience";
|
|
3548
|
+
readonly description: "Create an audience segment (hasna.audience.v1): predicates over contact tags, attributes (columns or custom fields), and group membership. match: all|any. consent_policy: opt_in|opt_out|transactional|none.";
|
|
3549
|
+
readonly inputSchema: {
|
|
3550
|
+
readonly type: "object";
|
|
3551
|
+
readonly properties: {
|
|
3552
|
+
readonly audience_id: {
|
|
3553
|
+
readonly type: "string";
|
|
3554
|
+
readonly description: "Lowercase dashed slug, e.g. beta-testers";
|
|
3555
|
+
};
|
|
3556
|
+
readonly name: {
|
|
3557
|
+
readonly type: "string";
|
|
3558
|
+
};
|
|
3559
|
+
readonly match: {
|
|
3560
|
+
readonly type: "string";
|
|
3561
|
+
readonly enum: readonly ["all", "any"];
|
|
3562
|
+
};
|
|
3563
|
+
readonly predicates: {
|
|
3564
|
+
readonly type: "array";
|
|
3565
|
+
readonly items: {
|
|
3566
|
+
readonly type: "object";
|
|
3567
|
+
readonly properties: {
|
|
3568
|
+
readonly kind: {
|
|
3569
|
+
readonly type: "string";
|
|
3570
|
+
readonly enum: readonly ["tag", "attribute", "group"];
|
|
3571
|
+
};
|
|
3572
|
+
readonly key: {
|
|
3573
|
+
readonly type: "string";
|
|
3574
|
+
readonly description: "Attribute key (required for attribute predicates)";
|
|
3575
|
+
};
|
|
3576
|
+
readonly op: {
|
|
3577
|
+
readonly type: "string";
|
|
3578
|
+
readonly enum: readonly ["eq", "neq", "in", "not_in", "exists", "not_exists"];
|
|
3579
|
+
};
|
|
3580
|
+
readonly value: {
|
|
3581
|
+
readonly description: "Value for eq/neq";
|
|
3582
|
+
};
|
|
3583
|
+
readonly values: {
|
|
3584
|
+
readonly type: "array";
|
|
3585
|
+
readonly description: "Values for in/not_in";
|
|
3586
|
+
};
|
|
3587
|
+
};
|
|
3588
|
+
readonly required: readonly ["kind"];
|
|
3589
|
+
};
|
|
3590
|
+
};
|
|
3591
|
+
readonly consent_policy: {
|
|
3592
|
+
readonly type: "string";
|
|
3593
|
+
readonly enum: readonly ["opt_in", "opt_out", "transactional", "none"];
|
|
3594
|
+
};
|
|
3595
|
+
};
|
|
3596
|
+
readonly required: readonly ["audience_id", "name", "predicates"];
|
|
3597
|
+
};
|
|
3598
|
+
}, {
|
|
3599
|
+
readonly name: "get_audience";
|
|
3600
|
+
readonly description: "Get an audience by id or slug as its hasna.audience.v1 contract document.";
|
|
3601
|
+
readonly inputSchema: {
|
|
3602
|
+
readonly type: "object";
|
|
3603
|
+
readonly properties: {
|
|
3604
|
+
readonly id: {
|
|
3605
|
+
readonly type: "string";
|
|
3606
|
+
};
|
|
3607
|
+
};
|
|
3608
|
+
readonly required: readonly ["id"];
|
|
3609
|
+
};
|
|
3610
|
+
}, {
|
|
3611
|
+
readonly name: "list_audiences";
|
|
3612
|
+
readonly description: "List all audience segments.";
|
|
3613
|
+
readonly inputSchema: {
|
|
3614
|
+
readonly type: "object";
|
|
3615
|
+
readonly properties: {};
|
|
3616
|
+
};
|
|
3617
|
+
}, {
|
|
3618
|
+
readonly name: "update_audience";
|
|
3619
|
+
readonly description: "Update an audience's name, match mode, predicates, or consent policy.";
|
|
3620
|
+
readonly inputSchema: {
|
|
3621
|
+
readonly type: "object";
|
|
3622
|
+
readonly properties: {
|
|
3623
|
+
readonly id: {
|
|
3624
|
+
readonly type: "string";
|
|
3625
|
+
};
|
|
3626
|
+
readonly name: {
|
|
3627
|
+
readonly type: "string";
|
|
3628
|
+
};
|
|
3629
|
+
readonly match: {
|
|
3630
|
+
readonly type: "string";
|
|
3631
|
+
readonly enum: readonly ["all", "any"];
|
|
3632
|
+
};
|
|
3633
|
+
readonly predicates: {
|
|
3634
|
+
readonly type: "array";
|
|
3635
|
+
readonly items: {
|
|
3636
|
+
readonly type: "object";
|
|
3637
|
+
readonly properties: {
|
|
3638
|
+
readonly kind: {
|
|
3639
|
+
readonly type: "string";
|
|
3640
|
+
readonly enum: readonly ["tag", "attribute", "group"];
|
|
3641
|
+
};
|
|
3642
|
+
readonly key: {
|
|
3643
|
+
readonly type: "string";
|
|
3644
|
+
readonly description: "Attribute key (required for attribute predicates)";
|
|
3645
|
+
};
|
|
3646
|
+
readonly op: {
|
|
3647
|
+
readonly type: "string";
|
|
3648
|
+
readonly enum: readonly ["eq", "neq", "in", "not_in", "exists", "not_exists"];
|
|
3649
|
+
};
|
|
3650
|
+
readonly value: {
|
|
3651
|
+
readonly description: "Value for eq/neq";
|
|
3652
|
+
};
|
|
3653
|
+
readonly values: {
|
|
3654
|
+
readonly type: "array";
|
|
3655
|
+
readonly description: "Values for in/not_in";
|
|
3656
|
+
};
|
|
3657
|
+
};
|
|
3658
|
+
readonly required: readonly ["kind"];
|
|
3659
|
+
};
|
|
3660
|
+
};
|
|
3661
|
+
readonly consent_policy: {
|
|
3662
|
+
readonly type: "string";
|
|
3663
|
+
readonly enum: readonly ["opt_in", "opt_out", "transactional", "none"];
|
|
3664
|
+
};
|
|
3665
|
+
};
|
|
3666
|
+
readonly required: readonly ["id"];
|
|
3667
|
+
};
|
|
3668
|
+
}, {
|
|
3669
|
+
readonly name: "delete_audience";
|
|
3670
|
+
readonly description: "Delete an audience segment by id or slug.";
|
|
3671
|
+
readonly inputSchema: {
|
|
3672
|
+
readonly type: "object";
|
|
3673
|
+
readonly properties: {
|
|
3674
|
+
readonly id: {
|
|
3675
|
+
readonly type: "string";
|
|
3676
|
+
};
|
|
3677
|
+
};
|
|
3678
|
+
readonly required: readonly ["id"];
|
|
3679
|
+
};
|
|
3680
|
+
}, {
|
|
3681
|
+
readonly name: "resolve_audience";
|
|
3682
|
+
readonly description: "Resolve an audience to per-channel recipients honoring consent policy, per-channel consent, suppressions, and do_not_contact. Returns recipients plus exclusions with reasons.";
|
|
3683
|
+
readonly inputSchema: {
|
|
3684
|
+
readonly type: "object";
|
|
3685
|
+
readonly properties: {
|
|
3686
|
+
readonly id: {
|
|
3687
|
+
readonly type: "string";
|
|
3688
|
+
};
|
|
3689
|
+
readonly channel: {
|
|
3690
|
+
readonly type: "string";
|
|
3691
|
+
readonly enum: readonly ["email", "telegram", "sms"];
|
|
3692
|
+
};
|
|
3693
|
+
};
|
|
3694
|
+
readonly required: readonly ["id", "channel"];
|
|
3695
|
+
};
|
|
3696
|
+
}, {
|
|
3697
|
+
readonly name: "set_contact_consent";
|
|
3698
|
+
readonly description: "Set a contact's subscription consent for a channel (opt_in, opt_out, unknown).";
|
|
3699
|
+
readonly inputSchema: {
|
|
3700
|
+
readonly type: "object";
|
|
3701
|
+
readonly properties: {
|
|
3702
|
+
readonly contact_id: {
|
|
3703
|
+
readonly type: "string";
|
|
3704
|
+
};
|
|
3705
|
+
readonly channel: {
|
|
3706
|
+
readonly type: "string";
|
|
3707
|
+
readonly enum: readonly ["email", "telegram", "sms"];
|
|
3708
|
+
};
|
|
3709
|
+
readonly status: {
|
|
3710
|
+
readonly type: "string";
|
|
3711
|
+
readonly enum: readonly ["opt_in", "opt_out", "unknown"];
|
|
3712
|
+
};
|
|
3713
|
+
readonly source: {
|
|
3714
|
+
readonly type: "string";
|
|
3715
|
+
readonly description: "Where the consent signal came from";
|
|
3716
|
+
};
|
|
3717
|
+
};
|
|
3718
|
+
readonly required: readonly ["contact_id", "channel", "status"];
|
|
3719
|
+
};
|
|
3720
|
+
}, {
|
|
3721
|
+
readonly name: "get_contact_consent";
|
|
3722
|
+
readonly description: "Get a contact's consent status for all channels.";
|
|
3723
|
+
readonly inputSchema: {
|
|
3724
|
+
readonly type: "object";
|
|
3725
|
+
readonly properties: {
|
|
3726
|
+
readonly contact_id: {
|
|
3727
|
+
readonly type: "string";
|
|
3728
|
+
};
|
|
3729
|
+
};
|
|
3730
|
+
readonly required: readonly ["contact_id"];
|
|
3731
|
+
};
|
|
3732
|
+
}, {
|
|
3733
|
+
readonly name: "suppress_address";
|
|
3734
|
+
readonly description: "Suppress an address on a channel (unsubscribe/bounce/complaint). Also records an opt-out for the linked contact when contact_id is provided.";
|
|
3735
|
+
readonly inputSchema: {
|
|
3736
|
+
readonly type: "object";
|
|
3737
|
+
readonly properties: {
|
|
3738
|
+
readonly channel: {
|
|
3739
|
+
readonly type: "string";
|
|
3740
|
+
readonly enum: readonly ["email", "telegram", "sms"];
|
|
3741
|
+
};
|
|
3742
|
+
readonly address: {
|
|
3743
|
+
readonly type: "string";
|
|
3744
|
+
};
|
|
3745
|
+
readonly contact_id: {
|
|
3746
|
+
readonly type: "string";
|
|
3747
|
+
};
|
|
3748
|
+
readonly reason: {
|
|
3749
|
+
readonly type: "string";
|
|
3750
|
+
};
|
|
3751
|
+
};
|
|
3752
|
+
readonly required: readonly ["channel", "address"];
|
|
3753
|
+
};
|
|
3754
|
+
}, {
|
|
3755
|
+
readonly name: "unsuppress_address";
|
|
3756
|
+
readonly description: "Remove an address from the suppression list.";
|
|
3757
|
+
readonly inputSchema: {
|
|
3758
|
+
readonly type: "object";
|
|
3759
|
+
readonly properties: {
|
|
3760
|
+
readonly channel: {
|
|
3761
|
+
readonly type: "string";
|
|
3762
|
+
readonly enum: readonly ["email", "telegram", "sms"];
|
|
3763
|
+
};
|
|
3764
|
+
readonly address: {
|
|
3765
|
+
readonly type: "string";
|
|
3766
|
+
};
|
|
3767
|
+
};
|
|
3768
|
+
readonly required: readonly ["channel", "address"];
|
|
3769
|
+
};
|
|
3770
|
+
}, {
|
|
3771
|
+
readonly name: "list_suppressions";
|
|
3772
|
+
readonly description: "List suppressed addresses, optionally filtered by channel or unsynced-only.";
|
|
3773
|
+
readonly inputSchema: {
|
|
3774
|
+
readonly type: "object";
|
|
3775
|
+
readonly properties: {
|
|
3776
|
+
readonly channel: {
|
|
3777
|
+
readonly type: "string";
|
|
3778
|
+
readonly enum: readonly ["email", "telegram", "sms"];
|
|
3779
|
+
};
|
|
3780
|
+
readonly unsynced_only: {
|
|
3781
|
+
readonly type: "boolean";
|
|
3782
|
+
};
|
|
3783
|
+
};
|
|
3784
|
+
readonly required: readonly [];
|
|
3785
|
+
};
|
|
3786
|
+
}, {
|
|
3787
|
+
readonly name: "sync_suppressions";
|
|
3788
|
+
readonly description: "Push unsynced email suppressions to mailery via @hasna/mailery. Use dry_run to preview.";
|
|
3789
|
+
readonly inputSchema: {
|
|
3790
|
+
readonly type: "object";
|
|
3791
|
+
readonly properties: {
|
|
3792
|
+
readonly dry_run: {
|
|
3793
|
+
readonly type: "boolean";
|
|
3794
|
+
};
|
|
3795
|
+
};
|
|
3796
|
+
readonly required: readonly [];
|
|
3797
|
+
};
|
|
3798
|
+
}];
|
|
3799
|
+
//# sourceMappingURL=tools.d.ts.map
|