@loopops/mcp-server 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -160,6 +160,61 @@ export function registerAccountMasterTools(server, allowed) {
160
160
  .describe("Re-run the resolver for this (account, attribute) immediately so the golden record updates now. Default: true."),
161
161
  }, safeTool(async (input) => trpcMutation("mcp.overrideAccountAttribute", input)));
162
162
  }
163
+ if (allowed.has("deactivate_account_attribute_override")) {
164
+ server.tool("deactivate_account_attribute_override", [
165
+ "Soft-toggle off a manual override on one (account, attribute). Writes a new manual",
166
+ "`provider_attribute_value` row with `confidence_score=0` and `attribute_value=NULL`.",
167
+ "The resolver's latest-period semantic (PR #148) makes the manual provider drop out,",
168
+ "so other providers (D&B, PDL, ZoomInfo, etc.) take over for this attribute.",
169
+ "",
170
+ "Append-only: the original override row stays in place historically. To re-enable, call",
171
+ "`override_account_attribute` again with a fresh value — the new manual row supersedes",
172
+ "this deactivation because the resolver picks the most-recent manual row.",
173
+ "",
174
+ "Identify the account by ANY ONE of: accountId / domain / sfAccountId / accountName.",
175
+ "Refuses to write if no prior manual override exists for the (account, attribute).",
176
+ "",
177
+ "Common workflow: PDL data was stale → manual override applied →",
178
+ "PDL/D&B refreshes with correct data → deactivate the manual override so the new",
179
+ "provider data takes over without manual maintenance.",
180
+ ].join(" "), {
181
+ accountId: z
182
+ .string()
183
+ .uuid()
184
+ .optional()
185
+ .describe("Account Master account_id (UUID)."),
186
+ domain: z
187
+ .string()
188
+ .min(1)
189
+ .optional()
190
+ .describe("Domain (e.g. 'snowflake.com')."),
191
+ sfAccountId: z
192
+ .string()
193
+ .min(3)
194
+ .optional()
195
+ .describe("Salesforce Account ID."),
196
+ accountName: z
197
+ .string()
198
+ .min(1)
199
+ .optional()
200
+ .describe("Company name. Use accountId or domain when possible — accountName can be ambiguous."),
201
+ attribute: z
202
+ .string()
203
+ .min(1)
204
+ .max(64)
205
+ .regex(/^[a-z0-9_]+$/)
206
+ .describe("Attribute name (e.g. 'hq_state'). Must match a prior manual override row."),
207
+ reason: z
208
+ .string()
209
+ .min(3)
210
+ .max(512)
211
+ .describe("Why is this override no longer warranted? Stored in audit payload."),
212
+ resolveAfter: z
213
+ .boolean()
214
+ .optional()
215
+ .describe("Re-run the resolver immediately so the golden record updates. Default: true."),
216
+ }, safeTool(async (input) => trpcMutation("mcp.deactivateAccountAttributeOverride", input)));
217
+ }
163
218
  if (allowed.has("show_account_master_config")) {
164
219
  server.tool("show_account_master_config", [
165
220
  "Read the current contents of a Account Master YAML config from the repo.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loopops/mcp-server",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "Loop Operations MCP Server — AI skills for RevOps",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",