@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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nestr
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,228 @@
1
+ # @nestr/mcp
2
+
3
+ MCP (Model Context Protocol) server for [Nestr](https://nestr.io) - connect AI assistants like Claude to your workspace.
4
+
5
+ ## What is this?
6
+
7
+ This MCP server allows AI assistants to interact with your Nestr workspace:
8
+
9
+ - Search for tasks, projects, and roles
10
+ - Create and update nests
11
+ - View organizational structure (circles, roles, accountabilities)
12
+ - Get workspace insights and metrics
13
+ - Add comments and collaborate
14
+
15
+ ## Quick Start
16
+
17
+ ### 1. Get Your API Key
18
+
19
+ 1. Go to your [Nestr workspace](https://app.nestr.io)
20
+ 2. Click **Settings** (gear icon) in the top right
21
+ 3. Go to the **Integrations** tab
22
+ 4. Find **"Workspace API access"** and click **Configure**
23
+ 5. Click **"New API key"** and copy it
24
+
25
+ ### 2. Configure Your AI Client
26
+
27
+ #### Claude Desktop
28
+
29
+ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
30
+
31
+ ```json
32
+ {
33
+ "mcpServers": {
34
+ "nestr": {
35
+ "command": "npx",
36
+ "args": ["-y", "@nestr/mcp"],
37
+ "env": {
38
+ "NESTR_API_KEY": "your-api-key-here"
39
+ }
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ Restart Claude Desktop after saving.
46
+
47
+ #### Claude Code
48
+
49
+ Add to your Claude Code MCP settings:
50
+
51
+ ```json
52
+ {
53
+ "mcpServers": {
54
+ "nestr": {
55
+ "command": "npx",
56
+ "args": ["-y", "@nestr/mcp"],
57
+ "env": {
58
+ "NESTR_API_KEY": "your-api-key-here"
59
+ }
60
+ }
61
+ }
62
+ }
63
+ ```
64
+
65
+ #### Cursor
66
+
67
+ Add to your Cursor MCP configuration with the same format as above.
68
+
69
+ ### 3. Start Using It
70
+
71
+ Ask your AI assistant things like:
72
+
73
+ - "What workspaces do I have access to?"
74
+ - "Search for tasks related to marketing"
75
+ - "Create a new project called 'Q1 Planning'"
76
+ - "What are my current projects and their status?"
77
+ - "Who is responsible for customer support?"
78
+ - "Show me the structure of the Product circle"
79
+
80
+ ## Available Tools
81
+
82
+ | Tool | Description |
83
+ |------|-------------|
84
+ | `nestr_list_workspaces` | List accessible workspaces |
85
+ | `nestr_get_workspace` | Get workspace details |
86
+ | `nestr_search` | Search for nests (tasks, projects, roles) |
87
+ | `nestr_get_nest` | Get details of a specific nest |
88
+ | `nestr_get_nest_children` | Get child nests |
89
+ | `nestr_create_nest` | Create a new nest |
90
+ | `nestr_update_nest` | Update nest properties |
91
+ | `nestr_delete_nest` | Delete a nest |
92
+ | `nestr_add_comment` | Add a comment to a nest |
93
+ | `nestr_get_comments` | Get comments/discussion on a nest |
94
+ | `nestr_list_circles` | List organizational circles |
95
+ | `nestr_get_circle` | Get circle details |
96
+ | `nestr_get_circle_roles` | Get roles in a circle |
97
+ | `nestr_list_roles` | List all roles |
98
+ | `nestr_list_users` | List workspace members |
99
+ | `nestr_get_user` | Get user details |
100
+ | `nestr_list_labels` | List available labels |
101
+ | `nestr_get_label` | Get label details |
102
+ | `nestr_get_projects` | List projects with status |
103
+ | `nestr_get_insights` | Get self-organization and team health metrics |
104
+ | `nestr_get_insight_history` | Get historical trend data for a metric |
105
+ | `nestr_get_workspace_apps` | List enabled apps/features in workspace |
106
+ | `nestr_list_inbox` | List items in user's inbox (OAuth only) |
107
+ | `nestr_create_inbox_item` | Quick capture to inbox (OAuth only) |
108
+ | `nestr_get_inbox_item` | Get inbox item details (OAuth only) |
109
+ | `nestr_update_inbox_item` | Update inbox item (OAuth only) |
110
+
111
+ ## Authentication
112
+
113
+ There are two ways to authenticate with the Nestr MCP server:
114
+
115
+ ### Option 1: API Key (Simple)
116
+
117
+ API keys provide full workspace access and are the easiest way to get started. See [Quick Start](#quick-start) above.
118
+
119
+ **Note:** API keys have full workspace access regardless of user permissions.
120
+
121
+ ### Option 2: OAuth (Recommended for Hosted Service)
122
+
123
+ OAuth authentication respects user-specific permissions - the AI assistant can only access what the authenticated user can access.
124
+
125
+ #### Using the Hosted Service (mcp.nestr.io)
126
+
127
+ The hosted service at [mcp.nestr.io](https://mcp.nestr.io) supports OAuth out of the box:
128
+
129
+ 1. Visit [mcp.nestr.io/oauth/authorize](https://mcp.nestr.io/oauth/authorize)
130
+ 2. Log in with your Nestr account and authorize access
131
+ 3. Copy the access token from the success page
132
+ 4. Use the token in your MCP client configuration:
133
+
134
+ ```json
135
+ {
136
+ "mcpServers": {
137
+ "nestr": {
138
+ "command": "npx",
139
+ "args": ["-y", "@nestr/mcp"],
140
+ "env": {
141
+ "NESTR_OAUTH_TOKEN": "your-oauth-token-here"
142
+ }
143
+ }
144
+ }
145
+ }
146
+ ```
147
+
148
+ #### Self-Hosted OAuth Setup
149
+
150
+ If you're running your own instance of the MCP server and want to enable OAuth:
151
+
152
+ 1. **Contact Nestr** at [dev@nestr.io](mailto:dev@nestr.io) to register an OAuth client
153
+ 2. Provide your callback URL (e.g., `https://your-domain.com/oauth/callback`)
154
+ 3. Nestr will provide you with a `client_id` and `client_secret`
155
+ 4. Set the following environment variables:
156
+
157
+ ```bash
158
+ NESTR_OAUTH_CLIENT_ID=your-client-id
159
+ NESTR_OAUTH_CLIENT_SECRET=your-client-secret
160
+ ```
161
+
162
+ Once configured, users can authenticate via `/oauth/authorize` on your server.
163
+
164
+ ## Environment Variables
165
+
166
+ | Variable | Description | Required |
167
+ |----------|-------------|----------|
168
+ | `NESTR_API_KEY` | Nestr API key (full workspace access) | Yes* |
169
+ | `NESTR_OAUTH_TOKEN` | OAuth token (respects user permissions) | Yes* |
170
+ | `NESTR_API_BASE` | API base URL (default: `https://app.nestr.io/api`) | No |
171
+ | `NESTR_OAUTH_CLIENT_ID` | OAuth client ID (for self-hosted OAuth) | No |
172
+ | `NESTR_OAUTH_CLIENT_SECRET` | OAuth client secret (for self-hosted OAuth) | No |
173
+
174
+ \* Either `NESTR_API_KEY` or `NESTR_OAUTH_TOKEN` is required.
175
+
176
+ ## Development
177
+
178
+ ```bash
179
+ # Clone the repository
180
+ git clone https://github.com/nestr-dev/nestr-mcp.git
181
+ cd nestr-mcp
182
+
183
+ # Install dependencies
184
+ npm install
185
+
186
+ # Set your API key
187
+ export NESTR_API_KEY=your-api-key
188
+
189
+ # Run in development mode (stdio)
190
+ npm run dev
191
+
192
+ # Run HTTP server for local testing
193
+ npm run dev:http
194
+
195
+ # Build for production
196
+ npm run build
197
+
198
+ # Test with MCP Inspector
199
+ npm run inspect
200
+ ```
201
+
202
+ ## Hosted Service
203
+
204
+ A hosted version is available at [mcp.nestr.io](https://mcp.nestr.io) for users who prefer not to run the server locally.
205
+
206
+ ## Security
207
+
208
+ - Never commit your API key or OAuth token to version control
209
+ - API keys provide full workspace access - consider using OAuth for more granular permissions
210
+ - OAuth tokens respect user permissions and are the recommended approach for shared environments
211
+ - Store credentials securely (e.g., in a password manager or secrets manager)
212
+ - Rotate keys/tokens if you suspect they've been compromised
213
+
214
+ ## Resources
215
+
216
+ - [Nestr Help Center](https://help.nestr.io)
217
+ - [Nestr API Documentation](https://app.nestr.io/api/docs)
218
+ - [Model Context Protocol](https://modelcontextprotocol.io)
219
+ - [MCP Specification](https://modelcontextprotocol.io/specification/2025-11-25)
220
+
221
+ ## License
222
+
223
+ MIT - see [LICENSE](LICENSE)
224
+
225
+ ## Support
226
+
227
+ - [GitHub Issues](https://github.com/nestr-dev/nestr-mcp/issues)
228
+ - [Nestr Support](https://help.nestr.io)
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Nestr API Client
3
+ * Wrapper for the Nestr REST API
4
+ */
5
+ export interface NestrClientConfig {
6
+ apiKey: string;
7
+ baseUrl?: string;
8
+ /** MCP client name (e.g., "claude-desktop", "cursor") for tracking */
9
+ mcpClient?: string;
10
+ }
11
+ export interface Nest {
12
+ _id: string;
13
+ title: string;
14
+ purpose?: string;
15
+ description?: string;
16
+ parentId?: string;
17
+ ancestors?: string[];
18
+ labels?: string[];
19
+ fields?: Record<string, unknown>;
20
+ /** Miscellaneous data storage (e.g., third-party IDs, custom metadata) */
21
+ data?: Record<string, unknown>;
22
+ /**
23
+ * Context-dependent date field:
24
+ * - Project/Task: due date
25
+ * - Role: re-election date
26
+ * - Meeting: start date
27
+ */
28
+ due?: string;
29
+ /** Whether this item is completed (for tasks/projects/meetings etc.) */
30
+ completed?: boolean;
31
+ /** User IDs assigned to this nest (must be explicitly set, not inherited from parent role) */
32
+ users?: string[];
33
+ createdAt?: string;
34
+ updatedAt?: string;
35
+ }
36
+ export interface Post {
37
+ _id: string;
38
+ body: string;
39
+ parentId: string;
40
+ ancestors?: string[];
41
+ labels?: string[];
42
+ createdAt?: string;
43
+ }
44
+ export interface User {
45
+ _id: string;
46
+ username: string;
47
+ profile?: {
48
+ email?: string;
49
+ fullName?: string;
50
+ avatar?: string;
51
+ };
52
+ }
53
+ export interface Label {
54
+ _id: string;
55
+ title: string;
56
+ workspaceId?: string;
57
+ userId?: string;
58
+ }
59
+ export interface Role extends Nest {
60
+ accountabilities?: string[];
61
+ domains?: string[];
62
+ }
63
+ export interface Insight {
64
+ nestId: string;
65
+ type: string;
66
+ workspaceId: string;
67
+ title: string;
68
+ currentValue: number;
69
+ compareValue?: number;
70
+ dataType?: string;
71
+ goal?: number;
72
+ }
73
+ export interface WorkspaceApp {
74
+ _id: string;
75
+ title: string;
76
+ description?: string;
77
+ enabled: boolean;
78
+ }
79
+ export declare class NestrApiError extends Error {
80
+ status: number;
81
+ endpoint: string;
82
+ constructor(message: string, status: number, endpoint: string);
83
+ }
84
+ export declare class NestrClient {
85
+ private apiKey;
86
+ private baseUrl;
87
+ private mcpClient?;
88
+ constructor(config: NestrClientConfig);
89
+ private fetch;
90
+ listWorkspaces(options?: {
91
+ search?: string;
92
+ limit?: number;
93
+ cleanText?: boolean;
94
+ }): Promise<Nest[]>;
95
+ getWorkspace(workspaceId: string, cleanText?: boolean): Promise<Nest>;
96
+ searchWorkspace(workspaceId: string, search: string, options?: {
97
+ limit?: number;
98
+ cleanText?: boolean;
99
+ }): Promise<Nest[]>;
100
+ getWorkspaceProjects(workspaceId: string, options?: {
101
+ limit?: number;
102
+ cleanText?: boolean;
103
+ }): Promise<Nest[]>;
104
+ getNest(nestId: string, cleanText?: boolean): Promise<Nest>;
105
+ getNestChildren(nestId: string, cleanText?: boolean): Promise<Nest[]>;
106
+ createNest(data: {
107
+ parentId: string;
108
+ title: string;
109
+ purpose?: string;
110
+ description?: string;
111
+ labels?: string[];
112
+ fields?: Record<string, unknown>;
113
+ users?: string[];
114
+ }): Promise<Nest>;
115
+ updateNest(nestId: string, updates: Partial<{
116
+ title: string;
117
+ purpose: string;
118
+ description: string;
119
+ parentId: string;
120
+ labels: string[];
121
+ fields: Record<string, unknown>;
122
+ users: string[];
123
+ data: Record<string, unknown>;
124
+ }>): Promise<Nest>;
125
+ deleteNest(nestId: string): Promise<void>;
126
+ searchNest(nestId: string, search: string, options?: {
127
+ limit?: number;
128
+ cleanText?: boolean;
129
+ }): Promise<Nest[]>;
130
+ getNestPosts(nestId: string, options?: {
131
+ depth?: number;
132
+ }): Promise<Post[]>;
133
+ createPost(nestId: string, body: string): Promise<Post>;
134
+ listCircles(workspaceId: string, options?: {
135
+ limit?: number;
136
+ cleanText?: boolean;
137
+ }): Promise<Role[]>;
138
+ getCircle(workspaceId: string, circleId: string, cleanText?: boolean): Promise<Role>;
139
+ getCircleRoles(workspaceId: string, circleId: string, options?: {
140
+ limit?: number;
141
+ cleanText?: boolean;
142
+ }): Promise<Role[]>;
143
+ listRoles(workspaceId: string, options?: {
144
+ limit?: number;
145
+ cleanText?: boolean;
146
+ }): Promise<Role[]>;
147
+ listUsers(workspaceId: string, options?: {
148
+ search?: string;
149
+ includeSuspended?: boolean;
150
+ }): Promise<User[]>;
151
+ getUser(workspaceId: string, userId: string): Promise<User>;
152
+ listLabels(workspaceId: string, options?: {
153
+ search?: string;
154
+ }): Promise<Label[]>;
155
+ getLabel(workspaceId: string, labelId: string): Promise<Label>;
156
+ getInsights(workspaceId: string, options?: {
157
+ includeSubCircles?: boolean;
158
+ userId?: string;
159
+ }): Promise<{
160
+ status: string;
161
+ metrics: Insight[];
162
+ }>;
163
+ getInsightHistory(workspaceId: string, metricId: string, options?: {
164
+ from?: string;
165
+ to?: string;
166
+ limit?: number;
167
+ }): Promise<unknown[]>;
168
+ getWorkspaceApps(workspaceId: string): Promise<WorkspaceApp[]>;
169
+ /**
170
+ * List items in the current user's inbox.
171
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
172
+ */
173
+ listInbox(options?: {
174
+ completedAfter?: string;
175
+ }): Promise<Nest[]>;
176
+ /**
177
+ * Create a new item in the current user's inbox (quick capture).
178
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
179
+ */
180
+ createInboxItem(data: {
181
+ title: string;
182
+ description?: string;
183
+ }): Promise<Nest>;
184
+ /**
185
+ * Get a single inbox item by ID.
186
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
187
+ */
188
+ getInboxItem(nestId: string, cleanText?: boolean): Promise<Nest>;
189
+ /**
190
+ * Update an inbox item.
191
+ * Requires OAuth token (user-scoped) - does not work with workspace API keys.
192
+ * To move out of inbox, use nestr_update_nest to change parentId.
193
+ */
194
+ updateInboxItem(nestId: string, updates: Partial<{
195
+ title: string;
196
+ description: string;
197
+ completed: boolean;
198
+ data: Record<string, unknown>;
199
+ }>): Promise<Nest>;
200
+ }
201
+ /**
202
+ * Factory function to create client from environment variables
203
+ *
204
+ * Supports two authentication methods:
205
+ * 1. NESTR_OAUTH_TOKEN - OAuth Bearer token (recommended - respects user permissions)
206
+ * 2. NESTR_API_KEY - API key from workspace settings (full workspace access)
207
+ *
208
+ * If both are set, NESTR_API_KEY takes precedence for backwards compatibility.
209
+ */
210
+ export declare function createClientFromEnv(): NestrClient;
211
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}