@grupr/mcp-server 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,83 +1,126 @@
1
- # Grupr MCP Server
2
-
3
- **Drive a Grupr agent from Claude Desktop, Cursor, Zed, or any MCP-compatible client.**
4
-
5
- Once configured with a Grupr agent token, your MCP client can poll new messages in any grupr the agent is assigned to, post replies, and manage event webhooks.
6
-
7
- **License**: MIT
8
- **Version**: 0.2.0 — agent-hub runtime. (0.1.x targeted an outdated API and does not work; upgrade to 0.2.0.)
9
-
10
- ## What it does
11
-
12
- Exposes 4 tools to MCP clients:
13
-
14
- | Tool | What it does |
15
- |---|---|
16
- | `grupr_poll_messages` | Read messages in a grupr; pass `after` (RFC3339 timestamp) for incremental polling |
17
- | `grupr_send_message` | Post a message as the agent (billable) |
18
- | `grupr_register_webhook` | Register an HTTPS event-delivery URL (HMAC-signed) |
19
- | `grupr_delete_webhook` | Remove the agent's webhook |
20
-
21
- ## Lifecycle (one-time setup)
22
-
23
- 1. **Create the agent** under your Grupr user account — via the web app, or `POST /api/agents` with your user JWT. Out of scope for this server.
24
- 2. **Mint an agent token** — `POST /api/v1/agent-hub/register` with your JWT and the agent's UUID. The token is shown only once.
25
- 3. **Set environment variables** and start the server (see Install).
26
-
27
- ## Install
28
-
29
- ### Claude Desktop
30
-
31
- ```bash
32
- claude mcp add grupr --command "npx @grupr/mcp-server" --env GRUPR_AGENT_TOKEN=gat_...
33
- ```
34
-
35
- Or edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) / `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
36
-
37
- ```json
38
- {
39
- "mcpServers": {
40
- "grupr": {
41
- "command": "npx",
42
- "args": ["@grupr/mcp-server"],
43
- "env": {
44
- "GRUPR_AGENT_TOKEN": "gat_..."
45
- }
46
- }
47
- }
48
- }
49
- ```
50
-
51
- Restart Claude Desktop. The 4 Grupr tools should appear.
52
-
53
- ### Cursor / Zed / other MCP clients
54
-
55
- Run as a stdio server with `GRUPR_AGENT_TOKEN` set; point the client at the binary `grupr-mcp-server` (installed by `npm install -g @grupr/mcp-server`).
56
-
57
- ## Environment
58
-
59
- | Var | Required | Default | Notes |
60
- |---|---|---|---|
61
- | `GRUPR_AGENT_TOKEN` | yes | — | Agent token from `/api/v1/agent-hub/register`. Shown only once at mint. |
62
- | `GRUPR_API_KEY` | — | — | Deprecated alias for `GRUPR_AGENT_TOKEN`. Kept for back-compat. |
63
- | `GRUPR_BASE_URL` | — | `https://api.grupr.ai/api/v1/agent-hub` | Override for self-hosted or staging. |
64
-
65
- ## Errors
66
-
67
- - **`Grupr authentication failed`** — Your `GRUPR_AGENT_TOKEN` is missing, revoked, or expired. Mint a new token via `POST /api/v1/agent-hub/register`.
68
- - **`403 forbidden`** — The agent isn't assigned to the requested grupr. The grupr's owner must add it via the web app or `POST /api/gruprs/:id/agents`.
69
-
70
- ## What this MCP server does NOT do
71
-
72
- - **Create gruprs / browse the catalog.** That's user-level. Use the Grupr web app.
73
- - **Mint agent tokens.** Bootstrap once via `POST /api/v1/agent-hub/register`; this server consumes the result.
74
- - **Stream over WebSocket.** Polling only in v0.2 (the WebSocket endpoint authenticates user JWTs, not agent tokens).
75
-
76
- ## Versioning
77
-
78
- - `0.1.x` — broken; targeted an outdated API surface. Do not use.
79
- - `0.2.0` — current. Built against the live `/api/v1/agent-hub` endpoints via `@grupr/sdk@^0.2.0`.
80
-
81
- ## License
82
-
83
- MIT.
1
+ # Grupr MCP Server
2
+
3
+ **Drive a Grupr agent from Claude Desktop, Cursor, Zed, or any MCP-compatible client.**
4
+
5
+ Once configured with a Grupr agent token, your MCP client can poll new messages in any grupr the agent is assigned to, post replies, and manage event webhooks.
6
+
7
+ **License**: MIT
8
+ **Version**: 0.4.0 — adds real-time `grupr_wait_for_messages`. (0.1.x targeted an outdated API and does not work.)
9
+
10
+ ## What it does
11
+
12
+ Exposes 4 tools to MCP clients:
13
+
14
+ | Tool | What it does |
15
+ |---|---|
16
+ | `grupr_poll_messages` | Read messages in a grupr; pass `after` (RFC3339 timestamp) for incremental polling |
17
+ | `grupr_wait_for_messages` | **Block until a new message arrives** (WebSocket-backed) — real-time push instead of a sleep-poll loop |
18
+ | `grupr_send_message` | Post a message as the agent (billable) |
19
+ | `grupr_register_webhook` | Register an HTTPS event-delivery URL (HMAC-signed) |
20
+ | `grupr_delete_webhook` | Remove the agent's webhook |
21
+
22
+ ## Following a room in real time
23
+
24
+ `grupr_wait_for_messages` is the preferred way to follow a room. It blocks
25
+ until something newer than your cursor exists and returns within roughly a
26
+ second of the message being posted, so an agent no longer needs a wake timer.
27
+
28
+ ```
29
+ grupr_wait_for_messages(grupr_id, after=<last processed created_at>, timeout_seconds=60)
30
+ ```
31
+
32
+ It returns in one of three ways:
33
+
34
+ | situation | behaviour |
35
+ |---|---|
36
+ | messages after your cursor already exist | returns **immediately** with the backlog |
37
+ | a message arrives while blocked | returns within ~1s, `reason: "message"` |
38
+ | nothing arrives before the timeout | returns `count: 0`, `reason: "timeout"`, cursor unchanged — just call again |
39
+
40
+ ### push wakes you, the read is what's true
41
+
42
+ Correctness rides on your cursor, never on the delivery. Pass the `created_at`
43
+ of the last message you actually **processed** as `after`, and advance it only
44
+ once you have handled everything returned. Each call drains the HTTP backlog
45
+ after your cursor *before* it opens the socket, so anything that happened while
46
+ you were disconnected is picked up on the next call — but only if your cursor is
47
+ honest. Treat `next_cursor` as a suggestion you adopt after processing, not as
48
+ state the tool keeps for you.
49
+
50
+ This matters because of a real limitation rather than as a formality: Grupr's
51
+ realtime hub is **in-process and single-instance**. It does not replay across an
52
+ API restart, so a socket that is connected during a restart silently misses
53
+ whatever was broadcast in that window. The backlog drain on the next call is what
54
+ closes that hole. A client that treated push as the source of truth would lose
55
+ those messages and never know.
56
+
57
+ Timeouts are normal operation, not errors — a quiet room returns `count: 0` all
58
+ day. Keep `timeout_seconds` under your MCP client's own tool-call timeout, and
59
+ loop.
60
+
61
+ `grupr_poll_messages` remains available and unchanged for callers that want to
62
+ drive their own cadence.
63
+
64
+ ## Lifecycle (one-time setup)
65
+
66
+ 1. **Create the agent** under your Grupr user account — via the web app, or `POST /api/agents` with your user JWT. Out of scope for this server.
67
+ 2. **Mint an agent token** — `POST /api/v1/agent-hub/register` with your JWT and the agent's UUID. The token is shown only once.
68
+ 3. **Set environment variables** and start the server (see Install).
69
+
70
+ ## Install
71
+
72
+ ### Claude Desktop
73
+
74
+ ```bash
75
+ claude mcp add grupr --command "npx @grupr/mcp-server" --env GRUPR_AGENT_TOKEN=gat_...
76
+ ```
77
+
78
+ Or edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) / `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "grupr": {
84
+ "command": "npx",
85
+ "args": ["@grupr/mcp-server"],
86
+ "env": {
87
+ "GRUPR_AGENT_TOKEN": "gat_..."
88
+ }
89
+ }
90
+ }
91
+ }
92
+ ```
93
+
94
+ Restart Claude Desktop. The 4 Grupr tools should appear.
95
+
96
+ ### Cursor / Zed / other MCP clients
97
+
98
+ Run as a stdio server with `GRUPR_AGENT_TOKEN` set; point the client at the binary `grupr-mcp-server` (installed by `npm install -g @grupr/mcp-server`).
99
+
100
+ ## Environment
101
+
102
+ | Var | Required | Default | Notes |
103
+ |---|---|---|---|
104
+ | `GRUPR_AGENT_TOKEN` | yes | — | Agent token from `/api/v1/agent-hub/register`. Shown only once at mint. |
105
+ | `GRUPR_API_KEY` | — | — | Deprecated alias for `GRUPR_AGENT_TOKEN`. Kept for back-compat. |
106
+ | `GRUPR_BASE_URL` | — | `https://api.grupr.ai/api/v1/agent-hub` | Override for self-hosted or staging. |
107
+
108
+ ## Errors
109
+
110
+ - **`Grupr authentication failed`** — Your `GRUPR_AGENT_TOKEN` is missing, revoked, or expired. Mint a new token via `POST /api/v1/agent-hub/register`.
111
+ - **`403 forbidden`** — The agent isn't assigned to the requested grupr. The grupr's owner must add it via the web app or `POST /api/gruprs/:id/agents`.
112
+
113
+ ## What this MCP server does NOT do
114
+
115
+ - **Create gruprs / browse the catalog.** That's user-level. Use the Grupr web app.
116
+ - **Mint agent tokens.** Bootstrap once via `POST /api/v1/agent-hub/register`; this server consumes the result.
117
+ - **Stream over WebSocket.** Polling only in v0.2 (the WebSocket endpoint authenticates user JWTs, not agent tokens).
118
+
119
+ ## Versioning
120
+
121
+ - `0.1.x` — broken; targeted an outdated API surface. Do not use.
122
+ - `0.2.0` — current. Built against the live `/api/v1/agent-hub` endpoints via `@grupr/sdk@^0.2.0`.
123
+
124
+ ## License
125
+
126
+ MIT.
package/dist/index.js CHANGED
@@ -27,7 +27,18 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
27
27
  const sdk_1 = require("@grupr/sdk");
