outline-mcp-server 5.2.0 → 5.3.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 +6 -7
- package/build/dxt.js +50 -0
- package/build/utils/getMcpServer.js +1 -1
- package/build/utils/logger.js +16 -0
- package/package.json +4 -1
package/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Outline MCP Server
|
2
2
|
|
3
|
-
[](https://cursor.com/install-mcp?name=outline&config=
|
3
|
+
[](https://cursor.com/install-mcp?name=outline&config=eyJjb21tYW5kIjoibnB4IC15IC0tcGFja2FnZT1vdXRsaW5lLW1jcC1zZXJ2ZXJAbGF0ZXN0IC1jIG91dGxpbmUtbWNwLXNlcnZlci1zdGRpbyIsImVudiI6eyJPVVRMSU5FX0FQSV9LRVkiOiI8UkVQTEFDRV9NRT4iLCJPVVRMSU5FX0FQSV9VUkwiOiJodHRwczovL2FwcC5nZXRvdXRsaW5lLmNvbS9hcGkifX0%3D)
|
4
4
|
|
5
5
|
 • 
|
6
6
|
|
@@ -15,7 +15,6 @@ A Model Context Protocol (MCP) server that provides tools for interacting with [
|
|
15
15
|
## Features
|
16
16
|
|
17
17
|
- **Document Management**
|
18
|
-
|
19
18
|
- ✅ Create new documents with customizable properties
|
20
19
|
- ✅ Get document details
|
21
20
|
- ✅ Update existing documents
|
@@ -28,13 +27,11 @@ A Model Context Protocol (MCP) server that provides tools for interacting with [
|
|
28
27
|
- ✅ Archive documents
|
29
28
|
|
30
29
|
- **Collection Management**
|
31
|
-
|
32
30
|
- ✅ Get collection details
|
33
31
|
- ✅ List collections
|
34
32
|
- ✅ Create and update collections
|
35
33
|
|
36
34
|
- **Comment Management**
|
37
|
-
|
38
35
|
- ✅ Create comments on documents
|
39
36
|
- ✅ Update existing comments
|
40
37
|
- ✅ Delete comments
|
@@ -51,14 +48,16 @@ A Model Context Protocol (MCP) server that provides tools for interacting with [
|
|
51
48
|
- Outline API key with appropriate permissions
|
52
49
|
- Note: if you need to use the AI-powered ask feature, you must enable the "AI Answers" feature in your Outline Workspace settings
|
53
50
|
|
54
|
-
### Running
|
51
|
+
### Running
|
52
|
+
|
53
|
+
`outline-mcp-server` supports the latest streamable-http protocol, the deprecated sse protocol, and good ole fashioned stdio.
|
55
54
|
|
56
55
|
```bash
|
57
56
|
# S-HTTP/SSE servers
|
58
|
-
OUTLINE_API_KEY=... npx outline-mcp-server@latest
|
57
|
+
OUTLINE_API_KEY=... npx -y outline-mcp-server@latest
|
59
58
|
|
60
59
|
# STDIO
|
61
|
-
OUTLINE_API_KEY=... npx outline-mcp-server
|
60
|
+
OUTLINE_API_KEY=... npx -y --package=outline-mcp-server@latest -c outline-mcp-server-stdio
|
62
61
|
```
|
63
62
|
|
64
63
|
### Cursor (mcp.json)
|
package/build/dxt.js
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
/**
|
3
|
+
* Outline MCP Desktop Extension (DXT) Server
|
4
|
+
*/
|
5
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
6
|
+
import toolRegistry from './utils/toolRegistry.js';
|
7
|
+
import { getMcpServer } from './utils/getMcpServer.js';
|
8
|
+
import logger from './utils/logger.js';
|
9
|
+
// Configuration - Note: environment variables are set by the DXT runtime
|
10
|
+
const CONFIG = {
|
11
|
+
OUTLINE_API_KEY: process.env.OUTLINE_API_KEY,
|
12
|
+
OUTLINE_API_URL: process.env.OUTLINE_API_URL || 'https://app.getoutline.com/api',
|
13
|
+
};
|
14
|
+
// Error handling for uncaught exceptions
|
15
|
+
process.on('uncaughtException', (error) => {
|
16
|
+
logger.error('Uncaught exception:', error);
|
17
|
+
process.exit(1);
|
18
|
+
});
|
19
|
+
process.on('unhandledRejection', (reason, promise) => {
|
20
|
+
logger.error('Unhandled rejection at:', promise, 'reason:', reason);
|
21
|
+
process.exit(1);
|
22
|
+
});
|
23
|
+
// Graceful shutdown
|
24
|
+
process.on('SIGINT', () => {
|
25
|
+
logger.info('Received SIGINT, shutting down gracefully');
|
26
|
+
process.exit(0);
|
27
|
+
});
|
28
|
+
process.on('SIGTERM', () => {
|
29
|
+
logger.info('Received SIGTERM, shutting down gracefully');
|
30
|
+
process.exit(0);
|
31
|
+
});
|
32
|
+
// Start the server
|
33
|
+
async function startServer() {
|
34
|
+
try {
|
35
|
+
logger.info('Starting Outline MCP DXT Server...');
|
36
|
+
const server = await getMcpServer();
|
37
|
+
const transport = new StdioServerTransport();
|
38
|
+
await server.connect(transport);
|
39
|
+
logger.info('Outline MCP DXT Server started successfully');
|
40
|
+
logger.info('Server configuration:', {
|
41
|
+
apiUrl: CONFIG.OUTLINE_API_URL,
|
42
|
+
toolsLoaded: `${toolRegistry.tools.length} tools loaded: ${toolRegistry.tools.map(t => t.name).join(', ')}`,
|
43
|
+
});
|
44
|
+
}
|
45
|
+
catch (error) {
|
46
|
+
logger.error('Failed to start server:', error);
|
47
|
+
process.exit(1);
|
48
|
+
}
|
49
|
+
}
|
50
|
+
startServer();
|
@@ -3,7 +3,7 @@ import { loadAllTools } from './loadAllTools.js';
|
|
3
3
|
// Helper to create a new MCP server instance with all tools registered
|
4
4
|
export async function getMcpServer() {
|
5
5
|
const server = new McpServer({
|
6
|
-
name: 'outline-mcp',
|
6
|
+
name: process.env.npm_package_name || 'outline-mcp-server',
|
7
7
|
version: process.env.npm_package_version || 'unknown',
|
8
8
|
description: 'Outline Model Context Protocol server',
|
9
9
|
});
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/** Using console.error to guarantee stderr output in logs */
|
2
|
+
const logger = {
|
3
|
+
error: (message, ...args) => {
|
4
|
+
console.error(`[ERROR] ${message}`, ...args);
|
5
|
+
},
|
6
|
+
warn: (message, ...args) => {
|
7
|
+
console.error(`[WARN] ${message}`, ...args);
|
8
|
+
},
|
9
|
+
info: (message, ...args) => {
|
10
|
+
console.error(`[INFO] ${message}`, ...args);
|
11
|
+
},
|
12
|
+
debug: (message, ...args) => {
|
13
|
+
console.error(`[DEBUG] ${message}`, ...args);
|
14
|
+
},
|
15
|
+
};
|
16
|
+
export default logger;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "outline-mcp-server",
|
3
|
-
"version": "5.
|
3
|
+
"version": "5.3.0",
|
4
4
|
"description": "An MCP server for interacting with Outline's API",
|
5
5
|
"type": "module",
|
6
6
|
"bin": {
|
@@ -20,10 +20,12 @@
|
|
20
20
|
},
|
21
21
|
"scripts": {
|
22
22
|
"build": "tsc && chmod +x build/index.js && chmod +x build/stdio.js",
|
23
|
+
"build:dxt": "./scripts/build-dxt.sh",
|
23
24
|
"prepare": "npm run build",
|
24
25
|
"watch": "bun --watch src/index.ts",
|
25
26
|
"watch:stdio": "bun --watch src/stdio.ts",
|
26
27
|
"dev": "concurrently -n 'build,inspector' -c 'blue.bold,green.bold' 'npm run watch' 'npm run inspector'",
|
28
|
+
"run-dxt": "dotenv bun src/dxt.ts",
|
27
29
|
"inspector": "npx @modelcontextprotocol/inspector@latest",
|
28
30
|
"start": "bun build/index.js",
|
29
31
|
"format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json}\"",
|
@@ -43,6 +45,7 @@
|
|
43
45
|
"@types/node": "20.19.1",
|
44
46
|
"bun": "^1.2.17",
|
45
47
|
"concurrently": "^9.2.0",
|
48
|
+
"dotenv-cli": "^8.0.0",
|
46
49
|
"prettier": "3.6.0",
|
47
50
|
"semantic-release": "^22.0.12",
|
48
51
|
"typescript": "5.x"
|