Skip to content

Commit 05428a7

Browse files
authored
Merge branch 'main' into patch-1
2 parents 8f39f5c + 626dc0a commit 05428a7

13 files changed

Lines changed: 247 additions & 55 deletions

File tree

README.md

Lines changed: 109 additions & 10 deletions
Large diffs are not rendered by default.

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/everything/README.md

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,18 +173,45 @@ Optionally, you can add it to a file called `.vscode/mcp.json` in your workspace
173173
}
174174
```
175175

176-
## Run with [HTTP+SSE Transport](https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#http-with-sse) (deprecated as of [2025-03-26](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports))
176+
## Running from source with [HTTP+SSE Transport](https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#http-with-sse) (deprecated as of [2025-03-26](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports))
177177

178178
```shell
179179
cd src/everything
180180
npm install
181181
npm run start:sse
182182
```
183183

184-
## Run with [Streamable HTTP Transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http)
184+
## Run from source with [Streamable HTTP Transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http)
185185

186186
```shell
187187
cd src/everything
188188
npm install
189189
npm run start:streamableHttp
190190
```
191+
192+
## Running as an installed package
193+
### Install
194+
```shell
195+
npm install -g @modelcontextprotocol/server-everything@latest
196+
````
197+
198+
### Run the default (stdio) server
199+
```shell
200+
npx @modelcontextprotocol/server-everything
201+
```
202+
203+
### Or specify stdio explicitly
204+
```shell
205+
npx @modelcontextprotocol/server-everything stdio
206+
```
207+
208+
### Run the SSE server
209+
```shell
210+
npx @modelcontextprotocol/server-everything sse
211+
```
212+
213+
### Run the streamable HTTP server
214+
```shell
215+
npx @modelcontextprotocol/server-everything streamableHttp
216+
```
217+

src/everything/index.ts

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,37 @@
11
#!/usr/bin/env node
22

3-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4-
import { createServer } from "./everything.js";
3+
// Parse command line arguments first
4+
const args = process.argv.slice(2);
5+
const scriptName = args[0] || 'stdio';
56