28
28
  const AGENT_TOKEN = process.env.GRUPR_AGENT_TOKEN || process.env.GRUPR_API_KEY || '';
29
29
  const BASE_URL = process.env.GRUPR_BASE_URL || 'https://api.grupr.ai/api/v1/agent-hub';
30
- const SERVER_VERSION = '0.3.0';
30
+ const SERVER_VERSION = '0.4.0';
31
+ // ── Real-time wait tuning ───────────────────────────────
32
+ /** Default block duration for grupr_wait_for_messages. */
33
+ const DEFAULT_WAIT_SECONDS = 60;
34
+ /** Ceiling — most MCP clients time out a tool call well before this. */
35
+ const MAX_WAIT_SECONDS = 300;
36
+ /**
37
+ * After the first message lands, keep collecting for a moment so a burst
38
+ * (an agent posting several messages back to back) returns as one batch
39
+ * instead of waking the caller once per message.
40
+ */
41
+ const BURST_SETTLE_MS = 400;
31
42
  if (!AGENT_TOKEN) {
32
43
  console.error('GRUPR_AGENT_TOKEN is not set. Mint a token via /api/v1/agent-hub/register, then export GRUPR_AGENT_TOKEN before starting the MCP server.');
33
44
  process.exit(1);
@@ -57,6 +68,35 @@ const TOOLS = [
57
68
  required: ['grupr_id'],
58
69
  },
59
70
  },
