@noxsoft/mcp 0.1.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.
@@ -0,0 +1,116 @@
1
+ import { apiRequest } from "../client.js";
2
+ // ---------------------------------------------------------------------------
3
+ // State
4
+ // ---------------------------------------------------------------------------
5
+ let lastCheckedTimestamp = null;
6
+ // ---------------------------------------------------------------------------
7
+ // Tool definitions
8
+ // ---------------------------------------------------------------------------
9
+ const tools = [
10
+ {
11
+ name: "check_notifications",
12
+ description: "Check for new messages across all your channels since you last checked. " +
13
+ "Returns unread messages grouped by channel.",
14
+ inputSchema: {
15
+ type: "object",
16
+ properties: {
17
+ since: {
18
+ type: "string",
19
+ description: "ISO timestamp to fetch messages from. If omitted, uses last check time or last 30 minutes.",
20
+ },
21
+ },
22
+ },
23
+ },
24
+ ];
25
+ // ---------------------------------------------------------------------------
26
+ // Handlers
27
+ // ---------------------------------------------------------------------------
28
+ async function handleCheckNotifications(args) {
29
+ // Determine the "since" cutoff
30
+ const now = new Date();
31
+ let since;
32
+ if (args.since && typeof args.since === "string") {
33
+ since = args.since;
34
+ }
35
+ else if (lastCheckedTimestamp) {
36
+ since = lastCheckedTimestamp;
37
+ }
38
+ else {
39
+ const thirtyMinutesAgo = new Date(now.getTime() - 30 * 60 * 1000);
40
+ since = thirtyMinutesAgo.toISOString();
41
+ }
42
+ const sinceDate = new Date(since);
43
+ // Fetch joined channels
44
+ const channelsRes = await apiRequest("auth", "GET", "/api/agents/chat/channels");
45
+ if (!channelsRes.ok) {
46
+ const err = channelsRes.data?.error ??
47
+ JSON.stringify(channelsRes.data);
48
+ return `Failed to fetch channels (${channelsRes.status}): ${err}`;
49
+ }
50
+ const payload = channelsRes.data;
51
+ const channels = (payload.channels ?? payload.data ?? payload) ?? [];
52
+ if (channels.length === 0) {
53
+ lastCheckedTimestamp = now.toISOString();
54
+ return "You haven't joined any channels yet. No notifications to check.";
55
+ }
56
+ // Fetch messages from each channel and filter by since
57
+ const grouped = [];
58
+ let totalNew = 0;
59
+ for (const channel of channels) {
60
+ const messagesRes = await apiRequest("auth", "GET", `/api/agents/chat/channels/${channel.id}/messages`, { query: { limit: 50 } });
61
+ if (!messagesRes.ok) {
62
+ continue;
63
+ }
64
+ const msgPayload = messagesRes.data;
65
+ const allMessages = (msgPayload.messages ?? msgPayload.data ?? msgPayload) ?? [];
66
+ const newMessages = allMessages.filter((msg) => {
67
+ if (!msg.created_at)
68
+ return false;
69
+ return new Date(msg.created_at) > sinceDate;
70
+ });
71
+ if (newMessages.length > 0) {
72
+ grouped.push({ channel, messages: newMessages });
73
+ totalNew += newMessages.length;
74
+ }
75
+ }
76
+ // Update last checked timestamp
77
+ lastCheckedTimestamp = now.toISOString();
78
+ if (totalNew === 0) {
79
+ return `No new messages since ${since}. All quiet.`;
80
+ }
81
+ // Format output
82
+ const lines = [];
83
+ lines.push(`# Notifications (${totalNew} new)\n`);
84
+ for (const group of grouped) {
85
+ const channelName = group.channel.name ?? group.channel.id;
86
+ lines.push(`## #${channelName} (${group.messages.length} new)\n`);
87
+ for (const msg of group.messages) {
88
+ const senderType = msg.sender_type?.toLowerCase();
89
+ const badge = senderType === "agent" ? "[AI]" : "[HUMAN]";
90
+ const sender = msg.sender_display_name ?? msg.sender_name ?? "unknown";
91
+ const timestamp = msg.created_at
92
+ ? new Date(msg.created_at).toLocaleTimeString()
93
+ : "??:??";
94
+ const content = msg.content ?? "";
95
+ lines.push(`**${badge} ${sender}** (${timestamp})`);
96
+ lines.push(`${content}\n`);
97
+ }
98
+ }
99
+ return lines.join("\n");
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Dispatcher
103
+ // ---------------------------------------------------------------------------
104
+ async function handle(name, args) {
105
+ switch (name) {
106
+ case "check_notifications":
107
+ return handleCheckNotifications(args);
108
+ default:
109
+ return null;
110
+ }
111
+ }
112
+ // ---------------------------------------------------------------------------
113
+ // Export
114
+ // ---------------------------------------------------------------------------
115
+ export const notificationTools = { tools, handle };
116
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolModule } from "../types.js";
2
+ export declare const veritasTools: ToolModule;
@@ -0,0 +1,116 @@
1
+ import { apiRequest } from "../client.js";
2
+ // ---------------------------------------------------------------------------
3
+ // Tool definitions
4
+ // ---------------------------------------------------------------------------
5
+ const tools = [
6
+ {
7
+ name: "veritas_chat",
8
+ description: "Ask Veritas a question about current events. " +
9
+ "Veritas is a news platform that provides AI-powered analysis of real-time news. " +
10
+ "Optionally scope the question to a specific event by providing its ID.",
11
+ inputSchema: {
12
+ type: "object",
13
+ properties: {
14
+ message: {
15
+ type: "string",
16
+ description: "Your question about current events.",
17
+ },
18
+ event_id: {
19
+ type: "string",
20
+ description: "Optional UUID of a specific event to scope the question to.",
21
+ },
22
+ },
23
+ required: ["message"],
24
+ },
25
+ },
26
+ {
27
+ name: "veritas_briefing",
28
+ description: "Get today's daily briefing from Veritas. " +
29
+ "Returns a summary of the most important current events and stories.",
30
+ inputSchema: {
31
+ type: "object",
32
+ properties: {},
33
+ },
34
+ },
35
+ ];
36
+ // ---------------------------------------------------------------------------
37
+ // Handlers
38
+ // ---------------------------------------------------------------------------
39
+ async function handleChat(args) {
40
+ const message = args.message;
41
+ if (!message) {
42
+ return "Error: `message` is required.";
43
+ }
44
+ const body = { message };
45
+ const eventId = args.event_id;
46
+ if (eventId) {
47
+ body.event_id = eventId;
48
+ }
49
+ const res = await apiRequest("veritas", "POST", "/api/chat", {
50
+ body,
51
+ requireAuth: false,
52
+ });
53
+ if (!res.ok) {
54
+ const err = res.data?.error ?? JSON.stringify(res.data);
55
+ return `Veritas chat failed (${res.status}): ${err}`;
56
+ }
57
+ const data = res.data;
58
+ const response = data.response ?? data.message ?? JSON.stringify(data);
59
+ return String(response);
60
+ }
61
+ async function handleBriefing() {
62
+ const res = await apiRequest("veritas", "GET", "/api/daily-briefing", {
63
+ requireAuth: false,
64
+ });
65
+ if (!res.ok) {
66
+ const err = res.data?.error ?? JSON.stringify(res.data);
67
+ return `Failed to fetch daily briefing (${res.status}): ${err}`;
68
+ }
69
+ const data = res.data;
70
+ // Direct briefing string
71
+ if (typeof data.briefing === "string") {
72
+ return data.briefing;
73
+ }
74
+ // Direct content string
75
+ if (typeof data.content === "string") {
76
+ return data.content;
77
+ }
78
+ // Structured format: summary + stories array
79
+ if (data.summary || Array.isArray(data.stories)) {
80
+ const lines = [];
81
+ if (typeof data.summary === "string") {
82
+ lines.push(data.summary);
83
+ }
84
+ const stories = data.stories;
85
+ if (stories && stories.length > 0) {
86
+ lines.push("");
87
+ lines.push("## Stories\n");
88
+ for (const story of stories) {
89
+ const title = story.title ?? "Untitled";
90
+ const summary = story.summary ?? story.description ?? "";
91
+ lines.push(`- **${title}**${summary ? `: ${summary}` : ""}`);
92
+ }
93
+ }
94
+ return lines.join("\n");
95
+ }
96
+ // Unknown format — dump as JSON
97
+ return JSON.stringify(data, null, 2);
98
+ }
99
+ // ---------------------------------------------------------------------------
100
+ // Dispatcher
101
+ // ---------------------------------------------------------------------------
102
+ async function handle(name, args) {
103
+ switch (name) {
104
+ case "veritas_chat":
105
+ return handleChat(args);
106
+ case "veritas_briefing":
107
+ return handleBriefing();
108
+ default:
109
+ return null;
110
+ }
111
+ }
112
+ // ---------------------------------------------------------------------------
113
+ // Export
114
+ // ---------------------------------------------------------------------------
115
+ export const veritasTools = { tools, handle };
116
+ //# sourceMappingURL=veritas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"veritas.js","sourceRoot":"","sources":["../../src/tools/veritas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export interface ApiResponse {
3
+ ok: boolean;
4
+ status: number;
5
+ data: unknown;
6
+ }
7
+ export interface RequestOptions {
8
+ body?: Record<string, unknown>;
9
+ query?: Record<string, string | number | undefined>;
10
+ requireAuth?: boolean;
11
+ }
12
+ export type Platform = "auth" | "bynd" | "veritas" | "tunenest" | "veil";
13
+ export interface ToolModule {
14
+ tools: Tool[];
15
+ handle: (name: string, args: Record<string, unknown>) => Promise<string | null>;
16
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@noxsoft/mcp",
3
+ "version": "0.1.0",
4
+ "description": "Unified NoxSoft MCP server — gives AI agents access to all NoxSoft platforms",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "noxsoft-mcp": "bin.mjs"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node dist/index.js",
13
+ "dev": "tsx src/index.ts",
14
+ "prepublishOnly": "tsc"
15
+ },
16
+ "files": [
17
+ "dist/",
18
+ "bin.mjs"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "dependencies": {
24
+ "@modelcontextprotocol/sdk": "^1.12.1"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "^5.7.0",
28
+ "tsx": "^4.19.0",
29
+ "@types/node": "^22.0.0"
30
+ },
31
+ "keywords": [
32
+ "mcp",
33
+ "noxsoft",
34
+ "ai-agent",
35
+ "model-context-protocol"
36
+ ],
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://gitlab.com/sylys-group/noxsoft-mcp.git"
41
+ }
42
+ }