noverload-mcp 0.1.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 +95 -0
- package/dist/client.d.ts +140 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +190 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +17 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +42 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/tools/index.d.ts +16 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +366 -0
- package/dist/tools/index.js.map +1 -0
- package/package.json +55 -0
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# @noverload/mcp-server
|
|
2
|
+
|
|
3
|
+
Connect your Noverload saved content to AI assistants like Claude, Cursor, and Windsurf using the Model Context Protocol (MCP).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 📚 Access all your saved content (YouTube, X posts, Reddit, articles, PDFs)
|
|
8
|
+
- 🔍 Search through your content library
|
|
9
|
+
- ✅ View and complete action items
|
|
10
|
+
- 🎯 Reference your Health, Wealth, and Relationships goals
|
|
11
|
+
- 🔒 Secure access with personal access tokens
|
|
12
|
+
- 📝 Read-only mode by default for safety
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install -g @noverload/mcp-server
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
### 1. Get Your Access Token
|
|
23
|
+
|
|
24
|
+
1. Log in to [Noverload](https://www.noverload.com)
|
|
25
|
+
2. Go to Settings → Apps
|
|
26
|
+
3. Click "New Token" and create a personal access token
|
|
27
|
+
4. Copy the token (you won't be able to see it again)
|
|
28
|
+
|
|
29
|
+
### 2. Configure Your AI Tool
|
|
30
|
+
|
|
31
|
+
#### Claude Desktop
|
|
32
|
+
|
|
33
|
+
Add to your Claude configuration file:
|
|
34
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
35
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"mcpServers": {
|
|
40
|
+
"noverload": {
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": ["-y", "@noverload/mcp-server"],
|
|
43
|
+
"env": {
|
|
44
|
+
"NOVERLOAD_CONFIG": "{\"accessToken\":\"YOUR_TOKEN_HERE\",\"readOnly\":true}"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
#### Cursor
|
|
52
|
+
|
|
53
|
+
1. Open Cursor Settings
|
|
54
|
+
2. Navigate to Features → Model Context Protocol
|
|
55
|
+
3. Add the same configuration as above
|
|
56
|
+
|
|
57
|
+
#### Windsurf
|
|
58
|
+
|
|
59
|
+
Add to your Windsurf MCP configuration with the same format as Claude Desktop.
|
|
60
|
+
|
|
61
|
+
## Available Commands
|
|
62
|
+
|
|
63
|
+
Once configured, your AI assistant can:
|
|
64
|
+
|
|
65
|
+
- **list_saved_content** - Browse your saved content library
|
|
66
|
+
- **get_content_details** - Get full details including summaries and insights
|
|
67
|
+
- **search_content** - Search through your content by keywords
|
|
68
|
+
- **list_actions** - View action items extracted from content
|
|
69
|
+
- **list_goals** - See your Health, Wealth, and Relationships goals
|
|
70
|
+
- **save_content** - Save new URLs (when read-only is disabled)
|
|
71
|
+
- **complete_action** - Mark action items as completed (when read-only is disabled)
|
|
72
|
+
|
|
73
|
+
## Configuration Options
|
|
74
|
+
|
|
75
|
+
| Option | Type | Default | Description |
|
|
76
|
+
|--------|------|---------|-------------|
|
|
77
|
+
| `accessToken` | string | required | Your Noverload personal access token |
|
|
78
|
+
| `apiUrl` | string | `https://www.noverload.com` | API endpoint (for self-hosting) |
|
|
79
|
+
| `readOnly` | boolean | `true` | Restrict to read-only operations |
|
|
80
|
+
|
|
81
|
+
## Security
|
|
82
|
+
|
|
83
|
+
- **Use Read-Only Mode**: Keep `readOnly: true` unless you need write access
|
|
84
|
+
- **Protect Your Token**: Never share your personal access token
|
|
85
|
+
- **Revoke When Needed**: You can revoke tokens anytime from Noverload settings
|
|
86
|
+
|
|
87
|
+
## Support
|
|
88
|
+
|
|
89
|
+
- [Documentation](https://www.noverload.com/docs)
|
|
90
|
+
- [GitHub Issues](https://github.com/noverload/mcp-server/issues)
|
|
91
|
+
- Email: support@noverload.com
|
|
92
|
+
|
|
93
|
+
## License
|
|
94
|
+
|
|
95
|
+
MIT © Noverload
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export interface ClientConfig {
|
|
3
|
+
accessToken: string;
|
|
4
|
+
apiUrl: string;
|
|
5
|
+
readOnly: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const ContentSchema: z.ZodObject<{
|
|
8
|
+
id: z.ZodString;
|
|
9
|
+
userId: z.ZodString;
|
|
10
|
+
url: z.ZodString;
|
|
11
|
+
title: z.ZodNullable<z.ZodString>;
|
|
12
|
+
description: z.ZodNullable<z.ZodString>;
|
|
13
|
+
contentType: z.ZodEnum<["youtube", "x_post", "reddit", "article", "pdf"]>;
|
|
14
|
+
status: z.ZodEnum<["pending", "processing", "completed", "failed"]>;
|
|
15
|
+
summary: z.ZodNullable<z.ZodAny>;
|
|
16
|
+
keyInsights: z.ZodNullable<z.ZodArray<z.ZodString, "many">>;
|
|
17
|
+
rawText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
18
|
+
ogImage: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
19
|
+
processingMetadata: z.ZodOptional<z.ZodNullable<z.ZodAny>>;
|
|
20
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
21
|
+
createdAt: z.ZodString;
|
|
22
|
+
updatedAt: z.ZodString;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
id: string;
|
|
25
|
+
userId: string;
|
|
26
|
+
url: string;
|
|
27
|
+
title: string | null;
|
|
28
|
+
description: string | null;
|
|
29
|
+
contentType: "youtube" | "x_post" | "reddit" | "article" | "pdf";
|
|
30
|
+
status: "pending" | "processing" | "completed" | "failed";
|
|
31
|
+
keyInsights: string[] | null;
|
|
32
|
+
createdAt: string;
|
|
33
|
+
updatedAt: string;
|
|
34
|
+
summary?: any;
|
|
35
|
+
rawText?: string | null | undefined;
|
|
36
|
+
ogImage?: string | null | undefined;
|
|
37
|
+
processingMetadata?: any;
|
|
38
|
+
tags?: string[] | undefined;
|
|
39
|
+
}, {
|
|
40
|
+
id: string;
|
|
41
|
+
userId: string;
|
|
42
|
+
url: string;
|
|
43
|
+
title: string | null;
|
|
44
|
+
description: string | null;
|
|
45
|
+
contentType: "youtube" | "x_post" | "reddit" | "article" | "pdf";
|
|
46
|
+
status: "pending" | "processing" | "completed" | "failed";
|
|
47
|
+
keyInsights: string[] | null;
|
|
48
|
+
createdAt: string;
|
|
49
|
+
updatedAt: string;
|
|
50
|
+
summary?: any;
|
|
51
|
+
rawText?: string | null | undefined;
|
|
52
|
+
ogImage?: string | null | undefined;
|
|
53
|
+
processingMetadata?: any;
|
|
54
|
+
tags?: string[] | undefined;
|
|
55
|
+
}>;
|
|
56
|
+
export declare const ActionSchema: z.ZodObject<{
|
|
57
|
+
id: z.ZodString;
|
|
58
|
+
contentId: z.ZodString;
|
|
59
|
+
goalId: z.ZodNullable<z.ZodString>;
|
|
60
|
+
title: z.ZodString;
|
|
61
|
+
description: z.ZodNullable<z.ZodString>;
|
|
62
|
+
priority: z.ZodEnum<["high", "medium", "low"]>;
|
|
63
|
+
completed: z.ZodBoolean;
|
|
64
|
+
completedAt: z.ZodNullable<z.ZodString>;
|
|
65
|
+
createdAt: z.ZodString;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
id: string;
|
|
68
|
+
title: string;
|
|
69
|
+
description: string | null;
|
|
70
|
+
completed: boolean;
|
|
71
|
+
createdAt: string;
|
|
72
|
+
contentId: string;
|
|
73
|
+
goalId: string | null;
|
|
74
|
+
priority: "high" | "medium" | "low";
|
|
75
|
+
completedAt: string | null;
|
|
76
|
+
}, {
|
|
77
|
+
id: string;
|
|
78
|
+
title: string;
|
|
79
|
+
description: string | null;
|
|
80
|
+
completed: boolean;
|
|
81
|
+
createdAt: string;
|
|
82
|
+
contentId: string;
|
|
83
|
+
goalId: string | null;
|
|
84
|
+
priority: "high" | "medium" | "low";
|
|
85
|
+
completedAt: string | null;
|
|
86
|
+
}>;
|
|
87
|
+
export declare const GoalSchema: z.ZodObject<{
|
|
88
|
+
id: z.ZodString;
|
|
89
|
+
userId: z.ZodString;
|
|
90
|
+
title: z.ZodString;
|
|
91
|
+
description: z.ZodNullable<z.ZodString>;
|
|
92
|
+
category: z.ZodEnum<["health", "wealth", "relationships"]>;
|
|
93
|
+
isActive: z.ZodBoolean;
|
|
94
|
+
createdAt: z.ZodString;
|
|
95
|
+
}, "strip", z.ZodTypeAny, {
|
|
96
|
+
id: string;
|
|
97
|
+
userId: string;
|
|
98
|
+
title: string;
|
|
99
|
+
description: string | null;
|
|
100
|
+
createdAt: string;
|
|
101
|
+
category: "health" | "wealth" | "relationships";
|
|
102
|
+
isActive: boolean;
|
|
103
|
+
}, {
|
|
104
|
+
id: string;
|
|
105
|
+
userId: string;
|
|
106
|
+
title: string;
|
|
107
|
+
description: string | null;
|
|
108
|
+
createdAt: string;
|
|
109
|
+
category: "health" | "wealth" | "relationships";
|
|
110
|
+
isActive: boolean;
|
|
111
|
+
}>;
|
|
112
|
+
export type Content = z.infer<typeof ContentSchema>;
|
|
113
|
+
export type Action = z.infer<typeof ActionSchema>;
|
|
114
|
+
export type Goal = z.infer<typeof GoalSchema>;
|
|
115
|
+
export declare class NoverloadClient {
|
|
116
|
+
private config;
|
|
117
|
+
private headers;
|
|
118
|
+
constructor(config: ClientConfig);
|
|
119
|
+
initialize(): Promise<void>;
|
|
120
|
+
validateToken(): Promise<boolean>;
|
|
121
|
+
private request;
|
|
122
|
+
listContent(filters?: {
|
|
123
|
+
status?: string;
|
|
124
|
+
contentType?: string;
|
|
125
|
+
limit?: number;
|
|
126
|
+
}): Promise<Content[]>;
|
|
127
|
+
getContent(id: string): Promise<Content>;
|
|
128
|
+
saveContent(url: string): Promise<Content>;
|
|
129
|
+
listActions(filters?: {
|
|
130
|
+
contentId?: string;
|
|
131
|
+
goalId?: string;
|
|
132
|
+
completed?: boolean;
|
|
133
|
+
}): Promise<Action[]>;
|
|
134
|
+
completeAction(id: string): Promise<Action>;
|
|
135
|
+
listGoals(): Promise<Goal[]>;
|
|
136
|
+
searchContent(query: string, options?: {
|
|
137
|
+
tags?: string[];
|
|
138
|
+
}): Promise<Content[]>;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAGD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBxB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUvB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;EAQrB,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAClD,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C,qBAAa,eAAe;IAGd,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,OAAO,CAAyB;gBAEpB,MAAM,EAAE,YAAY;IAOlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;YASzB,OAAO;IAef,WAAW,CAAC,OAAO,CAAC,EAAE;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAahB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQxC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB1C,WAAW,CAAC,OAAO,CAAC,EAAE;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAef,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB3C,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAQ5B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6CtF"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// Schema definitions matching your Noverload database
|
|
3
|
+
export const ContentSchema = z.object({
|
|
4
|
+
id: z.string(),
|
|
5
|
+
userId: z.string(),
|
|
6
|
+
url: z.string(),
|
|
7
|
+
title: z.string().nullable(),
|
|
8
|
+
description: z.string().nullable(),
|
|
9
|
+
contentType: z.enum(["youtube", "x_post", "reddit", "article", "pdf"]),
|
|
10
|
+
status: z.enum(["pending", "processing", "completed", "failed"]),
|
|
11
|
+
summary: z.any().nullable(), // Can be string or object
|
|
12
|
+
keyInsights: z.array(z.string()).nullable(),
|
|
13
|
+
rawText: z.string().nullable().optional(), // Full content text
|
|
14
|
+
ogImage: z.string().nullable().optional(),
|
|
15
|
+
processingMetadata: z.any().nullable().optional(),
|
|
16
|
+
tags: z.array(z.string()).optional(), // Associated tags
|
|
17
|
+
createdAt: z.string(),
|
|
18
|
+
updatedAt: z.string(),
|
|
19
|
+
});
|
|
20
|
+
export const ActionSchema = z.object({
|
|
21
|
+
id: z.string(),
|
|
22
|
+
contentId: z.string(),
|
|
23
|
+
goalId: z.string().nullable(),
|
|
24
|
+
title: z.string(),
|
|
25
|
+
description: z.string().nullable(),
|
|
26
|
+
priority: z.enum(["high", "medium", "low"]),
|
|
27
|
+
completed: z.boolean(),
|
|
28
|
+
completedAt: z.string().nullable(),
|
|
29
|
+
createdAt: z.string(),
|
|
30
|
+
});
|
|
31
|
+
export const GoalSchema = z.object({
|
|
32
|
+
id: z.string(),
|
|
33
|
+
userId: z.string(),
|
|
34
|
+
title: z.string(),
|
|
35
|
+
description: z.string().nullable(),
|
|
36
|
+
category: z.enum(["health", "wealth", "relationships"]),
|
|
37
|
+
isActive: z.boolean(),
|
|
38
|
+
createdAt: z.string(),
|
|
39
|
+
});
|
|
40
|
+
export class NoverloadClient {
|
|
41
|
+
config;
|
|
42
|
+
headers;
|
|
43
|
+
constructor(config) {
|
|
44
|
+
this.config = config;
|
|
45
|
+
this.headers = {
|
|
46
|
+
"Authorization": `Bearer ${config.accessToken}`,
|
|
47
|
+
"Content-Type": "application/json",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async initialize() {
|
|
51
|
+
// Verify the token is valid by making a test request
|
|
52
|
+
const response = await this.request("/api/user");
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
const errorText = await response.text().catch(() => "Unknown error");
|
|
55
|
+
throw new Error(`Invalid access token or API unavailable: ${response.status} - ${errorText}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async validateToken() {
|
|
59
|
+
try {
|
|
60
|
+
const response = await this.request("/api/user");
|
|
61
|
+
return response.ok;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async request(path, options = {}) {
|
|
68
|
+
const url = `${this.config.apiUrl}${path}`;
|
|
69
|
+
return fetch(url, {
|
|
70
|
+
...options,
|
|
71
|
+
headers: {
|
|
72
|
+
...this.headers,
|
|
73
|
+
...options.headers,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// Content methods
|
|
78
|
+
async listContent(filters) {
|
|
79
|
+
const params = new URLSearchParams();
|
|
80
|
+
if (filters?.status)
|
|
81
|
+
params.append("status", filters.status);
|
|
82
|
+
if (filters?.contentType)
|
|
83
|
+
params.append("contentType", filters.contentType);
|
|
84
|
+
if (filters?.limit)
|
|
85
|
+
params.append("limit", filters.limit.toString());
|
|
86
|
+
const response = await this.request(`/api/mcp/content?${params}`);
|
|
87
|
+
if (!response.ok)
|
|
88
|
+
throw new Error("Failed to fetch content");
|
|
89
|
+
const data = await response.json();
|
|
90
|
+
return z.array(ContentSchema).parse(data);
|
|
91
|
+
}
|
|
92
|
+
async getContent(id) {
|
|
93
|
+
const response = await this.request(`/api/mcp/content/${id}`);
|
|
94
|
+
if (!response.ok)
|
|
95
|
+
throw new Error("Content not found");
|
|
96
|
+
const data = await response.json();
|
|
97
|
+
return ContentSchema.parse(data);
|
|
98
|
+
}
|
|
99
|
+
async saveContent(url) {
|
|
100
|
+
if (this.config.readOnly) {
|
|
101
|
+
throw new Error("Cannot save content in read-only mode");
|
|
102
|
+
}
|
|
103
|
+
const response = await this.request("/api/mcp/content", {
|
|
104
|
+
method: "POST",
|
|
105
|
+
body: JSON.stringify({ url }),
|
|
106
|
+
});
|
|
107
|
+
if (!response.ok)
|
|
108
|
+
throw new Error("Failed to save content");
|
|
109
|
+
const data = await response.json();
|
|
110
|
+
return ContentSchema.parse(data);
|
|
111
|
+
}
|
|
112
|
+
// Action methods
|
|
113
|
+
async listActions(filters) {
|
|
114
|
+
const params = new URLSearchParams();
|
|
115
|
+
if (filters?.contentId)
|
|
116
|
+
params.append("contentId", filters.contentId);
|
|
117
|
+
if (filters?.goalId)
|
|
118
|
+
params.append("goalId", filters.goalId);
|
|
119
|
+
if (filters?.completed !== undefined) {
|
|
120
|
+
params.append("completed", filters.completed.toString());
|
|
121
|
+
}
|
|
122
|
+
const response = await this.request(`/api/mcp/actions?${params}`);
|
|
123
|
+
if (!response.ok)
|
|
124
|
+
throw new Error("Failed to fetch actions");
|
|
125
|
+
const data = await response.json();
|
|
126
|
+
return z.array(ActionSchema).parse(data);
|
|
127
|
+
}
|
|
128
|
+
async completeAction(id) {
|
|
129
|
+
if (this.config.readOnly) {
|
|
130
|
+
throw new Error("Cannot complete action in read-only mode");
|
|
131
|
+
}
|
|
132
|
+
const response = await this.request(`/api/mcp/actions/${id}/complete`, {
|
|
133
|
+
method: "POST",
|
|
134
|
+
});
|
|
135
|
+
if (!response.ok)
|
|
136
|
+
throw new Error("Failed to complete action");
|
|
137
|
+
const data = await response.json();
|
|
138
|
+
return ActionSchema.parse(data);
|
|
139
|
+
}
|
|
140
|
+
// Goal methods
|
|
141
|
+
async listGoals() {
|
|
142
|
+
const response = await this.request("/api/mcp/goals");
|
|
143
|
+
if (!response.ok)
|
|
144
|
+
throw new Error("Failed to fetch goals");
|
|
145
|
+
const data = await response.json();
|
|
146
|
+
return z.array(GoalSchema).parse(data);
|
|
147
|
+
}
|
|
148
|
+
async searchContent(query, options) {
|
|
149
|
+
// Use the vector-powered search endpoint
|
|
150
|
+
const response = await this.request(`/api/mcp/search/vector`, {
|
|
151
|
+
method: "POST",
|
|
152
|
+
body: JSON.stringify({
|
|
153
|
+
query,
|
|
154
|
+
limit: 20,
|
|
155
|
+
useHybrid: true, // Use both vector and text search
|
|
156
|
+
minSimilarity: 0.25, // Lower threshold for better recall
|
|
157
|
+
tags: options?.tags // Optional tag filter
|
|
158
|
+
}),
|
|
159
|
+
});
|
|
160
|
+
if (!response.ok) {
|
|
161
|
+
const errorText = await response.text().catch(() => "Unknown error");
|
|
162
|
+
console.error(`Search failed: ${response.status} - ${errorText}`);
|
|
163
|
+
throw new Error("Search failed");
|
|
164
|
+
}
|
|
165
|
+
const data = await response.json();
|
|
166
|
+
// Map the search results to MCP format with full content
|
|
167
|
+
if (data?.results && Array.isArray(data.results)) {
|
|
168
|
+
return data.results.map((item) => ({
|
|
169
|
+
id: item.id,
|
|
170
|
+
userId: item.userId || "",
|
|
171
|
+
url: item.url || "",
|
|
172
|
+
title: item.title,
|
|
173
|
+
description: item.description || (item.summary ? String(item.summary).slice(0, 500) : ""),
|
|
174
|
+
contentType: item.contentType || "article",
|
|
175
|
+
status: item.status || "completed",
|
|
176
|
+
summary: item.summary,
|
|
177
|
+
keyInsights: item.keyInsights || [],
|
|
178
|
+
rawText: item.rawText || null, // Include full content
|
|
179
|
+
ogImage: item.ogImage || null,
|
|
180
|
+
processingMetadata: item.processingMetadata || null,
|
|
181
|
+
tags: item.tags || [], // Include tags
|
|
182
|
+
createdAt: item.createdAt || new Date().toISOString(),
|
|
183
|
+
updatedAt: item.updatedAt || new Date().toISOString(),
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
console.warn("No results found in search response");
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { NoverloadClient } from "./client.js";
|
|
7
|
+
import { tools } from "./tools/index.js";
|
|
8
|
+
import { resources } from "./resources/index.js";
|
|
9
|
+
const ConfigSchema = z.object({
|
|
10
|
+
accessToken: z.string().min(1, "Access token is required"),
|
|
11
|
+
apiUrl: z.string().url().optional().default("https://noverload.app"),
|
|
12
|
+
readOnly: z.boolean().optional().default(true),
|
|
13
|
+
});
|
|
14
|
+
async function main() {
|
|
15
|
+
const transport = new StdioServerTransport();
|
|
16
|
+
const server = new Server({
|
|
17
|
+
name: "noverload-mcp",
|
|
18
|
+
version: "0.1.0",
|
|
19
|
+
}, {
|
|
20
|
+
capabilities: {
|
|
21
|
+
tools: {},
|
|
22
|
+
resources: {},
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
let client = null;
|
|
26
|
+
let config = null;
|
|
27
|
+
// Initialize with config from environment or args
|
|
28
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
29
|
+
if (!client) {
|
|
30
|
+
const rawConfig = process.env.NOVERLOAD_CONFIG || process.argv[2];
|
|
31
|
+
if (!rawConfig) {
|
|
32
|
+
throw new Error("Configuration required. Set NOVERLOAD_CONFIG environment variable.");
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
config = ConfigSchema.parse(JSON.parse(rawConfig));
|
|
36
|
+
client = new NoverloadClient(config);
|
|
37
|
+
await client.initialize();
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new Error(`Invalid configuration: ${error}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
tools: tools.map(tool => ({
|
|
45
|
+
name: tool.name,
|
|
46
|
+
description: tool.description,
|
|
47
|
+
inputSchema: tool.inputSchema,
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
52
|
+
if (!client) {
|
|
53
|
+
throw new Error("Client not initialized");
|
|
54
|
+
}
|
|
55
|
+
const tool = tools.find(t => t.name === request.params.name);
|
|
56
|
+
if (!tool) {
|
|
57
|
+
throw new Error(`Unknown tool: ${request.params.name}`);
|
|
58
|
+
}
|
|
59
|
+
if (config?.readOnly && tool.modifies) {
|
|
60
|
+
throw new Error(`Tool ${request.params.name} modifies data but server is in read-only mode`);
|
|
61
|
+
}
|
|
62
|
+
return await tool.handler(client, request.params.arguments);
|
|
63
|
+
});
|
|
64
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
65
|
+
if (!client) {
|
|
66
|
+
throw new Error("Client not initialized");
|
|
67
|
+
}
|
|
68
|
+
const resourceList = await resources.list(client);
|
|
69
|
+
return {
|
|
70
|
+
resources: resourceList,
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
74
|
+
if (!client) {
|
|
75
|
+
throw new Error("Client not initialized");
|
|
76
|
+
}
|
|
77
|
+
return await resources.read(client, request.params.uri);
|
|
78
|
+
});
|
|
79
|
+
await server.connect(transport);
|
|
80
|
+
console.error("Noverload MCP Server running");
|
|
81
|
+
}
|
|
82
|
+
main().catch((error) => {
|
|
83
|
+
console.error("Fatal error:", error);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { NoverloadClient } from "../client.js";
|
|
2
|
+
export declare const resources: {
|
|
3
|
+
list(client: NoverloadClient): Promise<{
|
|
4
|
+
uri: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: any;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
}[]>;
|
|
9
|
+
read(client: NoverloadClient, uri: string): Promise<{
|
|
10
|
+
contents: Array<{
|
|
11
|
+
uri: string;
|
|
12
|
+
mimeType: string;
|
|
13
|
+
text: string;
|
|
14
|
+
}>;
|
|
15
|
+
}>;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAW,MAAM,cAAc,CAAC;AAExD,eAAO,MAAM,SAAS;iBACD,eAAe;;;;;;iBAcf,eAAe,OAAO,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CAiChI,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const resources = {
|
|
2
|
+
async list(client) {
|
|
3
|
+
const content = await client.listContent({
|
|
4
|
+
status: "completed",
|
|
5
|
+
limit: 100
|
|
6
|
+
});
|
|
7
|
+
return content.map((item) => ({
|
|
8
|
+
uri: `noverload://content/${item.id}`,
|
|
9
|
+
name: item.title || `${item.contentType} - ${item.id}`,
|
|
10
|
+
description: item.description || item.summary || "Saved content",
|
|
11
|
+
mimeType: "application/json",
|
|
12
|
+
}));
|
|
13
|
+
},
|
|
14
|
+
async read(client, uri) {
|
|
15
|
+
const match = uri.match(/^noverload:\/\/content\/(.+)$/);
|
|
16
|
+
if (!match) {
|
|
17
|
+
throw new Error(`Invalid resource URI: ${uri}`);
|
|
18
|
+
}
|
|
19
|
+
const contentId = match[1];
|
|
20
|
+
const content = await client.getContent(contentId);
|
|
21
|
+
const actions = await client.listActions({ contentId });
|
|
22
|
+
return {
|
|
23
|
+
contents: [
|
|
24
|
+
{
|
|
25
|
+
uri,
|
|
26
|
+
mimeType: "application/json",
|
|
27
|
+
text: JSON.stringify({
|
|
28
|
+
content,
|
|
29
|
+
actions,
|
|
30
|
+
metadata: {
|
|
31
|
+
url: content.url,
|
|
32
|
+
type: content.contentType,
|
|
33
|
+
processed: content.status === "completed",
|
|
34
|
+
insights: content.keyInsights,
|
|
35
|
+
},
|
|
36
|
+
}, null, 2),
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,CAAC,IAAI,CAAC,MAAuB;QAChC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;YACvC,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC;YACrC,GAAG,EAAE,uBAAuB,IAAI,CAAC,EAAE,EAAE;YACrC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,WAAW,MAAM,IAAI,CAAC,EAAE,EAAE;YACtD,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe;YAChE,QAAQ,EAAE,kBAAkB;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAuB,EAAE,GAAW;QAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAExD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO;wBACP,OAAO;wBACP,QAAQ,EAAE;4BACR,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,IAAI,EAAE,OAAO,CAAC,WAAW;4BACzB,SAAS,EAAE,OAAO,CAAC,MAAM,KAAK,WAAW;4BACzC,QAAQ,EAAE,OAAO,CAAC,WAAW;yBAC9B;qBACF,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NoverloadClient } from "../client.js";
|
|
2
|
+
export interface Tool {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: Record<string, unknown>;
|
|
6
|
+
modifies: boolean;
|
|
7
|
+
handler: (client: NoverloadClient, args: unknown) => Promise<{
|
|
8
|
+
content: Array<{
|
|
9
|
+
type: string;
|
|
10
|
+
text: string;
|
|
11
|
+
}>;
|
|
12
|
+
data?: unknown;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export declare const tools: Tool[];
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAClI;AAED,eAAO,MAAM,KAAK,EAAE,IAAI,EAmYvB,CAAC"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const tools = [
|
|
3
|
+
{
|
|
4
|
+
name: "list_saved_content",
|
|
5
|
+
description: "List saved content from Noverload with full details including titles, summaries, and insights. Optionally filter by status or content type.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
status: {
|
|
10
|
+
type: "string",
|
|
11
|
+
enum: ["pending", "processing", "completed", "failed"],
|
|
12
|
+
description: "Filter by processing status",
|
|
13
|
+
},
|
|
14
|
+
contentType: {
|
|
15
|
+
type: "string",
|
|
16
|
+
enum: ["youtube", "x_post", "reddit", "article", "pdf"],
|
|
17
|
+
description: "Filter by content type",
|
|
18
|
+
},
|
|
19
|
+
limit: {
|
|
20
|
+
type: "number",
|
|
21
|
+
description: "Maximum number of items to return",
|
|
22
|
+
default: 20,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
modifies: false,
|
|
27
|
+
handler: async (client, args) => {
|
|
28
|
+
const schema = z.object({
|
|
29
|
+
status: z.enum(["pending", "processing", "completed", "failed"]).optional(),
|
|
30
|
+
contentType: z.enum(["youtube", "x_post", "reddit", "article", "pdf"]).optional(),
|
|
31
|
+
limit: z.number().optional().default(20),
|
|
32
|
+
});
|
|
33
|
+
const params = schema.parse(args);
|
|
34
|
+
const content = await client.listContent(params);
|
|
35
|
+
// Build detailed response
|
|
36
|
+
let responseText = `# Saved Content Library\n`;
|
|
37
|
+
responseText += `Found ${content.length} items`;
|
|
38
|
+
const filters = [];
|
|
39
|
+
if (params.status)
|
|
40
|
+
filters.push(`status: ${params.status}`);
|
|
41
|
+
if (params.contentType)
|
|
42
|
+
filters.push(`type: ${params.contentType}`);
|
|
43
|
+
if (filters.length > 0) {
|
|
44
|
+
responseText += ` (filtered by ${filters.join(', ')})`;
|
|
45
|
+
}
|
|
46
|
+
responseText += `\n\n`;
|
|
47
|
+
if (content.length > 0) {
|
|
48
|
+
content.forEach((item, idx) => {
|
|
49
|
+
responseText += `## ${idx + 1}. ${item.title || 'Untitled'}\n`;
|
|
50
|
+
responseText += `**Type:** ${item.contentType} | **Status:** ${item.status}\n`;
|
|
51
|
+
responseText += `**URL:** ${item.url}\n`;
|
|
52
|
+
if (item.summary) {
|
|
53
|
+
const summaryObj = typeof item.summary === 'string'
|
|
54
|
+
? { text: item.summary }
|
|
55
|
+
: item.summary;
|
|
56
|
+
if (summaryObj.one_sentence) {
|
|
57
|
+
responseText += `**Summary:** ${summaryObj.one_sentence}\n`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
responseText += `**Saved:** ${new Date(item.createdAt).toLocaleDateString()}\n`;
|
|
61
|
+
responseText += '\n---\n\n';
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
responseText += "No content found matching the specified filters.";
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: responseText,
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
data: content,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "get_content_details",
|
|
80
|
+
description: "Get complete details about a specific saved content item including full transcript/article text, AI-generated summary, key insights, and all metadata",
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: "object",
|
|
83
|
+
properties: {
|
|
84
|
+
contentId: {
|
|
85
|
+
type: "string",
|
|
86
|
+
description: "The ID of the content to retrieve",
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
required: ["contentId"],
|
|
90
|
+
},
|
|
91
|
+
modifies: false,
|
|
92
|
+
handler: async (client, args) => {
|
|
93
|
+
const schema = z.object({
|
|
94
|
+
contentId: z.string(),
|
|
95
|
+
});
|
|
96
|
+
const { contentId } = schema.parse(args);
|
|
97
|
+
const content = await client.getContent(contentId);
|
|
98
|
+
// Build comprehensive response with all details
|
|
99
|
+
let responseText = `# Content Details: ${content.title || 'Untitled'}\n\n`;
|
|
100
|
+
responseText += `**ID:** ${content.id}\n`;
|
|
101
|
+
responseText += `**Type:** ${content.contentType}\n`;
|
|
102
|
+
responseText += `**Status:** ${content.status}\n`;
|
|
103
|
+
responseText += `**URL:** ${content.url}\n`;
|
|
104
|
+
responseText += `**Saved:** ${new Date(content.createdAt).toLocaleDateString()}\n`;
|
|
105
|
+
if (content.tags && content.tags.length > 0) {
|
|
106
|
+
responseText += `**Tags:** ${content.tags.join(', ')}\n`;
|
|
107
|
+
}
|
|
108
|
+
responseText += '\n## Summary & Insights\n';
|
|
109
|
+
if (content.summary) {
|
|
110
|
+
const summaryObj = typeof content.summary === 'string'
|
|
111
|
+
? { text: content.summary }
|
|
112
|
+
: content.summary;
|
|
113
|
+
if (summaryObj.one_sentence) {
|
|
114
|
+
responseText += `**One-line Summary:** ${summaryObj.one_sentence}\n\n`;
|
|
115
|
+
}
|
|
116
|
+
if (summaryObj.key_insights && Array.isArray(summaryObj.key_insights)) {
|
|
117
|
+
responseText += `**Key Insights:**\n`;
|
|
118
|
+
summaryObj.key_insights.forEach((insight, idx) => {
|
|
119
|
+
responseText += `${idx + 1}. ${insight}\n`;
|
|
120
|
+
});
|
|
121
|
+
responseText += '\n';
|
|
122
|
+
}
|
|
123
|
+
if (summaryObj.main_topics && Array.isArray(summaryObj.main_topics)) {
|
|
124
|
+
responseText += `**Main Topics:** ${summaryObj.main_topics.join(', ')}\n\n`;
|
|
125
|
+
}
|
|
126
|
+
if (summaryObj.actionable_takeaways && Array.isArray(summaryObj.actionable_takeaways)) {
|
|
127
|
+
responseText += `**Actionable Takeaways:**\n`;
|
|
128
|
+
summaryObj.actionable_takeaways.forEach((takeaway, idx) => {
|
|
129
|
+
responseText += `${idx + 1}. ${takeaway}\n`;
|
|
130
|
+
});
|
|
131
|
+
responseText += '\n';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Include full text content preview
|
|
135
|
+
if (content.rawText) {
|
|
136
|
+
const wordCount = content.rawText.split(/\s+/).length;
|
|
137
|
+
responseText += `## Full Content\n`;
|
|
138
|
+
responseText += `**Word Count:** ${wordCount} words\n`;
|
|
139
|
+
responseText += `**Preview (first 1000 chars):**\n`;
|
|
140
|
+
responseText += `${content.rawText.slice(0, 1000)}...\n\n`;
|
|
141
|
+
responseText += `*Note: Complete transcript/article text (${wordCount} words) is available in the data field for full analysis.*\n`;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
content: [
|
|
145
|
+
{
|
|
146
|
+
type: "text",
|
|
147
|
+
text: responseText,
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
data: content, // Full content including complete rawText
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: "search_content",
|
|
156
|
+
description: "Search through saved content by keywords using vector embeddings and semantic search. Returns full content details including summaries, key insights, and raw text. Optionally filter by tags.",
|
|
157
|
+
inputSchema: {
|
|
158
|
+
type: "object",
|
|
159
|
+
properties: {
|
|
160
|
+
query: {
|
|
161
|
+
type: "string",
|
|
162
|
+
description: "Search query",
|
|
163
|
+
},
|
|
164
|
+
tags: {
|
|
165
|
+
type: "array",
|
|
166
|
+
items: {
|
|
167
|
+
type: "string",
|
|
168
|
+
},
|
|
169
|
+
description: "Optional list of tags to filter by (e.g., ['productivity', 'AI', 'marketing'])",
|
|
170
|
+
},
|
|
171
|
+
limit: {
|
|
172
|
+
type: "number",
|
|
173
|
+
description: "Maximum number of results to return (default: 10)",
|
|
174
|
+
default: 10,
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
required: ["query"],
|
|
178
|
+
},
|
|
179
|
+
modifies: false,
|
|
180
|
+
handler: async (client, args) => {
|
|
181
|
+
const schema = z.object({
|
|
182
|
+
query: z.string(),
|
|
183
|
+
tags: z.array(z.string()).optional(),
|
|
184
|
+
limit: z.number().optional().default(10),
|
|
185
|
+
});
|
|
186
|
+
const { query, tags, limit } = schema.parse(args);
|
|
187
|
+
const results = await client.searchContent(query, { tags });
|
|
188
|
+
// Limit results
|
|
189
|
+
const limitedResults = results.slice(0, limit);
|
|
190
|
+
// Build comprehensive response with actual content
|
|
191
|
+
let responseText = `# Search Results: "${query}"\n`;
|
|
192
|
+
responseText += `Found ${results.length} total results`;
|
|
193
|
+
if (tags && tags.length > 0) {
|
|
194
|
+
responseText += ` (filtered by tags: ${tags.join(', ')})`;
|
|
195
|
+
}
|
|
196
|
+
responseText += `. Showing top ${limitedResults.length}.\n\n`;
|
|
197
|
+
if (limitedResults.length > 0) {
|
|
198
|
+
limitedResults.forEach((result, idx) => {
|
|
199
|
+
responseText += `## ${idx + 1}. ${result.title || 'Untitled'}\n`;
|
|
200
|
+
responseText += `**Type:** ${result.contentType} | **URL:** ${result.url}\n`;
|
|
201
|
+
if (result.tags && result.tags.length > 0) {
|
|
202
|
+
responseText += `**Tags:** ${result.tags.join(', ')}\n`;
|
|
203
|
+
}
|
|
204
|
+
// Include summary if available
|
|
205
|
+
if (result.summary) {
|
|
206
|
+
const summaryObj = typeof result.summary === 'string'
|
|
207
|
+
? { text: result.summary }
|
|
208
|
+
: result.summary;
|
|
209
|
+
if (summaryObj.one_sentence) {
|
|
210
|
+
responseText += `**Summary:** ${summaryObj.one_sentence}\n`;
|
|
211
|
+
}
|
|
212
|
+
if (summaryObj.key_insights && Array.isArray(summaryObj.key_insights)) {
|
|
213
|
+
responseText += `**Key Insights:**\n`;
|
|
214
|
+
summaryObj.key_insights.slice(0, 3).forEach((insight) => {
|
|
215
|
+
responseText += `- ${insight}\n`;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Include a preview of raw text if available
|
|
220
|
+
if (result.rawText) {
|
|
221
|
+
const preview = result.rawText.slice(0, 500).replace(/\n+/g, ' ');
|
|
222
|
+
responseText += `**Content Preview:** ${preview}...\n`;
|
|
223
|
+
}
|
|
224
|
+
responseText += '\n---\n\n';
|
|
225
|
+
});
|
|
226
|
+
responseText += `\n*Note: Full content text is available in the data field for detailed analysis.*`;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
responseText += "\nNo results found. Try adjusting your search query or filters.";
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
content: [
|
|
233
|
+
{
|
|
234
|
+
type: "text",
|
|
235
|
+
text: responseText,
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
data: limitedResults, // Include full data for AI to analyze
|
|
239
|
+
};
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: "save_content",
|
|
244
|
+
description: "Save a new URL to Noverload for processing",
|
|
245
|
+
inputSchema: {
|
|
246
|
+
type: "object",
|
|
247
|
+
properties: {
|
|
248
|
+
url: {
|
|
249
|
+
type: "string",
|
|
250
|
+
description: "URL to save (YouTube, X/Twitter, Reddit, article, or PDF)",
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
required: ["url"],
|
|
254
|
+
},
|
|
255
|
+
modifies: true,
|
|
256
|
+
handler: async (client, args) => {
|
|
257
|
+
const schema = z.object({
|
|
258
|
+
url: z.string().url(),
|
|
259
|
+
});
|
|
260
|
+
const { url } = schema.parse(args);
|
|
261
|
+
const content = await client.saveContent(url);
|
|
262
|
+
return {
|
|
263
|
+
content: [
|
|
264
|
+
{
|
|
265
|
+
type: "text",
|
|
266
|
+
text: content.title ? `Saved: ${content.title}` : `Saved content from: ${new URL(url).hostname}`,
|
|
267
|
+
},
|
|
268
|
+
],
|
|
269
|
+
data: content,
|
|
270
|
+
};
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: "list_actions",
|
|
275
|
+
description: "List action items extracted from saved content",
|
|
276
|
+
inputSchema: {
|
|
277
|
+
type: "object",
|
|
278
|
+
properties: {
|
|
279
|
+
contentId: {
|
|
280
|
+
type: "string",
|
|
281
|
+
description: "Filter by content ID",
|
|
282
|
+
},
|
|
283
|
+
goalId: {
|
|
284
|
+
type: "string",
|
|
285
|
+
description: "Filter by goal ID",
|
|
286
|
+
},
|
|
287
|
+
completed: {
|
|
288
|
+
type: "boolean",
|
|
289
|
+
description: "Filter by completion status",
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
modifies: false,
|
|
294
|
+
handler: async (client, args) => {
|
|
295
|
+
const schema = z.object({
|
|
296
|
+
contentId: z.string().optional(),
|
|
297
|
+
goalId: z.string().optional(),
|
|
298
|
+
completed: z.boolean().optional(),
|
|
299
|
+
});
|
|
300
|
+
const params = schema.parse(args);
|
|
301
|
+
const actions = await client.listActions(params);
|
|
302
|
+
return {
|
|
303
|
+
content: [
|
|
304
|
+
{
|
|
305
|
+
type: "text",
|
|
306
|
+
text: `Found ${actions.length} actions`,
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
data: actions,
|
|
310
|
+
};
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: "complete_action",
|
|
315
|
+
description: "Mark an action item as completed",
|
|
316
|
+
inputSchema: {
|
|
317
|
+
type: "object",
|
|
318
|
+
properties: {
|
|
319
|
+
actionId: {
|
|
320
|
+
type: "string",
|
|
321
|
+
description: "The ID of the action to complete",
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
required: ["actionId"],
|
|
325
|
+
},
|
|
326
|
+
modifies: true,
|
|
327
|
+
handler: async (client, args) => {
|
|
328
|
+
const schema = z.object({
|
|
329
|
+
actionId: z.string(),
|
|
330
|
+
});
|
|
331
|
+
const { actionId } = schema.parse(args);
|
|
332
|
+
const action = await client.completeAction(actionId);
|
|
333
|
+
return {
|
|
334
|
+
content: [
|
|
335
|
+
{
|
|
336
|
+
type: "text",
|
|
337
|
+
text: `Completed action: ${action.title}`,
|
|
338
|
+
},
|
|
339
|
+
],
|
|
340
|
+
data: action,
|
|
341
|
+
};
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
name: "list_goals",
|
|
346
|
+
description: "List user's goals (Health, Wealth, Relationships)",
|
|
347
|
+
inputSchema: {
|
|
348
|
+
type: "object",
|
|
349
|
+
properties: {},
|
|
350
|
+
},
|
|
351
|
+
modifies: false,
|
|
352
|
+
handler: async (client) => {
|
|
353
|
+
const goals = await client.listGoals();
|
|
354
|
+
return {
|
|
355
|
+
content: [
|
|
356
|
+
{
|
|
357
|
+
type: "text",
|
|
358
|
+
text: `Found ${goals.length} goals`,
|
|
359
|
+
},
|
|
360
|
+
],
|
|
361
|
+
data: goals,
|
|
362
|
+
};
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
];
|
|
366
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "noverload-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for Noverload - Access saved content in AI tools",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"noverload-mcp": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"mcp",
|
|
13
|
+
"model-context-protocol",
|
|
14
|
+
"ai",
|
|
15
|
+
"claude",
|
|
16
|
+
"cursor",
|
|
17
|
+
"windsurf",
|
|
18
|
+
"noverload",
|
|
19
|
+
"knowledge-management"
|
|
20
|
+
],
|
|
21
|
+
"author": "Noverload",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"homepage": "https://github.com/noverload/mcp-server",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/noverload/mcp-server.git"
|
|
27
|
+
},
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/noverload/mcp-server/issues"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"dev": "tsx watch src/index.ts",
|
|
34
|
+
"start": "node dist/index.js",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"test": "vitest"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@modelcontextprotocol/sdk": "^0.6.0",
|
|
40
|
+
"zod": "^3.22.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^20.0.0",
|
|
44
|
+
"tsx": "^4.0.0",
|
|
45
|
+
"typescript": "^5.0.0",
|
|
46
|
+
"vitest": "^1.0.0"
|
|
47
|
+
},
|
|
48
|
+
"files": [
|
|
49
|
+
"dist",
|
|
50
|
+
"README.md"
|
|
51
|
+
],
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
54
|
+
}
|
|
55
|
+
}
|