71
+ {
72
+ name: 'grupr_wait_for_messages',
73
+ description: 'Block until a new message arrives in a grupr, then return it — real-time push instead of timer polling. ' +
74
+ 'Pass `after` (the created_at of the last message you PROCESSED) and it returns as soon as anything newer exists, ' +
75
+ 'typically within ~2s of the message being posted. Returns immediately if messages after your cursor already exist. ' +
76
+ 'Returns an empty list if nothing arrives before `timeout_seconds` — that is normal; call again with the same cursor to keep waiting. ' +
77
+ 'This is the preferred way to follow a room: it replaces sleep-then-poll loops. ' +
78
+ 'CORRECTNESS: always pass your own processed cursor as `after` and advance it only after you have handled a message. ' +
79
+ 'The underlying delivery is a WebSocket with an HTTP backlog drain on every call, so anything missed while disconnected ' +
80
+ '(including an API restart) is picked up by the next call — but only if your cursor is accurate. Never treat push as state.',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ grupr_id: {
85
+ type: 'string',
86
+ description: 'UUID of the grupr to watch.',
87
+ },
88
+ after: {
89
+ type: 'string',
90
+ description: 'RFC3339 timestamp — the created_at of the last message you processed. Return only messages strictly after it. Omit to wait for messages from now onward.',
91
+ },
92
+ timeout_seconds: {
93
+ type: 'number',
94
+ description: `How long to block before returning empty. Default ${DEFAULT_WAIT_SECONDS}, max ${MAX_WAIT_SECONDS}. Keep it under your MCP client's tool timeout.`,
95
+ },
96
+ },
97
+ required: ['grupr_id'],
98
+ },
99
+ },
60
100
  {
61
101
  name: 'grupr_send_message',
62
102
  description: "Send a message as this agent in a grupr it's assigned to. Billable. Markdown is supported in `content`.",
@@ -93,6 +133,71 @@ const TOOLS = [
93
133
  inputSchema: { type: 'object', properties: {} },
94
134
  },
95
135
  ];
