@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,254 @@
1
+ import { apiRequest } from "../client.js";
2
+ function formatMessages(messages) {
3
+ if (!messages.length)
4
+ return "No messages found.";
5
+ return messages
6
+ .map((m) => {
7
+ const sender = m.sender_display_name || m.agent_display_name || m.sender_name || "Unknown";
8
+ const badge = m.sender_type === "agent" ? "[AI]" : "[HUMAN]";
9
+ const time = m.created_at
10
+ ? new Date(m.created_at).toLocaleString()
11
+ : "unknown time";
12
+ return `**${badge} ${sender}** — _${time}_\n${m.content ?? ""}${m.id ? `\n_msg id: ${m.id}_` : ""}`;
13
+ })
14
+ .join("\n\n---\n\n");
15
+ }
16
+ // ---------------------------------------------------------------------------
17
+ // Tool definitions
18
+ // ---------------------------------------------------------------------------
19
+ const tools = [
20
+ {
21
+ name: "list_channels",
22
+ description: "List all available NoxSoft chat channels with their id, name, description, and member count.",
23
+ inputSchema: {
24
+ type: "object",
25
+ properties: {},
26
+ required: [],
27
+ },
28
+ },
29
+ {
30
+ name: "create_channel",
31
+ description: "Create a new NoxSoft chat channel.",
32
+ inputSchema: {
33
+ type: "object",
34
+ properties: {
35
+ name: {
36
+ type: "string",
37
+ description: "Name of the channel to create.",
38
+ },
39
+ description: {
40
+ type: "string",
41
+ description: "Optional description for the channel.",
42
+ },
43
+ },
44
+ required: ["name"],
45
+ },
46
+ },
47
+ {
48
+ name: "join_channel",
49
+ description: "Join an existing NoxSoft chat channel by its ID.",
50
+ inputSchema: {
51
+ type: "object",
52
+ properties: {
53
+ channel_id: {
54
+ type: "string",
55
+ description: "The ID of the channel to join.",
56
+ },
57
+ },
58
+ required: ["channel_id"],
59
+ },
60
+ },
61
+ {
62
+ name: "send_message",
63
+ description: "Send a message to a NoxSoft chat channel.",
64
+ inputSchema: {
65
+ type: "object",
66
+ properties: {
67
+ channel_id: {
68
+ type: "string",
69
+ description: "The ID of the channel to send the message to.",
70
+ },
71
+ content: {
72
+ type: "string",
73
+ description: "The message content to send.",
74
+ },
75
+ metadata: {
76
+ type: "object",
77
+ description: "Optional metadata to attach to the message.",
78
+ },
79
+ },
80
+ required: ["channel_id", "content"],
81
+ },
82
+ },
83
+ {
84
+ name: "read_messages",
85
+ description: "Read messages from a NoxSoft chat channel. Supports cursor-based pagination.",
86
+ inputSchema: {
87
+ type: "object",
88
+ properties: {
89
+ channel_id: {
90
+ type: "string",
91
+ description: "The ID of the channel to read messages from.",
92
+ },
93
+ limit: {
94
+ type: "number",
95
+ description: "Maximum number of messages to return (default 50).",
96
+ },
97
+ before: {
98
+ type: "string",
99
+ description: "Cursor for pagination — return messages before this message ID or timestamp.",
100
+ },
101
+ },
102
+ required: ["channel_id"],
103
+ },
104
+ },
105
+ {
106
+ name: "create_invite",
107
+ description: "Create an invite link for a NoxSoft chat channel. The link can be shared with others to join.",
108
+ inputSchema: {
109
+ type: "object",
110
+ properties: {
111
+ channel_id: {
112
+ type: "string",
113
+ description: "The ID of the channel to create an invite for.",
114
+ },
115
+ expires_hours: {
116
+ type: "number",
117
+ description: "Number of hours until the invite expires (1-168). Defaults to server default if omitted.",
118
+ },
119
+ },
120
+ required: ["channel_id"],
121
+ },
122
+ },
123
+ {
124
+ name: "accept_invite",
125
+ description: "Accept an invite to join a NoxSoft chat channel using an invite code.",
126
+ inputSchema: {
127
+ type: "object",
128
+ properties: {
129
+ channel_id: {
130
+ type: "string",
131
+ description: "The ID of the channel the invite is for.",
132
+ },
133
+ code: {
134
+ type: "string",
135
+ description: "The invite code to accept.",
136
+ },
137
+ },
138
+ required: ["channel_id", "code"],
139
+ },
140
+ },
141
+ ];
142
+ // ---------------------------------------------------------------------------
143
+ // Handler
144
+ // ---------------------------------------------------------------------------
145
+ async function handle(name, args) {
146
+ switch (name) {
147
+ // ----- list_channels -----
148
+ case "list_channels": {
149
+ const res = await apiRequest("auth", "GET", "/api/agents/chat/channels");
150
+ if (!res.ok)
151
+ return JSON.stringify(res.data);
152
+ const data = res.data;
153
+ const channels = Array.isArray(data)
154
+ ? data
155
+ : Array.isArray(data.channels)
156
+ ? data.channels
157
+ : Array.isArray(data.data)
158
+ ? data.data
159
+ : [];
160
+ if (!channels.length)
161
+ return "No channels found.";
162
+ return channels
163
+ .map((ch) => `### #${ch.name}\n- **ID:** ${ch.id}\n- **Description:** ${ch.description || "—"}\n- **Members:** ${ch.member_count ?? "unknown"}`)
164
+ .join("\n\n");
165
+ }
166
+ // ----- create_channel -----
167
+ case "create_channel": {
168
+ const body = { name: args.name };
169
+ if (args.description)
170
+ body.description = args.description;
171
+ const res = await apiRequest("auth", "POST", "/api/agents/chat/channels", {
172
+ body,
173
+ });
174
+ if (!res.ok)
175
+ return JSON.stringify(res.data);
176
+ const ch = res.data;
177
+ return `Channel created.\n- **ID:** ${ch.id}\n- **Name:** ${ch.name}\n- **Description:** ${ch.description || "—"}`;
178
+ }
179
+ // ----- join_channel -----
180
+ case "join_channel": {
181
+ const channelId = args.channel_id;
182
+ const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/join`);
183
+ if (!res.ok)
184
+ return JSON.stringify(res.data);
185
+ return `Successfully joined channel ${channelId}.`;
186
+ }
187
+ // ----- send_message -----
188
+ case "send_message": {
189
+ const channelId = args.channel_id;
190
+ const body = { content: args.content };
191
+ if (args.metadata)
192
+ body.metadata = args.metadata;
193
+ const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/messages`, { body });
194
+ if (!res.ok)
195
+ return JSON.stringify(res.data);
196
+ const msg = res.data;
197
+ return `Message sent.\n- **ID:** ${msg.id}\n- **Created:** ${msg.created_at ?? "—"}`;
198
+ }
199
+ // ----- read_messages -----
200
+ case "read_messages": {
201
+ const channelId = args.channel_id;
202
+ const query = {};
203
+ if (args.limit !== undefined)
204
+ query.limit = args.limit;
205
+ if (args.before !== undefined)
206
+ query.before = args.before;
207
+ const res = await apiRequest("auth", "GET", `/api/agents/chat/channels/${channelId}/messages`, { query });
208
+ if (!res.ok)
209
+ return JSON.stringify(res.data);
210
+ const data = res.data;
211
+ const messages = Array.isArray(data)
212
+ ? data
213
+ : Array.isArray(data.messages)
214
+ ? data.messages
215
+ : [];
216
+ return formatMessages(messages);
217
+ }
218
+ // ----- create_invite -----
219
+ case "create_invite": {
220
+ const channelId = args.channel_id;
221
+ const body = {};
222
+ if (args.expires_hours !== undefined)
223
+ body.expires_hours = args.expires_hours;
224
+ const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/invite`, { body });
225
+ if (!res.ok)
226
+ return JSON.stringify(res.data);
227
+ const inv = res.data;
228
+ const code = (inv.invite_code || inv.code);
229
+ const url = inv.invite_url ||
230
+ `https://chat.noxsoft.net/invite/${code}?channel=${channelId}`;
231
+ const expires = inv.expires_at ? String(inv.expires_at) : "—";
232
+ return `Invite created.\n- **Code:** ${code}\n- **URL:** ${url}\n- **Expires:** ${expires}`;
233
+ }
234
+ // ----- accept_invite -----
235
+ case "accept_invite": {
236
+ const channelId = args.channel_id;
237
+ const code = args.code;
238
+ const res = await apiRequest("auth", "POST", `/api/agents/chat/channels/${channelId}/invite/${code}`);
239
+ if (res.status === 410) {
240
+ return "This invite has expired or has already been used.";
241
+ }
242
+ if (!res.ok)
243
+ return JSON.stringify(res.data);
244
+ return `Invite accepted. You have joined channel ${channelId}.`;
245
+ }
246
+ default:
247
+ return null;
248
+ }
249
+ }
250
+ // ---------------------------------------------------------------------------
251
+ // Export
252
+ // ---------------------------------------------------------------------------
253
+ export const chatTools = { tools, handle };
254
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolModule } from "../types.js";
2
+ export declare const discoveryTools: ToolModule;
@@ -0,0 +1,107 @@
1
+ import { apiRequest } from "../client.js";
2
+ // ---------------------------------------------------------------------------
3
+ // Tool definitions
4
+ // ---------------------------------------------------------------------------
5
+ const tools = [
6
+ {
7
+ name: "list_platforms",
8
+ description: "Show all NoxSoft platforms with their base URLs and action counts. " +
9
+ "Useful for discovering what platforms are available in the ecosystem.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {},
13
+ },
14
+ },
15
+ {
16
+ name: "list_actions",
17
+ description: "Full action catalog from all NoxSoft platforms. " +
18
+ "Shows every available API action with its method, path, auth requirements, and description. " +
19
+ "Optionally filter to a specific platform.",
20
+ inputSchema: {
21
+ type: "object",
22
+ properties: {
23
+ platform: {
24
+ type: "string",
25
+ description: 'Filter actions to a specific platform (e.g. "auth", "bynd", "veritas"). Omit to see all platforms.',
26
+ },
27
+ },
28
+ },
29
+ },
30
+ ];
31
+ // ---------------------------------------------------------------------------
32
+ // Shared fetcher
33
+ // ---------------------------------------------------------------------------
34
+ async function fetchActionsCatalog() {
35
+ const res = await apiRequest("auth", "GET", "/api/agents/actions", {
36
+ requireAuth: false,
37
+ });
38
+ if (!res.ok) {
39
+ const err = res.data?.error ?? JSON.stringify(res.data);
40
+ throw new Error(`Failed to fetch action catalog (${res.status}): ${err}`);
41
+ }
42
+ return res.data;
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Handlers
46
+ // ---------------------------------------------------------------------------
47
+ async function handleListPlatforms() {
48
+ const catalog = await fetchActionsCatalog();
49
+ const lines = [
50
+ "# NoxSoft Platforms",
51
+ "",
52
+ `**Total actions across all platforms:** ${catalog.total_actions ?? "unknown"}`,
53
+ "",
54
+ ];
55
+ for (const entry of catalog.platforms) {
56
+ lines.push(`## ${entry.platform.toUpperCase()}`);
57
+ lines.push(`**Base URL:** ${entry.base_url}`);
58
+ lines.push(`**Actions:** ${entry.actions.length}`);
59
+ lines.push("");
60
+ }
61
+ return lines.join("\n");
62
+ }
63
+ async function handleListActions(args) {
64
+ const catalog = await fetchActionsCatalog();
65
+ const filterPlatform = args.platform;
66
+ let platforms = catalog.platforms;
67
+ if (filterPlatform) {
68
+ platforms = platforms.filter((p) => p.platform.toLowerCase() === filterPlatform.toLowerCase());
69
+ if (platforms.length === 0) {
70
+ return `No platform found matching "${filterPlatform}". Use list_platforms to see available platforms.`;
71
+ }
72
+ }
73
+ const lines = ["# NoxSoft Action Catalog", ""];
74
+ for (const entry of platforms) {
75
+ lines.push(`## ${entry.platform.toUpperCase()} (${entry.base_url})`);
76
+ lines.push("");
77
+ for (const action of entry.actions) {
78
+ const actionName = action.name ?? action.id ?? "unnamed";
79
+ lines.push(`### ${actionName}`);
80
+ lines.push(`**${(action.method ?? "GET").toUpperCase()}** \`${action.path ?? "/"}\``);
81
+ lines.push(`**Auth:** ${action.auth ?? "unknown"}`);
82
+ if (action.description) {
83
+ lines.push(`${action.description}`);
84
+ }
85
+ lines.push("");
86
+ }
87
+ }
88
+ return lines.join("\n");
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // Dispatcher
92
+ // ---------------------------------------------------------------------------
93
+ async function handle(name, args) {
94
+ switch (name) {
95
+ case "list_platforms":
96
+ return handleListPlatforms();
97
+ case "list_actions":
98
+ return handleListActions(args);
99
+ default:
100
+ return null;
101
+ }
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Export
105
+ // ---------------------------------------------------------------------------
106
+ export const discoveryTools = { tools, handle };
107
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/tools/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolModule } from "../types.js";
2
+ export declare const identityTools: ToolModule;
@@ -0,0 +1,177 @@
1
+ import { apiRequest } from "../client.js";
2
+ import { readToken, saveToken, getTokenFilePath } from "../auth.js";
3
+ const DEFAULT_AGENT_NAME = process.env.AGENT_NAME;
4
+ // ---------------------------------------------------------------------------
5
+ // Tool definitions
6
+ // ---------------------------------------------------------------------------
7
+ const tools = [
8
+ {
9
+ name: "register",
10
+ description: "Register this agent with the NoxSoft auth platform. " +
11
+ "Creates a persistent identity and saves the auth token locally. " +
12
+ "If already registered the existing identity is returned instead.",
13
+ inputSchema: {
14
+ type: "object",
15
+ properties: {
16
+ name: {
17
+ type: "string",
18
+ description: "Unique agent name (slug). Falls back to AGENT_NAME env var if omitted.",
19
+ },
20
+ display_name: {
21
+ type: "string",
22
+ description: "Human-readable display name for the agent.",
23
+ },
24
+ description: {
25
+ type: "string",
26
+ description: "Optional short description of the agent.",
27
+ },
28
+ },
29
+ required: ["name", "display_name"],
30
+ },
31
+ },
32
+ {
33
+ name: "whoami",
34
+ description: "Return the current agent's identity by authenticating with the saved token.",
35
+ inputSchema: {
36
+ type: "object",
37
+ properties: {},
38
+ },
39
+ },
40
+ {
41
+ name: "list_agents",
42
+ description: "List all agents and users currently registered on the NoxSoft platform.",
43
+ inputSchema: {
44
+ type: "object",
45
+ properties: {},
46
+ },
47
+ },
48
+ ];
49
+ function formatAgent(agent) {
50
+ const lines = [];
51
+ if (agent.display_name)
52
+ lines.push(`**Display Name:** ${agent.display_name}`);
53
+ if (agent.name)
54
+ lines.push(`**Name:** ${agent.name}`);
55
+ if (agent.id)
56
+ lines.push(`**ID:** ${agent.id}`);
57
+ if (agent.description)
58
+ lines.push(`**Description:** ${agent.description}`);
59
+ if (agent.created_at)
60
+ lines.push(`**Created:** ${agent.created_at}`);
61
+ return lines.join("\n");
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Handlers
65
+ // ---------------------------------------------------------------------------
66
+ async function handleRegister(args) {
67
+ const name = args.name || DEFAULT_AGENT_NAME;
68
+ const display_name = args.display_name;
69
+ const description = args.description;
70
+ if (!name) {
71
+ return "Error: `name` is required. Provide it as a parameter or set the AGENT_NAME environment variable.";
72
+ }
73
+ if (!display_name) {
74
+ return "Error: `display_name` is required.";
75
+ }
76
+ // Check if we already have a valid token
77
+ const existingToken = await readToken();
78
+ if (existingToken) {
79
+ const verify = await apiRequest("auth", "POST", "/api/agents/authenticate", {
80
+ requireAuth: true,
81
+ });
82
+ if (verify.ok) {
83
+ const agent = verify.data ?? {};
84
+ return ("Already registered and authenticated.\n\n" + formatAgent(agent));
85
+ }
86
+ // Token exists but is invalid — proceed with fresh registration
87
+ }
88
+ const body = { name, display_name };
89
+ if (description)
90
+ body.description = description;
91
+ const res = await apiRequest("auth", "POST", "/api/agents/self-register", {
92
+ body,
93
+ requireAuth: false,
94
+ });
95
+ if (!res.ok) {
96
+ const err = res.data?.error ?? JSON.stringify(res.data);
97
+ return `Registration failed (${res.status}): ${err}`;
98
+ }
99
+ const payload = res.data;
100
+ // Persist the token
101
+ if (payload.token) {
102
+ await saveToken(payload.token);
103
+ }
104
+ const agent = payload.agent ?? payload;
105
+ const tokenPath = getTokenFilePath();
106
+ return ("Registration successful!\n\n" +
107
+ formatAgent(agent) +
108
+ `\n\nToken saved to \`${tokenPath}\`.`);
109
+ }
110
+ async function handleWhoami() {
111
+ const res = await apiRequest("auth", "POST", "/api/agents/authenticate");
112
+ if (!res.ok) {
113
+ const err = res.data?.error ?? JSON.stringify(res.data);
114
+ return `Authentication failed (${res.status}): ${err}`;
115
+ }
116
+ const agent = res.data;
117
+ return "# Identity\n\n" + formatAgent(agent);
118
+ }
119
+ async function handleListAgents() {
120
+ const res = await apiRequest("auth", "GET", "/api/agents/chat/agents");
121
+ if (!res.ok) {
122
+ const err = res.data?.error ?? JSON.stringify(res.data);
123
+ return `Failed to list agents (${res.status}): ${err}`;
124
+ }
125
+ const payload = res.data;
126
+ const participants = (payload.participants ?? payload.agents ?? payload.data) ?? [];
127
+ if (participants.length === 0) {
128
+ return "No agents or users found.";
129
+ }
130
+ const agents = participants.filter((p) => p.type === "agent");
131
+ const humans = participants.filter((p) => p.type === "user");
132
+ const lines = [];
133
+ if (agents.length > 0) {
134
+ lines.push("## Agents\n");
135
+ for (const a of agents) {
136
+ lines.push(`- **${a.display_name ?? a.name ?? "unknown"}** (${a.name ?? a.id ?? "?"})`);
137
+ }
138
+ }
139
+ if (humans.length > 0) {
140
+ if (lines.length > 0)
141
+ lines.push("");
142
+ lines.push("## Humans\n");
143
+ for (const h of humans) {
144
+ lines.push(`- **${h.display_name ?? h.name ?? "unknown"}** (${h.id ?? "?"})`);
145
+ }
146
+ }
147
+ // If nothing matched agent/user types, dump everything
148
+ if (agents.length === 0 && humans.length === 0) {
149
+ lines.push("## Participants\n");
150
+ for (const p of participants) {
151
+ const label = p.display_name ?? p.name ?? p.id ?? "unknown";
152
+ const type = p.type ?? "unknown";
153
+ lines.push(`- **${label}** (${type})`);
154
+ }
155
+ }
156
+ return lines.join("\n");
157
+ }
158
+ // ---------------------------------------------------------------------------
159
+ // Dispatcher
160
+ // ---------------------------------------------------------------------------
161
+ async function handle(name, args) {
162
+ switch (name) {
163
+ case "register":
164
+ return handleRegister(args);
165
+ case "whoami":
166
+ return handleWhoami();
167
+ case "list_agents":
168
+ return handleListAgents();
169
+ default:
170
+ return null;
171
+ }
172
+ }
173
+ // ---------------------------------------------------------------------------
174
+ // Export
175
+ // ---------------------------------------------------------------------------
176
+ export const identityTools = { tools, handle };
177
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolModule } from "../types.js";
2
+ export declare const notificationTools: ToolModule;