@softeria/ms-365-mcp-server 0.4.10 → 0.5.1

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 CHANGED
@@ -96,6 +96,8 @@ When running as an MCP server, the following options can be used:
96
96
  ```
97
97
  -v Enable verbose logging
98
98
  --read-only Start server in read-only mode, disabling write operations
99
+ --http [port] Use Streamable HTTP transport instead of stdio (optionally specify port, default: 3000)
100
+ Starts Express.js server with MCP endpoint at /mcp
99
101
  ```
100
102
 
101
103
  Environment variables:
@@ -111,7 +113,7 @@ Environment variables:
111
113
  If you're having problems or need help:
112
114
 
113
115
  - Create an [issue](https://github.com/softeria/ms-365-mcp-server/issues)
114
- - Start a [discussion](https://github.com/softeria/ms-365-mcp-server/discussions)
116
+ - Start a [discussion](https://github.com/softeria/ms-365-mcp-server/discussions)
115
117
  - Email: eirikb@eirikb.no
116
118
  - Discord: https://discord.gg/WvGVNScrAZ or @eirikb
117
119
 
package/dist/cli.js CHANGED
@@ -15,7 +15,8 @@ program
15
15
  .option('--login', 'Login using device code flow')
16
16
  .option('--logout', 'Log out and clear saved credentials')
17
17
  .option('--verify-login', 'Verify login without starting the server')
18
- .option('--read-only', 'Start server in read-only mode, disabling write operations');
18
+ .option('--read-only', 'Start server in read-only mode, disabling write operations')
19
+ .option('--http [port]', 'Use Streamable HTTP transport instead of stdio (optionally specify port, default: 3000)');
19
20
  export function parseArgs() {
20
21
  program.parse();
21
22
  const options = program.opts();
package/dist/server.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
4
+ import express from 'express';
3
5
  import logger, { enableConsoleLogging } from './logger.js';
4
6
  import { registerAuthTools } from './auth-tools.js';
5
7
  import { registerGraphTools } from './graph-tools.js';
@@ -27,9 +29,44 @@ class MicrosoftGraphServer {
27
29
  if (this.options.readOnly) {
28
30
  logger.info('Server running in READ-ONLY mode. Write operations are disabled.');
29
31
  }
30
- const transport = new StdioServerTransport();
31
- await this.server.connect(transport);
32
- logger.info('Server connected to transport');
32
+ if (this.options.http) {
33
+ const port = typeof this.options.http === 'string' ? parseInt(this.options.http) : 3000;
34
+ const app = express();
35
+ app.use(express.json());
36
+ app.post('/mcp', async (req, res) => {
37
+ try {
38
+ const transport = new StreamableHTTPServerTransport({
39
+ sessionIdGenerator: undefined, // Stateless mode
40
+ });
41
+ res.on('close', () => {
42
+ transport.close();
43
+ });
44
+ await this.server.connect(transport);
45
+ await transport.handleRequest(req, res, req.body);
46
+ }
47
+ catch (error) {
48
+ logger.error('Error handling MCP request:', error);
49
+ if (!res.headersSent) {
50
+ res.status(500).json({
51
+ jsonrpc: '2.0',
52
+ error: {
53
+ code: -32603,
54
+ message: 'Internal server error',
55
+ },
56
+ id: null,
57
+ });
58
+ }
59
+ }
60
+ });
61
+ app.listen(port, () => {
62
+ logger.info(`Server listening on HTTP port ${port} at /mcp endpoint`);
63
+ });
64
+ }
65
+ else {
66
+ const transport = new StdioServerTransport();
67
+ await this.server.connect(transport);
68
+ logger.info('Server connected to stdio transport');
69
+ }
33
70
  }
34
71
  }
35
72
  export default MicrosoftGraphServer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softeria/ms-365-mcp-server",
3
- "version": "0.4.10",
3
+ "version": "0.5.1",
4
4
  "description": "Microsoft 365 MCP Server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -32,6 +32,7 @@
32
32
  "@azure/msal-node": "^2.1.0",
33
33
  "@modelcontextprotocol/sdk": "^1.8.0",
34
34
  "commander": "^11.1.0",
35
+ "express": "^5.1.0",
35
36
  "js-yaml": "^4.1.0",
36
37
  "keytar": "^7.9.0",
37
38
  "winston": "^3.17.0",
@@ -39,6 +40,7 @@
39
40
  },
40
41
  "devDependencies": {
41
42
  "@redocly/cli": "^1.34.3",
43
+ "@types/express": "^5.0.3",
42
44
  "@types/node": "^22.15.15",
43
45
  "prettier": "^3.5.3",
44
46
  "tsx": "^4.19.4",