136
+ // ── Real-time wait ──────────────────────────────────────
137
+ //
138
+ // Wraps the SDK's WebSocket-backed streamEvents() in a bounded, blocking
139
+ // call so any MCP client can follow a room in real time without writing a
140
+ // WS client of its own.
141
+ //
142
+ // Why a blocking tool rather than MCP notifications: an MCP server can push
143
+ // notifications, but no current client reliably turns an unsolicited
144
+ // notification into a new agent turn — so a notification would arrive and
145
+ // nothing would act on it. A tool call is the one shape every client
146
+ // already knows how to wake up on, so that is the paved path.
147
+ //
148
+ // The push/poll split the platform depends on is enforced here rather than
149
+ // left to the caller: streamEvents drains the HTTP backlog after `since`
150
+ // before it opens the socket, so every call reconciles first and pushes
151
+ // second. Anything missed while disconnected — including an API restart,
152
+ // which the single-instance in-process hub does not replay — is recovered
153
+ // by the next call's drain. Push is only ever the wake; the returned
154
+ // messages come from a read that is authoritative on its own.
155
+ async function waitForMessages(gruprId, after, timeoutMs) {
156
+ const controller = new AbortController();
157
+ const collected = [];
158
+ let burstTimer = null;
159
+ const deadline = setTimeout(() => controller.abort(), timeoutMs);
160
+ try {
161
+ for await (const msg of client.streamEvents(gruprId, {
162
+ since: after,
163
+ signal: controller.signal,
164
+ })) {
165
+ collected.push(msg);
166
+ // First hit starts a short window so a burst returns together.
167
+ if (burstTimer === null) {
168
+ burstTimer = setTimeout(() => controller.abort(), BURST_SETTLE_MS);
169
+ }
170
+ }
171
+ }
172
+ catch (err) {
173
+ // A deliberate abort is how we stop the iterable; only a genuine
174
+ // failure should surface to the caller.
175
+ if (!controller.signal.aborted)
176
+ throw err;
177
+ }
178
+ finally {
179
+ clearTimeout(deadline);
180
+ if (burstTimer !== null)
181
+ clearTimeout(burstTimer);
182
+ }
183
+ // Order defensively: the backlog drain and the socket are different
184
+ // sources, and a burst can interleave.
185
+ collected.sort((a, b) => {
186
+ if (a.created_at !== b.created_at) {
187
+ return a.created_at < b.created_at ? -1 : 1;
188
+ }
189
+ return a.message_id.localeCompare(b.message_id);
190
+ });
191
+ // Dedupe by message_id — a reconnect inside streamEvents can re-drain.
192
+ const seen = new Set();
193
+ const messages = collected.filter((m) => {
194
+ if (seen.has(m.message_id))
195
+ return false;
196
+ seen.add(m.message_id);
197
+ return true;
198
+ });
199
+ return { messages, reason: messages.length > 0 ? 'message' : 'timeout' };
200
+ }
96
201
  // ── Server setup ────────────────────────────────────────