6-
async function main() {
7-
const transport = new StdioServerTransport();
8-
const { server, cleanup } = createServer();
9-
10-
await server.connect(transport);
11-
12-
// Cleanup on exit
13-
process.on("SIGINT", async () => {
14-
await cleanup();
15-
await server.close();
16-
process.exit(0);
17-
});
7+
async function run() {
8+
try {
9+
// Dynamically import only the requested module to prevent all modules from initializing
10+
switch (scriptName) {
11+
case 'stdio':
12+
// Import and run the default server
13+
await import('./stdio.js');
14+
break;
15+
case 'sse':
16+
// Import and run the SSE server
17+
await import('./sse.js');
18+
break;
19+
case 'streamableHttp':
20+
// Import and run the streamable HTTP server
21+
await import('./streamableHttp.js');
22+
break;
23+
default:
24+
console.error(`Unknown script: ${scriptName}`);
25+
console.log('Available scripts:');
26+
console.log('- stdio');
27+
console.log('- sse');
28+
console.log('- streamableHttp');
29+
process.exit(1);
30+
}
31+
} catch (error) {
32+
console.error('Error running script:', error);
33+
process.exit(1);
34+
}
1835
}
1936

20-
main().catch((error) => {
21-
console.error("Server error:", error);
22-
process.exit(1);
23-
});
37+
run();

src/everything/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"start:streamableHttp": "node dist/streamableHttp.js"
2323
},
2424
"dependencies": {
25-
"@modelcontextprotocol/sdk": "^1.10.1",
25+
"@modelcontextprotocol/sdk": "^1.11.0",
2626
"express": "^4.21.1",
2727
"zod": "^3.23.8",
2828
"zod-to-json-schema": "^3.23.5"

src/everything/sse.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,40 @@ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
22
import express from "express";
33
import { createServer } from "./everything.js";
44

5+
console.error('Starting SSE server...');
6+
57
const app = express();
68

79
const { server, cleanup } = createServer();
810

911
let transport: SSEServerTransport;
1012

1113
app.get("/sse", async (req, res) => {
12-
console.log("Received connection");
14+
console.error("Received connection");
1315
transport = new SSEServerTransport("/message", res);
1416
await server.connect(transport);
1517

1618
server.onclose = async () => {
1719
await cleanup();
1820
await server.close();
19-
process.exit(0);
2021
};
22+
2123
});
2224

2325
app.post("/message", async (req, res) => {
24-
console.log("Received message");
26+
console.error("Received message");
2527

2628
await transport.handlePostMessage(req, res);
2729
});
2830

31+
process.on("SIGINT", async () => {
32+
await cleanup();
33+
await server.close();
34+
process.exit(0);
35+
});
36+
2937
const PORT = process.env.PORT || 3001;
3038
app.listen(PORT, () => {
31-
console.log(`Server is running on port ${PORT}`);
39+
console.error(`Server is running on port ${PORT}`);
3240
});
41+

src/everything/stdio.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/bin/env node
2+
3+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4+
import { createServer } from "./everything.js";
5+
6+
console.error('Starting default (STDIO) server...');
7+
8+
async function main() {
9+
const transport = new StdioServerTransport();
10+
const {server, cleanup} = createServer();
11+
12+
await server.connect(transport);
13+
14+
// Cleanup on exit
15+
process.on("SIGINT", async () => {
16+
await cleanup();
17+
await server.close();
18+
process.exit(0);
19+
});
20+
}
21+
22+
main().catch((error) => {
23+
console.error("Server error:", error);
24+
process.exit(1);
25+
});
26+

src/everything/streamableHttp.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ import express, { Request, Response } from "express";
44
import { createServer } from "./everything.js";
55
import { randomUUID } from 'node:crypto';
66

7+
console.error('Starting Streamable HTTP server...');
8+
79
const app = express();
810

911
const { server, cleanup } = createServer();
1012

1113
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
1214

1315
app.post('/mcp', async (req: Request, res: Response) => {
14-
console.log('Received MCP POST request');
16+
console.error('Received MCP POST request');
1517
try {
1618
// Check for existing session ID
1719
const sessionId = req.headers['mcp-session-id'] as string | undefined;
@@ -29,7 +31,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
2931
onsessioninitialized: (sessionId) => {
3032
// Store the transport by session ID when session is initialized
3133
// This avoids race conditions where requests might come in before the session is stored
32-
console.log(`Session initialized with ID: ${sessionId}`);
34+
console.error(`Session initialized with ID: ${sessionId}`);
3335
transports[sessionId] = transport;
3436
}
3537
});
@@ -38,7 +40,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
3840
transport.onclose = () => {
3941
const sid = transport.sessionId;
4042
if (sid && transports[sid]) {
41-
console.log(`Transport closed for session ${sid}, removing from transports map`);
43+
console.error(`Transport closed for session ${sid}, removing from transports map`);
4244
delete transports[sid];
4345
}
4446
};
@@ -83,7 +85,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
8385

8486
// Handle GET requests for SSE streams (using built-in support from StreamableHTTP)
8587
app.get('/mcp', async (req: Request, res: Response) => {
86-
console.log('Received MCP GET request');
88+
console.error('Received MCP GET request');
8789
const sessionId = req.headers['mcp-session-id'] as string | undefined;
8890
if (!sessionId || !transports[sessionId]) {
8991
res.status(400).json({
@@ -100,9 +102,9 @@ app.get('/mcp', async (req: Request, res: Response) => {
100102
// Check for Last-Event-ID header for resumability
101103
const lastEventId = req.headers['last-event-id'] as string | undefined;
102104
if (lastEventId) {
103-
console.log(`Client reconnecting with Last-Event-ID: ${lastEventId}`);
105+
console.error(`Client reconnecting with Last-Event-ID: ${lastEventId}`);
104106
} else {
105-
console.log(`Establishing new SSE stream for session ${sessionId}`);
107+
console.error(`Establishing new SSE stream for session ${sessionId}`);
106108
}
107109

108110
const transport = transports[sessionId];
@@ -124,7 +126,7 @@ app.delete('/mcp', async (req: Request, res: Response) => {
124126
return;
125127
}
126128

127-
console.log(`Received session termination request for session ${sessionId}`);
129+
console.error(`Received session termination request for session ${sessionId}`);
128130

129131
try {
130132
const transport = transports[sessionId];
@@ -148,17 +150,17 @@ app.delete('/mcp', async (req: Request, res: Response) => {
148150
// Start the server
149151
const PORT = process.env.PORT || 3001;
150152
app.listen(PORT, () => {
151-
console.log(`MCP Streamable HTTP Server listening on port ${PORT}`);
153+
console.error(`MCP Streamable HTTP Server listening on port ${PORT}`);
152154
});
153155

154156
// Handle server shutdown
155157
process.on('SIGINT', async () => {
156-
console.log('Shutting down server...');
158+
console.error('Shutting down server...');
157159

158160
// Close all active transports to properly clean up resources
159161
for (const sessionId in transports) {
160162
try {
161-
console.log(`Closing transport for session ${sessionId}`);
163+
console.error(`Closing transport for session ${sessionId}`);
162164
await transports[sessionId].close();
163165
delete transports[sessionId];
164166
} catch (error) {
@@ -167,6 +169,6 @@ process.on('SIGINT', async () => {
167169
}
168170
await cleanup();
169171
await server.close();
170-
console.log('Server shutdown complete');
172+
console.error('Server shutdown complete');
171173
process.exit(0);
172174
});

src/fetch/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
A Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.
44

5+
> [!CAUTION]
6+
> This server can access local/internal IP addresses and may represent a security risk. Exercise caution when using this MCP server to ensure this does not expose any sensitive data.
7+
58
The fetch tool will truncate the response, but by using the `start_index` argument, you can specify where to start the content extraction. This lets models read a webpage in chunks, until they find the information they need.
69

710
### Available Tools

src/gdrive/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,10 @@ Once authenticated, you can use the server in your app's server configuration:
8484
"args": [
8585
"-y",
8686
"@modelcontextprotocol/server-gdrive"
87-
]
87+
],
88+
"env": {
89+
"GDRIVE_CREDENTIALS_PATH": "/path/to/.gdrive-server-credentials.json"
90+
}
8891
}
8992
}
9093
}

0 commit comments

Comments
 (0)