agent-planner-mcp 0.3.1 → 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/AGENT_GUIDE.md +257 -0
- package/LICENSE +21 -0
- package/README.md +128 -247
- package/SKILL.md +438 -0
- package/package.json +24 -7
- package/src/api-client.js +506 -115
- package/src/index.js +60 -27
- package/src/integrations/search-integration.js +3 -5
- package/src/server-http.js +569 -0
- package/src/session-manager.js +223 -0
- package/src/setup.js +1 -1
- package/src/tools/search-wrapper.js +12 -6
- package/src/tools.js +1983 -159
- package/claude-code/AUTONOMOUS_EXECUTION_GUIDE.md +0 -335
- package/claude-code/commands/README.md +0 -112
- package/claude-code/commands/create-plan.md +0 -174
- package/claude-code/commands/execute-plan.md +0 -202
- package/claude-code/commands/plan-status.md +0 -145
- package/claude-code/settings.template.json +0 -12
package/src/index.js
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
|
|
3
3
|
const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
4
|
+
const { MCPHTTPServer } = require('./server-http');
|
|
4
5
|
const { setupTools } = require('./tools');
|
|
6
|
+
const { version } = require('../package.json');
|
|
5
7
|
require('dotenv').config();
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* Initialize the Planning System MCP Server
|
|
9
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* Supports two transport modes:
|
|
13
|
+
* - stdio: For local use with Claude Desktop, Claude Code, etc.
|
|
14
|
+
* - http: For remote access via Anthropic's MCP Connector
|
|
15
|
+
*
|
|
16
|
+
* Set MCP_TRANSPORT=http to use HTTP mode
|
|
17
|
+
*
|
|
10
18
|
* Features:
|
|
11
19
|
* - Simplified architecture with tools-only interface
|
|
12
20
|
* - Full CRUD operations on all entities
|
|
@@ -17,47 +25,72 @@ require('dotenv').config();
|
|
|
17
25
|
*/
|
|
18
26
|
async function main() {
|
|
19
27
|
const isDev = process.env.NODE_ENV === 'development';
|
|
20
|
-
|
|
28
|
+
const transport = process.env.MCP_TRANSPORT || 'stdio';
|
|
29
|
+
|
|
21
30
|
if (isDev) {
|
|
22
31
|
console.error('Initializing Planning System MCP Server...');
|
|
32
|
+
console.error(`Transport mode: ${transport}`);
|
|
23
33
|
}
|
|
24
|
-
|
|
34
|
+
|
|
25
35
|
try {
|
|
26
36
|
// Log environment settings
|
|
27
37
|
console.error(`API URL: ${process.env.API_URL || 'http://localhost:3000'}`);
|
|
28
|
-
|
|
38
|
+
|
|
29
39
|
// Check for token
|
|
30
40
|
const userApiToken = process.env.USER_API_TOKEN || process.env.API_TOKEN;
|
|
31
41
|
console.error(`User API Token: ${userApiToken ? '***' + userApiToken.slice(-4) : 'NOT SET'}`);
|
|
32
42
|
console.error(`MCP Server Name: ${process.env.MCP_SERVER_NAME || 'planning-system-mcp'}`);
|
|
33
|
-
console.error(`MCP Server Version: ${process.env.MCP_SERVER_VERSION ||
|
|
34
|
-
|
|
43
|
+
console.error(`MCP Server Version: ${process.env.MCP_SERVER_VERSION || version}`);
|
|
44
|
+
|
|
35
45
|
// Validate required environment variables
|
|
36
46
|
if (!userApiToken) {
|
|
37
47
|
throw new Error('USER_API_TOKEN environment variable is required. Please generate one from the Agent Planner UI and set it in .env file.');
|
|
38
48
|
}
|
|
39
|
-
|
|
40
|
-
// Create MCP server instance
|
|
41
|
-
const server = new Server({
|
|
42
|
-
name: process.env.MCP_SERVER_NAME || "planning-system-mcp",
|
|
43
|
-
version: process.env.MCP_SERVER_VERSION || "0.2.0"
|
|
44
|
-
}, {
|
|
45
|
-
capabilities: {
|
|
46
|
-
tools: {}
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
if (transport === 'http') {
|
|
51
|
+
// HTTP/SSE transport mode
|
|
52
|
+
const httpServer = new MCPHTTPServer({
|
|
53
|
+
port: process.env.PORT || 3100,
|
|
54
|
+
host: process.env.HOST || '127.0.0.1'
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
await httpServer.start();
|
|
58
|
+
|
|
59
|
+
// Handle graceful shutdown
|
|
60
|
+
process.on('SIGINT', async () => {
|
|
61
|
+
console.error('\nShutting down MCP HTTP Server...');
|
|
62
|
+
await httpServer.stop();
|
|
63
|
+
process.exit(0);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
process.on('SIGTERM', async () => {
|
|
67
|
+
console.error('\nShutting down MCP HTTP Server...');
|
|
68
|
+
await httpServer.stop();
|
|
69
|
+
process.exit(0);
|
|
70
|
+
});
|
|
71
|
+
} else {
|
|
72
|
+
// Stdio transport mode (default)
|
|
73
|
+
const server = new Server({
|
|
74
|
+
name: process.env.MCP_SERVER_NAME || "planning-system-mcp",
|
|
75
|
+
version: process.env.MCP_SERVER_VERSION || version
|
|
76
|
+
}, {
|
|
77
|
+
capabilities: {
|
|
78
|
+
tools: {}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
console.error('MCP Server created');
|
|
83
|
+
|
|
84
|
+
// Setup tools
|
|
85
|
+
setupTools(server);
|
|
86
|
+
|
|
87
|
+
// Connect transport
|
|
88
|
+
const stdioTransport = new StdioServerTransport();
|
|
89
|
+
await server.connect(stdioTransport);
|
|
90
|
+
|
|
91
|
+
console.error('MCP Server running on stdio transport');
|
|
92
|
+
console.error('Ready to accept connections from agents');
|
|
93
|
+
}
|
|
61
94
|
} catch (error) {
|
|
62
95
|
console.error('Failed to initialize MCP server:', error);
|
|
63
96
|
process.exit(1);
|
|
@@ -49,8 +49,7 @@ async function findContentInPlan(planId, query) {
|
|
|
49
49
|
nodes: results.filter(r => r.type === 'node'),
|
|
50
50
|
comments: results.filter(r => r.type === 'comment'),
|
|
51
51
|
logs: results.filter(r => r.type === 'log'),
|
|
52
|
-
|
|
53
|
-
other: results.filter(r => !['node', 'comment', 'log', 'artifact'].includes(r.type))
|
|
52
|
+
other: results.filter(r => !['node', 'comment', 'log'].includes(r.type))
|
|
54
53
|
};
|
|
55
54
|
|
|
56
55
|
// Add summary information
|
|
@@ -62,7 +61,6 @@ async function findContentInPlan(planId, query) {
|
|
|
62
61
|
nodes: organizedResults.nodes.length,
|
|
63
62
|
comments: organizedResults.comments.length,
|
|
64
63
|
logs: organizedResults.logs.length,
|
|
65
|
-
artifacts: organizedResults.artifacts.length,
|
|
66
64
|
other: organizedResults.other.length
|
|
67
65
|
},
|
|
68
66
|
results: organizedResults
|
|
@@ -73,8 +71,8 @@ async function findContentInPlan(planId, query) {
|
|
|
73
71
|
query,
|
|
74
72
|
planId,
|
|
75
73
|
resultCount: 0,
|
|
76
|
-
typeBreakdown: { nodes: 0, comments: 0, logs: 0,
|
|
77
|
-
results: { nodes: [], comments: [], logs: [],
|
|
74
|
+
typeBreakdown: { nodes: 0, comments: 0, logs: 0, other: 0 },
|
|
75
|
+
results: { nodes: [], comments: [], logs: [], other: [] }
|
|
78
76
|
};
|
|
79
77
|
}
|
|
80
78
|
}
|