mcp-perplexity-pro 1.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 +638 -0
- package/bin/mcp-perplexity-pro +8 -0
- package/bin/mcp-perplexity-pro-stdio +9 -0
- package/dist/claude-code-bridge.d.ts +3 -0
- package/dist/claude-code-bridge.d.ts.map +1 -0
- package/dist/claude-code-bridge.js +111 -0
- package/dist/claude-code-bridge.js.map +1 -0
- package/dist/http-index.d.ts +3 -0
- package/dist/http-index.d.ts.map +1 -0
- package/dist/http-index.js +38 -0
- package/dist/http-index.js.map +1 -0
- package/dist/http-server.d.ts +33 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +362 -0
- package/dist/http-server.js.map +1 -0
- package/dist/http-streaming-server.d.ts +4 -0
- package/dist/http-streaming-server.d.ts.map +1 -0
- package/dist/http-streaming-server.js +514 -0
- package/dist/http-streaming-server.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/launcher.d.ts +3 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +209 -0
- package/dist/launcher.js.map +1 -0
- package/dist/mcp-server.d.ts +5 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +329 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/models.d.ts +45 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +284 -0
- package/dist/models.js.map +1 -0
- package/dist/perplexity-api.d.ts +59 -0
- package/dist/perplexity-api.d.ts.map +1 -0
- package/dist/perplexity-api.js +455 -0
- package/dist/perplexity-api.js.map +1 -0
- package/dist/port-utils.d.ts +31 -0
- package/dist/port-utils.d.ts.map +1 -0
- package/dist/port-utils.js +114 -0
- package/dist/port-utils.js.map +1 -0
- package/dist/project-manager.d.ts +91 -0
- package/dist/project-manager.d.ts.map +1 -0
- package/dist/project-manager.js +422 -0
- package/dist/project-manager.js.map +1 -0
- package/dist/simple-streaming.d.ts +26 -0
- package/dist/simple-streaming.d.ts.map +1 -0
- package/dist/simple-streaming.js +75 -0
- package/dist/simple-streaming.js.map +1 -0
- package/dist/sse-index.d.ts +3 -0
- package/dist/sse-index.d.ts.map +1 -0
- package/dist/sse-index.js +38 -0
- package/dist/sse-index.js.map +1 -0
- package/dist/sse-server.d.ts +4 -0
- package/dist/sse-server.d.ts.map +1 -0
- package/dist/sse-server.js +208 -0
- package/dist/sse-server.js.map +1 -0
- package/dist/stdio-bridge.d.ts +21 -0
- package/dist/stdio-bridge.d.ts.map +1 -0
- package/dist/stdio-bridge.js +157 -0
- package/dist/stdio-bridge.js.map +1 -0
- package/dist/stdio-server.d.ts +7 -0
- package/dist/stdio-server.d.ts.map +1 -0
- package/dist/stdio-server.js +396 -0
- package/dist/stdio-server.js.map +1 -0
- package/dist/storage.d.ts +65 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +328 -0
- package/dist/storage.js.map +1 -0
- package/dist/streaming-wrapper.d.ts +63 -0
- package/dist/streaming-wrapper.d.ts.map +1 -0
- package/dist/streaming-wrapper.js +452 -0
- package/dist/streaming-wrapper.js.map +1 -0
- package/dist/tools/async.d.ts +28 -0
- package/dist/tools/async.d.ts.map +1 -0
- package/dist/tools/async.js +167 -0
- package/dist/tools/async.js.map +1 -0
- package/dist/tools/chat.d.ts +29 -0
- package/dist/tools/chat.d.ts.map +1 -0
- package/dist/tools/chat.js +233 -0
- package/dist/tools/chat.js.map +1 -0
- package/dist/tools/projects.d.ts +19 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +219 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/query.d.ts +13 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +178 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/types.d.ts +330 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +90 -0
- package/dist/types.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import { createServer } from 'http';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
const projectRoot = dirname(__dirname);
|
|
9
|
+
// Default port for Claude Code
|
|
10
|
+
const DEFAULT_PORT = 8124;
|
|
11
|
+
function log(message) {
|
|
12
|
+
console.error(`[claude-code-bridge] ${message}`);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if a port is available
|
|
16
|
+
*/
|
|
17
|
+
async function isPortAvailable(port) {
|
|
18
|
+
return new Promise(resolve => {
|
|
19
|
+
const server = createServer();
|
|
20
|
+
server.listen(port, () => {
|
|
21
|
+
server.close(() => resolve(true));
|
|
22
|
+
});
|
|
23
|
+
server.on('error', () => resolve(false));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Simple health check without AbortSignal.timeout (Node 18 compatibility)
|
|
28
|
+
*/
|
|
29
|
+
async function checkServerHealth(port) {
|
|
30
|
+
return new Promise(resolve => {
|
|
31
|
+
const timeout = setTimeout(() => {
|
|
32
|
+
resolve(false);
|
|
33
|
+
}, 2000); // 2 second timeout
|
|
34
|
+
fetch(`http://localhost:${port}/health`)
|
|
35
|
+
.then(response => {
|
|
36
|
+
clearTimeout(timeout);
|
|
37
|
+
resolve(response.ok);
|
|
38
|
+
})
|
|
39
|
+
.catch(() => {
|
|
40
|
+
clearTimeout(timeout);
|
|
41
|
+
resolve(false);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Start the HTTP server and return its process
|
|
47
|
+
*/
|
|
48
|
+
function startHttpServer(port) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
const serverPath = join(projectRoot, 'dist', 'index.js');
|
|
51
|
+
log(`Starting HTTP server on port ${port}...`);
|
|
52
|
+
const serverProcess = spawn('node', [serverPath, `--port=${port}`], {
|
|
53
|
+
stdio: 'inherit',
|
|
54
|
+
env: { ...process.env },
|
|
55
|
+
cwd: projectRoot,
|
|
56
|
+
});
|
|
57
|
+
serverProcess.on('error', error => {
|
|
58
|
+
reject(new Error(`Failed to start HTTP server: ${error.message}`));
|
|
59
|
+
});
|
|
60
|
+
// Give the server a moment to start up
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
resolve();
|
|
63
|
+
}, 1000);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async function main() {
|
|
67
|
+
try {
|
|
68
|
+
// Check if server is already running
|
|
69
|
+
if (await checkServerHealth(DEFAULT_PORT)) {
|
|
70
|
+
log(`Found existing server on port ${DEFAULT_PORT}`);
|
|
71
|
+
// For Claude Code, we need to act as a stdio bridge to the HTTP server
|
|
72
|
+
const { StdioHttpBridge } = await import('./stdio-bridge.js');
|
|
73
|
+
const bridge = new StdioHttpBridge();
|
|
74
|
+
await bridge.start();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Check if port is available
|
|
78
|
+
if (!(await isPortAvailable(DEFAULT_PORT))) {
|
|
79
|
+
throw new Error(`Port ${DEFAULT_PORT} is not available`);
|
|
80
|
+
}
|
|
81
|
+
// Start new HTTP server
|
|
82
|
+
await startHttpServer(DEFAULT_PORT);
|
|
83
|
+
// Wait for server to be healthy
|
|
84
|
+
let attempts = 0;
|
|
85
|
+
const maxAttempts = 10;
|
|
86
|
+
while (attempts < maxAttempts) {
|
|
87
|
+
if (await checkServerHealth(DEFAULT_PORT)) {
|
|
88
|
+
log(`Server is healthy on port ${DEFAULT_PORT}`);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
attempts++;
|
|
92
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
93
|
+
}
|
|
94
|
+
if (attempts >= maxAttempts) {
|
|
95
|
+
throw new Error('Server failed to become healthy after startup');
|
|
96
|
+
}
|
|
97
|
+
// Act as stdio bridge
|
|
98
|
+
const { StdioHttpBridge } = await import('./stdio-bridge.js');
|
|
99
|
+
const bridge = new StdioHttpBridge();
|
|
100
|
+
await bridge.start();
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
log(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
main().catch(error => {
|
|
108
|
+
log(`Bridge error: ${error}`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=claude-code-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-bridge.js","sourceRoot":"","sources":["../src/claude-code-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-index.d.ts","sourceRoot":"","sources":["../src/http-index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createHTTPStreamingServer } from './http-streaming-server.js';
|
|
3
|
+
import { configSchema } from './types.js';
|
|
4
|
+
// Default port
|
|
5
|
+
let PORT = 8125;
|
|
6
|
+
// Parse command-line arguments for --port=XXXX
|
|
7
|
+
for (let i = 2; i < process.argv.length; i++) {
|
|
8
|
+
const arg = process.argv[i];
|
|
9
|
+
if (arg.startsWith('--port=')) {
|
|
10
|
+
const value = parseInt(arg.split('=')[1], 10);
|
|
11
|
+
if (!isNaN(value)) {
|
|
12
|
+
PORT = value;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.error('Invalid value for --port');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// Load configuration
|
|
21
|
+
const config = {
|
|
22
|
+
api_key: process.env.PERPLEXITY_API_KEY || '',
|
|
23
|
+
default_model: 'sonar-reasoning-pro',
|
|
24
|
+
project_root: process.cwd(),
|
|
25
|
+
storage_path: '.perplexity',
|
|
26
|
+
};
|
|
27
|
+
// Validate configuration
|
|
28
|
+
const validatedConfig = configSchema.parse(config);
|
|
29
|
+
const app = createHTTPStreamingServer(validatedConfig);
|
|
30
|
+
app.listen(PORT, () => {
|
|
31
|
+
console.log(`MCP Perplexity HTTP Streaming Server listening on port ${PORT}`);
|
|
32
|
+
console.log(`Claude Code can connect using: claude mcp add --transport http perplexity-http http://localhost:${PORT}`);
|
|
33
|
+
});
|
|
34
|
+
process.on('SIGINT', () => {
|
|
35
|
+
console.log('Shutting down HTTP streaming server...');
|
|
36
|
+
process.exit(0);
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=http-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-index.js","sourceRoot":"","sources":["../src/http-index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAe;AACf,IAAI,IAAI,GAAG,IAAI,CAAC;AAEhB,+CAA+C;AAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED,qBAAqB;AACrB,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;IAC7C,aAAa,EAAE,qBAAqB;IACpC,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE;IAC3B,YAAY,EAAE,aAAa;CAC5B,CAAC;AAEF,yBAAyB;AACzB,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAEnD,MAAM,GAAG,GAAG,yBAAyB,CAAC,eAAe,CAAC,CAAC;AAEvD,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,0DAA0D,IAAI,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CACT,mGAAmG,IAAI,EAAE,CAC1G,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Request, Response } from 'express';
|
|
3
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
4
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
5
|
+
import { configSchema } from './types.js';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export declare class PerplexityHTTPServer {
|
|
8
|
+
private config;
|
|
9
|
+
server: Server;
|
|
10
|
+
transports: {
|
|
11
|
+
[sessionId: string]: StreamableHTTPServerTransport;
|
|
12
|
+
};
|
|
13
|
+
constructor(config: z.infer<typeof configSchema>);
|
|
14
|
+
handleGetRequest(req: Request, res: Response): Promise<void>;
|
|
15
|
+
handlePostRequest(req: Request, res: Response): Promise<void>;
|
|
16
|
+
cleanup(): Promise<void>;
|
|
17
|
+
private setupHandlers;
|
|
18
|
+
/**
|
|
19
|
+
* Handle a tool call with streaming LoggingMessageNotifications
|
|
20
|
+
*/
|
|
21
|
+
private handleStreamingTool;
|
|
22
|
+
/**
|
|
23
|
+
* Send a streaming message notification
|
|
24
|
+
*/
|
|
25
|
+
private sendStreamingMessage;
|
|
26
|
+
/**
|
|
27
|
+
* Split text into chunks for streaming
|
|
28
|
+
*/
|
|
29
|
+
private chunkText;
|
|
30
|
+
private createErrorResponse;
|
|
31
|
+
private isInitializeRequest;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=http-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AASnG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,qBAAa,oBAAoB;IAInB,OAAO,CAAC,MAAM;IAH1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,6BAA6B,CAAA;KAAE,CAAM;gBAEpD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC;IAiBlD,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAc5C,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAuC7C,OAAO;IAIb,OAAO,CAAC,aAAa;IAyOrB;;OAEG;YACW,mBAAmB;IAyCjC;;OAEG;YACW,oBAAoB;IAiBlC;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;CAU5B"}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, InitializeRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { randomUUID } from 'crypto';
|
|
6
|
+
import { handleAskPerplexity, handleResearchPerplexity } from './tools/query.js';
|
|
7
|
+
import { handleChatPerplexity } from './tools/chat.js';
|
|
8
|
+
const SESSION_ID_HEADER_NAME = 'mcp-session-id';
|
|
9
|
+
const JSON_RPC = '2.0';
|
|
10
|
+
export class PerplexityHTTPServer {
|
|
11
|
+
config;
|
|
12
|
+
server;
|
|
13
|
+
transports = {};
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.server = new Server({
|
|
17
|
+
name: 'mcp-perplexity-pro',
|
|
18
|
+
version: '1.0.0',
|
|
19
|
+
}, {
|
|
20
|
+
capabilities: {
|
|
21
|
+
tools: {},
|
|
22
|
+
logging: {},
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
this.setupHandlers();
|
|
26
|
+
}
|
|
27
|
+
async handleGetRequest(req, res) {
|
|
28
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
29
|
+
if (!sessionId || !this.transports[sessionId]) {
|
|
30
|
+
res.status(400).json(this.createErrorResponse('Bad Request: invalid session ID or method.'));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
console.log(`Establishing SSE stream for session ${sessionId}`);
|
|
34
|
+
const transport = this.transports[sessionId];
|
|
35
|
+
await transport.handleRequest(req, res);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
async handlePostRequest(req, res) {
|
|
39
|
+
const sessionId = req.headers[SESSION_ID_HEADER_NAME];
|
|
40
|
+
let transport;
|
|
41
|
+
try {
|
|
42
|
+
// reuse existing transport
|
|
43
|
+
if (sessionId && this.transports[sessionId]) {
|
|
44
|
+
transport = this.transports[sessionId];
|
|
45
|
+
await transport.handleRequest(req, res, req.body);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// create new transport
|
|
49
|
+
if (!sessionId && this.isInitializeRequest(req.body)) {
|
|
50
|
+
const transport = new StreamableHTTPServerTransport({
|
|
51
|
+
sessionIdGenerator: () => randomUUID(),
|
|
52
|
+
});
|
|
53
|
+
await this.server.connect(transport);
|
|
54
|
+
await transport.handleRequest(req, res, req.body);
|
|
55
|
+
// session ID will only be available after handling the first request
|
|
56
|
+
const sessionId = transport.sessionId;
|
|
57
|
+
if (sessionId) {
|
|
58
|
+
this.transports[sessionId] = transport;
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
res.status(400).json(this.createErrorResponse('Bad Request: invalid session ID or method.'));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Error handling MCP request:', error);
|
|
67
|
+
res.status(500).json(this.createErrorResponse('Internal server error.'));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async cleanup() {
|
|
72
|
+
await this.server.close();
|
|
73
|
+
}
|
|
74
|
+
setupHandlers() {
|
|
75
|
+
// List available tools
|
|
76
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
77
|
+
tools: [
|
|
78
|
+
{
|
|
79
|
+
name: 'ask_perplexity',
|
|
80
|
+
description: 'Query Perplexity with automatic model selection based on complexity.',
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
query: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
description: 'The question or topic to research',
|
|
87
|
+
},
|
|
88
|
+
model: {
|
|
89
|
+
type: 'string',
|
|
90
|
+
description: 'Override default model selection',
|
|
91
|
+
enum: [
|
|
92
|
+
'sonar',
|
|
93
|
+
'sonar-pro',
|
|
94
|
+
'sonar-reasoning',
|
|
95
|
+
'sonar-reasoning-pro',
|
|
96
|
+
'sonar-deep-research',
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
max_tokens: {
|
|
100
|
+
type: 'number',
|
|
101
|
+
description: 'Maximum response length',
|
|
102
|
+
minimum: 1,
|
|
103
|
+
},
|
|
104
|
+
temperature: {
|
|
105
|
+
type: 'number',
|
|
106
|
+
description: '0.0-1.0, default 0.2',
|
|
107
|
+
minimum: 0,
|
|
108
|
+
maximum: 1,
|
|
109
|
+
},
|
|
110
|
+
search_domain_filter: {
|
|
111
|
+
type: 'array',
|
|
112
|
+
items: { type: 'string' },
|
|
113
|
+
description: 'Limit search to specific domains',
|
|
114
|
+
},
|
|
115
|
+
return_images: {
|
|
116
|
+
type: 'boolean',
|
|
117
|
+
description: 'Include images in response',
|
|
118
|
+
},
|
|
119
|
+
return_related_questions: {
|
|
120
|
+
type: 'boolean',
|
|
121
|
+
description: 'Include related questions',
|
|
122
|
+
},
|
|
123
|
+
save_report: {
|
|
124
|
+
type: 'boolean',
|
|
125
|
+
description: 'Save response as a report to project directory',
|
|
126
|
+
},
|
|
127
|
+
project_name: {
|
|
128
|
+
type: 'string',
|
|
129
|
+
description: 'Project name for organizing conversations (auto-detected if not provided)',
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
required: ['query'],
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'research_perplexity',
|
|
137
|
+
description: 'Conduct comprehensive research using sonar-deep-research model.',
|
|
138
|
+
inputSchema: {
|
|
139
|
+
type: 'object',
|
|
140
|
+
properties: {
|
|
141
|
+
topic: {
|
|
142
|
+
type: 'string',
|
|
143
|
+
description: 'Research topic or question',
|
|
144
|
+
},
|
|
145
|
+
model: {
|
|
146
|
+
type: 'string',
|
|
147
|
+
description: 'Override default model (defaults to sonar-deep-research)',
|
|
148
|
+
enum: [
|
|
149
|
+
'sonar',
|
|
150
|
+
'sonar-pro',
|
|
151
|
+
'sonar-reasoning',
|
|
152
|
+
'sonar-reasoning-pro',
|
|
153
|
+
'sonar-deep-research',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
max_tokens: {
|
|
157
|
+
type: 'number',
|
|
158
|
+
description: 'Maximum response length',
|
|
159
|
+
minimum: 1,
|
|
160
|
+
},
|
|
161
|
+
save_report: {
|
|
162
|
+
type: 'boolean',
|
|
163
|
+
description: 'Save report to project directory',
|
|
164
|
+
},
|
|
165
|
+
project_name: {
|
|
166
|
+
type: 'string',
|
|
167
|
+
description: 'Project name for organizing research reports (auto-detected if not provided)',
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
required: ['topic'],
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: 'chat_perplexity',
|
|
175
|
+
description: 'Maintain conversations with Perplexity stored in project directory.',
|
|
176
|
+
inputSchema: {
|
|
177
|
+
type: 'object',
|
|
178
|
+
properties: {
|
|
179
|
+
message: {
|
|
180
|
+
type: 'string',
|
|
181
|
+
description: 'Your message',
|
|
182
|
+
},
|
|
183
|
+
chat_id: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
description: 'Continue existing conversation',
|
|
186
|
+
},
|
|
187
|
+
title: {
|
|
188
|
+
type: 'string',
|
|
189
|
+
description: 'Required for new chat - conversation title',
|
|
190
|
+
},
|
|
191
|
+
model: {
|
|
192
|
+
type: 'string',
|
|
193
|
+
description: 'Override default model',
|
|
194
|
+
enum: [
|
|
195
|
+
'sonar',
|
|
196
|
+
'sonar-pro',
|
|
197
|
+
'sonar-reasoning',
|
|
198
|
+
'sonar-reasoning-pro',
|
|
199
|
+
'sonar-deep-research',
|
|
200
|
+
],
|
|
201
|
+
},
|
|
202
|
+
max_tokens: {
|
|
203
|
+
type: 'number',
|
|
204
|
+
description: 'Maximum response length',
|
|
205
|
+
minimum: 1,
|
|
206
|
+
},
|
|
207
|
+
temperature: {
|
|
208
|
+
type: 'number',
|
|
209
|
+
description: '0.0-1.0, default 0.2',
|
|
210
|
+
minimum: 0,
|
|
211
|
+
maximum: 1,
|
|
212
|
+
},
|
|
213
|
+
save_report: {
|
|
214
|
+
type: 'boolean',
|
|
215
|
+
description: 'Save conversation to project directory',
|
|
216
|
+
},
|
|
217
|
+
project_name: {
|
|
218
|
+
type: 'string',
|
|
219
|
+
description: 'Project name for organizing conversations (auto-detected if not provided)',
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
required: ['message'],
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
// ... include other tools as needed
|
|
226
|
+
],
|
|
227
|
+
}));
|
|
228
|
+
// Handle tool calls with streaming support
|
|
229
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
230
|
+
const args = request.params.arguments;
|
|
231
|
+
const toolName = request.params.name;
|
|
232
|
+
if (!args || !toolName) {
|
|
233
|
+
throw new Error('Invalid tool call');
|
|
234
|
+
}
|
|
235
|
+
// Get the transport for streaming
|
|
236
|
+
const sessionId = extra?.sessionId;
|
|
237
|
+
const transport = sessionId ? this.transports[sessionId] : null;
|
|
238
|
+
try {
|
|
239
|
+
switch (toolName) {
|
|
240
|
+
case 'ask_perplexity': {
|
|
241
|
+
if (transport) {
|
|
242
|
+
// Stream the response in real-time
|
|
243
|
+
return await this.handleStreamingTool(transport, 'ask_perplexity', args, handleAskPerplexity);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// Fallback to regular response
|
|
247
|
+
return await handleAskPerplexity(args, this.config);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
case 'research_perplexity': {
|
|
251
|
+
if (transport) {
|
|
252
|
+
return await this.handleStreamingTool(transport, 'research_perplexity', args, handleResearchPerplexity);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
return await handleResearchPerplexity(args, this.config);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
case 'chat_perplexity': {
|
|
259
|
+
if (transport) {
|
|
260
|
+
return await this.handleStreamingTool(transport, 'chat_perplexity', args, handleChatPerplexity);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
const result = await handleChatPerplexity(args, this.config);
|
|
264
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Add other tool handlers here...
|
|
268
|
+
default:
|
|
269
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
return {
|
|
274
|
+
content: [
|
|
275
|
+
{
|
|
276
|
+
type: 'text',
|
|
277
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
278
|
+
},
|
|
279
|
+
],
|
|
280
|
+
isError: true,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Handle a tool call with streaming LoggingMessageNotifications
|
|
287
|
+
*/
|
|
288
|
+
async handleStreamingTool(transport, toolName, args, handler) {
|
|
289
|
+
try {
|
|
290
|
+
// Send initial streaming message
|
|
291
|
+
await this.sendStreamingMessage(transport, `🚀 Starting ${toolName}...`);
|
|
292
|
+
// Execute the tool handler
|
|
293
|
+
const result = await handler(args, this.config);
|
|
294
|
+
// Stream the result content
|
|
295
|
+
if (result && typeof result === 'object' && result.content) {
|
|
296
|
+
for (const contentItem of result.content) {
|
|
297
|
+
if (contentItem.type === 'text') {
|
|
298
|
+
// Split long text into chunks for better streaming experience
|
|
299
|
+
const chunks = this.chunkText(contentItem.text, 500);
|
|
300
|
+
for (const chunk of chunks) {
|
|
301
|
+
await this.sendStreamingMessage(transport, chunk);
|
|
302
|
+
// Small delay to create streaming effect
|
|
303
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Send completion message
|
|
309
|
+
await this.sendStreamingMessage(transport, '✅ Complete!');
|
|
310
|
+
return result;
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
await this.sendStreamingMessage(transport, `❌ Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
314
|
+
throw error;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Send a streaming message notification
|
|
319
|
+
*/
|
|
320
|
+
async sendStreamingMessage(transport, data) {
|
|
321
|
+
const message = {
|
|
322
|
+
method: 'notifications/message',
|
|
323
|
+
params: { level: 'info', data: data },
|
|
324
|
+
};
|
|
325
|
+
const rpcNotification = {
|
|
326
|
+
...message,
|
|
327
|
+
jsonrpc: JSON_RPC,
|
|
328
|
+
};
|
|
329
|
+
await transport.send(rpcNotification);
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Split text into chunks for streaming
|
|
333
|
+
*/
|
|
334
|
+
chunkText(text, chunkSize) {
|
|
335
|
+
const chunks = [];
|
|
336
|
+
for (let i = 0; i < text.length; i += chunkSize) {
|
|
337
|
+
chunks.push(text.slice(i, i + chunkSize));
|
|
338
|
+
}
|
|
339
|
+
return chunks;
|
|
340
|
+
}
|
|
341
|
+
createErrorResponse(message) {
|
|
342
|
+
return {
|
|
343
|
+
jsonrpc: '2.0',
|
|
344
|
+
error: {
|
|
345
|
+
code: -32000,
|
|
346
|
+
message: message,
|
|
347
|
+
},
|
|
348
|
+
id: randomUUID(),
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
isInitializeRequest(body) {
|
|
352
|
+
const isInitial = (data) => {
|
|
353
|
+
const result = InitializeRequestSchema.safeParse(data);
|
|
354
|
+
return result.success;
|
|
355
|
+
};
|
|
356
|
+
if (Array.isArray(body)) {
|
|
357
|
+
return body.some(request => isInitial(request));
|
|
358
|
+
}
|
|
359
|
+
return isInitial(body);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=http-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-streaming-server.d.ts","sourceRoot":"","sources":["../src/http-streaming-server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAY1C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,+CAoiB7E"}
|