@opennous/mcp 0.29.0 → 0.30.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.
- package/package.json +2 -2
- package/src/server.js +48 -2
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opennous/mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Nous
|
|
3
|
+
"version": "0.30.0",
|
|
4
|
+
"description": "Nous — the Context Graph for AI Agents.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
package/src/server.js
CHANGED
|
@@ -41,7 +41,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
41
41
|
import { z } from "zod";
|
|
42
42
|
import { get, post } from "./client.js";
|
|
43
43
|
|
|
44
|
-
export const SERVER_VERSION = "0.
|
|
44
|
+
export const SERVER_VERSION = "0.35.0";
|
|
45
45
|
|
|
46
46
|
// ─── helpers ──────────────────────────────────────────────────────────────────
|
|
47
47
|
|
|
@@ -111,6 +111,7 @@ Nous first even when the user never says "Nous":
|
|
|
111
111
|
- Something happened or you learned a fact -> record
|
|
112
112
|
- Activity or a list across many accounts -> query
|
|
113
113
|
- What needs attention, what has gone quiet -> attention
|
|
114
|
+
- Your action items / what you owe an account -> get_action_items
|
|
114
115
|
- A fact looks stale before you act on it -> verify
|
|
115
116
|
- Our ICP, market, pricing, positioning -> get_gtm_profile
|
|
116
117
|
- Our own GTM shifted -> update_gtm_profile
|
|
@@ -127,7 +128,7 @@ export function createServer() {
|
|
|
127
128
|
name: "nous",
|
|
128
129
|
version: SERVER_VERSION,
|
|
129
130
|
description:
|
|
130
|
-
"Nous — the
|
|
131
|
+
"Nous — the Context Graph for AI Agents. Nous is operated by the agent, not by a human " +
|
|
131
132
|
"clicking around: call get_workspace_status at the start of a session to see what's set up " +
|
|
132
133
|
"and what to set up next. Call get_context before drafting outreach or preparing for a " +
|
|
133
134
|
"meeting. Call record after every interaction, or whenever you learn something.",
|
|
@@ -437,6 +438,51 @@ export function createServer() {
|
|
|
437
438
|
}
|
|
438
439
|
);
|
|
439
440
|
|
|
441
|
+
// ===========================================================================
|
|
442
|
+
// TOOL: get_action_items — GET /v2/action-items
|
|
443
|
+
// Commitments extracted from meetings/emails — what you owe each account.
|
|
444
|
+
// ===========================================================================
|
|
445
|
+
server.tool(
|
|
446
|
+
"get_action_items",
|
|
447
|
+
"Your open action items and commitments, pulled from meeting notes and emails — what you owe " +
|
|
448
|
+
"which account (and what they owe you), so you don't have to dig through transcripts. Use for " +
|
|
449
|
+
"'what are my action items', 'what do I owe <account>', 'what's outstanding this week'. Defaults " +
|
|
450
|
+
"to YOUR open items across all accounts, grouped by account.",
|
|
451
|
+
{
|
|
452
|
+
owner: z.enum(["me", "prospect", "all"]).optional().describe("Whose commitments — me (default), the prospect, or all"),
|
|
453
|
+
status: z.enum(["open", "done", "all"]).optional().describe("open (default), done, or all"),
|
|
454
|
+
focus: z.string().optional().describe("Scope to one account — an email or entity UUID"),
|
|
455
|
+
due: z.enum(["today", "week", "all"]).optional().describe("Only items due today / this week (items that carry a due date) — default all"),
|
|
456
|
+
},
|
|
457
|
+
async ({ owner, status, focus, due }) => {
|
|
458
|
+
const params = {};
|
|
459
|
+
if (owner) params.owner = owner;
|
|
460
|
+
if (status) params.status = status;
|
|
461
|
+
if (focus) params.focus = focus;
|
|
462
|
+
if (due) params.due = due;
|
|
463
|
+
const r = await get("/v2/action-items", params);
|
|
464
|
+
const items = r.items ?? [];
|
|
465
|
+
if (!items.length) return { content: [{ type: "text", text: "No matching action items." }] };
|
|
466
|
+
|
|
467
|
+
const byAccount = new Map();
|
|
468
|
+
for (const it of items) {
|
|
469
|
+
const key = it.account || it.account_email || it.entity_id || "—";
|
|
470
|
+
if (!byAccount.has(key)) byAccount.set(key, []);
|
|
471
|
+
byAccount.get(key).push(it);
|
|
472
|
+
}
|
|
473
|
+
const lines = [`${items.length} action item${items.length !== 1 ? "s" : ""}:`];
|
|
474
|
+
for (const [account, list] of byAccount) {
|
|
475
|
+
lines.push(`\n${account}:`);
|
|
476
|
+
for (const it of list) {
|
|
477
|
+
const who = it.owner_kind === "prospect" ? "[them]" : "[you]";
|
|
478
|
+
const when = it.due_at ? ` (due ${fmtWhen(it.due_at)})` : "";
|
|
479
|
+
lines.push(` ${who} ${it.title}${when}`);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
483
|
+
}
|
|
484
|
+
);
|
|
485
|
+
|
|
440
486
|
// ===========================================================================
|
|
441
487
|
// TOOL: verify — POST /v2/verify
|
|
442
488
|
// Re-check a fact before acting on it — the calibration check.
|