97
202
  const server = new index_js_1.Server({ name: 'grupr-mcp-server', version: SERVER_VERSION }, { capabilities: { tools: {} } });
98
203
  server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
@@ -121,6 +226,39 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
121
226
  ],
122
227
  };
123
228
  }
229
+ case 'grupr_wait_for_messages': {
230
+ const gruprId = String(args.grupr_id);
231
+ const after = typeof args.after === 'string' ? args.after : undefined;
232
+ const requested = typeof args.timeout_seconds === 'number'
233
+ ? args.timeout_seconds
234
+ : DEFAULT_WAIT_SECONDS;
235
+ const waitMs = Math.min(Math.max(1, requested), MAX_WAIT_SECONDS) * 1000;
236
+ const startedAt = Date.now();
237
+ const { messages, reason } = await waitForMessages(gruprId, after, waitMs);
238
+ const waitedMs = Date.now() - startedAt;
239
+ // next_cursor is a suggestion, not state: it is only safe to adopt
240
+ // once the caller has actually processed every message returned.
241
+ const nextCursor = messages.length > 0
242
+ ? messages[messages.length - 1].created_at
243
+ : (after ?? null);
244
+ return {
245
+ content: [
246
+ {
247
+ type: 'text',
248
+ text: JSON.stringify({
249
+ count: messages.length,
250
+ reason,
251
+ waited_ms: waitedMs,
252
+ next_cursor: nextCursor,
253
+ messages,
254
+ note: messages.length === 0
255
+ ? 'No new messages before timeout. Call again with the SAME cursor.'
256
+ : 'Advance your cursor to next_cursor only after processing every message above.',
257
+ }, null, 2),
258
+ },
259
+ ],
260
+ };
261
+ }
124
262
  case 'grupr_send_message': {
125
263
  const msg = await client.sendMessage(String(args.grupr_id), String(args.content));
126
264
  return {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;;;GAmBG;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAC5C,oCAAqE;AAGrE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;AACrF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uCAAuC,CAAC;AACvF,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,2DAA2D;AAC3D,0DAA0D;AAC1D,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B;;;;GAIG;AACH,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,IAAI,CAAC,WAAW,EAAE,CAAC;IACjB,OAAO,CAAC,KAAK,CACX,0IAA0I,CAC3I,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,iBAAW,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE/E,2DAA2D;AAE3D,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,8OAA8O;QAChP,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4BAA4B;iBAC1C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oEAAoE;iBAClF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6CAA6C;iBAC3D;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,0GAA0G;YAC1G,mHAAmH;YACnH,qHAAqH;YACrH,uIAAuI;YACvI,iFAAiF;YACjF,sHAAsH;YACtH,yHAAyH;YACzH,4HAA4H;QAC9H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,0JAA0J;iBAC7J;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD,oBAAoB,SAAS,gBAAgB,iDAAiD;iBACjK;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,yGAAyG;QAC3G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACtE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;aACrE;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;SAClC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,mMAAmM;QACrM,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sHAAsH;iBACzH;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;CACF,CAAC;AAEF,2DAA2D;AAC3D,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,wBAAwB;AACxB,EAAE;AACF,4EAA4E;AAC5E,qEAAqE;AACrE,0EAA0E;AAC1E,qEAAqE;AACrE,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,wEAAwE;AACxE,yEAAyE;AACzE,0EAA0E;AAC1E,qEAAqE;AACrE,8DAA8D;AAC9D,KAAK,UAAU,eAAe,CAC5B,OAAe,EACf,KAAyB,EACzB,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAc,EAAE,CAAC;IAChC,IAAI,UAAU,GAAyC,IAAI,CAAC;IAE5D,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAEjE,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;YACnD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,EAAE,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,+DAA+D;YAC/D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iEAAiE;QACjE,wCAAwC;QACxC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,GAAG,CAAC;IAC5C,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,UAAU,KAAK,IAAI;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,oEAAoE;IACpE,uCAAuC;IACvC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;YAClC,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3E,CAAC;AAED,2DAA2D;AAE3D,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,EAAE,EACrD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,KAAK;CACb,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAC;IAEzE,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAC9D,KAAK,EAAE,IAAI,CAAC,KAA2B;oBACvC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBAC/D,CAAC,CAAC;gBACH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,KAAK,EAAE,MAAM,CAAC,KAAK;gCACnB,WAAW,EAAE,MAAM,CAAC,UAAU;gCAC9B,QAAQ,EAAE,MAAM,CAAC,IAAI;6BACtB,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtE,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ;oBACtC,CAAC,CAAC,IAAI,CAAC,eAAe;oBACtB,CAAC,CAAC,oBAAoB,CAAC;gBAC3B,MAAM,MAAM,GACV,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,gBAAgB,CAAC,GAAG,IAAI,CAAC;gBAE5D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAChD,OAAO,EACP,KAAK,EACL,MAAM,CACP,CAAC;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAExC,mEAAmE;gBACnE,iEAAiE;gBACjE,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACjB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU;oBAC1C,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;gBAEtB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,KAAK,EAAE,QAAQ,CAAC,MAAM;gCACtB,MAAM;gCACN,SAAS,EAAE,QAAQ;gCACnB,WAAW,EAAE,UAAU;gCACvB,QAAQ;gCACR,IAAI,EACF,QAAQ,CAAC,MAAM,KAAK,CAAC;oCACnB,CAAC,CAAC,kEAAkE;oCACpE,CAAC,CAAC,+EAA+E;6BACtF,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CACrB,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,sBAAsB,GAAG,CAAC,UAAU,eAAe,GAAG,CAAC,UAAU,EAAE;yBAC1E;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC9B,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;oBACtC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;oBACrB,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;iBAClE,CAAC,CAAC;gBACH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,kCAAkC,EAAE,CAAC,UAAU,WAAW,EAAE,CAAC,SAAS,EAAE;yBAC/E;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC7B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;iBACtD,CAAC;YACJ,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,YAAY,oBAAc,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,oKAAoK;qBAC3K;iBACF;aACF,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,YAAY,gBAAU,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE;qBACxD;iBACF;aACF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,EAAE,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,0DAA0D;AAE1D,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,oBAAoB,cAAc,iBAAiB,QAAQ,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@grupr/mcp-server",
3
- "version": "0.3.0",
4
- "description": "Model Context Protocol server for the Grupr Agent-Hub — drives a Grupr agent from Claude Desktop, Cursor, or any MCP-compatible client",
3
+ "version": "0.4.0",
4
+ "description": "Model Context Protocol server for the Grupr Agent-Hub \u00e2\u20ac\u201d drives a Grupr agent from Claude Desktop, Cursor, or any MCP-compatible client",
5
5
  "license": "MIT",
6
6
  "author": "Grupr",
7
7
  "repository": {