@opennous/mcp 0.57.0 → 0.58.1
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/package.json +1 -1
- package/src/server.js +31 -3
package/package.json
CHANGED
package/src/server.js
CHANGED
|
@@ -92,10 +92,10 @@ export function createServer() {
|
|
|
92
92
|
// Reads: get_context · get_account · query (search folds in via facts:true) · score.
|
|
93
93
|
// Identity: whoami (who the key acts as, scope, GTM role[s]) — the governance
|
|
94
94
|
// substrate. record_signal folds into record; save_note is out. The `tool()` guard
|
|
95
|
-
// keeps the surface locked to these
|
|
95
|
+
// keeps the surface locked to these eight — a stray non-primitive registration is
|
|
96
96
|
// dropped, not exposed. See docs/revenue-plugin/README.md §2–3.
|
|
97
97
|
const PLUGIN_TOOLS = new Set([
|
|
98
|
-
"record", "record_insight", "get_context", "get_account", "query", "score", "whoami",
|
|
98
|
+
"record", "record_insight", "get_context", "get_account", "query", "score", "whoami", "set_icp",
|
|
99
99
|
]);
|
|
100
100
|
const _tool = server.tool.bind(server);
|
|
101
101
|
const tool = (name, ...rest) => {
|
|
@@ -357,7 +357,9 @@ export function createServer() {
|
|
|
357
357
|
"about the contact — a preference, an objection, a competitor they mentioned, a general note — " +
|
|
358
358
|
"use property:'intel' with a category: {kind:'state',property:'intel',value:{category:'objection'," +
|
|
359
359
|
"content:'skeptical about market demand',label:'Market demand skepticism'}} (category ∈ " +
|
|
360
|
-
"
|
|
360
|
+
"status_quo | goal | pain | objection | authority | budget | timeline | buying_signal | " +
|
|
361
|
+
"preference | competitor | discovery | relationship | general — use the MOST specific one; " +
|
|
362
|
+
"'general' is a last resort, and it's 'timeline', never 'timing'). " +
|
|
361
363
|
"Insights about YOUR OWN business (product/positioning/market/buyer) go to record_insight, not here.",
|
|
362
364
|
{
|
|
363
365
|
focus: z.string().describe("Email address, LinkedIn URL, domain, or entity UUID — a precise identifier, never a bare name"),
|
|
@@ -420,6 +422,32 @@ export function createServer() {
|
|
|
420
422
|
}
|
|
421
423
|
);
|
|
422
424
|
|
|
425
|
+
// ===========================================================================
|
|
426
|
+
// TOOL: set_icp — POST /v2/foundations/icp
|
|
427
|
+
// Establish/replace the workspace's ICP (the scoring model). ICP setup happens
|
|
428
|
+
// entirely in onboarding: the agent authors the buyer definition + scoring rules
|
|
429
|
+
// and writes them here; the engine compiles the model that `score` reads.
|
|
430
|
+
// ===========================================================================
|
|
431
|
+
tool(
|
|
432
|
+
"set_icp",
|
|
433
|
+
"Set (or replace) this workspace's ICP — the scoring model every account is judged against. Pass " +
|
|
434
|
+
"the full ICP as markdown (body_md): who the ideal customer is, plus the scoring rules (a base, " +
|
|
435
|
+
"persona weights, firmographic weights, observed-signal boosts/cuts, and hard disqualifiers). The " +
|
|
436
|
+
"engine compiles it into the model `score`, get_context, and the reports use. Use this during " +
|
|
437
|
+
"onboarding to establish the ICP for a fresh workspace — whoami's setup.has_icp tells you whether " +
|
|
438
|
+
"one exists. Writing replaces the prior ICP, so if one already exists, read/confirm before " +
|
|
439
|
+
"overwriting. Authoring guide + required sections: the onboard skill's icp-authoring reference.",
|
|
440
|
+
{
|
|
441
|
+
body_md: z.string().describe("the full ICP as markdown — the buyer definition + the scoring rules (see the icp-authoring reference for the required sections)"),
|
|
442
|
+
},
|
|
443
|
+
async ({ body_md }) => {
|
|
444
|
+
const r = await post("/v2/foundations/icp", { body_md });
|
|
445
|
+
return { content: [{ type: "text", text:
|
|
446
|
+
`ICP saved${r.version ? ` (v${r.version})` : ""} — the scoring model is compiling from it. ` +
|
|
447
|
+
`score / get_context now judge accounts against this ICP.` }] };
|
|
448
|
+
}
|
|
449
|
+
);
|
|
450
|
+
|
|
423
451
|
// ===========================================================================
|
|
424
452
|
// TOOL: query — POST /v2/query
|
|
425
453
|
// Retrieve a corpus of activity across many people. You do the analysis.
|