outline-mcp-server 5.2.1 → 5.3.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
@@ -1,16 +1,22 @@
1
1
  # Outline MCP Server
2
2
 
3
- [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=outline&config=eyJjb21tYW5kIjoibnB4IC15IC0tcGFja2FnZT1vdXRsaW5lLW1jcC1zZXJ2ZXJAbGF0ZXN0IC1jIG91dGxpbmUtbWNwLXNlcnZlci1zdGRpbyIsImVudiI6eyJPVVRMSU5FX0FQSV9LRVkiOiI8UkVQTEFDRV9NRT4iLCJPVVRMSU5FX0FQSV9VUkwiOiJodHRwczovL2FwcC5nZXRvdXRsaW5lLmNvbS9hcGkiLCJPVVRMSU5FX01DUF9QT1JUIjoiNjA2MCJ9fQ%3D%3D)
4
-
5
3
  ![npm](https://img.shields.io/npm/v/outline-mcp-server) • ![downloads](https://img.shields.io/npm/dy/outline-mcp-server)
6
4
 
7
5
  A Model Context Protocol (MCP) server that provides tools for interacting with [Outline](https://www.getoutline.com/)'s API, enabling AI agents to manage documents, collections, and other entities programmatically through the Outline knowledge base platform.
8
6
 
9
- ## 🚨 \***\*Upgrade Notice:\*\*** v5 has introduced several breaking changes: 🚨
7
+ ## Quick Installation
8
+
9
+ ### Claude Desktop
10
+
11
+ 🎉 **`outline-mcp-server` now has an extension for Claude Desktop!**
12
+
13
+ You can now download a Claude Desktop extension from the [releases page](https://github.com/mmmeff/outline-mcp/releases) for quick and easy setup (just double click it).
10
14
 
11
- - the `--port` CLI flag has been migrated to an environment variable, `OUTLINE_MCP_PORT`
12
- - Minimum node version has been bumped to 20
13
- - sse & stdio were removed in 5.0.0 but later re-introduced in 5.1.0 and 5.2.0 respectively
15
+ ### Cursor
16
+
17
+ One click install in Cursor:
18
+
19
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=outline&config=eyJjb21tYW5kIjoibnB4IC15IC0tcGFja2FnZT1vdXRsaW5lLW1jcC1zZXJ2ZXJAbGF0ZXN0IC1jIG91dGxpbmUtbWNwLXNlcnZlci1zdGRpbyIsImVudiI6eyJPVVRMSU5FX0FQSV9LRVkiOiI8UkVQTEFDRV9NRT4iLCJPVVRMSU5FX0FQSV9VUkwiOiJodHRwczovL2FwcC5nZXRvdXRsaW5lLmNvbS9hcGkifX0%3D)
14
20
 
15
21
  ## Features
16
22
 
@@ -48,14 +54,16 @@ A Model Context Protocol (MCP) server that provides tools for interacting with [
48
54
  - Outline API key with appropriate permissions
49
55
  - Note: if you need to use the AI-powered ask feature, you must enable the "AI Answers" feature in your Outline Workspace settings
50
56
 
51
- ### Running directly
57
+ ### Running
58
+
59
+ `outline-mcp-server` supports the latest streamable-http protocol, the deprecated sse protocol, and good ole fashioned stdio.
52
60
 
53
61
  ```bash
54
62
  # S-HTTP/SSE servers
55
- OUTLINE_API_KEY=... npx outline-mcp-server@latest -y
63
+ OUTLINE_API_KEY=... npx -y outline-mcp-server@latest
56
64
 
57
65
  # STDIO
58
- OUTLINE_API_KEY=... npx outline-mcp-server-stdio@latest -y
66
+ OUTLINE_API_KEY=... npx -y --package=outline-mcp-server@latest -c outline-mcp-server-stdio
59
67
  ```
60
68
 
61
69
  ### 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();
@@ -33,7 +33,7 @@ toolRegistry.register('create_document', {
33
33
  if (args.template !== undefined) {
34
34
  payload.template = args.template;
35
35
  }
36
- const response = await outlineClient.post('/documents', payload);
36
+ const response = await outlineClient.post('/documents.create', payload);
37
37
  return { content: [{ type: 'text', text: JSON.stringify(response.data.data) }] };
38
38
  }
39
39
  catch (error) {
@@ -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.2.1",
3
+ "version": "5.3.1",
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"