@sutraha/mcp-server 0.1.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/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # @sutraha/mcp-server
2
+
3
+ MCP server and CLI for connecting AI agents to **Sutraha HQ** — the multi-agent orchestration dashboard.
4
+
5
+ ## Setup
6
+
7
+ 1. Create an API key in Sutraha HQ: **Settings → API Keys → Create Key**
8
+ 2. Note your workspace ID from the URL or settings page
9
+
10
+ ## MCP Server (for OpenClaw / MCPorter)
11
+
12
+ Add to your MCPorter config:
13
+
14
+ ```json
15
+ {
16
+ "servers": {
17
+ "sutraha-hq": {
18
+ "command": "npx",
19
+ "args": ["@sutraha/mcp-server"],
20
+ "env": {
21
+ "CONVEX_URL": "https://your-deployment.convex.cloud",
22
+ "CONVEX_SITE_URL": "https://your-deployment.convex.site",
23
+ "SUTRAHA_API_KEY": "sk_your_api_key_here",
24
+ "SUTRAHA_WORKSPACE_ID": "your_workspace_id"
25
+ }
26
+ }
27
+ }
28
+ }
29
+ ```
30
+
31
+ ### Available Tools
32
+
33
+ | Tool | Description |
34
+ |------|-------------|
35
+ | `sutraha_list_agents` | List all active agents |
36
+ | `sutraha_get_agent` | Get agent by ID |
37
+ | `sutraha_update_agent_status` | Set agent status |
38
+ | `sutraha_agent_heartbeat` | Send heartbeat |
39
+ | `sutraha_list_tasks` | List all tasks |
40
+ | `sutraha_get_task` | Get task by ID |
41
+ | `sutraha_get_my_tasks` | Get tasks for an agent |
42
+ | `sutraha_create_task` | Create a task |
43
+ | `sutraha_update_task` | Update task fields |
44
+ | `sutraha_update_task_status` | Change task status |
45
+ | `sutraha_list_messages` | List task comments |
46
+ | `sutraha_send_message` | Post a comment |
47
+ | `sutraha_send_chat` | Send chat message |
48
+ | `sutraha_list_broadcasts` | List broadcasts |
49
+ | `sutraha_respond_to_broadcast` | Respond to broadcast |
50
+ | `sutraha_list_documents` | List documents |
51
+ | `sutraha_create_document` | Create a document |
52
+ | `sutraha_get_activities` | Get activity feed |
53
+
54
+ ## CLI
55
+
56
+ ```bash
57
+ export CONVEX_URL=https://your-deployment.convex.cloud
58
+ export CONVEX_SITE_URL=https://your-deployment.convex.site
59
+ export SUTRAHA_API_KEY=sk_your_api_key_here
60
+ export SUTRAHA_WORKSPACE_ID=your_workspace_id
61
+
62
+ npx @sutraha/mcp-server cli agents list
63
+ npx @sutraha/mcp-server cli tasks create --title "Fix bug" --priority high
64
+ npx @sutraha/mcp-server cli tasks update-status --id <taskId> --status done
65
+ ```
package/dist/api.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare const api: import("convex/server").AnyApi;
package/dist/api.js ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Convex API function references for the Sutraha HQ backend.
3
+ *
4
+ * These are lightweight references that the ConvexHttpClient uses to call
5
+ * server functions. They match the function paths in the Convex project.
6
+ *
7
+ * Using `anyApi` since this package doesn't have access to the generated types.
8
+ */
9
+ import { anyApi } from "convex/server";
10
+ export const api = anyApi;
11
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Sutraha HQ CLI
4
+ *
5
+ * Command-line interface for interacting with the Sutraha HQ backend.
6
+ * Useful for debugging and manual operations.
7
+ *
8
+ * Usage:
9
+ * sutraha-cli <resource> <action> [options]
10
+ *
11
+ * Examples:
12
+ * sutraha-cli agents list
13
+ * sutraha-cli tasks list
14
+ * sutraha-cli tasks create --title "Fix bug" --priority high
15
+ * sutraha-cli tasks update-status --id <id> --status done
16
+ * sutraha-cli chat send --session-id chat:key --agent-id <id> --message "Hello"
17
+ */
18
+ import { createClientFromEnv } from "./convex-client.js";
19
+ import { api } from "./api.js";
20
+ const client = createClientFromEnv();
21
+ function usage() {
22
+ console.log(`
23
+ Sutraha HQ CLI
24
+
25
+ Usage: sutraha-cli <resource> <action> [options]
26
+
27
+ Resources:
28
+ agents list | get --id <id> | heartbeat --id <id> | status --id <id> --status <s>
29
+ tasks list | get --id <id> | create --title <t> | update-status --id <id> --status <s>
30
+ messages list --task-id <id> | send --task-id <id> --agent-id <id> --content <msg>
31
+ chat send --session-id <sid> --agent-id <id> --message <msg>
32
+ broadcasts list
33
+ documents list | create --title <t> --content <c> --agent-id <id>
34
+ activities list
35
+
36
+ Environment variables:
37
+ CONVEX_URL Convex cloud URL
38
+ CONVEX_SITE_URL Convex site URL (for token exchange)
39
+ SUTRAHA_API_KEY Workspace API key
40
+ SUTRAHA_WORKSPACE_ID Workspace ID
41
+ `.trim());
42
+ }
43
+ function getArg(args, flag) {
44
+ const idx = args.indexOf(flag);
45
+ if (idx === -1 || idx + 1 >= args.length)
46
+ return undefined;
47
+ return args[idx + 1];
48
+ }
49
+ function requireArg(args, flag, name) {
50
+ const val = getArg(args, flag);
51
+ if (!val) {
52
+ console.error(`Missing required option: ${flag} <${name}>`);
53
+ process.exit(1);
54
+ }
55
+ return val;
56
+ }
57
+ async function main() {
58
+ const args = process.argv.slice(2);
59
+ if (args.length < 2 || args[0] === "--help" || args[0] === "-h") {
60
+ usage();
61
+ process.exit(0);
62
+ }
63
+ const [resource, action, ...rest] = args;
64
+ try {
65
+ let result;
66
+ switch (resource) {
67
+ case "agents":
68
+ switch (action) {
69
+ case "list":
70
+ result = await client.query(api.agents.list);
71
+ break;
72
+ case "get":
73
+ result = await client.query(api.agents.getById, {
74
+ id: requireArg(rest, "--id", "agentId"),
75
+ });
76
+ break;
77
+ case "heartbeat":
78
+ await client.mutation(api.agents.updateHeartbeat, {
79
+ id: requireArg(rest, "--id", "agentId"),
80
+ });
81
+ result = { ok: true };
82
+ break;
83
+ case "status":
84
+ await client.mutation(api.agents.updateStatus, {
85
+ id: requireArg(rest, "--id", "agentId"),
86
+ status: requireArg(rest, "--status", "status"),
87
+ });
88
+ result = { ok: true };
89
+ break;
90
+ default:
91
+ console.error(`Unknown agents action: ${action}`);
92
+ process.exit(1);
93
+ }
94
+ break;
95
+ case "tasks":
96
+ switch (action) {
97
+ case "list":
98
+ result = await client.query(api.tasks.list);
99
+ break;
100
+ case "get":
101
+ result = await client.query(api.tasks.getById, {
102
+ id: requireArg(rest, "--id", "taskId"),
103
+ });
104
+ break;
105
+ case "create":
106
+ result = await client.mutation(api.tasks.create, {
107
+ title: requireArg(rest, "--title", "title"),
108
+ description: getArg(rest, "--description") ?? "",
109
+ status: getArg(rest, "--status") ?? "inbox",
110
+ priority: getArg(rest, "--priority") ?? "medium",
111
+ assigneeIds: [],
112
+ });
113
+ break;
114
+ case "update-status":
115
+ await client.mutation(api.tasks.updateStatus, {
116
+ id: requireArg(rest, "--id", "taskId"),
117
+ status: requireArg(rest, "--status", "status"),
118
+ });
119
+ result = { ok: true };
120
+ break;
121
+ default:
122
+ console.error(`Unknown tasks action: ${action}`);
123
+ process.exit(1);
124
+ }
125
+ break;
126
+ case "messages":
127
+ switch (action) {
128
+ case "list":
129
+ result = await client.query(api.messages.list, {
130
+ taskId: requireArg(rest, "--task-id", "taskId"),
131
+ });
132
+ break;
133
+ case "send":
134
+ await client.mutation(api.messages.create, {
135
+ content: requireArg(rest, "--content", "content"),
136
+ taskId: requireArg(rest, "--task-id", "taskId"),
137
+ agentId: requireArg(rest, "--agent-id", "agentId"),
138
+ });
139
+ result = { ok: true };
140
+ break;
141
+ default:
142
+ console.error(`Unknown messages action: ${action}`);
143
+ process.exit(1);
144
+ }
145
+ break;
146
+ case "chat":
147
+ switch (action) {
148
+ case "send":
149
+ await client.mutation(api.chatMessages.send, {
150
+ sessionId: requireArg(rest, "--session-id", "sessionId"),
151
+ agentId: requireArg(rest, "--agent-id", "agentId"),
152
+ content: requireArg(rest, "--message", "message"),
153
+ fromUser: false,
154
+ });
155
+ result = { ok: true };
156
+ break;
157
+ default:
158
+ console.error(`Unknown chat action: ${action}`);
159
+ process.exit(1);
160
+ }
161
+ break;
162
+ case "broadcasts":
163
+ switch (action) {
164
+ case "list":
165
+ result = await client.query(api.broadcasts.list);
166
+ break;
167
+ default:
168
+ console.error(`Unknown broadcasts action: ${action}`);
169
+ process.exit(1);
170
+ }
171
+ break;
172
+ case "documents":
173
+ switch (action) {
174
+ case "list":
175
+ result = await client.query(api.documents.list);
176
+ break;
177
+ case "create":
178
+ result = await client.mutation(api.documents.create, {
179
+ title: requireArg(rest, "--title", "title"),
180
+ content: requireArg(rest, "--content", "content"),
181
+ type: getArg(rest, "--type") ?? "note",
182
+ taskId: getArg(rest, "--task-id") ?? null,
183
+ agentId: requireArg(rest, "--agent-id", "agentId"),
184
+ });
185
+ break;
186
+ default:
187
+ console.error(`Unknown documents action: ${action}`);
188
+ process.exit(1);
189
+ }
190
+ break;
191
+ case "activities":
192
+ switch (action) {
193
+ case "list":
194
+ result = await client.query(api.activities.recent);
195
+ break;
196
+ default:
197
+ console.error(`Unknown activities action: ${action}`);
198
+ process.exit(1);
199
+ }
200
+ break;
201
+ default:
202
+ console.error(`Unknown resource: ${resource}`);
203
+ usage();
204
+ process.exit(1);
205
+ }
206
+ console.log(JSON.stringify(result, null, 2));
207
+ }
208
+ catch (error) {
209
+ console.error("Error:", error.message);
210
+ process.exit(1);
211
+ }
212
+ }
213
+ main();
214
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare class SutrahaClient {
2
+ private client;
3
+ private siteUrl;
4
+ private apiKey;
5
+ workspaceId: string;
6
+ private token;
7
+ private tokenExpiresAt;
8
+ constructor(config: {
9
+ convexUrl: string;
10
+ convexSiteUrl: string;
11
+ apiKey: string;
12
+ workspaceId: string;
13
+ });
14
+ /** Ensure we have a valid token, refreshing if needed. */
15
+ private ensureAuth;
16
+ /** Execute a Convex query with auto-auth. */
17
+ query(functionRef: any, args?: Record<string, any>): Promise<any>;
18
+ /** Execute a Convex mutation with auto-auth. */
19
+ mutation(functionRef: any, args?: Record<string, any>): Promise<any>;
20
+ }
21
+ /** Create a client from environment variables. */
22
+ export declare function createClientFromEnv(): SutrahaClient;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Convex client wrapper with API key → JWT auto-refresh auth.
3
+ */
4
+ import { ConvexHttpClient } from "convex/browser";
5
+ export class SutrahaClient {
6
+ client;
7
+ siteUrl;
8
+ apiKey;
9
+ workspaceId;
10
+ token = null;
11
+ tokenExpiresAt = 0;
12
+ constructor(config) {
13
+ this.client = new ConvexHttpClient(config.convexUrl);
14
+ this.siteUrl = config.convexSiteUrl;
15
+ this.apiKey = config.apiKey;
16
+ this.workspaceId = config.workspaceId;
17
+ }
18
+ /** Ensure we have a valid token, refreshing if needed. */
19
+ async ensureAuth() {
20
+ // Refresh if token expires in less than 5 minutes
21
+ if (this.token && this.tokenExpiresAt > Date.now() + 5 * 60 * 1000) {
22
+ return;
23
+ }
24
+ const res = await fetch(`${this.siteUrl}/api/v1/auth/token`, {
25
+ method: "POST",
26
+ headers: {
27
+ Authorization: `Bearer ${this.apiKey}`,
28
+ "Content-Type": "application/json",
29
+ },
30
+ });
31
+ if (!res.ok) {
32
+ const body = await res.text();
33
+ throw new Error(`Token exchange failed (${res.status}): ${body}`);
34
+ }
35
+ const data = await res.json();
36
+ this.token = data.token;
37
+ this.tokenExpiresAt = data.expiresAt;
38
+ this.client.setAuth(data.token);
39
+ }
40
+ /** Execute a Convex query with auto-auth. */
41
+ async query(functionRef, args = {}) {
42
+ await this.ensureAuth();
43
+ return this.client.query(functionRef, {
44
+ workspaceId: this.workspaceId,
45
+ ...args,
46
+ });
47
+ }
48
+ /** Execute a Convex mutation with auto-auth. */
49
+ async mutation(functionRef, args = {}) {
50
+ await this.ensureAuth();
51
+ return this.client.mutation(functionRef, {
52
+ workspaceId: this.workspaceId,
53
+ ...args,
54
+ });
55
+ }
56
+ }
57
+ /** Create a client from environment variables. */
58
+ export function createClientFromEnv() {
59
+ const convexUrl = process.env.CONVEX_URL;
60
+ const convexSiteUrl = process.env.CONVEX_SITE_URL;
61
+ const apiKey = process.env.SUTRAHA_API_KEY;
62
+ const workspaceId = process.env.SUTRAHA_WORKSPACE_ID;
63
+ if (!convexUrl)
64
+ throw new Error("Missing CONVEX_URL env var");
65
+ if (!convexSiteUrl)
66
+ throw new Error("Missing CONVEX_SITE_URL env var");
67
+ if (!apiKey)
68
+ throw new Error("Missing SUTRAHA_API_KEY env var");
69
+ if (!workspaceId)
70
+ throw new Error("Missing SUTRAHA_WORKSPACE_ID env var");
71
+ return new SutrahaClient({ convexUrl, convexSiteUrl, apiKey, workspaceId });
72
+ }
73
+ //# sourceMappingURL=convex-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convex-client.js","sourceRoot":"","sources":["../src/convex-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Sutraha HQ MCP Server
4
+ *
5
+ * Connects AI agents (OpenClaw, etc.) to the Sutraha HQ orchestration dashboard
6
+ * via the Model Context Protocol (MCP).
7
+ *
8
+ * Usage:
9
+ * CONVEX_URL=... CONVEX_SITE_URL=... SUTRAHA_API_KEY=... SUTRAHA_WORKSPACE_ID=... npx @sutraha/mcp-server
10
+ */
11
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
12
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
13
+ import { z } from "zod";
14
+ import { createClientFromEnv } from "./convex-client.js";
15
+ import { api } from "./api.js";
16
+ const client = createClientFromEnv();
17
+ const server = new McpServer({
18
+ name: "sutraha-hq",
19
+ version: "0.1.0",
20
+ });
21
+ // ═══════════════════════════════════════════════════════════
22
+ // Agent Tools
23
+ // ═══════════════════════════════════════════════════════════
24
+ server.tool("sutraha_list_agents", "List all active agents in the workspace", {}, async () => {
25
+ const agents = await client.query(api.agents.list);
26
+ return { content: [{ type: "text", text: JSON.stringify(agents, null, 2) }] };
27
+ });
28
+ server.tool("sutraha_get_agent", "Get an agent by ID", { agentId: z.string().describe("Agent ID") }, async ({ agentId }) => {
29
+ const agent = await client.query(api.agents.getById, { id: agentId });
30
+ return { content: [{ type: "text", text: JSON.stringify(agent, null, 2) }] };
31
+ });
32
+ server.tool("sutraha_get_agent_by_session_key", "Find an agent by its session key", { sessionKey: z.string().describe("Agent session key") }, async ({ sessionKey }) => {
33
+ const agent = await client.query(api.agents.getBySessionKey, { sessionKey });
34
+ return { content: [{ type: "text", text: JSON.stringify(agent, null, 2) }] };
35
+ });
36
+ server.tool("sutraha_update_agent_status", "Update an agent's status (active, idle, or blocked)", {
37
+ agentId: z.string().describe("Agent ID"),
38
+ status: z.enum(["active", "idle", "blocked"]).describe("New status"),
39
+ }, async ({ agentId, status }) => {
40
+ await client.mutation(api.agents.updateStatus, { id: agentId, status });
41
+ return { content: [{ type: "text", text: `Agent status updated to ${status}` }] };
42
+ });
43
+ server.tool("sutraha_agent_heartbeat", "Send a heartbeat for an agent to indicate it's alive", { agentId: z.string().describe("Agent ID") }, async ({ agentId }) => {
44
+ await client.mutation(api.agents.updateHeartbeat, { id: agentId });
45
+ return { content: [{ type: "text", text: "Heartbeat sent" }] };
46
+ });
47
+ // ═══════════════════════════════════════════════════════════
48
+ // Task Tools
49
+ // ═══════════════════════════════════════════════════════════
50
+ server.tool("sutraha_list_tasks", "List all tasks in the workspace", {}, async () => {
51
+ const tasks = await client.query(api.tasks.list);
52
+ return { content: [{ type: "text", text: JSON.stringify(tasks, null, 2) }] };
53
+ });
54
+ server.tool("sutraha_get_task", "Get a task by ID with full details", { taskId: z.string().describe("Task ID") }, async ({ taskId }) => {
55
+ const task = await client.query(api.tasks.getById, { id: taskId });
56
+ return { content: [{ type: "text", text: JSON.stringify(task, null, 2) }] };
57
+ });
58
+ server.tool("sutraha_get_my_tasks", "Get tasks assigned to a specific agent", { agentId: z.string().describe("Agent ID") }, async ({ agentId }) => {
59
+ const tasks = await client.query(api.tasks.getByAssignee, { agentId });
60
+ return { content: [{ type: "text", text: JSON.stringify(tasks, null, 2) }] };
61
+ });
62
+ server.tool("sutraha_create_task", "Create a new task in the workspace", {
63
+ title: z.string().describe("Task title"),
64
+ description: z.string().optional().describe("Task description"),
65
+ status: z.enum(["inbox", "assigned", "in_progress", "review", "done", "blocked"]).optional().describe("Task status (default: inbox)"),
66
+ priority: z.enum(["high", "medium", "low", "none"]).optional().describe("Priority level (default: medium)"),
67
+ assigneeIds: z.array(z.string()).optional().describe("Agent IDs to assign"),
68
+ }, async ({ title, description, status, priority, assigneeIds }) => {
69
+ const id = await client.mutation(api.tasks.create, {
70
+ title,
71
+ description: description ?? "",
72
+ status: status ?? "inbox",
73
+ priority: priority ?? "medium",
74
+ assigneeIds: assigneeIds ?? [],
75
+ });
76
+ return { content: [{ type: "text", text: `Task created with ID: ${id}` }] };
77
+ });
78
+ server.tool("sutraha_update_task", "Update a task's fields", {
79
+ taskId: z.string().describe("Task ID"),
80
+ title: z.string().optional().describe("New title"),
81
+ description: z.string().optional().describe("New description"),
82
+ priority: z.enum(["high", "medium", "low", "none"]).optional().describe("New priority"),
83
+ assigneeIds: z.array(z.string()).optional().describe("New assignee IDs"),
84
+ }, async ({ taskId, ...updates }) => {
85
+ await client.mutation(api.tasks.update, { id: taskId, ...updates });
86
+ return { content: [{ type: "text", text: `Task ${taskId} updated` }] };
87
+ });
88
+ server.tool("sutraha_update_task_status", "Change a task's status", {
89
+ taskId: z.string().describe("Task ID"),
90
+ status: z.enum(["inbox", "assigned", "in_progress", "review", "done", "blocked"]).describe("New status"),
91
+ }, async ({ taskId, status }) => {
92
+ await client.mutation(api.tasks.updateStatus, { id: taskId, status });
93
+ return { content: [{ type: "text", text: `Task status updated to ${status}` }] };
94
+ });
95
+ // ═══════════════════════════════════════════════════════════
96
+ // Communication Tools
97
+ // ═══════════════════════════════════════════════════════════
98
+ server.tool("sutraha_list_messages", "List comments/messages on a task", { taskId: z.string().describe("Task ID") }, async ({ taskId }) => {
99
+ const messages = await client.query(api.messages.list, { taskId });
100
+ return { content: [{ type: "text", text: JSON.stringify(messages, null, 2) }] };
101
+ });
102
+ server.tool("sutraha_send_message", "Post a comment on a task (supports @mentions)", {
103
+ content: z.string().describe("Message content (use @agent:name for mentions)"),
104
+ taskId: z.string().describe("Task ID to comment on"),
105
+ agentId: z.string().describe("Agent ID posting the message"),
106
+ }, async ({ content, taskId, agentId }) => {
107
+ await client.mutation(api.messages.create, { content, taskId, agentId });
108
+ return { content: [{ type: "text", text: "Message sent" }] };
109
+ });
110
+ server.tool("sutraha_send_chat", "Send a chat message as an agent", {
111
+ sessionId: z.string().describe("Chat session ID (e.g., chat:agent-session-key)"),
112
+ agentId: z.string().describe("Agent ID sending the message"),
113
+ content: z.string().describe("Message content"),
114
+ }, async ({ sessionId, agentId, content }) => {
115
+ await client.mutation(api.chatMessages.send, {
116
+ sessionId,
117
+ agentId,
118
+ content,
119
+ fromUser: false,
120
+ });
121
+ return { content: [{ type: "text", text: "Chat message sent" }] };
122
+ });
123
+ // ═══════════════════════════════════════════════════════════
124
+ // Broadcast Tools
125
+ // ═══════════════════════════════════════════════════════════
126
+ server.tool("sutraha_list_broadcasts", "List workspace broadcasts", {}, async () => {
127
+ const broadcasts = await client.query(api.broadcasts.list);
128
+ return { content: [{ type: "text", text: JSON.stringify(broadcasts, null, 2) }] };
129
+ });
130
+ server.tool("sutraha_respond_to_broadcast", "Respond to a workspace broadcast", {
131
+ broadcastId: z.string().describe("Broadcast ID"),
132
+ agentId: z.string().describe("Agent ID responding"),
133
+ content: z.string().describe("Response content"),
134
+ }, async ({ broadcastId, agentId, content }) => {
135
+ await client.mutation(api.broadcasts.addResponse, {
136
+ broadcastId,
137
+ agentId,
138
+ content,
139
+ });
140
+ return { content: [{ type: "text", text: "Broadcast response sent" }] };
141
+ });
142
+ // ═══════════════════════════════════════════════════════════
143
+ // Document Tools
144
+ // ═══════════════════════════════════════════════════════════
145
+ server.tool("sutraha_list_documents", "List documents in the workspace", { taskId: z.string().optional().describe("Filter by task ID") }, async ({ taskId }) => {
146
+ const docs = taskId
147
+ ? await client.query(api.documents.getByTask, { taskId })
148
+ : await client.query(api.documents.list);
149
+ return { content: [{ type: "text", text: JSON.stringify(docs, null, 2) }] };
150
+ });
151
+ server.tool("sutraha_create_document", "Create a document in the workspace", {
152
+ title: z.string().describe("Document title"),
153
+ content: z.string().describe("Document content (markdown)"),
154
+ type: z.enum(["deliverable", "research", "protocol", "note"]).optional().describe("Document type (default: note)"),
155
+ taskId: z.string().optional().describe("Link to a task"),
156
+ agentId: z.string().describe("Agent ID creating the document"),
157
+ }, async ({ title, content, type, taskId, agentId }) => {
158
+ const id = await client.mutation(api.documents.create, {
159
+ title,
160
+ content,
161
+ type: type ?? "note",
162
+ taskId: taskId ?? null,
163
+ agentId,
164
+ });
165
+ return { content: [{ type: "text", text: `Document created with ID: ${id}` }] };
166
+ });
167
+ // ═══════════════════════════════════════════════════════════
168
+ // Activity Tools
169
+ // ═══════════════════════════════════════════════════════════
170
+ server.tool("sutraha_get_activities", "Get recent activity feed for the workspace", {}, async () => {
171
+ const activities = await client.query(api.activities.recent);
172
+ return { content: [{ type: "text", text: JSON.stringify(activities, null, 2) }] };
173
+ });
174
+ // ═══════════════════════════════════════════════════════════
175
+ // Start Server
176
+ // ═══════════════════════════════════════════════════════════
177
+ async function main() {
178
+ const transport = new StdioServerTransport();
179
+ await server.connect(transport);
180
+ console.error("Sutraha HQ MCP server running (stdio)");
181
+ }
182
+ main().catch((err) => {
183
+ console.error("Fatal:", err);
184
+ process.exit(1);
185
+ });
186
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;AAErC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,8DAA8D;AAC9D,eAAe;AACf,8DAA8D;AAE9D,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,yCAAyC,EACzC,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAChF,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,oBAAoB,EACpB,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAC5C,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACpB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kCAAkC,EAClC,kCAAkC,EAClC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACvB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,qDAAqD,EACrD;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;CACrE,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;IAC5B,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AACpF,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,sDAAsD,EACtD,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAC5C,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACpB,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC,CACF,CAAC;AAEF,8DAA8D;AAC9D,cAAc;AACd,8DAA8D;AAE9D,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,iCAAiC,EACjC,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,oCAAoC,EACpC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACnB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,wCAAwC,EACxC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAC5C,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACpB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACvE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,oCAAoC,EACpC;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC/D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACrI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC3G,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CAC5E,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE;IAC9D,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE;QACjD,KAAK;QACL,WAAW,EAAE,WAAW,IAAI,EAAE;QAC9B,MAAM,EAAE,MAAM,IAAI,OAAO;QACzB,QAAQ,EAAE,QAAQ,IAAI,QAAQ;QAC9B,WAAW,EAAE,WAAW,IAAI,EAAE;KAC/B,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,wBAAwB,EACxB;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACvF,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;CACzE,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;IAC/B,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,MAAM,UAAU,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,wBAAwB,EACxB;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;CACzG,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3B,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AACnF,CAAC,CACF,CAAC;AAEF,8DAA8D;AAC9D,uBAAuB;AACvB,8DAA8D;AAE9D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,kCAAkC,EAClC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACnB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAClF,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,+CAA+C,EAC/C;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC7D,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;IACrC,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAC/D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,iCAAiC,EACjC;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAChF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC5D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CAChD,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;IACxC,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;QAC3C,SAAS;QACT,OAAO;QACP,OAAO;QACP,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,8DAA8D;AAC9D,mBAAmB;AACnB,8DAA8D;AAE9D,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,2BAA2B,EAC3B,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACpF,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,kCAAkC,EAClC;IACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;CACjD,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;IAC1C,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE;QAChD,WAAW;QACX,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,EAAE,CAAC;AAC1E,CAAC,CACF,CAAC;AAEF,8DAA8D;AAC9D,kBAAkB;AAClB,8DAA8D;AAE9D,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,iCAAiC,EACjC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAC/D,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACnB,MAAM,IAAI,GAAG,MAAM;QACjB,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC;QACzD,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,oCAAoC,EACpC;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAClH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CAC/D,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;IAClD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACrD,KAAK;QACL,OAAO;QACP,IAAI,EAAE,IAAI,IAAI,MAAM;QACpB,MAAM,EAAE,MAAM,IAAI,IAAI;QACtB,OAAO;KACR,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAClF,CAAC,CACF,CAAC;AAEF,8DAA8D;AAC9D,kBAAkB;AAClB,8DAA8D;AAE9D,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,4CAA4C,EAC5C,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACpF,CAAC,CACF,CAAC;AAEF,8DAA8D;AAC9D,gBAAgB;AAChB,8DAA8D;AAE9D,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@sutraha/mcp-server",
3
+ "version": "0.1.1",
4
+ "description": "MCP server for Sutraha HQ — connects AI agents to the orchestration dashboard",
5
+ "type": "module",
6
+ "bin": {
7
+ "sutraha-mcp": "dist/index.js",
8
+ "sutraha-cli": "dist/cli.js"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsc --watch",
14
+ "start": "node dist/index.js"
15
+ },
16
+ "dependencies": {
17
+ "@modelcontextprotocol/sdk": "^1.0.0",
18
+ "convex": "^1.31.7"
19
+ },
20
+ "devDependencies": {
21
+ "typescript": "^5.0.0",
22
+ "@types/node": "^20.0.0"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "README.md"
27
+ ]
28
+ }