@nestr/mcp 0.1.8

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,279 @@
1
+ /**
2
+ * Nestr API Client
3
+ * Wrapper for the Nestr REST API
4
+ */
5
+ export class NestrApiError extends Error {
6
+ status;
7
+ endpoint;
8
+ constructor(message, status, endpoint) {
9
+ super(message);
10
+ this.status = status;
11
+ this.endpoint = endpoint;
12
+ this.name = "NestrApiError";
13
+ }
14
+ }
15
+ export class NestrClient {
16
+ apiKey;
17
+ baseUrl;
18
+ mcpClient;
19
+ constructor(config) {
20
+ this.apiKey = config.apiKey;
21
+ this.baseUrl = config.baseUrl || "https://app.nestr.io/api";
22
+ this.mcpClient = config.mcpClient;
23
+ }
24
+ async fetch(endpoint, options = {}) {
25
+ const url = `${this.baseUrl}${endpoint}`;
26
+ const headers = {
27
+ Authorization: `Bearer ${this.apiKey}`,
28
+ "Content-Type": "application/json",
29
+ };
30
+ // Add MCP client header for tracking which AI agent made the request
31
+ if (this.mcpClient) {
32
+ headers["X-MCP-Client"] = this.mcpClient;
33
+ }
34
+ const response = await fetch(url, {
35
+ ...options,
36
+ headers: {
37
+ ...headers,
38
+ ...options.headers,
39
+ },
40
+ });
41
+ if (!response.ok) {
42
+ const errorText = await response.text().catch(() => "Unknown error");
43
+ throw new NestrApiError(`API request failed: ${response.status} ${response.statusText} - ${errorText}`, response.status, endpoint);
44
+ }
45
+ // Handle empty responses (e.g., DELETE)
46
+ const text = await response.text();
47
+ if (!text)
48
+ return {};
49
+ return JSON.parse(text);
50
+ }
51
+ // ============ WORKSPACES ============
52
+ async listWorkspaces(options) {
53
+ const params = new URLSearchParams();
54
+ if (options?.search)
55
+ params.set("search", options.search);
56
+ if (options?.limit)
57
+ params.set("limit", options.limit.toString());
58
+ if (options?.cleanText)
59
+ params.set("cleanText", "true");
60
+ const query = params.toString();
61
+ return this.fetch(`/workspaces${query ? `?${query}` : ""}`);
62
+ }
63
+ async getWorkspace(workspaceId, cleanText = false) {
64
+ const params = cleanText ? "?cleanText=true" : "";
65
+ return this.fetch(`/workspaces/${workspaceId}${params}`);
66
+ }
67
+ async searchWorkspace(workspaceId, search, options) {
68
+ const params = new URLSearchParams({ search });
69
+ if (options?.limit)
70
+ params.set("limit", options.limit.toString());
71
+ if (options?.cleanText)
72
+ params.set("cleanText", "true");
73
+ return this.fetch(`/workspaces/${workspaceId}/search?${params}`);
74
+ }
75
+ async getWorkspaceProjects(workspaceId, options) {
76
+ const params = new URLSearchParams();
77
+ if (options?.limit)
78
+ params.set("limit", options.limit.toString());
79
+ if (options?.cleanText)
80
+ params.set("cleanText", "true");
81
+ const query = params.toString();
82
+ return this.fetch(`/workspaces/${workspaceId}/projects${query ? `?${query}` : ""}`);
83
+ }
84
+ // ============ NESTS ============
85
+ async getNest(nestId, cleanText = false) {
86
+ const params = cleanText ? "?cleanText=true" : "";
87
+ return this.fetch(`/nests/${nestId}${params}`);
88
+ }
89
+ async getNestChildren(nestId, cleanText = false) {
90
+ const params = cleanText ? "?cleanText=true" : "";
91
+ return this.fetch(`/nests/${nestId}/children${params}`);
92
+ }
93
+ async createNest(data) {
94
+ return this.fetch("/nests", {
95
+ method: "POST",
96
+ body: JSON.stringify(data),
97
+ });
98
+ }
99
+ async updateNest(nestId, updates) {
100
+ return this.fetch(`/nests/${nestId}`, {
101
+ method: "PATCH",
102
+ body: JSON.stringify(updates),
103
+ });
104
+ }
105
+ async deleteNest(nestId) {
106
+ await this.fetch(`/nests/${nestId}`, {
107
+ method: "DELETE",
108
+ });
109
+ }
110
+ async searchNest(nestId, search, options) {
111
+ const params = new URLSearchParams({ search });
112
+ if (options?.limit)
113
+ params.set("limit", options.limit.toString());
114
+ if (options?.cleanText)
115
+ params.set("cleanText", "true");
116
+ return this.fetch(`/nests/${nestId}/search?${params}`);
117
+ }
118
+ // ============ POSTS/COMMENTS ============
119
+ async getNestPosts(nestId, options) {
120
+ const params = new URLSearchParams();
121
+ if (options?.depth)
122
+ params.set("depth", options.depth.toString());
123
+ const query = params.toString();
124
+ return this.fetch(`/nests/${nestId}/posts${query ? `?${query}` : ""}`);
125
+ }
126
+ async createPost(nestId, body) {
127
+ return this.fetch(`/nests/${nestId}/posts`, {
128
+ method: "POST",
129
+ body: JSON.stringify({ body, parentId: nestId }),
130
+ });
131
+ }
132
+ // ============ CIRCLES & ROLES ============
133
+ async listCircles(workspaceId, options) {
134
+ const params = new URLSearchParams();
135
+ if (options?.limit)
136
+ params.set("limit", options.limit.toString());
137
+ if (options?.cleanText)
138
+ params.set("cleanText", "true");
139
+ const query = params.toString();
140
+ return this.fetch(`/workspaces/${workspaceId}/circles${query ? `?${query}` : ""}`);
141
+ }
142
+ async getCircle(workspaceId, circleId, cleanText = false) {
143
+ const params = cleanText ? "?cleanText=true" : "";
144
+ return this.fetch(`/workspaces/${workspaceId}/circles/${circleId}${params}`);
145
+ }
146
+ async getCircleRoles(workspaceId, circleId, options) {
147
+ const params = new URLSearchParams();
148
+ if (options?.limit)
149
+ params.set("limit", options.limit.toString());
150
+ if (options?.cleanText)
151
+ params.set("cleanText", "true");
152
+ const query = params.toString();
153
+ return this.fetch(`/workspaces/${workspaceId}/circles/${circleId}/roles${query ? `?${query}` : ""}`);
154
+ }
155
+ async listRoles(workspaceId, options) {
156
+ const params = new URLSearchParams();
157
+ if (options?.limit)
158
+ params.set("limit", options.limit.toString());
159
+ if (options?.cleanText)
160
+ params.set("cleanText", "true");
161
+ const query = params.toString();
162
+ return this.fetch(`/workspaces/${workspaceId}/roles${query ? `?${query}` : ""}`);
163
+ }
164
+ // ============ USERS ============
165
+ async listUsers(workspaceId, options) {
166
+ const params = new URLSearchParams();
167
+ if (options?.search)
168
+ params.set("search", options.search);
169
+ if (options?.includeSuspended)
170
+ params.set("includeSuspended", "true");
171
+ const query = params.toString();
172
+ return this.fetch(`/workspaces/${workspaceId}/users${query ? `?${query}` : ""}`);
173
+ }
174
+ async getUser(workspaceId, userId) {
175
+ return this.fetch(`/workspaces/${workspaceId}/users/${userId}`);
176
+ }
177
+ // ============ LABELS ============
178
+ async listLabels(workspaceId, options) {
179
+ const params = new URLSearchParams();
180
+ if (options?.search)
181
+ params.set("search", options.search);
182
+ const query = params.toString();
183
+ return this.fetch(`/workspaces/${workspaceId}/labels${query ? `?${query}` : ""}`);
184
+ }
185
+ async getLabel(workspaceId, labelId) {
186
+ return this.fetch(`/workspaces/${workspaceId}/labels/${labelId}`);
187
+ }
188
+ // ============ INSIGHTS ============
189
+ async getInsights(workspaceId, options) {
190
+ const params = new URLSearchParams();
191
+ if (options?.includeSubCircles !== undefined) {
192
+ params.set("includeSubCircles", options.includeSubCircles.toString());
193
+ }
194
+ if (options?.userId)
195
+ params.set("userId", options.userId);
196
+ const query = params.toString();
197
+ return this.fetch(`/workspaces/${workspaceId}/insights${query ? `?${query}` : ""}`);
198
+ }
199
+ async getInsightHistory(workspaceId, metricId, options) {
200
+ const params = new URLSearchParams();
201
+ if (options?.from)
202
+ params.set("from", options.from);
203
+ if (options?.to)
204
+ params.set("to", options.to);
205
+ if (options?.limit)
206
+ params.set("limit", options.limit.toString());
207
+ const query = params.toString();
208
+ return this.fetch(`/workspaces/${workspaceId}/insights/${metricId}/history${query ? `?${query}` : ""}`);
209
+ }
210
+ // ============ APPS ============
211
+ async getWorkspaceApps(workspaceId) {
212
+ return this.fetch(`/workspaces/${workspaceId}/apps`);
213
+ }
214
+ // ============ INBOX (requires OAuth token) ============
215
+ /**
216
+ * List items in the current user's inbox.
217
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
218
+ */
219
+ async listInbox(options) {
220
+ const params = new URLSearchParams();
221
+ if (options?.completedAfter)
222
+ params.set("completedAfter", options.completedAfter);
223
+ const query = params.toString();
224
+ return this.fetch(`/users/me/inbox${query ? `?${query}` : ""}`);
225
+ }
226
+ /**
227
+ * Create a new item in the current user's inbox (quick capture).
228
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
229
+ */
230
+ async createInboxItem(data) {
231
+ return this.fetch("/users/me/inbox", {
232
+ method: "POST",
233
+ body: JSON.stringify(data),
234
+ });
235
+ }
236
+ /**
237
+ * Get a single inbox item by ID.
238
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
239
+ */
240
+ async getInboxItem(nestId, cleanText = false) {
241
+ const params = cleanText ? "?cleanText=true" : "";
242
+ return this.fetch(`/users/me/inbox/${nestId}${params}`);
243
+ }
244
+ /**
245
+ * Update an inbox item.
246
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
247
+ * To move out of inbox, use nestr_update_nest to change parentId.
248
+ */
249
+ async updateInboxItem(nestId, updates) {
250
+ return this.fetch(`/users/me/inbox/${nestId}`, {
251
+ method: "PATCH",
252
+ body: JSON.stringify(updates),
253
+ });
254
+ }
255
+ }
256
+ /**
257
+ * Factory function to create client from environment variables
258
+ *
259
+ * Supports two authentication methods:
260
+ * 1. NESTR_OAUTH_TOKEN - OAuth Bearer token (recommended - respects user permissions)
261
+ * 2. NESTR_API_KEY - API key from workspace settings (full workspace access)
262
+ *
263
+ * If both are set, NESTR_API_KEY takes precedence for backwards compatibility.
264
+ */
265
+ export function createClientFromEnv() {
266
+ const apiKey = process.env.NESTR_API_KEY;
267
+ const oauthToken = process.env.NESTR_OAUTH_TOKEN;
268
+ const authToken = apiKey || oauthToken;
269
+ if (!authToken) {
270
+ throw new Error("Authentication required. Set one of the following environment variables:\n" +
271
+ " - NESTR_API_KEY: API key from workspace settings > Integrations > Workspace API access\n" +
272
+ " - NESTR_OAUTH_TOKEN: OAuth Bearer token from Nestr OAuth flow");
273
+ }
274
+ return new NestrClient({
275
+ apiKey: authToken,
276
+ baseUrl: process.env.NESTR_API_BASE,
277
+ });
278
+ }
279
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Nestr MCP Server - HTTP entry point
4
+ *
5
+ * For hosted deployment at mcp.nestr.io
6
+ *
7
+ * Serves:
8
+ * GET / - Landing page with documentation
9
+ * GET /.well-known/oauth-protected-resource - OAuth protected resource metadata (RFC 9728)
10
+ * GET /.well-known/oauth-authorization-server - OAuth authorization server metadata (RFC 8414)
11
+ * POST /oauth/register - Dynamic client registration (RFC 7591)
12
+ * GET /oauth/authorize - Initiates OAuth flow, redirects to Nestr
13
+ * GET /oauth/callback - Handles OAuth callback from Nestr
14
+ * POST /oauth/token - Token endpoint (proxies to Nestr with PKCE verification)
15
+ * POST /mcp - MCP protocol endpoint (Streamable HTTP)
16
+ * GET /mcp - SSE stream for server-initiated messages
17
+ * DELETE /mcp - Session termination
18
+ * GET /health - Health check endpoint
19
+ *
20
+ * Authentication:
21
+ * - API Key: X-Nestr-API-Key header
22
+ * - OAuth: Authorization: Bearer <token> header
23
+ */
24
+ export {};
25
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG"}