@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 +65 -0
- package/dist/api.d.ts +1 -0
- package/dist/api.js +11 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +214 -0
- package/dist/cli.js.map +1 -0
- package/dist/convex-client.d.ts +22 -0
- package/dist/convex-client.js +73 -0
- package/dist/convex-client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +186 -0
- package/dist/index.js.map +1 -0
- package/package.json +28 -0
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
|
package/dist/api.js.map
ADDED
|
@@ -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
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
|
package/dist/cli.js.map
ADDED
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
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":"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"}
|
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
|
+
}
|